Exemplo n.º 1
0
        public void DeserializesClassWithIListArray()
        {
            var  serializer = new EventSerializer();
            bool hasMetadata;
            var  obj = new ObjectWithIList2 {
                Items = new ObjectDbTest.Person[] { new ObjectDbTest.Person {
                                                        Name = "A", Age = 1
                                                    } }
            };
            var meta = serializer.Serialize(out hasMetadata, obj).ToAsyncSafe();

            Assert.Equal(99, meta.Length);
            serializer.ProcessMetadataLog(meta);
            var data = serializer.Serialize(out hasMetadata, obj);

            serializer = new EventSerializer();
            serializer.ProcessMetadataLog(meta);
            var data2 = serializer.Serialize(out hasMetadata, obj);

            var    deserializer = new EventDeserializer();
            object obj2;

            Assert.False(deserializer.Deserialize(out obj2, data));
            deserializer.ProcessMetadataLog(meta);
            Assert.True(deserializer.Deserialize(out obj2, data));
            Assert.Equal(obj, obj2);

            deserializer = new EventDeserializer();
            deserializer.ProcessMetadataLog(meta);
            Assert.True(deserializer.Deserialize(out obj2, data));
            Assert.Equal(obj, obj2);
        }
Exemplo n.º 2
0
        public void Create(EventDeserializer eventDsl, out Event @event)
        {
            @event = new Event()
            {
                Title              = eventDsl.Title,
                Description        = eventDsl.Description,
                SubscribeNumber    = eventDsl.SubscribeNumber,
                ValidationRequired = eventDsl.ValidationRequired,
                RestrictedEvent    = eventDsl.RestrictedEvent,
                Status             = eventDsl.Status,
                JuryPoint          = eventDsl.JuryPoint,
                Location           = eventDsl.Location,
                StartAt            = eventDsl.StartAt,
                CloseAt            = eventDsl.CloseAt,
                OpenAt             = eventDsl.OpenAt,
                EndAt              = eventDsl.EndAt,
                Images             = eventDsl.Images,
                Prices             = eventDsl.Prices
            };

            if (@event.ValidationRequired)
            {
                @event.ValidatedNumber = 0;
            }

            Context.Event.Add(@event);

            if (@event.RestrictedEvent)
            {
                AddAndRemoveEventRoles(eventDsl.RestrictedRolesList, @event);
            }
        }
Exemplo n.º 3
0
        public void SetUp()
        {
            _model = new Model();

            var eventDeserializer = new EventDeserializer(SimpleJson.DeserializeObject);
            var eventSerializer   = new EventSerializer(SimpleJson.SerializeObject);
            var eventMapping      = new EventMapping(new Dictionary <string, Type>
            {
                { typeof(SnapshotStub).AssemblyQualifiedName, typeof(SnapshotStub) },
                { typeof(EventStub).AssemblyQualifiedName, typeof(EventStub) },
            });

            var snapshotContainer = new SnapshotContainer
            {
                Info =
                {
                    Position = 4,
                    Type     = typeof(SnapshotStub).AssemblyQualifiedName
                },
                Data = eventSerializer.SerializeObject(new SnapshotStub(1))
            };

            _sut = new RepositoryScenarioBuilder(eventMapping, eventDeserializer)
                   .ScheduleAppendToStream(_model.KnownIdentifier, new EventStub(0))
                   .ScheduleAppendToStream(_model.KnownIdentifier, new EventStub(1))
                   .ScheduleAppendToStream(_model.KnownIdentifier, new EventStub(2))
                   .ScheduleAppendToStream(_model.KnownIdentifier, new EventStub(3))
                   .ScheduleAppendToStream(_model.KnownIdentifier, new EventStub(4))
                   .ScheduleAppendToStream($"{_model.KnownIdentifier}-snapshots", snapshotContainer)
                   .ScheduleAppendToStream(_model.KnownIdentifier, new EventStub(5))
                   .ScheduleAppendToStream(_model.KnownIdentifier, new EventStub(6))
                   .BuildForRepository <AggregateRootEntitySnapshotableStub>();
        }
Exemplo n.º 4
0
        public void CanMigrateListInDict()
        {
            var obj = PassThroughEventStorage(new EventDictListRoot
            {
                Items = new Dictionary <ulong, IList <Item> > {
                    { 1, new List <Item> {
                          new Item {
                              Field = "A"
                          }
                      } }
                }
            }, new FullNameTypeMapper());
            var  serializer = new EventSerializer();
            bool hasMetadata;
            var  meta = serializer.Serialize(out hasMetadata, obj).ToAsyncSafe();

            serializer.ProcessMetadataLog(meta);
            var data = serializer.Serialize(out hasMetadata, obj);

            var    deserializer = new EventDeserializer();
            object obj2;

            Assert.False(deserializer.Deserialize(out obj2, data));
            deserializer.ProcessMetadataLog(meta);
            Assert.True(deserializer.Deserialize(out obj2, data));
        }
Exemplo n.º 5
0
        public void CanMigrateListWithNewFields()
        {
            var parentMapper = new FullNameTypeMapper();
            var mapper       = new EventStoreTest.OverloadableTypeMapper(typeof(Item2), parentMapper.ToName(typeof(Item)),
                                                                         new EventStoreTest.OverloadableTypeMapper(typeof(EventRoot2), parentMapper.ToName(typeof(EventRoot)),
                                                                                                                   parentMapper
                                                                                                                   ));
            var obj = PassThroughEventStorage(new EventRoot
            {
                Items = new List <Item> {
                    new Item {
                        Field = "A"
                    }
                }
            }, mapper);
            var  serializer = new EventSerializer(mapper);
            bool hasMetadata;
            var  meta = serializer.Serialize(out hasMetadata, obj).ToAsyncSafe();

            serializer.ProcessMetadataLog(meta);
            var data = serializer.Serialize(out hasMetadata, obj);

            var    deserializer = new EventDeserializer(mapper);
            object obj2;

            Assert.False(deserializer.Deserialize(out obj2, data));
            deserializer.ProcessMetadataLog(meta);
            Assert.True(deserializer.Deserialize(out obj2, data));
        }
Exemplo n.º 6
0
        public void DeserializesClassWithIList()
        {
            var  serializer = new EventSerializer();
            bool hasMetadata;
            var  obj = new ObjectWithIList {
                Items = new List <int> {
                    1
                }
            };
            var meta = serializer.Serialize(out hasMetadata, obj).ToAsyncSafe();

            serializer.ProcessMetadataLog(meta);
            var data = serializer.Serialize(out hasMetadata, obj);

            var    deserializer = new EventDeserializer();
            object obj2;

            Assert.False(deserializer.Deserialize(out obj2, data));
            deserializer.ProcessMetadataLog(meta);
            Assert.True(deserializer.Deserialize(out obj2, data));
            Assert.Equal(obj, obj2);

            deserializer = new EventDeserializer();
            deserializer.ProcessMetadataLog(meta);
            Assert.True(deserializer.Deserialize(out obj2, data));
            Assert.Equal(obj, obj2);
        }
Exemplo n.º 7
0
        public void CreateDependencies()
        {
            var store        = new InMemoryStreamStore();
            var eventMapping = new EventMapping(new Dictionary <string, Type>
            {
                { "SomethingHappened", typeof(SomethingHappened) },
                { "SomethingElseHappened", typeof(SomethingElseHappened) },
            });
            var eventSerializer   = new EventSerializer(JsonConvert.SerializeObject);
            var eventDeserializer = new EventDeserializer(JsonConvert.DeserializeObject);

            _factRepository = new StreamStoreFactRepository(store, eventMapping, eventSerializer, eventDeserializer);

            _handlerFactory = (eventType, @events) =>
                              async(command) =>
            {
                long position = 0;
                foreach (var @event in events)
                {
                    position = (await store.AppendToStream(
                                    (command as DoSomething).Identifier,
                                    ExpectedVersion.Any,
                                    new NewStreamMessage(Guid.NewGuid(), eventType,
                                                         eventSerializer.SerializeObject(@event)),
                                    CancellationToken.None)
                                ).CurrentPosition;
                }

                return(position);
            };
            _handlerResolver = new Mocking <IHandlerResolver, HandlerResolverSetup>();
            //_handlerResolver.When().ResolvesHandler(_handlerFactory);
        }
Exemplo n.º 8
0
        public void ChangeDetected(List <OutboxItem> items)
        {
            foreach (var item in items)
            {
                var type = _typeResolver.GetType(item.EventType);
                if (type == null)
                {
                    _logger.LogError($"Type of '{item.EventType}' not found in event types");
                    continue;
                }

                var eventToPublish = EventDeserializer.Deserialize(type, item.EventBody);

                if (_filter.ShouldPublish(eventToPublish))
                {
                    eventToPublish = TransformEvent(eventToPublish, item);
                    _eventBus.Publish(eventToPublish);
                    _logger.LogInformation($"Event '{item.EventType}-{item.EventId}' Published on bus.");
                }
                else
                {
                    _logger.LogInformation($"Publishing Event '{item.EventType}-{item.EventId}' Skipped because of filter");
                }
            }
        }
Exemplo n.º 9
0
 public void SetUp()
 {
     _store             = new InMemoryStreamStore(() => DateTime.UtcNow);
     _unitOfWork        = new ConcurrentUnitOfWork();
     _factory           = AggregateRootEntityStub.Factory;
     _eventDeserializer = new EventDeserializer(SimpleJson.DeserializeObject);
     _eventMapping      = new EventMapping(new Dictionary <string, Type>());
 }
Exemplo n.º 10
0
        public void SetUp()
        {
            var eventDeserializer = new EventDeserializer(SimpleJson.DeserializeObject);
            var eventMapping      = new EventMapping(new Dictionary <string, Type>());

            _model = new Model();
            _sut   = new RepositoryScenarioBuilder(eventMapping, eventDeserializer).BuildForRepository();
        }
 public RepositoryScenarioBuilder(EventMapping eventMapping, EventDeserializer eventDeserializer)
 {
     _eventStore         = new InMemoryStreamStore(() => DateTime.UtcNow);
     _unitOfWork         = new ConcurrentUnitOfWork();
     _eventStoreSchedule = new List <Action <IStreamStore> >();
     _unitOfWorkSchedule = new List <Action <ConcurrentUnitOfWork> >();
     _eventMapping       = eventMapping;
     _eventDeserializer  = eventDeserializer;
 }
Exemplo n.º 12
0
 public Repository(
     Func <TAggregateRoot> factory,
     ConcurrentUnitOfWork unitOfWork,
     IStreamStore eventStore,
     EventMapping eventMapping,
     EventDeserializer eventDeserializer)
     : base(factory, unitOfWork, eventStore, eventMapping, eventDeserializer)
 {
 }
Exemplo n.º 13
0
        public void SetUp()
        {
            var eventDeserializer = new EventDeserializer(SimpleJson.DeserializeObject);
            var eventMapping      = new EventMapping(new Dictionary <string, Type>());

            _model = new Model();
            _root  = AggregateRootEntityStub.Factory();
            _sut   = new RepositoryScenarioBuilder(eventMapping, eventDeserializer).
                     ScheduleAttachToUnitOfWork(new Aggregate(_model.KnownIdentifier, 0, _root)).
                     BuildForRepository();
        }
Exemplo n.º 14
0
        public void SetUp()
        {
            var eventDeserializer = new EventDeserializer(SimpleJson.DeserializeObject);
            var eventMapping      = new EventMapping(new Dictionary <string, Type>());

            _model = new Model();
            _sut   = new RepositoryScenarioBuilder(eventMapping, eventDeserializer).
                     ScheduleAppendToStream(_model.KnownIdentifier, new EventStub(1)).
                     ScheduleDeleteStream(_model.KnownIdentifier).
                     BuildForRepository();
        }
 public StreamStoreFactRepository(
     IStreamStore streamStore,
     EventMapping eventMapping,
     EventSerializer eventSerializer,
     EventDeserializer eventDeserializer)
 {
     _streamStore       = streamStore ?? throw new ArgumentNullException(nameof(streamStore));
     _eventMapping      = eventMapping ?? throw new ArgumentNullException(nameof(eventMapping));
     _eventSerializer   = eventSerializer ?? throw new ArgumentNullException(nameof(eventSerializer));
     _eventDeserializer = eventDeserializer ?? throw new ArgumentNullException(nameof(eventDeserializer));
 }
Exemplo n.º 16
0
        /// <summary>
        /// Creates a new <see cref="BinlogReader"/>.
        /// </summary>
        /// <param name="eventDeserializer">EventDeserializer implementation for a specific provider</param>
        /// <param name="stream">Stream representing a binlog file</param>
        public BinlogReader(EventDeserializer eventDeserializer, Stream stream)
        {
            byte[] header = new byte[EventConstants.FirstEventPosition];
            stream.Read(header, 0, EventConstants.FirstEventPosition);

            if (!header.SequenceEqual(MagicNumber))
            {
                throw new InvalidOperationException("Invalid binary log file header");
            }

            _eventDeserializer = eventDeserializer;
            _pipeReader        = PipeReader.Create(stream);
        }
Exemplo n.º 17
0
        /// <summary>
        /// Creates a new <see cref="BinlogReader"/>.
        /// </summary>
        /// <param name="eventDeserializer">EventDeserializer implementation for a specific provider</param>
        /// <param name="stream">Stream representing a binlog file</param>
        /// <param name="cancellationToken">Cancellation token</param>
        public BinlogReader(EventDeserializer eventDeserializer, Stream stream, CancellationToken cancellationToken = default)
        {
            byte[] header = new byte[EventConstants.FirstEventPosition];
            stream.Read(header, 0, EventConstants.FirstEventPosition);

            if (!header.SequenceEqual(MagicNumber))
            {
                throw new InvalidOperationException("Invalid binary log file header");
            }

            _eventDeserializer = eventDeserializer;
            _pipeReader        = PipeReader.Create(stream);
            _ = Task.Run(async() => await ReceivePacketsAsync(_pipeReader, cancellationToken));
        }
Exemplo n.º 18
0
        public void SetUp()
        {
            _model = new Model();

            var eventDeserializer = new EventDeserializer(SimpleJson.DeserializeObject);
            var eventMapping      = new EventMapping(new Dictionary <string, Type>
            {
                { typeof(EventStub).AssemblyQualifiedName, typeof(EventStub) },
            });

            _sut = new RepositoryScenarioBuilder(eventMapping, eventDeserializer).
                   ScheduleAppendToStream(_model.KnownIdentifier, new EventStub(1)).
                   BuildForRepository();
        }
Exemplo n.º 19
0
        internal static async Task Start(bool mariadb)
        {
            using (Stream stream = File.OpenRead("binlog.000003"))
            {
                EventDeserializer deserializer = mariadb
                ? new MariaDbEventDeserializer()
                : new MySqlEventDeserializer();

                var reader = new BinlogReader(deserializer, stream);

                await foreach (var binlogEvent in reader.ReadEvents())
                {
                    await PrintEventAsync(binlogEvent);
                }
            }
        }
Exemplo n.º 20
0
        public void DeserializeSimpleClass()
        {
            var serializer = new EventSerializer();
            bool hasMetadata;
            var obj = new User { Name = "Boris", Age = 40 };
            var meta = serializer.Serialize(out hasMetadata, obj).ToAsyncSafe();
            serializer.ProcessMetadataLog(meta);
            var data = serializer.Serialize(out hasMetadata, obj);

            var deserializer = new EventDeserializer();
            object obj2;
            Assert.False(deserializer.Deserialize(out obj2, data));
            deserializer.ProcessMetadataLog(meta);
            Assert.True(deserializer.Deserialize(out obj2, data));
            Assert.Equal(obj, obj2);
        }
Exemplo n.º 21
0
        public void DeserializesClassWithEnum()
        {
            var serializer = new EventSerializer();
            var obj        = new ObjectWithEnum {
                State = StateEnum.Alive
            };
            var meta = serializer.Serialize(out _, obj).ToAsyncSafe();

            serializer.ProcessMetadataLog(meta);
            var data = serializer.Serialize(out _, obj);

            var deserializer = new EventDeserializer();

            Assert.False(deserializer.Deserialize(out var obj2, data));
            deserializer.ProcessMetadataLog(meta);
            Assert.True(deserializer.Deserialize(out obj2, data));
            Assert.Equal(obj, obj2);
        }
Exemplo n.º 22
0
        public void SimpleNestedObjects()
        {
            var serializer = new EventSerializer();
            var obj        = new EventWithUser
            {
                User = new User()
            };
            var meta = serializer.Serialize(out var hasMetadata, obj).ToAsyncSafe();

            serializer.ProcessMetadataLog(meta);
            var data = serializer.Serialize(out hasMetadata, obj);

            var deserializer = new EventDeserializer();

            Assert.False(deserializer.Deserialize(out var obj2, data));
            deserializer.ProcessMetadataLog(meta);
            Assert.True(deserializer.Deserialize(out obj2, data));
        }
Exemplo n.º 23
0
        public void SerializingSkipsNotStoredProperties()
        {
            var serializer = new EventSerializer();
            var obj        = new DtoWithNotStored {
                Name = "Boris", Skip = 1
            };
            var meta = serializer.Serialize(out var hasMetadata, obj).ToAsyncSafe();

            serializer.ProcessMetadataLog(meta);
            var data = serializer.Serialize(out hasMetadata, obj);

            var deserializer = new EventDeserializer();

            Assert.False(deserializer.Deserialize(out var obj2, data));
            deserializer.ProcessMetadataLog(meta);
            Assert.True(deserializer.Deserialize(out obj2, data));
            Assert.Equal(0, ((DtoWithNotStored)obj2).Skip);
        }
Exemplo n.º 24
0
        public void SerializingBoxedDoubleDoesNotCrash()
        {
            var serializer = new EventSerializer();
            var obj        = new DtoWithObject {
                Something = 1.2
            };
            var meta = serializer.Serialize(out var hasMetadata, obj).ToAsyncSafe();

            serializer.ProcessMetadataLog(meta);
            var data = serializer.Serialize(out hasMetadata, obj);

            var deserializer = new EventDeserializer();

            Assert.False(deserializer.Deserialize(out var obj2, data));
            deserializer.ProcessMetadataLog(meta);
            Assert.True(deserializer.Deserialize(out obj2, data));
            Assert.Equal(1.2, ((DtoWithObject)obj2).Something);
        }
        public PublicServiceControllerTests()
        {
            var dbContextOptions = CreateDbContext();

            _existingPublicServiceId = "DVR000000001";

            var publicServiceListItem = new PublicServiceListItem
            {
                PublicServiceId = _existingPublicServiceId,
                Name            = "Dienstverlening"
            };

            _backofficeContext = new BackofficeContext(dbContextOptions);
            _backofficeContext.PublicServiceList.Add(publicServiceListItem);
            _backofficeContext.SaveChanges();

            _eventMapping      = new EventMapping(EventMapping.DiscoverEventNamesInAssembly(typeof(DomainAssemblyMarker).Assembly));
            _eventDeserializer = new EventDeserializer(JsonConvert.DeserializeObject);
        }
Exemplo n.º 26
0
        public void DeserializesAsObjectClassWithList()
        {
            var serializer = new EventSerializer();
            var obj        = new ObjectWithList {
                Items = new List <int> {
                    1
                }
            };
            var meta = serializer.Serialize(out var hasMetadata, obj).ToAsyncSafe();

            serializer.ProcessMetadataLog(meta);
            var data = serializer.Serialize(out hasMetadata, obj);

            var deserializer = new EventDeserializer(new TypeSerializersTest.ToDynamicMapper());

            Assert.False(deserializer.Deserialize(out dynamic obj2, data));
            deserializer.ProcessMetadataLog(meta);
            Assert.True(deserializer.Deserialize(out obj2, data));
            Assert.Equal(1, obj2.Items[0]);
        }
Exemplo n.º 27
0
        public void SkipsIIndirect()
        {
            var serializer = new EventSerializer();
            var obj        = new EventWithIIndirect
            {
                Name = "A",
                Ind1 = new DBIndirect <User>(),
                Ind2 = new List <IIndirect <User> >()
            };
            var meta = serializer.Serialize(out var hasMetadata, obj).ToAsyncSafe();

            serializer.ProcessMetadataLog(meta);
            var data = serializer.Serialize(out hasMetadata, obj);

            var deserializer = new EventDeserializer();

            Assert.False(deserializer.Deserialize(out var obj2, data));
            deserializer.ProcessMetadataLog(meta);
            Assert.True(deserializer.Deserialize(out obj2, data));
        }
Exemplo n.º 28
0
        public void DeserializesAsObjectClassWithDictionaryOfSimpleTypes()
        {
            var serializer = new EventSerializer();
            var obj        = new ObjectWithDictionaryOfSimpleType {
                Items = new Dictionary <int, string>()
                {
                    { 1, "Ahoj" }
                }
            };
            var meta = serializer.Serialize(out var hasMetadata, obj).ToAsyncSafe();

            serializer.ProcessMetadataLog(meta);
            var data = serializer.Serialize(out hasMetadata, obj);

            var deserializer = new EventDeserializer(new TypeSerializersTest.ToDynamicMapper());

            Assert.False(deserializer.Deserialize(out dynamic obj2, data));
            deserializer.ProcessMetadataLog(meta);
            Assert.True(deserializer.Deserialize(out obj2, data));
            Assert.Equal("Ahoj", obj2.Items[1].ToString());
        }
Exemplo n.º 29
0
        public static IServiceCollection AddEasyEventSourcing <TAggregateRoot>(this IServiceCollection services,
                                                                               EventStoreOptions options = null) where TAggregateRoot : IAggregate
        {
            services = services ?? throw new ArgumentNullException(nameof(services));
            options  = options ?? EventStoreOptions.Create();

            var connection        = EventStoreConnectionFactory.Create(options.ConnectionString);
            var eventDeserializer = new EventDeserializer(typeof(TAggregateRoot).GetTypeInfo().Assembly);
            var projections       = new EventStoreProjectionsClient(options);

            services.AddSingleton(connection);
            services.AddSingleton(eventDeserializer);

            services.AddSingleton <IEventStoreProjections>(projections);
            services.AddSingleton <IEventStoreBus>(new EventStoreSubscription(connection, options, eventDeserializer, projections));

            services.AddTransient <IRepository, EventStoreRepository>();
            services.AddTransient <IEventStore, EventStoreRepository>();

            return(services);
        }
Exemplo n.º 30
0
        public void SupportPureArray()
        {
            var serializer = new EventSerializer();
            var obj        = new PureArray {
                A = new[] { "A", "B" }, B = new[] { 42, 7 }
            };
            var meta = serializer.Serialize(out var hasMetadata, obj).ToAsyncSafe();

            serializer.ProcessMetadataLog(meta);
            var data = serializer.Serialize(out hasMetadata, obj);

            var deserializer = new EventDeserializer();

            Assert.False(deserializer.Deserialize(out var obj2, data));
            deserializer.ProcessMetadataLog(meta);
            Assert.True(deserializer.Deserialize(out obj2, data));
            var ev = obj2 as PureArray;

            Assert.Equal(ev.A, new[] { "A", "B" });
            Assert.Equal(ev.B, new[] { 42, 7 });
        }