Exemplo n.º 1
0
        protected BaseRepositoryTest()
        {
            Persistence = new InMemoryPersistence();

            Streams          = new StreamsFactory(Persistence);
            AggregateFactory = new DefaultAggregateFactory();
        }
        public void ShouldComposeSnapshotOfExactNumberOfEvents()
        {
            // ARRANGE
            var eventRepository    = new SqliteEventRepository(_connectionString);
            var snapshotRepository = new SqliteSnapshotEventRepository(_connectionString);

            var factory        = new DefaultAggregateFactory();
            var aggregateStore = new AggregateRepository(eventRepository, factory, snapshotRepository);

            // Create a test aggregate.
            var aggregateId = CombGuid.Generate();
            var aggregate   = aggregateStore.GetById <IncrementingAggregate>(aggregateId);

            var snapshotSize       = aggregate.SnapshotSize;
            var numberOfTestEvents = 2 * snapshotSize + 1;

            // Send test events to the aggregate.
            Enumerable.Range(1, numberOfTestEvents)
            .ToList()
            .ForEach(x => aggregate.Tell(new IncrementingAggregate.Increment()));

            // ACT
            var orderedEvents   = aggregateStore.Save(aggregate);
            var snapshotVersion = snapshotRepository.GetVersionByAggregateId(aggregateId);
            var snapshotOffer   = (SnapshotOffer)snapshotRepository
                                  .GetSnapshotEventByAggregateIdAndVersion(aggregateId, snapshotVersion ?? 0);
            var newAggregate = aggregateStore.GetById <IncrementingAggregate>(aggregateId);
            var newState     = newAggregate.Ask <int>(new IncrementingAggregate.GetValue());

            // ASSERT
            Assert.AreEqual(numberOfTestEvents, orderedEvents.Length);
            Assert.AreEqual(numberOfTestEvents - 1, snapshotOffer.Version);
            Assert.AreEqual(numberOfTestEvents - 1, snapshotOffer.State);
            Assert.AreEqual(numberOfTestEvents, newState);
        }
        public async Task ShouldSuccesfullyPersistAndHydrateEventsFromAggregate()
        {
            // ARRANGE
            var testAggregate = new TestAggregate(Guid.NewGuid());

            //var eventRepository = new SqlServerEventRepository("Server=tcp:shuffle.database.windows.net,1433;Initial Catalog=Shuffle;Persist Security Info=False;User ID=kvinther;Password=k1617v_KV;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Application Name=Shuffle;");
            var eventRepository  = new SqlServerEventRepository("Server=.\\sqlexpress;Initial Catalog=VerdunEvents;Persist Security Info=False;Trusted_Connection=True;MultipleActiveResultSets=False;Connection Timeout=30;Application Name=Shuffle;");
            var aggregateFactory = new DefaultAggregateFactory();
            var repository       = new AggregateRepository(eventRepository, aggregateFactory);
            var listener         = new BasicEventListener();

            IAggregateCache cache = null;

            //cache = new RedisAggregateCache("shuffle.redis.cache.windows.net:6380,password=z0cYd5K7aNjtE9tl8x6nxYa2lK5TwrJcB1aHsZGCx5Q=,ssl=True,abortConnect=False");
            cache = new RedisAggregateCache("localhost");
            var store = new AggregateStore(repository, listener, aggregateCache: cache);

            // ACT
            var now = DateTime.Now;

            for (var i = 1; i <= 50; i++)
            {
                testAggregate.PublishTestEvent($"{i}");
                await store.Save(testAggregate);

                var hydratedTestAggregate = store.GetById <TestAggregate>(testAggregate.Id);
                // ASSERT
                Assert.AreEqual(testAggregate.Id, hydratedTestAggregate.Id);
                Assert.AreEqual(testAggregate.Version, hydratedTestAggregate.Version);
                Assert.AreEqual(testAggregate.State, hydratedTestAggregate.State);
            }


            Debug.WriteLine($"Total time: {(DateTime.Now - now):g}");
        }
Exemplo n.º 4
0
        public void Initialize()
        {
            // Configuration Parameters
            var eventDatabaseConnectionString = "Data Source=localhost;Initial Catalog=eventway-sample-db;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
            var projectionMetadataDatabaseConnectionString = eventDatabaseConnectionString;

            var cosmosDbEndpoint     = "https://localhost:8081"; // This is the default endpoint for local emulator-instances of the Cosmos DB
            var cosmosDbAuthKey      = "<REPLACE WITH YOUR COSMOS DB AUTH KEY>";
            var cosmosDbDatabaseId   = "eventway-sample-db";
            var cosmosDbCollectionId = "projections";
            var offerThroughput      = 10000;
            var noOfPartitions       = 1000;

            // Event Repository
            var eventRepository = new SqlServerEventRepository(eventDatabaseConnectionString);

            // Projection Metadata Repository
            var projectionMetadataRepository = new SqlServerProjectionMetadataRepository(projectionMetadataDatabaseConnectionString);

            // Query Model Repository
            var queryModelRepository = new DocumentDbQueryModelRepository(cosmosDbDatabaseId, cosmosDbCollectionId,
                                                                          offerThroughput, noOfPartitions, cosmosDbEndpoint, cosmosDbAuthKey);

            queryModelRepository.Initialize();

            // Event Listener
            var eventListener = new BasicEventListener();

            // Aggregate services
            var aggregateFactory    = new DefaultAggregateFactory();
            var aggregateRepository = new AggregateRepository(eventRepository, aggregateFactory);
            var aggregateStore      = new AggregateStore(aggregateRepository, eventListener);

            // PROJECTIONS
            UserProjection = new UserProjection(
                eventRepository,
                eventListener,
                queryModelRepository,
                projectionMetadataRepository);

            // APPLICATION SERVICES
            UserApplicationService = new UserApplicationService(
                aggregateStore,
                queryModelRepository);

            // Start listening for events
            UserProjection.Listen();
        }
Exemplo n.º 5
0
        public void Initialize()
        {
            // Configuration Parameters
            var eventDatabaseConnectionString = "Data Source=localhost;Initial Catalog=eventway;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
            var projectionMetadataDatabaseConnectionString = eventDatabaseConnectionString;

            var cosmosDbEndpoint     = "https://localhost:8081"; // This is the default endpoint for local emulator-instances of the Cosmos DB
            var cosmosDbAuthKey      = "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
            var cosmosDbDatabaseId   = "eventway";
            var cosmosDbCollectionId = "projections";
            var offerThroughput      = 10000;
            var noOfPartitions       = 1000;

            // Event Repository
            var eventRepository = new SqlServerEventRepository(eventDatabaseConnectionString);

            // Projection Metadata Repository
            var projectionMetadataRepository = new SqlServerProjectionMetadataRepository(projectionMetadataDatabaseConnectionString);

            // Query Model Repository
            var queryModelRepository = new CosmosDbQueryModelRepository(cosmosDbDatabaseId, cosmosDbCollectionId,
                                                                        offerThroughput, noOfPartitions, cosmosDbEndpoint, cosmosDbAuthKey);

            queryModelRepository.Initialize();

            // Event Listener
            var eventListener = new BasicEventListener();

            // Aggregate services
            var aggregateFactory    = new DefaultAggregateFactory();
            var aggregateRepository = new AggregateRepository(eventRepository, aggregateFactory);
            var aggregateStore      = new AggregateStore(aggregateRepository, eventListener);

            // PROJECTIONS
            UserProjection = new UserProjection(
                eventRepository,
                eventListener,
                queryModelRepository,
                projectionMetadataRepository);

            // APPLICATION SERVICES
            UserApplicationService = new UserApplicationService(
                aggregateStore,
                queryModelRepository);

            // Start listening for events
            UserProjection.Listen();
        }
        public void ShouldSuccesfullyPersistAndHydrateEventsFromAggregate()
        {
            // ARRANGE
            var testAggregate = new TestAggregate(Guid.NewGuid());

            var connectionString    = "Data Source=localhost;Initial Catalog=vanda-db-dev;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
            var sqlEventsRepository = new SqlServerEventRepository(connectionString);

            var aggregateFactory = new DefaultAggregateFactory();

            var repository = new AggregateRepository(sqlEventsRepository, aggregateFactory);

            // ACT
            testAggregate.PublishTestEvent();
            repository.Save(testAggregate);

            var hydratedTestAggregate = repository.GetById <TestAggregate>(testAggregate.Id);

            // ASSERT
            Assert.AreEqual(testAggregate.Id, hydratedTestAggregate.Id);
            Assert.AreEqual(testAggregate.Version, hydratedTestAggregate.Version);
            Assert.AreEqual(testAggregate.State, hydratedTestAggregate.State);
        }
Exemplo n.º 7
0
 protected BaseRepositoryTest()
 {
     AggregateFactory = new DefaultAggregateFactory();
 }