public void FindSameSagaTwiceThrowsOnNoWait() { // Skip this test on sqlite, as it does not support locking. if (ProviderName == GetSqliteProviderName()) { Assert.Ignore("Test not supported on sqlite database."); return; } var persister = CreatePersister(createTables: true, useLocking: true, useNoWaitLocking: true); var savedSagaData = new MySagaData(); var savedSagaDataId = Guid.NewGuid(); savedSagaData.Id = savedSagaDataId; persister.Insert(savedSagaData, new string[0]); using (_manager.Create()) { persister.Find <MySagaData>("Id", savedSagaDataId); Assert.Throws <AdoNetSagaLockedException>(() => { // using (var thread = new CrossThreadRunner(() => // { using (EnterAFakeMessageContext()) { persister.Find <MySagaData>("Id", savedSagaDataId); } // })) // { // thread.Run(); // } }); } }
public void CanDeleteSagaData() { // arrange var sagaDataId = Guid.NewGuid(); var sagaData = new MySagaData { Id = sagaDataId, SomeField = "some value", AnotherField = "another field", Embedded = new SomeEmbeddedThingie { ThisIsEmbedded = "bla bla", Thingies = { new SomeCollectedThing {No = 1}, new SomeCollectedThing {No = 2}, new SomeCollectedThing {No = 3}, } } }; persister.Save(sagaData, new string[0]); // act persister.Delete(sagaData); // assert dynamic saga = new DbSaga(); int count = saga.Count(id: sagaDataId); Assert.AreEqual(0, count); }
public void PersisterCanFindSagaById() { var savedSagaData = new MySagaData(); var savedSagaDataId = Guid.NewGuid(); savedSagaData.Id = savedSagaDataId; persister.Insert(savedSagaData, new string[0]); var foundSagaData = persister.Find <MySagaData>("Id", savedSagaDataId); foundSagaData.Id.ShouldBe(savedSagaDataId); }
public void PersisterCanFindSagaById() { var persister = CreatePersister(createTables: true); var savedSagaData = new MySagaData(); var savedSagaDataId = Guid.NewGuid(); savedSagaData.Id = savedSagaDataId; persister.Insert(savedSagaData, new string[0]); var foundSagaData = persister.Find <MySagaData>("Id", savedSagaDataId); Assert.That(foundSagaData.Id, Is.EqualTo(savedSagaDataId)); }
public void CanDeleteSaga() { // arrange var mySagaDataId = Guid.NewGuid(); var mySagaData = new MySagaData { Id = mySagaDataId, SomeField="whoolala" }; Collection<MySagaData>("sagas").Insert(mySagaData); // act persister.Delete(mySagaData); // assert Collection<MySagaData>("sagas").FindOne(Query.EQ("_id", mySagaDataId)).ShouldBe(null); }
public void Find_Returns_ExistingSaga() { //Arrange var correlationId = Guid.NewGuid(); var expectedGuid = Guid.NewGuid(); var sagaData = new MySagaData() { SomeGuid = expectedGuid }; sut.DataDictionary[correlationId] = JsonConvert.SerializeObject(sagaData); // Act var saga = sut.Find <MySaga>(correlationId); // Assert saga.Should().NotBeNull(); saga.SagaData.SomeGuid.Should().Be(expectedGuid); }
public void PersistsComplexSagaLikeExpected() { var persister = CreatePersister(createTables: true); var sagaDataId = Guid.NewGuid(); var complexPieceOfSagaData = new MySagaData { Id = sagaDataId, SomeField = "hello", AnotherField = "world!", Embedded = new SomeEmbeddedThingie { ThisIsEmbedded = "this is embedded", Thingies = { new SomeCollectedThing { No = 1 }, new SomeCollectedThing { No = 2 }, new SomeCollectedThing { No = 3 }, new SomeCollectedThing { No = 4 } } } }; persister.Insert(complexPieceOfSagaData, new[] { "SomeField" }); var sagaData = persister.Find <MySagaData>("Id", sagaDataId); Assert.That(sagaData.SomeField, Is.EqualTo("hello")); Assert.That(sagaData.AnotherField, Is.EqualTo("world!")); }
public void PersistsComplexSagaLikeExpected() { var sagaDataId = Guid.NewGuid(); var complexPieceOfSagaData = new MySagaData { Id = sagaDataId, SomeField = "hello", AnotherField = "world!", Embedded = new SomeEmbeddedThingie { ThisIsEmbedded = "this is embedded", Thingies = { new SomeCollectedThing { No = 1 }, new SomeCollectedThing { No = 2 }, new SomeCollectedThing { No = 3 }, new SomeCollectedThing { No = 4 } } } }; persister.Insert(complexPieceOfSagaData, new[] { "SomeField" }); var sagaData = persister.Find <MySagaData>("Id", sagaDataId); sagaData.SomeField.ShouldBe("hello"); sagaData.AnotherField.ShouldBe("world!"); }
public void DeleteIsTransactional() { // arrange var mySagaDataId = Guid.NewGuid(); var mySagaData = new MySagaData { Id = mySagaDataId, SomeField = "whoolala" }; Collection<MySagaData>("sagas").Insert(mySagaData); // act using (var tx = new TransactionScope()) { persister.Delete(mySagaData); // no complete! } // assert Collection<MySagaData>("sagas").FindOne(Query.EQ("_id", mySagaDataId)).ShouldNotBe(null); }
public void Find_Returns_PersistedHeaders() { //Arrange var correlationId = Guid.NewGuid(); var expectedGuid = Guid.NewGuid(); var sagaData = new MySagaData() { SomeGuid = expectedGuid }; sut.DataDictionary[correlationId] = JsonConvert.SerializeObject(sagaData); sut.HeadersDictionary[correlationId] = JsonConvert.SerializeObject(new Dictionary <String, String>() { { expectedGuid.ToString(), expectedGuid.ToString() } }); // Act var saga = sut.Find <MySaga>(correlationId); // Assert saga.Should().NotBeNull(); saga.Headers.Should().HaveCount(1).And.ContainKey(expectedGuid.ToString()); saga.Headers[expectedGuid.ToString()].Should().Be(expectedGuid.ToString()); }
public void SavingSagaDataIsTransactional() { // arrange var sagaDataId = Guid.NewGuid(); var sagaData = new MySagaData {Id = sagaDataId, SomeField = "some value"}; // act using (var tx = new TransactionScope()) { persister.Save(sagaData, new string[0]); // no complete! } // assert dynamic saga = new DbSaga(); int count = saga.Count(id: sagaDataId); Assert.AreEqual(0, count); }
public void IssuesCorrectUpdateStatementIfSagaDataIsSavedMultipleTimes() { var sagaDataId = Guid.NewGuid(); var sagaDataWithError = new MySagaData{AnotherField="hrllo", Id=sagaDataId}; persister.Save(sagaDataWithError, new string[0]); var sagaDataCorrected = new MySagaData{AnotherField="hello", Id=sagaDataId}; persister.Save(sagaDataCorrected, new string[0]); dynamic saga = new DbSaga(); var sagaData = saga.First(id: sagaDataId); var expectedJson = @"{ ""$type"": ""Rebus.Tests.Persistence.SqlServer.TestSqlServerSagaPersister+MySagaData, Rebus.Tests"", ""Id"": ""{sagaDataId}"", ""SomeField"": null, ""AnotherField"": ""hello"", ""Embedded"": null }".Replace("{sagaDataId}", sagaDataId.ToString()); Assert.AreEqual(expectedJson, sagaData.data); }
public void CanStoreSagaAsExpected() { var sagaDataId = Guid.NewGuid(); var complexPieceOfSagaData = new MySagaData { Id = sagaDataId, SomeField = "hello", AnotherField = "world!", Embedded = new SomeEmbeddedThingie { ThisIsEmbedded = "this is embedded", Thingies = { new SomeCollectedThing {No = 1}, new SomeCollectedThing {No = 2}, new SomeCollectedThing {No = 3}, new SomeCollectedThing {No = 4}, } } }; using (var tx = new TransactionScope()) { persister.Save(complexPieceOfSagaData, new[] {"AnotherField", "Embedded.ThisIsEmbedded"}); tx.Complete(); } // look up saga by sagaDataId dynamic sagas = new DbSaga(); dynamic saga = sagas.First(id: sagaDataId); var expectedJsonString = @"{ ""$type"": ""Rebus.Tests.Persistence.SqlServer.TestSqlServerSagaPersister+MySagaData, Rebus.Tests"", ""Id"": ""{sagaDataId}"", ""SomeField"": ""hello"", ""AnotherField"": ""world!"", ""Embedded"": { ""$type"": ""Rebus.Tests.Persistence.SqlServer.TestSqlServerSagaPersister+SomeEmbeddedThingie, Rebus.Tests"", ""ThisIsEmbedded"": ""this is embedded"", ""Thingies"": { ""$type"": ""System.Collections.Generic.List`1[[Rebus.Tests.Persistence.SqlServer.TestSqlServerSagaPersister+SomeCollectedThing, Rebus.Tests]], mscorlib"", ""$values"": [ { ""$type"": ""Rebus.Tests.Persistence.SqlServer.TestSqlServerSagaPersister+SomeCollectedThing, Rebus.Tests"", ""No"": 1 }, { ""$type"": ""Rebus.Tests.Persistence.SqlServer.TestSqlServerSagaPersister+SomeCollectedThing, Rebus.Tests"", ""No"": 2 }, { ""$type"": ""Rebus.Tests.Persistence.SqlServer.TestSqlServerSagaPersister+SomeCollectedThing, Rebus.Tests"", ""No"": 3 }, { ""$type"": ""Rebus.Tests.Persistence.SqlServer.TestSqlServerSagaPersister+SomeCollectedThing, Rebus.Tests"", ""No"": 4 } ] } } }".Replace("{sagaDataId}", sagaDataId.ToString()); Assert.AreEqual(expectedJsonString, saga.data); dynamic index = new DbSagaIndex(); var keys = Enumerable.ToList(index.Find(saga_id: sagaDataId, OrderBy: "[key]")); Assert.AreEqual(2, keys.Count); var first = keys[0]; Assert.AreEqual("AnotherField", first.key); Assert.AreEqual(sagaDataId, first.saga_id); Assert.AreEqual("world!", first.value); var second = keys[1]; Assert.AreEqual("Embedded.ThisIsEmbedded", second.key); Assert.AreEqual(sagaDataId, second.saga_id); Assert.AreEqual("this is embedded", second.value); }
public void PersistsSagaLikeExpected() { var sagaDataId = Guid.NewGuid(); var complexPieceOfSagaData = new MySagaData { Id = sagaDataId, SomeField = "hello", AnotherField = "world!", Embedded = new SomeEmbeddedThingie { ThisIsEmbedded = "this is embedded", Thingies = { new SomeCollectedThing {No = 1}, new SomeCollectedThing {No = 2}, new SomeCollectedThing {No = 3}, new SomeCollectedThing {No = 4}, } } }; using (var tx = new TransactionScope()) { persister.Save(complexPieceOfSagaData, new[] {"SomeField"}); tx.Complete(); } var mySagaData = Collection<MySagaData>("sagas").FindOne(Query.EQ("_id", sagaDataId)); mySagaData.SomeField.ShouldBe("hello"); mySagaData.AnotherField.ShouldBe("world!"); }
public void SavingSagaDataIsTransactional() { // arrange var sagaDataId = Guid.NewGuid(); var sagaData = new MySagaData { Id = sagaDataId, SomeField = "some value" }; // act using (var tx = new TransactionScope()) { persister.Save(sagaData, new string[0]); // no complete! } // assert Collection<MySagaData>("sagas").FindOne(Query.EQ("_id", sagaDataId)).ShouldBe(null); }