private static void InMemoryKeyValueStore_AllOperations_MultipleTransaction_Core(bool saveAndLoad) { var kvs = new InMemoryKeyValueStore(); void SaveAndLoad() { if (!saveAndLoad) { return; } using var ms = new MemoryStream(); kvs.Save(ms); ms.Position = 0; kvs = InMemoryKeyValueStore.Load(ms); } var subtable = kvs.GetTable("MyTable"); using (var tx = kvs.CreateTransaction()) { var table = subtable.Enter(tx); table.Add("A", new byte[] { 1 }); tx.CommitAsync().Wait(); } SaveAndLoad(); using (var tx = kvs.CreateTransaction()) { var table = subtable.Enter(tx); var one = table["A"]; CollectionAssert.AreEqual(new byte[] { 1 }, one); tx.CommitAsync().Wait(); } SaveAndLoad(); using (var tx = kvs.CreateTransaction()) { var table = subtable.Enter(tx); table.Update("A", new byte[] { 2 }); tx.CommitAsync().Wait(); } SaveAndLoad(); using (var tx = kvs.CreateTransaction()) { var table = subtable.Enter(tx); Assert.IsTrue(table.Contains("A")); tx.CommitAsync().Wait(); } SaveAndLoad(); using (var tx = kvs.CreateTransaction()) { var table = subtable.Enter(tx); var two = table["A"]; CollectionAssert.AreEqual(new byte[] { 2 }, two); tx.CommitAsync().Wait(); } SaveAndLoad(); using (var tx = kvs.CreateTransaction()) { var table = subtable.Enter(tx); var contents = table.ToList(); Assert.AreEqual(contents.Count, 1); Assert.AreEqual(contents[0].Key, "A"); CollectionAssert.AreEquivalent(contents[0].Value, new byte[] { 2 }); tx.CommitAsync().Wait(); } SaveAndLoad(); using (var tx = kvs.CreateTransaction()) { var table = subtable.Enter(tx); table.Remove("A"); tx.CommitAsync().Wait(); } SaveAndLoad(); using (var tx = kvs.CreateTransaction()) { var table = subtable.Enter(tx); Assert.IsFalse(table.Contains("A")); tx.CommitAsync().Wait(); } SaveAndLoad(); using (var tx = kvs.CreateTransaction()) { var table = subtable.Enter(tx); Assert.AreEqual(table.Count(), 0); } }
public void DeserializeStore(byte[] bytes) { using var stream = new MemoryStream(bytes); _kvs = InMemoryKeyValueStore.Load(stream); }