示例#1
0
 def test_packed_object_hasattr_False(self):
     self.newtarget = Event(self.Publisher_id, self.Event_type,
                            self.flow_target_packed_object)
     self.result = self.newtarget.packed_object()
     self.assertEqual(self.result[0], self.Publisher_id)
     self.assertEqual(self.result[1], self.Event_type)
     self.assertEqual(self.result[2], self.flow_target_packed_object)
    def test__do_event_outpacketadded_NotNetworkId(self):
        Dispatcher = Mock()
        Dispatcher.network_id = "NetworkId"
        Network_id = "NetworkId"
        Evbody = {"id": "OutPacketId1"}
        Event1 = Event("NetworkId_dmy", "OutPacketAdded", Evbody)
        Event_packed = OutPacketAdded.create_from_packed(Evbody)
        self.target._network_interfaces[Network_id] =\
            NetworkInterface(Dispatcher, Network_id)

        with nested(
                patch(
                    'org.o3project.odenos.core.component.network.packet.'
                    'out_packet_added.OutPacketAdded.create_from_packed',
                    return_value=Event_packed),
                patch('org.o3project.odenos.core.util.network_interface.'
                      'NetworkInterface.del_out_packet'),
                patch('logging.error')) as (m_create_from_packed,
                                            m_del_out_packet, m_logerror):

            self.target._do_event_outpacketadded(Event1)
            self.assertEqual(m_create_from_packed.call_count, 1)
            m_create_from_packed.assert_any_call(Evbody)
            self.assertEqual(m_del_out_packet.call_count, 0)
            self.assertEqual(m_logerror.call_count, 0)
    def test_redisSubscriberRunnable_except(self):
        event = Event("publisher_id", "event_type", "event_body")

        pk = msgpack.Packer()
        resb = bytearray()
        resb.extend(pk.pack(2))
        resb.extend(pk.pack(0))
        resb.extend(pk.pack("publisher_id:event_type"))
        resb.extend(pk.pack(event.packed_object()))
        self.value = {"type": "message", "data": resb}

        with nested(patch("redis.client.PubSub.subscribe"),
                    patch("logging.error"),
                    patch("redis.client.PubSub.unsubscribe"),
                    patch("redis.client.PubSub.listen"),
                    patch(self.EVENT_PATH +
                          ".create_from_packed")) as (mock_subscribe,
                                                      logging_error,
                                                      mock_unsubscribe,
                                                      mock_listen, mock_event):
            mock_subscribe.return_value = None
            mock_unsubscribe.return_value = None
            mock_listen.return_value = [self.value]
            mock_event.side_effect = KeyError()

            self.target.start()
            self.target._MessageDispatcher__redisSubscriberRunnable()
            self.target.close()

            mock_event.assert_called_any_with(
                ["publisher_id", "event_type", "event_body"])
    def test__do_event_outpacketadded_create_from_packed_error(self):
        Dispatcher = Mock()
        Dispatcher.network_id = "NetworkId"
        Network_id = "NetworkId"
        Evbody = {"id": "OutPacketId1"}
        Event1 = Event("NetworkId", "OutPacketAdded", Evbody)

        self.target._network_interfaces["NetworkId"] =\
            NetworkInterface(Dispatcher, Network_id)

        debug_log = "Receive Invalid OutPacketAdded Message"\
                    + " KeyError: " + "1"

        with nested(
                patch(
                    'org.o3project.odenos.core.component.network.packet.'
                    'out_packet_added.OutPacketAdded.create_from_packed',
                    side_effect=KeyError(1)),
                patch('org.o3project.odenos.core.util.network_interface.'
                      'NetworkInterface.del_out_packet'),
                patch('logging.error')) as (m_create_from_packed,
                                            m_del_out_packet, m_logerror):

            self.target._do_event_outpacketadded(Event1)
            self.assertEqual(m_create_from_packed.call_count, 1)
            m_create_from_packed.assert_any_call(Evbody)
            self.assertEqual(m_del_out_packet.call_count, 0)
            self.assertEqual(m_logerror.call_count, 1)
            m_logerror.assert_any_call(debug_log)
    def test_redisSubscriberRunnable_TYPE_EVENT(self):
        event = Event("publisher_id", "event_type", "event_body")

        pk = msgpack.Packer()
        resb = bytearray()
        resb.extend(pk.pack(2))
        resb.extend(pk.pack(0))
        resb.extend(pk.pack("publisher_id:event_type"))
        resb.extend(pk.pack(event.packed_object()))
        self.value = {"type": "message", "data": resb}

        self.target.thread_pool = futures.ThreadPoolExecutor(max_workers=8)
        self.target._MessageDispatcher__redisSubscriber = redis.StrictRedis(
            host=self.target._MessageDispatcher__redisServer,
            port=self.target._MessageDispatcher__redisPort)
        self.target._MessageDispatcher__redisSubscriber =\
            self.target._MessageDispatcher__redisSubscriber.pubsub()

        with nested(patch("redis.client.PubSub.subscribe"),
                    patch("redis.client.PubSub.unsubscribe"),
                    patch("redis.client.PubSub.listen"),
                    patch(self.EVENT_PATH +
                          ".create_from_packed")) as (mock_subscribe,
                                                      mock_unsubscribe,
                                                      mock_listen, mock_event):
            mock_subscribe.return_value = None
            mock_unsubscribe.return_value = None
            mock_listen.return_value = [self.value]

            self.target._MessageDispatcher__redisSubscriberRunnable()

            mock_event.assert_called_once_with(
                ["publisher_id", "event_type", "event_body"])
    def test_publish_event_async(self):
        event = Event("publisher_id", "event_type", "event_body")

        self.target.publish_event_async(event)
        self.result = self.target._MessageDispatcher__pubsqueue.get()

        self.assertEqual(self.result.trans, None)
        self.assertEqual(self.result.type, 2)
        self.assertEqual(self.result.sno, 0)
        self.assertEqual(self.result.channel, "publisher_id:event_type")
    def test_dispatch_event_id_equal_del_obj_ids(self):
        event = Event("key01", "value01", "event_body")
        subscription_map =\
            self.target._MessageDispatcher__subscription_map
        subscription_map._EventSubscriptionMap__subscriptions =\
            {"remote_object": set(["key01:value01",
                                   "key01:value02"]),
             "local_object": set(["key01:value01",
                                  "key01:value02"])}
        subscription_map._EventSubscriptionMap__subscription_map =\
            {"key01:value01": set(["remote_object",
                                   "local_object"]),
             "key01:value02": set(["remote_object",
                                   "local_object"])}
        self.target._MessageDispatcher__local_objects =\
            {"remote_object": None}

        with patch(self.DISPATCHER_PATH + ".EventSubscriptionMap" +
                   ".remove_subscription") as mock_remove_subscription:
            self.target.dispatch_event(event)

        mock_remove_subscription.assert_called_once_with("remote_object")
    def test_dispatch_event(self):
        event = Event("key01", "value01", "event_body")
        subscription_map =\
            self.target._MessageDispatcher__subscription_map
        subscription_map._EventSubscriptionMap__subscriptions =\
            {"remote_object": set(["key01:value01",
                                   "key01:value02"]),
             "local_object": set(["key01:value01",
                                  "key01:value02"])}
        subscription_map._EventSubscriptionMap__subscription_map =\
            {"key01:value01": set(["remote_object",
                                   "local_object"]),
             "key01:value02": set(["remote_object",
                                   "local_object"])}
        remote_object = RemoteObject("remote_object", self.target)
        self.target._MessageDispatcher__local_objects =\
            {"remote_object": remote_object}

        with patch("org.o3project.odenos.remoteobject." +
                   "remote_object.RemoteObject." +
                   "dispatch_event") as mock_dispatch_event:
            self.target.dispatch_event(event)

        mock_dispatch_event.assert_called_once_with(event)
示例#9
0
 def setUp(self):
     self.target = Event(self.Publisher_id, self.Event_type,
                         self.flow_target)
示例#10
0
 def _publish_event_async(self, event_type, body):
     return self.dispatcher.publish_event_async(
         Event(self.object_id, event_type, body))