public void Retrieving_all_events_should_return_the_same_as_added() {
            var id=Guid.NewGuid();
            var sequenceCounter=0;

            var stream = new UncommittedEventStream(Guid.NewGuid());
            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerCreatedEvent("Foo", 35),
                                     new Version(1, 0)));
            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow,
                                     new CustomerNameChanged("Name" + sequenceCounter), new Version(1, 0)));
            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow,
                                     new CustomerNameChanged("Name" + sequenceCounter), new Version(1, 0)));
            
            _store.Store(stream);

            var result=_store.ReadFrom(id, long.MinValue, long.MaxValue);
            result.Count().Should().Be(stream.Count());
            result.First().EventIdentifier.Should().Be(stream.First().EventIdentifier);
            //TODO:

            var streamList = stream.ToList();
            var resultList = result.ToList();

            for (int i = 0; i < resultList.Count; i++)
            {
                Assert.IsTrue(AreEqual(streamList[i], resultList[i]));
            }
        }
Exemplo n.º 2
0
        public void Retrieving_all_events_should_return_the_same_as_added()
        {
            var id = Guid.NewGuid();
            var sequenceCounter = 0;

            var stream = new UncommittedEventStream(Guid.NewGuid());

            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerCreatedEvent("Foo", 35),
                                     new Version(1, 0)));
            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow,
                                     new CustomerNameChanged("Name" + sequenceCounter), new Version(1, 0)));
            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow,
                                     new CustomerNameChanged("Name" + sequenceCounter), new Version(1, 0)));

            _store.Store(stream);

            var result = _store.ReadFrom(id, long.MinValue, long.MaxValue);

            result.Count().Should().Be(stream.Count());
            result.First().EventIdentifier.Should().Be(stream.First().EventIdentifier);
            //TODO:

            var streamList = stream.ToList();
            var resultList = result.ToList();

            for (int i = 0; i < resultList.Count; i++)
            {
                Assert.IsTrue(AreEqual(streamList[i], resultList[i]));
            }
        }
Exemplo n.º 3
0
        public void Store(UncommittedEventStream eventStream)
        {
            if (!eventStream.HasSingleSource)
            {
                throw new NotSupportedException("NoDBEventStore supports only one event source per Unit of Work.");
            }
            var      sourceId = eventStream.SourceId;
            FileInfo file     = sourceId.GetEventStoreFileInfo(_path);

            if (!file.Exists && !file.Directory.Exists)
            {
                file.Directory.Create();
            }
            try
            {
                sourceId.GetWriteLock();
                if (file.Exists)
                {
                    if (GetVersion(sourceId) >= eventStream.Sources.Single().InitialVersion)
                    {
                        throw new ConcurrencyException(sourceId, eventStream.Sources.Single().CurrentVersion);
                    }
                }
                using (var writer = file.OpenWrite())
                {
                    writer.Seek(0, SeekOrigin.End);
                    var indicies = new long[eventStream.Count()];
                    var i        = 0;
                    var index    = writer.Position;
                    foreach (var evnt in eventStream)
                    {
                        var bytes = GetBytes(evnt);
                        writer.Write(BitConverter.GetBytes(bytes.Length), 0, 4);
                        writer.Write(bytes, 0, bytes.Length);
                        indicies[i++] = index;
                        index        += bytes.Length;
                    }
                    UpdateEventSourceIndexFile(sourceId, indicies);
                    writer.Flush();
                }
            }
            finally
            {
                sourceId.ReleaseWriteLock();
            }
        }
Exemplo n.º 4
0
 public void Store(UncommittedEventStream eventStream)
 {
     if (!eventStream.HasSingleSource)
     {
         throw new NotSupportedException("NoDBEventStore supports only one event source per Unit of Work.");
     }
     var sourceId = eventStream.SourceId;
     FileInfo file = sourceId.GetEventStoreFileInfo(_path);
     if (!file.Exists && !file.Directory.Exists)
         file.Directory.Create();
     try
     {
         sourceId.GetWriteLock();
         if (file.Exists)
         {
             if (GetVersion(sourceId) >= eventStream.Sources.Single().InitialVersion)
             {
                 throw new ConcurrencyException(sourceId, eventStream.Sources.Single().CurrentVersion);
             }
         }
         using (var writer = file.OpenWrite())
         {
             writer.Seek(0, SeekOrigin.End);
             var indicies = new long[eventStream.Count()];
             var i = 0;
             var index = writer.Position;
             foreach (var evnt in eventStream)
             {
                 var bytes = GetBytes(evnt);
                 writer.Write(BitConverter.GetBytes(bytes.Length), 0, 4);
                 writer.Write(bytes, 0, bytes.Length);
                 indicies[i++] = index;
                 index += bytes.Length;
             }
             UpdateEventSourceIndexFile(sourceId, indicies);
             writer.Flush();
         }
     }
     finally
     {
         sourceId.ReleaseWriteLock();
     }
 }
Exemplo n.º 5
0
        public void Retrieving_all_events_should_return_the_same_as_added()
        {
            var targetStore = new RavenDBEventStore(_documentStore);
            var id = Guid.NewGuid();

            int sequenceCounter = 0;

            var events = new UncommittedEventStream(Guid.NewGuid());

            events.Append(new UncommittedEvent(Guid.NewGuid(), id, typeof(object), sequenceCounter++, 0, DateTime.UtcNow, new CustomerCreatedEvent("Foo",
                                                                                                                                         35),
                                               new Version(1, 0)));
            events.Append(new UncommittedEvent(Guid.NewGuid(), id, typeof(object), sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
                                                                                                                    "Name" + sequenceCounter),
                                               new Version(1, 0)));
            events.Append(new UncommittedEvent(Guid.NewGuid(), id, typeof(object), sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
                                                                                                                    "Name" + sequenceCounter),
                                               new Version(1, 0)));
            events.Append(new UncommittedEvent(Guid.NewGuid(), id, typeof(object), sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
                                                                                                                    "Name" + sequenceCounter),
                                               new Version(1, 0)));

            targetStore.Store(events);

            var result = targetStore.ReadFrom(id, long.MinValue, long.MaxValue);
            result.Count().Should().Be(events.Count());
            result.First().EventIdentifier.Should().Be(events.First().EventIdentifier);

            var streamList = events.ToList();
            var resultList = result.ToList();

            for (int i = 0; i < resultList.Count; i++)
            {
                Assert.IsTrue(AreEqual(streamList[i], resultList[i]));
            }
        }
Exemplo n.º 6
0
        /// <summary>Persists the <paramref name="eventStream"/> in the store as a single and atomic commit.</summary>
        /// <exception cref="ConcurrencyException">Occurs when there is already a newer version of the event provider stored in the event store.</exception>
        /// <param name="eventStream">The <see cref="UncommittedEventStream"/> to commit.</param>
        public void Store(UncommittedEventStream eventStream)
        {
            if (!eventStream.Any())
            {
                return;
            }

            using (var connection = new SqlConnection(_connectionString))
            {
                connection.Open();

                try
                {
                    using (var transaction = connection.BeginTransaction())
                    {
                        try
                        {
                            if (eventStream.HasSingleSource)
                            {
                                var firstEvent = eventStream.First();
                                var newVersion = firstEvent.InitialVersionOfEventSource + eventStream.Count();
                                StoreEventsFromSource(eventStream.SourceId, newVersion, eventStream, transaction);
                            }
                            else
                            {
                                StoreMultipleSources(eventStream, transaction);
                            }

                            transaction.Commit();
                        }
                        catch
                        {
                            transaction.Rollback();
                            throw;
                        }
                    }
                }
                finally
                {
                    connection.Close();
                }
            }
        }
        /// <summary>Persists the <paramref name="eventStream"/> in the store as a single and atomic commit.</summary>
        /// <exception cref="ConcurrencyException">Occurs when there is already a newer version of the event provider stored in the event store.</exception>
        /// <param name="eventStream">The <see cref="UncommittedEventStream"/> to commit.</param>
        public void Store(UncommittedEventStream eventStream)
        {
            if (!eventStream.Any())
                return;

            using (var connection = new SqlConnection(_connectionString))
            {
                connection.Open();

                try
                {
                    using (var transaction = connection.BeginTransaction())
                    {
                        try
                        {
                            if (eventStream.HasSingleSource)
                            {
                                var firstEvent = eventStream.First();
                                var newVersion = firstEvent.InitialVersionOfEventSource + eventStream.Count();
                                StoreEventsFromSource(eventStream.SourceId, newVersion, eventStream, transaction);
                            }
                            else
                            {
                                StoreMultipleSources(eventStream, transaction);
                            }

                            transaction.Commit();
                        }
                        catch
                        {
                            transaction.Rollback();
                            throw;
                        }
                    }
                }
                finally
                {
                    connection.Close();
                }
            }
        }