Ejemplo n.º 1
0
        public void Scenario1()
        {
            using (var ms = new MemoryStream())
            {
                var stream     = new WORMStream(ms);
                var serializer = new EventSerializer();
                var store      = new WormEventStore(stream, serializer);
                var framework  = new Framework <InventoryState>(store);

                var id1 = framework
                          .Execute(new CreateProduct("test1"))
                          .Select(ev => ev.EntityId)
                          .First();
                framework.Execute(new BuyProduct(id1, 10m, 20m));

                var products = framework
                               .State
                               .Products
                               .ToList();
                Assert.AreEqual(1, products.Count);
                Assert.AreEqual("test1", products[0].Name);
                var stocks = framework
                             .State
                             .Stock
                             .ToList();
                Assert.AreEqual(1, stocks.Count);
                Assert.AreEqual(products[0], stocks[0].Product);
                Assert.AreEqual(10m, stocks[0].Quantity);
                Assert.AreEqual(20m, stocks[0].Price);
            }
        }
Ejemplo n.º 2
0
        private static TimeSpan Benchmark(WORMStream stream, int count, Action <WORMStream> action)
        {
            var sw = new Stopwatch();

            sw.Start();

            for (var i = 0; i < count; i++)
            {
                action(stream);
            }
            stream.Flush();

            sw.Stop();
            return(sw.Elapsed);
        }
Ejemplo n.º 3
0
        public void ReadsBackTheDataThatWasWritten()
        {
            using (var ms = new MemoryStream())
            {
                var sut = new WORMStream(ms);

                sut.Append("some message");
                sut.Append("multiple\rlines\n");
                sut.Append(new byte[] { 1, 2, 3 });
                var results = sut.ReadAll().ToList();

                Assert.AreEqual("some message", Encoding.UTF8.GetString(results[0]));
                Assert.AreEqual("multiple\rlines\n", Encoding.UTF8.GetString(results[1]));
                CollectionAssert.AreEqual(new byte[] { 1, 2, 3 }, results[2]);
            }
        }
Ejemplo n.º 4
0
        private static void Run(Func <Stream> streamFactory, int count, bool autoFlush)
        {
            var buffer = new byte[100];

            using (var ms = streamFactory.Invoke())
            {
                var stream = new WORMStream(ms)
                {
                    AutoFlush = autoFlush
                };
                var timeSpan = Benchmark(stream, count, it => it.Append(buffer));
                var prefix   = autoFlush ? "With" : "Without";
                Console.WriteLine($"{prefix} auto-flush");
                WriteResult(timeSpan, "Writing");

                timeSpan = Benchmark(stream, 1, it => DoNothing(it.ReadAll()));
                WriteResult(timeSpan, "Reading");
            }
        }