2004-02-09 Sebastien Pouliot <sebastien@ximian.com>
[mono.git] / mcs / class / corlib / Test / System.Security.Policy / UrlMembershipConditionTest.cs
1 //
2 // UrlMembershipConditionTest.cs - NUnit Test Cases for UrlMembershipCondition
3 //
4 // Author:
5 //      Sebastien Pouliot (spouliot@motus.com)
6 //
7 // (C) 2004 Motus Technologies Inc. (http://www.motus.com)
8 //
9
10 using NUnit.Framework;
11 using System;
12 using System.Collections;
13 using System.Security;
14 using System.Security.Permissions;
15 using System.Security.Policy;
16
17 namespace MonoTests.System.Security.Policy {
18
19         [TestFixture]
20         public class UrlMembershipConditionTest : Assertion {
21
22                 [Test]
23                 [ExpectedException (typeof (ArgumentNullException))]
24                 public void UrlMembershipCondition_Null () 
25                 {
26                         UrlMembershipCondition umc = new UrlMembershipCondition (null);
27                 }
28
29                 [Test]
30                 [ExpectedException (typeof (FormatException))]
31                 public void UrlMembershipCondition_Empty () 
32                 {
33                         UrlMembershipCondition umc = new UrlMembershipCondition (String.Empty);
34                 }
35
36                 [Test]
37                 public void UrlMembershipCondition_FileUrl () 
38                 {
39                         UrlMembershipCondition umc = new UrlMembershipCondition ("file://mono/index.html");
40                 }
41
42                 [Test]
43                 public void UrlMembershipCondition_FullUrlWithPort () 
44                 {
45                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com:8080/index.html");
46                 }
47
48                 [Test]
49                 public void UrlMembershipCondition_GoMonoWebUrl () 
50                 {
51                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com/");
52                         AssertEquals ("Url", "http://www.go-mono.com/", umc.Url);
53                         AssertEquals ("ToString", "Url - http://www.go-mono.com/", umc.ToString ());
54
55                         UrlMembershipCondition umc2 = (UrlMembershipCondition) umc.Copy ();
56                         AssertEquals ("Copy.Url", umc.Url, umc2.Url);
57                         AssertEquals ("Copy.GetHashCode", umc.GetHashCode (), umc2.GetHashCode ());
58
59                         SecurityElement se = umc2.ToXml ();
60                         UrlMembershipCondition umc3 = new UrlMembershipCondition ("*");
61                         umc3.FromXml (se);
62                         AssertEquals ("ToXml/FromXml", umc.Url, umc3.Url);
63
64                         Assert ("Equals", umc.Equals (umc2));
65                         UrlMembershipCondition umc4 = new UrlMembershipCondition ("http://www.go-mono.com");
66                         // note that a last slash is added to Url - so it's equal
67                         Assert ("Equals-AutoAddedLastSlash", umc.Equals (umc4));
68                 }
69
70                 [Test]
71                 public void Url_AllGoMonoUrl () 
72                 {
73                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com/*");
74                         AssertEquals ("Url", "http://www.go-mono.com/*", umc.Url);
75                         AssertEquals ("ToString", "Url - http://www.go-mono.com/*", umc.ToString ());
76
77                         UrlMembershipCondition umc2 = (UrlMembershipCondition) umc.Copy ();
78                         AssertEquals ("Copy.Url", umc.Url, umc2.Url);
79                         AssertEquals ("Copy.GetHashCode", umc.GetHashCode (), umc2.GetHashCode ());
80
81                         SecurityElement se = umc2.ToXml ();
82                         UrlMembershipCondition umc3 = new UrlMembershipCondition ("*");
83                         umc3.FromXml (se);
84                         AssertEquals ("ToXml/FromXml", umc.Url, umc3.Url);
85
86                         Assert ("Equals", umc.Equals (umc2));
87                         UrlMembershipCondition umc4 = new UrlMembershipCondition ("http://www.go-mono.com/");
88                         Assert ("Equals-*", umc.Equals (umc4));
89                 }
90
91                 [Test]
92                 [ExpectedException (typeof (ArgumentException))]
93                 [Ignore ("not currently supported by Mono - CAS related")]
94                 public void Url_InvalidSite ()
95                 {
96                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.*");
97                 }
98
99                 [Test]
100                 public void Url_NoProtocol () 
101                 {
102                         UrlMembershipCondition umc = new UrlMembershipCondition ("www.go-mono.com");
103                         // note: no last slash here
104                         AssertEquals ("Url", "file://WWW.GO-MONO.COM", umc.Url);
105                         AssertEquals ("ToString", "Url - file://WWW.GO-MONO.COM", umc.ToString ());
106                 }
107
108                 [Test]
109                 public void Url_WellKnownProtocol () 
110                 {
111                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
112                         AssertEquals ("Url", "http://www.go-mono.com/", umc.Url);
113                         AssertEquals ("ToString", "Url - http://www.go-mono.com/", umc.ToString ());
114
115                         umc = new UrlMembershipCondition ("https://www.go-mono.com");
116                         AssertEquals ("Url", "https://www.go-mono.com/", umc.Url);
117                         AssertEquals ("ToString", "Url - https://www.go-mono.com/", umc.ToString ());
118
119                         umc = new UrlMembershipCondition ("ftp://www.go-mono.com");
120                         AssertEquals ("Url", "ftp://www.go-mono.com/", umc.Url);
121                         AssertEquals ("ToString", "Url - ftp://www.go-mono.com/", umc.ToString ());
122
123                         umc = new UrlMembershipCondition ("file://www.go-mono.com");
124                         AssertEquals ("Url", "file://WWW.GO-MONO.COM", umc.Url);
125                         AssertEquals ("ToString", "Url - file://WWW.GO-MONO.COM", umc.ToString ());
126                 }
127
128                 [Test]
129                 public void Url_UnknownProtocol () 
130                 {
131                         UrlMembershipCondition umc = new UrlMembershipCondition ("mono://www.go-mono.com");
132                         AssertEquals ("Url", "mono://www.go-mono.com/", umc.Url);
133                         AssertEquals ("ToString", "Url - mono://www.go-mono.com/", umc.ToString ());
134                 }
135
136                 [Test]
137                 public void Url_RelativePath () 
138                 {
139                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com/path/../newpath/index.html");
140                         AssertEquals ("Url", "http://www.go-mono.com/path/../newpath/index.html", umc.Url);
141                         AssertEquals ("ToString", "Url - http://www.go-mono.com/path/../newpath/index.html", umc.ToString ());
142                 }
143
144                 [Test]
145                 [ExpectedException (typeof (ArgumentNullException))]
146                 public void Url_Null () 
147                 {
148                         UrlMembershipCondition umc = new UrlMembershipCondition ("ftp://www.go-mono.com");
149                         umc.Url = null;
150                 }
151
152                 [Test]
153                 [ExpectedException (typeof (FormatException))]
154                 public void Url_Empty () 
155                 {
156                         UrlMembershipCondition umc = new UrlMembershipCondition ("ftp://www.go-mono.com");
157                         umc.Url = String.Empty;
158                 }
159
160                 [Test]
161                 public void CheckNull () 
162                 {
163                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
164                         Assert ("Check(null)", !umc.Check (null));
165                 }
166
167                 [Test]
168                 public void CheckPositive () 
169                 {
170                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
171                         Evidence e = new Evidence ();
172                         e.AddHost (new Url ("http://www.go-mono.com"));
173                         Assert ("Check(+)", umc.Check (e));
174                 }
175
176                 [Test]
177                 public void CheckPositive_Partial () 
178                 {
179                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com/*");
180                         Evidence e = new Evidence ();
181                         e.AddHost (new Url ("http://www.go-mono.com/index.html"));
182                         Assert ("Check(+-)", umc.Check (e));
183                 }
184
185                 [Test]
186                 public void CheckNegative () 
187                 {
188                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
189                         Evidence e = new Evidence ();
190                         e.AddHost (new Url ("http://www.go-mono.org"));
191                         Assert ("Check(-)", !umc.Check (e));
192                 }
193
194                 [Test]
195                 public void CheckNegative_NoUrlEvidence () 
196                 {
197                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
198                         Evidence e = new Evidence ();
199                         e.AddHost (new Zone (SecurityZone.MyComputer));
200                         Assert ("Check(?)", !umc.Check (e));
201                 }
202
203                 [Test]
204                 public void CheckMultipleEvidences () 
205                 {
206                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
207                         Evidence e = new Evidence ();
208                         e.AddHost (new Url ("http://www.go-mono.org")); // the bad
209                         e.AddHost (new Url ("http://www.go-mono.com")); // the good
210                         e.AddHost (new Zone (SecurityZone.MyComputer)); // and the ugly (couldn't resist ;)
211                         Assert ("Check(n)", umc.Check (e));
212                         // check all Url evidence (i.e. do not stop at the first Url evidence)
213                 }
214
215                 [Test]
216                 public void EqualsCaseSensitive_Http () 
217                 {
218                         UrlMembershipCondition umc1 = new UrlMembershipCondition ("http://www.go-mono.com");
219                         UrlMembershipCondition umc2 = new UrlMembershipCondition ("http://www.Go-Mono.com");
220                         Assert ("CaseSensitive", umc1.Equals (umc2));
221                 }
222
223                 [Test]
224                 public void EqualsCaseSensitive_File () 
225                 {
226                         UrlMembershipCondition umc1 = new UrlMembershipCondition ("file://MONO");
227                         UrlMembershipCondition umc2 = new UrlMembershipCondition ("file://mono");
228                         Assert ("CaseSensitive", umc1.Equals (umc2));
229                 }
230
231                 [Test]
232                 public void EqualsNull () 
233                 {
234                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
235                         Assert ("EqualsNull", !umc.Equals (null));
236                 }
237
238                 [Test]
239                 [ExpectedException (typeof (ArgumentNullException))]
240                 public void FromXmlNull () 
241                 {
242                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
243                         umc.FromXml (null);
244                 }
245
246                 [Test]
247                 [ExpectedException (typeof (ArgumentException))]
248                 public void FromXmlInvalid () 
249                 {
250                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
251                         SecurityElement se = umc.ToXml ();
252                         se.Tag = "IMonoship";
253                         umc.FromXml (se);
254                 }
255
256                 [Test]
257                 public void FromXmlPolicyLevel () 
258                 {
259                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
260                         SecurityElement se = umc.ToXml ();
261                         // is it accepted for all policy levels ?
262                         IEnumerator e = SecurityManager.PolicyHierarchy ();
263                         while (e.MoveNext ()) {
264                                 PolicyLevel pl = e.Current as PolicyLevel;
265                                 UrlMembershipCondition spl = new UrlMembershipCondition ("*");
266                                 spl.FromXml (se, pl);
267                                 Assert ("FromXml(PolicyLevel='" + pl.Label + "')", spl.Equals (umc));
268                         }
269                         // yes!
270                 }
271
272                 [Test]
273                 public void ToXmlNull () 
274                 {
275                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
276                         // no ArgumentNullException here
277                         SecurityElement se = umc.ToXml (null);
278                         AssertNotNull ("ToXml(null)", se);
279                 }
280
281                 [Test]
282                 public void ToXmlPolicyLevel () 
283                 {
284                         UrlMembershipCondition umc = new UrlMembershipCondition ("http://www.go-mono.com");
285                         SecurityElement se = umc.ToXml ();
286                         string s = umc.ToXml ().ToString ();
287                         // is it accepted for all policy levels ?
288                         IEnumerator e = SecurityManager.PolicyHierarchy ();
289                         while (e.MoveNext ()) {
290                                 PolicyLevel pl = e.Current as PolicyLevel;
291                                 UrlMembershipCondition spl = new UrlMembershipCondition ("*");
292                                 spl.FromXml (se, pl);
293                                 AssertEquals ("ToXml(PolicyLevel='" + pl.Label + "')", s, spl.ToXml (pl).ToString ());
294                         }
295                         // yes!
296                 }
297
298                 [Test]
299                 public void ToFromXmlRoundTrip () 
300                 {
301                         UrlMembershipCondition umc1 = new UrlMembershipCondition ("http://www.go-mono.com");
302                         SecurityElement se = umc1.ToXml ();
303
304                         UrlMembershipCondition umc2 = new UrlMembershipCondition ("*");
305                         umc2.FromXml (se);
306
307                         AssertEquals ("ToFromXmlRoundTrip", umc1.GetHashCode (), umc2.GetHashCode ());
308                 }
309         }
310 }