2 // FileWebRequestTest.cs - NUnit Test Cases for System.Net.FileWebRequest
\r
5 // Lawrence Pit (loz@cable.a2000.nl)
\r
6 // Martin Willemoes Hansen (mwh@sysrq.dk)
\r
8 // (C) 2003 Martin Willemoes Hansen
\r
11 using NUnit.Framework;
\r
15 using System.Collections;
\r
16 using System.Security;
\r
17 using System.Security.Permissions;
\r
19 namespace MonoTests.System.Net
\r
23 public class FileWebRequestTest
\r
26 public void Async ()
\r
28 string tmpFilename = GetFilename ();
\r
29 if (tmpFilename == null) {
\r
30 Console.WriteLine ("\n\nSet environment variable TMPDIR to a temporary directory to test FileWebRequest\n");
\r
35 if (File.Exists (tmpFilename))
\r
36 File.Delete (tmpFilename);
\r
38 Uri uri = new Uri ("file:///" + tmpFilename);
\r
40 WebRequest req = WebRequest.Create (uri);
\r
43 req.Timeout = 2 * 1000;
\r
44 IAsyncResult async = req.BeginGetRequestStream (null, null);
\r
46 req.BeginGetRequestStream (null, null);
\r
47 Assertion.Fail ("#1 should've failed");
\r
48 } catch (InvalidOperationException) {
\r
49 //Console.WriteLine ("GOT1: " + e.Message + "\n" + e.StackTrace);
\r
50 // Cannot re-call BeginGetRequestStream/BeginGetResponse while
\r
51 // a previous call is still in progress
\r
55 req.BeginGetResponse (null, null);
\r
56 Assertion.Fail ("#2 should've failed");
\r
57 } catch (InvalidOperationException) { }
\r
60 req.GetRequestStream ();
\r
61 Assertion.Fail ("#3 should've failed");
\r
62 } catch (InvalidOperationException) {
\r
63 // Console.WriteLine ("GOT3: " + e.Message + "\n" + e.StackTrace);
\r
64 // Cannot re-call BeginGetRequestStream/BeginGetResponse while
\r
65 // a previous call is still in progress
\r
70 Assertion.Fail ("#4 should've failed");
\r
71 } catch (WebException) {
\r
72 // Console.WriteLine ("4: " + e.Message + "\n" + e.StackTrace);
\r
73 // The operation has timed out
\r
77 IAsyncResult async0 = req.BeginGetResponse (null, null);
\r
78 req.EndGetResponse (async0);
\r
79 // Console.WriteLine ("X5c");
\r
80 Assertion.Fail ("#5 should've failed");
\r
81 } catch (InvalidOperationException) {
\r
82 // Console.WriteLine ("5e: " + e.Message + "\n" + e.StackTrace);
\r
83 // Cannot re-call BeginGetRequestStream/BeginGetResponse while
\r
84 // a previous call is still in progress
\r
87 // Console.WriteLine ("WEBHEADERS: " + req.Headers);
\r
89 Stream wstream = req.EndGetRequestStream (async);
\r
90 Assertion.AssertEquals ("#1r", false, wstream.CanRead);
\r
91 Assertion.AssertEquals ("#1w", true, wstream.CanWrite);
\r
92 Assertion.AssertEquals ("#1s", true, wstream.CanSeek);
\r
94 wstream.WriteByte (72);
\r
95 wstream.WriteByte (101);
\r
96 wstream.WriteByte (108);
\r
97 wstream.WriteByte (108);
\r
98 wstream.WriteByte (111);
\r
103 req = WebRequest.Create (uri);
\r
104 WebResponse res = req.GetResponse ();
\r
107 req.BeginGetRequestStream (null, null);
\r
108 Assertion.Fail ("#20: should've failed");
\r
109 } catch (InvalidOperationException) {
\r
110 // Console.WriteLine ("20: " + e.Message + "\n" + e.StackTrace);
\r
111 // Cannot send a content-body with this verb-type
\r
115 req.Method = "PUT";
\r
116 req.BeginGetRequestStream (null, null);
\r
117 Assertion.Fail ("#21: should've failed");
\r
118 } catch (InvalidOperationException) {
\r
119 // Console.WriteLine ("21: " + e.Message + "\n" + e.StackTrace);
\r
120 // This operation cannot be perfomed after the request has been submitted.
\r
124 //IAsyncResult async2 = req.BeginGetResponse (null, null);
\r
125 //Console.WriteLine ("OK!");
\r
126 req.GetResponse ();
\r
127 //Assertion.Fail ("#22: should've failed");
\r
128 } catch (InvalidOperationException) {
\r
129 //Console.WriteLine ("22: " + e.Message + "\n" + e.StackTrace);
\r
130 // Cannot re-call BeginGetRequestStream/BeginGetResponse while
\r
131 // a previous call is still in progress
\r
132 Assertion.Fail ("#22: should not have failed");
\r
136 IAsyncResult async2 = req.BeginGetResponse (null, null);
\r
138 // this succeeds !!
\r
141 WebResponse res2 = req.EndGetResponse (async2);
\r
143 // and this succeeds
\r
145 Assertion.AssertEquals ("#23", res, res2) ;
\r
147 //Assertion.Fail ("#23: should've failed");
\r
148 } catch (InvalidOperationException) {
\r
149 //Console.WriteLine ("22: " + e.Message + "\n" + e.StackTrace);
\r
150 // Cannot re-call BeginGetRequestStream/BeginGetResponse while
\r
151 // a previous call is still in progress
\r
154 // Assertion.Fail ("#22: should've failed");
\r
155 } catch (InvalidOperationException) {
\r
158 Assertion.AssertEquals ("#2 len", (long) 5, res.ContentLength);
\r
159 Assertion.AssertEquals ("#2 type", "binary/octet-stream", res.ContentType);
\r
160 Assertion.AssertEquals ("#2 scheme", "file", res.ResponseUri.Scheme);
\r
162 Stream rstream = res.GetResponseStream ();
\r
163 Assertion.AssertEquals ("#3r", true, rstream.CanRead);
\r
164 Assertion.AssertEquals ("#3w", false, rstream.CanWrite);
\r
165 Assertion.AssertEquals ("#3s", true, rstream.CanSeek);
\r
167 Assertion.AssertEquals ("#4a", 72, rstream.ReadByte ());
\r
168 Assertion.AssertEquals ("#4b", 101, rstream.ReadByte ());
\r
169 Assertion.AssertEquals ("#4c", 108, rstream.ReadByte ());
\r
175 long len = res.ContentLength;
\r
176 Assertion.AssertEquals ("#5", (long) 5, len);
\r
177 } catch (ObjectDisposedException) {
\r
178 Assertion.Fail ("#disposed contentlength");
\r
181 WebHeaderCollection w = res.Headers;
\r
182 } catch (ObjectDisposedException) {
\r
183 Assertion.Fail ("#disposed headers");
\r
187 } catch (ObjectDisposedException) {
\r
188 Assertion.Fail ("#disposed close");
\r
190 } catch (Exception) {
\r
191 // Console.WriteLine ("ERROR! : " + ee.Message + "\n" + ee.StackTrace);
\r
194 // known bug #24940
\r
195 File.Delete (tmpFilename);
\r
196 } catch (Exception) {
\r
197 // Console.WriteLine ("ERROR2! : " + ee2.Message + "\n" + ee2.StackTrace);
\r
203 public void Sync ()
\r
205 string tmpFilename = GetFilename ();
\r
206 if (tmpFilename == null)
\r
210 if (File.Exists (tmpFilename))
\r
211 File.Delete (tmpFilename);
\r
213 Uri uri = new Uri ("file:///" + tmpFilename);
\r
215 WebRequest req = WebRequest.Create (uri);
\r
218 Stream stream = req.GetRequestStream ();
\r
219 Assertion.Fail ("should throw exception");
\r
220 } catch (ProtocolViolationException) {}
\r
222 req.Method = "PUT";
\r
224 Stream wstream = req.GetRequestStream ();
\r
225 Assertion.AssertEquals ("#1r", false, wstream.CanRead);
\r
226 Assertion.AssertEquals ("#1w", true, wstream.CanWrite);
\r
227 Assertion.AssertEquals ("#1s", true, wstream.CanSeek);
\r
229 wstream.WriteByte (72);
\r
230 wstream.WriteByte (101);
\r
231 wstream.WriteByte (108);
\r
232 wstream.WriteByte (108);
\r
233 wstream.WriteByte (111);
\r
238 req = WebRequest.Create (uri);
\r
239 WebResponse res = req.GetResponse ();
\r
240 Assertion.AssertEquals ("#2 len", (long) 5, res.ContentLength);
\r
241 Assertion.AssertEquals ("#2 type", "binary/octet-stream", res.ContentType);
\r
242 Assertion.AssertEquals ("#2 scheme", "file", res.ResponseUri.Scheme);
\r
244 Stream rstream = res.GetResponseStream ();
\r
245 Assertion.AssertEquals ("#3r", true, rstream.CanRead);
\r
246 Assertion.AssertEquals ("#3w", false, rstream.CanWrite);
\r
247 Assertion.AssertEquals ("#3s", true, rstream.CanSeek);
\r
249 Assertion.AssertEquals ("#4a", 72, rstream.ReadByte ());
\r
250 Assertion.AssertEquals ("#4b", 101, rstream.ReadByte ());
\r
251 Assertion.AssertEquals ("#4c", 108, rstream.ReadByte ());
\r
257 long len = res.ContentLength;
\r
258 Assertion.AssertEquals ("#5", (long) 5, len);
\r
259 } catch (ObjectDisposedException) {
\r
260 Assertion.Fail ("#disposed contentlength");
\r
263 WebHeaderCollection w = res.Headers;
\r
264 } catch (ObjectDisposedException) {
\r
265 Assertion.Fail ("#disposed headers");
\r
269 } catch (ObjectDisposedException) {
\r
270 Assertion.Fail ("#disposed close");
\r
275 File.Delete (tmpFilename);
\r
276 } catch (Exception) { }
\r
280 private string GetFilename ()
\r
282 string tmpdir = Environment.GetEnvironmentVariable ("TMPDIR");
\r
283 if (tmpdir == null || tmpdir.Length == 0) {
\r
287 tmpdir = tmpdir.Replace ('\\', '/');
\r
288 if (tmpdir [tmpdir.Length - 1] != '/')
\r
290 return tmpdir + "FileWebRequestTest.tmp";
\r