def test_baseservice(): app = BaseApp() class TestService(service.BaseService): counter = 0 def _run(self): while True: self.counter += 1 gevent.sleep(0.01) s = TestService.register_with_app(app) assert hasattr(s, 'name') # register another services TestService.name = 'other' s2 = TestService.register_with_app(app) # start app app.start() gevent.sleep(.1) app.stop() # check if they ran concurrently assert s.counter > 0 and s2.counter > 0 assert abs(s.counter - s2.counter) <= 2
def test_app_restart(): host, port = '127.0.0.1', 3020 a_config = dict(p2p=dict(listen_host=host, listen_port=port), node=dict(privkey_hex=crypto.sha3('a').encode('hex'))) a_app = BaseApp(a_config) peermanager.PeerManager.register_with_app(a_app) # Restart app 10-times: there should be no exception for i in xrange(0, 10): a_app.start() assert a_app.services.peermanager.server.started try_tcp_connect((host, port)) assert a_app.services.peermanager.num_peers() == 0 a_app.stop() assert a_app.services.peermanager.is_stopped # Start the app 10-times: there should be no exception like 'Bind error' for i in xrange(0, 10): a_app.start() assert a_app.services.peermanager.server.started try_tcp_connect((host, port)) a_app.stop() assert a_app.services.peermanager.is_stopped
def get_connected_apps(): a_config = dict(p2p=dict(listen_host='127.0.0.1', listen_port=3000), node=dict(privkey_hex=crypto.sha3('a').encode('hex'))) b_config = copy.deepcopy(a_config) b_config['p2p']['listen_port'] = 3001 b_config['node']['privkey_hex'] = crypto.sha3('b').encode('hex') a_app = BaseApp(a_config) peermanager.PeerManager.register_with_app(a_app) a_app.start() b_app = BaseApp(b_config) peermanager.PeerManager.register_with_app(b_app) b_app.start() a_peermgr = a_app.services.peermanager b_peermgr = b_app.services.peermanager # connect host = b_config['p2p']['listen_host'] port = b_config['p2p']['listen_port'] pubkey = crypto.privtopub(b_config['node']['privkey_hex'].decode('hex')) a_peermgr.connect((host, port), remote_pubkey=pubkey) return a_app, b_app
def get_connected_apps(): a_config = dict(p2p=dict(listen_host='127.0.0.1', listen_port=3005), node=dict(privkey_hex=encode_hex(crypto.sha3(b'a')))) b_config = copy.deepcopy(a_config) b_config['p2p']['listen_port'] = 3006 b_config['node']['privkey_hex'] = encode_hex(crypto.sha3(b'b')) a_app = BaseApp(a_config) peermanager.PeerManager.register_with_app(a_app) a_app.start() b_app = BaseApp(b_config) peermanager.PeerManager.register_with_app(b_app) b_app.start() a_peermgr = a_app.services.peermanager b_peermgr = b_app.services.peermanager # connect host = b_config['p2p']['listen_host'] port = b_config['p2p']['listen_port'] pubkey = crypto.privtopub(decode_hex(b_config['node']['privkey_hex'])) a_peermgr.connect((host, port), remote_pubkey=pubkey) return a_app, b_app
def app(request): app = BaseApp() ChainServiceMock.register_with_app(app) PoWService.register_with_app(app) app.start() request.addfinalizer(lambda: app.stop()) return app
def test_baseservice(): app = BaseApp() class TestService(service.BaseService): counter = 0 def _run(self): while True: self.counter += 1 gevent.sleep(0.01) s = TestService.register_with_app(app) assert hasattr(s, "name") # register another services TestService.name = "other" s2 = TestService.register_with_app(app) # start app app.start() gevent.sleep(0.1) app.stop() # check if they ran concurrently assert s.counter > 0 and s.counter <= 10 assert s2.counter > 0 and s2.counter <= 10
def connect_go(): a_config = dict(p2p=dict(listen_host='127.0.0.1', listen_port=3000), node=dict(privkey_hex=crypto.sha3('a').encode('hex'))) a_app = BaseApp(a_config) peermanager.PeerManager.register_with_app(a_app) a_app.start() a_peermgr = a_app.services.peermanager # connect pubkey = "6ed2fecb28ff17dec8647f08aa4368b57790000e0e9b33a7b91f32c41b6ca9ba21600e9a8c44248ce63a71544388c6745fa291f88f8b81e109ba3da11f7b41b9".decode( 'hex') a_peermgr.connect(('127.0.0.1', 30303), remote_pubkey=pubkey) gevent.sleep(50) a_app.stop()
def connect_go(): a_config = dict(p2p=dict(listen_host='127.0.0.1', listen_port=3000), node=dict(privkey_hex=crypto.sha3('a').encode('hex'))) a_app = BaseApp(a_config) peermanager.PeerManager.register_with_app(a_app) a_app.start() a_peermgr = a_app.services.peermanager # connect pubkey = "6ed2fecb28ff17dec8647f08aa4368b57790000e0e9b33a7b91f32c41b6ca9ba21600e9a8c44248ce63a71544388c6745fa291f88f8b81e109ba3da11f7b41b9".decode( 'hex') a_peermgr.connect(('127.0.0.1', 30303), remote_pubkey=pubkey) gevent.sleep(50) a_app.stop()
def main(): import gevent import signal client_name = 'exampleapp' version = '0.1' client_version = '%s/%s/%s' % (version, sys.platform, 'py%d.%d.%d' % sys.version_info[:3]) client_version_string = '%s/v%s' % (client_name, client_version) default_config = dict(BaseApp.default_config) update_config_with_defaults(default_config, peermanager.PeerManager.default_config) update_config_with_defaults(default_config, NodeDiscovery.default_config) default_config['client_version_string'] = client_version_string default_config['post_app_start_callback'] = None default_config['node'][ 'privkey_hex'] = "b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291" default_config['discovery']['bootstrap_nodes'] = [ "enode://762dd8a0636e07a54b31169eba0c7a20a1ac1ef68596f1f283b5c676bae4064abfcce24799d09f67e392632d3ffdc12e3d6430dcb0ea19c318343ffa7aae74d4@127.0.0.1:22332" ] app = BaseApp(default_config) peermanager.PeerManager.register_with_app(app) NodeDiscovery.register_with_app(app) gevent.get_hub( ).SYSTEM_ERROR = BaseException # (KeyboardInterrupt, SystemExit, SystemError) app.start() # wait for interupt evt = gevent.event.Event() gevent.signal(signal.SIGQUIT, evt.set) gevent.signal(signal.SIGTERM, evt.set) gevent.signal(signal.SIGINT, evt.set) evt.wait() # finally stop app.stop()
def recv_found_nonce(self, bin_nonce, mixhash, mining_hash): log.info('nonce found', mining_hash=mining_hash.encode('hex')) blk = self.app.services.chain.chain.head_candidate if blk.mining_hash != mining_hash: log.warn('mining_hash does not match') self.mine_head_candidate() return blk.mixhash = mixhash blk.nonce = bin_nonce self.app.services.chain.add_mined_block(blk) def mine_head_candidate(self): self.on_new_head_candidate(self.app.services.chain.chain.head_candidate) def _run(self): self.mine_head_candidate() while True: cmd, kargs = self.ppipe.get() assert isinstance(kargs, dict) getattr(self, 'recv_' + cmd)(**kargs) def stop(self): self.worker_process.terminate() self.worker_process.join() super(PoWService, self).stop() if __name__ == "__main__": app = BaseApp() PoWService.register_with_app(app) app.start()