2 // FileWebRequestTest.cs - NUnit Test Cases for System.Net.FileWebRequest
5 // Lawrence Pit (loz@cable.a2000.nl)
6 // Martin Willemoes Hansen (mwh@sysrq.dk)
7 // Gert Driesen (drieseng@users.sourceforge.net)
9 // (C) 2003 Martin Willemoes Hansen
13 using System.Collections;
16 using System.Runtime.Serialization;
17 using System.Runtime.Serialization.Formatters;
18 using System.Runtime.Serialization.Formatters.Binary;
19 using System.Security;
20 using System.Security.Permissions;
22 using NUnit.Framework;
25 namespace MonoTests.System.Net
28 public class FileWebRequestTest
30 private string _tempDirectory;
31 private string _tempFile;
32 private Uri _tempFileUri;
37 _tempDirectory = Path.Combine (Path.GetTempPath (), "MonoTests.System.Net.FileWebRequestTest");
38 _tempFile = Path.Combine (_tempDirectory, "FileWebRequestTest.tmp");
39 if (!Directory.Exists (_tempDirectory)) {
40 Directory.CreateDirectory (_tempDirectory);
42 // ensure no files are left over from previous runs
43 string [] files = Directory.GetFiles (_tempDirectory, "*");
44 foreach (string file in files)
47 _tempFileUri = GetTempFileUri ();
51 public void TearDown ()
53 if (Directory.Exists (_tempDirectory))
54 Directory.Delete (_tempDirectory, true);
60 WebResponse res = null;
63 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
65 req.ContentLength = 1;
66 req.ContentType = "image/png";
68 req.Timeout = 2 * 1000;
69 IAsyncResult async = req.BeginGetRequestStream (null, null);
71 req.BeginGetRequestStream (null, null);
72 Assert.Fail ("#1 should've failed");
73 } catch (InvalidOperationException) {
74 // Cannot re-call BeginGetRequestStream/BeginGetResponse while
75 // a previous call is still in progress
79 req.GetRequestStream ();
80 Assert.Fail ("#3 should've failed");
81 } catch (InvalidOperationException) {
82 // Cannot re-call BeginGetRequestStream/BeginGetResponse while
83 // a previous call is still in progress
86 using (Stream wstream = req.EndGetRequestStream (async)) {
87 Assert.IsFalse (wstream.CanRead, "#1r");
88 Assert.IsTrue (wstream.CanWrite, "#1w");
89 Assert.IsTrue (wstream.CanSeek, "#1s");
91 wstream.WriteByte (72);
92 wstream.WriteByte (101);
93 wstream.WriteByte (108);
94 wstream.WriteByte (108);
95 wstream.WriteByte (111);
99 Assert.AreEqual (1, req.ContentLength, "#1cl");
100 Assert.AreEqual ("image/png", req.ContentType, "#1ct");
104 req = (FileWebRequest) WebRequest.Create (_tempFileUri);
105 res = req.GetResponse ();
108 req.BeginGetRequestStream (null, null);
109 Assert.Fail ("#20: should've failed");
110 } catch (InvalidOperationException) {
111 // Cannot send a content-body with this verb-type
116 req.BeginGetRequestStream (null, null);
117 Assert.Fail ("#21: should've failed");
118 } catch (InvalidOperationException) {
119 // This operation cannot be perfomed after the request has been submitted.
124 IAsyncResult async2 = req.BeginGetResponse (null, null);
127 WebResponse res2 = req.EndGetResponse (async2);
128 Assert.AreSame (res, res2, "#23");
130 Assert.AreEqual (5, res.ContentLength, "#2 len");
131 Assert.AreEqual ("application/octet-stream", res.ContentType, "#2 type");
132 Assert.AreEqual ("file", res.ResponseUri.Scheme, "#2 scheme");
134 Stream rstream = res.GetResponseStream ();
135 Assert.IsTrue (rstream.CanRead, "#3r");
136 Assert.IsFalse (rstream.CanWrite, "#3w");
137 Assert.IsTrue (rstream.CanSeek, "#3s");
139 Assert.AreEqual (72, rstream.ReadByte (), "#4a");
140 Assert.AreEqual (101, rstream.ReadByte (), "#4b");
141 Assert.AreEqual (108, rstream.ReadByte (), "#4c");
142 Assert.AreEqual (108, rstream.ReadByte (), "#4d");
143 Assert.AreEqual (111, rstream.ReadByte (), "#4e");
148 long len = res.ContentLength;
149 Assert.AreEqual ((long) 5, len, "#5");
150 } catch (ObjectDisposedException) {
151 Assert.Fail ("#disposed contentlength");
154 WebHeaderCollection w = res.Headers;
155 } catch (ObjectDisposedException) {
156 Assert.Fail ("#disposed headers");
160 } catch (ObjectDisposedException) {
161 Assert.Fail ("#disposed close");
170 [Category ("NotWorking")] // bug #323388
171 public void Async_GetResponse_Failure ()
173 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
175 req.ContentLength = 1;
176 req.ContentType = "image/png";
179 IAsyncResult async = req.BeginGetRequestStream (null, null);
183 } catch (WebException) {
184 // The operation has timed out
188 req.BeginGetResponse (null, null);
190 } catch (InvalidOperationException) {
191 // Cannot re-call BeginGetRequestStream/BeginGetResponse while
192 // a previous call is still in progress
195 using (Stream wstream = req.EndGetRequestStream (async)) {
196 wstream.WriteByte (72);
199 // the temp file should not be in use
200 Directory.Delete (_tempDirectory, true);
206 WebResponse res = null;
209 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
210 req.ContentLength = 1;
211 req.ContentType = "image/png";
214 Stream stream = req.GetRequestStream ();
215 Assert.Fail ("should throw exception");
216 } catch (ProtocolViolationException) {
221 Stream wstream = req.GetRequestStream ();
222 Assert.IsFalse (wstream.CanRead, "#1r");
223 Assert.IsTrue (wstream.CanWrite, "#1w");
224 Assert.IsTrue (wstream.CanSeek, "#1s");
226 wstream.WriteByte (72);
227 wstream.WriteByte (101);
228 wstream.WriteByte (108);
229 wstream.WriteByte (108);
230 wstream.WriteByte (111);
233 Assert.AreEqual (1, req.ContentLength, "#1cl");
234 Assert.AreEqual ("image/png", req.ContentType, "#1ct");
238 req = (FileWebRequest) WebRequest.Create (_tempFileUri);
239 res = req.GetResponse ();
240 Assert.AreEqual ((long) 5, res.ContentLength, "#2 len");
241 Assert.AreEqual ("application/octet-stream", res.ContentType, "#2 type");
242 Assert.AreEqual ("file", res.ResponseUri.Scheme, "#2 scheme");
244 Stream rstream = res.GetResponseStream ();
245 Assert.IsTrue (rstream.CanRead, "#3r");
246 Assert.IsFalse (rstream.CanWrite, "#3w");
247 Assert.IsTrue (rstream.CanSeek, "#3s");
249 Assert.AreEqual (72, rstream.ReadByte (), "#4a");
250 Assert.AreEqual (101, rstream.ReadByte (), "#4b");
251 Assert.AreEqual (108, rstream.ReadByte (), "#4c");
252 Assert.AreEqual (108, rstream.ReadByte (), "#4d");
253 Assert.AreEqual (111, rstream.ReadByte (), "#4e");
258 long len = res.ContentLength;
259 Assert.AreEqual ((long) 5, len, "#5");
260 } catch (ObjectDisposedException) {
261 Assert.Fail ("#disposed contentlength");
264 WebHeaderCollection w = res.Headers;
265 } catch (ObjectDisposedException) {
266 Assert.Fail ("#disposed headers");
270 } catch (ObjectDisposedException) {
271 Assert.Fail ("#disposed close");
280 [Category ("NotWorking")] // bug #323388
281 public void Sync_GetResponse_Failure ()
283 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
285 req.ContentLength = 1;
286 req.ContentType = "image/png";
289 using (Stream rs = req.GetRequestStream ()) {
293 } catch (WebException) {
294 // The operation has timed out
298 req.BeginGetResponse (null, null);
300 } catch (InvalidOperationException) {
301 // Cannot re-call BeginGetRequestStream/BeginGetResponse while
302 // a previous call is still in progress
306 // the temp file should not be in use
307 Directory.Delete (_tempDirectory, true);
311 public void ConnectionGroupName ()
313 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
314 Assert.IsNull (req.ConnectionGroupName, "#A");
315 req.ConnectionGroupName = "whatever";
316 Assert.IsNotNull (req.ConnectionGroupName, "#B1");
317 Assert.AreEqual ("whatever", req.ConnectionGroupName, "#B2");
318 req.ConnectionGroupName = string.Empty;
319 Assert.IsNotNull (req.ConnectionGroupName, "#C1");
320 Assert.AreEqual (string.Empty, req.ConnectionGroupName, "#C2");
321 req.ConnectionGroupName = null;
322 Assert.IsNull (req.ConnectionGroupName, "#D");
326 public void ContentLength ()
328 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
329 Assert.AreEqual (0, req.Headers.Count, "#A1");
330 Assert.AreEqual (0, req.ContentLength, "#A2");
331 req.ContentLength = 5;
332 Assert.AreEqual (5, req.ContentLength, "#A3");
333 Assert.AreEqual (0, req.Headers.Count, "#A4");
336 using (Stream s = req.GetRequestStream ()) {
338 Assert.AreEqual (5, req.ContentLength, "#B1");
340 Assert.AreEqual (5, req.ContentLength, "#B2");
342 Assert.AreEqual (5, req.ContentLength, "#B3");
344 Assert.AreEqual (5, req.ContentLength, "#B4");
348 public void ContentLength_Negative ()
350 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
352 req.ContentLength = -1;
354 } catch (ArgumentException ex) {
355 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
356 Assert.IsNotNull (ex.Message, "#3");
357 Assert.IsFalse (ex.Message == "value", "#4");
358 Assert.IsNotNull (ex.ParamName, "#5");
359 Assert.AreEqual ("value", ex.ParamName, "#6");
360 Assert.IsNull (ex.InnerException, "#7");
365 public void ContentType ()
367 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
368 Assert.AreEqual (0, req.Headers.Count, "#A1");
369 Assert.IsNull (req.ContentType, "#A2");
371 req.ContentType = "application/x-gzip";
372 Assert.AreEqual (1, req.Headers.Count, "#B1");
373 Assert.AreEqual ("Content-Type", req.Headers.GetKey (0), "#B2");
374 Assert.AreEqual ("application/x-gzip", req.Headers.Get (0), "#B3");
375 Assert.AreEqual ("application/x-gzip", req.ContentType, "#B4");
377 req.Headers.Set ("Content-Type", "image/png");
378 Assert.AreEqual ("image/png", req.ContentType, "#C1");
380 req.ContentType = null;
381 Assert.AreEqual (1, req.Headers.Count, "#D1");
382 Assert.AreEqual ("Content-Type", req.Headers.GetKey (0), "#D2");
383 Assert.AreEqual (string.Empty, req.Headers.Get (0), "#D3");
384 Assert.AreEqual (string.Empty, req.ContentType, "#D4");
386 req.Headers.Remove ("Content-Type");
387 Assert.AreEqual (0, req.Headers.Count, "#E1");
388 Assert.IsNull (req.ContentType, "#E2");
392 public void Credentials ()
394 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
395 Assert.IsNull (req.Credentials, "#1");
396 req.Credentials = new NetworkCredential ();
397 Assert.IsNotNull (req.Credentials, "#2");
398 req.Credentials = null;
399 Assert.IsNull (req.Credentials, "#3");
403 [Category ("NotWorking")]
404 public void GetRequestStream ()
406 FileWebRequest req = (FileWebRequest) WebRequest.Create (
410 FileStream fsA = null;
411 FileStream fsB = null;
413 fsA = req.GetRequestStream () as FileStream;
414 Assert.IsNotNull (fsA, "#A1");
416 req.GetRequestStream ();
418 } catch (WebException) {
419 // The operation has timed out
423 req.GetRequestStream ();
425 } catch (InvalidOperationException) {
426 // Cannot re-call BeginGetRequestStream/BeginGetResponse
427 // while a previous call is still in progress.
436 req = (FileWebRequest) WebRequest.Create (_tempFileUri);
440 fsA = req.GetRequestStream () as FileStream;
441 Assert.IsNotNull (fsA, "#B1");
444 req.GetRequestStream ();
446 } catch (WebException) {
447 // The operation has timed out
451 req.GetRequestStream ();
453 } catch (InvalidOperationException) {
454 // Cannot re-call BeginGetRequestStream/BeginGetResponse
455 // while a previous call is still in progress.
466 public void GetRequestStream_File_Exists ()
468 Stream s = File.Create (_tempFile);
470 FileWebRequest req = (FileWebRequest) WebRequest.Create (
473 s = req.GetRequestStream ();
478 public void GetRequestStream_Method_Valid ()
480 string [] methods = new string [] { "PUT", "POST", "CHECKOUT",
481 "DELETE", "OPTIONS", "TRACE", "GET ", "DUNNO" };
483 foreach (string method in methods) {
484 FileWebRequest req = (FileWebRequest) WebRequest.Create (
487 using (Stream s = req.GetRequestStream ()) {
488 Assert.IsNotNull (s, "#1:" + method);
489 Assert.IsFalse (s.CanRead, "#2:" + method);
490 Assert.IsTrue (s.CanSeek, "#3:" + method);
491 Assert.IsFalse (s.CanTimeout, "#4:" + method);
492 Assert.IsTrue (s.CanWrite, "#5:" + method);
493 Assert.AreEqual (0, s.Length, "#6:" + method);
494 Assert.AreEqual (0, s.Position, "#7:" + method);
496 int i = s.ReadTimeout;
497 Assert.Fail ("#8:" + method + "=>" + i);
498 } catch (InvalidOperationException) {
501 int i = s.WriteTimeout;
502 Assert.Fail ("#9:" + method + "=>" + i);
503 } catch (InvalidOperationException) {
510 public void GetRequestStream_Method_Invalid ()
512 string [] methods = new string [] { "GET", "get", "HEAD", "head",
513 "CONNECT", "connect"};
514 foreach (string method in methods) {
515 FileWebRequest req = (FileWebRequest) WebRequest.Create (
519 req.GetRequestStream ();
520 Assert.Fail ("#1:" + method);
521 } catch (ProtocolViolationException ex) {
522 Assert.AreEqual (typeof (ProtocolViolationException), ex.GetType (), "#2:" + method);
523 Assert.IsNotNull (ex.Message, "#3:" + method);
524 Assert.IsNull (ex.InnerException, "#4:" + method);
530 public void GetResponse_File_Exists ()
532 Stream s = File.Create (_tempFile);
534 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
535 FileWebResponse respA = null;
536 FileWebResponse respB = null;
538 respA = req.GetResponse () as FileWebResponse;
539 Assert.IsNotNull (respA, "#1");
540 respB = req.GetResponse () as FileWebResponse;
541 Assert.IsNotNull (respB, "#2");
542 Assert.AreSame (respA, respB, "#3");
552 public void GetResponse_File_DoesNotExist ()
554 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
558 } catch (WebException ex) {
559 Assert.AreEqual (typeof (WebException), ex.GetType (), "#1");
560 Assert.IsNotNull (ex.Message, "#2");
561 Assert.IsTrue (ex.Message.IndexOf ("FileWebRequestTest.tmp") != -1, "#3");
562 Assert.IsNull (ex.Response, "#4");
563 Assert.IsNotNull (ex.InnerException, "#5");
566 FileNotFoundException fnf = ex.InnerException as FileNotFoundException;
567 Assert.IsNotNull (fnf, "#6");
568 Assert.AreEqual (typeof (FileNotFoundException), fnf.GetType (), "#7");
569 Assert.IsNotNull (fnf.FileName, "#8");
570 Assert.IsTrue (fnf.FileName.IndexOf ("FileWebRequestTest.tmp") != -1, "#9");
571 Assert.IsNotNull (fnf.Message, "#10");
572 Assert.IsTrue (fnf.Message.IndexOf ("FileWebRequestTest.tmp") != -1, "#11");
573 Assert.IsNull (fnf.InnerException, "#12");
579 public void Method ()
581 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
582 Assert.IsNotNull (req.Method, "#A1");
583 Assert.AreEqual ("GET", req.Method, "#A2");
584 req.Method = "whatever";
585 Assert.IsNotNull (req.Method, "#B1");
586 Assert.AreEqual ("whatever", req.Method, "#B2");
588 Assert.IsNotNull (req.Method, "#C1");
589 Assert.AreEqual ("get ", req.Method, "#C2");
593 public void Method_Empty ()
595 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
597 req.Method = string.Empty;
599 } catch (ArgumentException ex) {
600 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
601 Assert.IsNotNull (ex.Message, "#3");
602 Assert.AreEqual ("value", ex.ParamName, "#4");
603 Assert.IsNull (ex.InnerException, "#5");
608 public void Method_Null ()
610 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
614 } catch (ArgumentException ex) {
615 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
616 Assert.IsNotNull (ex.Message, "#3");
617 Assert.AreEqual ("value", ex.ParamName, "#4");
618 Assert.IsNull (ex.InnerException, "#5");
623 public void PreAuthenticate ()
625 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
626 Assert.IsFalse (req.PreAuthenticate, "#1");
627 req.PreAuthenticate = true;
628 Assert.IsTrue (req.PreAuthenticate, "#2");
634 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
635 Assert.IsNull (req.Proxy, "#1");
636 req.Proxy = new WebProxy ();
637 Assert.IsNotNull (req.Proxy, "#2");
639 Assert.IsNull (req.Proxy, "#3");
643 public void RequestUri ()
645 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
646 Assert.AreSame (_tempFileUri, req.RequestUri);
650 public void Timeout ()
652 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
653 Assert.AreEqual (100000, req.Timeout, "#1");
654 req.Timeout = int.MaxValue;
655 Assert.AreEqual (int.MaxValue, req.Timeout, "#2");
657 Assert.AreEqual (0, req.Timeout, "#3");
661 public void Timeout_Negative ()
663 FileWebRequest req = (FileWebRequest) WebRequest.Create (_tempFileUri);
665 Assert.AreEqual (-1, req.Timeout, "#1");
669 } catch (ArgumentOutOfRangeException ex) {
670 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#3");
671 Assert.IsNotNull (ex.Message, "#4");
672 Assert.IsNotNull (ex.ParamName, "#5");
673 Assert.IsFalse (ex.ParamName == "value", "#6");
674 Assert.IsNull (ex.InnerException, "#7");
679 public void GetObjectData ()
681 FileWebRequest fwr = (FileWebRequest) WebRequest.Create ("file:///test.txt");
682 fwr.ConnectionGroupName = "CGN";
683 fwr.ContentLength = 10;
684 fwr.ContentType = "image/png";
685 fwr.Credentials = new NetworkCredential ("Miguel", "de Icaza", "Novell");
686 fwr.Headers.Add ("Disposition", "attach");
688 fwr.PreAuthenticate = true;
689 fwr.Proxy = new WebProxy ("proxy.ximian.com");
692 SerializationInfo si = new SerializationInfo (typeof (FileWebRequest),
693 new FormatterConverter ());
694 ((ISerializable) fwr).GetObjectData (si, new StreamingContext ());
695 Assert.AreEqual (9, si.MemberCount, "#A1");
697 foreach (SerializationEntry entry in si) {
698 Assert.IsNotNull (entry.Name, "#B1:" + i);
699 Assert.IsNotNull (entry.ObjectType, "#B2:" + i);
700 Assert.IsNotNull (entry.Value, "#B3:" + i);
704 Assert.AreEqual ("headers", entry.Name, "#B4:" + i);
705 Assert.AreEqual (typeof (WebHeaderCollection), entry.ObjectType, "#B5:" + i);
708 Assert.AreEqual ("proxy", entry.Name, "#B4:" + i);
709 Assert.AreEqual (typeof (IWebProxy), entry.ObjectType, "#B5:" + i);
712 Assert.AreEqual ("uri", entry.Name, "#B4:" + i);
713 Assert.AreEqual (typeof (Uri), entry.ObjectType, "#B5:" + i);
716 Assert.AreEqual ("connectionGroupName", entry.Name, "#B4:" + i);
717 Assert.AreEqual (typeof (string), entry.ObjectType, "#B5:" + i);
718 Assert.AreEqual ("CGN", entry.Value, "#B6:" + i);
721 Assert.AreEqual ("method", entry.Name, "#B4:" + i);
722 Assert.AreEqual (typeof (string), entry.ObjectType, "#B5:" + i);
723 Assert.AreEqual ("PUT", entry.Value, "#B6:" + i);
726 Assert.AreEqual ("contentLength", entry.Name, "#B4:" + i);
727 Assert.AreEqual (typeof (long), entry.ObjectType, "#B5:" + i);
728 Assert.AreEqual (10, entry.Value, "#B6:" + i);
731 Assert.AreEqual ("timeout", entry.Name, "#B4:" + i);
732 Assert.AreEqual (typeof (int), entry.ObjectType, "#B5:" + i);
733 Assert.AreEqual (20, entry.Value, "#B6:" + i);
736 Assert.AreEqual ("fileAccess", entry.Name, "#B4:" + i);
737 Assert.AreEqual (typeof (FileAccess), entry.ObjectType, "#B5:" + i);
738 Assert.AreEqual (FileAccess.Read, entry.Value, "#B6:" + i);
741 Assert.AreEqual ("preauthenticate", entry.Name, "#B4:" + i);
742 Assert.AreEqual (typeof (bool), entry.ObjectType, "#B5:" + i);
743 Assert.AreEqual (false, entry.Value, "#B6:" + i);
751 [Category ("NotWorking")] // Difference at index 272: 20 instead of 19
752 public void Serialize ()
754 FileWebRequest fwr = (FileWebRequest) WebRequest.Create ("file://test.txt/");
755 fwr.ConnectionGroupName = "CGN";
756 fwr.ContentLength = 10;
757 fwr.ContentType = "image/png";
758 fwr.Credentials = new NetworkCredential ("Miguel", "de Icaza", "Novell");
759 fwr.Headers.Add ("Disposition", "attach");
761 fwr.PreAuthenticate = true;
762 fwr.Proxy = new WebProxy ("proxy.ximian.com");
765 BinaryFormatter bf = new BinaryFormatter ();
766 bf.AssemblyFormat = FormatterAssemblyStyle.Full;
768 MemoryStream ms = new MemoryStream ();
769 bf.Serialize (ms, fwr);
772 byte [] buffer = new byte [ms.Length];
773 ms.Read (buffer, 0, buffer.Length);
774 Assert.AreEqual (_serialized, buffer);
778 public void Deserialize ()
780 MemoryStream ms = new MemoryStream ();
781 ms.Write (_serialized, 0, _serialized.Length);
784 BinaryFormatter bf = new BinaryFormatter ();
785 FileWebRequest req = (FileWebRequest) bf.Deserialize (ms);
786 Assert.AreEqual ("CGN", req.ConnectionGroupName, "#A1");
787 Assert.AreEqual (10, req.ContentLength, "#A2");
788 Assert.AreEqual ("image/png", req.ContentType, "#A3");
789 Assert.IsNull (req.Credentials, "#A4");
790 Assert.AreEqual ("PUT", req.Method, "#A5");
791 Assert.IsFalse (req.PreAuthenticate, "#A6");
792 Assert.AreEqual ("file://test.txt/", req.RequestUri.AbsoluteUri, "#A7");
793 Assert.AreEqual (20, req.Timeout, "#A8");
795 WebHeaderCollection headers = req.Headers;
796 Assert.IsNotNull (headers, "#C1");
797 Assert.AreEqual (2, headers.Count, "#C2");
798 Assert.AreEqual ("Content-Type", req.Headers.GetKey (0), "#C3");
799 Assert.AreEqual ("image/png", req.Headers.Get (0), "#C4");
800 Assert.AreEqual ("Disposition", req.Headers.GetKey (1), "#C5");
801 Assert.AreEqual ("attach", req.Headers.Get (1), "#C6");
803 WebProxy proxy = req.Proxy as WebProxy;
804 Assert.IsNotNull (proxy, "#D1");
805 Assert.AreEqual ("http://proxy.ximian.com/", proxy.Address.AbsoluteUri, "#D2");
806 Assert.IsNotNull (proxy.BypassArrayList, "#D3");
807 Assert.AreEqual (0, proxy.BypassArrayList.Count, "#D4");
808 Assert.IsNotNull (proxy.BypassList, "#D5");
809 Assert.AreEqual (0, proxy.BypassList.Length, "#D6");
810 Assert.IsFalse (proxy.BypassProxyOnLocal, "#D7");
811 Assert.IsNull (proxy.Credentials, "#D8");
814 private Uri GetTempFileUri ()
816 string tempFile = _tempFile;
818 // remove leading slash for absolute paths
819 tempFile = tempFile.TrimStart ('/');
821 tempFile = tempFile.Replace ('\\', '/');
823 return new Uri ("file:///" + tempFile);
826 private bool RunningOnUnix {
828 // check for Unix platforms - see FAQ for more details
829 // http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
830 int platform = (int) Environment.OSVersion.Platform;
831 return ((platform == 4) || (platform == 128) || (platform == 6));
835 private static readonly byte [] _serialized = new byte [] {
836 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00,
837 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x00,
838 0x49, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2c, 0x20, 0x56, 0x65,
839 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x32, 0x2e, 0x30, 0x2e, 0x30,
840 0x2e, 0x30, 0x2c, 0x20, 0x43, 0x75, 0x6c, 0x74, 0x75, 0x72, 0x65,
841 0x3d, 0x6e, 0x65, 0x75, 0x74, 0x72, 0x61, 0x6c, 0x2c, 0x20, 0x50,
842 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x6b,
843 0x65, 0x6e, 0x3d, 0x62, 0x37, 0x37, 0x61, 0x35, 0x63, 0x35, 0x36,
844 0x31, 0x39, 0x33, 0x34, 0x65, 0x30, 0x38, 0x39, 0x05, 0x01, 0x00,
845 0x00, 0x00, 0x19, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x4e,
846 0x65, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x57, 0x65, 0x62, 0x52,
847 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x09, 0x00, 0x00, 0x00, 0x07,
848 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x05, 0x70, 0x72, 0x6f,
849 0x78, 0x79, 0x03, 0x75, 0x72, 0x69, 0x13, 0x63, 0x6f, 0x6e, 0x6e,
850 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70,
851 0x4e, 0x61, 0x6d, 0x65, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64,
852 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x6e,
853 0x67, 0x74, 0x68, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74,
854 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73,
855 0x0f, 0x70, 0x72, 0x65, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74,
856 0x69, 0x63, 0x61, 0x74, 0x65, 0x04, 0x04, 0x04, 0x01, 0x01, 0x00,
857 0x00, 0x03, 0x00, 0x1e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e,
858 0x4e, 0x65, 0x74, 0x2e, 0x57, 0x65, 0x62, 0x48, 0x65, 0x61, 0x64,
859 0x65, 0x72, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
860 0x6e, 0x02, 0x00, 0x00, 0x00, 0x13, 0x53, 0x79, 0x73, 0x74, 0x65,
861 0x6d, 0x2e, 0x4e, 0x65, 0x74, 0x2e, 0x57, 0x65, 0x62, 0x50, 0x72,
862 0x6f, 0x78, 0x79, 0x02, 0x00, 0x00, 0x00, 0x0a, 0x53, 0x79, 0x73,
863 0x74, 0x65, 0x6d, 0x2e, 0x55, 0x72, 0x69, 0x02, 0x00, 0x00, 0x00,
864 0x09, 0x08, 0x14, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x49,
865 0x4f, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73,
866 0x73, 0x01, 0x02, 0x00, 0x00, 0x00, 0x09, 0x03, 0x00, 0x00, 0x00,
867 0x09, 0x04, 0x00, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x00, 0x06,
868 0x06, 0x00, 0x00, 0x00, 0x03, 0x43, 0x47, 0x4e, 0x06, 0x07, 0x00,
869 0x00, 0x00, 0x03, 0x50, 0x55, 0x54, 0x0a, 0x00, 0x00, 0x00, 0x00,
870 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0xf8, 0xff, 0xff,
871 0xff, 0x14, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x49, 0x4f,
872 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73,
873 0x01, 0x00, 0x00, 0x00, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f,
874 0x5f, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x05, 0x03, 0x00,
875 0x00, 0x00, 0x1e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x4e,
876 0x65, 0x74, 0x2e, 0x57, 0x65, 0x62, 0x48, 0x65, 0x61, 0x64, 0x65,
877 0x72, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
878 0x05, 0x00, 0x00, 0x00, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x01,
879 0x30, 0x01, 0x32, 0x01, 0x31, 0x01, 0x33, 0x00, 0x01, 0x01, 0x01,
880 0x01, 0x08, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06,
881 0x09, 0x00, 0x00, 0x00, 0x0c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
882 0x74, 0x2d, 0x54, 0x79, 0x70, 0x65, 0x06, 0x0a, 0x00, 0x00, 0x00,
883 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0x06,
884 0x0b, 0x00, 0x00, 0x00, 0x0b, 0x44, 0x69, 0x73, 0x70, 0x6f, 0x73,
885 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x06,
886 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x05, 0x04, 0x00, 0x00, 0x00,
887 0x13, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x4e, 0x65, 0x74,
888 0x2e, 0x57, 0x65, 0x62, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x04, 0x00,
889 0x00, 0x00, 0x0e, 0x5f, 0x42, 0x79, 0x70, 0x61, 0x73, 0x73, 0x4f,
890 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x0d, 0x5f, 0x50, 0x72, 0x6f,
891 0x78, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x0b, 0x5f,
892 0x42, 0x79, 0x70, 0x61, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x16,
893 0x5f, 0x55, 0x73, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
894 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73,
895 0x00, 0x04, 0x02, 0x00, 0x01, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65,
896 0x6d, 0x2e, 0x55, 0x72, 0x69, 0x02, 0x00, 0x00, 0x00, 0x01, 0x02,
897 0x00, 0x00, 0x00, 0x00, 0x09, 0x0d, 0x00, 0x00, 0x00, 0x0a, 0x00,
898 0x05, 0x05, 0x00, 0x00, 0x00, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65,
899 0x6d, 0x2e, 0x55, 0x72, 0x69, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x41,
900 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x55, 0x72, 0x69, 0x01,
901 0x02, 0x00, 0x00, 0x00, 0x06, 0x0e, 0x00, 0x00, 0x00, 0x10, 0x66,
902 0x69, 0x6c, 0x65, 0x3a, 0x2f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2e,
903 0x74, 0x78, 0x74, 0x2f, 0x01, 0x0d, 0x00, 0x00, 0x00, 0x05, 0x00,
904 0x00, 0x00, 0x06, 0x0f, 0x00, 0x00, 0x00, 0x18, 0x68, 0x74, 0x74,
905 0x70, 0x3a, 0x2f, 0x2f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x78,
906 0x69, 0x6d, 0x69, 0x61, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x0b