2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / System.Security / Test / System.Security.Cryptography.X509Certificates / X509EnhancedKeyUsageExtensionTest.cs
1 //
2 // X509EnhancedKeyUsageExtensionTest.cs 
3 //      - NUnit tests for X509EnhancedKeyUsageExtension
4 //
5 // Author:
6 //      Sebastien Pouliot  <sebastien@ximian.com>
7 //
8 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
9 //
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
17 // 
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 // 
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 //
29
30 #if NET_2_0
31
32 using NUnit.Framework;
33
34 using System;
35 using System.Security.Cryptography;
36 using System.Security.Cryptography.X509Certificates;
37
38 namespace MonoTests.System.Security.Cryptography.X509Certificates {
39
40         [TestFixture]
41         public class X509EnhancedKeyUsageExtensionTest {
42
43                 private const string oid = "2.5.29.37";
44                 private const string fname = "Enhanced Key Usage";
45
46                 [Test]
47                 public void ConstructorEmpty ()
48                 {
49                         X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension ();
50                         Assert.IsFalse (eku.Critical, "Critical");
51                         Assert.IsNull (eku.RawData, "RawData");
52                         Assert.AreEqual (oid, eku.Oid.Value, "Oid.Value");
53                         Assert.AreEqual (fname, eku.Oid.FriendlyName, "Oid.FriendlyName");
54                         Assert.AreEqual (String.Empty, eku.Format (true), "Format(true)");
55                         Assert.AreEqual (String.Empty, eku.Format (false), "Format(false)");
56                 }
57
58                 [Test]
59                 [ExpectedException (typeof (NullReferenceException))]
60                 [Category ("NotWorking")] // MS bug reported as http://lab.msdn.microsoft.com/ProductFeedback/viewfeedback.aspx?feedbackid=34cdc5e9-c7f9-4f55-b390-288bfef6e44e
61                 public void ConstructorEmpty_EnhancedKeyUsages ()
62                 {
63                         X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension ();
64                         Assert.AreEqual (0, eku.EnhancedKeyUsages.Count, "EnhancedKeyUsages");
65                 }
66
67                 [Test]
68                 public void ConstructorAsnEncodedData ()
69                 {
70                         AsnEncodedData aed = new AsnEncodedData (new byte[] { 0x30, 0x05, 0x06, 0x03, 0x2A, 0x03, 0x04 });
71                         X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension (aed, true);
72                         Assert.IsTrue (eku.Critical, "Critical");
73                         Assert.AreEqual (7, eku.RawData.Length, "RawData");     // original Oid ignored
74                         Assert.AreEqual (oid, eku.Oid.Value, "Oid.Value");
75                         Assert.AreEqual (fname, eku.Oid.FriendlyName, "Oid.FriendlyName");
76                         Assert.AreEqual (1, eku.EnhancedKeyUsages.Count, "EnhancedKeyUsages");
77                         Assert.AreEqual ("1.2.3.4", eku.EnhancedKeyUsages[0].Value, "EnhancedKeyUsages Oid");
78                         Assert.AreEqual ("Unknown Key Usage (1.2.3.4)" + Environment.NewLine, eku.Format (true), "Format(true)");
79                         Assert.AreEqual ("Unknown Key Usage (1.2.3.4)", eku.Format (false), "Format(false)");
80                 }
81
82                 [Test]
83                 [ExpectedException (typeof (CryptographicException))]
84                 public void ConstructorAsnEncodedData_BadAsn ()
85                 {
86                         AsnEncodedData aed = new AsnEncodedData ("1.2.3", new byte[0]);
87                         X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension (aed, true);
88                         Assert.AreEqual (String.Empty, eku.Format (true), "Format(true)");
89                         Assert.AreEqual (String.Empty, eku.Format (false), "Format(false)");
90                         OidCollection oc = eku.EnhancedKeyUsages;
91                 }
92
93                 [Test]
94                 [ExpectedException (typeof (CryptographicException))]
95                 public void ConstructorAsnEncodedData_BadAsnTag ()
96                 {
97                         AsnEncodedData aed = new AsnEncodedData ("1.2.3", new byte[] { 0x05, 0x00 });
98                         X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension (aed, true);
99                         OidCollection oc = eku.EnhancedKeyUsages;
100                 }
101
102                 [Test]
103                 [ExpectedException (typeof (CryptographicException))]
104                 public void ConstructorAsnEncodedData_BadAsnLength ()
105                 {
106                         AsnEncodedData aed = new AsnEncodedData ("1.2.3", new byte[] { 0x30, 0x01 });
107                         X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension (aed, true);
108                         OidCollection oc = eku.EnhancedKeyUsages;
109                 }
110
111                 [Test]
112                 [ExpectedException (typeof (NullReferenceException))]
113                 public void ConstructorAsnEncodedData_Null ()
114                 {
115                         X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension ((AsnEncodedData)null, true);
116                 }
117
118                 [Test]
119                 [ExpectedException (typeof (ArgumentNullException))]
120                 public void ConstructorOidCollection_Null ()
121                 {
122                         X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension ((OidCollection)null, true);
123                 }
124
125                 [Test]
126                 public void ConstructorOidCollection ()
127                 {
128                         OidCollection oc = new OidCollection ();
129                         X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension (oc, true);
130                         Assert.AreEqual ("30-00", BitConverter.ToString (eku.RawData), "RawData");
131                         Assert.AreEqual (0, eku.EnhancedKeyUsages.Count, "Count 0");
132                         Assert.AreEqual ("Information Not Available", eku.Format (true), "Format(true)");
133                         Assert.AreEqual ("Information Not Available", eku.Format (false), "Format(false)");
134                         oc.Add (new Oid ("1.2.3.4"));
135                         Assert.AreEqual (0, eku.EnhancedKeyUsages.Count, "Count still 0");
136                         int n = eku.EnhancedKeyUsages.Add (new Oid ("1.2.3"));
137                         Assert.AreEqual (0, n, "Add");
138                         Assert.AreEqual (0, eku.EnhancedKeyUsages.Count, "Count again 0");      // readonly!
139                         Assert.AreEqual (1, oc.Count, "Count 1 - oc");
140                         Assert.AreEqual ("1.2.3.4", oc [0].Value, "Value - oc");
141
142                         oc.Add (new Oid ("1.3.6.1.5.5.7.3.1"));
143                         eku = new X509EnhancedKeyUsageExtension (oc, true);
144                         Assert.AreEqual (2, eku.EnhancedKeyUsages.Count, "Count 2");
145                         Assert.AreEqual ("1.2.3.4", eku.EnhancedKeyUsages[0].Value, "Value - 1");
146                         Assert.AreEqual ("1.3.6.1.5.5.7.3.1", eku.EnhancedKeyUsages[1].Value, "Value - 2");
147                         Assert.AreEqual ("Unknown Key Usage (1.2.3.4)" + Environment.NewLine + "Server Authentication (1.3.6.1.5.5.7.3.1)" + Environment.NewLine,
148                                 eku.Format (true), "Format(true)");
149                         Assert.AreEqual ("Unknown Key Usage (1.2.3.4), Server Authentication (1.3.6.1.5.5.7.3.1)", eku.Format (false), "Format(false)");
150                 }
151
152                 [Test]
153                 [ExpectedException (typeof (ArgumentNullException))]
154                 public void WrongExtension_X509EnhancedKeyUsageExtension ()
155                 {
156                         X509KeyUsageExtension ku = new X509KeyUsageExtension ();
157                         X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension ();
158                         eku.CopyFrom (ku);
159                 }
160
161                 [Test]
162                 public void WrongExtension_X509Extension ()
163                 {
164                         X509Extension ex = new X509Extension ("1.2.3", new byte[0], true);
165                         OidCollection oc = new OidCollection ();
166                         oc.Add (new Oid ("1.2.3.4"));
167                         X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension (oc, false);
168                         Assert.AreEqual (1, eku.EnhancedKeyUsages.Count, "EnhancedKeyUsages");
169                         Assert.IsFalse (eku.Critical, "Critical");
170                         eku.CopyFrom (ex);
171                         Assert.IsTrue (eku.Critical, "Critical");
172                         Assert.AreEqual (String.Empty, BitConverter.ToString (eku.RawData), "RawData");
173                         Assert.AreEqual ("1.2.3", eku.Oid.Value, "Oid.Value");
174                         Assert.IsNull (eku.Oid.FriendlyName, "Oid.FriendlyName");
175                 }
176
177                 [Test]
178                 [ExpectedException (typeof (CryptographicException))]
179                 public void WrongExtension_X509Extension_KeyUsages ()
180                 {
181                         X509Extension ex = new X509Extension ("1.2.3", new byte[0], true);
182                         X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension ();
183                         eku.CopyFrom (ex);
184                         Assert.AreEqual (0, eku.EnhancedKeyUsages.Count, "EnhancedKeyUsages");
185                 }
186
187                 [Test]
188                 [ExpectedException (typeof (ArgumentException))]
189                 public void WrongAsnEncodedData ()
190                 {
191                         AsnEncodedData aed = new AsnEncodedData (new byte[0]);
192                         X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension (new OidCollection (), true);
193                         eku.CopyFrom (aed); // note: not the same behaviour than using the constructor!
194                 }
195
196                 [Test]
197                 [ExpectedException (typeof (ArgumentException))]
198                 // [ExpectedException (typeof (ArgumentNullException))]
199                 public void CopyFrom_Null ()
200                 {
201                         X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension ();
202                         eku.CopyFrom (null);
203                 }
204
205                 [Test]
206                 public void CopyFrom_Self ()
207                 {
208                         OidCollection oc = new OidCollection ();
209                         oc.Add (new Oid ("1.2.3.4"));
210                         X509EnhancedKeyUsageExtension eku = new X509EnhancedKeyUsageExtension (oc, true);
211                         Assert.IsTrue (eku.Critical, "Critical");
212                         byte[] raw = eku.RawData;
213                         Assert.AreEqual ("30-05-06-03-2A-03-04", BitConverter.ToString (raw), "RawData");
214
215                         AsnEncodedData aed = new AsnEncodedData (raw);
216                         X509EnhancedKeyUsageExtension copy = new X509EnhancedKeyUsageExtension (aed, false);
217                         Assert.IsFalse (copy.Critical, "Critical");
218                         Assert.AreEqual (7, copy.RawData.Length, "RawData");    // original Oid ignored
219                         Assert.AreEqual (oid, copy.Oid.Value, "Oid.Value");
220                         Assert.AreEqual (fname, copy.Oid.FriendlyName, "Oid.FriendlyName");
221                         Assert.AreEqual (1, copy.EnhancedKeyUsages.Count, "EnhancedKeyUsages");
222                         Assert.AreEqual ("1.2.3.4", copy.EnhancedKeyUsages[0].Value, "EnhancedKeyUsages Oid");
223                 }
224         }
225 }
226
227 #endif