Ejemplo n.º 1
0
        public async Task write()
        {
            var driver = new MemoryStorageDriver();
            var stream = new MigrationStream <JObject>(driver);

            await stream.WriteAsync(new[]
            {
                new KeyValuePair <uint, JObject>(11, new JObject {
                    { "a", new JValue(10) }
                }),
                new KeyValuePair <uint, JObject>(42, new JObject {
                    { "a", new JValue(20) }
                }),
            });

            Assert.AreEqual((uint)42U, (uint)await stream.LastWrittenAsync());

            var written = driver.Read(0L, 10240);

            Assert.AreEqual((int)2, (int)written.Events.Count);
            Assert.AreEqual((uint)11, (uint)written.Events[0].Sequence);
            Assert.AreEqual("{\"a\":10}", Encoding.UTF8.GetString(written.Events[0].Contents));
            Assert.AreEqual((uint)42, (uint)written.Events[1].Sequence);
            Assert.AreEqual("{\"a\":20}", Encoding.UTF8.GetString(written.Events[1].Contents));
        }
Ejemplo n.º 2
0
        public async Task nothing()
        {
            var driver = new MemoryStorageDriver();
            var stream = new MigrationStream <JObject>(driver);

            Assert.AreEqual((uint)0U, (uint)await stream.LastWrittenAsync());
        }
Ejemplo n.º 3
0
        public async Task discard_after_fetch()
        {
            var driver = new MemoryStorageDriver();

            var stream = new EventStream <IStreamEvent>(driver);
            await stream.WriteAsync(Enumerable.Range(0, 20)
                                    .Select(i => (IStreamEvent) new IntegerEvent(i)).ToArray());

            stream = new EventStream <IStreamEvent>(driver);

            while (await stream.FetchAsync())
            {
            }
            await stream.DiscardUpTo(11);

            Assert.Equal((uint)10, (uint)stream.Sequence);

            var next = 10;

            IStreamEvent e;

            while ((e = stream.TryGetNext()) != null)
            {
                Assert.Equal(next, ((IntegerEvent)e).Integer);
                ++next;
            }

            Assert.Equal(next, 20);
        }
Ejemplo n.º 4
0
        private async Task SetupImpl()
        {
            Console.WriteLine("> setup");
            var baseStringArray = Enumerable.Repeat(LargeEvt.BaseString, 1000).ToList();
            var driver          = new MemoryStorageDriver();
            var stream          = new EventStream <LargeEvt>(driver);

            int  seqNum = 0;
            long pos;

            while ((pos = driver.GetPosition()) <= 4 * 1024 * 1024)
            {
                seqNum++;
                var toWrite = new LargeEvt(seqNum, baseStringArray);
                await stream.WriteAsync(new[] { toWrite });
            }

            firstNotFitting = checked ((uint)seqNum);

            // add five additional events, just to be safe
            // and also to test DiscardUpTo(some events in the second 4Mb block)
            for (int i = 0; i < 5; ++i)
            {
                seqNum++;
                await stream.WriteAsync(new[] { new LargeEvt(seqNum, baseStringArray) });
            }

            lastEvent = checked ((uint)seqNum);
            Console.WriteLine("< setup");
            storeWithLargeEvents = driver;
        }
Ejemplo n.º 5
0
        public async Task with_restart()
        {
            var memory = new MemoryStorageDriver();
            var cache  = new Testing.InMemoryCache();
            var ew     = new EventStreamWrapper <TstEvent, CheckSequence>(
                memory,
                new [] { new CheckSequence.Projection() },
                cache
                );
            await ew.AppendEventsAsync(new[] { new TstEvent(1) });

            await ew.AppendEventsAsync(new[] { new TstEvent(2) });

            await ew.AppendEventsAsync(new[] { new TstEvent(3) });

            await ew.TrySaveAsync();

            await ew.AppendEventsAsync(new[] { new TstEvent(4) });

            await ew.AppendEventsAsync(new[] { new TstEvent(5) });

            Assert.Equal(5u, ew.Current.LastEvt);

            // try to read:
            var ew2 = new EventStreamWrapper <TstEvent, CheckSequence>(
                memory, new[] { new CheckSequence.Projection() },
                cache);

            await ew2.InitializeAsync();

            Assert.Equal(5u, ew2.Current.LastEvt);
        }
Ejemplo n.º 6
0
        public async Task write_changing_position()
        {
            var driver = new MemoryStorageDriver();

            var streamA = new EventStream <IStreamEvent>(driver);
            var streamB = new EventStream <IStreamEvent>(driver);

            var result = await streamA.WriteAsync(new IStreamEvent[] { new StreamEvent() });

            Assert.Equal(1u, result);

            while (await streamB.FetchAsync())
            {
            }

            result = await streamB.WriteAsync(new IStreamEvent[] { new StreamEvent() });

            Assert.Equal(2u, result);

            result = await streamA.WriteAsync(new IStreamEvent[] { new StreamEvent() });

            Assert.Null(result);

            while (await streamA.FetchAsync())
            {
            }

            result = await streamA.WriteAsync(new IStreamEvent[] { new StreamEvent() });

            Assert.Equal(3u, result);
        }
Ejemplo n.º 7
0
        public async Task discard()
        {
            var driver = new MemoryStorageDriver();

            var stream = new EventStream <IStreamEvent>(driver);
            await stream.WriteAsync(Enumerable.Range(0, 20)
                                    .Select(i => (IStreamEvent) new IntegerEvent(i)).ToArray());

            stream = new EventStream <IStreamEvent>(driver);

            await stream.DiscardUpTo(11);

            Func <bool> shouldContinue;
            var         next = 10;

            do
            {
                var task = stream.BackgroundFetchAsync();

                IStreamEvent e;
                while ((e = stream.TryGetNext()) != null)
                {
                    Assert.Equal(next, ((IntegerEvent)e).Integer);
                    ++next;
                }

                shouldContinue = await task;
            } while (shouldContinue());

            Assert.Equal(next, 20);
        }
Ejemplo n.º 8
0
        public async Task naive_read()
        {
            var driver = new MemoryStorageDriver();

            var stream = new EventStream <IStreamEvent>(driver);
            await stream.WriteAsync(Enumerable.Range(0, 20)
                                    .Select(i => (IStreamEvent) new IntegerEvent(i)).ToArray());

            stream = new EventStream <IStreamEvent>(driver);

            while (await stream.FetchAsync())
            {
            }
            var next = 0;

            IStreamEvent e;

            while ((e = stream.TryGetNext()) != null)
            {
                Assert.Equal(next, ((IntegerEvent)e).Integer);
                ++next;
            }

            Assert.Equal(next, 20);
        }
Ejemplo n.º 9
0
        public async Task write()
        {
            var driver = new MemoryStorageDriver();
            var stream = new EventStream <IStreamEvent>(driver);

            var result = await stream.WriteAsync(new IStreamEvent[] { new StreamEvent() });

            Assert.Equal(1u, result);
        }
Ejemplo n.º 10
0
        public async Task already_filled()
        {
            var driver = new MemoryStorageDriver();

            driver.Write(0L, new[] { new RawEvent(42U, new byte[8]) });

            var stream = new MigrationStream <JObject>(driver);

            Assert.AreEqual((uint)42U, (uint)await stream.LastWrittenAsync());
        }
Ejemplo n.º 11
0
        /// <summary> Returns a configuration for an in-memory storage driver with initial data. </summary>
        public static StorageConfiguration Initialize <TEvent>(params TEvent[] events) where TEvent : class
        {
            var msd = new MemoryStorageDriver();
            var ms  = new MigrationStream <TEvent>(msd);

            ms.WriteAsync(events.Select((e, i) => new KeyValuePair <uint, TEvent>((uint)(i + 1), e)))
            .Wait();

            return(new StorageConfiguration(msd));
        }
Ejemplo n.º 12
0
        public async Task write_wrong_position()
        {
            var driver = new MemoryStorageDriver();
            await driver.WriteAsync(0, new[] { new RawEvent(1U, new byte[8]) });

            var stream = new EventStream <IStreamEvent>(driver);

            var result = await stream.WriteAsync(new IStreamEvent[] { new StreamEvent() });

            Assert.Null(result);
        }
Ejemplo n.º 13
0
        public async Task write_multiple()
        {
            var driver = new MemoryStorageDriver();
            var stream = new EventStream <IStreamEvent>(driver);

            var result = await stream.WriteAsync(new IStreamEvent[] { new StreamEvent(), new StreamEvent() });

            Assert.AreEqual((object)1, result);

            result = await stream.WriteAsync(new IStreamEvent[] { new StreamEvent() });

            Assert.AreEqual((object)3, result);
        }
Ejemplo n.º 14
0
        public async Task discard_above_end()
        {
            var driver = new MemoryStorageDriver();

            var stream = new EventStream <IStreamEvent>(driver);
            await stream.WriteAsync(Enumerable.Range(0, 20)
                                    .Select(i => (IStreamEvent) new IntegerEvent(i)).ToArray());

            stream = new EventStream <IStreamEvent>(driver);
            while (await stream.FetchAsync())
            {
            }

            await stream.DiscardUpTo(30);

            Assert.Equal((uint)20, (uint)stream.Sequence);
        }
Ejemplo n.º 15
0
        public async Task write_restore_position()
        {
            var driver = new MemoryStorageDriver();

            var stream = new EventStream <IStreamEvent>(driver);
            await stream.WriteAsync(new IStreamEvent[] { new StreamEvent() });

            stream = new EventStream <IStreamEvent>(driver);

            var result = await stream.WriteAsync(new IStreamEvent[] { new StreamEvent() });

            Assert.Null(result);

            while (await stream.FetchAsync())
            {
            }

            result = await stream.WriteAsync(new IStreamEvent[] { new StreamEvent() });

            Assert.Equal(2u, result);
        }
Ejemplo n.º 16
0
        public async Task without_restart()
        {
            var memory = new MemoryStorageDriver();
            var ew     = new EventStreamWrapper <TstEvent, CheckSequence>(
                memory,
                new [] { new CheckSequence.Projection() }, null
                );
            await ew.AppendEventsAsync(new[] { new TstEvent(1) });

            await ew.AppendEventsAsync(new[] { new TstEvent(2) });

            await ew.AppendEventsAsync(new[] { new TstEvent(3) });

            Assert.Equal(3u, ew.Current.LastEvt);

            // try to read:
            var ew2 = new EventStreamWrapper <TstEvent, CheckSequence>(
                memory, new[] { new CheckSequence.Projection() }, null);

            await ew2.InitializeAsync();

            Assert.Equal(3u, ew2.Current.LastEvt);
        }