/// <summary> /// Initializes a new instance of the <see cref="MongoTimeoutPersister"/> class. /// </summary> /// <param name="mongoFactory"> /// The mongo factory. /// </param> public MongoTimeoutPersister(MongoDatabaseFactory mongoFactory) { Contract.Requires<ArgumentNullException>(mongoFactory != null); this.mongoDatabase = mongoFactory.GetDatabase(); this.EnsureTimeoutIndexes(); }
public void SaveSagaData( MongoSagaPersister sut, MongoDatabaseFactory factory, DeviceCommandSagaState state) { sut.Save(state); }
public void SavingSagaWithNullUniquePropertyShouldThrowException( MongoSagaPersister sut, MongoDatabaseFactory factory, SagaWithUniqueProperty sagaData) { sagaData.UniqueProperty = null; sut.Invoking(s => s.Save(sagaData)).ShouldThrow<ArgumentNullException>(); }
public void SavingSagaWithoutUniqueProperty( MongoSagaPersister sut, MongoDatabaseFactory factory, SagaWithoutUniqueProperties sagaData) { sut.Save(sagaData); var entity = factory.RetrieveSagaData(sagaData); entity.Id.Should().Be(sagaData.Id); entity.NonUniqueProperty.Should().Be(sagaData.NonUniqueProperty); }
public void PutTest(MongoDatabaseFactory factory, byte[] data) { var sut = new MongoGridFSDataBus(factory); var input = new MemoryStream(data); var key = sut.Put(input, TimeSpan.FromDays(1)); var gfs = factory.GetDatabase().GridFS.OpenRead(key); var result = new byte[data.Length]; gfs.Read(result, 0, data.Length); gfs.Length.Should().Be(data.Length); result.Should().BeEquivalentTo(data); }
public void GetNextChunkReturnsEmptyListWhenCollectionDoesNotExist( MongoTimeoutPersister sut, MongoDatabaseFactory factory) { factory.ResetTimeoutCollection(); var startSlice = DateTime.UtcNow.AddMinutes(-5); DateTime nextTimeToRunQuery; var result = sut.GetNextChunk(startSlice, out nextTimeToRunQuery); result.Should().BeEmpty(); nextTimeToRunQuery.Should() .BeOnOrAfter( startSlice.AddMinutes(MongoPersistenceConstants.DefaultNextTimeoutIncrementMinutes)); }
public void GetTest(MongoDatabaseFactory factory, byte[] data) { var st = new MemoryStream(data); var key = Guid.NewGuid().ToString(); factory.GetDatabase().GridFS.Upload(st, key); var sut = new MongoGridFSDataBus(factory); var resultStream = sut.Get(key); var result = new byte[data.Length]; resultStream.Read(result, 0, data.Length); resultStream.Length.Should().Be(data.Length); result.Should().BeEquivalentTo(data); }
public void GetNextChunkReturnsOneTimeoutWhenCollectionHasOneTimeout( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeoutData) { factory.ResetTimeoutCollection(); timeoutData.Time = DateTime.UtcNow.AddMinutes(-1); sut.Add(timeoutData); var startSlice = DateTime.UtcNow.AddMinutes(-5); DateTime nextTimeToRunQuery; var result = sut.GetNextChunk(startSlice, out nextTimeToRunQuery); result.Should().HaveCount(1); nextTimeToRunQuery.Should().BeOnOrAfter(timeoutData.Time); }
public void Customize(IFixture fixture) { var client = new MongoClient(MongoPersistenceConstants.DefaultConnectionString); var clientAccessor = new MongoClientAccessor(client, "UnitTest"); var databaseFactory = new MongoDatabaseFactory(clientAccessor); fixture.Register(() => client); fixture.Register(() => clientAccessor); fixture.Register(() => databaseFactory); fixture.Customize<TimeoutData>( c => c.With(t => t.OwningTimeoutManager, "UnitTests").With(t => t.Time, DateTime.UtcNow)); fixture.Customize<MongoTimeoutPersister>(c => c.With(t => t.EndpointName, "UnitTests")); fixture.Customize(new SupportMutableValueTypesCustomization()); TimeoutClassMaps.ConfigureClassMaps(); }
public void SingleSubscriptionShouldOnlyCreateOneSubscription( MongoSubscriptionPersister storage, MongoDatabaseFactory factory, Address client, string messageTypeString) { var sut = storage as ISubscriptionStorage; var messageTypes = new List<MessageType>() { new MessageType(messageTypeString, "1.0.0.0") }; sut.Subscribe(client, messageTypes); var subscriptions = storage.GetSubscriptions(messageTypes).ToList(); subscriptions.Should().HaveCount(messageTypes.Count); var subscription = subscriptions.First(); subscription.MessageType.Should().Be(messageTypes.First()); subscription.Clients.Should().HaveCount(1); subscription.Clients.First().Should().Be(client); }
public void SameClientSubscribesTwiceShouldOnlyCreateOneSubscribtion( MongoSubscriptionPersister storage, MongoDatabaseFactory factory, string messageTypeString) { var client = new Address("testqueue.publisher", "localhost"); var sut = storage as ISubscriptionStorage; var messageTypes = new List<MessageType>() { new MessageType(messageTypeString, "1.0.0.0") }; sut.Subscribe(client, messageTypes); sut.Subscribe(client, messageTypes); var subscriptions = storage.GetSubscriptions(messageTypes).ToList(); subscriptions.Should().HaveCount(messageTypes.Count); var subscription = subscriptions.First(); subscription.MessageType.Should().Be(messageTypes.First()); subscription.Clients.Should().HaveCount(1); subscription.Clients.First().Should().Be(client); }
public void UpdateCollisionShouldFail( MongoSagaPersister sut, MongoDatabaseFactory factory, SagaWithUniqueProperty sagaData) { sut.Save(sagaData); var saga1 = factory.RetrieveSagaData(sagaData); var saga2 = factory.RetrieveSagaData(sagaData); saga1.UniqueProperty = Guid.NewGuid().ToString(); sut.Update(saga1); saga2.UniqueProperty = Guid.NewGuid().ToString(); sut.Invoking(s => s.Update(saga2)).ShouldThrow<InvalidOperationException>(); }
public void UpdatingNonExistantSagaWithUniqueProperty( MongoSagaPersister sut, MongoDatabaseFactory factory, SagaWithUniqueProperty sagaData) { sut.Invoking(s => s.Update(sagaData)).ShouldThrow<InvalidOperationException>(); factory.RetrieveSagaData(sagaData).Should().BeNull(); }
public void UpdatingSagaWithUniqueProperty( MongoSagaPersister sut, MongoDatabaseFactory factory, SagaWithUniqueProperty sagaData, string newValue) { sut.Save(sagaData); sagaData.NonUniqueProperty = newValue; sut.Update(sagaData); var entity = factory.RetrieveSagaData(sagaData); entity.NonUniqueProperty.Should().Be(newValue); }
public void SavingSagaWithoutDocumentVersionShouldThrowException( MongoSagaPersister sut, MongoDatabaseFactory factory, SagaWithoutDocumentVersion sagaData) { sut.Invoking(s => s.Save(sagaData)).ShouldThrow<InvalidOperationException>(); }
public void SavingSagaWithSameUniquePropertyAsAnAlreadyCompletedSaga( MongoSagaPersister sut, MongoDatabaseFactory factory, SagaWithUniqueProperty sagaData1, SagaWithUniqueProperty sagaData2) { var uniqueProperty = Guid.NewGuid().ToString(); sagaData1.UniqueProperty = uniqueProperty; sagaData2.UniqueProperty = uniqueProperty; sut.Save(sagaData1); sut.Complete(sagaData1); sut.Save(sagaData2); var entity = factory.RetrieveSagaData(sagaData2); entity.UniqueProperty.Should().Be(sagaData2.UniqueProperty); entity.NonUniqueProperty.Should().Be(sagaData2.NonUniqueProperty); }
public void RemoveTimeoutByIdOnNonExistantIdDoesNotRemoveOtherTimeout( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeoutData) { factory.ResetTimeoutCollection(); sut.Add(timeoutData); sut.RemoveTimeoutBy(Guid.NewGuid()); factory.RetrieveAllTimeouts().Should().HaveCount(1); }
public void BasicMongoSagaPersisterConstruction(MongoDatabaseFactory factory) { var sut = new MongoSagaPersister(factory); }
public void RemoveTimeoutByIdOnEmptyTimeoutCollection( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeoutData) { factory.ResetTimeoutCollection(); sut.RemoveTimeoutBy(timeoutData.SagaId); factory.RetrieveAllTimeouts().Should().HaveCount(0); }
public void AddTwoDifferentTimeouts( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeout1, Timeout.Core.TimeoutData timeout2) { factory.ResetTimeoutCollection(); sut.Add(timeout1); sut.Add(timeout2); var result = factory.RetrieveAllTimeouts(); result.Should().HaveCount(2); }
public void TryRemoveEmptyTimeoutCollectionShouldReturnFalseAndNullData( MongoTimeoutPersister sut, MongoDatabaseFactory factory, string timeoutId) { factory.ResetTimeoutCollection(); Timeout.Core.TimeoutData timeoutData; var result = sut.TryRemove(timeoutId, out timeoutData); result.Should().BeFalse(); timeoutData.Should().BeNull(); factory.RetrieveAllTimeouts().Should().HaveCount(0); }
/// <summary> /// Initializes a new instance of the <see cref="MongoGridFSDataBus"/> class. /// </summary> /// <param name="mongoFactory"> /// The MongoDB factory. /// </param> public MongoGridFSDataBus(MongoDatabaseFactory mongoFactory) { Contract.Requires<ArgumentNullException>(mongoFactory != null, "mongoFactory != null"); this.gridFS = mongoFactory.GetDatabase().GridFS.AssumedNotNull(); }
/// <summary> /// Initializes a new instance of the <see cref="MongoSubscriptionPersister"/> class. /// Initializes a new instance of the <see cref="MongoSubscriptionStorage"/> class. /// </summary> /// <param name="mongoFactory"> /// The MongoDB factory. /// </param> public MongoSubscriptionPersister(MongoDatabaseFactory mongoFactory) { Contract.Requires<ArgumentNullException>(mongoFactory != null); this.mongoDatabase = mongoFactory.GetDatabase(); }
public void UpdatingSagaWithoutDocumentVersion( MongoSagaPersister sut, MongoDatabaseFactory factory, SagaWithoutUniqueProperties sagaData) { sut.Invoking(s => s.Update(sagaData)).ShouldThrow<InvalidOperationException>(); }
public void CompletingSagaShouldRemoveDocument( MongoSagaPersister sut, MongoDatabaseFactory factory, SagaWithoutUniqueProperties sagaData) { sut.Save(sagaData); sut.Complete(sagaData); factory.RetrieveSagaData(sagaData).Should().BeNull(); }
public void SavingDifferentSagaWithSameUniquePropertyShouldThrowDuplicateException( MongoSagaPersister sut, MongoDatabaseFactory factory, SagaWithUniqueProperty sagaData1, SagaWithUniqueProperty sagaData2) { var uniqueProperty = Guid.NewGuid().ToString(); sagaData1.UniqueProperty = uniqueProperty; sagaData2.UniqueProperty = uniqueProperty; sut.Save(sagaData1); sut.Invoking(s => s.Save(sagaData2)).ShouldThrow<MongoDuplicateKeyException>(); }
public void TryRemoveShouldSucceedAndReturnDataForOneTimeoutAndLeaveTheOther( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeoutData1, Timeout.Core.TimeoutData timeoutData2) { factory.ResetTimeoutCollection(); sut.Add(timeoutData1); sut.Add(timeoutData2); Timeout.Core.TimeoutData returnedTimeoutData; var timeouts = factory.RetrieveAllTimeouts(); var result = sut.TryRemove(timeouts.First().Id.ToString(), out returnedTimeoutData); result.Should().BeTrue(); returnedTimeoutData.ShouldBeEquivalentTo(timeoutData1); var remainingTimeout = factory.RetrieveAllTimeouts().ToList(); remainingTimeout.Should().HaveCount(1); remainingTimeout.First().ShouldBeEquivalentTo(timeoutData2); }
public void RemoveTimeoutByIdRemovesCorrectTimeoutAndDoesNotRemoveOtherTimeout( MongoTimeoutPersister sut, MongoDatabaseFactory factory, Timeout.Core.TimeoutData timeoutData1, Timeout.Core.TimeoutData timeoutData2) { factory.ResetTimeoutCollection(); sut.Add(timeoutData1); sut.Add(timeoutData2); sut.RemoveTimeoutBy(timeoutData2.SagaId); var remainingTimeouts = factory.RetrieveAllTimeouts().ToList(); remainingTimeouts.Should().HaveCount(1); remainingTimeouts.First().SagaId.Should().Be(timeoutData1.SagaId); }
public void InterleavedSavingSagaShouldThrowException( MongoSagaPersister sut, MongoDatabaseFactory factory, SagaWithUniqueProperty sagaData) { sut.Save(sagaData); sut.Invoking(s => s.Save(sagaData)).ShouldThrow<MongoDuplicateKeyException>(); }
public void BasicMongoSubscriptionStorageConstruction(MongoDatabaseFactory factory) { var sut = new MongoSubscriptionPersister(factory); }