Ejemplo n.º 1
0
    def test_secure_sec_cannot_connect_returns_none(self):
        authenticator = authentication.SocketAuthenticator(
            client=ContractingClient(), ctx=self.ctx)

        w = Wallet()
        w2 = Wallet()

        authenticator.add_verifying_key(w.verifying_key)
        authenticator.add_verifying_key(w2.verifying_key)
        authenticator.configure()

        async def get():
            r = await router.secure_send(msg={'hello': 'there'},
                                         service='something',
                                         wallet=w2,
                                         vk=w.verifying_key,
                                         ip='tcp://x',
                                         ctx=self.ctx)

            return r

        loop = asyncio.get_event_loop()
        res = loop.run_until_complete(get())

        self.assertEqual(res, None)

        authenticator.authenticator.stop()
Ejemplo n.º 2
0
 def setUp(self):
     self.ctx = zmq.asyncio.Context()
     self.loop = asyncio.new_event_loop()
     self.driver = ContractDriver(driver=InMemDriver())
     asyncio.set_event_loop(self.loop)
     self.authenticator = authentication.SocketAuthenticator(
         client=ContractingClient(driver=self.driver), ctx=self.ctx)
Ejemplo n.º 3
0
    def test_multicast_sends_to_multiple(self):
        authenticator = authentication.SocketAuthenticator(
            client=ContractingClient(), ctx=self.ctx)

        w1 = Wallet()
        w2 = Wallet()
        w3 = Wallet()

        authenticator.add_verifying_key(w1.verifying_key)
        authenticator.add_verifying_key(w2.verifying_key)
        authenticator.add_verifying_key(w3.verifying_key)
        authenticator.configure()

        m1 = router.Router(socket_id='tcp://127.0.0.1:10000',
                           ctx=self.ctx,
                           linger=2000,
                           poll_timeout=50,
                           secure=True,
                           wallet=w1)

        q1 = router.QueueProcessor()
        m1.add_service('something', q1)

        m2 = router.Router(socket_id='tcp://127.0.0.1:10001',
                           ctx=self.ctx,
                           linger=2000,
                           poll_timeout=50,
                           secure=True,
                           wallet=w2)

        q2 = router.QueueProcessor()
        m2.add_service('something', q2)

        async def get():
            peers = {
                w1.verifying_key: 'tcp://127.0.0.1:10000',
                w2.verifying_key: 'tcp://127.0.0.1:10001'
            }

            await router.secure_multicast(msg={'hello': 'there'},
                                          service='something',
                                          wallet=w3,
                                          peer_map=peers,
                                          ctx=self.ctx)

        tasks = asyncio.gather(
            m1.serve(),
            m2.serve(),
            get(),
            stop_server(m1, 1),
            stop_server(m2, 1),
        )

        loop = asyncio.get_event_loop()
        loop.run_until_complete(tasks)

        self.assertEqual(q1.q[0], {'hello': 'there'})
        self.assertEqual(q2.q[0], {'hello': 'there'})
Ejemplo n.º 4
0
    def setUp(self):
        self.ctx = zmq.asyncio.Context()
        self.loop = asyncio.new_event_loop()
        asyncio.set_event_loop(self.loop)

        self.authenticator = authentication.SocketAuthenticator(
            client=ContractingClient(), ctx=self.ctx)

        self.b = masternode.BlockService(blocks=storage.BlockStorage(),
                                         driver=ContractDriver())

        self.r = router.Router(socket_id='tcp://127.0.0.1:18001', ctx=self.ctx)

        self.r.add_service(base.BLOCK_SERVICE, self.b)
Ejemplo n.º 5
0
    def setUp(self):
        self.ctx = zmq.asyncio.Context()
        self.loop = asyncio.new_event_loop()
        asyncio.set_event_loop(self.loop)

        self.blocks = storage.BlockStorage()

        self.driver = ContractDriver(driver=InMemDriver())
        self.b = masternode.BlockService(blocks=self.blocks,
                                         driver=self.driver)

        self.blocks.drop_collections()
        self.driver.flush()

        self.authenticator = authentication.SocketAuthenticator(
            client=ContractingClient(), ctx=self.ctx)
Ejemplo n.º 6
0
    def test_secure_request_returns_result(self):
        authenticator = authentication.SocketAuthenticator(
            client=ContractingClient(), ctx=self.ctx)

        w = Wallet()
        w2 = Wallet()

        authenticator.add_verifying_key(w.verifying_key)
        authenticator.add_verifying_key(w2.verifying_key)
        authenticator.configure()

        class MockProcessor(router.Processor):
            async def process_message(self, msg):
                return {'whats': 'good'}

        m = router.Router(socket_id='tcp://127.0.0.1:10000',
                          ctx=self.ctx,
                          linger=2000,
                          poll_timeout=50,
                          secure=True,
                          wallet=w)

        m.add_service('something', MockProcessor())

        async def get():
            r = await router.secure_request(msg={'hello': 'there'},
                                            service='something',
                                            wallet=w2,
                                            vk=w.verifying_key,
                                            ip='tcp://127.0.0.1:10000',
                                            ctx=self.ctx)

            return r

        tasks = asyncio.gather(
            m.serve(),
            get(),
            stop_server(m, 1),
        )

        loop = asyncio.get_event_loop()
        res = loop.run_until_complete(tasks)

        self.assertDictEqual(res[1], {'whats': 'good'})

        authenticator.authenticator.stop()
Ejemplo n.º 7
0
    def setUp(self):
        self.ctx = zmq.asyncio.Context()
        self.loop = asyncio.new_event_loop()
        asyncio.set_event_loop(self.loop)

        self.base_tcp = 'tcp://127.0.0.1:19000'
        self.base_wallet = Wallet()

        self.router = Router(socket_id=self.base_tcp,
                             ctx=self.ctx,
                             wallet=self.base_wallet,
                             secure=True)

        self.authenticator = authentication.SocketAuthenticator(
            client=ContractingClient(), ctx=self.ctx)
        self.authenticator.add_verifying_key(self.base_wallet.verifying_key)
        self.authenticator.configure()
Ejemplo n.º 8
0
    def test_secure_request_sends_as_service(self):
        authenticator = authentication.SocketAuthenticator(
            client=ContractingClient(), ctx=self.ctx)

        w = Wallet()
        w2 = Wallet()

        authenticator.add_verifying_key(w.verifying_key)
        authenticator.add_verifying_key(w2.verifying_key)
        authenticator.configure()

        m = router.JSONAsyncInbox(socket_id='tcp://127.0.0.1:10000',
                                  ctx=self.ctx,
                                  linger=2000,
                                  poll_timeout=50,
                                  secure=True,
                                  wallet=w)

        async def get():
            r = await router.secure_request(msg={'hello': 'there'},
                                            service='something',
                                            wallet=w2,
                                            vk=w.verifying_key,
                                            ip='tcp://127.0.0.1:10000',
                                            ctx=self.ctx)

            return r

        tasks = asyncio.gather(
            m.serve(),
            get(),
            stop_server(m, 1),
        )

        loop = asyncio.get_event_loop()
        res = loop.run_until_complete(tasks)

        self.assertDictEqual(res[1], {
            'service': 'something',
            'msg': {
                'hello': 'there'
            }
        })
Ejemplo n.º 9
0
    def test_secure_send_receives_messages(self):
        authenticator = authentication.SocketAuthenticator(
            client=ContractingClient(), ctx=self.ctx)

        w = Wallet()
        w2 = Wallet()

        authenticator.add_verifying_key(w.verifying_key)
        authenticator.add_verifying_key(w2.verifying_key)
        authenticator.configure()

        m = router.Router(socket_id='tcp://127.0.0.1:10000',
                          ctx=self.ctx,
                          linger=2000,
                          poll_timeout=50,
                          secure=True,
                          wallet=w)

        q = router.QueueProcessor()
        m.add_service('something', q)

        async def get():
            await router.secure_send(msg={'hello': 'there'},
                                     service='something',
                                     wallet=w2,
                                     vk=w.verifying_key,
                                     ip='tcp://127.0.0.1:10000',
                                     ctx=self.ctx)

        tasks = asyncio.gather(
            m.serve(),
            get(),
            stop_server(m, 1),
        )

        loop = asyncio.get_event_loop()
        loop.run_until_complete(tasks)

        self.assertEqual(q.q[0], {'hello': 'there'})

        authenticator.authenticator.stop()
Ejemplo n.º 10
0
    def __init__(self,
                 socket_base,
                 ctx: zmq.asyncio.Context,
                 wallet,
                 constitution: dict,
                 bootnodes={},
                 blocks=storage.BlockStorage(),
                 driver=ContractDriver(),
                 debug=True,
                 store=False,
                 seed=None,
                 bypass_catchup=False,
                 node_type=None,
                 genesis_path=lamden.contracts.__path__[0],
                 reward_manager=rewards.RewardManager(),
                 nonces=storage.NonceStorage()):

        self.driver = driver
        self.nonces = nonces
        self.store = store

        self.seed = seed

        self.blocks = blocks
        self.event_writer = EventWriter()

        self.log = get_logger('Base')
        self.log.propagate = debug
        self.socket_base = socket_base
        self.wallet = wallet
        self.ctx = ctx

        self.genesis_path = genesis_path

        self.client = ContractingClient(driver=self.driver,
                                        submission_filename=genesis_path +
                                        '/submission.s.py')

        self.bootnodes = bootnodes
        self.constitution = constitution

        self.seed_genesis_contracts()

        self.socket_authenticator = authentication.SocketAuthenticator(
            bootnodes=self.bootnodes, ctx=self.ctx, client=self.client)

        self.upgrade_manager = upgrade.UpgradeManager(client=self.client,
                                                      wallet=self.wallet,
                                                      node_type=node_type)

        self.router = router.Router(socket_id=socket_base,
                                    ctx=self.ctx,
                                    wallet=wallet,
                                    secure=True)

        self.network = network.Network(wallet=wallet,
                                       ip_string=socket_base,
                                       ctx=self.ctx,
                                       router=self.router)

        self.new_block_processor = NewBlock(driver=self.driver)
        self.router.add_service(
            NEW_BLOCK_SERVICE,
            self.new_block_processor)  # Add this after catch up?

        self.running = False
        self.upgrade = False

        self.reward_manager = reward_manager

        self.current_height = storage.get_latest_block_height(self.driver)
        self.current_hash = storage.get_latest_block_hash(self.driver)

        self.bypass_catchup = bypass_catchup