Esempio n. 1
0
        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()));
                }
            }
        }
Esempio n. 2
0
        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());
        }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
            }
        }