class test_DeviceServer(unittest.TestCase, TestUtilMixin): expected_connect_messages = ( # Will have to be updated if the default KATCP protocol # spec version changes r'#version-connect katcp-protocol 5.0-IM', r'#version-connect katcp-library katcp-python-%s' % katcp_version, r'#version-connect katcp-device deviceapi-5.6 buildy-1.2g') def setUp(self): self.server = DeviceTestServer('', 0) def test_on_client_connect(self): fake_sock = mock.Mock() mock_conn = mock.Mock( spec=katcp.server.ClientConnection(self.server._server, fake_sock)) self.server.BUILD_INFO = ('buildy', 1, 2, 'g') self.server.VERSION_INFO = ('deviceapi', 5, 6) # Hack around ioloop thread asserts self.server._server.ioloop_thread_id = thread.get_ident() # Test call self.server.on_client_connect(mock_conn) # we are expecting 3 inform messages no_msgs = 3 self.assertEqual(mock_conn.inform.call_count, no_msgs) # Get all the messages sent to _send_message msgs = [str(call[0][0]) for call in mock_conn.inform.call_args_list] self._assert_msgs_equal(msgs, self.expected_connect_messages) def test_request_sensor_sampling_clear(self): self.server.clear_strategies = mock.Mock() start_thread_with_cleanup(self, self.server, start_timeout=1) client_connection = ClientConnectionTest() self.server.ioloop.make_current() tf = self.server.handle_message( client_connection, katcp.Message.request('sensor-sampling-clear')) # tf may be a tornado (not thread-safe) future, so we wrap it in a thread-safe # future object f = Future() self.server.ioloop.add_callback(gen.chain_future, tf, f) f.result(timeout=1) # Ensure that the tornado future has finished running its callbacks self.server.sync_with_ioloop() self._assert_msgs_equal(client_connection.messages, ['!sensor-sampling-clear ok']) self.server.clear_strategies.assert_called_once_with(client_connection) def test_has_sensor(self): self.assertFalse(self.server.has_sensor('blaah')) self.server.add_sensor(katcp.Sensor.boolean('blaah', 'blaah sens')) self.assertTrue(self.server.has_sensor('blaah')) def test_excluded_default_handlers(self): """ Test that default handers from higher KATCP versions are not included """ # TODO NM 2017-04-18 This should probably be removed if we do official # KATCP v5.1 release and make it the default server version self.assertNotIn('request-timeout-hint', self.server._request_handlers)
class test_DeviceServer(unittest.TestCase, TestUtilMixin): def setUp(self): self.server = DeviceTestServer('', 0) def test_on_client_connect(self): fake_sock = mock.Mock() mock_conn = mock.Mock( spec=katcp.server.ClientConnection(self.server._server, fake_sock)) self.server.BUILD_INFO = ('buildy', 1, 2, 'g') self.server.VERSION_INFO = ('deviceapi', 5, 6) # Hack around ioloop thread asserts self.server._server.ioloop_thread_id = thread.get_ident() # Test call self.server.on_client_connect(mock_conn) # we are expecting 3 inform messages no_msgs = 3 self.assertEqual(mock_conn.inform.call_count, no_msgs) # Get all the messages sent to _send_message msgs = [str(call[0][0]) for call in mock_conn.inform.call_args_list] katcp_version = __version__ self._assert_msgs_equal( msgs, ( r'#version-connect katcp-protocol 5.0-IM', # Will have to be updated for every library version bump r'#version-connect katcp-library katcp-python-%s' % katcp_version, r'#version-connect katcp-device deviceapi-5.6 buildy-1.2g')) def test_request_sensor_sampling_clear(self): self.server.clear_strategies = mock.Mock() start_thread_with_cleanup(self, self.server, start_timeout=1) client_connection = ClientConnectionTest() self.server.ioloop.make_current() tf = self.server.handle_message( client_connection, katcp.Message.request('sensor-sampling-clear')) # tf may be a tornado (not thread-safe) future, so we wrap it in a thread-safe # future object f = Future() self.server.ioloop.add_callback(gen.chain_future, tf, f) f.result(timeout=1) # Ensure that the tornado future has finished running its callbacks self.server.sync_with_ioloop() self._assert_msgs_equal(client_connection.messages, ['!sensor-sampling-clear ok']) self.server.clear_strategies.assert_called_once_with(client_connection) def test_has_sensor(self): self.assertFalse(self.server.has_sensor('blaah')) self.server.add_sensor(katcp.Sensor.boolean('blaah', 'blaah sens')) self.assertTrue(self.server.has_sensor('blaah'))
class test_DeviceServer(unittest.TestCase, TestUtilMixin): def setUp(self): self.server = DeviceTestServer('', 0) def test_on_client_connect(self): fake_sock = mock.Mock() mock_conn = mock.Mock( spec=katcp.server.ClientConnection(self.server._server, fake_sock)) self.server.BUILD_INFO = ('buildy', 1, 2, 'g') self.server.VERSION_INFO = ('deviceapi', 5, 6) # Hack around ioloop thread asserts self.server._server.ioloop_thread_id = thread.get_ident() # Test call self.server.on_client_connect(mock_conn) # we are expecting 3 inform messages no_msgs = 3 self.assertEqual(mock_conn.inform.call_count, no_msgs) # Get all the messages sent to _send_message msgs = [str(call[0][0]) for call in mock_conn.inform.call_args_list] katcp_version = __version__ self._assert_msgs_equal(msgs, ( r'#version-connect katcp-protocol 5.0-IM', # Will have to be updated for every library version bump r'#version-connect katcp-library katcp-python-%s' % katcp_version, r'#version-connect katcp-device deviceapi-5.6 buildy-1.2g')) def test_request_sensor_sampling_clear(self): self.server.clear_strategies = mock.Mock() start_thread_with_cleanup(self, self.server, start_timeout=1) client_connection = ClientConnectionTest() self.server.ioloop.make_current() tf = self.server.handle_message( client_connection, katcp.Message.request('sensor-sampling-clear')) # tf may be a tornado (not thread-safe) future, so we wrap it in a thread-safe # future object f = Future() self.server.ioloop.add_callback(gen.chain_future, tf, f) f.result(timeout=1) # Ensure that the tornado future has finished running its callbacks self.server.sync_with_ioloop() self._assert_msgs_equal(client_connection.messages, [ '!sensor-sampling-clear ok']) self.server.clear_strategies.assert_called_once_with(client_connection) def test_has_sensor(self): self.assertFalse(self.server.has_sensor('blaah')) self.server.add_sensor(katcp.Sensor.boolean('blaah', 'blaah sens')) self.assertTrue(self.server.has_sensor('blaah'))
class test_DeviceServer(unittest.TestCase, TestUtilMixin): def setUp(self): self.server = DeviceTestServer('', 0) def test_on_client_connect(self): conn = katcp.server.ClientConnectionTCP(self.server, 'fake-sock') m_sm = self.server._send_message = mock.Mock() self.server.BUILD_INFO = ('buildy', 1, 2, 'g') self.server.VERSION_INFO = ('deviceapi', 5, 6) self.server.on_client_connect(conn) # we are expecting 3 inform messages no_msgs = 3 self.assertEqual(m_sm.call_count, no_msgs) # Check that calls were syntactically valid self.assertEqual(m_sm.call_args_list, [mock.call('fake-sock', mock.ANY)]*no_msgs) # Get all the messages sent to _send_message msgs = [str(call[0][1]) for call in m_sm.call_args_list] self._assert_msgs_equal(msgs, ( r'#version-connect katcp-protocol 5.0-IM', # Will have to be updated for every library version bump r'#version-connect katcp-library katcp-python-0.5.5a0', r'#version-connect katcp-device deviceapi-5.6 buildy-1.2g') ) def test_request_sensor_sampling_clear(self): self.server.clear_strategies = mock.Mock() client_connection = ClientConnectionTest() self.server.handle_message( client_connection, katcp.Message.request('sensor-sampling-clear')) self._assert_msgs_equal(client_connection.messages, [ '!sensor-sampling-clear ok']) self.server.clear_strategies.assert_called_once_with(client_connection) def test_has_sensor(self): self.assertFalse(self.server.has_sensor('blaah')) self.server.add_sensor(katcp.Sensor.boolean('blaah', 'blaah sens')) self.assertTrue(self.server.has_sensor('blaah'))
class test_DeviceServer(unittest.TestCase, TestUtilMixin): def setUp(self): self.server = DeviceTestServer('', 0) def test_on_client_connect(self): conn = katcp.server.ClientConnectionTCP(self.server, 'fake-sock') m_sm = self.server._send_message = mock.Mock() self.server.BUILD_INFO = ('buildy', 1, 2, 'g') self.server.VERSION_INFO = ('deviceapi', 5, 6) self.server.on_client_connect(conn) # we are expecting 3 inform messages no_msgs = 3 self.assertEqual(m_sm.call_count, no_msgs) # Check that calls were syntactically valid self.assertEqual(m_sm.call_args_list, [mock.call('fake-sock', mock.ANY)]*no_msgs) # Get all the messages sent to _send_message msgs = [str(call[0][1]) for call in m_sm.call_args_list] self._assert_msgs_equal(msgs, ( r'#version-connect katcp-protocol 5.0-IM', # Will have to be updated for every library version bump r'#version-connect katcp-library katcp-python-0.5.4', r'#version-connect katcp-device deviceapi-5.6 buildy-1.2g') ) def test_request_sensor_sampling_clear(self): self.server.clear_strategies = mock.Mock() client_connection = ClientConnectionTest() self.server.handle_message( client_connection, katcp.Message.request('sensor-sampling-clear')) self._assert_msgs_equal(client_connection.messages, [ '!sensor-sampling-clear ok']) self.server.clear_strategies.assert_called_once_with(client_connection) def test_has_sensor(self): self.assertFalse(self.server.has_sensor('blaah')) self.server.add_sensor(katcp.Sensor.boolean('blaah', 'blaah sens')) self.assertTrue(self.server.has_sensor('blaah'))