Exemplo n.º 1
0
        public async Task AccessToken_Delete_ByContent()
        {
            await NoRepoIntegrationTestAsync(async() =>
            {
                await AccessTokenVault.DeleteAllAccessTokensAsync(CancellationToken.None);
                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[]
                {
                    await AccessTokenVault.CreateTokenAsync(userId1, timeout, contentId1, CancellationToken.None),
                    await AccessTokenVault.CreateTokenAsync(userId1, shortTimeout, contentId2, CancellationToken.None),
                    await AccessTokenVault.CreateTokenAsync(userId2, timeout, contentId1, CancellationToken.None),
                    await AccessTokenVault.CreateTokenAsync(userId2, shortTimeout, contentId2, CancellationToken.None),
                };

                // ACTION
                Thread.Sleep(1100);
                await AccessTokenVault.DeleteTokensByContentAsync(contentId1, CancellationToken.None);

                // ASSERT
                Assert.IsNull(await AccessTokenVault.GetTokenByIdAsync(savedTokens[0].Id, CancellationToken.None));
                Assert.IsNotNull(await AccessTokenVault.GetTokenByIdAsync(savedTokens[1].Id, CancellationToken.None));
                Assert.IsNull(await AccessTokenVault.GetTokenByIdAsync(savedTokens[2].Id, CancellationToken.None));
                Assert.IsNotNull(await AccessTokenVault.GetTokenByIdAsync(savedTokens[3].Id, CancellationToken.None));
            });
        }
Exemplo n.º 2
0
        public void UT_AccessToken_Create_MaxTimeOut()
        {
            Providers.Instance = new Providers(new ServiceCollection()
                                               .AddSingleton <DataProvider, InMemoryDataProvider>()
                                               .AddSingleton <IAccessTokenDataProvider, InMemoryAccessTokenDataProvider>()
                                               .BuildServiceProvider());

            // ACTION
            var token = AccessTokenVault.CreateTokenAsync(1, TimeSpan.MaxValue, CancellationToken.None).Result;

            // ASSERT
            Assert.AreEqual(DateTime.MaxValue, token.ExpirationDate);
        }
Exemplo n.º 3
0
        public void UT_AccessToken_Create_MaxTimeOut()
        {
            var dataProvider = new InMemoryDataProvider();

            dataProvider.SetExtension(typeof(IAccessTokenDataProviderExtension), new InMemoryAccessTokenDataProvider());
            Providers.Instance.DataProvider = dataProvider;

            // ACTION
            var token = AccessTokenVault.CreateTokenAsync(1, TimeSpan.MaxValue, CancellationToken.None).Result;

            // ASSERT
            Assert.AreEqual(DateTime.MaxValue, token.ExpirationDate);
        }
Exemplo n.º 4
0
        public async Task AccessToken_AssertExists()
        {
            await NoRepoIntegrationTestAsync(async() =>
            {
                await AccessTokenVault.DeleteAllAccessTokensAsync(CancellationToken.None);
                var userId     = 42;
                var timeout    = TimeSpan.FromMinutes(10);
                var savedToken = await AccessTokenVault.CreateTokenAsync(userId, timeout, CancellationToken.None);

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

                //Assert.AllRight() :)
            });
        }
Exemplo n.º 5
0
        public async Task AccessToken_Create_ForUser_ValueLength()
        {
            await NoRepoIntegrationTestAsync(async() =>
            {
                await AccessTokenVault.DeleteAllAccessTokensAsync(CancellationToken.None);
                var userId  = 42;
                var timeout = TimeSpan.FromMinutes(10);

                // ACTION
                var token = await AccessTokenVault.CreateTokenAsync(userId, timeout, CancellationToken.None);

                // ASSERT
                Assert.IsTrue(token.Value.Length >= 50);
            });
        }
Exemplo n.º 6
0
        public async Task AccessToken_Exists()
        {
            await NoRepoIntegrationTestAsync(async() =>
            {
                await AccessTokenVault.DeleteAllAccessTokensAsync(CancellationToken.None);
                var userId     = 42;
                var timeout    = TimeSpan.FromMinutes(10);
                var savedToken = await AccessTokenVault.CreateTokenAsync(userId, timeout, CancellationToken.None);

                // ACTION
                var isExists = await AccessTokenVault.TokenExistsAsync(savedToken.Value, CancellationToken.None);

                // ASSERT
                Assert.IsTrue(isExists);
            });
        }
Exemplo n.º 7
0
        public async Task AccessToken_Get_ForUser()
        {
            await NoRepoIntegrationTestAsync(async() =>
            {
                await AccessTokenVault.DeleteAllAccessTokensAsync(CancellationToken.None);
                var userId     = 42;
                var timeout    = TimeSpan.FromMinutes(10);
                var savedToken = await AccessTokenVault.CreateTokenAsync(userId, timeout, CancellationToken.None);

                // ACTION
                var token = await AccessTokenVault.GetTokenAsync(savedToken.Value, CancellationToken.None);

                // ASSERT
                AssertTokensAreEqual(savedToken, token);
            });
        }
Exemplo n.º 8
0
        public async Task AccessToken_Create_ForUser_Twice()
        {
            await NoRepoIntegrationTestAsync(async() =>
            {
                await AccessTokenVault.DeleteAllAccessTokensAsync(CancellationToken.None);
                var userId  = 42;
                var timeout = TimeSpan.FromMinutes(10);

                // ACTION
                var token1 = await AccessTokenVault.CreateTokenAsync(userId, timeout, CancellationToken.None);
                var token2 = await AccessTokenVault.CreateTokenAsync(userId, timeout, CancellationToken.None);

                // ASSERT
                Assert.AreNotEqual(token1.Id, token2.Id);
                Assert.AreNotEqual(token1.Value, token2.Value);
            });
        }
Exemplo n.º 9
0
        public async Task AccessToken_Exists_Expired()
        {
            await NoRepoIntegrationTestAsync(async() =>
            {
                await AccessTokenVault.DeleteAllAccessTokensAsync(CancellationToken.None);
                var userId     = 42;
                var timeout    = TimeSpan.FromMilliseconds(1);
                var savedToken = await AccessTokenVault.CreateTokenAsync(userId, timeout, CancellationToken.None);

                // ACTION
                Thread.Sleep(1100);
                var isExists = await AccessTokenVault.TokenExistsAsync(savedToken.Value, CancellationToken.None);

                // ASSERT
                Assert.IsFalse(isExists);
            });
        }
Exemplo n.º 10
0
        public async Task AccessToken_Update()
        {
            await NoRepoIntegrationTestAsync(async() =>
            {
                await AccessTokenVault.DeleteAllAccessTokensAsync(CancellationToken.None);
                var userId     = 42;
                var timeout    = TimeSpan.FromMinutes(10.0d);
                var savedToken = await AccessTokenVault.CreateTokenAsync(userId, timeout, CancellationToken.None);
                Assert.IsTrue(savedToken.ExpirationDate < DateTime.UtcNow.AddMinutes(20.0d));

                // ACTION
                await AccessTokenVault.UpdateTokenAsync(savedToken.Value, DateTime.UtcNow.AddMinutes(30.0d), CancellationToken.None);

                // ASSERT
                var loadedToken = await AccessTokenVault.GetTokenAsync(savedToken.Value, CancellationToken.None);
                Assert.IsNotNull(loadedToken);
                Assert.IsTrue(loadedToken.ExpirationDate > DateTime.UtcNow.AddMinutes(20.0d));
            });
        }
Exemplo n.º 11
0
        private async Task 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 = await AccessTokenVault.CreateTokenAsync(userId, timeout1, contentId, feature,
                                                                      CancellationToken.None).ConfigureAwait(false);

            var savedToken2 = await AccessTokenVault.CreateTokenAsync(userId, timeout2, contentId, feature,
                                                                      CancellationToken.None).ConfigureAwait(false);

            var savedToken3 = await AccessTokenVault.CreateTokenAsync(userId, timeout3, contentId, feature,
                                                                      CancellationToken.None).ConfigureAwait(false);

            // ACTION: get a token with the same parameters
            var token = await AccessTokenVault.GetOrAddTokenAsync(userId, timeout3, contentId, feature,
                                                                  CancellationToken.None).ConfigureAwait(false);

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

            // ACTION: get a token with shorter expiration time
            token = await AccessTokenVault.GetOrAddTokenAsync(userId, timeout2, contentId, feature,
                                                              CancellationToken.None).ConfigureAwait(false);

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

            // ACTION: get a token with an even shorter expiration time
            token = await AccessTokenVault.GetOrAddTokenAsync(userId, TimeSpan.FromMinutes(7), contentId, feature,
                                                              CancellationToken.None).ConfigureAwait(false);

            // 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);
        }
Exemplo n.º 12
0
        public async Task AccessToken_GetByUser()
        {
            await NoRepoIntegrationTestAsync(async() =>
            {
                await AccessTokenVault.DeleteAllAccessTokensAsync(CancellationToken.None);
                var userId       = 42;
                var contentId    = 142;
                var feature      = "Feature1";
                var timeout      = TimeSpan.FromMinutes(10);
                var shortTimeout = TimeSpan.FromSeconds(1);
                var savedTokens  = new[]
                {
                    await AccessTokenVault.CreateTokenAsync(userId, timeout, CancellationToken.None),
                    await AccessTokenVault.CreateTokenAsync(userId, timeout, contentId, CancellationToken.None),
                    await AccessTokenVault.CreateTokenAsync(userId, timeout, 0, feature, CancellationToken.None),
                    await AccessTokenVault.CreateTokenAsync(userId, timeout, contentId, feature, CancellationToken.None),
                    await AccessTokenVault.CreateTokenAsync(userId, shortTimeout, CancellationToken.None),
                    await AccessTokenVault.CreateTokenAsync(userId, shortTimeout, contentId, CancellationToken.None),
                    await AccessTokenVault.CreateTokenAsync(userId, shortTimeout, 0, feature, CancellationToken.None),
                    await AccessTokenVault.CreateTokenAsync(userId, shortTimeout, contentId, feature, CancellationToken.None),
                };

                // ACTION-1
                var tokens = await AccessTokenVault.GetAllTokensAsync(userId, CancellationToken.None);

                // 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 = await AccessTokenVault.GetAllTokensAsync(userId, CancellationToken.None);

                // 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())));
            });
        }
Exemplo n.º 13
0
        public async Task AccessToken_Get_ForUserContentAndFeature()
        {
            await NoRepoIntegrationTestAsync(async() =>
            {
                await AccessTokenVault.DeleteAllAccessTokensAsync(CancellationToken.None);
                var userId     = 42;
                var contentId  = 142;
                var feature    = "Feature1";
                var timeout    = TimeSpan.FromMinutes(10);
                var savedToken = await AccessTokenVault.CreateTokenAsync(userId, timeout, contentId, feature, CancellationToken.None);

                // ACTION
                var token = await AccessTokenVault.GetTokenAsync(savedToken.Value, contentId, feature, CancellationToken.None);

                // ASSERT
                AssertTokensAreEqual(savedToken, token);
                Assert.IsNull(await AccessTokenVault.GetTokenAsync(savedToken.Value, CancellationToken.None));
                Assert.IsNull(await AccessTokenVault.GetTokenAsync(savedToken.Value, 0, feature, CancellationToken.None));
                Assert.IsNull(await AccessTokenVault.GetTokenAsync(savedToken.Value, contentId, CancellationToken.None));
            });
        }
Exemplo n.º 14
0
        public async Task AccessToken_Create_ForUser()
        {
            await NoRepoIntegrationTestAsync(async() =>
            {
                await AccessTokenVault.DeleteAllAccessTokensAsync(CancellationToken.None);
                var userId  = 42;
                var timeout = TimeSpan.FromMinutes(10);

                // ACTION
                var token = await AccessTokenVault.CreateTokenAsync(userId, timeout, CancellationToken.None);

                // 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);
            });
        }
Exemplo n.º 15
0
        public async Task AccessToken_UpdateExpired()
        {
            await NoRepoIntegrationTestAsync(async() =>
            {
                try
                {
                    await AccessTokenVault.DeleteAllAccessTokensAsync(CancellationToken.None);
                    var userId     = 42;
                    var timeout    = TimeSpan.FromMilliseconds(1);
                    var savedToken = await AccessTokenVault.CreateTokenAsync(userId, timeout, CancellationToken.None);

                    // ACTION
                    Thread.Sleep(1100);
                    await AccessTokenVault.UpdateTokenAsync(savedToken.Value, DateTime.UtcNow.AddMinutes(30.0d), CancellationToken.None);

                    // ASSERT
                    Assert.Fail("Expected InvalidAccessTokenException was not thrown.");
                }
                catch (InvalidAccessTokenException)
                {
                    // do nothing
                }
            });
        }