|
29 | 29 |
|
30 | 30 | using Xunit; |
31 | 31 | using Ionic.Zlib; |
| 32 | +using Moq; |
32 | 33 |
|
33 | 34 | using RipcordSoftware.HttpWebClient; |
34 | 35 |
|
@@ -101,6 +102,32 @@ public void TestHttpWebClientGzipResponse() |
101 | 102 | Assert.True(_testBytes.SequenceEqual(response)); |
102 | 103 | } |
103 | 104 |
|
| 105 | + [Fact] |
| 106 | + public void TestHttpWebClientGzipResponseByByte() |
| 107 | + { |
| 108 | + var memStream = new NonDisposibleStream(new MemoryStream()); |
| 109 | + |
| 110 | + using (var gzipStream = new GZipStream(memStream, CompressionMode.Compress)) |
| 111 | + { |
| 112 | + gzipStream.Write(_testBytes, 0, _testBytes.Length); |
| 113 | + } |
| 114 | + |
| 115 | + memStream.Position = 0; |
| 116 | + |
| 117 | + var response = new List<byte>(); |
| 118 | + using (var stream = new HttpWebClientGZipResponseStream(memStream)) |
| 119 | + { |
| 120 | + var byteRead = 0; |
| 121 | + while ((byteRead = stream.ReadByte()) >= 0) |
| 122 | + { |
| 123 | + response.Add((byte)byteRead); |
| 124 | + } |
| 125 | + } |
| 126 | + |
| 127 | + Assert.Equal(_testBytes.Length, response.Count); |
| 128 | + Assert.True(_testBytes.SequenceEqual(response)); |
| 129 | + } |
| 130 | + |
104 | 131 | [Fact] |
105 | 132 | public void TestInitializedDeflateResponseStream() |
106 | 133 | { |
@@ -152,6 +179,82 @@ public void TestHttpWebClientDeflateResponse() |
152 | 179 | Assert.Equal(_testBytes.Length, response.Count); |
153 | 180 | Assert.True(_testBytes.SequenceEqual(response)); |
154 | 181 | } |
| 182 | + |
| 183 | + [Fact] |
| 184 | + public void TestHttpWebClientDeflateResponseByByte() |
| 185 | + { |
| 186 | + var memStream = new NonDisposibleStream(new MemoryStream()); |
| 187 | + |
| 188 | + using (var gzipStream = new DeflateStream(memStream, CompressionMode.Compress)) |
| 189 | + { |
| 190 | + gzipStream.Write(_testBytes, 0, _testBytes.Length); |
| 191 | + } |
| 192 | + |
| 193 | + memStream.Position = 0; |
| 194 | + |
| 195 | + var response = new List<byte>(); |
| 196 | + using (var stream = new HttpWebClientDeflateResponseStream(memStream)) |
| 197 | + { |
| 198 | + var byteRead = 0; |
| 199 | + while ((byteRead = stream.ReadByte()) >= 0) |
| 200 | + { |
| 201 | + response.Add((byte)byteRead); |
| 202 | + } |
| 203 | + } |
| 204 | + |
| 205 | + Assert.Equal(_testBytes.Length, response.Count); |
| 206 | + Assert.True(_testBytes.SequenceEqual(response)); |
| 207 | + } |
| 208 | + |
| 209 | + [Fact] |
| 210 | + public void TestInitializedGzipResponseStreamWithMockedSocketStream() |
| 211 | + { |
| 212 | + var mock = new Mock<Stream>(); |
| 213 | + var mockResponseStream = mock.As<IHttpWebClientResponseStream>(); |
| 214 | + mockResponseStream.Setup(s => s.Available).Returns(42); |
| 215 | + mockResponseStream.Setup(s => s.SocketAvailable).Returns(69); |
| 216 | + mockResponseStream.Setup(s => s.BufferAvailable).Returns(7); |
| 217 | + mockResponseStream.SetupSet(s => s.SocketForceClose = true); |
| 218 | + mockResponseStream.Setup(s => s.SocketReceive(It.IsAny<byte[]>(), It.IsAny<int>(), It.IsAny<int>())).Returns(128); |
| 219 | + |
| 220 | + using (var stream = new HttpWebClientGZipResponseStream(mock.Object)) |
| 221 | + { |
| 222 | + Assert.Equal(42, stream.Available); |
| 223 | + Assert.Equal(69, stream.SocketAvailable); |
| 224 | + Assert.Equal(7, stream.BufferAvailable); |
| 225 | + |
| 226 | + stream.SocketForceClose = true; |
| 227 | + |
| 228 | + Assert.Equal(128, stream.SocketReceive(new byte[256], 0, 256)); |
| 229 | + } |
| 230 | + |
| 231 | + mockResponseStream.VerifyAll(); |
| 232 | + } |
| 233 | + |
| 234 | + [Fact] |
| 235 | + public void TestInitializedDeflateResponseStreamWithMockedSocketStream() |
| 236 | + { |
| 237 | + var mock = new Mock<Stream>(); |
| 238 | + var mockResponseStream = mock.As<IHttpWebClientResponseStream>(); |
| 239 | + mockResponseStream.Setup(s => s.Available).Returns(42); |
| 240 | + mockResponseStream.Setup(s => s.SocketAvailable).Returns(69); |
| 241 | + mockResponseStream.Setup(s => s.BufferAvailable).Returns(7); |
| 242 | + mockResponseStream.SetupSet(s => s.SocketForceClose = true); |
| 243 | + mockResponseStream.Setup(s => s.SocketReceive(It.IsAny<byte[]>(), It.IsAny<int>(), It.IsAny<int>())).Returns(128); |
| 244 | + |
| 245 | + using (var stream = new HttpWebClientDeflateResponseStream(mock.Object)) |
| 246 | + { |
| 247 | + Assert.Equal(42, stream.Available); |
| 248 | + Assert.Equal(69, stream.SocketAvailable); |
| 249 | + Assert.Equal(7, stream.BufferAvailable); |
| 250 | + |
| 251 | + stream.SocketForceClose = true; |
| 252 | + |
| 253 | + Assert.Equal(128, stream.SocketReceive(new byte[256], 0, 256)); |
| 254 | + } |
| 255 | + |
| 256 | + mockResponseStream.VerifyAll(); |
| 257 | + } |
155 | 258 | #endregion |
156 | 259 | } |
157 | 260 | } |
0 commit comments