Esempio n. 1
0
 def test_token_file_db(self):
     app = "addisonarches.web"
     rv = token("file://{}".format(self.root.name), "test", app)
     self.assertIsInstance(rv, Resource)
     self.assertEqual(self.root.name, rv.root)
     self.assertEqual(app, rv.application)
     self.assertTrue(os.path.isdir(os.path.join(*rv[0:5])))
Esempio n. 2
0
    def test_create_routing(self):
        tok = token("file://{}".format(self.root.name), "test",
                    "addisonarches.web")

        refs = list(
            Flow.create(tok, poa=["udp"], role=[], routing=["application"]))
        features = references_by_type(refs)

        routes = features[turberfield.ipc.policy.Routing.Application]
        self.assertEqual(1, len(routes))
        table = Flow.inspect(routes[0])

        self.assertIsInstance(table,
                              turberfield.ipc.policy.Routing.Application)
        self.assertFalse(table)

        rule = turberfield.ipc.policy.Routing.Application.Rule(
            Address("turberfield", "tundish", "test",
                    "turberfield.ipc.demo.sender"),
            Address("turberfield", "tundish", "test",
                    "turberfield.ipc.demo.receiver"), 1,
            Address("turberfield", "tundish", "test",
                    "turberfield.ipc.demo.hub"))
        self.assertIs(None, table.replace(rule.src, rule.dst, rule))
        self.assertEqual(1, len(table))

        Flow.replace(routes[0], table)
        rv = Flow.inspect(routes[0])
        self.assertEqual(table, rv)
Esempio n. 3
0
    def test_create_routing(self):
        tok = token(
            "file://{}".format(self.root.name),
            "test",
            "addisonarches.web"
        )

        refs = list(Flow.create(tok, poa=["udp"], role=[], routing=["application"]))
        features = references_by_type(refs)
        
        routes = features[turberfield.ipc.policy.Routing.Application]
        self.assertEqual(1, len(routes))
        table = Flow.inspect(routes[0])

        self.assertIsInstance(table, turberfield.ipc.policy.Routing.Application)
        self.assertFalse(table)
        
        rule = turberfield.ipc.policy.Routing.Application.Rule(
            Address("turberfield", "tundish", "test", "turberfield.ipc.demo.sender"),
            Address("turberfield", "tundish", "test", "turberfield.ipc.demo.receiver"),
            1,
            Address("turberfield", "tundish", "test", "turberfield.ipc.demo.hub")
        )
        self.assertIs(None, table.replace(rule.src, rule.dst, rule))
        self.assertEqual(1, len(table))

        Flow.replace(routes[0], table)
        rv = Flow.inspect(routes[0])
        self.assertEqual(table, rv)
Esempio n. 4
0
 def test_address_no_via(self):
     app = "addisonarches.web"
     tok = token("file://{}".format(self.root.name), "test", app)
     msg = turberfield.ipc.message.parcel(tok, {"text": "Hello World!"})
     self.assertEqual(app, msg.header.src.application)
     self.assertEqual(msg.header.src, msg.header.dst)
     self.assertIs(None, msg.header.via)
Esempio n. 5
0
 def test_token_other_db(self):
     with warnings.catch_warnings(record=True) as w:
         warnings.simplefilter("always")
         rv = token("http://{}".format(self.root.name), "test",
                    "addisonarches.web")
         self.assertIs(None, rv)
         self.assertTrue(issubclass(w[-1].category, UserWarning))
         self.assertIn("file-based", str(w[-1].message))
Esempio n. 6
0
 def setUpClass(cls):
     logging.getLogger("asyncio").setLevel(logging.DEBUG)
     cls.asyncioDebug = os.environ.get("PYTHONASYNCIODEBUG", None)
     os.environ["PYTHONASYNCIODEBUG"] = str(True)
     cls.token = token(
         TestUsesNode.connect,
         "test",
         "addisonarches.test.test_game"
     )
Esempio n. 7
0
 def test_reply(self):
     app = "addisonarches.web"
     tok = token("file://{}".format(self.root.name), "test", app)
     msg = turberfield.ipc.message.parcel(tok, {"text": "Hello World!"})
     reply = turberfield.ipc.message.reply(msg.header,
                                           {"text": "Goodbye World!"})
     self.assertEqual(msg.header.id, reply.header.id)
     self.assertEqual(msg.header.src, reply.header.dst)
     self.assertEqual(msg.header.dst, reply.header.src)
Esempio n. 8
0
 def test_find_application(self):
     tok = token(
         "file://{}".format(self.root.name),
         "test",
         "addisonarches.web"
     )
     self.assertIs(None, tok.flow)
     results = list(Flow.find(tok, application="addisonarches.game"))
     self.assertFalse(results)
Esempio n. 9
0
def main(args):
    log = logging.getLogger("addisonarches.web")
    log.setLevel(args.log_level)

    formatter = logging.Formatter(
        "%(asctime)s %(levelname)-7s %(name)s|%(message)s")
    ch = logging.StreamHandler()

    if args.log_path is None:
        ch.setLevel(args.log_level)
    else:
        fh = WatchedFileHandler(args.log_path)
        fh.setLevel(args.log_level)
        fh.setFormatter(formatter)
        log.addHandler(fh)
        ch.setLevel(logging.WARNING)

    ch.setFormatter(formatter)
    log.addHandler(ch)

    loop = asyncio.SelectorEventLoop()
    asyncio.set_event_loop(loop)

    down = asyncio.Queue(loop=loop)
    up = asyncio.Queue(loop=loop)

    #TODO: Read service name from CLI
    service = "dev"  # Cf qa, demo, prod, etc
    tok = token(args.connect, service, APP_NAME)
    node = create_udp_node(loop, tok, down, up)
    loop.create_task(node(token=tok))

    app = aiohttp.web.Application()
    assets = Assets(app, **vars(args))
    reg = Registration(app, tok, down, up, **vars(args))
    transitions = Transitions(app, **vars(args))
    work = Workflow(app, tok, down, up, **vars(args))
    for svc in (assets, reg, transitions, work):
        log.info("{0.__class__.__name__} object serves {1}".format(
            svc, ", ".join(svc.routes.keys())))

    handler = app.make_handler()
    f = loop.create_server(handler, args.host, args.port)
    srv = loop.run_until_complete(f)

    log.info("Serving on {0[0]}:{0[1]}".format(srv.sockets[0].getsockname()))
    try:
        loop.run_forever()
    except KeyboardInterrupt:
        pass
    finally:
        loop.run_until_complete(handler.finish_connections(1.0))
        srv.close()
        loop.run_until_complete(srv.wait_closed())
        loop.run_until_complete(app.finish())
    loop.close()
Esempio n. 10
0
    def test_route_inspection_use_case(self):
        self.test_create_routing()

        tok = token("file://{}".format(self.root.name), "test",
                    "addisonarches.web")
        search = ((i, Flow.inspect(i))
                  for i in Flow.find(tok, policy="application"))
        query = (ref for ref, table in search for rule in table
                 if rule.dst.application == "turberfield.ipc.demo.receiver")
        self.assertEqual(1, len(list(query)))
Esempio n. 11
0
 def test_address_no_via(self):
     app = "addisonarches.web"
     tok = token(
         "file://{}".format(self.root.name),
         "test",
         app
     )
     msg = turberfield.ipc.message.parcel(tok, {"text": "Hello World!"})
     self.assertEqual(app, msg.header.src.application)
     self.assertEqual(msg.header.src, msg.header.dst)
     self.assertIs(None, msg.header.via)
Esempio n. 12
0
    def test_pool_allocation(self):
        tok = token("file://{}".format(self.root.name), "test",
                    "addisonarches.web")

        ports = range(49152, 65536)
        for n, p in enumerate(ports):
            with self.subTest(n=n, p=p):
                flow = list(Flow.create(tok, poa=["udp"], role=[], routing=[]))
                query = (Flow.inspect(i) for i in Flow.find(tok, policy="udp"))
                alloc = {(i.addr, i.port) for i in query}
                self.assertEqual(n + 1, len(alloc))
Esempio n. 13
0
 def test_token_file_db(self):
     app = "addisonarches.web"
     rv = token(
         "file://{}".format(self.root.name),
         "test",
         app
     )
     self.assertIsInstance(rv, Resource)
     self.assertEqual(self.root.name, rv.root)
     self.assertEqual(app, rv.application)
     self.assertTrue(os.path.isdir(os.path.join(*rv[0:5])))
Esempio n. 14
0
 def test_reply(self):
     app = "addisonarches.web"
     tok = token(
         "file://{}".format(self.root.name),
         "test",
         app
     )
     msg = turberfield.ipc.message.parcel(tok, {"text": "Hello World!"})
     reply = turberfield.ipc.message.reply(msg.header, {"text": "Goodbye World!"})
     self.assertEqual(msg.header.id, reply.header.id)
     self.assertEqual(msg.header.src, reply.header.dst)
     self.assertEqual(msg.header.dst, reply.header.src)
Esempio n. 15
0
 def test_token_other_db(self):
     with warnings.catch_warnings(record=True) as w:
         warnings.simplefilter("always")
         rv = token(
             "http://{}".format(self.root.name),
             "test",
             "addisonarches.web"
         )
         self.assertIs(None, rv)
         self.assertTrue(
             issubclass(w[-1].category, UserWarning))
         self.assertIn("file-based", str(w[-1].message))
Esempio n. 16
0
    def test_create_policy_unregistered(self):
        tok = token("file://{}".format(self.root.name), "test",
                    "addisonarches.web")
        self.assertIs(None, tok.flow)
        rv = next(Flow.find(tok), None)
        self.assertIs(None, rv)

        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("always")
            rv = next(Flow.create(tok, poa=["ftp"], role=[], routing=[]))
            self.assertIs(None, rv)
            self.assertTrue(issubclass(w[-1].category, UserWarning))
            self.assertIn("No policy", str(w[-1].message))
Esempio n. 17
0
def main(args):
    log = logging.getLogger(APP_NAME)
    log.setLevel(args.log_level)

    formatter = logging.Formatter(
        "%(asctime)s %(levelname)-7s %(name)s|%(message)s")
    ch = logging.StreamHandler()

    if args.log_path is None:
        ch.setLevel(args.log_level)
    else:
        fh = WatchedFileHandler(args.log_path)
        fh.setLevel(args.log_level)
        fh.setFormatter(formatter)
        log.addHandler(fh)
        ch.setLevel(logging.WARNING)

    ch.setFormatter(formatter)
    log.addHandler(ch)

    loop = asyncio.SelectorEventLoop()
    asyncio.set_event_loop(loop)

    down = asyncio.Queue(loop=loop)
    up = asyncio.Queue(loop=loop)

    tok = token(args.connect, APP_NAME)
    node = create_udp_node(loop, tok, down, up)
    loop.create_task(node(token=tok))
    loop.create_task(queue_logger(loop, up))

    msg = parcel(
        tok,
        Alert(datetime.datetime.now(), "Hello World!"),
        via=Address(tok.namespace, tok.user, tok.service, turberfield.ipc.demo.router.APP_NAME)
    )
    log.info("Sending message: {}".format(msg))
    loop.call_soon_threadsafe(functools.partial(down.put_nowait, msg))

    try:
        loop.run_forever()
    except KeyboardInterrupt:
        for task in asyncio.Task.all_tasks(loop=loop):
            task.cancel()

        for resource in resources:
            resource.close()

    finally:
        loop.close()
Esempio n. 18
0
    def test_pool_allocation(self):
        tok = token(
            "file://{}".format(self.root.name),
            "test",
            "addisonarches.web"
        )

        ports = range(49152, 65536)
        for n, p in enumerate(ports):
            with self.subTest(n=n, p=p):
                flow = list(Flow.create(tok, poa=["udp"], role=[], routing=[]))
                query = (Flow.inspect(i) for i in Flow.find(tok, policy="udp"))
                alloc = {(i.addr, i.port) for i in query}
                self.assertEqual(n + 1, len(alloc))
Esempio n. 19
0
def main(args):
    log = logging.getLogger(APP_NAME)
    log.setLevel(args.log_level)

    formatter = logging.Formatter(
        "%(asctime)s %(levelname)-7s %(name)s|%(message)s")
    ch = logging.StreamHandler()

    if args.log_path is None:
        ch.setLevel(args.log_level)
    else:
        fh = WatchedFileHandler(args.log_path)
        fh.setLevel(args.log_level)
        fh.setFormatter(formatter)
        log.addHandler(fh)
        ch.setLevel(logging.WARNING)

    ch.setFormatter(formatter)
    log.addHandler(ch)

    loop = asyncio.SelectorEventLoop()
    asyncio.set_event_loop(loop)

    down = asyncio.Queue(loop=loop)
    up = asyncio.Queue(loop=loop)

    tok = token(args.connect, APP_NAME)
    node = create_udp_node(loop, tok, down, up)
    loop.create_task(node(token=tok))
    loop.create_task(queue_logger(loop, up))

    msg = parcel(
        tok,
        Alert(datetime.datetime.now(), "Hello World!"),
        via=Address(tok.namespace, tok.user, tok.service, turberfield.ipc.demo.router.APP_NAME)
    )
    log.info("Sending message: {}".format(msg))
    loop.call_soon_threadsafe(functools.partial(down.put_nowait, msg))

    try:
        loop.run_forever()
    except KeyboardInterrupt:
        for task in asyncio.Task.all_tasks(loop=loop):
            task.cancel()

        for resource in resources:
            resource.close()

    finally:
        loop.close()
Esempio n. 20
0
    def test_find_flow_empty(self):
        tok = token("file://{}".format(self.root.name), "test",
                    "addisonarches.web")
        self.assertIs(None, tok.flow)
        rv = list(Flow.find(tok))
        self.assertFalse(rv)

        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("ignore")
            rv = next(Flow.create(tok, poa=[], role=[], routing=[]), None)
            self.assertIs(None, rv)

        results = list(Flow.find(tok))
        self.assertFalse(results)
Esempio n. 21
0
    def test_route_inspection_use_case(self):
        self.test_create_routing()

        tok = token(
            "file://{}".format(self.root.name),
            "test",
            "addisonarches.web"
        )
        search = ((i, Flow.inspect(i)) for i in Flow.find(tok, policy="application"))
        query = (
            ref
            for ref, table in search
            for rule in table
            if rule.dst.application == "turberfield.ipc.demo.receiver"
        )
        self.assertEqual(1, len(list(query)))
Esempio n. 22
0
    def test_create_policy(self):
        tok = token("file://{}".format(self.root.name), "test",
                    "addisonarches.web")
        self.assertIs(None, tok.flow)
        rv = list(Flow.find(tok))
        self.assertFalse(rv)

        self.assertTrue(
            list(gather_installed("turberfield.ipc.poa")),
            "No declared POA endpoints; install package for testing.")

        rv = next(Flow.create(tok, poa=["udp"], role=[], routing=[]))
        self.assertEqual("udp", rv.policy)
        self.assertEqual(".json", rv.suffix)

        udp = Flow.inspect(rv)
        self.assertIsInstance(udp.port, int)
Esempio n. 23
0
    def test_create_policy_unregistered(self):
        tok = token(
            "file://{}".format(self.root.name),
            "test",
            "addisonarches.web"
        )
        self.assertIs(None, tok.flow)
        rv = next(Flow.find(tok), None)
        self.assertIs(None, rv)

        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("always")
            rv = next(Flow.create(tok, poa=["ftp"], role=[], routing=[]))
            self.assertIs(None, rv)
            self.assertTrue(
                issubclass(w[-1].category, UserWarning))
            self.assertIn("No policy", str(w[-1].message))
Esempio n. 24
0
    def test_find_flow_empty(self):
        tok = token(
            "file://{}".format(self.root.name),
            "test",
            "addisonarches.web"
        )
        self.assertIs(None, tok.flow)
        rv = list(Flow.find(tok))
        self.assertFalse(rv)

        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("ignore")
            rv = next(Flow.create(tok, poa=[], role=[], routing=[]), None)
            self.assertIs(None, rv)

        results = list(Flow.find(tok))
        self.assertFalse(results)
Esempio n. 25
0
def main(args):
    loop = asyncio.SelectorEventLoop()
    log = logging.getLogger(log_setup(args, loop=loop))
    asyncio.set_event_loop(loop)

    down = asyncio.Queue(loop=loop)
    up = asyncio.Queue(loop=loop)

    #TODO: Read service name from CLI
    service = "dev"  # Cf qa, demo, prod, etc
    tok = token(args.connect, service, args.session)
    node = create_udp_node(loop, tok, down, up)
    loop.create_task(node(token=tok))

    progress, down, up = addisonarches.game.create(
        args.output, args.session, args.name,
        tok, down=down, up=up, loop=loop
    )
    loop.run_forever()
Esempio n. 26
0
def main(args):
    log = logging.getLogger(APP_NAME)
    log.setLevel(args.log_level)

    formatter = logging.Formatter(
        "%(asctime)s %(levelname)-7s %(name)s|%(message)s")
    ch = logging.StreamHandler()

    if args.log_path is None:
        ch.setLevel(args.log_level)
    else:
        fh = WatchedFileHandler(args.log_path)
        fh.setLevel(args.log_level)
        fh.setFormatter(formatter)
        log.addHandler(fh)
        ch.setLevel(logging.WARNING)

    ch.setFormatter(formatter)
    log.addHandler(ch)

    loop = asyncio.SelectorEventLoop()
    asyncio.set_event_loop(loop)

    down = asyncio.Queue(loop=loop)
    up = asyncio.Queue(loop=loop)

    tok = token(args.connect, APP_NAME)
    node = create_udp_node(loop, tok, down, up)
    loop.create_task(node(token=tok))

    log.info("Starting router node...")
    try:
        loop.run_forever()
    except KeyboardInterrupt:
        for task in asyncio.Task.all_tasks(loop=loop):
            task.cancel()

        for resource in resources:
            resource.close()

    finally:
        loop.close()
Esempio n. 27
0
def main(args):
    log = logging.getLogger(APP_NAME)
    log.setLevel(args.log_level)

    formatter = logging.Formatter(
        "%(asctime)s %(levelname)-7s %(name)s|%(message)s")
    ch = logging.StreamHandler()

    if args.log_path is None:
        ch.setLevel(args.log_level)
    else:
        fh = WatchedFileHandler(args.log_path)
        fh.setLevel(args.log_level)
        fh.setFormatter(formatter)
        log.addHandler(fh)
        ch.setLevel(logging.WARNING)

    ch.setFormatter(formatter)
    log.addHandler(ch)

    loop = asyncio.SelectorEventLoop()
    asyncio.set_event_loop(loop)

    down = asyncio.Queue(loop=loop)
    up = asyncio.Queue(loop=loop)

    tok = token(args.connect, APP_NAME)
    node = create_udp_node(loop, tok, down, up)
    loop.create_task(node(token=tok))

    log.info("Starting router node...")
    try:
        loop.run_forever()
    except KeyboardInterrupt:
        for task in asyncio.Task.all_tasks(loop=loop):
            task.cancel()

        for resource in resources:
            resource.close()

    finally:
        loop.close()
Esempio n. 28
0
    def test_create_policy(self):
        tok = token(
            "file://{}".format(self.root.name),
            "test",
            "addisonarches.web"
        )
        self.assertIs(None, tok.flow)
        rv = list(Flow.find(tok))
        self.assertFalse(rv)

        self.assertTrue(
            list(gather_installed("turberfield.ipc.poa")),
            "No declared POA endpoints; install package for testing."
        )

        rv = next(Flow.create(tok, poa=["udp"], role=[], routing=[]))
        self.assertEqual("udp", rv.policy)
        self.assertEqual(".json", rv.suffix)

        udp = Flow.inspect(rv)
        self.assertIsInstance(udp.port, int)
Esempio n. 29
0
        def game_setup(loop, output):
            down = asyncio.Queue(loop=loop)
            up = asyncio.Queue(loop=loop)

            tok = token(
                GameTests.connect,
                "test",
                "addisonarches.test.game"
            )
            node = create_udp_node(loop, tok, down, up)
            loop.create_task(node(token=tok))

            game, clock, down, up = create_game(
                output, user=GameTests.user, name="test",
                down=down, up=up, loop=loop
            )
            progress, down, up = init_game(
                game, clock, down, up, loop=self.loop
            )

            # Tests start at Addison Arches
            game.location = game.home

            return progress
Esempio n. 30
0
 def test_find_application(self):
     tok = token("file://{}".format(self.root.name), "test",
                 "addisonarches.web")
     self.assertIs(None, tok.flow)
     results = list(Flow.find(tok, application="addisonarches.game"))
     self.assertFalse(results)