public async Task TestReadItem()
        {
            using (var stream = new MemoryStream())
            using (var writer = new StreamWriter(stream))
            {
                var keys = new[] { "9CADB4CA-64C4-4724-84E8-1B4602D54F0C", "aasodfiawea_)(*&^%$#@!", "foobar" };
                var values = new[] { "test value", "Hello, world!", string.Join(string.Empty, Enumerable.Range(0, 10000).Select(i => (i % 10))) };
                var flags = new uint[] { 12345, 0, 123917070 };
                var casUnique = new long?[] { 0L, long.MaxValue, null };

                for (int i = 0; i < keys.Length; ++i)
                {
                    WriteItem(writer, keys[i], values[i], flags[i], casUnique[i]);
                }

                writer.Write("END\r\n");
                writer.Flush();

                stream.Position = 0;
                var reader = new MemcachedResponseReader(stream, writer.Encoding, TimeSpan.FromSeconds(1));
                for (int i = 0; i < keys.Length; ++i)
                {
                    var item = await reader.ReadItem();
                    Assert.AreEqual(keys[i], item.Key);
                    using (var sr = new StreamReader(item.Data, writer.Encoding))
                    {
                        Assert.AreEqual(values[i], sr.ReadToEnd());
                    }
                    Assert.AreEqual(flags[i], item.Flags);
                    Assert.AreEqual(casUnique[i], item.CasUnique);
                }

                Assert.AreEqual(null, await reader.ReadItem());
            }
        }
Esempio n. 2
0
        public static async Task AssertReadResponse <TCommand, TResult>(TCommand command, StorageCommandResult result, TResult expectedResult)
            where TCommand : StorageCommand <TResult>
        {
            var response = Encoding.UTF8.GetBytes(result.ToVerb() + "\r\n");

            using (var ms = new MemoryStream(response))
            {
                var reader       = new MemcachedResponseReader(ms, Encoding.UTF8, TimeSpan.FromSeconds(2));
                var actualResult = await command.ReadResponse(reader);

                Assert.AreEqual(expectedResult, actualResult);
            }
        }
Esempio n. 3
0
        public async Task TestReadLineValidation()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                {
                    var line = "ERROR something bad happened";
                    writer.Write(line);
                    writer.Write("\r\n");
                    writer.Flush();

                    var reader = new MemcachedResponseReader(stream, writer.Encoding, TimeSpan.FromSeconds(1));
                    await reader.ReadLine();
                }
        }
        public async Task TestReadLineValidation()
        {
            using (var stream = new MemoryStream())
            using (var writer = new StreamWriter(stream))
            {
                var line = "ERROR something bad happened";
                writer.Write(line);
                writer.Write("\r\n");
                writer.Flush();

                var reader = new MemcachedResponseReader(stream, writer.Encoding, TimeSpan.FromSeconds(1));
                await reader.ReadLine();
            }
        }
Esempio n. 5
0
        public static async Task AssertReadResponseFailure <TCommand, TResult>(TCommand command, StorageCommandResult result)
            where TCommand : StorageCommand <TResult>
        {
            var response = Encoding.UTF8.GetBytes(result.ToVerb() + "\r\n");

            using (var ms = new MemoryStream(response))
            {
                var reader = new MemcachedResponseReader(ms, Encoding.UTF8, TimeSpan.FromSeconds(2));
                try
                {
                    await command.ReadResponse(reader);

                    Assert.Fail("Response for " + result + " was expected to fail but succeeded.");
                }
                catch (MemcachedException mex)
                {
                    StringAssert.StartsWith(mex.Message, "Unexpected response");
                    StringAssert.Contains(mex.Message, result.ToVerb());
                }
            }
        }
        public async Task TestReadLine()
        {
            using (var stream = new MemoryStream())
            using (var writer = new StreamWriter(stream))
            {
                var line = "foobar some line !@#$%^&*()";
                var parts = line.Split(' ');
                writer.Write(line + "\r\n");
                writer.Write("some other line");
                writer.Write("\r\n");
                writer.Flush();

                stream.Position = 0;

                var reader = new MemcachedResponseReader(stream, writer.Encoding, TimeSpan.FromSeconds(1));

                var resultLine = await reader.ReadLine();
                Assert.AreEqual(line, resultLine.Line);
                CollectionAssert.AreEqual(parts, resultLine.Parts);

                Assert.AreEqual("some other line", (await reader.ReadLine()).Line);
            }
        }
Esempio n. 7
0
        public async Task TestReadItem()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                {
                    var keys      = new[] { "9CADB4CA-64C4-4724-84E8-1B4602D54F0C", "aasodfiawea_)(*&^%$#@!", "foobar" };
                    var values    = new[] { "test value", "Hello, world!", string.Join(string.Empty, Enumerable.Range(0, 10000).Select(i => (i % 10))) };
                    var flags     = new uint[] { 12345, 0, 123917070 };
                    var casUnique = new long?[] { 0L, long.MaxValue, null };

                    for (int i = 0; i < keys.Length; ++i)
                    {
                        WriteItem(writer, keys[i], values[i], flags[i], casUnique[i]);
                    }

                    writer.Write("END\r\n");
                    writer.Flush();

                    stream.Position = 0;
                    var reader = new MemcachedResponseReader(stream, writer.Encoding, TimeSpan.FromSeconds(1));
                    for (int i = 0; i < keys.Length; ++i)
                    {
                        var item = await reader.ReadItem();

                        Assert.AreEqual(keys[i], item.Key);
                        using (var sr = new StreamReader(item.Data, writer.Encoding))
                        {
                            Assert.AreEqual(values[i], sr.ReadToEnd());
                        }
                        Assert.AreEqual(flags[i], item.Flags);
                        Assert.AreEqual(casUnique[i], item.CasUnique);
                    }

                    Assert.AreEqual(null, await reader.ReadItem());
                }
        }
Esempio n. 8
0
        public async Task TestReadLine()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                {
                    var line  = "foobar some line !@#$%^&*()";
                    var parts = line.Split(' ');
                    writer.Write(line + "\r\n");
                    writer.Write("some other line");
                    writer.Write("\r\n");
                    writer.Flush();

                    stream.Position = 0;

                    var reader = new MemcachedResponseReader(stream, writer.Encoding, TimeSpan.FromSeconds(1));

                    var resultLine = await reader.ReadLine();

                    Assert.AreEqual(line, resultLine.Line);
                    CollectionAssert.AreEqual(parts, resultLine.Parts);

                    Assert.AreEqual("some other line", (await reader.ReadLine()).Line);
                }
        }