internal static async Task <IStorageEngine> Create(string databaseName, Action <CollectionOptions> collectionOverrides = null) { var config = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .Build(); var consistencyLevel = config["ConsistencyLevel"]; ConsistencyLevel consistencyLevelEnum; if (!Enum.TryParse(consistencyLevel, true, out consistencyLevelEnum)) { throw new Exception($"The ConsistencyLevel value {consistencyLevel} is not supported"); } var client = DocumentClientFactory.Create(databaseName); return(await new AzureDocumentDbStorageEngineBuilder(client, databaseName) .UseCollection(o => { o.ConsistencyLevel = consistencyLevelEnum; o.CollectionRequestUnits = TestConstants.RequestUnits; if (collectionOverrides != null) { collectionOverrides(o); } }) .UseTypeMap(new ConfigurableSerializationTypeMap() .RegisterTypes( typeof(OrderCreated).GetTypeInfo().Assembly, t => t.Namespace != null && t.Namespace.EndsWith("Events"), t => t.Name)) .Build() .Initialise()); }
public async Task when_initializing_all_expected_resources_are_created() { var client = DocumentClientFactory.Create(DatabaseName); var collectionName = "AllExpectedResourcesAreCreated_" + Guid.NewGuid(); var storageEngine = await StorageEngineFactory.Create(DatabaseName, o => o.CollectionName = collectionName); await storageEngine.Initialise(); var database = (await client.ReadDatabaseAsync(UriFactory.CreateDatabaseUri(DatabaseName))).Resource; var collection = (await client.ReadDocumentCollectionAsync(UriFactory.CreateDocumentCollectionUri(DatabaseName, collectionName))).Resource; var storedProcedure = (await client.ReadStoredProcedureAsync(UriFactory.CreateStoredProcedureUri(DatabaseName, collectionName, TestConstants.AppendStoredProcedureName))).Resource; var offer = client.CreateOfferQuery() .Where(r => r.ResourceLink == collection.SelfLink) .AsEnumerable() .OfType <OfferV2>() .Single(); Assert.That(offer.Content.OfferThroughput, Is.EqualTo(TestConstants.RequestUnits)); Assert.That(collection.DefaultTimeToLive, Is.Null); Assert.That(collection.PartitionKey.Paths.Count, Is.EqualTo(1)); Assert.That(collection.PartitionKey.Paths.Single(), Is.EqualTo("/streamId")); Assert.That(collection.IndexingPolicy.IncludedPaths.Count, Is.EqualTo(1)); Assert.That(collection.IndexingPolicy.IncludedPaths[0].Path, Is.EqualTo("/*")); Assert.That(collection.IndexingPolicy.ExcludedPaths.Count, Is.EqualTo(2)); Assert.That(collection.IndexingPolicy.ExcludedPaths[0].Path, Is.EqualTo("/body/*")); Assert.That(collection.IndexingPolicy.ExcludedPaths[1].Path, Is.EqualTo("/metadata/*")); }
public async Task when_document_ttl_is_configured_then_documents_have_that_ttl_set() { const string DatabaseName = "AppendingTestsCosmosOnly"; var client = DocumentClientFactory.Create(DatabaseName); var collectionName = "TtlTests_" + Guid.NewGuid(); var storageEngine = await StorageEngineFactory.Create(DatabaseName, o => { o.CollectionName = collectionName; o.DefaultTimeToLiveSeconds = -1; o.DocumentTimeToLiveSeconds = 10; }); await storageEngine.Initialise(); var streamId = Guid.NewGuid().ToString(); var store = new EventStore(storageEngine); await store.AppendToStream(streamId, 0, new EventData(Guid.NewGuid(), new OrderCreated(streamId))); var commitsLink = UriFactory.CreateDocumentCollectionUri(DatabaseName, collectionName); var eventsQuery = client.CreateDocumentQuery <DocumentDbStorageEvent>(commitsLink) .Where(x => x.StreamId == streamId) .OrderBy(x => x.EventNumber) .AsDocumentQuery(); var response = await eventsQuery.ExecuteNextAsync <DocumentDbStorageEvent>(); Assert.That(response.First().TimeToLiveSeconds, Is.EqualTo(10)); }
public AzureDocumentDbStorageEngineHealthTests() { client = DocumentClientFactory.Create(DatabaseName); storageEngine = StorageEngineFactory.Create(DatabaseName, o => { o.CollectionName = CollectionName; o.DefaultTimeToLiveSeconds = -1; o.DocumentTimeToLiveSeconds = 10; }) .Result; storageEngine.Initialise().Wait(); }
public async Task when_initializing_with_a_time_to_live_it_is_set() { var ttl = 60; var collectionName = "TimeToLiveIsSet_" + Guid.NewGuid(); var client = DocumentClientFactory.Create(DatabaseName); var storageEngine = await StorageEngineFactory.Create(DatabaseName, o => { o.CollectionName = collectionName; o.DefaultTimeToLiveSeconds = ttl; }); await storageEngine.Initialise(); var collection = (await client.ReadDocumentCollectionAsync(UriFactory.CreateDocumentCollectionUri(DatabaseName, collectionName))).Resource; Assert.That(collection.DefaultTimeToLive, Is.EqualTo(ttl)); }
public async Task when_reading_a_stream_that_has_deleted_events_the_stream_can_still_be_read() { const string databaseName = "ReadingPartialStreamTests"; const string collectionName = "Commits"; var client = DocumentClientFactory.Create(databaseName); var storageEngine = await StorageEngineFactory.Create(databaseName, o => o.CollectionName = collectionName); var eventStore = new EventStore(storageEngine); var streamId = Guid.NewGuid().ToString(); await eventStore.AppendToStream(streamId, 0, new EventData(Guid.NewGuid(), new OrderCreated(streamId)), new EventData(Guid.NewGuid(), new OrderDispatched(streamId))); await SimulateTimeToLiveExpiration(databaseName, collectionName, client, streamId); var stream = await eventStore.ReadStreamForwards(streamId); Assert.That(stream.Count, Is.EqualTo(1)); Assert.That(stream.First().EventBody, Is.InstanceOf <OrderDispatched>()); Assert.That(stream.First().EventNumber, Is.EqualTo(2)); }
public async Task TearDownDatabase() { var client = DocumentClientFactory.Create(DatabaseName); await client.DeleteDatabaseAsync(UriFactory.CreateDatabaseUri(DatabaseName)); }