1 //
2 // CryptoConfigCas.cs -
3 //	CAS unit tests for System.Security.Cryptography.CryptoConfig
4 //
5 // Author:
6 //	Sebastien Pouliot  <sebastien@ximian.com>
7 //
8 // Copyright (C) 2005 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 
32 using System;
33 using System.Reflection;
34 using System.Security;
35 using System.Security.Cryptography;
36 using System.Security.Permissions;
37 
38 namespace MonoCasTests.System.Security.Cryptography {
39 
40 	[TestFixture]
41 	[Category ("CAS")]
42 	public class CryptoConfigCas {
43 
44 		private MethodInfo create1;
45 		private MethodInfo create2;
46 
47 		[SetUp]
SetUp()48 		public void SetUp ()
49 		{
50 			if (!SecurityManager.SecurityEnabled)
51 				Assert.Ignore ("SecurityManager.SecurityEnabled is OFF");
52 
53 			Type t = typeof (CryptoConfig);
54 
55 			Type[] one = new Type [1] { typeof (string) };
56 			create1 = t.GetMethod ("CreateFromName", one);
57 
58 			Type[] two = new Type [2] { typeof (string), typeof (object[]) };
59 			create2 = t.GetMethod ("CreateFromName", two);
60 		}
61 
62 		// Partial Trust Tests - i.e. call "normal" unit with reduced privileges
63 
64 		[Test]
65 		[PermissionSet (SecurityAction.Deny, Unrestricted = true)]
PartialTrust_DenyUnrestricted_Success()66 		public void PartialTrust_DenyUnrestricted_Success ()
67 		{
68 			MonoTests.System.Security.Cryptography.CryptoConfigTest cct = new MonoTests.System.Security.Cryptography.CryptoConfigTest ();
69 			// call most (all but arguments checking) unit tests from CryptoConfigTest
70 			cct.CCToString ();
71 			cct.CreateFromName ();
72 			cct.EncodeOID ();
73 			cct.MapNameToOID ();
74 		}
75 
76 		[Test]
77 		[PermissionSet (SecurityAction.Deny, Unrestricted = true)]
78 		[ExpectedException (typeof (SecurityException))]
79 		[Category ("NotWorking")]
PartialTrust_DenyUnrestricted_CreateFromURL()80 		public void PartialTrust_DenyUnrestricted_CreateFromURL ()
81 		{
82 			MonoTests.System.Security.Cryptography.CryptoConfigTest cct = new MonoTests.System.Security.Cryptography.CryptoConfigTest ();
83 			// this test must load System.Security to create some types
84 			cct.CreateFromURL ();
85 		}
86 
87 		// we use reflection to call CryptoConfig as the CreateFromName methods are
88 		// protected by LinkDemand (which will be converted into full demand, i.e.
89 		// a stack walk) when reflection is used (i.e. it gets testable).
90 
91 		[Test]
92 		[PermissionSet (SecurityAction.Deny, Unrestricted = true)]
CreateFromName1()93 		public void CreateFromName1 ()
94 		{
95 			Assert.IsNotNull (create1.Invoke (null, new object [1] { "DES" }), "1");
96 			// No restriction for the string only version
97 		}
98 
99 		[Test]
100 		[PermissionSet (SecurityAction.Deny, Unrestricted = true)]
101 		[ExpectedException (typeof (SecurityException))]
CreateFromName2()102 		public void CreateFromName2 ()
103 		{
104 			Assert.IsNotNull (create2.Invoke (null, new object [2] { "DES", new object [0] }), "2");
105 		}
106 	}
107 }
108