2009-06-12 Bill Holmes <billholmes54@gmail.com>
[mono.git] / mcs / class / corlib / Test / System.Security.Policy / ZoneTest.cs
1 //
2 // ZoneTest.cs - NUnit Test Cases for Zone
3 //
4 // Author:
5 //      Sebastien Pouliot  <sebastien@ximian.com>
6 //
7 // (C) 2003 Motus Technologies Inc. (http://www.motus.com)
8 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
9 //
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
17 // 
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 // 
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 //
29
30 using NUnit.Framework;
31 using System;
32 using System.IO;
33 using System.Reflection;
34 using System.Security;
35 using System.Security.Policy;
36
37 namespace MonoTests.System.Security.Policy {
38
39         [TestFixture]
40         public class ZoneTest : Assertion {
41
42                 [Test]
43                 public void MyComputer () 
44                 {
45                         Zone z = new Zone (SecurityZone.MyComputer);
46                         AssertEquals ("MyComputer.SecurityZone", SecurityZone.MyComputer, z.SecurityZone);
47                         Assert ("MyComputer.ToString", (z.ToString ().IndexOf ("<Zone>MyComputer</Zone>") >= 0));
48                         Zone zc = (Zone) z.Copy ();
49                         Assert ("MyComputer.Copy.Equals", z.Equals (zc));
50                         IPermission p = z.CreateIdentityPermission (null);
51                         AssertNotNull ("MyComputer.CreateIdentityPermission", p);
52
53                         Assert ("MyComputer.MyComputer.Equals", z.Equals (new Zone (SecurityZone.MyComputer)));
54                         Assert ("MyComputer.Intranet.Equals", !z.Equals (new Zone (SecurityZone.Intranet)));
55                         Assert ("MyComputer.Trusted.Equals", !z.Equals (new Zone (SecurityZone.Trusted)));
56                         Assert ("MyComputer.Internet.Equals", !z.Equals (new Zone (SecurityZone.Internet)));
57                         Assert ("MyComputer.Untrusted.Equals", !z.Equals (new Zone (SecurityZone.Untrusted)));
58                         Assert ("MyComputer.NoZone.Equals", !z.Equals (new Zone (SecurityZone.NoZone)));
59                         Assert ("MyComputer.Null.Equals", !z.Equals (null));
60                 }
61
62                 [Test]
63                 public void Intranet () 
64                 {
65                         Zone z = new Zone (SecurityZone.Intranet);
66                         AssertEquals ("Intranet.SecurityZone", SecurityZone.Intranet, z.SecurityZone);
67                         Assert ("Intranet.ToString", (z.ToString ().IndexOf ("<Zone>Intranet</Zone>") >= 0));
68                         Zone zc = (Zone) z.Copy ();
69                         Assert ("Intranet.Copy.Equals", z.Equals (zc));
70                         IPermission p = z.CreateIdentityPermission (null);
71                         AssertNotNull ("Intranet.CreateIdentityPermission", p);
72
73                         Assert ("Intranet.MyComputer.Equals", !z.Equals (new Zone (SecurityZone.MyComputer)));
74                         Assert ("Intranet.Intranet.Equals", z.Equals (new Zone (SecurityZone.Intranet)));
75                         Assert ("Intranet.Trusted.Equals", !z.Equals (new Zone (SecurityZone.Trusted)));
76                         Assert ("Intranet.Internet.Equals", !z.Equals (new Zone (SecurityZone.Internet)));
77                         Assert ("Intranet.Untrusted.Equals", !z.Equals (new Zone (SecurityZone.Untrusted)));
78                         Assert ("Intranet.NoZone.Equals", !z.Equals (new Zone (SecurityZone.NoZone)));
79                         Assert ("Intranet.Null.Equals", !z.Equals (null));
80                 }
81
82                 [Test]
83                 public void Trusted () 
84                 {
85                         Zone z = new Zone (SecurityZone.Trusted);
86                         AssertEquals ("Trusted.SecurityZone", SecurityZone.Trusted, z.SecurityZone);
87                         Assert ("Trusted.ToString", (z.ToString ().IndexOf ("<Zone>Trusted</Zone>") >= 0));
88                         Zone zc = (Zone) z.Copy ();
89                         Assert ("Trusted.Copy.Equals", z.Equals (zc));
90                         IPermission p = z.CreateIdentityPermission (null);
91                         AssertNotNull ("Trusted.CreateIdentityPermission", p);
92
93                         Assert ("Trusted.MyComputer.Equals", !z.Equals (new Zone (SecurityZone.MyComputer)));
94                         Assert ("Trusted.Intranet.Equals", !z.Equals (new Zone (SecurityZone.Intranet)));
95                         Assert ("Trusted.Trusted.Equals", z.Equals (new Zone (SecurityZone.Trusted)));
96                         Assert ("Trusted.Internet.Equals", !z.Equals (new Zone (SecurityZone.Internet)));
97                         Assert ("Trusted.Untrusted.Equals", !z.Equals (new Zone (SecurityZone.Untrusted)));
98                         Assert ("Trusted.NoZone.Equals", !z.Equals (new Zone (SecurityZone.NoZone)));
99                         Assert ("Trusted.Null.Equals", !z.Equals (null));
100                 }
101
102                 [Test]
103                 public void Internet () 
104                 {
105                         Zone z = new Zone (SecurityZone.Internet);
106                         AssertEquals ("Internet.SecurityZone", SecurityZone.Internet, z.SecurityZone);
107                         Assert ("Internet.ToString", (z.ToString ().IndexOf ("<Zone>Internet</Zone>") >= 0));
108                         Zone zc = (Zone) z.Copy ();
109                         Assert ("Internet.Copy.Equals", z.Equals (zc));
110                         IPermission p = z.CreateIdentityPermission (null);
111                         AssertNotNull ("Internet.CreateIdentityPermission", p);
112
113                         Assert ("Internet.MyComputer.Equals", !z.Equals (new Zone (SecurityZone.MyComputer)));
114                         Assert ("Internet.Intranet.Equals", !z.Equals (new Zone (SecurityZone.Intranet)));
115                         Assert ("Internet.Trusted.Equals", !z.Equals (new Zone (SecurityZone.Trusted)));
116                         Assert ("Internet.Internet.Equals", z.Equals (new Zone (SecurityZone.Internet)));
117                         Assert ("Internet.Untrusted.Equals", !z.Equals (new Zone (SecurityZone.Untrusted)));
118                         Assert ("Internet.NoZone.Equals", !z.Equals (new Zone (SecurityZone.NoZone)));
119                         Assert ("Internet.Null.Equals", !z.Equals (null));
120                 }
121
122                 [Test]
123                 public void Untrusted () 
124                 {
125                         Zone z = new Zone (SecurityZone.Untrusted);
126                         AssertEquals ("Untrusted.SecurityZone", SecurityZone.Untrusted, z.SecurityZone);
127                         Assert ("Untrusted.ToString", (z.ToString ().IndexOf ("<Zone>Untrusted</Zone>") >= 0));
128                         Zone zc = (Zone) z.Copy ();
129                         Assert ("Untrusted.Copy.Equals", z.Equals (zc));
130                         IPermission p = z.CreateIdentityPermission (null);
131                         AssertNotNull ("Untrusted.CreateIdentityPermission", p);
132
133                         Assert ("Untrusted.MyComputer.Equals", !z.Equals (new Zone (SecurityZone.MyComputer)));
134                         Assert ("Untrusted.Intranet.Equals", !z.Equals (new Zone (SecurityZone.Intranet)));
135                         Assert ("Untrusted.Trusted.Equals", !z.Equals (new Zone (SecurityZone.Trusted)));
136                         Assert ("Untrusted.Internet.Equals", !z.Equals (new Zone (SecurityZone.Internet)));
137                         Assert ("Untrusted.Untrusted.Equals", z.Equals (new Zone (SecurityZone.Untrusted)));
138                         Assert ("Untrusted.NoZone.Equals", !z.Equals (new Zone (SecurityZone.NoZone)));
139                         Assert ("Untrusted.Null.Equals", !z.Equals (null));
140                 }
141
142                 [Test]
143                 public void NoZone () 
144                 {
145                         Zone z = new Zone (SecurityZone.NoZone);
146                         AssertEquals ("NoZone.SecurityZone", SecurityZone.NoZone, z.SecurityZone);
147                         Assert ("NoZone.ToString", (z.ToString ().IndexOf ("<Zone>NoZone</Zone>") >= 0));
148                         Zone zc = (Zone) z.Copy ();
149                         Assert ("NoZone.Copy.Equals", z.Equals (zc));
150                         IPermission p = z.CreateIdentityPermission (null);
151                         AssertNotNull ("NoZone.CreateIdentityPermission", p);
152                         // NoZone isn't added to the XML / string of permissions
153                         Assert ("ToString!=NoZone", p.ToString ().IndexOf ("NoZone") < 0);
154
155                         Assert ("NoZone.MyComputer.Equals", !z.Equals (new Zone (SecurityZone.MyComputer)));
156                         Assert ("NoZone.Intranet.Equals", !z.Equals (new Zone (SecurityZone.Intranet)));
157                         Assert ("NoZone.Trusted.Equals", !z.Equals (new Zone (SecurityZone.Trusted)));
158                         Assert ("NoZone.Internet.Equals", !z.Equals (new Zone (SecurityZone.Internet)));
159                         Assert ("NoZone.Untrusted.Equals", !z.Equals (new Zone (SecurityZone.Untrusted)));
160                         Assert ("NoZone.NoZone.Equals", z.Equals (new Zone (SecurityZone.NoZone)));
161                         Assert ("NoZone.Null.Equals", !z.Equals (null));
162                 }
163
164                 [Test]
165                 [ExpectedException (typeof (ArgumentNullException))]
166                 public void CreateFromUrl_Null ()
167                 {
168                         Zone.CreateFromUrl (null);
169                 }
170
171                 string[] noZoneUrls = {
172                         String.Empty,                   // not accepted for a Site
173                 };
174
175                 [Test]
176                 public void CreateFromUrl_NoZone ()
177                 {
178                         foreach (string url in noZoneUrls) {
179                                 Zone z = Zone.CreateFromUrl (url);
180                                 AssertEquals (url, SecurityZone.NoZone, z.SecurityZone);
181                         }
182                 }
183
184                 // files are always rooted (Path.IsPathRooted) and exists (File.Exists)
185                 string[] myComputerUrls = {
186                         Path.GetTempFileName (),
187                         Assembly.GetExecutingAssembly ().Location,
188                 };
189
190                 [Test]
191                 public void CreateFromUrl_MyComputer ()
192                 {
193                         foreach (string u in myComputerUrls) {
194                                 string url = u;
195                                 Zone z = Zone.CreateFromUrl (url);
196                                 AssertEquals (url, SecurityZone.MyComputer, z.SecurityZone);
197
198                                 url = "file://" + u;
199                                 z = Zone.CreateFromUrl (url);
200                                 AssertEquals (url, SecurityZone.MyComputer, z.SecurityZone);
201
202                                 url = "FILE://" + u;
203                                 z = Zone.CreateFromUrl (url);
204                                 AssertEquals (url, SecurityZone.MyComputer, z.SecurityZone);
205                         }
206                 }
207
208                 string[] intranetUrls = {
209                         "file://mono/index.html",       // file:// isn't supported as a site
210                         "FILE://MONO/INDEX.HTML",
211                 };
212
213                 [Test]
214                 public void CreateFromUrl_Intranet ()
215                 {
216                         foreach (string url in intranetUrls) {
217                                 Zone z = Zone.CreateFromUrl (url);
218                                 AssertEquals (url, SecurityZone.Intranet, z.SecurityZone);
219                         }
220                 }
221
222                 string[] internetUrls = {
223                         "http://www.go-mono.com",
224                         "http://64.14.94.188/",
225                         "HTTP://WWW.GO-MONO.COM",
226                         "http://*.go-mono.com",
227                         "http://www.go-mono.com:8080/index.html",
228                         "mono://unknown/protocol",
229                         Path.DirectorySeparatorChar + "mono" + Path.DirectorySeparatorChar + "index.html",
230                 };
231
232                 [Test]
233                 public void CreateFromUrl_Internet ()
234                 {
235                         foreach (string url in internetUrls) {
236                                 Zone z = Zone.CreateFromUrl (url);
237                                 AssertEquals (url, SecurityZone.Internet, z.SecurityZone);
238                         }
239                 }
240
241                 [Test]
242                 public void ToString_ ()
243                 {
244                         Zone z = Zone.CreateFromUrl (String.Empty);
245                         string ts = z.ToString ();
246                         Assert ("Class", ts.StartsWith ("<System.Security.Policy.Zone"));
247                         Assert ("Version", (ts.IndexOf (" version=\"1\"") >= 0));
248                         Assert ("Zone", (ts.IndexOf ("<Zone>NoZone</Zone>") >= 0));
249                         Assert ("End", (ts.IndexOf ("</System.Security.Policy.Zone>") >= 0));
250                 }
251         }
252 }