예제 #1
0
        private void AccessToken_GetOrAdd(int userId, int contentId = 0, string feature = null)
        {
            var timeout1 = TimeSpan.FromMinutes(3);
            var timeout2 = TimeSpan.FromMinutes(10);
            var timeout3 = TimeSpan.FromMinutes(20);

            // create three different tokens
            var savedToken1 = AccessTokenVault.CreateToken(userId, timeout1, contentId, feature);
            var savedToken2 = AccessTokenVault.CreateToken(userId, timeout2, contentId, feature);
            var savedToken3 = AccessTokenVault.CreateToken(userId, timeout3, contentId, feature);

            // ACTION: get a token with the same parameters
            var token = AccessTokenVault.GetOrAddToken(userId, timeout3, contentId, feature);

            // ASSERT: we should get the last one
            AssertTokensAreEqual(savedToken3, token);

            // ACTION: get a token with shorter expiration time
            token = AccessTokenVault.GetOrAddToken(userId, timeout2, contentId, feature);

            // ASSERT: we should get the previous one
            AssertTokensAreEqual(savedToken2, token);

            // ACTION: get a token with an even shorter expiration time
            token = AccessTokenVault.GetOrAddToken(userId, TimeSpan.FromMinutes(7), contentId, feature);

            // ASSERT: we should get a totally new one, because the first
            // token (savedToken1) expires too soon.
            Assert.AreNotEqual(savedToken1.Value, token.Value);
            Assert.AreNotEqual(savedToken2.Value, token.Value);
            Assert.AreNotEqual(savedToken3.Value, token.Value);
            Assert.IsTrue(token.ExpirationDate < savedToken2.ExpirationDate);
        }
예제 #2
0
        public void AccessToken_Delete_ByContent()
        {
            var userId1      = 42;
            var userId2      = 43;
            var contentId1   = 142;
            var contentId2   = 143;
            var timeout      = TimeSpan.FromMinutes(10);
            var shortTimeout = TimeSpan.FromSeconds(1);
            var savedTokens  = new[]
            {
                AccessTokenVault.CreateToken(userId1, timeout, contentId1),
                AccessTokenVault.CreateToken(userId1, shortTimeout, contentId2),
                AccessTokenVault.CreateToken(userId2, timeout, contentId1),
                AccessTokenVault.CreateToken(userId2, shortTimeout, contentId2),
            };

            // ACTION
            Thread.Sleep(1100);
            AccessTokenVault.DeleteTokensByContent(contentId1);

            // ASSERT
            Assert.IsNull(AccessTokenVault.GetTokenById(savedTokens[0].Id));
            Assert.IsNotNull(AccessTokenVault.GetTokenById(savedTokens[1].Id));
            Assert.IsNull(AccessTokenVault.GetTokenById(savedTokens[2].Id));
            Assert.IsNotNull(AccessTokenVault.GetTokenById(savedTokens[3].Id));
        }
예제 #3
0
        public void AccessToken_UpdateExpired()
        {
            var userId     = 42;
            var timeout    = TimeSpan.FromMilliseconds(1);
            var savedToken = AccessTokenVault.CreateToken(userId, timeout);

            // ACTION
            Thread.Sleep(1100);
            AccessTokenVault.UpdateToken(savedToken.Value, DateTime.UtcNow.AddMinutes(30.0d));
        }
예제 #4
0
        public void AccessToken_AssertExists_Expired()
        {
            var userId     = 42;
            var timeout    = TimeSpan.FromMilliseconds(1);
            var savedToken = AccessTokenVault.CreateToken(userId, timeout);

            // ACTION
            Thread.Sleep(1100);
            AccessTokenVault.AssertTokenExists(savedToken.Value);
        }
예제 #5
0
        public async Tasks.Task AccessToken_AssertExists_Expired()
        {
            var userId     = 42;
            var timeout    = TimeSpan.FromMilliseconds(1);
            var savedToken = AccessTokenVault.CreateToken(userId, timeout);

            // ACTION
            Thread.Sleep(1100);

            await AccessTokenVault.AssertTokenExistsAsync(savedToken.Value, CancellationToken.None);
        }
예제 #6
0
        public void AccessToken_Create_ForUser_ValueLength()
        {
            var userId  = 42;
            var timeout = TimeSpan.FromMinutes(10);

            // ACTION
            var token = AccessTokenVault.CreateToken(userId, timeout);

            // ASSERT
            Assert.IsTrue(token.Value.Length >= 50);
        }
예제 #7
0
        public void AccessToken_AssertExists()
        {
            var userId     = 42;
            var timeout    = TimeSpan.FromMinutes(10);
            var savedToken = AccessTokenVault.CreateToken(userId, timeout);

            // ACTION
            AccessTokenVault.AssertTokenExists(savedToken.Value);

            //Assert.AllRight() :)
        }
예제 #8
0
        public void AccessToken_Exists()
        {
            var userId     = 42;
            var timeout    = TimeSpan.FromMinutes(10);
            var savedToken = AccessTokenVault.CreateToken(userId, timeout);

            // ACTION
            var isExists = AccessTokenVault.TokenExists(savedToken.Value);

            // ASSERT
            Assert.IsTrue(isExists);
        }
예제 #9
0
        public void AccessToken_Get_ForUser()
        {
            var userId     = 42;
            var timeout    = TimeSpan.FromMinutes(10);
            var savedToken = AccessTokenVault.CreateToken(userId, timeout);

            // ACTION
            var token = AccessTokenVault.GetToken(savedToken.Value);

            // ASSERT
            AssertTokensAreEqual(savedToken, token);
        }
예제 #10
0
        public void AccessToken_Create_ForUser_Twice()
        {
            var userId  = 42;
            var timeout = TimeSpan.FromMinutes(10);

            // ACTION
            var token1 = AccessTokenVault.CreateToken(userId, timeout);
            var token2 = AccessTokenVault.CreateToken(userId, timeout);

            // ASSERT
            Assert.AreNotEqual(token1.Id, token2.Id);
            Assert.AreNotEqual(token1.Value, token2.Value);
        }
예제 #11
0
        public void AccessToken_Get_Expired()
        {
            var userId     = 42;
            var timeout    = TimeSpan.FromMilliseconds(1);
            var savedToken = AccessTokenVault.CreateToken(userId, timeout);

            // ACTION
            Thread.Sleep(10);
            var token = AccessTokenVault.GetToken(savedToken.Value);

            // ASSERT
            Assert.IsNull(token);
        }
예제 #12
0
        public void AccessToken_Get_ForUserAndFeature()
        {
            var userId     = 42;
            var feature    = "Feature1";
            var timeout    = TimeSpan.FromMinutes(10);
            var savedToken = AccessTokenVault.CreateToken(userId, timeout, 0, feature);

            // ACTION
            var token = AccessTokenVault.GetToken(savedToken.Value, 0, feature);

            // ASSERT
            AssertTokensAreEqual(savedToken, token);
            Assert.IsNull(AccessTokenVault.GetToken(savedToken.Value));
        }
예제 #13
0
        public void AccessToken_Get_ForUserAndContent()
        {
            var userId     = 42;
            var contentId  = 142;
            var timeout    = TimeSpan.FromMinutes(10);
            var savedToken = AccessTokenVault.CreateToken(userId, timeout, contentId);

            // ACTION
            var token = AccessTokenVault.GetToken(savedToken.Value, contentId);

            // ASSERT
            AssertTokensAreEqual(savedToken, token);
            Assert.IsNull(AccessTokenVault.GetToken(savedToken.Value));
        }
예제 #14
0
        public void AccessToken_Update()
        {
            var userId     = 42;
            var timeout    = TimeSpan.FromMinutes(10.0d);
            var savedToken = AccessTokenVault.CreateToken(userId, timeout);

            Assert.IsTrue(savedToken.ExpirationDate < DateTime.UtcNow.AddMinutes(20.0d));

            // ACTION
            AccessTokenVault.UpdateToken(savedToken.Value, DateTime.UtcNow.AddMinutes(30.0d));

            // ASSERT
            var loadedToken = AccessTokenVault.GetToken(savedToken.Value);

            Assert.IsNotNull(loadedToken);
            Assert.IsTrue(loadedToken.ExpirationDate > DateTime.UtcNow.AddMinutes(20.0d));
        }
예제 #15
0
        public void AccessToken_Create_ForUser()
        {
            var userId  = 42;
            var timeout = TimeSpan.FromMinutes(10);

            // ACTION
            var token = AccessTokenVault.CreateToken(userId, timeout);

            // ASSERT
            Assert.IsTrue(token.Id > 0);
            Assert.IsNotNull(token.Value);
            Assert.AreEqual(userId, token.UserId);
            Assert.AreEqual(0, token.ContentId);
            Assert.IsNull(token.Feature);
            Assert.IsTrue((DateTime.UtcNow - token.CreationDate).TotalMilliseconds < 1000);
            Assert.IsTrue((token.ExpirationDate - DateTime.UtcNow - timeout).TotalMilliseconds < 1000);
        }
예제 #16
0
        public void AccessToken_GetByUser()
        {
            var userId       = 42;
            var contentId    = 142;
            var feature      = "Feature1";
            var timeout      = TimeSpan.FromMinutes(10);
            var shortTimeout = TimeSpan.FromSeconds(1);
            var savedTokens  = new[]
            {
                AccessTokenVault.CreateToken(userId, timeout),
                AccessTokenVault.CreateToken(userId, timeout, contentId),
                AccessTokenVault.CreateToken(userId, timeout, 0, feature),
                AccessTokenVault.CreateToken(userId, timeout, contentId, feature),
                AccessTokenVault.CreateToken(userId, shortTimeout),
                AccessTokenVault.CreateToken(userId, shortTimeout, contentId),
                AccessTokenVault.CreateToken(userId, shortTimeout, 0, feature),
                AccessTokenVault.CreateToken(userId, shortTimeout, contentId, feature),
            };

            // ACTION-1
            var tokens = AccessTokenVault.GetAllTokens(userId);

            // ASSERT-1
            Assert.AreEqual(
                string.Join(",", savedTokens.OrderBy(x => x.Id).Select(x => x.Id.ToString())),
                string.Join(",", tokens.OrderBy(x => x.Id).Select(x => x.Id.ToString())));

            // ACTION-2
            Thread.Sleep(1100);
            tokens = AccessTokenVault.GetAllTokens(userId);

            // ASSERT-2
            // The last 4 tokens are expired
            Assert.AreEqual(
                string.Join(",", savedTokens.Take(4).OrderBy(x => x.Id).Select(x => x.Id.ToString())),
                string.Join(",", tokens.OrderBy(x => x.Id).Select(x => x.Id.ToString())));
        }