Exemple #1
0
        public void SequenceTest()
        {
            if (_connectionString == null)
            {
                return;
            }

            var eventStore = new PostgresEventStore(null, _connectionString, "TestSequences", true) as IEventStore;

            eventStore.Sequences.DropSequence("seq1");
            eventStore.Sequences.DropSequence("seq2");

            var seq1val = eventStore.Sequences.GetNextVal("seq1");

            seq1val.Should().Be(1);

            var seq2val = eventStore.Sequences.GetNextVal("seq2");

            seq1val.Should().Be(1);

            // bump seq1
            seq1val = eventStore.Sequences.GetNextVal("seq1");
            seq1val.Should().Be(2);
            seq2val.Should().Be(1);

            // bump seq2
            seq2val = eventStore.Sequences.GetNextVal("seq2");
            seq1val.Should().Be(2);
            seq2val.Should().Be(2);
        }
Exemple #2
0
        public void TestProjection()
        {
            if (_connectionString == null)
            {
                return;
            }

            var eventStore = new PostgresEventStore(null, _connectionString, "TestProjection", true) as IEventStore;

            var poopProjection = new PoopProjection();

            eventStore.Projections.Add(poopProjection);

            var snoopy = new DogAggregate(Guid.NewGuid(), "Snoopy");

            snoopy.Poop(200);
            snoopy.Poop(700);
            snoopy.Poop(50);
            eventStore.Aggregates.Store(snoopy);

            var pluto = new DogAggregate(Guid.NewGuid(), "Pluto");

            pluto.Poop(2000);
            pluto.Poop(100);
            eventStore.Aggregates.Store(pluto);

            poopProjection.PoopReport.Count.Should().Be(2);
            poopProjection.PoopReport.Find(p => p.DogName == "Snoopy").PoopTotal.Should().Be(950);
            poopProjection.PoopReport.Find(p => p.DogName == "Pluto").PoopTotal.Should().Be(2100);
        }
        private async Task<IEventStore> GetEventStore(string schema)
        {
            var eventStore = new PostgresEventStore(@"Server=127.0.0.1;Port=5432;Database=cedar_tests;User Id=postgres;Password=postgres;", schema);

            await eventStore.DropAll(ignoreErrors: true);
            await eventStore.InitializeStore();

            return eventStore;
        }
        private async Task <IEventStore> GetEventStore(string schema)
        {
            var eventStore = new PostgresEventStore(@"Server=127.0.0.1;Port=5432;Database=cedar_tests;User Id=postgres;Password=postgres;", schema);

            await eventStore.DropAll(ignoreErrors : true);

            await eventStore.InitializeStore();

            return(eventStore);
        }
Exemple #5
0
        public void TestCatchup()
        {
            if (_connectionString == null)
            {
                return;
            }

            var eventStore = new PostgresEventStore(null, _connectionString, "TestProjection", true) as IEventStore;

            var poopProjection = new PoopProjection();

            eventStore.Projections.Add(poopProjection);

            var snoopyId = Guid.NewGuid();

            var snoopy = new DogAggregate(snoopyId, "Snoopy");

            snoopy.Poop(100);
            snoopy.Poop(100);
            snoopy.Poop(100);
            eventStore.Aggregates.Store(snoopy);

            ((PostgresEventStore)eventStore).NumberOfInlineEventsNotCatchedUp.Should().Be(4);

            poopProjection.PoopReport.First().PoopTotal.Should().Be(300);

            // Open new event store and dehydrate events
            var eventStore2     = new PostgresEventStore(null, _connectionString, "TestProjection", false) as IEventStore;
            var poopProjection2 = new PoopProjection();

            eventStore2.Projections.Add(poopProjection2);

            eventStore2.DehydrateProjections();

            ((PostgresEventStore)eventStore2).NumberOfInlineEventsNotCatchedUp.Should().Be(0);

            poopProjection2.PoopReport.Count.Should().Be(1);

            var snoopy2 = eventStore.Aggregates.Load <DogAggregate>(snoopyId);

            snoopy2.Poop(100);
            eventStore2.Aggregates.Store(snoopy2);
            poopProjection2.PoopReport.First().PoopTotal.Should().Be(400);

            ((PostgresEventStore)eventStore2).NumberOfInlineEventsNotCatchedUp.Should().Be(1);

            // Check that after catchup the projection is still the same and inline event list is cleaned up
            eventStore2.CatchUp();
            poopProjection2.PoopReport.First().PoopTotal.Should().Be(400);
            ((PostgresEventStore)eventStore2).NumberOfInlineEventsNotCatchedUp.Should().Be(0);
        }
Exemple #6
0
        public void TestDehydrateProjections()
        {
            if (_connectionString == null)
            {
                return;
            }

            // Create events store, put some events in
            var eventStore = new PostgresEventStore(null, _connectionString, "TestDehydrateProjections", true) as IEventStore;


            Stopwatch sw = new Stopwatch();

            sw.Start();
            for (int i = 0; i < 1000; i++)
            {
                var dog = new DogAggregate(Guid.NewGuid(), "Dog name");
                dog.Poop(2000);
                dog.Poop(1030);
                dog.Poop(1020);
                dog.Poop(1100);
                dog.Bark(1020);
                dog.Bark(1040);
                dog.Poop(1200);
                dog.Poop(1300);
                dog.Bark(1040);
                dog.Poop(1200);
                eventStore.Aggregates.Store(dog);
            }

            sw.Stop();
            System.Diagnostics.Debug.WriteLine("Create 10000 events took: " + (sw.ElapsedMilliseconds) + " milliseconds");

            // Create new instance of event store and dehydrate into in-memory projection

            var eventStore2 = new PostgresEventStore(null, _connectionString, "TestDehydrateProjections") as IEventStore;

            var poopProjection = new PoopProjection();

            eventStore.Projections.Add(poopProjection);

            sw.Restart();

            eventStore.DehydrateProjections();

            sw.Stop();
            System.Diagnostics.Debug.WriteLine("Dehydrate 10000 events took: " + (sw.ElapsedMilliseconds) + " milliseconds");

            poopProjection.PoopReport.Count.Should().Be(1000);
        }
Exemple #7
0
        public void TestRawEventAppendingAndFetching()
        {
            if (_connectionString == null)
            {
                return;
            }

            var eventStore = new PostgresEventStore(null, _connectionString, "TestRawEventAppendingAndFetching", true) as IEventStore;

            var streamId     = Guid.NewGuid();
            var eventsToSave = new object[] { new DogBorn("Snoopy"), new DogBorn("Pluto") };

            eventStore.AppendStream(streamId, 0, eventsToSave);

            var eventsFetched = eventStore.FetchStream(streamId);

            eventsFetched.Should().BeEquivalentTo(eventsToSave);
        }
        public async Task CheckFileUri(string id)
        {
            var store   = new PostgresEventStore <DiffPatchEvent, EventTypes, JToken>(null);
            var patcher = new JsonDiffPatcher <Adresse>();

            _adresseEvsoApi = new DiffPatchEventSourceApi <Adresse>(store, patcher);

            var current = await _adresseEvsoApi.GetCurrentAggregate(id);

            var watcher = new SiteWatcher();
            await watcher.Crawl(id);

            var ev = patcher.GenerateEvent(id, null, current.Resource);

            switch (ev.EventType)
            {
            case EventTypes.Ignored:
                // log nothing happened
                break;

            case EventTypes.Created:
                // shouldnt really happen..?

                break;

            case EventTypes.Deleted:
                // 404 from the service.. prompt user input - e.g. should all docs be marked as deleted?
                break;

            case EventTypes.Updated:
                var res = await _adresseEvsoApi.EffectuateEvent(ev);

                if (res.StatusCode == System.Net.HttpStatusCode.Created)
                {
                    await QueueDownloadDiffTask(ev);
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Exemple #9
0
        public void TestAggregateHydrationAndDehydration()
        {
            if (_connectionString == null)
            {
                return;
            }

            var eventStore = new PostgresEventStore(null, _connectionString, "TestAggregateHydrationAndDehydration", true) as IEventStore;

            var aggregateBeforeHydration = new DogAggregate(Guid.NewGuid(), "Snoopy");

            aggregateBeforeHydration.Bark(100);
            aggregateBeforeHydration.Poop(1500);

            eventStore.Aggregates.Store(aggregateBeforeHydration);

            var dehydratedAggregate = eventStore.Aggregates.Load <DogAggregate>(aggregateBeforeHydration.Id);

            dehydratedAggregate.Should().BeEquivalentTo(aggregateBeforeHydration);
        }
        public async Task conccurrent_appends_might_throw_WrongExpectedVersionException_and_thats_ok()
        {
            var eventStore = new PostgresEventStore(@"Server=127.0.0.1;Port=5432;Database=cedar_tests;User Id=postgres;Password=postgres;");

            await eventStore.DropAll(ignoreErrors: true);
            await eventStore.InitializeStore();

            using (eventStore)
            {
                for (var i = 0; i < 3; i++)
                {
                    Parallel.For(0, 4, async (iteration) =>
                    {
                        var streamId = string.Concat("stream-", iteration);
                        await eventStore
                            .AppendToStream(streamId, ExpectedVersion.Any, new NewStreamEvent(Guid.NewGuid(), "type", "\"data\"", "\"metadata\""))
                            .MightThrow<WrongExpectedVersionException>("Append failed due to WrongExpectedVersion. Stream: {0}, Expected version: -2".FormatWith(streamId));
                    });

                }
            }
        }
Exemple #11
0
        public async Task conccurrent_appends_might_throw_WrongExpectedVersionException_and_thats_ok()
        {
            var eventStore = new PostgresEventStore(@"Server=127.0.0.1;Port=5432;Database=cedar_tests;User Id=postgres;Password=postgres;");

            await eventStore.DropAll(ignoreErrors : true);

            await eventStore.InitializeStore();

            using (eventStore)
            {
                for (var i = 0; i < 3; i++)
                {
                    Parallel.For(0, 4, async(iteration) =>
                    {
                        var streamId = string.Concat("stream-", iteration);
                        await eventStore
                        .AppendToStream(streamId, ExpectedVersion.Any, new NewStreamEvent(Guid.NewGuid(), "type", "\"data\"", "\"metadata\""))
                        .MightThrow <WrongExpectedVersionException>("Append failed due to WrongExpectedVersion. Stream: {0}, Expected version: -2".FormatWith(streamId));
                    });
                }
            }
        }
Exemple #12
0
        public void CommandLogTest()
        {
            if (_connectionString == null)
            {
                return;
            }

            var eventStore = new PostgresEventStore(null, _connectionString, "TestCommandLog", true) as IEventStore;

            var myCmd = new TestCommand()
            {
                CmdId = Guid.NewGuid(), Name = "Hans", Weight = 120, Gender = Gender.Male
            };
            var failedResult  = Result.Fail("Command failed for some reason. DOH!");
            var myCmdLogEntry = new CommandLogEntry(myCmd.CmdId, myCmd, failedResult);

            eventStore.CommandLog.Store(myCmdLogEntry);

            var myCmdLogEntryFromLoad = eventStore.CommandLog.Load(myCmd.CmdId);

            // Assert
            myCmdLogEntryFromLoad.IsSuccess.Should().BeFalse();
            myCmdLogEntryFromLoad.ErrorMessages.Should().Contain(failedResult.Errors.First().Message);
        }
		public SnapshotSaveLoadTests(PostgresFixture fixture)
		{
			_store = new PostgresEventStore(PostgresFixture.ConnectionString);
			_stamper = new IncrementingStamper();
		}
		public PostgresStoreReaderTests(PostgresFixture fixture)
		{
			_store = new PostgresEventStore(PostgresFixture.ConnectionString);

			fixture.DropOnDispose(StreamName);
		}
		public PostgresStoreWriterTests(PostgresFixture fixture)
		{
			_store = new PostgresEventStore(PostgresFixture.ConnectionString);
		}