forked from robotframework/PythonRemoteServer
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_serve.py
More file actions
91 lines (74 loc) · 2.83 KB
/
Copy pathtest_serve.py
File metadata and controls
91 lines (74 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
from contextlib import contextmanager
import sys
import threading
import time
import unittest
from robot.libraries.Remote import Remote
from robotremoteserver import (RobotRemoteServer, StringIO,
stop_remote_server, test_remote_server)
class Library(object):
def kw(self):
print('The message!')
return 42
class TestServeAndStop(unittest.TestCase):
def setUp(self):
self.server = RobotRemoteServer(Library(), port=0, serve=False)
def test_serve(self):
self.assertEqual(self.server.server_port, 0)
with self._server_thread():
uri = self._wait_until_started()
try:
self._run_remote_keyword(uri)
finally:
self.server.stop()
self._wait_until_stopped(uri)
self.assertEqual(test_remote_server(uri, log=False), False)
def test_activate(self):
port = self.server.activate()
self.assertNotEqual(port, 0)
self.assertEqual(port, self.server.server_port)
with self._server_thread():
self.assertEqual(port, self.server.server_port)
self.server.stop()
@contextmanager
def _server_thread(self):
thread = threading.Thread(target=self.server.serve,
kwargs={'log': False})
thread.start()
try:
yield
finally:
thread.join()
def _wait_until_started(self, timeout=5):
max_time = time.time() + timeout
while time.time() < max_time:
if self.server.server_port != 0:
return 'http://%s:%s' % self.server.server_address
time.sleep(0.01)
raise AssertionError('Server did not start in %s seconds.' % timeout)
def _run_remote_keyword(self, uri):
origout = sys.stdout
sys.stdout = StringIO()
try:
self.assertEqual(Remote(uri).run_keyword('kw', (), None), 42)
self.assertEqual(sys.stdout.getvalue(), 'The message!\n')
finally:
sys.stdout.close()
sys.stdout = origout
def _wait_until_stopped(self, uri, timeout=5):
max_time = time.time() + timeout
while time.time() < max_time:
if not test_remote_server(uri, log=False):
return
time.sleep(0.01)
self.server.stop()
raise AssertionError('Server did not stop in %s seconds.' % timeout)
def test_stop_remote_server(self):
with self._server_thread():
uri = self._wait_until_started()
self.assertEqual(test_remote_server(uri, log=False), True)
self.assertEqual(stop_remote_server(uri, log=False), True)
self._wait_until_stopped(uri)
self.assertEqual(stop_remote_server(uri, log=False), True)
if __name__ == '__main__':
unittest.main()