Migrate to cherrypy wsgi from eventlet (#2387)
This commit is contained in:
parent
7582eb9f63
commit
d1f4901d53
13 changed files with 168 additions and 153 deletions
|
@ -1,12 +1,12 @@
|
|||
"""The tests for the Home Assistant API component."""
|
||||
# pylint: disable=protected-access,too-many-public-methods
|
||||
# from contextlib import closing
|
||||
from contextlib import closing
|
||||
import json
|
||||
import tempfile
|
||||
import time
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
|
||||
import eventlet
|
||||
import requests
|
||||
|
||||
from homeassistant import bootstrap, const
|
||||
|
@ -48,10 +48,7 @@ def setUpModule(): # pylint: disable=invalid-name
|
|||
bootstrap.setup_component(hass, 'api')
|
||||
|
||||
hass.start()
|
||||
|
||||
# To start HTTP
|
||||
# TODO fix this
|
||||
eventlet.sleep(0.05)
|
||||
time.sleep(0.05)
|
||||
|
||||
|
||||
def tearDownModule(): # pylint: disable=invalid-name
|
||||
|
@ -387,25 +384,23 @@ class TestAPI(unittest.TestCase):
|
|||
headers=HA_HEADERS)
|
||||
self.assertEqual(422, req.status_code)
|
||||
|
||||
# TODO disabled because eventlet cannot validate
|
||||
# a connection to itself, need a second instance
|
||||
# # Setup a real one
|
||||
# req = requests.post(
|
||||
# _url(const.URL_API_EVENT_FORWARD),
|
||||
# data=json.dumps({
|
||||
# 'api_password': API_PASSWORD,
|
||||
# 'host': '127.0.0.1',
|
||||
# 'port': SERVER_PORT
|
||||
# }),
|
||||
# headers=HA_HEADERS)
|
||||
# self.assertEqual(200, req.status_code)
|
||||
# Setup a real one
|
||||
req = requests.post(
|
||||
_url(const.URL_API_EVENT_FORWARD),
|
||||
data=json.dumps({
|
||||
'api_password': API_PASSWORD,
|
||||
'host': '127.0.0.1',
|
||||
'port': SERVER_PORT
|
||||
}),
|
||||
headers=HA_HEADERS)
|
||||
self.assertEqual(200, req.status_code)
|
||||
|
||||
# # Delete it again..
|
||||
# req = requests.delete(
|
||||
# _url(const.URL_API_EVENT_FORWARD),
|
||||
# data=json.dumps({}),
|
||||
# headers=HA_HEADERS)
|
||||
# self.assertEqual(400, req.status_code)
|
||||
# Delete it again..
|
||||
req = requests.delete(
|
||||
_url(const.URL_API_EVENT_FORWARD),
|
||||
data=json.dumps({}),
|
||||
headers=HA_HEADERS)
|
||||
self.assertEqual(400, req.status_code)
|
||||
|
||||
req = requests.delete(
|
||||
_url(const.URL_API_EVENT_FORWARD),
|
||||
|
@ -425,57 +420,58 @@ class TestAPI(unittest.TestCase):
|
|||
headers=HA_HEADERS)
|
||||
self.assertEqual(200, req.status_code)
|
||||
|
||||
# def test_stream(self):
|
||||
# """Test the stream."""
|
||||
# listen_count = self._listen_count()
|
||||
# with closing(requests.get(_url(const.URL_API_STREAM), timeout=3,
|
||||
# stream=True, headers=HA_HEADERS)) as req:
|
||||
def test_stream(self):
|
||||
"""Test the stream."""
|
||||
listen_count = self._listen_count()
|
||||
with closing(requests.get(_url(const.URL_API_STREAM), timeout=3,
|
||||
stream=True, headers=HA_HEADERS)) as req:
|
||||
stream = req.iter_content(1)
|
||||
self.assertEqual(listen_count + 1, self._listen_count())
|
||||
|
||||
# self.assertEqual(listen_count + 1, self._listen_count())
|
||||
hass.bus.fire('test_event')
|
||||
|
||||
# hass.bus.fire('test_event')
|
||||
data = self._stream_next_event(stream)
|
||||
|
||||
# data = self._stream_next_event(req)
|
||||
self.assertEqual('test_event', data['event_type'])
|
||||
|
||||
# self.assertEqual('test_event', data['event_type'])
|
||||
def test_stream_with_restricted(self):
|
||||
"""Test the stream with restrictions."""
|
||||
listen_count = self._listen_count()
|
||||
url = _url('{}?restrict=test_event1,test_event3'.format(
|
||||
const.URL_API_STREAM))
|
||||
with closing(requests.get(url, stream=True, timeout=3,
|
||||
headers=HA_HEADERS)) as req:
|
||||
stream = req.iter_content(1)
|
||||
self.assertEqual(listen_count + 1, self._listen_count())
|
||||
|
||||
# def test_stream_with_restricted(self):
|
||||
# """Test the stream with restrictions."""
|
||||
# listen_count = self._listen_count()
|
||||
# url = _url('{}?restrict=test_event1,test_event3'.format(
|
||||
# const.URL_API_STREAM))
|
||||
# with closing(requests.get(url, stream=True, timeout=3,
|
||||
# headers=HA_HEADERS)) as req:
|
||||
# self.assertEqual(listen_count + 1, self._listen_count())
|
||||
hass.bus.fire('test_event1')
|
||||
data = self._stream_next_event(stream)
|
||||
self.assertEqual('test_event1', data['event_type'])
|
||||
|
||||
# hass.bus.fire('test_event1')
|
||||
# data = self._stream_next_event(req)
|
||||
# self.assertEqual('test_event1', data['event_type'])
|
||||
hass.bus.fire('test_event2')
|
||||
hass.bus.fire('test_event3')
|
||||
|
||||
# hass.bus.fire('test_event2')
|
||||
# hass.bus.fire('test_event3')
|
||||
data = self._stream_next_event(stream)
|
||||
self.assertEqual('test_event3', data['event_type'])
|
||||
|
||||
# data = self._stream_next_event(req)
|
||||
# self.assertEqual('test_event3', data['event_type'])
|
||||
def _stream_next_event(self, stream):
|
||||
"""Read the stream for next event while ignoring ping."""
|
||||
while True:
|
||||
data = b''
|
||||
last_new_line = False
|
||||
for dat in stream:
|
||||
if dat == b'\n' and last_new_line:
|
||||
break
|
||||
data += dat
|
||||
last_new_line = dat == b'\n'
|
||||
|
||||
# def _stream_next_event(self, stream):
|
||||
# """Read the stream for next event while ignoring ping."""
|
||||
# while True:
|
||||
# data = b''
|
||||
# last_new_line = False
|
||||
# for dat in stream.iter_content(1):
|
||||
# if dat == b'\n' and last_new_line:
|
||||
# break
|
||||
# data += dat
|
||||
# last_new_line = dat == b'\n'
|
||||
conv = data.decode('utf-8').strip()[6:]
|
||||
|
||||
# conv = data.decode('utf-8').strip()[6:]
|
||||
if conv != 'ping':
|
||||
break
|
||||
|
||||
# if conv != 'ping':
|
||||
# break
|
||||
return json.loads(conv)
|
||||
|
||||
# return json.loads(conv)
|
||||
|
||||
# def _listen_count(self):
|
||||
# """Return number of event listeners."""
|
||||
# return sum(hass.bus.listeners.values())
|
||||
def _listen_count(self):
|
||||
"""Return number of event listeners."""
|
||||
return sum(hass.bus.listeners.values())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue