コード例 #1
0
        private async Task LoadRouteDefinitionsAsync()
        {
            if (_routeTemplateCollection != null)
            {
                return;
            }
            using (_asyncLock.StartLockAsync())
            {
                if (_routeTemplateCollection != null)
                {
                    return;
                }
                _routeTemplateCollection = new RouteTemplateCollection <List <RouteDefinition> >();

                var routeDefinitionUri = new Uri(_gatewayOptions.RouteDefinitionsUri, UriKind.RelativeOrAbsolute);
                var routeDefinitions   = await _configurationRetriever.RetrieveRouteDefinitionsAsync <List <RouteDefinition> >(routeDefinitionUri);

                foreach (var routeDefinition in routeDefinitions)
                {
                    var routeTemplateDefinitions = _routeTemplateCollection.Get(routeDefinition.RouteTemplate);
                    if (routeTemplateDefinitions == null)
                    {
                        routeTemplateDefinitions = new List <RouteDefinition>();
                        _routeTemplateCollection.Add(routeDefinition.RouteTemplate, routeTemplateDefinitions);
                    }
                    routeTemplateDefinitions.Add(routeDefinition);
                }
            }
        }
コード例 #2
0
        private async Task LoadConnectionDefinitions()
        {
            if (_connectionDefinitions == null)
            {
                var connectionDefinitionsUri = new Uri(_restDbOptions.ConnectionDefinitionsUri, UriKind.RelativeOrAbsolute);

                _connectionDefinitions = await _configurationRetriever.RetrieveRouteDefinitionsAsync <Dictionary <string, ConnectionDefinition> >(connectionDefinitionsUri);
            }
        }
コード例 #3
0
        public async Task RetrieveRouteDefinition_MustBeCalled_Once_Test()
        {
            var httpContext = new DefaultHttpContext();

            await _mockerMiddleware.InvokeAsync(httpContext);

            await _mockerMiddleware.InvokeAsync(httpContext);

            A.CallTo(() => _configurationRetriever.RetrieveRouteDefinitionsAsync <List <RouteDefinition> >(A <Uri> .Ignored))
            .MustHaveHappenedOnceExactly();
        }
コード例 #4
0
ファイル: MockerMiddleware.cs プロジェクト: gighen76/gatemq
        public async Task InvokeAsync(HttpContext httpContext)
        {
            if (_routeTemplateCollection == null)
            {
                var routeDefinitionUri = new Uri(_mockerOptions.RouteDefinitionsUri, UriKind.RelativeOrAbsolute);
                var routeDefinitions   = await _configurationRetriever.RetrieveRouteDefinitionsAsync <List <RouteDefinition> >(routeDefinitionUri);

                var routeTemplateCollection = new RouteTemplateCollection <RouteDefinition>();
                foreach (var routeDefinition in routeDefinitions)
                {
                    routeTemplateCollection.Add(routeDefinition.RouteTemplate, routeDefinition);
                }

                _routeTemplateCollection = routeTemplateCollection;
            }

            var match = _routeTemplateCollection.Match(httpContext.Request.Path);

            if (match?.Item.RouteMethods == null || !match.Item.RouteMethods.Contains(httpContext.Request.Method))
            {
                await _next(httpContext);

                return;
            }

            await Task.Delay(match.Item.DelayInMilliseconds, httpContext.RequestAborted);

            httpContext.Response.StatusCode = match.Item.StatusCode;
            if (match.Item.Headers != null)
            {
                foreach (var header in match.Item.Headers)
                {
                    httpContext.Response.Headers.TryAdd(header.Key, header.Value);
                }
            }

            var body = Encoding.UTF8.GetBytes(match.Item.Body);
            await httpContext.Response.Body.WriteAsync(body, httpContext.RequestAborted);


            _historyRepository.Add(new HistoryItem
            {
                RequestPath    = httpContext.Request.Path,
                RequestQuery   = httpContext.Request.Query.Select(q => new KeyValuePair <string, string>(q.Key, q.Value)).ToList(),
                RequestMethod  = httpContext.Request.Method,
                RequestHeaders = httpContext.Request.Headers.Select(h => new KeyValuePair <string, string>(h.Key, h.Value.ToString())).ToList()
            });
        }
コード例 #5
0
        public async Task Test()
        {
            var claimMappings = new Dictionary <string, string>
            {
                { "Claim1", "X-CLAIM-1" }
            };
            var claims = new List <Claim>
            {
                new Claim("Claim1", "claim1-value")
            };

            var httpContext = new DefaultHttpContext();

            httpContext.Connection.RemoteIpAddress = IPAddress.Loopback;
            httpContext.Request.Path   = "/";
            httpContext.Request.Method = "GET";
            httpContext.User           = new ClaimsPrincipal(new ClaimsIdentity(claims, "basic"));

            A.CallTo(() => _configurationRetriever
                     .RetrieveRouteDefinitionsAsync <List <RouteDefinition> >(A <Uri> .Ignored))
            .Returns(new List <RouteDefinition>
            {
                new RouteDefinition
                {
                    RouteTemplate = "/",
                    ClaimMappings = claimMappings,
                    RouteMethods  = new List <string> {
                        "GET"
                    },
                    RouteEndpoints = new List <string>
                    {
                        "http://test-host"
                    }
                }
            });

            var routeDefinitionMatch = await _routeDefinitionMatcher.MatchAsync(
                httpContext.Request.Path.Value,
                httpContext.Request.Method);

            Assert.IsNotNull(routeDefinitionMatch);
        }