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()); } }
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); } }
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 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); } }