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}"); }
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(); }
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); }
public void ShouldUseBulkInsertWithTemporaryTable() { // ARRANGE var connectionString = "Data Source=localhost;Initial Catalog=EventWayEvents;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"; var repository = new SqlServerEventRepository(connectionString); var testEventPayload = new SqlServerEventsRepositorySpecsTestEvent() { DummyPayload = "Integration Test " + CombGuid.Generate() }; var aggregateId = CombGuid.Generate(); var events = Enumerable.Range(1, 10) .Select(x => testEventPayload.ToEventData("TestAggregate", aggregateId, x)) .ToArray(); // ACT var orderedEvents = repository.SaveEvents(events); // ASSERT Assert.AreEqual(events.Length, orderedEvents.Length); }
public void ShouldSuccesfullyPersistAndHydrateEventForAggregate() { // ARRANGE 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 repository = new SqlServerEventRepository(connectionString); var testEventPayload = new SqlServerEventsRepositorySpecsTestEvent() { DummyPayload = "Integration Test " + CombGuid.Generate() }; var aggregateId = CombGuid.Generate(); var testEvent = testEventPayload.ToEventData("TestAggregate", aggregateId, 1); // ACT repository.SaveEvents(new [] { testEvent }); var hydratedEvents = repository.GetEventsByAggregateId(aggregateId); // ASSERT Assert.AreEqual(1, hydratedEvents.Count); Assert.AreEqual(typeof(SqlServerEventsRepositorySpecsTestEvent), hydratedEvents[0].EventPayload.GetType()); }