Author: spouliot
Date: 2005-03-15 16:11:50 -0500 (Tue, 15 Mar 2005)
New Revision: 41858
Added:
trunk/mcs/class/corlib/Test/System.IO.IsolatedStorage/IsolatedStorageFileCas.cs
trunk/mcs/class/corlib/Test/System.IO.IsolatedStorage/IsolatedStorageFileStreamCas.cs
Modified:
trunk/mcs/class/corlib/Test/System.IO.IsolatedStorage/ChangeLog
Log:
2005-03-15 Sebastien Pouliot <[EMAIL PROTECTED]>
* IsolatedStorageFileStreamCas.cs: New. CAS unit tests for
IsolatedStorageFileStream.
* IsolatedStorageFileCas.cs: New. CAS unit tests for
IsolatedStorageFile.
Modified: trunk/mcs/class/corlib/Test/System.IO.IsolatedStorage/ChangeLog
===================================================================
--- trunk/mcs/class/corlib/Test/System.IO.IsolatedStorage/ChangeLog
2005-03-15 21:09:05 UTC (rev 41857)
+++ trunk/mcs/class/corlib/Test/System.IO.IsolatedStorage/ChangeLog
2005-03-15 21:11:50 UTC (rev 41858)
@@ -1,3 +1,10 @@
+2005-03-15 Sebastien Pouliot <[EMAIL PROTECTED]>
+
+ * IsolatedStorageFileStreamCas.cs: New. CAS unit tests for
+ IsolatedStorageFileStream.
+ * IsolatedStorageFileCas.cs: New. CAS unit tests for
+ IsolatedStorageFile.
+
2005-01-31 Sebastien Pouliot <[EMAIL PROTECTED]>
* IsolatedStorageFileStreamTest.cs: New. Unit tests for
Added:
trunk/mcs/class/corlib/Test/System.IO.IsolatedStorage/IsolatedStorageFileCas.cs
===================================================================
---
trunk/mcs/class/corlib/Test/System.IO.IsolatedStorage/IsolatedStorageFileCas.cs
2005-03-15 21:09:05 UTC (rev 41857)
+++
trunk/mcs/class/corlib/Test/System.IO.IsolatedStorage/IsolatedStorageFileCas.cs
2005-03-15 21:11:50 UTC (rev 41858)
@@ -0,0 +1,277 @@
+//
+// IsolatedStorageFileCas.cs - CAS unit tests for
+// System.IO.IsolatedStorage.IsolatedStorageFile
+//
+// Author:
+// Sebastien Pouliot <[EMAIL PROTECTED]>
+//
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using NUnit.Framework;
+
+using System;
+using System.IO;
+using System.IO.IsolatedStorage;
+using System.Security;
+using System.Security.Permissions;
+
+namespace MonoCasTests.System.IO.IsolatedStorage {
+
+ [TestFixture]
+ [Category ("CAS")]
+ public class IsolatedStorageFileCas {
+
+ [SetUp]
+ public void SetUp ()
+ {
+ if (!SecurityManager.SecurityEnabled)
+ Assert.Ignore ("SecurityManager.SecurityEnabled
is OFF");
+ }
+
+ // use the caller stack to execute some read operations
+ private void Read (IsolatedStorageFile isf)
+ {
+ Assert.IsNotNull (isf.GetDirectoryNames ("*"),
"GetDirectoryNames");
+ Assert.IsNotNull (isf.GetFileNames ("*"),
"GetFileNames");
+ try {
+ Assert.IsTrue (isf.CurrentSize >= 0,
"CurrentSize");
+ Assert.IsTrue (isf.MaximumSize >=
isf.CurrentSize, "MaximumSize");
+ }
+ catch (InvalidOperationException) {
+ // roaming
+ }
+ }
+
+ // use the caller stack to execute some write operations
+ private void Write (IsolatedStorageFile isf)
+ {
+ isf.CreateDirectory ("testdir");
+
+ string filename = Path.Combine ("testdir", "file");
+ using (IsolatedStorageFileStream isfs = new
IsolatedStorageFileStream (filename, FileMode.Create, isf)) {
+ }
+ isf.DeleteFile (filename);
+
+ isf.DeleteDirectory ("testdir");
+ try {
+ isf.Remove ();
+ }
+ catch (IsolatedStorageException) {
+ // fx 1.x doesn't like removing when things
"could" still be in use
+ }
+ }
+
+#if NET_2_0
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.Deny,
UsageAllowed = IsolatedStorageContainment.ApplicationIsolationByMachine)]
+ [ExpectedException (typeof (SecurityException))]
+ [Ignore ("no manifest")]
+ public void GetMachineStoreForApplication_Fail ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetMachineStoreForApplication ();
+ }
+
+ [Test]
+ [Ignore ("no manifest")]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
UsageAllowed = IsolatedStorageContainment.ApplicationIsolationByMachine)]
+ public void GetMachineStoreForApplication_Pass ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetMachineStoreForApplication ();
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.Deny,
UsageAllowed = IsolatedStorageContainment.AssemblyIsolationByMachine)]
+ [ExpectedException (typeof (SecurityException))]
+ public void GetMachineStoreForAssembly_Fail ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetMachineStoreForAssembly ();
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
UsageAllowed = IsolatedStorageContainment.AssemblyIsolationByMachine)]
+ public void GetMachineStoreForAssembly_Pass ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetMachineStoreForAssembly ();
+ Read (isf);
+ Write (isf);
+ isf.Dispose ();
+ isf.Close ();
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
UsageAllowed = IsolatedStorageContainment.AdministerIsolatedStorageByUser)]
+ public void GetMachineStoreForAssembly_Administer ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetMachineStoreForAssembly ();
+ Read (isf);
+ Write (isf);
+ isf.Dispose ();
+ isf.Close ();
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.Deny,
UsageAllowed = IsolatedStorageContainment.DomainIsolationByMachine)]
+ [ExpectedException (typeof (SecurityException))]
+ public void GetMachineStoreForDomain_Fail ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetMachineStoreForDomain ();
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
UsageAllowed = IsolatedStorageContainment.DomainIsolationByMachine)]
+ public void GetMachineStoreForDomain_Pass ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetMachineStoreForDomain ();
+ Read (isf);
+ Write (isf);
+ isf.Dispose ();
+ isf.Close ();
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
UsageAllowed = IsolatedStorageContainment.AdministerIsolatedStorageByUser)]
+ public void GetMachineStoreForDomain_Administer ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetMachineStoreForDomain ();
+ Read (isf);
+ Write (isf);
+ isf.Dispose ();
+ isf.Close ();
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.Deny,
UsageAllowed = IsolatedStorageContainment.ApplicationIsolationByUser)]
+ [ExpectedException (typeof (SecurityException))]
+ [Ignore ("no manifest")]
+ public void GetUserStoreForApplication_Fail ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetUserStoreForApplication ();
+ }
+
+ [Test]
+ [Ignore ("no manifest")]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
UsageAllowed = IsolatedStorageContainment.ApplicationIsolationByUser)]
+ public void GetUserStoreForApplication_Pass ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetUserStoreForApplication ();
+ }
+#endif
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.Deny,
UsageAllowed = IsolatedStorageContainment.AssemblyIsolationByUser)]
+ [ExpectedException (typeof (SecurityException))]
+ public void GetUserStoreForAssembly_Fail ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetUserStoreForAssembly ();
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
UsageAllowed = IsolatedStorageContainment.AssemblyIsolationByUser)]
+ public void GetUserStoreForAssembly_Pass ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetUserStoreForAssembly ();
+ Read (isf);
+ Write (isf);
+ isf.Dispose ();
+ isf.Close ();
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.Deny,
UsageAllowed = IsolatedStorageContainment.AssemblyIsolationByRoamingUser)]
+ [ExpectedException (typeof (SecurityException))]
+ public void GetUserStoreForAssembly_Roaming_Fail ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetUserStoreForAssembly ();
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
UsageAllowed = IsolatedStorageContainment.AdministerIsolatedStorageByUser)]
+ public void GetUserStoreForAssembly_Roaming_Pass ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetUserStoreForAssembly ();
+ Read (isf);
+ Write (isf);
+ isf.Dispose ();
+ isf.Close ();
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
UsageAllowed = IsolatedStorageContainment.AssemblyIsolationByRoamingUser)]
+ public void GetUserStoreForAssembly_Administer ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetUserStoreForAssembly ();
+ Read (isf);
+ Write (isf);
+ isf.Dispose ();
+ isf.Close ();
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.Deny,
UsageAllowed = IsolatedStorageContainment.DomainIsolationByUser)]
+ [ExpectedException (typeof (SecurityException))]
+ public void GetUserStoreForDomain_Fail ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetUserStoreForDomain ();
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
UsageAllowed = IsolatedStorageContainment.DomainIsolationByUser)]
+ public void GetUserStoreForDomain_Pass ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetUserStoreForDomain ();
+ Read (isf);
+ Write (isf);
+ isf.Dispose ();
+ isf.Close ();
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.Deny,
UsageAllowed = IsolatedStorageContainment.DomainIsolationByRoamingUser)]
+ [ExpectedException (typeof (SecurityException))]
+ public void GetUserStoreForDomain_Roaming_Fail ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetUserStoreForDomain ();
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
UsageAllowed = IsolatedStorageContainment.DomainIsolationByRoamingUser)]
+ public void GetUserStoreForDomain_Roaming_Pass ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetUserStoreForDomain ();
+ Read (isf);
+ Write (isf);
+ isf.Dispose ();
+ isf.Close ();
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
UsageAllowed = IsolatedStorageContainment.AdministerIsolatedStorageByUser)]
+ public void GetUserStoreForDomain_Administer ()
+ {
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetUserStoreForDomain ();
+ Read (isf);
+ Write (isf);
+ isf.Dispose ();
+ isf.Close ();
+ }
+ }
+}
Added:
trunk/mcs/class/corlib/Test/System.IO.IsolatedStorage/IsolatedStorageFileStreamCas.cs
===================================================================
---
trunk/mcs/class/corlib/Test/System.IO.IsolatedStorage/IsolatedStorageFileStreamCas.cs
2005-03-15 21:09:05 UTC (rev 41857)
+++
trunk/mcs/class/corlib/Test/System.IO.IsolatedStorage/IsolatedStorageFileStreamCas.cs
2005-03-15 21:11:50 UTC (rev 41858)
@@ -0,0 +1,224 @@
+//
+// IsolatedStorageFileStreamCas.cs - CAS unit tests for
+// System.IO.IsolatedStorage.IsolatedStorageFileStream
+//
+// Author:
+// Sebastien Pouliot <[EMAIL PROTECTED]>
+//
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using NUnit.Framework;
+
+using System;
+using System.IO;
+using System.IO.IsolatedStorage;
+using System.Security;
+using System.Security.Permissions;
+
+#if NET_2_0
+using Microsoft.Win32.SafeHandles;
+#endif
+
+namespace MonoCasTests.System.IO.IsolatedStorage {
+
+ [TestFixture]
+ [Category ("CAS")]
+ public class IsolatedStorageFileStreamCas {
+
+ [SetUp]
+ public void SetUp ()
+ {
+ if (!SecurityManager.SecurityEnabled)
+ Assert.Ignore ("SecurityManager.SecurityEnabled
is OFF");
+ }
+
+ [Test]
+ [PermissionSet (SecurityAction.Deny, Unrestricted = true)]
+ [ExpectedException (typeof (SecurityException))]
+ public void DenyUnrestricted ()
+ {
+ IsolatedStorageFileStream isfs = new
IsolatedStorageFileStream ("deny", FileMode.Create);
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.Deny,
Unrestricted = true)]
+ [ExpectedException (typeof (SecurityException))]
+ public void DenyIsolatedStorageFilePermission ()
+ {
+ IsolatedStorageFileStream isfs = new
IsolatedStorageFileStream ("deny", FileMode.Create);
+ }
+
+ private void Read (string filename)
+ {
+ byte[] buffer = new byte[8];
+ using (IsolatedStorageFileStream read = new
IsolatedStorageFileStream (filename, FileMode.Open, FileAccess.Read)) {
+ Assert.AreEqual (8, read.Length, "Length");
+ Assert.AreEqual (0, read.Position, "Position");
+ Assert.IsTrue (read.CanRead, "read.CanRead");
+ Assert.IsTrue (read.CanSeek, "read.CanSeek");
+ Assert.IsFalse (read.CanWrite, "read.CanWrite");
+ Assert.IsFalse (read.IsAsync, "read.IsAync");
+ Assert.AreEqual (buffer.Length, read.ReadByte
(), "ReadByte");
+ read.Seek (0, SeekOrigin.Begin);
+ Assert.AreEqual (buffer.Length, read.Read
(buffer, 0, buffer.Length), "Read");
+ read.Close ();
+ }
+ }
+
+ private void Write (string filename)
+ {
+ byte[] buffer = new byte[8];
+ using (IsolatedStorageFileStream write = new
IsolatedStorageFileStream (filename, FileMode.Create, FileAccess.Write)) {
+ Assert.IsFalse (write.CanRead, "write.CanRead");
+ Assert.IsTrue (write.CanSeek, "write.CanSeek");
+ Assert.IsTrue (write.CanWrite,
"write.CanWrite");
+ Assert.IsFalse (write.IsAsync, "write.IsAync");
+ write.Write (buffer, 0, buffer.Length);
+ write.Position = 0;
+ write.WriteByte ((byte)buffer.Length);
+ write.SetLength (8);
+ write.Flush ();
+ write.Close ();
+ }
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
Unrestricted = true)]
+ [ExpectedException (typeof (FileNotFoundException))]
+ public void ReadUnexistingFile ()
+ {
+ string filename = "cas-doesnt-exists";
+ try {
+ Read (filename);
+ }
+ catch (FileNotFoundException fnfe) {
+ // check that we do not leak the full path to
the missing file
+ // as we do not have the FileIOPermission's
PathDiscovery rights
+ Assert.AreEqual (filename, fnfe.FileName,
"FileName");
+ throw;
+ }
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
Unrestricted = true)]
+ [ExpectedException (typeof (DirectoryNotFoundException))]
+ public void ReadInUnexistingDirectory ()
+ {
+ string filename = Path.Combine ("unexistingdir",
"filename");
+ try {
+ Read (filename);
+ }
+ catch (DirectoryNotFoundException dnf) {
+ // check that we do not leak the full path to
the missing file
+ // as we do not have the FileIOPermission's
PathDiscovery rights
+ Assert.IsTrue (dnf.Message.IndexOf (filename)
>= 0, "filename");
+ Assert.IsFalse (dnf.Message.IndexOf ("\\" +
filename) >= 0, "fullpath");
+ throw;
+ }
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
Unrestricted = true)]
+ [ExpectedException (typeof (UnauthorizedAccessException))]
+ public void ReadDirectoryAsFile ()
+ {
+ string dirname = "this-is-a-dir";
+ IsolatedStorageFile isf =
IsolatedStorageFile.GetUserStoreForDomain ();
+ try {
+ string[] dirs = isf.GetDirectoryNames (dirname);
+ if (dirs.Length == 0) {
+ isf.CreateDirectory (dirname);
+ }
+ Read (dirname);
+ }
+ catch (UnauthorizedAccessException uae) {
+ // check that we do not leak the full path to
the missing file
+ // as we do not have the FileIOPermission's
PathDiscovery rights
+ Assert.IsTrue (uae.Message.IndexOf (dirname) >=
0, "dirname");
+ Assert.IsFalse (uae.Message.IndexOf ("\\" +
dirname) >= 0, "fullpath");
+ try {
+ isf.DeleteDirectory (dirname);
+ }
+ catch (IsolatedStorageException) {
+ // this isn't where we want ot fail!
+ // and 1.x isn't always cooperative
+ }
+ throw;
+ }
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
Unrestricted = true)]
+ public void ReWrite ()
+ {
+ Write ("cas-rewrite");
+ Write ("cas-rewrite");
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
Unrestricted = true)]
+ public void WriteThenRead ()
+ {
+ Write ("cas-rw");
+ Read ("cas-rw");
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
Unrestricted = true)]
+ [ExpectedException (typeof (DirectoryNotFoundException))]
+ public void WriteInUnexistingDirectory ()
+ {
+ string filename = Path.Combine ("unexistingdir",
"filename");
+ try {
+ Write (filename);
+ }
+ catch (DirectoryNotFoundException dnf) {
+ // check that we do not leak the full path to
the missing file
+ // as we do not have the FileIOPermission's
PathDiscovery rights
+ Assert.IsTrue (dnf.Message.IndexOf (filename)
>= 0, "filename");
+ Assert.IsFalse (dnf.Message.IndexOf ("\\" +
filename) >= 0, "fullpath");
+ throw;
+ }
+ }
+
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
Unrestricted = true)]
+ [ExpectedException (typeof (IsolatedStorageException))]
+ public void Handle ()
+ {
+ IsolatedStorageFileStream isfs = new
IsolatedStorageFileStream ("cas-Handle", FileMode.Create);
+ IntPtr p = isfs.Handle;
+ // LAMSPEC: SecurityException with UnmanagedCode
+ }
+#if NET_2_0
+ [Test]
+ [IsolatedStorageFilePermission (SecurityAction.PermitOnly,
Unrestricted = true)]
+ [ExpectedException (typeof (IsolatedStorageException))]
+ public void SafeFileHandle ()
+ {
+ IsolatedStorageFileStream isfs = new
IsolatedStorageFileStream ("cas-SafeFileHandle", FileMode.Create);
+ SafeFileHandle sfh = isfs.SafeFileHandle;
+ }
+#endif
+ }
+}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches