Ejemplo n.º 1
0
    public async Task Create_WithEmptyIndexingPolicySettingsForCollection_CollectionIsCreatedWithDefaultPolicy()
    {
        // Arrange
        var tempCollectionName = Guid.NewGuid().ToString();
        var collectionUri      = UriFactory.CreateDocumentCollectionUri(LocalClusterCosmosDb.DbName, tempCollectionName);

        using (var factory = new CosmosCacheFactory(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey, LocalClusterCosmosDb.DbName))
            using (var client = new DocumentClient(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey))
            {
                // Act
                factory.Create <SimpleObject>(tempCollectionName);

                // Assert
                var actualIndexingPolicy = (await client.ReadDocumentCollectionAsync(collectionUri))
                                           .Resource.IndexingPolicy;

                // _etag is excluded by default
                var excludedPaths = actualIndexingPolicy.ExcludedPaths.Where(x => x.Path != "/\"_etag\"/?").ToArray();

                Assert.Empty(excludedPaths);

                Assert.Single(actualIndexingPolicy.IncludedPaths);
                Assert.Contains(actualIndexingPolicy.IncludedPaths, x => x.Path == "/*");

                // Cleanup
                await factory.DocumentClient.DeleteDocumentCollectionAsync(collectionUri);
            }
    }
Ejemplo n.º 2
0
        public CosmosCacheTests()
        {
            cacheFactory = new CosmosCacheFactory(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey, LocalClusterCosmosDb.DbName);

            stringCache = (CosmosCache <string>)cacheFactory.Create <string>("string-collection");
            //stringCache.Remove(CacheKey);
        }
Ejemplo n.º 3
0
 public void Create_WithoutMultiRegionReadWrite_DocumentClientHasTheRightSettings()
 {
     using (var factory = new CosmosCacheFactory(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey, LocalClusterCosmosDb.DbName))
     {
         Assert.False(factory.DocumentClient.ConnectionPolicy.UseMultipleWriteLocations);
         Assert.Empty(factory.DocumentClient.ConnectionPolicy.PreferredLocations);
     }
 }
Ejemplo n.º 4
0
        private static CosmosCache <string> CreateTTLCache(TimeSpan defaultTTL)
        {
            var cFactory = new CosmosCacheFactory(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey, LocalClusterCosmosDb.DbName, new CosmosCacheFactorySettings()
            {
                DefaultTimeToLive = (int)defaultTTL.TotalSeconds
            });

            return((CosmosCache <string>)cFactory.Create <string>("ttl-string-collection"));
        }
Ejemplo n.º 5
0
        public CosmosCacheTests(ITestOutputHelper output)
        {
            cacheFactory          = new CosmosCacheFactory(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey, LocalClusterCosmosDb.DbName);
            docDirectCacheFactory = new CosmosCacheFactory(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey, LocalClusterCosmosDb.DbName, new CosmosCacheFactorySettings()
            {
                InsertMode = CosmosCache.InsertMode.Document
            });

            stringCache = (CosmosCache <string>)cacheFactory.Create <string>("string-collection");
            _output     = output;
        }
        public void Create_CosmosCache_NoException()
        {
            // Arrange
            using (var factory = new CosmosCacheFactory(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey, LocalClusterCosmosDb.DbName))
            {
                // Act
                var instance = factory.Create <SimpleObject>("testCache");

                // Assert
                Assert.IsType <CosmosCache <SimpleObject> >(instance);
            }
        }
Ejemplo n.º 7
0
 public void Create_WithDocumentDirectAndPrimitiveType_RaisesException()
 {
     // Arrange
     using (var factory = new CosmosCacheFactory(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey, LocalClusterCosmosDb.DbName, new CosmosCacheFactorySettings()
     {
         InsertMode = CosmosCache.InsertMode.Document
     }))
     {
         // Assert
         Assert.Throws <ArgumentOutOfRangeException>(() => factory.Create <string>(""));
     }
 }
        public void Create_WithNonExistingCollection_NewCollectionIsCreated()
        {
            var tempCollectionName = Guid.NewGuid().ToString();

            // Arrange
            using (var factory = new CosmosCacheFactory(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey, LocalClusterCosmosDb.DbName))
            {
                // Act
                factory.Create <SimpleObject>(tempCollectionName);

                Assert.Equal(System.Net.HttpStatusCode.OK, factory.DocumentClient.ReadDocumentCollectionAsync(new Uri($"dbs/test-db/colls/{tempCollectionName}", UriKind.Relative)).GetAwaiter().GetResult().StatusCode);
            }
        }
Ejemplo n.º 9
0
    public async Task Create_WithDBSharedRUSetting_WithCollectionRUvalue_CollectionOfferAndNoDbOffer()
    {
        // Arrange
        var tempCollectionName         = Guid.NewGuid().ToString();
        var tempDbName                 = Guid.NewGuid().ToString();
        var collectionUri              = UriFactory.CreateDocumentCollectionUri(tempDbName, tempCollectionName);
        var databaseUri                = UriFactory.CreateDatabaseUri(tempDbName);
        var dbOfferThroughput          = 600;
        var cosmosCacheFactorySettings = new CosmosCacheFactorySettings
        {
            UseKeyAsPartitionKey    = true,
            NewCollectionDefaultDTU = 500 //just so its different than default
        };

        using (var factory = new CosmosCacheFactory(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey, tempDbName, cosmosCacheFactorySettings))
            using (var client = new DocumentClient(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey))
            {
                // Act
                await client.CreateDatabaseAsync(new Database { Id = tempDbName }, new RequestOptions
                {
                    OfferThroughput = dbOfferThroughput //non-default
                });

                //ensure temp collection is created
                factory.Create <SimpleObject>(tempCollectionName);

                Resource collectionResource = await client.ReadDocumentCollectionAsync(collectionUri);

                Resource databaseResource = await client.ReadDatabaseAsync(databaseUri);

                var collectionOffer         = GetOffer(collectionResource, client);
                var collectionOfferResource = await client.ReadOfferAsync(collectionOffer.SelfLink);

                var collectionOfferContent = collectionOfferResource.Resource.GetPropertyValue <OfferContentV2>("content");
                var databaseOffer          = GetOffer(databaseResource, client);
                var dbOfferResource        = await client.ReadOfferAsync(databaseOffer.SelfLink);

                var dbOfferContent = dbOfferResource.Resource.GetPropertyValue <OfferContentV2>("content");

                // Assert
                Assert.Equal(cosmosCacheFactorySettings.NewCollectionDefaultDTU, collectionOfferContent.OfferThroughput);
                Assert.Equal(dbOfferThroughput, dbOfferContent.OfferThroughput);

                // Cleanup
                await factory.DocumentClient.DeleteDocumentCollectionAsync(collectionUri);

                await factory.DocumentClient.DeleteDatabaseAsync(databaseUri);
            }
    }
        public void Create_CosmosCacheMultipleTimes_NoException()
        {
            // Arrange
            using (var factory = new CosmosCacheFactory(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey, LocalClusterCosmosDb.DbName))
            {
                // Act
                for (int i = 0; i < 10; i++)
                {
                    factory.Create <SimpleObject>("testCache");
                }

                // Assert
                // should not throw
            }
        }
Ejemplo n.º 11
0
    public void Create_WithMultiRegionReadWrite_DocumentClientHasTheRightSettings()
    {
        // Arrange
        string currentRegion = "West Europe";
        var    settings      = new CosmosCacheFactorySettings
        {
            MultiRegionReadWrite = true,
            CurrentRegion        = currentRegion
        };

        using (var factory = new CosmosCacheFactory(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey, LocalClusterCosmosDb.DbName, settings))
        {
            Assert.True(factory.DocumentClient.ConnectionPolicy.UseMultipleWriteLocations);
            Assert.NotEmpty(factory.DocumentClient.ConnectionPolicy.PreferredLocations);
            Assert.Equal(currentRegion, factory.DocumentClient.ConnectionPolicy.PreferredLocations.First());
        }
    }
Ejemplo n.º 12
0
        public async Task AddAsync_WithPartitionKeySet_CanReadAndWriteWithPartitionKey()
        {
            // Arrange
            var cacheFactory = new CosmosCacheFactory(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey, LocalClusterCosmosDb.DbName, new CosmosCacheFactorySettings()
            {
                InsertMode = CosmosCache.InsertMode.Document, UseKeyAsPartitionKey = true
            });
            var partCache = cacheFactory.Create <SimpleObject>($"partition-{typeof(SimpleObject).Name}");
            var value     = SimpleObject.Create();

            await partCache.AddAsync(new CacheItem <SimpleObject>(CacheKey, value, TimeSpan.MaxValue));

            // Assert
            var result = await partCache.GetAsync(CacheKey);

            Assert.NotNull(result);
        }
Ejemplo n.º 13
0
    public async Task Create_WithCustomIndexingPolicySettingsForCollection_NewCollectionIsCreated()
    {
        // Arrange
        var tempCollectionName = Guid.NewGuid().ToString();

        var settings = new CosmosCacheFactorySettings
        {
            IndexingSettings = new CosmosCacheFactoryIndexingSettings
            {
                ExcludedPaths = new[] { "/*" },
                IncludedPaths = new[] { $"/{nameof(SimpleObject.Foo)}/?", $"/{nameof(SimpleObject.Value)}/?" }
            }
        };

        var collectionUri = UriFactory.CreateDocumentCollectionUri(LocalClusterCosmosDb.DbName, tempCollectionName);

        using (var factory = new CosmosCacheFactory(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey, LocalClusterCosmosDb.DbName, settings))
            using (var client = new DocumentClient(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey))
            {
                // Act
                factory.Create <SimpleObject>(tempCollectionName);

                // Assert
                var actualIndexingPolicy = (await client.ReadDocumentCollectionAsync(collectionUri))
                                           .Resource.IndexingPolicy;

                // _etag is excluded by default
                var excludedPaths = actualIndexingPolicy.ExcludedPaths.Where(x => x.Path != "/\"_etag\"/?").ToArray();

                Assert.Single(excludedPaths);
                Assert.Contains(actualIndexingPolicy.ExcludedPaths, x => x.Path == "/*");

                Assert.Equal(2, actualIndexingPolicy.IncludedPaths.Count);
                Assert.Contains(actualIndexingPolicy.IncludedPaths, x => x.Path == "/Foo/?");
                Assert.Contains(actualIndexingPolicy.IncludedPaths, x => x.Path == "/Value/?");

                // Cleanup
                await factory.DocumentClient.DeleteDocumentCollectionAsync(collectionUri);
            }
    }
Ejemplo n.º 14
0
    public async Task Create_WithDBSharedRUSetting_WithoutCollectionRUvalue_CollectionOfferSetToDefaultRUsAndNoDbOffer()
    {
        // Arrange
        var tempCollectionName         = Guid.NewGuid().ToString();
        var collectionUri              = UriFactory.CreateDocumentCollectionUri(LocalClusterCosmosDb.DbName, tempCollectionName);
        var databaseUri                = UriFactory.CreateDatabaseUri(LocalClusterCosmosDb.DbName);
        var cosmosCacheFactorySettings = new CosmosCacheFactorySettings
        {
            UseKeyAsPartitionKey        = true,
            UseDatabaseSharedThroughput = true
        };

        using (var factory = new CosmosCacheFactory(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey, LocalClusterCosmosDb.DbName, cosmosCacheFactorySettings))
            using (var client = new DocumentClient(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey))
            {
                //ensure temp collection is created
                factory.Create <SimpleObject>(tempCollectionName);

                Resource collectionResource = await client.ReadDocumentCollectionAsync(collectionUri);

                Resource databaseResource = await client.ReadDatabaseAsync(databaseUri);

                var collectionOffer         = GetOffer(collectionResource, client);
                var collectionOfferResource = await client.ReadOfferAsync(collectionOffer.SelfLink);

                var collectionOfferContent = collectionOfferResource.Resource.GetPropertyValue <OfferContentV2>("content");
                var databaseOffer          = GetOffer(databaseResource, client);

                // Assert
                Assert.Null(databaseOffer);
                Assert.Equal(400, collectionOfferContent.OfferThroughput);

                // Cleanup
                await factory.DocumentClient.DeleteDocumentCollectionAsync(collectionUri);
            }
    }