2010-01-15 Jonathan Pobst <monkey@jpobst.com>
[mono.git] / mcs / class / System / Test / System.Net / FileWebRequestCas.cs
1 //
2 // FileWebRequestCas.cs - CAS unit tests for System.Net.WebRequest class
3 //
4 // Author:
5 //      Sebastien Pouliot  <sebastien@ximian.com>
6 //
7 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
8 //
9
10 using NUnit.Framework;
11
12 using System;
13 using System.IO;
14 using System.Net;
15 using System.Security;
16 using System.Security.Permissions;
17 using System.Threading;
18
19 namespace MonoCasTests.System.Net {
20
21         [TestFixture]
22         [Category ("CAS")]
23         public class FileWebRequestCas {
24
25                 private const int timeout = 30000;
26
27                 static ManualResetEvent reset;
28                 private string message;
29                 private string uri;
30                 private string file;
31
32                 [TestFixtureSetUp]
33                 public void FixtureSetUp ()
34                 {
35                         reset = new ManualResetEvent (false);
36                 }
37
38                 [TestFixtureTearDown]
39                 public void FixtureTearDown ()
40                 {
41                         reset.Close ();
42                 }
43
44                 [SetUp]
45                 public void SetUp ()
46                 {
47                         if (!SecurityManager.SecurityEnabled)
48                                 Assert.Ignore ("SecurityManager.SecurityEnabled is OFF");
49
50                         // unique uri for each test
51                         file = Path.GetTempFileName ();
52                         // to please both Windows and Unix file systems
53                         uri = ((file [0] == '/') ? "file://" : "file:///") + file.Replace ('\\', '/');
54                 }
55
56                 // async tests (for stack propagation)
57
58                 private void GetRequestStreamCallback (IAsyncResult ar)
59                 {
60                         FileWebRequest fwr = (FileWebRequest)ar.AsyncState;
61                         fwr.EndGetRequestStream (ar);
62                         try {
63                                 // can we do something bad here ?
64                                 Assert.IsNotNull (Environment.GetEnvironmentVariable ("USERNAME"));
65                                 message = "Expected a SecurityException";
66                         }
67                         catch (SecurityException) {
68                                 message = null;
69                                 reset.Set ();
70                         }
71                         catch (Exception e) {
72                                 message = e.ToString ();
73                         }
74                 }
75
76                 [Test]
77                 [EnvironmentPermission (SecurityAction.Deny, Read = "USERNAME")]
78                 public void AsyncGetRequestStream ()
79                 {
80                         if (File.Exists (file))
81                                 File.Delete (file);
82                         FileWebRequest w = (FileWebRequest)WebRequest.Create (uri);
83                         w.Method = "PUT";
84                         message = "AsyncGetRequestStream";
85                         reset.Reset ();
86                         IAsyncResult r = w.BeginGetRequestStream (new AsyncCallback (GetRequestStreamCallback), w);
87                         Assert.IsNotNull (r, "IAsyncResult");
88                         if (!reset.WaitOne (timeout, true))
89                                 Assert.Ignore ("Timeout");
90                         Assert.IsNull (message, message);
91                 }
92
93                 private void GetResponseCallback (IAsyncResult ar)
94                 {
95                         FileWebRequest fwr = (FileWebRequest)ar.AsyncState;
96                         fwr.EndGetResponse (ar);
97                         try {
98                                 // can we do something bad here ?
99                                 Assert.IsNotNull (Environment.GetEnvironmentVariable ("USERNAME"));
100                                 message = "Expected a SecurityException";
101                         }
102                         catch (SecurityException) {
103                                 message = null;
104                                 reset.Set ();
105                         }
106                         catch (Exception e) {
107                                 message = e.ToString ();
108                         }
109                 }
110
111                 [Test]
112                 [EnvironmentPermission (SecurityAction.Deny, Read = "USERNAME")]
113                 public void AsyncGetResponse ()
114                 {
115                         FileWebRequest w = (FileWebRequest)WebRequest.Create (uri);
116                         message = "AsyncGetResponse";
117                         reset.Reset ();
118                         IAsyncResult r = w.BeginGetResponse (new AsyncCallback (GetResponseCallback), w);
119                         Assert.IsNotNull (r, "IAsyncResult");
120                         if (!reset.WaitOne (timeout, true))
121                                 Assert.Ignore ("Timeout");
122                         Assert.IsNull (message, message);
123                 }
124         }
125 }