2 // HttpCachePolicyCas.cs - CAS unit tests for System.Web.HttpCachePolicyCas
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using NUnit.Framework;
32 using System.Reflection;
33 using System.Security.Permissions;
36 namespace MonoCasTests.System.Web {
40 public class HttpCachePolicyCas : AspNetHostingMinimal {
42 private HttpResponse response;
45 public void FixtureSetUp ()
47 response = new HttpResponse (Console.Out);
50 private void Validate (HttpContext context, object data, ref HttpValidationStatus validationStatus)
55 [PermissionSet (SecurityAction.Deny, Unrestricted = true)]
56 public void Deny_Unrestricted ()
58 HttpCachePolicy cache = response.Cache;
59 Assert.IsNotNull (cache.VaryByHeaders, "VaryByHeaders");
60 Assert.IsNotNull (cache.VaryByParams, "VaryByParams");
61 cache.AddValidationCallback (new HttpCacheValidateHandler (Validate), null);
62 cache.AppendCacheExtension ("mono");
63 cache.SetCacheability (HttpCacheability.NoCache);
64 cache.SetCacheability (HttpCacheability.NoCache, "mono");
65 cache.SetETag ("etag");
67 cache.SetETagFromFileDependencies ();
69 catch (TypeInitializationException) {
70 // 1.1 tries to initialize HttpRuntime
72 catch (InvalidOperationException) {
75 cache.SetExpires (DateTime.MinValue);
76 cache.SetLastModified (DateTime.Now);
78 cache.SetLastModifiedFromFileDependencies ();
80 catch (InvalidOperationException) {
83 catch (NotImplementedException) {
86 cache.SetMaxAge (TimeSpan.FromTicks (1000));
88 cache.SetNoServerCaching ();
90 catch (NotImplementedException) {
96 catch (NotImplementedException) {
100 cache.SetNoTransforms ();
102 catch (NotImplementedException) {
105 cache.SetProxyMaxAge (TimeSpan.FromTicks (2000));
106 cache.SetRevalidation (HttpCacheRevalidation.None);
107 cache.SetSlidingExpiration (true);
109 cache.SetValidUntilExpires (true);
111 catch (NotImplementedException) {
114 cache.SetVaryByCustom ("custom");
115 cache.SetAllowResponseInBrowserHistory (true);
118 cache.SetOmitVaryStar (false);
120 catch (NotImplementedException) {
127 public override object CreateControl (SecurityAction action, AspNetHostingPermissionLevel level)
129 // no public ctor is available but we know that it's properties don't have any restrictions
130 MethodInfo mi = this.Type.GetProperty ("VaryByHeaders").GetGetMethod ();
131 Assert.IsNotNull (mi, "get_VaryByHeaders");
132 return mi.Invoke (response.Cache, null);
135 public override Type Type {
136 get { return typeof (HttpCachePolicy); }