public void BasicEventReplierTest()
        {
            const int port = 5566;

            //Create event replier
            using EventReplier <PingEvent, OkResponse> eventReplier = new(port, _ => new OkResponse());
            // ReSharper disable once AccessToDisposedClosure
            _ = Task.Run(() => eventReplier.HandleEventsLoop());

            //Setup test's zmq
            Utils.CreateZmq(ZSocketType.REQ, port, false, out ZContext context, out ZSocket socket);

            //Create ping event and serialize it
            byte[] okEventData = EventsSerializer.SerializeEvent(new PingEvent());

            //Send it
            socket.Send(okEventData);

            //Get the response back from the event replier
            byte[]     responseRawData  = socket.Receive();
            OkResponse responseResponse = EventsSerializer.DeserializeEvent <OkResponse>(responseRawData);

            Assert.IsNotNull(responseResponse);

            socket.Dispose();
            context.Dispose();
        }
        public void BasicUnionEventReplierTest()
        {
            const int port = 6677;

            using EventReplier <EngineActionEvent, EngineActionResponse> eventReplier = new(port, _ => new OkResponse());
            // ReSharper disable once AccessToDisposedClosure
            _ = Task.Run(() => eventReplier.HandleEventsLoop());

            //Setup test's zmq
            Utils.CreateZmq(ZSocketType.REQ, port, false, out ZContext context, out ZSocket socket);

            //Get the response
            byte[] okEventData = EventsSerializer.SerializeEvent <EngineActionEvent>(new PingEvent());
            socket.Send(okEventData);

            //Check the type
            byte[] responseRawData = socket.Receive();
            EngineActionResponse responseActionResponse = EventsSerializer.DeserializeEvent <EngineActionResponse>(responseRawData);

            Assert.IsNotNull(responseActionResponse);
            Assert.That(responseActionResponse.GetType(), Is.EqualTo(typeof(OkResponse)));

            socket.Dispose();
            context.Dispose();
        }
示例#3
0
 public EventStore(E05.Test.Infrastructure.Bus bus, EventsSerializer eventsSerializer, SnapshotStore snapshotStore)
 {
     Events            = new List <EventDescriptor>();
     _bus              = bus;
     _eventsSerializer = eventsSerializer;
     _snapshotStore    = snapshotStore;
 }
示例#4
0
        public void ShouldUseTheProjectionToGetTheLatestVersion()
        {
            //Given
            var          events           = new List <object>();
            Guid         id               = Guid.NewGuid();
            const string name             = "test";
            const string newName          = "second";
            var          bus              = new E05.Test.Infrastructure.Bus();
            var          eventsSerializer = EventsSerializer.GetEventSerializer();
            var          eventStore       = new EventStore(bus, eventsSerializer);
            var          commandHandler   = new InventoryCommandHandler(bus, eventStore);
            var          projection       = new ItemsProjection(bus);

            bus.Send(new CreateInventoryItem(id, name));
            var lastProjection = projection.GetById(id);

            //When

            bus.Send(new ModifyItemName(id, newName, lastProjection.Version));

            //Then
            var items = projection.GetAll().ToList();

            Assert.AreEqual(1, items.Count);
            var kvp = items[0];

            Assert.AreEqual(id, kvp.Id);
            Assert.AreEqual(newName, kvp.Name);
            Assert.AreEqual(1, kvp.Version);
        }
        public void BasicUnionSerializationTest()
        {
            byte[] data = EventsSerializer.SerializeEvent <EngineActionEvent>(new PingEvent());

            EngineActionEvent engineEvent = EventsSerializer.DeserializeEvent <EngineActionEvent>(data);

            Assert.That(engineEvent.GetType(), Is.EqualTo(typeof(PingEvent)));
        }
示例#6
0
        public void should_store_and_retrieve_event()
        {
            // Arrange
            var serializer = new EventsSerializer("test.xml");
            var repository = new EventsRepository(serializer);
            var dt = new DateTime(2012, 7, 14);

            // Act
            repository.Add(new Event(dt));
            var list = repository.GetAll();

            // Assert
            Assert.Equal(1, list.Count);
            Assert.Equal(dt, list[0].Date);
        }
示例#7
0
        public void BasicEventDispatcherTest()
        {
            const int port = 8732;

            //Setup test's ZMQ
            Utils.CreateZmq(ZSocketType.REP, port, true, out ZContext context, out ZSocket socket);

            //Create the event dispatcher
            EventDispatcher <EngineActionEvent, EngineActionResponse> eventDispatcher = null;

            _ = Task.Run(() =>
            {
                eventDispatcher = new EventDispatcher <EngineActionEvent, EngineActionResponse>(new TimeSpan(0, 0, 0, 4), port);
                eventDispatcher.DispatchEventsThread().RunSynchronously();
            });
            SpinWait.SpinUntil(() => eventDispatcher != null);

            //Send the event
            bool gotResponse = false;

            eventDispatcher.QueueEvent(new PingEvent(), responseEventDispatcher =>
            {
                //We got a response
                gotResponse = true;
                Assert.IsNotNull(responseEventDispatcher);
                Assert.That(responseEventDispatcher.GetType(), Is.EqualTo(typeof(OkResponse)));
            });

            //Get a event from the dispatcher
            byte[]            requestData = socket.Receive();
            EngineActionEvent actionEvent = EventsSerializer.DeserializeEvent <EngineActionEvent>(requestData);

            Assert.IsNotNull(actionEvent);
            Assert.That(actionEvent.GetType(), Is.EqualTo(typeof(PingEvent)));

            //Respond
            EngineActionResponse response = new OkResponse();

            byte[] responseData = EventsSerializer.SerializeEvent <EngineActionResponse>(response);
            socket.Send(responseData);
            SpinWait.SpinUntil(() => gotResponse);

            eventDispatcher.Dispose();
            socket.Dispose();
            context.Dispose();
        }
示例#8
0
        public void should_serialize_and_deserialize_two_events()
        {
            // Arrange
            var events = new EventsList(new List<Event>
                {
                    new Event(new DateTime(2012, 12, 12)),
                    new Event(new DateTime(2011, 11, 1))
                });
            var target = new EventsSerializer("serialized.xml");

            // Act
            target.Serialize(events);
            var result = target.Deserialize();

            // Assert
            Assert.Equal(2, result.Count);
            Assert.Equal(new DateTime(2012, 12, 12), result[0].Date);
            Assert.Equal(new DateTime(2011, 11, 1), result[1].Date);
        }
示例#9
0
        public void ShouldGenerateSnapshot()
        {
            //Given
            var          events           = new List <object>();
            Guid         id               = Guid.NewGuid();
            const string name             = "test";
            var          bus              = new E05.Test.Infrastructure.Bus();
            var          snapshotStore    = new SnapshotStore();
            var          eventsSerializer = EventsSerializer.GetEventSerializer();
            var          eventStore       = new EventStore(bus, eventsSerializer, snapshotStore);
            var          commandHandler   = new InventoryCommandHandler(bus, eventStore);
            var          projection       = new ItemsProjection(bus);

            bus.Send(new CreateInventoryItem(id, name));

            //When
            var i = 0;

            for (; i < 11; i++)
            {
                var lastProjection = projection.GetById(id);
                bus.Send(new ModifyItemName(id, "new" + i, lastProjection.Version));
            }

            //Then
            var items = projection.GetAll().ToList();

            Assert.AreEqual(1, items.Count);
            var kvp = items[0];

            Assert.AreEqual(id, kvp.Id);
            Assert.AreEqual("new10", kvp.Name);
            Assert.AreEqual(11, kvp.Version);

            var snapshotData = snapshotStore.GetSnapshot(id);

            Assert.AreEqual(10, snapshotData.Version);
            var snapshot = JsonConvert.DeserializeObject <InventorySnapshot>(snapshotData.Data);

            Assert.AreEqual("new9", snapshot.Name);
        }
示例#10
0
 public EventStore(E05.Test.Infrastructure.Bus bus, EventsSerializer eventsSerializer)
 {
     Events            = new List <EventDescriptor>();
     _bus              = bus;
     _eventsSerializer = eventsSerializer;
 }
        public void BasicSerializationTest()
        {
            byte[] data = EventsSerializer.SerializeEvent(new PingEvent());

            PingEvent pingEvent = EventsSerializer.DeserializeEvent <PingEvent>(data);
        }