public void Store_HasValidState_ExtendableCookie_CookieIsSaved()
        {
            var eventId        = "event1";
            var secretKey      = "4e1db821-a825-49da-acd0-5d376f2068db";
            var cookieDomain   = ".test.com";
            var queueId        = "f8757c2d-34c2-4639-bef2-1736cdd30bbb";
            var cookieKey      = UserInQueueStateCookieRepository.GetCookieKey(eventId);
            var cookieValidity = 10;
            var fakeContext    = MockRepository.GenerateMock <HttpContextBase>();

            var fakeResponse = MockRepository.GenerateMock <HttpResponseBase>();

            fakeContext.Stub(stub => stub.Response).Return(fakeResponse);
            var cookies = new HttpCookieCollection()
            {
                new HttpCookie("key1")
                {
                    Value = "test"
                },
                new HttpCookie("a")
                {
                    Value = "test"
                },
                new HttpCookie("b")
                {
                    Value = "test"
                }
            };

            fakeResponse.Stub(stub => stub.Cookies).Return(cookies);

            var testObject = new UserInQueueStateCookieRepository(fakeContext);

            testObject.Store(eventId, queueId, null, cookieDomain, "Queue", secretKey);
            var cookieValues = CookieHelper.ToNameValueCollectionFromValue(cookies[cookieKey].Value);

            Assert.True(cookies[cookieKey].Expires.Subtract(DateTime.UtcNow.AddDays(1)) < TimeSpan.FromMinutes(1));
            Assert.True(
                DateTimeHelper.GetDateTimeFromUnixTimeStamp(CookieHelper.ToNameValueCollectionFromValue(cookies[cookieKey].Value)["IssueTime"])
                .Subtract(DateTime.UtcNow) < TimeSpan.FromSeconds(10));

            Assert.True(cookies[cookieKey].Domain == cookieDomain);
            Assert.True(cookieValues["EventId"] == eventId);
            Assert.True(cookieValues["RedirectType"] == "queue");
            Assert.True(cookieValues["QueueId"] == queueId);
            Assert.True(string.IsNullOrEmpty(cookies[cookieKey].Values[_FixedCookieValidityMinutesKey]));

            //retrive
            var fakeRequest = MockRepository.GenerateMock <HttpRequestBase>();

            fakeContext.Stub(stub => stub.Request).Return(fakeRequest);
            fakeRequest.Stub(stub => stub.Cookies).Return(cookies);
            var state = testObject.GetState(eventId, cookieValidity, secretKey);

            Assert.True(state.IsValid);
            Assert.True(state.IsStateExtendable);
            Assert.True(state.QueueId == queueId);
            Assert.True(state.RedirectType == "queue");
        }
        public void Store_GetState_NonExtendableCookie_CookieIsSaved()
        {
            var eventId          = "event1";
            var secretKey        = "secretKey";
            var cookieDomain     = ".test.com";
            var isCookieHttpOnly = true;
            var isCookieSecure   = true;
            var queueId          = "f8757c2d-34c2-4639-bef2-1736cdd30bbb";
            var cookieKey        = UserInQueueStateCookieRepository.GetCookieKey(eventId);

            var cookieValidity = 3;

            KnownUserTest.HttpContextMock fakeContext = new KnownUserTest.HttpContextMock();
            var fakeResponse = new KnownUserTest.MockHttpResponse
            {
            };

            fakeContext.HttpResponse = fakeResponse;

            var testObject = new UserInQueueStateCookieRepository(fakeContext);

            testObject.Store(eventId, queueId, cookieValidity, cookieDomain, isCookieHttpOnly, isCookieSecure, "idle", secretKey);
            var cookieValue  = fakeResponse.CookiesValue[cookieKey]["cookieValue"].ToString();
            var cookieValues = CookieHelper.ToNameValueCollectionFromValue(cookieValue);

            Assert.Equal("3", cookieValues[_FixedCookieValidityMinutesKey]);
            Assert.True(((DateTime)fakeResponse.CookiesValue[cookieKey]["expiration"]).Subtract(DateTime.UtcNow.AddDays(1)) < TimeSpan.FromMinutes(1));
            Assert.Equal(cookieDomain, fakeResponse.CookiesValue[cookieKey]["domain"].ToString());
            Assert.Equal(isCookieHttpOnly, fakeResponse.CookiesValue[cookieKey]["isHttpOnly"] as bool?);
            Assert.Equal(isCookieSecure, fakeResponse.CookiesValue[cookieKey]["isSecure"] as bool?);
            Assert.True(
                DateTimeHelper.GetDateTimeFromUnixTimeStamp(cookieValues["IssueTime"])
                .Subtract(DateTime.UtcNow) < TimeSpan.FromSeconds(10));


            //retrive
            var fakeRequest = new KnownUserTest.MockHttpRequest
            {
                CookiesValue = new NameValueCollection
                {
                    { "a1", "b1" },
                    { cookieKey, cookieValue }
                }
            };

            fakeContext.HttpRequest = fakeRequest;

            var state = testObject.GetState(eventId, cookieValidity, secretKey);

            Assert.True(state.IsValid);
            Assert.False(state.IsStateExtendable);
            Assert.True(state.QueueId == queueId);
            Assert.True(state.RedirectType == "idle");
            Assert.True(state.FixedCookieValidityMinutes == 3);
        }
Beispiel #3
0
        public void Store_HasValidState_TamperedCookie_StateIsNotValid()
        {
            var eventId        = "event1";
            var secretKey      = "4e1db821-a825-49da-acd0-5d376f2068db";
            var cookieDomain   = ".test.com";
            var queueId        = "f8757c2d-34c2-4639-bef2-1736cdd30bbb";
            var cookieValidity = 10;
            var fakeContext    = MockRepository.GenerateMock <HttpContextBase>();
            var cookieKey      = UserInQueueStateCookieRepository.GetCookieKey(eventId);

            var fakeResponse = MockRepository.GenerateMock <HttpResponseBase>();

            fakeContext.Stub(stub => stub.Response).Return(fakeResponse);
            var cookies = new HttpCookieCollection()
            {
                new HttpCookie(cookieKey)
                {
                    Value = "test"
                },
                new HttpCookie("a")
                {
                    Value = "test"
                },
                new HttpCookie("b")
                {
                    Value = "test"
                }
            };

            fakeResponse.Stub(stub => stub.Cookies).Return(cookies);


            var testObject = new UserInQueueStateCookieRepository(fakeContext);

            testObject.Store(eventId, queueId, false, cookieDomain, cookieValidity, secretKey);
            Assert.True(cookies[cookieKey].Expires.Subtract(DateTime.UtcNow.AddDays(1)) < TimeSpan.FromMinutes(1));
            Assert.True(cookies[cookieKey].HttpOnly);
            Assert.True(cookies[cookieKey].Domain == cookieDomain);

            //Retrive
            var fakeRequest = MockRepository.GenerateMock <HttpRequestBase>();

            fakeContext.Stub(stub => stub.Request).Return(fakeRequest);
            fakeRequest.Stub(stub => stub.Cookies).Return(cookies);

            cookies[cookieKey].Values["IsCookieExtendable"] = "true";

            var state = testObject.GetState(eventId, secretKey);

            Assert.False(state.IsValid);
            Assert.False(state.IsStateExtendable);
            Assert.True(String.IsNullOrEmpty(state.QueueId));
        }
        public void Store_GetState_ExtendableCookie_CookieIsSaved()
        {
            var eventId        = "event1";
            var secretKey      = "4e1db821-a825-49da-acd0-5d376f2068db";
            var cookieDomain   = ".test.com";
            var queueId        = "f8757c2d-34c2-4639-bef2-1736cdd30bbb";
            var cookieKey      = UserInQueueStateCookieRepository.GetCookieKey(eventId);
            var cookieValidity = 10;

            KnownUserTest.HttpContextMock fakeContext = new KnownUserTest.HttpContextMock();
            var fakeResponse = new KnownUserTest.MockHttpResponse()
            {
            };

            fakeContext.HttpResponse = fakeResponse;

            var testObject = new UserInQueueStateCookieRepository(fakeContext);

            testObject.Store(eventId, queueId, null, cookieDomain, "Queue", secretKey);
            var cookieValues = CookieHelper.ToNameValueCollectionFromValue(fakeResponse.CookiesValue[cookieKey]["cookieValue"].ToString());

            Assert.True(((DateTime)fakeResponse.CookiesValue[cookieKey]["expiration"]).Subtract(DateTime.UtcNow.AddDays(1)) < TimeSpan.FromMinutes(1));
            Assert.True(
                DateTimeHelper.GetDateTimeFromUnixTimeStamp(cookieValues["IssueTime"])
                .Subtract(DateTime.UtcNow) < TimeSpan.FromSeconds(10));

            Assert.True(fakeResponse.CookiesValue[cookieKey]["domain"].ToString() == cookieDomain);
            Assert.True(cookieValues["EventId"] == eventId);
            Assert.True(cookieValues["RedirectType"] == "queue");
            Assert.True(cookieValues["QueueId"] == queueId);
            Assert.True(string.IsNullOrEmpty(cookieValues[_FixedCookieValidityMinutesKey]));

            //retrive
            var fakeRequest = new KnownUserTest.MockHttpRequest()
            {
                CookiesValue = new NameValueCollection()
                {
                    { "a1", "b1" },
                    { cookieKey, fakeResponse.CookiesValue[cookieKey]["cookieValue"].ToString() }
                }
            };

            fakeContext.HttpRequest = fakeRequest;
            var state = testObject.GetState(eventId, cookieValidity, secretKey);

            Assert.True(state.IsValid);
            Assert.True(state.IsStateExtendable);
            Assert.True(state.QueueId == queueId);
            Assert.True(state.RedirectType == "queue");
        }
Beispiel #5
0
        public void Store_HasValidState_NonExtendableCookie_CookieIsSaved()
        {
            var eventId      = "event1";
            var secretKey    = "secretKey";
            var cookieDomain = ".test.com";
            var queueId      = "f8757c2d-34c2-4639-bef2-1736cdd30bbb";
            var cookieKey    = UserInQueueStateCookieRepository.GetCookieKey(eventId);

            var cookieValidity = 3;
            var fakeContext    = MockRepository.GenerateMock <HttpContextBase>();
            var fakeResponse   = MockRepository.GenerateMock <HttpResponseBase>();

            fakeContext.Stub(stub => stub.Response).Return(fakeResponse);
            var cookies = new HttpCookieCollection()
            {
                new HttpCookie(cookieKey)
                {
                    Value = "test"
                },
                new HttpCookie("a")
                {
                    Value = "test"
                },
                new HttpCookie("b")
                {
                    Value = "test"
                }
            };

            fakeResponse.Stub(stub => stub.Cookies).Return(cookies);

            var testObject = new UserInQueueStateCookieRepository(fakeContext);

            testObject.Store(eventId, queueId, false, cookieDomain, cookieValidity, secretKey);
            Assert.True(cookies[cookieKey].Expires.Subtract(DateTime.UtcNow.AddDays(1)) < TimeSpan.FromMinutes(1));
            Assert.True(cookies[cookieKey].HttpOnly);
            Assert.True(cookies[cookieKey].Domain == cookieDomain);

            //retrive
            var fakeRequest = MockRepository.GenerateMock <HttpRequestBase>();

            fakeContext.Stub(stub => stub.Request).Return(fakeRequest);
            fakeRequest.Stub(stub => stub.Cookies).Return(cookies);

            var state = testObject.GetState(eventId, secretKey);

            Assert.True(state.IsValid);
            Assert.False(state.IsStateExtendable);
            Assert.True(state.QueueId == queueId);
        }
        public void Store_GetState_TamperedCookie_StateIsNotValid_EventId()
        {
            var eventId          = "event1";
            var secretKey        = "4e1db821-a825-49da-acd0-5d376f2068db";
            var cookieDomain     = ".test.com";
            var isCookieHttpOnly = true;
            var isCookieSecure   = true;
            var queueId          = "f8757c2d-34c2-4639-bef2-1736cdd30bbb";
            var cookieValidity   = 10;
            var cookieKey        = UserInQueueStateCookieRepository.GetCookieKey(eventId);

            KnownUserTest.HttpContextMock fakeContext = new KnownUserTest.HttpContextMock();
            var fakeResponse = new KnownUserTest.MockHttpResponse
            {
            };

            fakeContext.HttpResponse = fakeResponse;

            var testObject = new UserInQueueStateCookieRepository(fakeContext);

            testObject.Store(eventId, queueId, 3, cookieDomain, isCookieHttpOnly, isCookieSecure, "idle", secretKey);
            var cookieValue  = fakeResponse.CookiesValue[cookieKey]["cookieValue"].ToString();
            var cookieValues = CookieHelper.ToNameValueCollectionFromValue(cookieValue);

            Assert.True(((DateTime)fakeResponse.CookiesValue[cookieKey]["expiration"]).Subtract(DateTime.UtcNow.AddDays(1)) < TimeSpan.FromMinutes(1));
            Assert.True(fakeResponse.CookiesValue[cookieKey]["domain"].ToString() == cookieDomain);

            //Retrive

            var tamperedCookie = cookieValue.Replace("EventId", "EventId2");
            var fakeRequest    = new KnownUserTest.MockHttpRequest
            {
                CookiesValue = new NameValueCollection {
                    { cookieKey, tamperedCookie }
                }
            };

            fakeContext.HttpRequest = fakeRequest;

            var state = testObject.GetState(eventId, cookieValidity, secretKey);

            Assert.False(state.IsValid);
            Assert.False(state.IsStateExtendable);
            Assert.True(String.IsNullOrEmpty(state.QueueId));
            Assert.True(String.IsNullOrEmpty(state.RedirectType));
        }
        public void Store_GetState_ExpiredCookie_StateIsNotValid()
        {
            var eventId      = "event1";
            var secretKey    = "secretKey";
            var cookieDomain = ".test.com";
            var queueId      = "f8757c2d-34c2-4639-bef2-1736cdd30bbb";
            var cookieKey    = UserInQueueStateCookieRepository.GetCookieKey(eventId);

            var cookieValidity = -1;

            KnownUserTest.HttpContextMock fakeContext = new KnownUserTest.HttpContextMock();
            var fakeResponse = new KnownUserTest.MockHttpResponse()
            {
            };

            fakeContext.HttpResponse = fakeResponse;

            var testObject = new UserInQueueStateCookieRepository(fakeContext);

            testObject.Store(eventId, queueId, null, cookieDomain, "idle", secretKey);
            var cookieValue  = fakeResponse.CookiesValue[cookieKey]["cookieValue"].ToString();
            var cookieValues = CookieHelper.ToNameValueCollectionFromValue(cookieValue);

            Assert.True(((DateTime)fakeResponse.CookiesValue[cookieKey]["expiration"]).Subtract(DateTime.UtcNow.AddDays(1)) < TimeSpan.FromMinutes(1));
            Assert.True(fakeResponse.CookiesValue[cookieKey]["domain"].ToString() == cookieDomain);

            //retrive
            var fakeRequest = new KnownUserTest.MockHttpRequest()
            {
                CookiesValue = new NameValueCollection()
                {
                    { cookieKey, cookieValue }
                }
            };

            fakeContext.HttpRequest = fakeRequest;

            var state = testObject.GetState(eventId, cookieValidity, secretKey);

            Assert.False(state.IsValid);
            Assert.False(state.IsStateExtendable);
            Assert.True(String.IsNullOrEmpty(state.QueueId));
            Assert.True(String.IsNullOrEmpty(state.RedirectType));
        }
Beispiel #8
0
        public void ExtendQueueCookie_CookieExist_Test()
        {
            //creating valid cookie
            var eventId        = "event1";
            var secretKey      = "secretKey";
            var cookieDomain   = ".test.com";
            var queueId        = "f8757c2d-34c2-4639-bef2-1736cdd30bbb";
            var cookieKey      = UserInQueueStateCookieRepository.GetCookieKey(eventId);
            var cookieValidity = 3;
            var fakeContext    = MockRepository.GenerateMock <HttpContextBase>();
            var fakeResponse   = MockRepository.GenerateMock <HttpResponseBase>();

            fakeContext.Stub(stub => stub.Response).Return(fakeResponse);
            var cookies = new HttpCookieCollection()
            {
            };

            fakeResponse.Stub(stub => stub.Cookies).Return(cookies);
            var testObject = new UserInQueueStateCookieRepository(fakeContext);

            testObject.Store(eventId, queueId, true, cookieDomain, cookieValidity, secretKey);
            //extend
            var fakeRequest = MockRepository.GenerateMock <HttpRequestBase>();

            fakeContext.Stub(stub => stub.Request).Return(fakeRequest);
            fakeRequest.Stub(stub => stub.Cookies).Return(cookies);

            testObject.ExtendQueueCookie(eventId, 12, secretKey);

            Assert.True(
                DateTimeHelper.GetUnixTimeStampAsDate(cookies[cookieKey]["Expires"])
                .Subtract(DateTime.UtcNow.AddMinutes(12)) < TimeSpan.FromSeconds(10));
            Assert.True(cookies[cookieKey].Domain == cookieDomain);

            var state = testObject.GetState(eventId, secretKey);

            Assert.True(state.IsValid);
            Assert.True(state.IsStateExtendable);
            Assert.True(state.QueueId == queueId);
        }