public async Task WhenNodeRegistered_GivenUnregister_ShouldPass()
        {
            await _fixture.NameServerClient.ClearAll(_workContext);

            var request = new RouteRegistrationRequest {
                NodeId = "test/Node1"
            };

            RouteRegistrationResponse response = await _fixture.NameServerClient.Register(_workContext, request);

            var lookupRequest = new RouteLookupRequest {
                SearchNodeId = request.NodeId
            };

            RouteLookupResponse?lookupResponse = await _fixture.NameServerClient.Lookup(_workContext, lookupRequest);

            lookupResponse.Should().NotBeNull();
            lookupResponse !.NodeId.Should().Be(request.NodeId);

            await _fixture.NameServerClient.Unregister(_workContext, request);

            lookupResponse = await _fixture.NameServerClient.Lookup(_workContext, lookupRequest);

            lookupResponse.Should().BeNull();
        }
        public async Task WhenNodeNotExist_GivenLookup_ShouldFail()
        {
            await _fixture.NameServerClient.ClearAll(_workContext);

            var request = new RouteLookupRequest {
                SearchNodeId = "test/Node1"
            };

            RouteLookupResponse?response = await _fixture.NameServerClient.Lookup(_workContext, request);

            response.Should().BeNull();
        }
        public async Task GivenNode_WhenRegisterAndUnregistered_ShouldPass()
        {
            IContainer rootContainer = CreateContainer();

            using (ILifetimeScope container = rootContainer.BeginLifetimeScope())
            {
                _workContext = new WorkContextBuilder()
                               .Set(new ServiceProviderProxy(x => container.Resolve(x), x => container.ResolveOptional(x)))
                               .Build();

                RouteManager manager = container.Resolve <RouteManager>();

                const string nodeId = "Need/Customer";

                RouteRegistrationRequest request = new RouteRegistrationRequest {
                    NodeId = nodeId
                };

                RouteRegistrationResponse response = await manager.Register(_workContext, request);

                response.Should().NotBeNull();

                Uri uri = new ResourcePathBuilder()
                          .SetScheme(ResourceScheme.Queue)
                          .SetServiceBusName("Default")
                          .SetEntityName(nodeId)
                          .Build();

                response.InputQueueUri.Should().NotBeNullOrEmpty();
                response.InputQueueUri.Should().Be(uri.ToString());

                RouteLookupRequest routeLookupRequest = new RouteLookupRequest
                {
                    SearchNodeId = nodeId,
                };

                IReadOnlyList <RouteLookupResponse>?routeLookupResponses = await manager.Search(_workContext, routeLookupRequest);

                routeLookupResponses.Should().NotBeNull();
                routeLookupResponses.Count.Should().Be(1);
                routeLookupResponses[0].NodeId.Should().Be(nodeId);
                routeLookupResponses[0].InputUri.Should().Be(uri.ToString());

                await manager.Unregister(_workContext, request);

                routeLookupResponses = await manager.Search(_workContext, routeLookupRequest);

                routeLookupResponses.Should().NotBeNull();
                routeLookupResponses.Count.Should().Be(0);
            }
        }
Example #4
0
        public async Task <IActionResult> Lookup([FromBody] RouteLookupRequest routeLookupRequest)
        {
            if (routeLookupRequest == null || routeLookupRequest.SearchNodeId.IsEmpty())
            {
                return(StatusCode(StatusCodes.Status400BadRequest));
            }

            IReadOnlyList <RouteLookupResponse> response = await _routeManager.Search(_workContext, routeLookupRequest);

            if (response == null || response.Count != 1)
            {
                return(StatusCode(StatusCodes.Status404NotFound));
            }

            return(Ok(response[0]));
        }
        public async Task <RouteLookupResponse?> Lookup(IWorkContext context, RouteLookupRequest request)
        {
            RestResponse <RouteLookupResponse> response = await new RestClient(_httpClient)
                                                          .AddPath("api/Registgration")
                                                          .SetContent(request)
                                                          .SetValidHttpStatusCodes(HttpStatusCode.NotFound)
                                                          .SetEnsureSuccessStatusCode()
                                                          .GetAsync(context)
                                                          .GetResponseAsync <RouteLookupResponse>(context);

            if (response.HttpResponseMessage.StatusCode == HttpStatusCode.NotFound)
            {
                return(null);
            }
            return(response.Content);
        }
Example #6
0
        /// <summary>
        /// Search for node registration
        /// </summary>
        /// <param name="context"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <IReadOnlyList <RouteLookupResponse> > Search(IWorkContext context, RouteLookupRequest request)
        {
            request.Verify(nameof(request)).IsNotNull();

            INodeRegistrationManagementActor managementActor = await _actorManager.CreateProxy <INodeRegistrationManagementActor>("default");

            IReadOnlyList <NodeRegistrationModel> registrations = await managementActor.List(context, request.SearchNodeId !);

            return(registrations
                   .Select(x => new RouteLookupResponse
            {
                NodeId = x.NodeId,
                InputUri = x.InputUri,
            })
                   .ToList());
        }