protected BaseRepositoryTest() { Persistence = new InMemoryPersistence(); Streams = new StreamsFactory(Persistence); AggregateFactory = new DefaultAggregateFactory(); }
public async Task Verify_that_saga_can_be_reloaded_and_have_no_uncommitted_events() { var orderId = new OrderId(2); var sagaId = orderId; var eventStore = await _factory.BuildEventStore(_connectionString).ConfigureAwait(false); var streamsFactory = new StreamsFactory(eventStore); var repo = new Repository(new AggregateFactoryEx(_container.Kernel), streamsFactory, new NullSnapshots()); var saga = await repo.GetByIdAsync <DeliverPizzaSaga>(sagaId).ConfigureAwait(false); saga.MessageReceived(new OrderPlaced(orderId)); saga.MessageReceived(new BillPrinted(orderId)); saga.MessageReceived(new PaymentReceived(orderId, Guid.NewGuid())); saga.MessageReceived(new PizzaDelivered(orderId)); await repo.SaveAsync(saga, Guid.NewGuid().ToString(), null).ConfigureAwait(false); var sagaReloaded = await repo.GetByIdAsync <DeliverPizzaSaga>(sagaId).ConfigureAwait(false); Assert.That(sagaReloaded, Is.Not.Null); var events = ((IEventSourcedAggregate)saga).GetChangeSet(); Assert.AreEqual(0, events.Events.Length); }
public async Task repository_does_not_serialize_access_to_the_same_entity() { var orderId = new OrderId(3); var sagaId = orderId; var eventStore = await _factory.BuildEventStore(_connectionString).ConfigureAwait(false); var streamsFactory = new StreamsFactory(eventStore); var repo1 = new Repository(new AggregateFactoryEx(_container.Kernel), streamsFactory, new NullSnapshots()); var repo2 = new Repository(new AggregateFactoryEx(_container.Kernel), streamsFactory, new NullSnapshots()); var saga1 = await repo1.GetByIdAsync <DeliverPizzaSaga>(sagaId).ConfigureAwait(false); saga1.MessageReceived(new OrderPlaced(orderId)); //now create another thread that loads and change the same entity var saga2 = repo2.GetByIdAsync <DeliverPizzaSaga>(sagaId).Result; saga2.MessageReceived(new OrderPlaced(orderId)); repo2.SaveAsync(saga2, Guid.NewGuid().ToString(), null).Wait(); try { await repo1.SaveAsync(saga1, Guid.NewGuid().ToString(), null).ConfigureAwait(false); Assert.Fail("this is supposed to throw due to concurrency exception"); } catch (Exception) { //Good we are expecting to throw, } }
public async Task Verify_that_saga_has_correct_number_of_uncommitted_events() { var orderId = new OrderId(1); var sagaId = orderId; var eventStore = await _factory.BuildEventStore(_connectionString).ConfigureAwait(false); var streamsFactory = new StreamsFactory(eventStore); var repo = new Repository(new AggregateFactoryEx(_container.Kernel), streamsFactory, new NullSnapshots()); var saga = await repo.GetByIdAsync <DeliverPizzaSaga>(sagaId).ConfigureAwait(false); saga.MessageReceived(new OrderPlaced(orderId)); saga.MessageReceived(new BillPrinted(orderId)); saga.MessageReceived(new PaymentReceived(orderId, Guid.NewGuid())); saga.MessageReceived(new PizzaDelivered(orderId)); //check that uncommitted events are correctly transictioned. var events = ((IEventSourcedAggregate)saga).GetChangeSet(); //Verify that we can save the saga. await repo.SaveAsync(saga, Guid.NewGuid().ToString(), null).ConfigureAwait(false); Assert.AreEqual(4, events.Events.Length); }
public async Task SetUp() { _db.Drop(); _persistence = await _factory.BuildEventStore(_connectionString).ConfigureAwait(false); var streamsFactory = new StreamsFactory(_persistence); _repo = new Repository(new AggregateFactoryEx(_container.Kernel), streamsFactory, new NullSnapshots()); }
protected Changeset ProcessEvent(DomainEvent evt, bool inSameCommitAsPrevious) { Int64 commitId = inSameCommitAsPrevious ? _lastCommit : ++_lastCommit; evt.SetPropertyValue(d => d.AggregateId, new SampleAggregateId(_aggregateIdSeed)); evt.SetPropertyValue(d => d.CheckpointToken, commitId); Changeset cs = new Changeset(_aggregateVersion++, new Object[] { evt }); var streamFactory = new StreamsFactory(_persistence); var stream = streamFactory.Open(evt.AggregateId); stream.AppendAsync(cs).Wait(); return(cs); }
private static async Task streams_api() { var persister = CreateYourStore(); var streams = new StreamsFactory(persister); Console.WriteLine("Writing to Stream_1"); var stream = streams.Open("Stream_1"); await stream.AppendAsync(new { data = "Hello world!" }); Console.WriteLine("Reading from Stream_1"); await stream.ReadAsync(data => { Console.WriteLine($" index {data.Index} => {data.Payload}"); return(Task.FromResult(true)); }); }
public async Task verify_unwind_plain_object() { var poco = new PocoObject("TEST", 42); var streamFactory = new StreamsFactory(_persistence); var stream = streamFactory.Open("poco/42"); await stream.AppendAsync(poco).ConfigureAwait(false); await sut.UnwindAsync().ConfigureAwait(false); var allEvents = sut.UnwindedCollection.FindAll(); Assert.That(allEvents.CountDocuments(), Is.EqualTo(1)); var evt = allEvents.Single(); Assert.That(evt.EventType, Is.EqualTo("PocoObject")); Assert.That((evt.GetEvent() as PocoObject).IntValue, Is.EqualTo(42)); Assert.That((evt.GetEvent() as PocoObject).Value, Is.EqualTo("TEST")); Assert.That(evt.PartitionId, Is.EqualTo("poco/42")); }
protected void Init() { var identityConverter = new IdentityManager(new InMemoryCounterService()); MongoFlatIdSerializerHelper.IdentityConverter = identityConverter; identityConverter.RegisterIdentitiesFromAssembly(typeof(SampleId).Assembly); var url = new MongoUrl(ConfigurationManager.ConnectionStrings["readmodel"].ConnectionString); var client = new MongoClient(url); _db = client.GetDatabase(url.DatabaseName); _collection = GetCollection <SimpleTestAtomicReadModel>(); _collectionForAtomicAggregate = GetCollection <SimpleAtomicAggregateReadModel>(); _persistence = CreatePersistence(); _streamsFactory = new StreamsFactory(_persistence); _db.Drop(); _identityManager = new IdentityManager(new CounterService(_db)); GenerateContainer(); SimpleTestAtomicReadModel.TouchMax = Int32.MaxValue; }
public StreamProcessingTests() { _persistence = new InMemoryPersistence(new InMemoryPersistenceOptions()); _streams = new StreamsFactory(_persistence); _snapshots = new DefaultSnapshotStore(new InMemoryPersistence(new InMemoryPersistenceOptions())); }
public StreamProcessorManager(IPersistence persistence) { _streams = new StreamsFactory(persistence); }
public void SetUp() { persistence = new InMemoryPersistence(); streamfactory = new StreamsFactory(persistence); sut = new StreamProcessorManager(persistence); }