async def setUp(self) -> None: pub_key = "a04f30a45aae413d0ca0f219b4dcb7049857bc3f91a6351288cce603a2c9646294a02b987bf6586b370b2c22d74662355677007a14238bb037aedf41c2d08866" opts = gateway_helpers.get_gateway_opts( 8000, include_default_eth_args=True, pub_key=pub_key, ) if opts.use_extensions: helpers.set_extensions_parallelism() node_ssl_service = MockNodeSSLService(EthGatewayNode.NODE_TYPE, MagicMock()) self.node = EthGatewayNode(opts, node_ssl_service) self.feed_manager = FeedManager(self.node) self.node.feed_manager = self.feed_manager self.rpc = SubscriptionRpcHandler(self.node, self.feed_manager, Case.SNAKE) self.feed_name = NewTransactionFeed.NAME self.node.init_live_feeds() self.feed_service_model = FeedServiceModelBase( allow_filtering=True, available_fields=["all"]) self.base_feed_service_model = BdnFeedServiceModelConfigBase( expire_date="2999-01-01", feed=self.feed_service_model) self.node.account_model = BdnAccountModelBase( account_id="account_id", certificate="", logical_account_name="test", new_transaction_streaming=self.base_feed_service_model, )
async def test_subscribe_to_feed_with_filtering_not_allowed(self): feed_service_model = FeedServiceModelBase( allow_filtering=False, available_fields=["all"] ) base_feed_service_model = BdnFeedServiceModelConfigBase( expire_date="2999-01-01", feed=feed_service_model ) self.gateway.account_model.new_transaction_streaming = base_feed_service_model self.gateway.account_model.get_feed_service_config_by_name = MagicMock( return_value=self.gateway.account_model.new_transaction_streaming ) feed = TestFeed("bar") feed.FILTERS = ["to", "field2"] self.feed_manager.register_feed(feed) subscribe_request1 = BxJsonRpcRequest( "1", RpcRequestType.SUBSCRIBE, ["bar", {"filters": "to = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"}], ) with self.assertRaises(RpcAccountIdError): rpc_handler = self.rpc.get_request_handler(subscribe_request1) await rpc_handler.process_request()
async def test_subscribe_to_feed_no_feed_service(self): # allow feed if service is not defined (old account) self.node.account_model.new_transaction_streaming = BdnFeedServiceModelConfigBase( expire_date="2999-01-01") subscribe_request1 = BxJsonRpcRequest( "1", RpcRequestType.SUBSCRIBE, [self.feed_name, {}], ) subscribe_request2 = BxJsonRpcRequest( "1", RpcRequestType.SUBSCRIBE, [ self.feed_name, { "include": ["tx_hash", "tx_contents.gas_price"] } ], ) rpc_handler = self.rpc.get_request_handler(subscribe_request1) result = await rpc_handler.process_request() self.assertTrue(result) rpc_handler = self.rpc.get_request_handler(subscribe_request2) result = await rpc_handler.process_request() self.assertTrue(result)
async def setUp(self) -> None: self.feed_service_model = FeedServiceModelBase( allow_filtering=True, available_fields=["all"]) self.base_feed_service_model = BdnFeedServiceModelConfigBase( expire_date="2999-01-01", feed=self.feed_service_model) account_model = BdnAccountModelBase( "account_id", "account_name", "fake_certificate", tier_name="Developer", new_transaction_streaming=self.base_feed_service_model, new_pending_transaction_streaming=self.base_feed_service_model, on_block_feed=self.base_feed_service_model, transaction_receipts_feed=self.base_feed_service_model) gateway_opts = gateway_helpers.get_gateway_opts(8000, ws=True) gateway_opts.set_account_options(account_model) self.gateway_node = MockGatewayNode(gateway_opts) self.gateway_node.NODE_TYPE = NodeType.INTERNAL_GATEWAY self.transaction_streamer_peer = OutboundPeerModel( "127.0.0.1", 8006, node_type=NodeType.INTERNAL_GATEWAY) self.gateway_node.requester = ThreadedRequestService( "mock_thread_service", self.gateway_node.alarm_queue, constants.THREADED_HTTP_POOL_SLEEP_INTERVAL_S, ) self.gateway_node.requester.start() self.server = WsServer(constants.LOCALHOST, 8005, self.gateway_node.feed_manager, self.gateway_node) self.ws_uri = f"ws://{constants.LOCALHOST}:8005" await self.server.start() self.gateway_node.get_ws_server_status = MagicMock(return_value=True)
def test_cloud_api_account_setting(self): new_account_model = BdnAccountModelBase( "fake_id", "fake_name", "fake_cert", tx_paid=BdnQuotaServiceModelConfigBase(), block_paid=BdnQuotaServiceModelConfigBase(), cloud_api=BdnFeedServiceModelConfigBase( expire_date=str(date.today() + timedelta(days=100)), ), new_transaction_streaming=BdnFeedServiceModelConfigBase()) new_account_model_json = json_encoder.to_json(new_account_model) old_account_model = model_loader.load_model_from_json( BdnOldAccountModelBase, new_account_model_json) self.assertTrue(new_account_model.cloud_api.is_service_valid()) self.assertTrue(old_account_model.cloud_api.is_service_valid()) self.assertFalse( old_account_model.new_transaction_streaming.is_service_valid())
async def test_subscribe_to_feed_with_specific_available_field(self): feed_service_model = FeedServiceModelBase( allow_filtering=True, available_fields=["tx_contents.nonce"]) base_feed_service_model = BdnFeedServiceModelConfigBase( expire_date="2999-01-01", feed=feed_service_model) self.node.account_model.new_transaction_streaming = base_feed_service_model subscribe_request1 = BxJsonRpcRequest( "1", RpcRequestType.SUBSCRIBE, [self.feed_name, { "include": ["tx_contents.nonce"] }], ) rpc_handler = self.rpc.get_request_handler(subscribe_request1) result = await rpc_handler.process_request() self.assertTrue(result)
def setUp(self) -> None: self.gateway = MockGatewayNode(gateway_helpers.get_gateway_opts(8000)) self.feed_manager = FeedManager(self.gateway) self.rpc = SubscriptionRpcHandler(self.gateway, self.feed_manager, Case.SNAKE) self.feed_service_model = FeedServiceModelBase( allow_filtering=True, available_fields=["all"]) self.base_feed_service_model = BdnFeedServiceModelConfigBase( expire_date="2999-01-01", feed=self.feed_service_model) self.gateway.account_model = BdnAccountModelBase( account_id="account_id", certificate="", logical_account_name="test", new_transaction_streaming=self.base_feed_service_model, ) self.gateway.account_model.get_feed_service_config_by_name = MagicMock( return_value=self.gateway.account_model.new_transaction_streaming)
def get_gateway_opts(self) -> GatewayOpts: feed_service_model = FeedServiceModelBase(allow_filtering=True, available_fields=["all"]) base_feed_service_model = BdnFeedServiceModelConfigBase( expire_date="2999-01-01", feed=feed_service_model) self._account_model = BdnAccountModelBase( account_id="", logical_account_name="", certificate="", expire_date=utils_constants.DEFAULT_EXPIRATION_DATE.isoformat(), cloud_api=BdnServiceModelConfigBase( msg_quota=None, permit=BdnServiceModelBase(service_type=BdnServiceType.PERMIT), expire_date=utils_constants.DEFAULT_EXPIRATION_DATE.isoformat( )), new_transaction_streaming=base_feed_service_model, new_pending_transaction_streaming=base_feed_service_model, on_block_feed=base_feed_service_model, new_block_streaming=base_feed_service_model, transaction_state_feed=base_feed_service_model, blockchain_protocol="Ethereum", blockchain_network="Mainnet", )