本文整理汇总了Python中katcp.testutils.DeviceTestServer.sync_with_ioloop方法的典型用法代码示例。如果您正苦于以下问题:Python DeviceTestServer.sync_with_ioloop方法的具体用法?Python DeviceTestServer.sync_with_ioloop怎么用?Python DeviceTestServer.sync_with_ioloop使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类katcp.testutils.DeviceTestServer
的用法示例。
在下文中一共展示了DeviceTestServer.sync_with_ioloop方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_DeviceServer
# 需要导入模块: from katcp.testutils import DeviceTestServer [as 别名]
# 或者: from katcp.testutils.DeviceTestServer import sync_with_ioloop [as 别名]
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'))
示例2: TestDeviceServerClientIntegrated
# 需要导入模块: from katcp.testutils import DeviceTestServer [as 别名]
# 或者: from katcp.testutils.DeviceTestServer import sync_with_ioloop [as 别名]
#.........这里部分代码省略.........
self.assertTrue(self.client.wait_protocol(timeout=1))
self.client.request(katcp.Message.request("raise-exception"))
self.client.request(katcp.Message.request("raise-fail"))
time.sleep(0.1)
self._assert_msgs_like(get_msgs(), [
(r"!raise-exception[1] fail Traceback", ""),
(r"!raise-fail[2] fail There\_was\_a\_problem\_with\_your\_request.",
""),
])
def test_stop_and_restart(self):
"""Test stopping and restarting the device server."""
# So we can wait for the client to disconnect
self.client.notify_connected = WaitingMock()
self.server.stop(timeout=0.1)
self.server.join(timeout=1.0)
self.assertFalse(self.server.running())
# Wait for client to be disconnected
self.client.notify_connected.assert_wait_call_count(1)
self.assertFalse(self.client.is_connected())
self.server.start(timeout=1.0)
def test_bad_client_socket(self):
"""Test what happens when select is called on a dead client socket."""
# close client stream while the server isn't looking then wait for the server to
# notice
stream, client_conn = self.server._server._connections.items()[0]
# Wait for the client to disconnect
self.client.notify_connected = WaitingMock()
self.server.ioloop.add_callback(stream.close)
# Wait for the client to be disconnected, and to connect again
self.client.notify_connected.assert_wait_call_count(2)
self.server.sync_with_ioloop()
# check that client stream was removed from the KATCPServer
self.assertTrue(stream not in self.server._server._connections,
"Expected %r to not be in %r" %
(stream, self.server._server._connections))
# And check that the ClientConnection object was removed from the DeviceServer
self.assertTrue(client_conn not in self.server._client_conns,
"Expected %r to not be in %r" %
(client_conn, self.server._client_conns))
def test_sampling(self):
"""Test sensor sampling."""
get_msgs = self.client.message_recorder(
blacklist=self.BLACKLIST, replies=True)
self.client.wait_protocol(timeout=1)
self.client.request(katcp.Message.request(
"sensor-sampling", "an.int", "period", 1/32.))
# Wait for the request reply and for the sensor update messages to
# arrive. We expect update one the moment the sensor-sampling request is
# made, then four more over 4/32. of a second, resutling in 6
# messages. Wait 0.75 of a period longer just to be sure we get everything.
self.assertTrue(get_msgs.wait_number(6, timeout=4.75/32.))
self.client.assert_request_succeeds("sensor-sampling", "an.int", "none")
# Wait for reply to above request
get_msgs.wait_number(7)
msgs = get_msgs()
updates = [x for x in msgs if x.name == "sensor-status"]
others = [x for x in msgs if x.name != "sensor-status"]
self.assertTrue(abs(len(updates) - 5) < 2,
"Expected 5 informs, saw %d." % len(updates))
self._assert_msgs_equal(others, [
r"!sensor-sampling[1] ok an.int period %s" % (1/32.),
r"!sensor-sampling[2] ok an.int none",
])
self.assertEqual(updates[0].arguments[1:],
["1", "an.int", "nominal", "3"])
## Now clear the strategies on this sensor
# There should only be on connection to the server, so it should be
# the test client
client_conn = list(self.server._client_conns)[0]
self.server.ioloop.add_callback(self.server.clear_strategies, client_conn)
self.server.sync_with_ioloop()
self.client.assert_request_succeeds("sensor-sampling", "an.int",
args_equal=["an.int", "none"])
# Check that we did not accidentally clobber the strategy datastructure
# in the proccess
self.client.assert_request_succeeds(
"sensor-sampling", "an.int", "period", 0.125)
def test_add_remove_sensors(self):
"""Test adding and removing sensors from a running device."""
an_int = self.server._sensors["an.int"]
self.server.remove_sensor(an_int)
# TODO remove_sensor test that checks that everything is indeed gone
self.server.add_sensor(an_int)
self.test_sampling()