Пример #1
0
    def test_create_queue_simple(self, queue_type, expected_cls):
        test_app = Plugin("test", "test", "test-token")
        apps = ApplicationRegistry()
        registry = ChannelRegistry(apps)
        queue = registry.create_queue("queue_name", test_app, {}, {},
                                      queue_type)

        assert isinstance(queue, expected_cls)
        assert registry.get_channel("queue_name") is queue
    def test_queue_closure(self, queue_type, cookie):
        event = Event()
        test_app = Plugin("test", "test", "test-token")
        apps = ApplicationRegistry()
        registry = ChannelRegistry(apps)
        registry.create_queue("/fifo-closure", test_app, {"type": "string"},
                              {}, queue_type)

        server = MessageServer(11023, ApplicationRegistry(), registry,
                               SynonymRegistry(), event.set)
        thread = Thread(target=server.run)
        thread.start()
        event.wait()

        conn = WeaveConnection()
        conn.connect()

        def patch_receive(receiver, event):
            original = receiver.receive

            def receive():
                event.set()
                original()

            receiver.receive = receive

        def wrap_run(receiver):
            def run():
                try:
                    receiver.run()
                except:
                    pass

            return run

        e1 = Event()
        r1 = Receiver(conn, "/fifo-closure", cookie=next(cookie))
        r1.start()
        patch_receive(r1, e1)
        t1 = Thread(target=wrap_run(r1))
        t1.start()

        e2 = Event()
        r2 = Receiver(conn, "/fifo-closure", cookie=next(cookie))
        r2.start()
        patch_receive(r2, e2)
        t2 = Thread(target=wrap_run(r2))
        t2.start()

        e1.wait()
        e2.wait()

        server.shutdown()
        thread.join()
        t1.join()
        t2.join()
Пример #3
0
    def test_queue_already_exists(self):
        test_app = Plugin("test", "test", "test-token")
        apps = ApplicationRegistry()
        registry = ChannelRegistry(apps)
        queue = registry.create_queue("queue_name", test_app, {}, {},
                                      "sessionized")
        assert isinstance(queue, SessionizedQueue)

        with pytest.raises(ObjectAlreadyExists):
            registry.create_queue("queue_name", test_app, {}, {}, "fifo")
Пример #4
0
    def test_queue_connect_fail(self):
        backup = RoundRobinQueue.connect
        RoundRobinQueue.connect = lambda self: False

        test_app = Plugin("test", "test", "test-token")
        apps = ApplicationRegistry()
        registry = ChannelRegistry(apps)
        with pytest.raises(InternalError):
            registry.create_queue("queue_name", test_app, {}, {}, "fifo")

        RoundRobinQueue.connect = backup
Пример #5
0
    def __init__(self, **kwargs):
        super(CoreService, self).__init__(**kwargs)

        messaging_token = "app-token-" + str(uuid4())
        weave_env_token = kwargs.pop('auth_token')

        self.dummy_service = DummyMessagingService(messaging_token,
                                                   WeaveConnection.local())
        self.message_server_started = Event()
        self.shutdown_event = Event()

        app_registry = ApplicationRegistry([
            ("WeaveEnv", "https://github.com/HomeWeave/WeaveEnv.git",
             weave_env_token),
            ("MessagingServer", "https://github.com/HomeWeave/WeaveServer.git",
             messaging_token),
        ])
        channel_registry = ChannelRegistry(app_registry)
        synonym_registry = SynonymRegistry()

        self.message_server = MessageServer(PORT, app_registry,
                                            channel_registry, synonym_registry,
                                            self.message_server_started.set)
        self.message_server_thread = Thread(target=self.message_server.run)
        self.discovery_server = DiscoveryServer(PORT)
        self.discovery_server_thread = Thread(target=self.discovery_server.run)
        self.rpc_hub = MessagingRPCHub(self.dummy_service, channel_registry,
                                       app_registry, synonym_registry)
Пример #6
0
    def setup_method(self):
        self.dummy_service = DummyMessagingService(MESSAGING_APP_TOKEN,
                                                   WeaveConnection.local())
        message_server_started = Event()
        app_registry = ApplicationRegistry([
            ("Test", TEST_URL, TEST_APP_TOKEN),
            ("MessagingServer", MESSAGING_SERVER_URL, MESSAGING_APP_TOKEN),
        ])
        channel_registry = ChannelRegistry(app_registry)

        synonym_registry = SynonymRegistry()
        self.message_server = MessageServer(PORT, app_registry,
                                            channel_registry, synonym_registry,
                                            message_server_started.set)
        self.message_server_thread = Thread(target=self.message_server.run)
        rpc_hub = MessagingRPCHub(self.dummy_service, channel_registry,
                                  app_registry, synonym_registry)

        self.message_server_thread.start()
        message_server_started.wait()
        self.dummy_service.start()
        rpc_hub.start()

        self.weave_service = DummyMessagingService(TEST_APP_TOKEN,
                                                   WeaveConnection.local())
        self.weave_service.start()

        self.appmgr_rpc_info = find_rpc(self.weave_service,
                                        MESSAGING_SERVER_URL, "app_manager")
Пример #7
0
    def test_create_queue_bad_schema(self):
        test_app = Plugin("test", "test", "test-token")
        apps = ApplicationRegistry()
        registry = ChannelRegistry(apps)
        with pytest.raises(SchemaValidationFailed):
            registry.create_queue("queue_name", test_app, "test", {}, "fifo")

        with pytest.raises(SchemaValidationFailed):
            registry.create_queue("queue_name", test_app, {}, "test", "fifo")
Пример #8
0
    def test_shutdown(self):
        test_app = Plugin("test", "test", "test-token")
        apps = ApplicationRegistry()
        registry = ChannelRegistry(apps)

        queue1 = registry.create_queue("queue1", test_app, {}, {}, "fifo")
        queue2 = registry.create_queue("queue2", test_app, {}, {},
                                       "sessionized")

        flag = []

        def disconnect_fn():
            flag.append(None)

        queue1.disconnect = disconnect_fn
        queue2.disconnect = disconnect_fn

        registry.shutdown()

        assert len(flag) == 2

        with pytest.raises(ObjectClosed):
            registry.create_queue("queue3", test_app, {}, {}, "fifo")
Пример #9
0
 def test_get_queue_invalid(self):
     test_app = Plugin("test", "test", "test-token")
     apps = ApplicationRegistry()
     registry = ChannelRegistry(apps)
     with pytest.raises(ObjectNotFound):
         registry.get_channel("test_queue")
Пример #10
0
 def test_create_queue_bad_queue_type(self):
     test_app = Plugin("test", "test", "test-token")
     apps = ApplicationRegistry()
     registry = ChannelRegistry(apps)
     with pytest.raises(BadArguments):
         registry.create_queue("queue_name", test_app, {}, {}, "bad-type")
Пример #11
0
    def setup_class(cls):
        event = Event()

        schema = {
            "type": "object",
            "properties": {
                "foo": {
                    "type": "string"
                }
            },
            "required": ["foo"]
        }

        test_app = Plugin("test", "test", "test-token")
        apps = ApplicationRegistry()
        registry = ChannelRegistry(apps)
        registry.create_queue("/a.b.c", test_app, schema, {}, 'fifo')
        registry.create_queue("/test.sessionized", test_app,
                              {"type": "string"}, {}, 'sessionized')
        registry.create_queue("/test.sessionized2", test_app,
                              {"type": "string"}, {}, 'sessionized')
        registry.create_queue("/test.sessionized/several", test_app,
                              {"type": "string"}, {}, 'sessionized')
        registry.create_queue("/test.fifo/simple", test_app,
                              {"type": "string"}, {}, 'fifo')
        registry.create_queue("/test.fifo/test-disconnect", test_app,
                              {"type": "string"}, {}, 'fifo')
        registry.create_queue("/test.sessionized/test-disconnect", test_app,
                              {"type": "string"}, {}, 'sessionized')
        registry.create_queue('/multicast/1', test_app, {"type": "string"}, {},
                              'multicast')
        registry.create_queue('/multicast/2', test_app, {"type": "string"}, {},
                              'multicast')

        synonym_registry = SynonymRegistry()
        synonym_registry.register("/multi", "/multicast/2")

        cls.server = MessageServer(11023, apps, registry, synonym_registry,
                                   event.set)
        cls.server_thread = Thread(target=cls.server.run)
        cls.server_thread.start()
        event.wait()
        cls.conn = WeaveConnection.local()
        cls.conn.connect()