1 // 2 // ConsoleCas.cs - CAS unit tests for System.Console 3 // 4 // Author: 5 // Sebastien Pouliot <sebastien@ximian.com> 6 // 7 // Copyright (C) 2005 Novell, Inc (http://www.novell.com) 8 // 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: 16 // 17 // The above copyright notice and this permission notice shall be 18 // included in all copies or substantial portions of the Software. 19 // 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. 27 // 28 29 using NUnit.Framework; 30 31 using System; 32 using System.IO; 33 using System.Security; 34 using System.Security.Permissions; 35 36 namespace MonoCasTests.System { 37 38 [TestFixture] 39 [Category ("CAS")] 40 public class ConsoleCas { 41 42 [SetUp] SetUp()43 public void SetUp () 44 { 45 if (!SecurityManager.SecurityEnabled) 46 Assert.Ignore ("SecurityManager.SecurityEnabled is OFF"); 47 } 48 49 // Partial Trust Tests - i.e. call "normal" unit with reduced privileges 50 51 [Test] 52 [PermissionSet (SecurityAction.Deny, Unrestricted = true)] PartialTrust_DenyUnrestricted_Success()53 public void PartialTrust_DenyUnrestricted_Success () 54 { 55 MonoTests.System.ConsoleTest ct = new MonoTests.System.ConsoleTest (); 56 // call most unit tests from ConsoleTest 57 ct.TestError (); 58 ct.TestIn (); 59 ct.TestOut (); 60 ct.TestOpenStandardError (); 61 ct.TestOpenStandardInput (); 62 ct.TestOpenStandardOutput (); 63 } 64 65 [Test] 66 [SecurityPermission (SecurityAction.PermitOnly, UnmanagedCode = true)] PartialTrust_PermitOnly_UnmanagedCode()67 public void PartialTrust_PermitOnly_UnmanagedCode () 68 { 69 MonoTests.System.ConsoleTest ct = new MonoTests.System.ConsoleTest (); 70 // call unit tests from ConsoleTest that requires UnmanagedCode to work 71 ct.TestSetError (); 72 ct.TestSetIn (); 73 ct.TestSetOut (); 74 ct.TestRead (); 75 ct.TestReadLine (); 76 ct.TestWrite (); 77 ct.TestWriteLine (); 78 } 79 80 // Console is using restricted stuff (like opening FileStream 81 // with handles) but isn't restricted itself - so we must 82 // assert the required permission in Console 83 84 [Test] 85 [PermissionSet (SecurityAction.Deny, Unrestricted = true)] OpenStandardError()86 public void OpenStandardError () 87 { 88 Stream s = Console.OpenStandardError (); 89 Assert.IsNotNull (s, "1"); 90 s = Console.OpenStandardError (1024); 91 Assert.IsNotNull (s, "2"); 92 } 93 94 [Test] 95 [PermissionSet (SecurityAction.Deny, Unrestricted = true)] OpenStandardInput()96 public void OpenStandardInput () 97 { 98 Stream s = Console.OpenStandardInput (); 99 Assert.IsNotNull (s, "1"); 100 s = Console.OpenStandardInput (1024); 101 Assert.IsNotNull (s, "2"); 102 } 103 104 [Test] 105 [PermissionSet (SecurityAction.Deny, Unrestricted = true)] OpenStandardOutput()106 public void OpenStandardOutput () 107 { 108 Stream s = Console.OpenStandardOutput (); 109 Assert.IsNotNull (s, "1"); 110 s = Console.OpenStandardOutput (1024); 111 Assert.IsNotNull (s, "2"); 112 } 113 114 // Unmanaged code is required to call Console.Set* methods 115 116 [Test] 117 [SecurityPermission (SecurityAction.Deny, UnmanagedCode = true)] 118 [ExpectedException (typeof (SecurityException))] SetError()119 public void SetError () 120 { 121 Console.SetError (new StreamWriter (Console.OpenStandardError ())); 122 } 123 124 [Test] 125 [SecurityPermission (SecurityAction.Deny, UnmanagedCode = true)] 126 [ExpectedException (typeof (SecurityException))] SetIn()127 public void SetIn () 128 { 129 Console.SetIn (new StreamReader (Console.OpenStandardInput ())); 130 } 131 132 [Test] 133 [SecurityPermission (SecurityAction.Deny, UnmanagedCode = true)] 134 [ExpectedException (typeof (SecurityException))] SetOut()135 public void SetOut () 136 { 137 Console.SetOut (new StreamWriter (Console.OpenStandardOutput ())); 138 } 139 } 140 } 141