2010-07-13 Carlos Alberto Cortez <calberto.cortez@gmail.com>
authorCarlos Alberto Cortez <calberto.cortez@gmail.com>
Tue, 13 Jul 2010 14:48:01 +0000 (14:48 -0000)
committerCarlos Alberto Cortez <calberto.cortez@gmail.com>
Tue, 13 Jul 2010 14:48:01 +0000 (14:48 -0000)
* RegistryKeyTest.cs: New tests for volatile keys.

svn path=/trunk/mcs/; revision=160301

mcs/class/corlib/Test/Microsoft.Win32/ChangeLog
mcs/class/corlib/Test/Microsoft.Win32/RegistryKeyTest.cs

index e93500ea5e5f7f5a00cd3f4d8e7aa0be2afb53f6..7e24e7ff9dfd4dbf2dfcf5a38287b15e54f2af89 100644 (file)
@@ -1,3 +1,7 @@
+2010-07-13  Carlos Alberto Cortez <calberto.cortez@gmail.com>
+
+       * RegistryKeyTest.cs: New tests for volatile keys.
+
 2008-02-01  Gert Driesen  <drieseng@users.sourceforge.net>
 
        * RegistryKeyTest.cs: Added tests for max length of subkey and value
index 79f8ee453fa66e3ced62f0df012724470e90484a..f357a22333bbe5b1cfd95f98d137c4059ea41e8a 100644 (file)
@@ -655,6 +655,110 @@ namespace MonoTests.Microsoft.Win32
                        }
                }
 
+#if NET_4_0
+               // Unfortunately we can't test that the scenario where a volatile
+               // key is not alive after a reboot, but we can test other bits.
+               [Test]
+               public void CreateSubKey_Volatile ()
+               {
+                       RegistryKey key = null;
+                       RegistryKey subkey = null;
+                       string subKeyName = "VolatileKey";
+
+                       try {
+                               key = Registry.CurrentUser.CreateSubKey (subKeyName, RegistryKeyPermissionCheck.Default, RegistryOptions.Volatile);
+                               subkey = key.CreateSubKey ("Child", RegistryKeyPermissionCheck.Default, RegistryOptions.Volatile);
+                               key.Close ();
+
+                               key = Registry.CurrentUser.OpenSubKey (subKeyName);
+                               subkey = key.OpenSubKey ("Child");
+                               Assert.AreEqual (true, subkey != null, "#A1");
+                       } finally {
+                               if (subkey != null)
+                                       subkey.Close ();
+                               if (key != null)
+                                       key.Close ();
+                       }
+               }
+
+               [Test]
+               public void CreateSubKey_Volatile_Child ()
+               {
+                       RegistryKey key = null;
+                       RegistryKey subkey = null;
+                       string subKeyName = "VolatileKey";
+
+                       try {
+                               key = Registry.CurrentUser.CreateSubKey (subKeyName, RegistryKeyPermissionCheck.Default, RegistryOptions.Volatile);
+                               subkey = key.CreateSubKey ("Child"); // Non volatile child
+                               Assert.Fail ("#Exc");
+                       } catch (IOException) {
+                       } finally {
+                               if (subkey != null)
+                                       subkey.Close ();
+                               if (key != null)
+                                       key.Close ();
+                       }
+               }
+
+               [Test]
+               public void CreateSubKey_Volatile_Conflict ()
+               {
+                       RegistryKey key = null;
+                       RegistryKey key2 = null;
+                       RegistryKey subkey = null;
+                       string subKeyName = "VolatileKey";
+
+                       try {
+                               // 
+                               // Create a volatile key and try to open it as a normal one
+                               //
+                               key = Registry.CurrentUser.CreateSubKey (subKeyName, RegistryKeyPermissionCheck.Default, RegistryOptions.Volatile);
+                               key2 = Registry.CurrentUser.CreateSubKey (subKeyName, RegistryKeyPermissionCheck.Default, RegistryOptions.None);
+                               Assert.AreEqual (key.Name, key2.Name, "A0");
+
+                               subkey = key2.CreateSubKey ("Child", RegistryKeyPermissionCheck.Default, RegistryOptions.Volatile);
+                               Assert.AreEqual (true, key.OpenSubKey ("Child") != null, "#A1");
+                               Assert.AreEqual (true, key2.OpenSubKey ("Child") != null, "#A2");
+
+                               subkey.Close ();
+                               key.Close ();
+                               key2.Close ();
+
+                               // 
+                               // Create a non-volatile key and try to open it as a volatile one
+                               //
+                               subKeyName = "NonVolatileKey";
+                               key2 = Registry.CurrentUser.CreateSubKey (subKeyName, RegistryKeyPermissionCheck.Default, RegistryOptions.None);
+                               key2.SetValue ("Name", "Mono");
+                               key = Registry.CurrentUser.CreateSubKey (subKeyName, RegistryKeyPermissionCheck.Default, RegistryOptions.Volatile);
+                               Assert.AreEqual (key.Name, key2.Name, "B0");
+                               Assert.AreEqual ("Mono", key.GetValue ("Name"), "#B1");
+                               Assert.AreEqual ("Mono", key2.GetValue ("Name"), "#B2");
+
+                               key.CreateSubKey ("Child");
+                               Assert.AreEqual (true, key.OpenSubKey ("Child") != null, "#B3");
+                               Assert.AreEqual (true, key2.OpenSubKey ("Child") != null, "#B4");
+
+                               // 
+                               // Close the non-volatile key and try to re-open it as a volatile one
+                               //
+                               key.Close ();
+                               key2.Close ();
+                               key = Registry.CurrentUser.CreateSubKey (subKeyName, RegistryKeyPermissionCheck.Default, RegistryOptions.Volatile);
+                               Assert.AreEqual ("Mono", key.GetValue ("Name"), "#C0");
+                               Assert.AreEqual (true, key.OpenSubKey ("Child") != null, "#C1");
+                       } finally {
+                               if (subkey != null)
+                                       subkey.Close ();
+                               if (key != null)
+                                       key.Close ();
+                               if (key2 != null)
+                                       key2.Close ();
+                       }
+               }
+#endif
+
                [Test]
                public void DeleteSubKey ()
                {