public void AttemptToReadWithZeroSizedBufferFails() { var events = new[] { Some.Event(), Some.Event() }; using (var store = new TempStore()) { using (var writer = store.Store.BeginWrite()) { foreach (var(key, payload) in events) { writer.Set(key, payload); } } using (var reader = store.Store.BeginRead()) { var readInto = new byte[0]; Assert.Throws <Exception>(() => reader.TryReadNext(readInto.AsSpan())); } } }
public void ClosedStoreCannotBeUsedToBeginOperations() { var tempStore = new TempStore(); using var store = new DataStore(MemoryPool <byte> .Shared, tempStore.Store); tempStore.Dispose(); Assert.Throws <ObjectDisposedException>(() => store.BeginRead()); Assert.Throws <ObjectDisposedException>(() => store.BeginWrite()); Assert.Throws <ObjectDisposedException>(() => store.BeginDelete()); }
public void WrittenDataCanBeRead() { var events = new[] { Some.Event(), Some.Event() }; using (var store = new TempStore()) { using (var writer = store.Store.BeginWrite()) { foreach (var(key, payload) in events) { writer.Set(key, payload); } } var count = 0; using (var reader = store.Store.BeginRead()) { // We just about guarantee the first read will be too small var readInto = new byte[1]; ReadResult read; while (!(read = reader.TryReadNext(readInto.AsSpan())).IsDone) { if (read.IsBufferTooSmall(out var required)) { readInto = new byte[required]; continue; } read.GetData(out var key, out var payload); count += 1; var(_, foundPayload) = events.Single(evt => key == evt.Item1); Assert.Equal(payload.Span.ToArray(), foundPayload.ToArray()); } } Assert.Equal(events.Length, count); } }
public void DeletedDataCannotBeRead() { var deletedKey = Some.KeyWith(17); var events = new[] { new { key = Some.KeyWith(3), value = new { title = "Data 1" } }, new { key = deletedKey, value = new { title = "Data 2" } } }; using var tempStore = new TempStore(); using var store = new DataStore(MemoryPool <byte> .Shared, tempStore.Store); using (var writer = store.BeginWrite()) { foreach (var data in events) { var json = JsonConvert.SerializeObject(data.value); var utf8Json = Encoding.UTF8.GetBytes(json); writer.Set(new Data(data.key, new OwnedArray(utf8Json))); } } using (var deleter = store.BeginDelete()) { deleter.Remove(deletedKey); } using var reader = store.BeginRead(); var readData = reader.Data().ToList(); Assert.Single(readData); Assert.DoesNotContain(readData, data => data.Key == deletedKey); }
public void WrittenDataCanBeRead() { var events = new[] { new { key = Some.KeyWith(3), value = new { title = "Data 1" } }, new { key = Some.KeyWith(17), value = new { title = "Data 2" } } }; using var tempStore = new TempStore(); using var store = new DataStore(MemoryPool <byte> .Shared, tempStore.Store); using (var writer = store.BeginWrite()) { foreach (var data in events) { var json = JsonConvert.SerializeObject(data.value); var utf8Json = Encoding.UTF8.GetBytes(json); writer.Set(new Data(data.key, new OwnedArray(utf8Json))); } } using var reader = store.BeginRead(); var readData = reader.Data().ToList(); Assert.Equal(events.Length, readData.Count); foreach (var read in readData) { var expected = events.Single(evt => read.Key == evt.key); Assert.Equal(read.Value.GetProperty("title").GetString(), expected.value.title); } }