public async Task CreateClient_Test()
        {
            var remoteChainId = ChainOptions.ChainId;
            var localChainId  = ChainHelper.GetChainId(1);

            var host = "127.0.0.1";
            var port = 5100;
            await Server.StartAsync(port);

            var fakeCrossChainClient = new CrossChainClientCreationContext
            {
                LocalChainId          = localChainId,
                RemoteChainId         = remoteChainId,
                IsClientToParentChain = false,
                RemoteServerHost      = host,
                RemoteServerPort      = port
            };

            await _crossChainClientService.CreateClientAsync(fakeCrossChainClient);

            var res = _grpcCrossChainClientProvider.TryGetClient(remoteChainId, out var client);

            Assert.True(res);

            await client.ConnectAsync();

            Assert.True(client.IsConnected);

            await client.CloseAsync();

            Assert.False(client.IsConnected);
        }
        public async Task RequestCrossChainDataTest()
        {
            var crossChainClientCreationContext = new CrossChainClientCreationContext
            {
                LocalChainId          = 0,
                RemoteChainId         = 1,
                IsClientToParentChain = false,
                RemoteServerHost      = "localhost",
                RemoteServerPort      = 5000
            };
            var communicationHelper = GetRequiredService <CrossChainCommunicationTestHelper>();

            communicationHelper.SetClientConnected(crossChainClientCreationContext.RemoteChainId, true);
            await _crossChainClientService.CreateClientAsync(crossChainClientCreationContext);

            _crossChainCacheEntityService.RegisterNewChain(crossChainClientCreationContext.RemoteChainId, 10);
            communicationHelper.CheckClientConnected(-1).ShouldBeFalse();
            await _crossChainRequestService.RequestCrossChainDataFromOtherChainsAsync();

            communicationHelper.CheckClientConnected(-1).ShouldBeTrue();

            var chainInitializationData = await _crossChainRequestService.RequestChainInitializationDataAsync(crossChainClientCreationContext.RemoteChainId);

            chainInitializationData.CreationHeightOnParentChain.ShouldBe(1);
        }
        public void CreateCrossChainClient_Test()
        {
            var remoteChainId = ChainOptions.ChainId;
            var localChainId  = ChainHelper.GetChainId(1);

            var host = "127.0.0.1";
            var port = 5000;
            var crossChainClientDto = new CrossChainClientCreationContext
            {
                LocalChainId          = localChainId,
                RemoteChainId         = remoteChainId,
                IsClientToParentChain = false,
                RemoteServerHost      = host,
                RemoteServerPort      = port
            };

            var client         = _grpcCrossChainClientProvider.CreateChainInitializationDataClient(crossChainClientDto);
            var isClientCached = _grpcCrossChainClientProvider.TryGetClient(remoteChainId, out _);

            Assert.False(isClientCached);

            Assert.True(client.RemoteChainId == remoteChainId);
            Assert.False(client.IsConnected);
            Assert.Equal(remoteChainId, client.RemoteChainId);

            var expectedUriStr = string.Concat(host, ":", "5000");

            Assert.Equal(expectedUriStr, client.TargetUriString);
        }
        public Task <ICrossChainClient> CreateChainInitializationClientAsync(int chainId)
        {
            var crossChainClientDto = new CrossChainClientCreationContext
            {
                IsClientToParentChain = true,
                LocalChainId          = chainId
            };
            var client = _crossChainClientProvider.CreateChainInitializationDataClient(crossChainClientDto);

            return(Task.FromResult(client));
        }
        public void CreateAndCacheClient(int chainId, bool toParenChain, int port, int remoteChainId = 0)
        {
            var fakeCrossChainClient = new CrossChainClientCreationContext
            {
                LocalChainId          = chainId,
                RemoteChainId         = remoteChainId,
                IsClientToParentChain = toParenChain,
                RemoteServerHost      = "localhost",
                RemoteServerPort      = port
            };

            _grpcCrossChainClientProvider.AddOrUpdateClient(fakeCrossChainClient);
        }
        private ICrossChainClient CreateAndAddClient(CrossChainCommunicationTestHelper crossChainCommunicationTestHelper,
                                                     CrossChainClientCreationContext crossChainClientCreationContext)
        {
            crossChainCommunicationTestHelper.AddNewCrossChainClient(crossChainClientCreationContext);
            bool isConnected =
                crossChainCommunicationTestHelper.CheckClientConnected(crossChainClientCreationContext
                                                                       .RemoteChainId);

            return(MockCrossChainClient(crossChainClientCreationContext.RemoteChainId, isConnected,
                                        entity =>
            {
                crossChainCommunicationTestHelper.SetClientConnected(-1, true);
                return true;
            }));
        }
        public async Task GetClientTest()
        {
            int remoteChainId1 = ChainHelper.GetChainId(1);
            int remoteChainId2 = ChainHelper.GetChainId(2);
            int remoteChainId3 = ChainHelper.GetChainId(3);
            var localChainId   = ChainHelper.ConvertBase58ToChainId("AELF");
            {
                var crossChainClientCreationContext1 = new CrossChainClientCreationContext
                {
                    LocalChainId          = localChainId,
                    RemoteChainId         = remoteChainId1,
                    IsClientToParentChain = false,
                    RemoteServerHost      = "localhost",
                    RemoteServerPort      = 5000
                };
                _crossChainCommunicationTestHelper.SetClientConnected(remoteChainId1, true);
                await _crossChainClientService.CreateClientAsync(crossChainClientCreationContext1);

                var client1 = await _crossChainClientService.GetConnectedCrossChainClientAsync(remoteChainId1);

                client1.IsConnected.ShouldBeTrue();
                client1.RemoteChainId.ShouldBe(remoteChainId1);
            }

            {
                var crossChainClientCreationContext2 = new CrossChainClientCreationContext
                {
                    LocalChainId          = localChainId,
                    RemoteChainId         = remoteChainId2,
                    IsClientToParentChain = false,
                    RemoteServerHost      = "localhost",
                    RemoteServerPort      = 5000
                };
                _crossChainCommunicationTestHelper.SetClientConnected(remoteChainId2, false);
                await _crossChainClientService.CreateClientAsync(crossChainClientCreationContext2);

                var client2 = await _crossChainClientService.GetConnectedCrossChainClientAsync(remoteChainId2);

                client2.ShouldBeNull();
            }

            {
                var client3 = await _crossChainClientService.GetConnectedCrossChainClientAsync(remoteChainId3);

                client3.ShouldBeNull();
            }
        }
Exemple #8
0
        public ICrossChainClient AddOrUpdateClient(CrossChainClientCreationContext crossChainClientCreationContext)
        {
            var chainId = crossChainClientCreationContext.RemoteChainId;
            var uriStr  = crossChainClientCreationContext.IsClientToParentChain
                ? GetUriStr(_grpcCrossChainConfigOption.ParentChainServerIp,
                            _grpcCrossChainConfigOption.ParentChainServerPort)
                : GetUriStr(crossChainClientCreationContext.RemoteServerHost, crossChainClientCreationContext.RemoteServerPort);

            if (TryGetClient(chainId, out var client) && client.TargetUriString.Equals(uriStr))
            {
                return(client); // client already cached
            }
            client = CreateClient(crossChainClientCreationContext);
            _grpcCrossChainClients.TryAdd(chainId, client);
            Logger.LogTrace("Create client finished.");
            return(client);
        }
        public async Task AddClientTest()
        {
            int remoteChainId = ChainHelper.GetChainId(1);
            var localChainId  = ChainHelper.ConvertBase58ToChainId("AELF");
            var crossChainClientCreationContext = new CrossChainClientCreationContext
            {
                LocalChainId          = localChainId,
                RemoteChainId         = remoteChainId,
                IsClientToParentChain = false,
                RemoteServerHost      = "localhost",
                RemoteServerPort      = 5000
            };

            _crossChainCommunicationTestHelper.SetClientConnected(remoteChainId, true);
            var client = await _crossChainClientService.CreateClientAsync(crossChainClientCreationContext);

            client.IsConnected.ShouldBeTrue();
            client.RemoteChainId.ShouldBe(remoteChainId);
        }
Exemple #10
0
        private ICrossChainClient CreateClient(CrossChainClientCreationContext crossChainClientCreationContext)
        {
            var clientInitializationContext = new GrpcClientInitializationContext
            {
                DialTimeout   = _grpcCrossChainConfigOption.ConnectionTimeout,
                LocalChainId  = crossChainClientCreationContext.LocalChainId,
                ListeningPort = _grpcCrossChainConfigOption.ListeningPort,
                RemoteChainId = crossChainClientCreationContext.RemoteChainId
            };

            if (crossChainClientCreationContext.IsClientToParentChain)
            {
                clientInitializationContext.UriStr = GetUriStr(_grpcCrossChainConfigOption.ParentChainServerIp,
                                                               _grpcCrossChainConfigOption.ParentChainServerPort);
                return(new ClientForParentChain(clientInitializationContext));
            }

            clientInitializationContext.UriStr = GetUriStr(crossChainClientCreationContext.RemoteServerHost,
                                                           crossChainClientCreationContext.RemoteServerPort);
            return(new ClientForSideChain(clientInitializationContext));
        }
        public void TryGetClient_Test()
        {
            var remoteChainId = ChainOptions.ChainId;
            var localChainId  = ChainHelper.GetChainId(1);

            var host = "127.0.0.1";
            var port = 5000;
            var crossChainClientDto = new CrossChainClientCreationContext
            {
                LocalChainId          = localChainId,
                RemoteChainId         = remoteChainId,
                IsClientToParentChain = false,
                RemoteServerHost      = host,
                RemoteServerPort      = port
            };

            var client         = _grpcCrossChainClientProvider.AddOrUpdateClient(crossChainClientDto);
            var isClientCached = _grpcCrossChainClientProvider.TryGetClient(remoteChainId, out var clientInCache);

            Assert.True(isClientCached);
            Assert.Equal(client, clientInCache);
        }
        public void GetAllClients_Test()
        {
            var remoteChainId = ChainOptions.ChainId;
            var localChainId  = ChainHelper.GetChainId(1);

            var host = "127.0.0.1";
            var port = 5000;
            var crossChainClientDto = new CrossChainClientCreationContext
            {
                LocalChainId          = localChainId,
                RemoteChainId         = remoteChainId,
                IsClientToParentChain = false,
                RemoteServerHost      = host,
                RemoteServerPort      = port
            };

            var client = _grpcCrossChainClientProvider.AddOrUpdateClient(crossChainClientDto);

            var clients = _grpcCrossChainClientProvider.GetAllClients();

            Assert.Single(clients);
            Assert.Equal(client, clients[0]);
        }
        public Task <ICrossChainClient> CreateClientAsync(CrossChainClientCreationContext crossChainClientCreationContext)
        {
            var client = _crossChainClientProvider.AddOrUpdateClient(crossChainClientCreationContext);

            return(Task.FromResult(client));
        }
Exemple #14
0
 /// <summary>
 /// Create a new client to another chain.
 /// </summary>
 /// <returns>
 /// </returns>
 public ICrossChainClient CreateChainInitializationDataClient(CrossChainClientCreationContext crossChainClientCreationContext)
 {
     return(CreateClient(crossChainClientCreationContext));
 }
Exemple #15
0
 public bool TryGetCrossChainClientCreationContext(int chainId,
                                                   out CrossChainClientCreationContext crossChainClientCreationContext)
 {
     return(_crossChainClientCreationContexts.TryGetValue(chainId, out crossChainClientCreationContext));
 }
Exemple #16
0
 public void AddNewCrossChainClient(CrossChainClientCreationContext crossChainClientCreationContext)
 {
     _crossChainClientCreationContexts[crossChainClientCreationContext.RemoteChainId] =
         crossChainClientCreationContext;
 }