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); } }
public CosmosCacheTests() { cacheFactory = new CosmosCacheFactory(LocalClusterCosmosDb.ConnectionURI, LocalClusterCosmosDb.AccessKey, LocalClusterCosmosDb.DbName); stringCache = (CosmosCache <string>)cacheFactory.Create <string>("string-collection"); //stringCache.Remove(CacheKey); }
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")); }
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); } }
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); } }
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 } }
private CosmosCache <T> CreateCache <T>(CosmosCache.InsertMode mode, string cacheName = null) { switch (mode) { case CosmosCache.InsertMode.Document: return((CosmosCache <T>)docDirectCacheFactory.Create <T>(cacheName ?? typeof(T).Name)); case CosmosCache.InsertMode.JSON: return(string.IsNullOrEmpty(cacheName) ? (CosmosCache <T>)cacheFactory.CreateDefault <T>() : (CosmosCache <T>)cacheFactory.Create <T>(cacheName)); default: throw new NotImplementedException($"Cache creator for InsertMode='{mode}' is not implemented!"); } }
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); }
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); } }
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); } }