using System.Collections;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
+using System.Text;
namespace MonoTests.System.Security.Cryptography.X509Certificates {
[TestFixture]
- public class X509StoreTest : Assertion {
+ public class X509StoreTest {
+
+ private X509Certificate2 cert_empty;
+ private X509Certificate2 cert1;
+ private X509Certificate2 cert2;
+ private X509Certificate2Collection coll_empty;
+ private X509Certificate2Collection coll;
+
+ [TestFixtureSetUp]
+ public void FixtureSetUp ()
+ {
+ cert_empty = new X509Certificate2 ();
+ cert1 = new X509Certificate2 (X509Certificate2Test.farscape_pfx, "farscape", X509KeyStorageFlags.Exportable);
+ cert2 = new X509Certificate2 (Encoding.ASCII.GetBytes (X509Certificate2Test.base64_cert));
+ coll_empty = new X509Certificate2Collection ();
+ coll = new X509Certificate2Collection ();
+ coll.Add (cert1);
+ coll.Add (cert2);
+
+ CleanUpStore ("ReadOnlyStore");
+ }
+
+ [SetUp]
+ public void SetUp ()
+ {
+ CleanUpStore ("ReadWriteStore");
+ }
+
+ private void CleanUpStore (string s)
+ {
+ X509Store xs = new X509Store (s);
+ xs.Open (OpenFlags.ReadWrite);
+ int n = xs.Certificates.Count;
+ if (n > 0) {
+ X509Certificate2[] array = new X509Certificate2[n];
+ xs.Certificates.CopyTo (array, 0);
+ foreach (X509Certificate2 x in array)
+ xs.Remove (x);
+ }
+ xs.Close ();
+ }
+
+ private void CheckDefaults (X509Store xs)
+ {
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("MY", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
+ // always IntPtr.Zero for Mono, IntPtr.Zero before being opened on Windows
+ Assert.AreEqual (IntPtr.Zero, xs.StoreHandle, "StoreHandle");
+ }
[Test]
public void ConstructorEmpty ()
{
X509Store xs = new X509Store ();
- // default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "MY", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ CheckDefaults (xs);
}
+ [Test]
+ [ExpectedException (typeof (ArgumentNullException))]
+ public void ConstructorIntPtr ()
+ {
+ new X509Store (IntPtr.Zero);
+ }
+ [Test]
+ [ExpectedException (typeof (ArgumentException))]
+ public void ConstructorStoreLocation_Invalid ()
+ {
+ new X509Store ((StoreLocation) Int32.MinValue);
+ }
+
[Test]
public void ConstructorStoreLocationCurrentUser ()
{
X509Store xs = new X509Store (StoreLocation.CurrentUser);
- // default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "MY", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ CheckDefaults (xs);
}
[Test]
{
X509Store xs = new X509Store (StoreLocation.LocalMachine);
// default properties
- AssertEquals ("Location", StoreLocation.LocalMachine, xs.Location);
- AssertEquals ("Name", "MY", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.LocalMachine, xs.Location, "Location");
+ Assert.AreEqual ("MY", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
}
+ [Test]
+ public void ConstructorStoreString_Null ()
+ {
+ X509Store xs = new X509Store (null);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.IsNull (xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
+ }
+
+ [Test]
+ public void ConstructorStoreString_Empty ()
+ {
+ X509Store xs = new X509Store (String.Empty);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual (String.Empty, xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
+ }
[Test]
public void ConstructorStoreStringAddressBook ()
{
X509Store xs = new X509Store ("AddressBook");
// default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "AddressBook", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("AddressBook", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
}
[Test]
{
X509Store xs = new X509Store ("AuthRoot");
// default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "AuthRoot", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("AuthRoot", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
}
[Test]
{
X509Store xs = new X509Store ("CA");
// default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "CA", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("CA", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
}
[Test]
{
X509Store xs = new X509Store ("Disallowed");
// default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "Disallowed", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("Disallowed", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
}
[Test]
{
X509Store xs = new X509Store ("My");
// default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "My", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("My", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
}
[Test]
{
X509Store xs = new X509Store ("Root");
// default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "Root", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("Root", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
}
[Test]
{
X509Store xs = new X509Store ("TrustedPeople");
// default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "TrustedPeople", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("TrustedPeople", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
}
[Test]
{
X509Store xs = new X509Store ("TrustedPublisher");
// default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "TrustedPublisher", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("TrustedPublisher", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
}
[Test]
// mono isn't defined the StoreName
X509Store xs = new X509Store ("Mono");
// default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "Mono", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("Mono", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
+ }
+
+ [Test]
+ [ExpectedException (typeof (ArgumentException))]
+ public void ConstructorStoreName_Invalid ()
+ {
+ new X509Store ((StoreName) Int32.MinValue);
}
[Test]
{
X509Store xs = new X509Store (StoreName.AddressBook);
// default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "AddressBook", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("AddressBook", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
}
[Test]
{
X509Store xs = new X509Store (StoreName.AuthRoot);
// default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "AuthRoot", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("AuthRoot", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
}
[Test]
{
X509Store xs = new X509Store (StoreName.CertificateAuthority);
// default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "CA", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("CA", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
}
[Test]
{
X509Store xs = new X509Store (StoreName.Disallowed);
// default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "Disallowed", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("Disallowed", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
}
[Test]
- public void ConstructorStoreNameMy () {
+ public void ConstructorStoreNameMy ()
+ {
X509Store xs = new X509Store (StoreName.My);
// default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "My", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("My", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
}
[Test]
{
X509Store xs = new X509Store (StoreName.Root);
// default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "Root", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("Root", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
}
[Test]
{
X509Store xs = new X509Store (StoreName.TrustedPeople);
// default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "TrustedPeople", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("TrustedPeople", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
}
[Test]
{
X509Store xs = new X509Store (StoreName.TrustedPublisher);
// default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "TrustedPublisher", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ Assert.AreEqual (StoreLocation.CurrentUser, xs.Location, "Location");
+ Assert.AreEqual ("TrustedPublisher", xs.Name, "Name");
+ Assert.IsNotNull (xs.Certificates, "Certificates");
+ }
+
+ [Test]
+ [ExpectedException (typeof (ArgumentNullException))]
+ public void Add_Null ()
+ {
+ new X509Store ().Add (null);
}
+ [Test]
+ [ExpectedException (typeof (CryptographicException))]
+ public void Add_NotOpened ()
+ {
+ // Open wasn't called
+ new X509Store ().Add (cert1);
+ }
[Test]
[ExpectedException (typeof (CryptographicException))]
- public void AddEmptyCertificateToReadOnlyNonExistingStore ()
+ public void Add_OpenReadOnly ()
{
- // mono isn't defined the StoreName
- X509Store xs = new X509Store ("NonExistingStore");
- // default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "NonExistingStore", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ X509Store xs = new X509Store ("ReadOnlyStore");
xs.Open (OpenFlags.ReadOnly);
- xs.Add (new X509Certificate2 ());
+ xs.Add (cert1);
+ }
+
+ [Test]
+ public void Add_SameCertificate ()
+ {
+ X509Store xs = new X509Store ("ReadWriteStore");
+ xs.Open (OpenFlags.ReadWrite);
+ int n = xs.Certificates.Count;
+ xs.Add (cert1);
+ xs.Add (cert1);
+ Assert.AreEqual (n + 1, xs.Certificates.Count, "Count");
xs.Close ();
}
[Test]
[ExpectedException (typeof (CryptographicException))]
- public void AddEmptyCertificateToReadWriteNonExistingStore ()
+ public void Add_Empty_Certificate ()
{
- // mono isn't defined the StoreName
- X509Store xs = new X509Store ("NonExistingStore");
- // default properties
- AssertEquals ("Location", StoreLocation.CurrentUser, xs.Location);
- AssertEquals ("Name", "NonExistingStore", xs.Name);
- AssertNotNull ("Certificates", xs.Certificates);
+ X509Store xs = new X509Store ("ReadWriteStore");
+ xs.Open (OpenFlags.ReadWrite);
+ xs.Add (cert_empty);
+ }
+
+ [Test]
+ [ExpectedException (typeof (CryptographicException))]
+ public void Add_ExistingCertificateReadOnly ()
+ {
+ X509Store xs = new X509Store ("ReadWriteStore");
+ xs.Open (OpenFlags.ReadWrite);
+ xs.Add (cert1);
+ xs.Close ();
+ xs.Open (OpenFlags.ReadOnly);
+ xs.Add (cert1);
+ xs.Close ();
+ }
+
+ [Test]
+ [ExpectedException (typeof (ArgumentNullException))]
+ public void AddRange_Null ()
+ {
+ new X509Store ().AddRange (null);
+ }
+
+ [Test]
+ public void AddRange_Empty_Closed ()
+ {
+ X509Store xs = new X509Store ("ReadWriteStore");
+ xs.AddRange (coll_empty);
+ Assert.AreEqual (coll_empty.Count, xs.Certificates.Count, "Count");
+ }
+
+ [Test]
+ public void AddRange_Empty_ReadOnly ()
+ {
+ X509Store xs = new X509Store ("ReadWriteStore");
+ xs.Open (OpenFlags.ReadOnly);
+ xs.AddRange (coll_empty);
+ Assert.AreEqual (coll_empty.Count, xs.Certificates.Count, "Count");
+ }
+
+ [Test]
+ public void AddRange_Empty_ReadWrite ()
+ {
+ X509Store xs = new X509Store ("ReadWriteStore");
+ xs.Open (OpenFlags.ReadWrite);
+ xs.AddRange (coll_empty);
+ Assert.AreEqual (coll_empty.Count, xs.Certificates.Count, "Count");
+ }
+
+ [Test]
+ [ExpectedException (typeof (CryptographicException))]
+ public void AddRange_Empty_Certificate ()
+ {
+ X509Store xs = new X509Store ("ReadWriteStore");
+ xs.Open (OpenFlags.ReadWrite);
+ xs.AddRange (new X509Certificate2Collection (cert_empty));
+ }
+
+ [Test]
+ public void AddRange ()
+ {
+ X509Store xs = new X509Store ("ReadWriteStore");
+ xs.Open (OpenFlags.ReadWrite);
+ xs.AddRange (coll);
+ Assert.AreEqual (coll.Count, xs.Certificates.Count, "Count");
+ }
+
+ [Test]
+ [ExpectedException (typeof (CryptographicException))]
+ public void AddRange_NotOpened ()
+ {
+ // Open wasn't called
+ new X509Store ().AddRange (coll);
+ }
+
+ [Test]
+ [ExpectedException (typeof (CryptographicException))]
+ public void AddRange_OpenReadOnly ()
+ {
+ X509Store xs = new X509Store ("ReadOnlyStore");
+ xs.Open (OpenFlags.ReadOnly);
+ xs.AddRange (coll);
+ }
+
+ [Test]
+ public void Close_NotOpen ()
+ {
+ new X509Store ().Close ();
+ }
+
+ [Test]
+ public void Close_Collection ()
+ {
+ X509Store xs = new X509Store ("ReadWriteStore");
xs.Open (OpenFlags.ReadWrite);
- xs.Add (new X509Certificate2 ());
+ xs.Add (cert1);
+ Assert.AreEqual (1, xs.Certificates.Count, "Open");
+ xs.Close ();
+ Assert.AreEqual (0, xs.Certificates.Count, "Close");
+ }
+
+ [Test]
+ public void Open_Invalid ()
+ {
+ X509Store xs = new X509Store ("ReadWriteStore");
+ xs.Open ((OpenFlags) Int32.MinValue);
+ }
+
+ [Test]
+ [ExpectedException (typeof (CryptographicException))]
+ public void Open_OpenExistingOnly ()
+ {
+ new X509Store ("doesn't-exists").Open (OpenFlags.OpenExistingOnly);
+ }
+
+ [Test]
+ [ExpectedException (typeof (CryptographicException))]
+ public void Open_Store_Null ()
+ {
+ // ctor is valid (see test) but can't be opened
+ new X509Store (null).Open (OpenFlags.ReadOnly);
+ }
+
+ [Test]
+ [ExpectedException (typeof (CryptographicException))]
+ public void Open_Store_Empty ()
+ {
+ // ctor is valid (see test) but can't be opened
+ new X509Store (String.Empty).Open (OpenFlags.ReadOnly);
+ }
+
+ [Test]
+ [ExpectedException (typeof (ArgumentNullException))]
+ public void Remove_Null ()
+ {
+ new X509Store ().Remove (null);
+ }
+
+ [Test]
+ [ExpectedException (typeof (CryptographicException))]
+ public void Remove_NotOpened ()
+ {
+ // Open wasn't called
+ new X509Store ().Remove (cert1);
+ }
+
+ [Test]
+ public void Remove_OpenReadOnly_Unexisting ()
+ {
+ X509Store xs = new X509Store ("ReadOnlyStore");
+ xs.Open (OpenFlags.ReadOnly);
+ // note: cert1 wasn't present, remove "succeed"
+ xs.Remove (cert1);
+ }
+
+ [Test]
+ [ExpectedException (typeof (CryptographicException))]
+ public void Remove_OpenReadOnly_Existing ()
+ {
+ X509Store xs = new X509Store ("ReadWriteStore");
+ xs.Open (OpenFlags.ReadWrite);
+ xs.Add (cert1);
+ xs.Close ();
+ xs.Open (OpenFlags.ReadOnly);
+ xs.Remove (cert1);
+ }
+
+ [Test]
+ public void Remove_Empty_Certificate ()
+ {
+ X509Store xs = new X509Store ("ReadWriteStore");
+ xs.Open (OpenFlags.ReadWrite);
+ // note: impossible to add cert_empty, so we add something else
+ // to be sure we'll follow the complete code path (loop) of removal
+ xs.Add (cert1);
+ xs.Remove (cert_empty);
+ }
+
+ [Test]
+ [ExpectedException (typeof (ArgumentNullException))]
+ public void RemoveRange_Null ()
+ {
+ new X509Store ().RemoveRange (null);
+ }
+
+ [Test]
+ public void RemoveRange_Empty ()
+ {
+ X509Store xs = new X509Store ();
+ xs.RemoveRange (coll_empty);
+ }
+
+ [Test]
+ [ExpectedException (typeof (CryptographicException))]
+ public void RemoveRange_NotOpened ()
+ {
+ // Open wasn't called
+ new X509Store ().RemoveRange (coll);
+ }
+
+ [Test]
+ public void RemoveRange_OpenReadOnly_Unexisting ()
+ {
+ X509Store xs = new X509Store ("ReadOnlyStore");
+ xs.Open (OpenFlags.ReadOnly);
+ // note: cert1 wasn't present, RemoveRange "succeed"
+ xs.RemoveRange (coll);
+ }
+
+ [Test]
+ [ExpectedException (typeof (CryptographicException))]
+ public void RemoveRange_OpenReadOnly_Existing ()
+ {
+ X509Store xs = new X509Store ("ReadWriteStore");
+ xs.Open (OpenFlags.ReadWrite);
+ xs.AddRange (coll);
+ xs.Close ();
+ xs.Open (OpenFlags.ReadOnly);
+ xs.RemoveRange (coll);
+ }
+
+ [Test]
+ public void RemoveRange_Empty_Certificate ()
+ {
+ X509Store xs = new X509Store ("ReadWriteStore");
+ xs.Open (OpenFlags.ReadWrite);
+ // note: impossible to add cert_empty, so we add something else
+ // to be sure we'll follow the complete code path (loop) of removal
+ xs.AddRange (coll);
+ xs.RemoveRange (new X509Certificate2Collection (cert_empty));
+ }
+
+ [Test]
+ public void Collection_Add ()
+ {
+ X509Store xs = new X509Store ("ReadWriteStore");
+ xs.Certificates.Add (cert1);
+ Assert.AreEqual (0, xs.Certificates.Count, "Not Open");
xs.Close ();
+ Assert.AreEqual (0, xs.Certificates.Count, "Close");
}
}
}