| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- //
- // FileWebRequestTest.cs - NUnit Test Cases for System.Net.FileWebRequest
- //
- // Authors:
- // Lawrence Pit ([email protected])
- // Martin Willemoes Hansen ([email protected])
- //
- // (C) 2003 Martin Willemoes Hansen
- //
- using NUnit.Framework;
- using System;
- using System.IO;
- using System.Net;
- using System.Collections;
- using System.Security;
- using System.Security.Permissions;
- namespace MonoTests.System.Net
- {
- [TestFixture]
- public class FileWebRequestTest
- {
- [Test]
- public void Async ()
- {
- string tmpFilename = GetFilename ();
- if (tmpFilename == null) {
- Console.WriteLine ("\n\nSet environment variable TMPDIR to a temporary directory to test FileWebRequest\n");
- return;
- }
-
- try {
- if (File.Exists (tmpFilename))
- File.Delete (tmpFilename);
-
- Uri uri = new Uri ("file:///" + tmpFilename);
-
- WebRequest req = WebRequest.Create (uri);
- req.Method = "PUT";
-
- req.Timeout = 2 * 1000;
- IAsyncResult async = req.BeginGetRequestStream (null, null);
- try {
- req.BeginGetRequestStream (null, null);
- Assertion.Fail ("#1 should've failed");
- } catch (InvalidOperationException) {
- //Console.WriteLine ("GOT1: " + e.Message + "\n" + e.StackTrace);
- // Cannot re-call BeginGetRequestStream/BeginGetResponse while
- // a previous call is still in progress
- }
- /*
- try {
- req.BeginGetResponse (null, null);
- Assertion.Fail ("#2 should've failed");
- } catch (InvalidOperationException) { }
- */
- try {
- req.GetRequestStream ();
- Assertion.Fail ("#3 should've failed");
- } catch (InvalidOperationException) {
- // Console.WriteLine ("GOT3: " + e.Message + "\n" + e.StackTrace);
- // Cannot re-call BeginGetRequestStream/BeginGetResponse while
- // a previous call is still in progress
- }
- try {
- req.GetResponse ();
- Assertion.Fail ("#4 should've failed");
- } catch (WebException) {
- // Console.WriteLine ("4: " + e.Message + "\n" + e.StackTrace);
- // The operation has timed out
- }
- try {
- IAsyncResult async0 = req.BeginGetResponse (null, null);
- req.EndGetResponse (async0);
- // Console.WriteLine ("X5c");
- Assertion.Fail ("#5 should've failed");
- } catch (InvalidOperationException) {
- // Console.WriteLine ("5e: " + e.Message + "\n" + e.StackTrace);
- // Cannot re-call BeginGetRequestStream/BeginGetResponse while
- // a previous call is still in progress
- }
-
- // Console.WriteLine ("WEBHEADERS: " + req.Headers);
-
- Stream wstream = req.EndGetRequestStream (async);
- Assertion.AssertEquals ("#1r", false, wstream.CanRead);
- Assertion.AssertEquals ("#1w", true, wstream.CanWrite);
- Assertion.AssertEquals ("#1s", true, wstream.CanSeek);
- wstream.WriteByte (72);
- wstream.WriteByte (101);
- wstream.WriteByte (108);
- wstream.WriteByte (108);
- wstream.WriteByte (111);
- wstream.Close ();
-
- // stream written
- req = WebRequest.Create (uri);
- WebResponse res = req.GetResponse ();
-
- try {
- req.BeginGetRequestStream (null, null);
- Assertion.Fail ("#20: should've failed");
- } catch (InvalidOperationException) {
- // Console.WriteLine ("20: " + e.Message + "\n" + e.StackTrace);
- // Cannot send a content-body with this verb-type
- }
-
- try {
- req.Method = "PUT";
- req.BeginGetRequestStream (null, null);
- Assertion.Fail ("#21: should've failed");
- } catch (InvalidOperationException) {
- // Console.WriteLine ("21: " + e.Message + "\n" + e.StackTrace);
- // This operation cannot be perfomed after the request has been submitted.
- }
-
- try {
- //IAsyncResult async2 = req.BeginGetResponse (null, null);
- //Console.WriteLine ("OK!");
- req.GetResponse ();
- //Assertion.Fail ("#22: should've failed");
- } catch (InvalidOperationException) {
- //Console.WriteLine ("22: " + e.Message + "\n" + e.StackTrace);
- // Cannot re-call BeginGetRequestStream/BeginGetResponse while
- // a previous call is still in progress
- Assertion.Fail ("#22: should not have failed");
- }
-
- try {
- IAsyncResult async2 = req.BeginGetResponse (null, null);
-
- // this succeeds !!
-
- try {
- WebResponse res2 = req.EndGetResponse (async2);
-
- // and this succeeds
-
- Assertion.AssertEquals ("#23", res, res2) ;
-
- //Assertion.Fail ("#23: should've failed");
- } catch (InvalidOperationException) {
- //Console.WriteLine ("22: " + e.Message + "\n" + e.StackTrace);
- // Cannot re-call BeginGetRequestStream/BeginGetResponse while
- // a previous call is still in progress
- }
-
- // Assertion.Fail ("#22: should've failed");
- } catch (InvalidOperationException) {
- }
- Assertion.AssertEquals ("#2 len", (long) 5, res.ContentLength);
- Assertion.AssertEquals ("#2 type", "binary/octet-stream", res.ContentType);
- Assertion.AssertEquals ("#2 scheme", "file", res.ResponseUri.Scheme);
-
- Stream rstream = res.GetResponseStream ();
- Assertion.AssertEquals ("#3r", true, rstream.CanRead);
- Assertion.AssertEquals ("#3w", false, rstream.CanWrite);
- Assertion.AssertEquals ("#3s", true, rstream.CanSeek);
-
- Assertion.AssertEquals ("#4a", 72, rstream.ReadByte ());
- Assertion.AssertEquals ("#4b", 101, rstream.ReadByte ());
- Assertion.AssertEquals ("#4c", 108, rstream.ReadByte ());
- rstream.Close ();
- // res.Close ();
-
- try {
- long len = res.ContentLength;
- Assertion.AssertEquals ("#5", (long) 5, len);
- } catch (ObjectDisposedException) {
- Assertion.Fail ("#disposed contentlength");
- }
- try {
- WebHeaderCollection w = res.Headers;
- } catch (ObjectDisposedException) {
- Assertion.Fail ("#disposed headers");
- }
- try {
- res.Close ();
- } catch (ObjectDisposedException) {
- Assertion.Fail ("#disposed close");
- }
- } catch (Exception) {
- // Console.WriteLine ("ERROR! : " + ee.Message + "\n" + ee.StackTrace);
- } finally {
- try {
- // known bug #24940
- File.Delete (tmpFilename);
- } catch (Exception) {
- // Console.WriteLine ("ERROR2! : " + ee2.Message + "\n" + ee2.StackTrace);
- }
- }
- }
-
- [Test]
- public void Sync ()
- {
- string tmpFilename = GetFilename ();
- if (tmpFilename == null)
- return;
-
- try {
- if (File.Exists (tmpFilename))
- File.Delete (tmpFilename);
-
- Uri uri = new Uri ("file:///" + tmpFilename);
-
- WebRequest req = WebRequest.Create (uri);
-
- try {
- Stream stream = req.GetRequestStream ();
- Assertion.Fail ("should throw exception");
- } catch (ProtocolViolationException) {}
-
- req.Method = "PUT";
-
- Stream wstream = req.GetRequestStream ();
- Assertion.AssertEquals ("#1r", false, wstream.CanRead);
- Assertion.AssertEquals ("#1w", true, wstream.CanWrite);
- Assertion.AssertEquals ("#1s", true, wstream.CanSeek);
- wstream.WriteByte (72);
- wstream.WriteByte (101);
- wstream.WriteByte (108);
- wstream.WriteByte (108);
- wstream.WriteByte (111);
- wstream.Close ();
-
- // stream written
-
- req = WebRequest.Create (uri);
- WebResponse res = req.GetResponse ();
- Assertion.AssertEquals ("#2 len", (long) 5, res.ContentLength);
- Assertion.AssertEquals ("#2 type", "binary/octet-stream", res.ContentType);
- Assertion.AssertEquals ("#2 scheme", "file", res.ResponseUri.Scheme);
-
- Stream rstream = res.GetResponseStream ();
- Assertion.AssertEquals ("#3r", true, rstream.CanRead);
- Assertion.AssertEquals ("#3w", false, rstream.CanWrite);
- Assertion.AssertEquals ("#3s", true, rstream.CanSeek);
-
- Assertion.AssertEquals ("#4a", 72, rstream.ReadByte ());
- Assertion.AssertEquals ("#4b", 101, rstream.ReadByte ());
- Assertion.AssertEquals ("#4c", 108, rstream.ReadByte ());
-
- rstream.Close ();
- // res.Close ();
-
- try {
- long len = res.ContentLength;
- Assertion.AssertEquals ("#5", (long) 5, len);
- } catch (ObjectDisposedException) {
- Assertion.Fail ("#disposed contentlength");
- }
- try {
- WebHeaderCollection w = res.Headers;
- } catch (ObjectDisposedException) {
- Assertion.Fail ("#disposed headers");
- }
- try {
- res.Close ();
- } catch (ObjectDisposedException) {
- Assertion.Fail ("#disposed close");
- }
-
- } finally {
- try {
- File.Delete (tmpFilename);
- } catch (Exception) { }
- }
- }
-
- private string GetFilename ()
- {
- string tmpdir = Environment.GetEnvironmentVariable ("TMPDIR");
- if (tmpdir == null || tmpdir.Length == 0) {
- return null;
- }
-
- tmpdir = tmpdir.Replace ('\\', '/');
- if (tmpdir [tmpdir.Length - 1] != '/')
- tmpdir += "/";
- return tmpdir + "FileWebRequestTest.tmp";
- }
- }
- }
|