def test_send_internal_and_broker(self): frame = Frame(command=Command.SEND, headers={Headers.DESTINATION: 'jms.topic.vdsm_requests', Headers.REPLY_TO: 'jms.topic.vdsm_responses', Headers.CONTENT_LENGTH: '103'}, body=('{"jsonrpc":"2.0","method":"Host.getAllVmStats",' '"params":{},"id":"e8a936a6-d886-4cfa-97b9-2d54209' '053ff"}' ) ) ids = {} subscription = FakeSubscription('jms.topic.vdsm_requests', 'e8a936a6-d886-4cfa-97b9-2d54209053ff') client = FakeAsyncClient() subscription.set_client(client) destinations = defaultdict(list) destinations['jms.topic.vdsm_requests'].append(subscription) adapter = StompAdapterImpl(Reactor(), destinations, ids) adapter.handle_frame(FakeAsyncDispatcher(adapter), frame) data = adapter.pop_message() self.assertIsNot(data, None) request = JsonRpcRequest.decode(data) self.assertEqual(request.method, 'Host.getAllVmStats') self.assertEqual(len(ids), 1) resp_frame = client.pop_message() self.assertIsNot(resp_frame, None) self.assertEqual(resp_frame.command, Command.MESSAGE) self.assertEqual(resp_frame.body, data)
def test_multipe_subscriptions(self): frame = Frame(Command.UNSUBSCRIBE, {'id': 'ad052acb-a934-4e10-8ec3-00c7417ef8d1'}) subscription = FakeSubscription('jms.queue.events', 'ad052acb-a934-4e10-8ec3-00c7417ef8d1') subscription2 = FakeSubscription('jms.queue.events', 'e8a93a6-d886-4cfa-97b9-2d54209053ff') destinations = defaultdict(list) destinations['jms.queue.events'].append(subscription) destinations['jms.queue.events'].append(subscription2) adapter = StompAdapterImpl(Reactor(), destinations, {}) adapter._sub_ids['ad052acb-a934-4e10-8ec3-00c7417ef8d1'] = subscription adapter.handle_frame(FakeAsyncDispatcher(adapter), frame) self.assertEqual(len(adapter._sub_ids), 0) self.assertEqual(len(destinations), 1) self.assertEqual(destinations['jms.queue.events'], [subscription2])
def test_send_broker(self): frame = Frame(command=Command.SEND, headers={Headers.DESTINATION: 'jms.topic.destination', Headers.CONTENT_LENGTH: '103'}, body=('{"jsonrpc":"2.0","method":"Host.getAllVmStats",' '"params":{},"id":"e8a936a6-d886-4cfa-97b9-2d54209' '053ff"}' ) ) subscription = FakeSubscription('jms.topic.destination', 'e8a936a6-d886-4cfa-97b9-2d54209053ff') destinations = defaultdict(list) destinations['jms.topic.destination'].append(subscription) adapter = StompAdapterImpl(Reactor(), destinations, {}) subscription.set_client(adapter) adapter.handle_frame(FakeAsyncDispatcher(adapter), frame) resp_frame = adapter.pop_message() self.assertEqual(resp_frame.command, Command.MESSAGE)
def test_unsubscribe_with_different_id(self): client = AsyncClient() client.subscribe(destination='jms.queue.events', ack='client-individual', sub_id=str(uuid4())) # ignore subscribe frame client.pop_message() client.unsubscribe( FakeSubscription('jms.queue.events', 'ad052acb-a934-4e10-8ec3')) self.assertEqual(len(client._subscriptions), 1) self.assertFalse(client.has_outgoing_messages)
def test_unsubscribe(self): frame = Frame(Command.UNSUBSCRIBE, {'id': 'ad052acb-a934-4e10-8ec3-00c7417ef8d1'}) subscription = FakeSubscription('jms.queue.events', 'ad052acb-a934-4e10-8ec3-00c7417ef8d1') destinations = defaultdict(list) destinations['jms.queue.events'].append(subscription) adapter = StompAdapterImpl(Reactor(), destinations, {}) adapter._sub_ids['ad052acb-a934-4e10-8ec3-00c7417ef8d1'] = subscription adapter.handle_frame(FakeAsyncDispatcher(adapter), frame) self.assertEqual(len(adapter._sub_ids), 0) self.assertEqual(len(destinations), 0)