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