Exemple #1
0
        public void Should_be_able_to_get_round_robin_projections()
        {
            var processor = new EventProcessor(new Mock <IEventStoreConfiguration>().Object,
                                               new Mock <IPipelineFactory>().Object, new Mock <IProjectionRepository>().Object);

            processor.AddProjection(new Projection("projection-1", 1, Environment.MachineName,
                                                   AppDomain.CurrentDomain.BaseDirectory));
            processor.AddProjection(new Projection("projection-2", 1, Environment.MachineName,
                                                   AppDomain.CurrentDomain.BaseDirectory));

            var projection1 = processor.GetProjection();

            Assert.That(projection1, Is.Not.Null);

            var projection2 = processor.GetProjection();

            Assert.That(projection2, Is.Not.Null);

            Assert.That(processor.GetProjection(), Is.Null);

            processor.ReleaseProjection(projection1);

            Assert.That(processor.GetProjection(), Is.Not.Null);
            Assert.That(processor.GetProjection(), Is.Null);

            processor.ReleaseProjection(projection2);

            Assert.That(processor.GetProjection(), Is.Not.Null);
            Assert.That(processor.GetProjection(), Is.Null);

            Assert.That(() => processor.ReleaseProjection(new Projection("fail", 1, "machine", "folder")), Throws.TypeOf <InvalidOperationException>());
        }
Exemple #2
0
        public void Should_be_able_to_place_projection_into_clustered_aggregation()
        {
            var configuration = new Mock <IEventStoreConfiguration>();

            configuration.Setup(m => m.ProjectionEventFetchCount).Returns(100);

            var processor = new EventProcessor(configuration.Object,
                                               new Mock <IPipelineFactory>().Object, new Mock <IProjectionRepository>().Object);

            var projection1 = new Projection("projection-1", 1, Environment.MachineName,
                                             AppDomain.CurrentDomain.BaseDirectory);
            var projection2 = new Projection("projection-2", 300, Environment.MachineName,
                                             AppDomain.CurrentDomain.BaseDirectory);

            var projection3 = new Projection("projection-3", 301, Environment.MachineName,
                                             AppDomain.CurrentDomain.BaseDirectory);
            var projection4 = new Projection("projection-4", 600, Environment.MachineName,
                                             AppDomain.CurrentDomain.BaseDirectory);

            processor.AddProjection(projection1);
            processor.AddProjection(projection2);
            processor.AddProjection(projection3);
            processor.AddProjection(projection4);

            Assert.That(projection1.AggregationId, Is.EqualTo(projection2.AggregationId));
            Assert.That(projection3.AggregationId, Is.EqualTo(projection4.AggregationId));
            Assert.That(projection1.AggregationId, Is.Not.EqualTo(projection3.AggregationId));
        }
        public void Should_be_able_to_get_round_robin_projections()
        {
            var processor = new EventProcessor(new Mock <IEventStoreConfiguration>().Object,
                                               new Mock <IPipelineFactory>().Object);

            processor.AddProjection(new Projection("projection-1", 1, Environment.MachineName, AppDomain.CurrentDomain.BaseDirectory));
            processor.AddProjection(new Projection("projection-2", 1, Environment.MachineName, AppDomain.CurrentDomain.BaseDirectory));

            var projection1 = processor.GetProjection();

            Assert.That(projection1, Is.Not.Null);

            var projection2 = processor.GetProjection();

            Assert.That(projection2, Is.Not.Null);

            Assert.That(processor.GetProjection(), Is.Null);

            processor.ReleaseProjection(projection1.Name);

            Assert.That(processor.GetProjection(), Is.Not.Null);
            Assert.That(processor.GetProjection(), Is.Null);

            processor.ReleaseProjection(projection2.Name);

            Assert.That(processor.GetProjection(), Is.Not.Null);
            Assert.That(processor.GetProjection(), Is.Null);

            processor.ReleaseProjection("does-not-exist");

            Assert.That(processor.GetProjection(), Is.Null);
        }
Exemple #4
0
        public void Should_be_able_to_get_round_robin_projections()
        {
            var processor = new EventProcessor(new Mock <IEventStoreConfiguration>().Object,
                                               new Mock <IPipelineFactory>().Object, new Mock <IProjectionRepository>().Object);

            processor.AddProjection("projection-1");
            processor.AddProjection("projection-2");

            var projection1 = processor.GetProjection();

            Assert.That(projection1, Is.Not.Null);

            var projection2 = processor.GetProjection();

            Assert.That(projection2, Is.Not.Null);

            Assert.That(processor.GetProjection(), Is.Null);

            processor.ReleaseProjection(projection1);

            Assert.That(processor.GetProjection(), Is.Not.Null);
            Assert.That(processor.GetProjection(), Is.Null);

            processor.ReleaseProjection(projection2);

            Assert.That(processor.GetProjection(), Is.Not.Null);
            Assert.That(processor.GetProjection(), Is.Null);

            Assert.That(() => processor.ReleaseProjection(new Projection("fail", 1)), Throws.TypeOf <InvalidOperationException>());
        }
Exemple #5
0
        public void Should_be_able_to_place_projection_into_clustered_aggregation()
        {
            var configuration = new Mock <IEventStoreConfiguration>();

            configuration.Setup(m => m.ProjectionEventFetchCount).Returns(100);

            var projectionRepository = new Mock <IProjectionRepository>();

            projectionRepository.Setup(m => m.Find("projection-1")).Returns(new Projection("projection-1", 1));
            projectionRepository.Setup(m => m.Find("projection-2")).Returns(new Projection("projection-2", 300));
            projectionRepository.Setup(m => m.Find("projection-3")).Returns(new Projection("projection-3", 301));
            projectionRepository.Setup(m => m.Find("projection-4")).Returns(new Projection("projection-4", 600));

            var processor = new EventProcessor(configuration.Object,
                                               new Mock <IPipelineFactory>().Object, projectionRepository.Object);

            var projection1 = processor.AddProjection("projection-1");
            var projection2 = processor.AddProjection("projection-2");
            var projection3 = processor.AddProjection("projection-3");
            var projection4 = processor.AddProjection("projection-4");

            Assert.That(projection1.AggregationId, Is.EqualTo(projection2.AggregationId));
            Assert.That(projection3.AggregationId, Is.EqualTo(projection4.AggregationId));
            Assert.That(projection1.AggregationId, Is.Not.EqualTo(projection3.AggregationId));
        }
Exemple #6
0
        public void Should_be_able_process_sequence_number_tail()
        {
            var configuration = new Mock <IEventStoreConfiguration>();

            configuration.Setup(m => m.ProjectionEventFetchCount).Returns(100);
            configuration.Setup(m => m.SequenceNumberTailThreadWorkerInterval).Returns(100);
            configuration.Setup(m => m.ProjectionThreadCount).Returns(1);

            var pipelineFactory = new Mock <IPipelineFactory>();

            pipelineFactory.Setup(m => m.GetPipeline <EventProcessingPipeline>()).Returns(
                new EventProcessingPipeline(
                    new Mock <IProjectionEventObserver>().Object,
                    new Mock <IProjectionEventEnvelopeObserver>().Object,
                    new Mock <IProcessEventObserver>().Object,
                    new Mock <IAcknowledgeEventObserver>().Object,
                    new Mock <ITransactionScopeObserver>().Object));

            var processor  = new EventProcessor(configuration.Object, pipelineFactory.Object, new Mock <IProjectionRepository>().Object);
            var projection = new Projection("projection-1", 200, Environment.MachineName,
                                            AppDomain.CurrentDomain.BaseDirectory);

            processor.AddProjection(projection);

            var projectionAggregation = processor.GetProjectionAggregation(projection.AggregationId);

            for (var i = 50; i < 101; i++)
            {
                projectionAggregation.AddPrimitiveEvent(new PrimitiveEvent
                {
                    SequenceNumber = i
                });
            }

            Assert.That(projectionAggregation.IsEmpty, Is.False);
            Assert.That(projectionAggregation.SequenceNumberTail, Is.EqualTo(200));

            try
            {
                processor.Start();

                var timeout = DateTime.Now.AddSeconds(60);

                while (!projectionAggregation.IsEmpty && DateTime.Now < timeout)
                {
                    Thread.Sleep(100);
                }

                Assert.That(projectionAggregation.IsEmpty, Is.True);
                Assert.That(projectionAggregation.SequenceNumberTail, Is.EqualTo(200));
            }
            finally
            {
                processor.Stop();
            }
        }