FileStreamTests.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. using System.Net;
  2. using System.Net.Http;
  3. using System.Threading.Tasks;
  4. using Xunit;
  5. namespace Masuit.Tools.Core.Test.AspNetCore
  6. {
  7. public class FileStreamTests : TestBase
  8. {
  9. [Fact]
  10. public async Task FullFileStreamAttachmentEtagTest()
  11. {
  12. // Act
  13. HttpResponseMessage response = await Client.GetAsync("/file/stream/true/true");
  14. response.EnsureSuccessStatusCode();
  15. string responseString = await response.Content.ReadAsStringAsync();
  16. // Assert
  17. Assert.Equal(HttpStatusCode.OK, response.StatusCode);
  18. Assert.Equal("0123456789abcdefghijklmnopgrstuvwxyzABCDEFGHIJKLMNOPGRSTUVWXYZ", responseString);
  19. Assert.Equal("bytes", response.Headers.AcceptRanges.ToString());
  20. Assert.Equal(EntityTag, response.Headers.ETag);
  21. Assert.Null(response.Content.Headers.ContentRange);
  22. Assert.Equal(62, response.Content.Headers.ContentLength);
  23. Assert.Equal("attachment", response.Content.Headers.ContentDisposition.DispositionType);
  24. }
  25. [Fact]
  26. public async Task FullFileStreamAttachmentNoEtagTest()
  27. {
  28. // Act
  29. HttpResponseMessage response = await Client.GetAsync("/file/stream/true/false");
  30. response.EnsureSuccessStatusCode();
  31. string responseString = await response.Content.ReadAsStringAsync();
  32. // Assert
  33. Assert.Equal(HttpStatusCode.OK, response.StatusCode);
  34. Assert.Equal("0123456789abcdefghijklmnopgrstuvwxyzABCDEFGHIJKLMNOPGRSTUVWXYZ", responseString);
  35. Assert.Equal("bytes", response.Headers.AcceptRanges.ToString());
  36. Assert.Null(response.Headers.ETag);
  37. Assert.Null(response.Content.Headers.ContentRange);
  38. Assert.Equal(62, response.Content.Headers.ContentLength);
  39. Assert.Equal("attachment", response.Content.Headers.ContentDisposition.DispositionType);
  40. }
  41. [Fact]
  42. public async Task FullFileStreamInlineEtagTest()
  43. {
  44. // Act
  45. HttpResponseMessage response = await Client.GetAsync("/file/stream/false/true");
  46. response.EnsureSuccessStatusCode();
  47. string responseString = await response.Content.ReadAsStringAsync();
  48. // Assert
  49. Assert.Equal(HttpStatusCode.OK, response.StatusCode);
  50. Assert.Equal("0123456789abcdefghijklmnopgrstuvwxyzABCDEFGHIJKLMNOPGRSTUVWXYZ", responseString);
  51. Assert.Equal("bytes", response.Headers.AcceptRanges.ToString());
  52. Assert.Equal(EntityTag, response.Headers.ETag);
  53. Assert.Null(response.Content.Headers.ContentRange);
  54. Assert.Equal(62, response.Content.Headers.ContentLength);
  55. Assert.Equal("inline", response.Content.Headers.ContentDisposition.DispositionType);
  56. }
  57. [Fact]
  58. public async Task FullFileStreamInlineFileNameTest()
  59. {
  60. // Act
  61. HttpResponseMessage response = await Client.GetAsync("/file/stream/false");
  62. response.EnsureSuccessStatusCode();
  63. string responseString = await response.Content.ReadAsStringAsync();
  64. // Assert
  65. Assert.Equal(HttpStatusCode.OK, response.StatusCode);
  66. Assert.Equal("0123456789abcdefghijklmnopgrstuvwxyzABCDEFGHIJKLMNOPGRSTUVWXYZ", responseString);
  67. Assert.Equal("bytes", response.Headers.AcceptRanges.ToString());
  68. Assert.Null(response.Headers.ETag);
  69. Assert.Null(response.Content.Headers.ContentRange);
  70. Assert.Equal(62, response.Content.Headers.ContentLength);
  71. Assert.Equal("inline", response.Content.Headers.ContentDisposition.DispositionType);
  72. Assert.Equal("TestFile.txt", response.Content.Headers.ContentDisposition.FileName);
  73. }
  74. [Fact]
  75. public async Task FullFileStreamInlineNoEtagTest()
  76. {
  77. // Act
  78. HttpResponseMessage response = await Client.GetAsync("/file/stream/false/false");
  79. response.EnsureSuccessStatusCode();
  80. string responseString = await response.Content.ReadAsStringAsync();
  81. // Assert
  82. Assert.Equal(HttpStatusCode.OK, response.StatusCode);
  83. Assert.Equal("0123456789abcdefghijklmnopgrstuvwxyzABCDEFGHIJKLMNOPGRSTUVWXYZ", responseString);
  84. Assert.Equal("bytes", response.Headers.AcceptRanges.ToString());
  85. Assert.Null(response.Headers.ETag);
  86. Assert.Null(response.Content.Headers.ContentRange);
  87. Assert.Equal(62, response.Content.Headers.ContentLength);
  88. Assert.Equal("inline", response.Content.Headers.ContentDisposition.DispositionType);
  89. }
  90. [Fact]
  91. public async Task Partial1FileStreamAttachmentEtagTest()
  92. {
  93. // Arrange
  94. Client.DefaultRequestHeaders.Add("Range", "bytes=0-0");
  95. // Act
  96. HttpResponseMessage response = await Client.GetAsync("/file/stream/true/true");
  97. response.EnsureSuccessStatusCode();
  98. string responseString = await response.Content.ReadAsStringAsync();
  99. // Assert
  100. Assert.Equal(HttpStatusCode.PartialContent, response.StatusCode);
  101. Assert.Equal("0", responseString);
  102. Assert.Equal("bytes", response.Headers.AcceptRanges.ToString());
  103. Assert.Equal(EntityTag, response.Headers.ETag);
  104. Assert.NotNull(response.Content.Headers.ContentRange);
  105. Assert.Equal("bytes 0-0/62", response.Content.Headers.ContentRange.ToString());
  106. Assert.Equal(1, response.Content.Headers.ContentLength);
  107. Assert.Equal("attachment", response.Content.Headers.ContentDisposition.DispositionType);
  108. }
  109. [Fact]
  110. public async Task Partial1FileStreamAttachmentNoEtagTest()
  111. {
  112. // Arrange
  113. Client.DefaultRequestHeaders.Add("Range", "bytes=0-0");
  114. // Act
  115. HttpResponseMessage response = await Client.GetAsync("/file/stream/true/false");
  116. response.EnsureSuccessStatusCode();
  117. string responseString = await response.Content.ReadAsStringAsync();
  118. // Assert
  119. Assert.Equal(HttpStatusCode.PartialContent, response.StatusCode);
  120. Assert.Equal("0", responseString);
  121. Assert.Equal("bytes", response.Headers.AcceptRanges.ToString());
  122. Assert.Null(response.Headers.ETag);
  123. Assert.NotNull(response.Content.Headers.ContentRange);
  124. Assert.Equal("bytes 0-0/62", response.Content.Headers.ContentRange.ToString());
  125. Assert.Equal(1, response.Content.Headers.ContentLength);
  126. Assert.Equal("attachment", response.Content.Headers.ContentDisposition.DispositionType);
  127. }
  128. [Fact]
  129. public async Task Partial2FileStreamAttachmentEtagTest()
  130. {
  131. // Arrange
  132. Client.DefaultRequestHeaders.Add("Range", "bytes=1-1");
  133. // Act
  134. HttpResponseMessage response = await Client.GetAsync("/file/stream/true/true");
  135. response.EnsureSuccessStatusCode();
  136. string responseString = await response.Content.ReadAsStringAsync();
  137. // Assert
  138. Assert.Equal(HttpStatusCode.PartialContent, response.StatusCode);
  139. Assert.Equal("1", responseString);
  140. Assert.Equal("bytes", response.Headers.AcceptRanges.ToString());
  141. Assert.Equal(EntityTag, response.Headers.ETag);
  142. Assert.NotNull(response.Content.Headers.ContentRange);
  143. Assert.Equal("bytes 1-1/62", response.Content.Headers.ContentRange.ToString());
  144. Assert.Equal(1, response.Content.Headers.ContentLength);
  145. Assert.Equal("attachment", response.Content.Headers.ContentDisposition.DispositionType);
  146. }
  147. [Fact]
  148. public async Task Partial2FileStreamAttachmentNoEtagTest()
  149. {
  150. // Arrange
  151. Client.DefaultRequestHeaders.Add("Range", "bytes=1-1");
  152. // Act
  153. HttpResponseMessage response = await Client.GetAsync("/file/stream/true/false");
  154. response.EnsureSuccessStatusCode();
  155. string responseString = await response.Content.ReadAsStringAsync();
  156. // Assert
  157. Assert.Equal(HttpStatusCode.PartialContent, response.StatusCode);
  158. Assert.Equal("1", responseString);
  159. Assert.Equal("bytes", response.Headers.AcceptRanges.ToString());
  160. Assert.Null(response.Headers.ETag);
  161. Assert.NotNull(response.Content.Headers.ContentRange);
  162. Assert.Equal("bytes 1-1/62", response.Content.Headers.ContentRange.ToString());
  163. Assert.Equal(1, response.Content.Headers.ContentLength);
  164. Assert.Equal("attachment", response.Content.Headers.ContentDisposition.DispositionType);
  165. }
  166. [Fact]
  167. public async Task Partial2FileStreamInlineEtagTest()
  168. {
  169. // Arrange
  170. Client.DefaultRequestHeaders.Add("Range", "bytes=1-1");
  171. // Act
  172. HttpResponseMessage response = await Client.GetAsync("/file/stream/false/true");
  173. response.EnsureSuccessStatusCode();
  174. string responseString = await response.Content.ReadAsStringAsync();
  175. // Assert
  176. Assert.Equal(HttpStatusCode.PartialContent, response.StatusCode);
  177. Assert.Equal("1", responseString);
  178. Assert.Equal("bytes", response.Headers.AcceptRanges.ToString());
  179. Assert.Equal(EntityTag, response.Headers.ETag);
  180. Assert.NotNull(response.Content.Headers.ContentRange);
  181. Assert.Equal("bytes 1-1/62", response.Content.Headers.ContentRange.ToString());
  182. Assert.Equal(1, response.Content.Headers.ContentLength);
  183. Assert.Equal("inline", response.Content.Headers.ContentDisposition.DispositionType);
  184. }
  185. [Fact]
  186. public async Task Partial2FileStreamInlineNoEtagTest()
  187. {
  188. // Arrange
  189. Client.DefaultRequestHeaders.Add("Range", "bytes=1-1");
  190. // Act
  191. HttpResponseMessage response = await Client.GetAsync("/file/stream/false/false");
  192. response.EnsureSuccessStatusCode();
  193. string responseString = await response.Content.ReadAsStringAsync();
  194. // Assert
  195. Assert.Equal(HttpStatusCode.PartialContent, response.StatusCode);
  196. Assert.Equal("1", responseString);
  197. Assert.Equal("bytes", response.Headers.AcceptRanges.ToString());
  198. Assert.Null(response.Headers.ETag);
  199. Assert.NotNull(response.Content.Headers.ContentRange);
  200. Assert.Equal("bytes 1-1/62", response.Content.Headers.ContentRange.ToString());
  201. Assert.Equal(1, response.Content.Headers.ContentLength);
  202. Assert.Equal("inline", response.Content.Headers.ContentDisposition.DispositionType);
  203. }
  204. }
  205. }