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); } }
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); }
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]); } }
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"); } }