Example #1
0
        public async Task GetFormToken_FormFieldIsEmpty_ReturnsNull()
        {
            // Arrange
            var mockHttpContext = new Mock <HttpContext>();
            var requestContext  = new Mock <HttpRequest>();
            IReadableStringCollection formsCollection =
                new MockCookieCollection(new Dictionary <string, string>()
            {
                { "form-field-name", string.Empty }
            });

            requestContext.Setup(o => o.GetFormAsync(CancellationToken.None))
            .Returns(Task.FromResult(formsCollection));
            mockHttpContext.Setup(o => o.Request)
            .Returns(requestContext.Object);

            var config = new AntiForgeryOptions()
            {
                FormFieldName = "form-field-name"
            };

            var tokenStore = new AntiForgeryTokenStore(
                config: config,
                serializer: null);

            // Act
            var token = await tokenStore.GetFormTokenAsync(mockHttpContext.Object);

            // Assert
            Assert.Null(token);
        }
        public void StartUp()
        {
            var values = new Dictionary <string, string>()
            {
                { requiredKey, expectedValue },
                { "null", null }
            };
            var valuesV = new Dictionary <string, StringValues>()
            {
                { requiredKey, new StringValues(expectedValue) },
                { "null", new StringValues((string)null) }
            };

            var headers = new HeaderDictionary(valuesV);
            var query   = new QueryCollection(valuesV);
            var cookies = new MockCookieCollection(values);

            request  = new Mock <HttpRequest>();
            flowData = new Mock <IFlowData>();
            service  = new WebRequestEvidenceService();

            request.SetupGet(r => r.Headers).Returns(headers);
            request.SetupGet(r => r.Cookies).Returns(cookies);
            request.SetupGet(r => r.Query).Returns(query);
            request.SetupGet(r => r.HttpContext.Connection.LocalIpAddress)
            .Returns(ip);
        }
        private HttpContext GetMockHttpContext(string cookieName, string cookieValue)
        {
            var requestCookies = new MockCookieCollection(new Dictionary <string, string>()
            {
                { cookieName, cookieValue }
            });

            var request = new Mock <HttpRequest>();

            request.Setup(o => o.Cookies)
            .Returns(requestCookies);
            var mockHttpContext = new Mock <HttpContext>();

            mockHttpContext.Setup(o => o.Request)
            .Returns(request.Object);

            return(mockHttpContext.Object);
        }
Example #4
0
        public async Task GetFormToken_FormFieldIsInvalid_PropagatesException()
        {
            // Arrange
            IReadableStringCollection formsCollection =
                new MockCookieCollection(new Dictionary <string, string>()
            {
                { "form-field-name", "invalid-value" }
            });

            var requestContext = new Mock <HttpRequest>();

            requestContext.Setup(o => o.GetFormAsync(CancellationToken.None))
            .Returns(Task.FromResult(formsCollection));

            var mockHttpContext = new Mock <HttpContext>();

            mockHttpContext.Setup(o => o.Request)
            .Returns(requestContext.Object);

            var config = new AntiForgeryOptions()
            {
                FormFieldName = "form-field-name"
            };

            var expectedException = new InvalidOperationException("some exception");
            var mockSerializer    = new Mock <IAntiForgeryTokenSerializer>();

            mockSerializer.Setup(o => o.Deserialize("invalid-value"))
            .Throws(expectedException);

            var tokenStore = new AntiForgeryTokenStore(
                config: config,
                serializer: mockSerializer.Object);

            // Act & assert
            var ex =
                await
                Assert.ThrowsAsync <InvalidOperationException>(
                    async() => await tokenStore.GetFormTokenAsync(mockHttpContext.Object));

            Assert.Same(expectedException, ex);
        }
Example #5
0
        public async Task GetFormToken_FormFieldIsValid_ReturnsToken()
        {
            // Arrange
            var expectedToken = new AntiForgeryToken();

            // Arrange
            var mockHttpContext = new Mock <HttpContext>();
            var requestContext  = new Mock <HttpRequest>();
            IReadableStringCollection formsCollection =
                new MockCookieCollection(new Dictionary <string, string>()
            {
                { "form-field-name", "valid-value" }
            });

            requestContext.Setup(o => o.GetFormAsync(CancellationToken.None))
            .Returns(Task.FromResult(formsCollection));
            mockHttpContext.Setup(o => o.Request)
            .Returns(requestContext.Object);

            var config = new AntiForgeryOptions()
            {
                FormFieldName = "form-field-name"
            };

            var mockSerializer = new Mock <IAntiForgeryTokenSerializer>();

            mockSerializer.Setup(o => o.Deserialize("valid-value"))
            .Returns(expectedToken);

            var tokenStore = new AntiForgeryTokenStore(
                config: config,
                serializer: mockSerializer.Object);

            // Act
            var retVal = await tokenStore.GetFormTokenAsync(mockHttpContext.Object);

            // Assert
            Assert.Same(expectedToken, retVal);
        }
Example #6
0
        public void StartUp()
        {
            var values = new Dictionary <string, string>()
            {
                { REQUIRED_KEY, EXPECTED_VALUE },
                { "null", null }
            };
            var valuesV = new Dictionary <string, StringValues>()
            {
                { REQUIRED_KEY, new StringValues(EXPECTED_VALUE) },
                { "null", new StringValues((string)null) }
            };

            var headers    = new HeaderDictionary(valuesV);
            var query      = new QueryCollection(valuesV);
            var cookies    = new MockCookieCollection(values);
            var formValues = new FormCollection(
                new Dictionary <string, StringValues>()
            {
                { FORM_KEY, new StringValues(FORM_VALUE) }
            });

            _request  = new Mock <HttpRequest>();
            _flowData = new Mock <IFlowData>();
            _service  = new WebRequestEvidenceService();

            _request.SetupGet(r => r.Headers).Returns(headers);
            _request.SetupGet(r => r.Cookies).Returns(cookies);
            _request.SetupGet(r => r.Query).Returns(query);
            _request.SetupGet(r => r.Form).Returns(formValues);

            _request.SetupGet(r => r.HttpContext.Connection.RemoteIpAddress)
            .Returns(IP);
            _request.SetupGet(r => r.IsHttps).Returns(true);
            _request.SetupGet(r => r.ContentType)
            .Returns(Shared.Constants.CONTENT_TYPE_FORM[0]);
            _request.SetupGet(r => r.Method)
            .Returns(Shared.Constants.METHOD_POST);
        }
Example #7
0
        private HttpContext GetMockHttpContext(string cookieName, string cookieValue)
        {
            var requestCookies = new MockCookieCollection(new Dictionary <string, string>()
            {
                { cookieName, cookieValue }
            });

            var request = new Mock <HttpRequest>();

            request.Setup(o => o.Cookies)
            .Returns(requestCookies);
            var mockHttpContext = new Mock <HttpContext>();

            mockHttpContext.Setup(o => o.Request)
            .Returns(request.Object);

            var contextAccessor = new DefaultAntiforgeryContextAccessor();

            mockHttpContext.SetupGet(o => o.RequestServices)
            .Returns(GetServiceProvider(contextAccessor));

            return(mockHttpContext.Object);
        }
        private HttpContext GetMockHttpContext(string cookieName, string cookieValue)
        {
            var requestCookies = new MockCookieCollection(new Dictionary<string, string>() { { cookieName, cookieValue } });

            var request = new Mock<HttpRequest>();
            request.Setup(o => o.Cookies)
                   .Returns(requestCookies);
            var mockHttpContext = new Mock<HttpContext>();
            mockHttpContext.Setup(o => o.Request)
                           .Returns(request.Object);

            var contextAccessor = new DefaultAntiforgeryContextAccessor();
            mockHttpContext.SetupGet(o => o.RequestServices)
                           .Returns(GetServiceProvider(contextAccessor));

            return mockHttpContext.Object;
        }
Example #9
0
        private HttpContext GetMockHttpContext(string cookieName, string cookieValue)
        {
            var requestCookies = new MockCookieCollection(new Dictionary<string, string>() { { cookieName, cookieValue } });

            var request = new Mock<HttpRequest>();
            request.Setup(o => o.Cookies)
                   .Returns(requestCookies);
            var mockHttpContext = new Mock<HttpContext>();
            mockHttpContext.Setup(o => o.Request)
                           .Returns(request.Object);

            return mockHttpContext.Object;
        }
Example #10
0
        public async Task GetFormToken_FormFieldIsValid_ReturnsToken()
        {
            // Arrange
            var expectedToken = new AntiForgeryToken();

            // Arrange
            var mockHttpContext = new Mock<HttpContext>();
            var requestContext = new Mock<HttpRequest>();
            IReadableStringCollection formsCollection =
                new MockCookieCollection(new Dictionary<string, string>() { { "form-field-name", "valid-value" } });
            requestContext.Setup(o => o.GetFormAsync(CancellationToken.None))
                          .Returns(Task.FromResult(formsCollection));
            mockHttpContext.Setup(o => o.Request)
                           .Returns(requestContext.Object);

            var config = new AntiForgeryOptions()
            {
                FormFieldName = "form-field-name"
            };

            var mockSerializer = new Mock<IAntiForgeryTokenSerializer>();
            mockSerializer.Setup(o => o.Deserialize("valid-value"))
                          .Returns(expectedToken);

            var tokenStore = new AntiForgeryTokenStore(
                config: config,
                serializer: mockSerializer.Object);

            // Act
            var retVal = await tokenStore.GetFormTokenAsync(mockHttpContext.Object);

            // Assert
            Assert.Same(expectedToken, retVal);
        }
Example #11
0
        public async Task GetFormToken_FormFieldIsInvalid_PropagatesException()
        {
            // Arrange
            IReadableStringCollection formsCollection =
                new MockCookieCollection(new Dictionary<string, string>() { { "form-field-name", "invalid-value" } });

            var requestContext = new Mock<HttpRequest>();
            requestContext.Setup(o => o.GetFormAsync(CancellationToken.None))
                          .Returns(Task.FromResult(formsCollection));

            var mockHttpContext = new Mock<HttpContext>();
            mockHttpContext.Setup(o => o.Request)
                           .Returns(requestContext.Object);

            var config = new AntiForgeryOptions()
            {
                FormFieldName = "form-field-name"
            };

            var expectedException = new InvalidOperationException("some exception");
            var mockSerializer = new Mock<IAntiForgeryTokenSerializer>();
            mockSerializer.Setup(o => o.Deserialize("invalid-value"))
                          .Throws(expectedException);

            var tokenStore = new AntiForgeryTokenStore(
                config: config,
                serializer: mockSerializer.Object);

            // Act & assert
            var ex =
                await
                    Assert.ThrowsAsync<InvalidOperationException>(
                        async () => await tokenStore.GetFormTokenAsync(mockHttpContext.Object));
            Assert.Same(expectedException, ex);
        }
Example #12
0
        public async Task GetFormToken_FormFieldIsEmpty_ReturnsNull()
        {
            // Arrange
            var mockHttpContext = new Mock<HttpContext>();
            var requestContext = new Mock<HttpRequest>();
            IReadableStringCollection formsCollection =
                new MockCookieCollection(new Dictionary<string, string>() { { "form-field-name", string.Empty } });
            requestContext.Setup(o => o.GetFormAsync(CancellationToken.None))
                          .Returns(Task.FromResult(formsCollection));
            mockHttpContext.Setup(o => o.Request)
                           .Returns(requestContext.Object);

            var config = new AntiForgeryOptions()
            {
                FormFieldName = "form-field-name"
            };

            var tokenStore = new AntiForgeryTokenStore(
                config: config,
                serializer: null);

            // Act
            var token = await tokenStore.GetFormTokenAsync(mockHttpContext.Object);

            // Assert
            Assert.Null(token);
        }