Пример #1
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #7
0
        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!"));
        }
Пример #8
0
        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);
        }