FileWebResponseTest.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. //
  2. // FileWebResponseTest.cs - NUnit Test Cases for System.Net.FileWebResponse
  3. //
  4. // Authors:
  5. // Gert Driesen ([email protected])
  6. //
  7. // (C) 2007 Gert Driesen
  8. //
  9. using System;
  10. using System.IO;
  11. using System.Net;
  12. using NUnit.Framework;
  13. #if TARGET_JVM
  14. using System.Globalization;
  15. using System.Reflection;
  16. #endif
  17. namespace MonoTests.System.Net
  18. {
  19. [TestFixture]
  20. public class FileWebResponseTest
  21. {
  22. private string _tempDirectory;
  23. private string _tempFile;
  24. private Uri _tempFileUri;
  25. [SetUp]
  26. public void SetUp ()
  27. {
  28. _tempDirectory = Path.Combine (Path.GetTempPath (), "MonoTests.System.Net.FileWebResponseTest");
  29. _tempFile = Path.Combine (_tempDirectory, "FileWebResponseTest.tmp");
  30. if (!Directory.Exists (_tempDirectory)) {
  31. Directory.CreateDirectory (_tempDirectory);
  32. } else {
  33. // ensure no files are left over from previous runs
  34. string [] files = Directory.GetFiles (_tempDirectory, "*");
  35. foreach (string file in files)
  36. File.Delete (file);
  37. }
  38. _tempFileUri = GetTempFileUri ();
  39. }
  40. [TearDown]
  41. public void TearDown ()
  42. {
  43. if (Directory.Exists (_tempDirectory)) {
  44. string [] files = Directory.GetFiles (_tempDirectory, "*");
  45. foreach (string file in files)
  46. File.Delete (file);
  47. Directory.Delete (_tempDirectory, true);
  48. }
  49. }
  50. [Test]
  51. public void ContentLength ()
  52. {
  53. FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
  54. req.Method = "PUT";
  55. req.ContentLength = 100;
  56. using (Stream s = req.GetRequestStream ()) {
  57. s.WriteByte (72);
  58. s.WriteByte (110);
  59. s.WriteByte (80);
  60. s.Flush ();
  61. }
  62. req = (FileWebRequest) WebRequest.Create (_tempFileUri);
  63. using (FileWebResponse resp = (FileWebResponse) req.GetResponse ()) {
  64. Assert.AreEqual (3, resp.ContentLength, "#1");
  65. Assert.AreEqual (2, resp.Headers.Count, "#2");
  66. Assert.AreEqual ("Content-Length", resp.Headers.Keys [0], "#3");
  67. Assert.AreEqual ("3", resp.Headers.Get (0), "#4");
  68. resp.Headers.Clear ();
  69. Assert.AreEqual (3, resp.ContentLength, "#5");
  70. Assert.AreEqual (0, resp.Headers.Count, "#6");
  71. }
  72. }
  73. [Test]
  74. public void ContentType ()
  75. {
  76. FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
  77. req.Method = "PUT";
  78. req.ContentType = "image/png";
  79. using (Stream s = req.GetRequestStream ()) {
  80. s.WriteByte (72);
  81. s.WriteByte (110);
  82. s.WriteByte (80);
  83. s.Flush ();
  84. }
  85. req = (FileWebRequest) WebRequest.Create (_tempFileUri);
  86. using (FileWebResponse resp = (FileWebResponse) req.GetResponse ()) {
  87. Assert.AreEqual ("application/octet-stream", resp.ContentType, "#1");
  88. Assert.AreEqual (2, resp.Headers.Count, "#2");
  89. Assert.AreEqual ("Content-Type", resp.Headers.Keys [1], "#3");
  90. Assert.AreEqual ("application/octet-stream", resp.Headers.Get (1), "#4");
  91. resp.Headers.Clear ();
  92. Assert.AreEqual ("application/octet-stream", resp.ContentType, "#5");
  93. Assert.AreEqual (0, resp.Headers.Count, "#6");
  94. }
  95. }
  96. [Test]
  97. public void GetResponseStream ()
  98. {
  99. FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
  100. req.Method = "PUT";
  101. req.ContentType = "image/png";
  102. using (Stream s = req.GetRequestStream ()) {
  103. s.WriteByte (72);
  104. s.WriteByte (110);
  105. s.WriteByte (80);
  106. s.Flush ();
  107. }
  108. req = (FileWebRequest) WebRequest.Create (_tempFileUri);
  109. FileWebResponse respA = null;
  110. FileWebResponse respB = null;
  111. FileStream fsA = null;
  112. FileStream fsB = null;
  113. try {
  114. respA = (FileWebResponse) req.GetResponse ();
  115. fsA = respA.GetResponseStream () as FileStream;
  116. Assert.IsNotNull (fsA, "#A1");
  117. Assert.IsTrue (fsA.CanRead, "#A2");
  118. Assert.IsTrue (fsA.CanSeek, "#A3");
  119. #if NET_2_0
  120. Assert.IsFalse (fsA.CanTimeout, "#A4");
  121. #endif
  122. Assert.IsFalse (fsA.CanWrite, "#A5");
  123. Assert.AreEqual (3, fsA.Length, "#A6");
  124. Assert.AreEqual (0, fsA.Position, "#A7");
  125. #if NET_2_0
  126. try {
  127. int i = fsA.ReadTimeout;
  128. Assert.Fail ("#A8:" + i);
  129. } catch (InvalidOperationException) {
  130. }
  131. try {
  132. int i = fsA.WriteTimeout;
  133. Assert.Fail ("#A9:" + i);
  134. } catch (InvalidOperationException) {
  135. }
  136. #endif
  137. respB = (FileWebResponse) req.GetResponse ();
  138. fsB = respB.GetResponseStream () as FileStream;
  139. Assert.IsNotNull (fsB, "#B1");
  140. Assert.IsTrue (fsB.CanRead, "#B2");
  141. Assert.IsTrue (fsB.CanSeek, "#B3");
  142. #if NET_2_0
  143. Assert.IsFalse (fsB.CanTimeout, "#B4");
  144. #endif
  145. Assert.IsFalse (fsB.CanWrite, "#B5");
  146. Assert.AreEqual (3, fsB.Length, "#B6");
  147. Assert.AreEqual (0, fsB.Position, "#B7");
  148. #if NET_2_0
  149. try {
  150. int i = fsB.ReadTimeout;
  151. Assert.Fail ("#B8:" + i);
  152. } catch (InvalidOperationException) {
  153. }
  154. try {
  155. int i = fsB.WriteTimeout;
  156. Assert.Fail ("#B9:" + i);
  157. } catch (InvalidOperationException) {
  158. }
  159. #endif
  160. } finally {
  161. if (respA != null)
  162. respA.Close ();
  163. if (respB != null)
  164. respB.Close ();
  165. }
  166. }
  167. [Test]
  168. public void Headers ()
  169. {
  170. FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
  171. req.Method = "PUT";
  172. req.Headers.Add ("Disposition", "attach");
  173. using (Stream s = req.GetRequestStream ()) {
  174. s.WriteByte (72);
  175. s.WriteByte (110);
  176. s.WriteByte (80);
  177. s.Flush ();
  178. }
  179. req = (FileWebRequest) WebRequest.Create (_tempFileUri);
  180. using (FileWebResponse resp = (FileWebResponse) req.GetResponse ()) {
  181. Assert.AreEqual (2, resp.Headers.Count, "#1");
  182. Assert.AreEqual ("Content-Length", resp.Headers.Keys [0], "#2");
  183. Assert.AreEqual ("Content-Type", resp.Headers.Keys [1], "#3");
  184. }
  185. }
  186. [Test]
  187. public void ResponseUri ()
  188. {
  189. FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
  190. req.Method = "PUT";
  191. req.ContentType = "image/png";
  192. using (Stream s = req.GetRequestStream ()) {
  193. s.WriteByte (72);
  194. s.WriteByte (110);
  195. s.WriteByte (80);
  196. s.Flush ();
  197. }
  198. req = (FileWebRequest) WebRequest.Create (_tempFileUri);
  199. using (FileWebResponse resp = (FileWebResponse) req.GetResponse ()) {
  200. Assert.AreEqual (_tempFileUri, resp.ResponseUri);
  201. }
  202. }
  203. private Uri GetTempFileUri ()
  204. {
  205. string tempFile = _tempFile;
  206. if (RunningOnUnix) {
  207. // remove leading slash for absolute paths
  208. tempFile = tempFile.TrimStart ('/');
  209. } else {
  210. tempFile = tempFile.Replace ('\\', '/');
  211. }
  212. return new Uri ("file:///" + tempFile);
  213. }
  214. #if TARGET_JVM
  215. private bool RunningOnUnix {
  216. get {
  217. Type t = Type.GetType("java.lang.System");
  218. MethodInfo mi = t.GetMethod("getProperty", new Type[] { typeof(string) });
  219. string osName = (string) mi.Invoke(null, new object[] { "os.name" });
  220. if(osName == null) {
  221. return false;
  222. }
  223. return !osName.StartsWith("win", true, CultureInfo.InvariantCulture);
  224. }
  225. }
  226. #else
  227. private bool RunningOnUnix {
  228. get {
  229. // check for Unix platforms - see FAQ for more details
  230. // http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
  231. int platform = (int) Environment.OSVersion.Platform;
  232. return ((platform == 4) || (platform == 128));
  233. }
  234. }
  235. #endif
  236. }
  237. }