Ejemplo n.º 1
0
    public async Task ApplyAsync_EndpointDoesNotMatch_DoesNotReturns415WithContentTypeWildcardEndpoint()
    {
        // Arrange
        var endpoints = new[]
        {
            CreateEndpoint("/", new AcceptsMetadata(new string[] { "text/xml", "application/xml", })),
            CreateEndpoint("/", new AcceptsMetadata(new string[] { "*/*", }))
        };

        var candidates  = CreateCandidateSet(endpoints);
        var httpContext = new DefaultHttpContext()
        {
            Request =
            {
                ContentType = "application/json",
            },
        };

        var policy = CreatePolicy();

        // Act
        await policy.ApplyAsync(httpContext, candidates);

        // Assert
        Assert.False(candidates.IsValidCandidate(0));
        Assert.True(candidates.IsValidCandidate(1));
        Assert.Null(httpContext.GetEndpoint());
    }
Ejemplo n.º 2
0
        public async Task UseRouting_ServicesRegistered_Match_DoesNotSetsFeature()
        {
            // Arrange
            var endpoint = new RouteEndpoint(
                TestConstants.EmptyRequestDelegate,
                RoutePatternFactory.Parse("{*p}"),
                0,
                EndpointMetadataCollection.Empty,
                "Test");

            var services = CreateServices();

            var app = new ApplicationBuilder(services);

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.DataSources.Add(new DefaultEndpointDataSource(endpoint));
            });

            var appFunc     = app.Build();
            var httpContext = new DefaultHttpContext();

            // Act
            await appFunc(httpContext);

            // Assert
            var feature = httpContext.Features.Get <IEndpointFeature>();

            Assert.NotNull(feature);
            Assert.Same(endpoint, httpContext.GetEndpoint());
        }
Ejemplo n.º 3
0
        private async Task <Endpoint> GenerateCorsEndPoint(bool isOptionsRequest, bool includeMetadata)
        {
            // Arrange
            IEndpointRouteBuilder builder = EndpointRouteBuilderFactory.Create("odata",
                                                                               c => c.AddService(ServiceLifetime.Singleton, b => GetEdmModel()));

            HttpContext httpContext = new DefaultHttpContext
            {
                RequestServices = builder.ServiceProvider
            };

            var httpMethod = isOptionsRequest ? HttpMethod.Options : HttpMethod.Get;

            HttpRequest          request = SetHttpRequest(httpContext, httpMethod, "http://localhost:123/Customers(1)");
            RouteValueDictionary values  = new RouteValueDictionary();

            values.Add("ODataEndpointPath_odata", "Customers(1)");

            ActionDescriptor actionDescriptor = new ControllerActionDescriptor
            {
                ControllerName   = "Customers",
                ActionName       = "Get",
                EndpointMetadata = GenerateMetadata(includeMetadata)
            };

            IActionSelector actionSelector = new MockActionSelector(actionDescriptor);

            ODataEndpointRouteValueTransformer transformer = new ODataEndpointRouteValueTransformer(actionSelector);
            await transformer.TransformAsync(httpContext, values);

            return(httpContext.GetEndpoint());
        }
Ejemplo n.º 4
0
    public async Task IEndpointSelectorPolicy_ApplyAsync_ProcessesInvalidCandidate(int candidateNum)
    {
        var policy = (IEndpointSelectorPolicy)CreatePolicy();

        var endpoints = new RouteEndpoint[candidateNum];

        for (int i = 0; i < candidateNum; i++)
        {
            endpoints[i] = CreateEndpoint("/", new HttpMethodMetadata(new[] { "DEL" }));
        }

        var candidates  = new CandidateSet(endpoints, new RouteValueDictionary[endpoints.Length], Enumerable.Repeat <int>(-1, candidateNum).ToArray());
        var httpContext = new DefaultHttpContext();

        await policy.ApplyAsync(httpContext, candidates);

        Assert.Equal(httpContext.GetEndpoint().Metadata, EndpointMetadataCollection.Empty);
        Assert.True(string.Equals(httpContext.GetEndpoint().DisplayName, Http405EndpointDisplayName, StringComparison.OrdinalIgnoreCase));
    }
        public void GetEndpoint_ContextWithoutFeature_ReturnsNull()
        {
            // Arrange
            var context = new DefaultHttpContext();

            // Act
            var endpoint = context.GetEndpoint();

            // Assert
            Assert.Null(endpoint);
        }
        public void SetAndGetEndpoint_Roundtrip_EndpointIsRoundtrip()
        {
            // Arrange
            var context         = new DefaultHttpContext();
            var initialEndpoint = new Endpoint(c => Task.CompletedTask, EndpointMetadataCollection.Empty, "Test endpoint");

            // Act
            context.SetEndpoint(initialEndpoint);
            var endpoint = context.GetEndpoint();

            // Assert
            Assert.Equal(initialEndpoint, endpoint);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 检查权限
        /// </summary>
        /// <param name="httpContext"></param>
        /// <returns></returns>
        private static bool CheckAuthorzie(DefaultHttpContext httpContext)
        {
            // 获取权限特性
            var securityDefineAttribute = httpContext.GetEndpoint()?.Metadata?.GetMetadata <SecurityDefineAttribute>();

            if (securityDefineAttribute == null)
            {
                return(true);
            }

            // 解析服务
            var authService = httpContext.RequestServices.GetService <IAuthService>();

            // 检查授权
            return(authService.IsCanAccess(securityDefineAttribute.ResourceId));
        }
        public void SetEndpoint_EndpointOnContextWithoutFeature_FeatureWithEndpointSet()
        {
            // Arrange
            var context = new DefaultHttpContext();

            // Act
            var endpoint = new Endpoint(c => Task.CompletedTask, EndpointMetadataCollection.Empty, "Test endpoint");

            context.SetEndpoint(endpoint);

            // Assert
            var feature = context.Features.Get <IEndpointFeature>();

            Assert.NotNull(feature);
            Assert.Equal(endpoint, context.GetEndpoint());
        }
        public void GetEndpoint_ContextWithFeatureAndNullEndpoint_ReturnsNull()
        {
            // Arrange
            var context = new DefaultHttpContext();

            context.Features.Set <IEndpointFeature>(new EndpointFeature
            {
                Endpoint = null
            });

            // Act
            var endpoint = context.GetEndpoint();

            // Assert
            Assert.Null(endpoint);
        }
        public void GetEndpoint_ContextWithFeatureAndEndpoint_ReturnsNull()
        {
            // Arrange
            var context = new DefaultHttpContext();
            var initial = new Endpoint(c => Task.CompletedTask, EndpointMetadataCollection.Empty, "Test endpoint");

            context.Features.Set <IEndpointFeature>(new EndpointFeature
            {
                Endpoint = initial
            });

            // Act
            var endpoint = context.GetEndpoint();

            // Assert
            Assert.Equal(initial, endpoint);
        }
        public void SetEndpoint_NullOnContextWithFeature_NullSetOnExistingFeature()
        {
            // Arrange
            var context         = new DefaultHttpContext();
            var initialEndpoint = new Endpoint(c => Task.CompletedTask, EndpointMetadataCollection.Empty, "Test endpoint");
            var initialFeature  = new EndpointFeature
            {
                Endpoint = initialEndpoint
            };

            context.Features.Set <IEndpointFeature>(initialFeature);

            // Act
            context.SetEndpoint(null);

            // Assert
            var feature = context.Features.Get <IEndpointFeature>();

            Assert.Equal(initialFeature, feature);
            Assert.Null(context.GetEndpoint());
        }
Ejemplo n.º 12
0
        public void SettingEndpointSetsEndpointOnHttpContext()
        {
            var httpContext = new DefaultHttpContext();
            var ep          = new RouteEndpoint(
                TestConstants.EmptyRequestDelegate,
                RoutePatternFactory.Parse("/"),
                0,
                new EndpointMetadataCollection(),
                "test");

            new EndpointSelectorContext(httpContext)
            {
                Endpoint = ep,
            };

            // Assert
            var endpoint = httpContext.GetEndpoint();

            Assert.NotNull(endpoint);
            Assert.Same(ep, endpoint);
        }