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)
예제 #2
0
import signal
import threading
from examplelibrary import ExampleLibrary
from robotremoteserver import RobotRemoteServer

server = RobotRemoteServer(ExampleLibrary(), port=8888)
signal.signal(signal.SIGINT, lambda signum, frame: server.stop())
server_thread = threading.Thread(target=server.serve)
server_thread.start()
while server_thread.is_alive():
    server_thread.join(0.1)
예제 #3
0
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)