public async Task Write_BlockWiseCoapMessage_ReadResponse() { int blockSize = 128; // Arrange var totalBytes = 1234; var totalBlocks = ((totalBytes - 1) / blockSize) + 1; var baseRequestMessage = new CoapMessage { Code = CoapMessageCode.Post, Type = CoapMessageType.Confirmable, }; var baseResponseMessage = new CoapMessage { Code = CoapMessageCode.Continue, Type = CoapMessageType.Acknowledgement, }; var mockClientEndpoint = new Mock <MockBlockwiseEndpoint>(baseResponseMessage, blockSize, totalBytes) { CallBase = true }; mockClientEndpoint.Object.FinalResponse = new CoapMessage { Code = CoapMessageCode.Changed, Type = CoapMessageType.Acknowledgement, }; var result = new byte[totalBytes]; int bytesRead; // Act using (var client = new CoapClient(mockClientEndpoint.Object)) { var ct = new CancellationTokenSource(MaxTaskTimeout); var context = baseRequestMessage.CreateBlockWiseContext(client); using (var writer = new CoapBlockStreamWriter(context) { BlockSize = blockSize }) { writer.Write(BlockWiseTestHelper.ByteRange(0, totalBytes), 0, totalBytes); writer.Flush(); }; using (var reader = new CoapBlockStreamReader(context)) { bytesRead = reader.Read(result, 0, totalBytes); }; } // Assert Assert.That(bytesRead, Is.EqualTo(totalBytes), "Incorrect number of bytes read"); Assert.That(result, Is.EqualTo(BlockWiseTestHelper.ByteRange(0, totalBytes)), "Incorrect payload read"); mockClientEndpoint.Verify(); }
public async Task Read_BlockWiseCoapMessage( [Values(16, 32, 64, 128, 256, 512, 1024)] int blockSize, [Range(1, 2)] int blocks, [Values] bool lastHalfblock) { // Arrange int totalBytes = (blocks * blockSize) + (lastHalfblock ? blockSize / 2 : 0); int totalBlocks = ((totalBytes - 1) / blockSize) + 1; var baseRequestMessage = new CoapMessage { Code = CoapMessageCode.Get, Type = CoapMessageType.Confirmable, }; baseRequestMessage.SetUri("/status", UriComponents.Path); var baseResponse = new CoapMessage { Code = CoapMessageCode.Content, Type = CoapMessageType.Acknowledgement, }; var helper = new BlockWiseTestHelper { BlockSize = blockSize, TotalBytes = totalBytes }; var mockClientEndpoint = new Mock <MockBlockwiseEndpoint>(baseResponse, blockSize, totalBytes) { CallBase = true }; helper.AssertReadResponseCorrespondance(mockClientEndpoint, 1) .AssertInitialRequest(mockClientEndpoint); var result = new byte[totalBytes]; int bytesRead; // Act using (var client = new CoapClient(mockClientEndpoint.Object)) { var ct = new CancellationTokenSource(MaxTaskTimeout); client.SetNextMessageId(1); var identifier = await client.SendAsync(baseRequestMessage, ct.Token); var response = await client.GetResponseAsync(identifier, ct.Token); using (var reader = new CoapBlockStreamReader(client, response, baseRequestMessage)) { bytesRead = reader.Read(result, 0, totalBytes); }; } // Assert Assert.That(bytesRead, Is.EqualTo(totalBytes), "Incorrect number of bytes read"); Assert.That(result, Is.EqualTo(BlockWiseTestHelper.ByteRange(0, totalBytes)), "Incorrect payload read"); mockClientEndpoint.Verify(); }