public static void SafeNCryptKeyHandle_ValidKey_ParentHandle_KeptAlive() { // NCryptFreeObject will check dwMagic values to determine what kind of object // it was given. Since we don't really want to leak a key in this test we'll // track a test-local buffer. IntPtr fakeKeyPtr = Marshal.AllocHGlobal(512); try { Marshal.WriteInt32(fakeKeyPtr, 0); using (SafeHandle parentHandle = new StateInformingSafeHandle()) { using (var keyHandle = new SafeNCryptKeyHandle(fakeKeyPtr, parentHandle)) { Assert.False(parentHandle.IsInvalid, "After ctor, parentHandle.IsInvalid"); Assert.False(parentHandle.IsClosed, "After ctor, parentHandle.IsClosed"); parentHandle.Dispose(); Assert.False(parentHandle.IsInvalid, "After parentHandle.Dispose, parentHandle.IsInvalid"); Assert.False(parentHandle.IsClosed, "After parentHandle.Dispose, parentHandle.IsClosed"); } Assert.True(parentHandle.IsInvalid, "After keyHandle.Dispose, parentHandle.IsInvalid"); Assert.True(parentHandle.IsClosed, "After keyHandle.Dispose, parentHandle.IsClosed"); } } finally { Marshal.FreeHGlobal(fakeKeyPtr); } }
public static void SafeNCryptKeyHandle_ParentHandle_Invalid() { Assert.Throws <ArgumentNullException>(() => new SafeNCryptKeyHandle(IntPtr.Zero, null)); using (SafeHandle openButInvalid = new StateInformingSafeHandle(false)) using (SafeHandle closedAndInvalid = new StateInformingSafeHandle()) using (SafeHandle closedButValid = new StateInformingSafeHandle(true, false)) { closedAndInvalid.Dispose(); closedButValid.Dispose(); // Preconditions. Assert.False(openButInvalid.IsClosed, "openButInvalid.IsClosed"); Assert.True(openButInvalid.IsInvalid, "openButInvalid.IsInvalid"); Assert.True(closedButValid.IsClosed, "closedButValid.IsClosed"); Assert.False(closedButValid.IsInvalid, "closedButValid.IsInvalid"); Assert.True(closedAndInvalid.IsClosed, "closedAndInvalid.IsClosed"); Assert.True(closedAndInvalid.IsInvalid, "closedAndInvalid.IsInvalid"); // Tests AssertExtensions.Throws <ArgumentException>("parentHandle", () => new SafeNCryptKeyHandle(IntPtr.Zero, openButInvalid)); AssertExtensions.Throws <ArgumentException>("parentHandle", () => new SafeNCryptKeyHandle(IntPtr.Zero, closedButValid)); AssertExtensions.Throws <ArgumentException>("parentHandle", () => new SafeNCryptKeyHandle(IntPtr.Zero, closedAndInvalid)); } }
public static void SafeNCryptKeyHandle_ParentHandle_Invalid() { Assert.Throws<ArgumentNullException>(() => new SafeNCryptKeyHandle(IntPtr.Zero, null)); using (SafeHandle openButInvalid = new StateInformingSafeHandle(false)) using (SafeHandle closedAndInvalid = new StateInformingSafeHandle()) using (SafeHandle closedButValid = new StateInformingSafeHandle(true, false)) { closedAndInvalid.Dispose(); closedButValid.Dispose(); // Preconditions. Assert.False(openButInvalid.IsClosed, "openButInvalid.IsClosed"); Assert.True(openButInvalid.IsInvalid, "openButInvalid.IsInvalid"); Assert.True(closedButValid.IsClosed, "closedButValid.IsClosed"); Assert.False(closedButValid.IsInvalid, "closedButValid.IsInvalid"); Assert.True(closedAndInvalid.IsClosed, "closedAndInvalid.IsClosed"); Assert.True(closedAndInvalid.IsInvalid, "closedAndInvalid.IsInvalid"); // Tests Assert.Throws<ArgumentException>(() => new SafeNCryptKeyHandle(IntPtr.Zero, openButInvalid)); Assert.Throws<ArgumentException>(() => new SafeNCryptKeyHandle(IntPtr.Zero, closedButValid)); Assert.Throws<ArgumentException>(() => new SafeNCryptKeyHandle(IntPtr.Zero, closedAndInvalid)); } }
public static void SafeNCryptKeyHandle_InvalidKey_ParentHandle_NotKeptAlive() { using (SafeHandle parentHandle = new StateInformingSafeHandle()) using (var keyHandle = new SafeNCryptKeyHandle(IntPtr.Zero, parentHandle)) { Assert.False(parentHandle.IsInvalid, "After ctor, parentHandle.IsInvalid"); Assert.False(parentHandle.IsClosed, "After ctor, parentHandle.IsClosed"); parentHandle.Dispose(); Assert.True(parentHandle.IsInvalid, "After parentHandle.Dispose, parentHandle.IsInvalid"); Assert.True(parentHandle.IsClosed, "After parentHandle.Dispose, parentHandle.IsClosed"); } }