Exemplo n.º 1
0
        public async Task TestGetAllPagination()
        {
            using var kvl = KVLite.CreateInMemory();
            var entryCount = 1024;

            var entries = Enumerable
                          .Range(0, entryCount)
                          .Select(x => createKVP(x, "value"));

            await kvl.Add(entries);

            var keys = entries
                       .Select(x => Encoding.UTF8.GetString(x.Key))
                       .ToHashSet();

            await foreach (var k in kvl.Get().Batch(10).Take(2))
            {
                await foreach (var res in k)
                {
                    var key = Encoding.UTF8.GetString(res.Key);
                    keys.Remove(key);
                    Assert.AreEqual("value", Encoding.UTF8.GetString(res.Value));
                }
            }

            Assert.AreEqual(entryCount - 20, keys.Count);
        }
Exemplo n.º 2
0
        public async Task TestUpdate()
        {
            var kvl      = KVLite.CreateInMemory();
            var value    = Encoding.UTF8.GetBytes("value");
            var newValue = Encoding.UTF8.GetBytes("newValue");

            for (var i = 0; i < 1000; i++)
            {
                var key = Encoding.UTF8.GetBytes($"key{i}");
                await kvl.Add(key, value);
            }

            for (var i = 0; i < 1000; i++)
            {
                var key = Encoding.UTF8.GetBytes($"key{i}");
                await kvl.Update(key, newValue);
            }

            for (var i = 0; i < 1000; i++)
            {
                var key = Encoding.UTF8.GetBytes($"key{i}");
                var res = await kvl.Get(key);

                Assert.IsTrue(res.IsSome);
                Assert.AreEqual("newValue", Encoding.UTF8.GetString(res.Head()));
            }
        }
Exemplo n.º 3
0
        public async Task TestGetAll()
        {
            var kvl        = KVLite.CreateInMemory();
            var entryCount = 1024;

            var entries = Enumerable
                          .Range(0, entryCount)
                          .Select(x => createKVP(x, "value"));

            await kvl.Add(entries);

            var keys = entries
                       .Select(x => Encoding.UTF8.GetString(x.Key))
                       .ToHashSet();

            var counter = 0;

            await foreach (var res in kvl.Get())
            {
                Interlocked.Increment(ref counter);
                var key = Encoding.UTF8.GetString(res.Key);
                keys.Remove(key);
                Assert.AreEqual("value", Encoding.UTF8.GetString(res.Value));
            }

            Assert.AreEqual(0, keys.Count);
            Assert.AreEqual(counter, entryCount);
        }
Exemplo n.º 4
0
        public async Task TestDelete()
        {
            var kvl   = KVLite.CreateJsonInMemory();
            var value = JsonSerializer.Serialize(new { hello = "value" });

            for (var i = 0; i < 1000; i++)
            {
                var key = Encoding.UTF8.GetBytes($"key{i}");
                await kvl.Add(key, value);
            }

            for (var i = 0; i < 1000; i++)
            {
                var key = Encoding.UTF8.GetBytes($"key{i}");
                await kvl.Delete(key);
            }

            for (var i = 0; i < 1000; i++)
            {
                var key = Encoding.UTF8.GetBytes($"key{i}");
                var res = await kvl.Get(key);

                Assert.IsTrue(res.IsNone);
            }
        }
Exemplo n.º 5
0
        public async Task TestGetRR()
        {
            var kvl = KVLite.CreateInMemory();

            var entries = Enumerable
                          .Range(0, 1000)
                          .Select(x => createKVP(x, "value"));

            await kvl.Add(entries);

            var keys = entries
                       .Select(x => Encoding.UTF8.GetString(x.Key))
                       .ToHashSet();
            var counter = 0;

            await foreach (var res in kvl.GetRR(true))
            {
                counter++;
                var key = Encoding.UTF8.GetString(res.Key);
                keys.Remove(key);

                Assert.AreEqual("value", Encoding.UTF8.GetString(res.Value));
            }

            Assert.AreEqual(1000, counter);
            Assert.AreEqual(0, keys.Count);
        }
Exemplo n.º 6
0
        public async Task TestUpdate()
        {
            var kvl      = KVLite.CreateJsonInMemory();
            var value    = JsonSerializer.Serialize(new { hello = "value" });
            var newValue = JsonSerializer.Serialize(new { hello = "newValue" });

            var entries = Enumerable
                          .Range(0, 1000)
                          .Select(x => createKVP(x, value));

            await kvl.Add(entries);

            var newEntries = Enumerable
                             .Range(0, 1000)
                             .Select(x => createKVP(x, newValue));

            await kvl.Update(newEntries);

            var keys = entries
                       .Select(x => Encoding.UTF8.GetString(x.Key))
                       .ToHashSet();

            await foreach (var res in kvl.Get())
            {
                var key = Encoding.UTF8.GetString(res.Key);
                keys.Remove(key);
                Assert.AreEqual(newValue, res.Value);
            }

            Assert.AreEqual(0, keys.Count);
        }
Exemplo n.º 7
0
        public async Task TestUpdate()
        {
            var kvl      = KVLite.CreateJsonInMemory();
            var value    = JsonSerializer.Serialize(new { hello = "value" });
            var newValue = JsonSerializer.Serialize(new { hello = "newValue" });

            for (var i = 0; i < 1000; i++)
            {
                var key = Encoding.UTF8.GetBytes($"key{i}");
                await kvl.Add(key, value);
            }

            for (var i = 0; i < 1000; i++)
            {
                var key = Encoding.UTF8.GetBytes($"key{i}");
                await kvl.Update(key, newValue);
            }

            for (var i = 0; i < 1000; i++)
            {
                var key = Encoding.UTF8.GetBytes($"key{i}");
                var res = await kvl.Get(key);

                Assert.AreEqual(newValue, res);
            }
        }
Exemplo n.º 8
0
        public async Task TestDeleteNonExisting()
        {
            var kvl   = KVLite.CreateJsonInMemory();
            var key   = Encoding.UTF8.GetBytes("key");
            var value = JsonSerializer.Serialize(new { hello = "value" });

            await kvl.Delete(key);
        }
Exemplo n.º 9
0
        public async Task TestDeleteNonExisting()
        {
            var kvl   = KVLite.CreateInMemory();
            var key   = Encoding.UTF8.GetBytes("key");
            var value = Encoding.UTF8.GetBytes("value");

            await kvl.Delete(key);
        }
Exemplo n.º 10
0
        public async Task TestGetNonExisting()
        {
            var kvl = KVLite.CreateJsonInMemory();
            var key = Encoding.UTF8.GetBytes("key");

            var res = await kvl.Get(key);

            Assert.IsTrue(res.IsNone);
        }
Exemplo n.º 11
0
        public async Task TestUpdateNonExisting()
        {
            var kvl   = KVLite.CreateJsonInMemory();
            var key   = Encoding.UTF8.GetBytes("key");
            var value = JsonSerializer.Serialize(new { hello = "value" });

            await kvl.Update(key, value);

            var res = await kvl.Get(key);

            Assert.IsTrue(res.IsNone);
        }
Exemplo n.º 12
0
        public async Task TestUpdateNonExisting()
        {
            var kvl      = KVLite.CreateInMemory();
            var key      = Encoding.UTF8.GetBytes("key");
            var value    = Encoding.UTF8.GetBytes("value");
            var newValue = Encoding.UTF8.GetBytes("newValue");

            await kvl.Update(key, newValue);

            var res = await kvl.Get(key);

            Assert.IsTrue(res.IsNone);
        }
Exemplo n.º 13
0
        public async Task TestAdd()
        {
            var kvl = KVLite.CreateJsonInMemory();
            var key = Encoding.UTF8.GetBytes("key");

            var value = JsonSerializer.Serialize(new { hello = "value" });

            await kvl.Add(key, value);

            var res = await kvl.Get(key);

            Assert.AreEqual(value, res);
        }
Exemplo n.º 14
0
        public async Task TestAdd()
        {
            var kvl = KVLite.CreateJsonInMemory();

            var run = Enumerable.Range(0, 10)
                      .Select(x => lifecycle(kvl, x));

            await Task.WhenAll(run);

            var count = await kvl.Get().CountAsync();

            Assert.AreEqual(0, count);
        }
Exemplo n.º 15
0
        public async Task TestAdd()
        {
            var kvl   = KVLite.CreateInMemory();
            var key   = Encoding.UTF8.GetBytes("key");
            var value = Encoding.UTF8.GetBytes("value");

            await kvl.Add(key, value);

            var res = await kvl.Get(key);

            Assert.IsTrue(res.IsSome);
            Assert.AreEqual("value", Encoding.UTF8.GetString(res.Head()));
        }
Exemplo n.º 16
0
        public async Task TestDelete()
        {
            var kvl   = KVLite.CreateInMemory();
            var key   = Encoding.UTF8.GetBytes("key");
            var value = Encoding.UTF8.GetBytes("value");

            await kvl.Add(key, value);

            await kvl.Delete(key);

            var res = await kvl.Get(key);

            Assert.IsTrue(res.IsNone);
        }
Exemplo n.º 17
0
        public async Task TestAddSameKeyTwiceWithDifferentValue()
        {
            var kvl    = KVLite.CreateJsonInMemory();
            var key    = Encoding.UTF8.GetBytes("key");
            var value1 = JsonSerializer.Serialize(new { hello = "value1" });
            var value2 = JsonSerializer.Serialize(new { hello = "value2" });

            await kvl.Add(key, value1);

            await kvl.Add(key, value2);

            var res = await kvl.Get(key);

            Assert.AreEqual(value1, res);
        }
Exemplo n.º 18
0
        public async Task TestCountWithComparison(Compare comp, int expected)
        {
            var kvl = KVLite.CreateJsonInMemory();

            for (var i = 0; i < 1000; i++)
            {
                var key   = Encoding.UTF8.GetBytes($"key{i}");
                var value = JsonSerializer.Serialize(new { hello = i });
                await kvl.Add(key, value);
            }

            var count = await kvl.Count("$.hello", comp, 500);

            Assert.AreEqual(expected, count);
        }
Exemplo n.º 19
0
        public async Task TestCount()
        {
            var kvl   = KVLite.CreateJsonInMemory();
            var value = JsonSerializer.Serialize(new { hello = "value" });

            for (var i = 0; i < 1000; i++)
            {
                var key = Encoding.UTF8.GetBytes($"key{i}");
                await kvl.Add(key, value);
            }

            var count = await kvl.Count();

            Assert.AreEqual(1000, count);
        }
Exemplo n.º 20
0
        public async Task TestInsertIntoArray()
        {
            var kvl   = KVLite.CreateJsonInMemory();
            var key   = Encoding.UTF8.GetBytes("key");
            var value = JsonSerializer.Serialize(new { hello = new [] { 1, 2, 3 } });

            await kvl.Add(key, value);

            await kvl.Insert(key, "$.hello[#]", 4);

            var res = await kvl.Get(key);

            var expected = JsonSerializer.Serialize(new { hello = new [] { 1, 2, 3, 4 } });

            Assert.AreEqual(expected, res);
        }
Exemplo n.º 21
0
        public async Task TestAddSameKeyTwiceWithDifferentValue()
        {
            var kvl    = KVLite.CreateInMemory();
            var key    = Encoding.UTF8.GetBytes("key");
            var value1 = Encoding.UTF8.GetBytes("value1");
            var value2 = Encoding.UTF8.GetBytes("value2");

            await kvl.Add(key, value1);

            await kvl.Add(key, value2);

            var res = await kvl.Get(key);

            Assert.IsTrue(res.IsSome);
            Assert.AreEqual("value1", Encoding.UTF8.GetString(res.Head()));
        }
Exemplo n.º 22
0
        public async Task TestRemove()
        {
            var kvl   = KVLite.CreateJsonInMemory();
            var key   = Encoding.UTF8.GetBytes("key");
            var value = JsonSerializer.Serialize(new { hello = "value", world = "value" });

            await kvl.Add(key, value);

            await kvl.Remove(key, "$.world");

            var res = await kvl.Get(key);

            var expected = JsonSerializer.Serialize(new { hello = "value" });

            Assert.AreEqual(expected, res);
        }
Exemplo n.º 23
0
        public async Task TestSetDoesOverwrite()
        {
            var kvl      = KVLite.CreateJsonInMemory();
            var key      = Encoding.UTF8.GetBytes("key");
            var value    = JsonSerializer.Serialize(new { hello = "value" });
            var newValue = JsonSerializer.Serialize("newValue");

            await kvl.Add(key, value);

            await kvl.Set(key, "$.hello", newValue);

            var res = await kvl.Get(key);

            var expected = JsonSerializer.Serialize(new { hello = "newValue" });

            Assert.AreEqual(expected, res);
        }
Exemplo n.º 24
0
        public async Task TestMultiThreadedTransactionOnSameKeyOneThrows()
        {
            var kvl         = KVLite.CreateJsonInMemory();
            var key         = Encoding.UTF8.GetBytes("key");
            var value       = JsonSerializer.Serialize(new { hello = "value" });
            var arrayValues = Enumerable.Range(0, 100);

            await kvl.Add(key, value);

            var tasks = arrayValues
                        .Select(trxFunc);

            var t = await Assert.ThrowsExceptionAsync <Exception>(() => Task.WhenAll(tasks));

            var res = await kvl.Get(key);

            var element = JsonDocument.Parse(res.Head()).RootElement;
            var prop    = element
                          .EnumerateObject()
                          .Find(x => x.Name == "world").Head();
            var values = arrayValues.ToHashSet();

            foreach (var i in prop.Value.EnumerateArray())
            {
                values.Remove(i.GetInt32());
            }

            Assert.AreEqual(1, values.Count);

            async Task trxFunc(int i)
            {
                if (i == 50)
                {
                    throw new Exception("Boom");
                }
                using var trx = await kvl.BeginTransactionAsync(key);

                await kvl.Insert(key, "$.world", "[]");

                await kvl.Insert(key, "$.world[#]", i);

                await trx.CommitAsync();
            }
        }
Exemplo n.º 25
0
        public async Task TestRollbackTransaction()
        {
            var kvl    = KVLite.CreateJsonInMemory();
            var key    = Encoding.UTF8.GetBytes("key");
            var value  = JsonSerializer.Serialize(new { hello = "value" });
            var value2 = JsonSerializer.Serialize("value");

            await kvl.Add(key, value);

            using var trx = await kvl.BeginTransactionAsync(key);

            await kvl.Insert(key, "$.world", value2);

            await trx.RollbackAsync();

            var res = await kvl.Get(key);

            Assert.AreEqual(value, res);
        }
Exemplo n.º 26
0
        public async Task TestAdd()
        {
            var kvl = KVLite.CreateJsonInMemory();

            Parallel.ForEach(Enumerable.Range(0, 100), async x => {
                for (var i = 0; i < 1000; i++)
                {
                    var key   = Encoding.UTF8.GetBytes($"key-{x}-{i}");
                    var value = JsonSerializer.Serialize(new { hello = "value" });
                    await kvl.Add(key, value);
                }

                for (var i = 0; i < 1000; i++)
                {
                    var key = Encoding.UTF8.GetBytes($"key-{x}-{i}");
                    await kvl.Insert(key, "$.world", "value");
                }

                for (var i = 0; i < 1000; i++)
                {
                    var key = Encoding.UTF8.GetBytes($"key-{x}-{i}");
                    await kvl.Insert(key, "$.world", "value");
                    var res = await kvl.Get(key);

                    var expected = JsonSerializer.Serialize(new { hello = "value", world = "value" });
                    Assert.AreEqual(expected, res);
                }

                for (var i = 0; i < 1000; i++)
                {
                    var key = Encoding.UTF8.GetBytes($"key-{x}-{i}");
                    await kvl.Delete(key);
                    var res = await kvl.Get(key);
                    Assert.IsTrue(res.IsNone);
                }
            });

            var count = await kvl.Get().CountAsync();

            Assert.AreEqual(0, count);
        }
Exemplo n.º 27
0
        public async Task TestDelete()
        {
            var kvl   = KVLite.CreateJsonInMemory();
            var value = JsonSerializer.Serialize(new { hello = "value" });

            var entries = Enumerable
                          .Range(0, 1000)
                          .Select(x => createKVP(x, value));

            await kvl.Add(entries);

            var keys = entries.Select(x => x.Key);
            await kvl.Delete(keys);

            foreach (var key in keys)
            {
                var res = await kvl.Get(key);

                Assert.IsTrue(res.IsNone);
            }
        }
Exemplo n.º 28
0
        public async Task TestDisposeRollsBack()
        {
            var kvl   = KVLite.CreateJsonInMemory();
            var key   = Encoding.UTF8.GetBytes("key");
            var value = JsonSerializer.Serialize(new { hello = "value" });

            await kvl.Add(key, value);

            using (var trx = await kvl.BeginTransactionAsync(key))
            {
                await kvl.Insert(key, "$.world", "[0]");

                await kvl.Insert(key, "$.world[#]", 1);

                await kvl.Insert(key, "$.world[#]", 2);
            }

            var res = await kvl.Get(key);

            Assert.AreEqual(value, res);
        }
Exemplo n.º 29
0
        public async Task TestMulitpleInsertsPerTransaction()
        {
            var kvl   = KVLite.CreateJsonInMemory();
            var key   = Encoding.UTF8.GetBytes("key");
            var value = JsonSerializer.Serialize(new { hello = "value" });

            using var trx = await kvl.BeginTransactionAsync(key);

            await kvl.Add(key, value);

            await kvl.Set(key, "$.world", "[0]");

            await kvl.Insert(key, "$.world[#]", 1);

            await kvl.Set(key, "$.world[#]", 2);

            await trx.CommitAsync();

            var expected = JsonSerializer.Serialize(new { hello = "value", world = new [] { 0, 1, 2 } });
            var res      = await kvl.Get(key);

            Assert.AreEqual(expected, res);
        }
Exemplo n.º 30
0
        public async Task TestGetByComparison(int entryCount, bool random)
        {
            var kvl        = KVLite.CreateJsonInMemory();
            var valueTrue  = JsonSerializer.Serialize(new { done = true });
            var valueFalse = JsonSerializer.Serialize(new { done = false });
            var rnd        = new Random(Guid.NewGuid().GetHashCode());

            var entries = Enumerable
                          .Range(0, entryCount)
                          .Select(x =>
            {
                var value = random
                        ? rnd.Next(0, 100) > 50
                            ? valueTrue : valueFalse
                        : x < entryCount / 2
                            ? valueTrue : valueFalse;
                var key = Encoding.UTF8.GetBytes($"key{x}");

                return(new KeyValuePair <byte[], string>(key, value));
            }).ToList();

            await kvl.Add(entries);

            var groups   = entries.GroupBy(x => x.Value.Contains("true"));
            var trueKeys = groups
                           .Where(x => x.Key)
                           .First()
                           .Select(x => Encoding.UTF8.GetString(x.Key))
                           .ToHashSet();

            var falseKeys = groups
                            .Where(x => !x.Key)
                            .First()
                            .Select(x => Encoding.UTF8.GetString(x.Key))
                            .ToHashSet();

            var trueCount  = trueKeys.Count;
            var falseCount = falseKeys.Count;
            var counter    = 0;
            var hs         = new HashSet <string>();

            await foreach (var res in kvl.Get <string, bool>("$.done", Compare.EQ, true))
            {
                Interlocked.Increment(ref counter);
                var key = Encoding.UTF8.GetString(res.Key);
                trueKeys.Remove(key);
                hs.Add(key);

                Assert.AreEqual(valueTrue, res.Value);
            }

            await foreach (var res in kvl.Get <string, bool>("$.done", Compare.NE, true))
            {
                Interlocked.Increment(ref counter);
                var key = Encoding.UTF8.GetString(res.Key);
                falseKeys.Remove(key);
                hs.Add(key);

                Assert.AreEqual(valueFalse, res.Value);
            }

            Assert.AreEqual(hs.Count, entryCount);
            Assert.AreEqual(0, trueKeys.Count);
            Assert.AreEqual(counter, entryCount);
        }