OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / libcore / luni / src / test / java / tests / security / cert / CertificateFactory1Test.java
1 /*
2  *  Licensed to the Apache Software Foundation (ASF) under one or more
3  *  contributor license agreements.  See the NOTICE file distributed with
4  *  this work for additional information regarding copyright ownership.
5  *  The ASF licenses this file to You under the Apache License, Version 2.0
6  *  (the "License"); you may not use this file except in compliance with
7  *  the License.  You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  */
17 /**
18 * @author Vera Y. Petrashkova
19 * @version $Revision$
20 */
21
22 package tests.security.cert;
23
24 import dalvik.annotation.TestLevel;
25 import dalvik.annotation.TestTargetClass;
26 import dalvik.annotation.TestTargetNew;
27 import dalvik.annotation.TestTargets;
28
29 import junit.framework.TestCase;
30
31 import org.apache.harmony.security.tests.support.SpiEngUtils;
32 import org.apache.harmony.security.tests.support.cert.MyCertPath;
33 import org.apache.harmony.security.tests.support.cert.MyCertificate;
34 import org.apache.harmony.security.tests.support.cert.MyCertificateFactorySpi;
35
36 import java.io.ByteArrayInputStream;
37 import java.io.ByteArrayOutputStream;
38 import java.io.IOException;
39 import java.io.InputStream;
40 import java.io.ObjectOutputStream;
41 import java.security.NoSuchProviderException;
42 import java.security.Provider;
43 import java.security.cert.CRL;
44 import java.security.cert.CRLException;
45 import java.security.cert.CertPath;
46 import java.security.cert.Certificate;
47 import java.security.cert.CertificateException;
48 import java.security.cert.CertificateFactory;
49 import java.security.cert.CertificateFactorySpi;
50 import java.util.Collection;
51 import java.util.Iterator;
52 import java.util.List;
53 import java.util.Vector;
54
55 /**
56  * Tests for <code>CertificateFactory</code> class methods and constructor
57  *
58  */
59 @TestTargetClass(CertificateFactory.class)
60 public class CertificateFactory1Test extends TestCase {
61
62     public static final String srvCertificateFactory = "CertificateFactory";
63
64     private static String defaultProviderName = null;
65
66     private static Provider defaultProvider = null;
67
68     private static boolean X509Support = false;
69
70     public static String defaultType = "X.509";
71
72     public static final String[] validValues = {
73             "X.509", "x.509" };
74
75     private final static String[] invalidValues = SpiEngUtils.invalidValues;
76
77     private static String NotSupportMsg = "";
78
79     static {
80         defaultProvider = SpiEngUtils.isSupport(defaultType,
81                 srvCertificateFactory);
82         X509Support = (defaultProvider != null);
83         defaultProviderName = (X509Support ? defaultProvider.getName() : null);
84         NotSupportMsg = defaultType.concat(" is not supported");    }
85
86     private static CertificateFactory[] initCertFs() {
87         if (!X509Support) {
88             fail(NotSupportMsg);
89             return null;
90         }
91         try {
92             CertificateFactory[] certFs = new CertificateFactory[3];
93             certFs[0] = CertificateFactory.getInstance(defaultType);
94             certFs[1] = CertificateFactory.getInstance(defaultType,
95                     defaultProviderName);
96             certFs[2] = CertificateFactory.getInstance(defaultType,
97                     defaultProvider);
98             return certFs;
99         } catch (Exception e) {
100             return null;
101         }
102     }
103
104     private static MyCertificate createMC() {
105         byte[] enc = { (byte) 0, (byte) 2, (byte) 3, (byte) 4, (byte) 5 };
106         return new MyCertificate("Test_Test", enc);
107     }
108
109     /**
110      * Test for <code>getInstance(String type)</code> method
111      * Assertion: returns CertificateFactory if type is X.509
112      */
113     @TestTargetNew(
114         level = TestLevel.PARTIAL_COMPLETE,
115         notes = "Doesn't verify CertificateException.",
116         method = "getInstance",
117         args = {java.lang.String.class}
118     )
119     public void testCertificateFactory01() throws CertificateException {
120         if (!X509Support) {
121             fail(NotSupportMsg);
122             return;
123         }
124         for (int i = 0; i < validValues.length; i++) {
125             CertificateFactory certF = CertificateFactory
126                     .getInstance(validValues[i]);
127             assertEquals("Incorrect type: ", validValues[i], certF.getType());
128         }
129     }
130
131     /**
132      * Test for <code>getInstance(String type)</code> method
133      * Assertion:
134      * throws NullPointerException when type is null
135      * throws CertificateException when type is not available
136      */
137     @TestTargetNew(
138         level = TestLevel.PARTIAL_COMPLETE,
139         notes = "Verifies CertificateException.",
140         method = "getInstance",
141         args = {java.lang.String.class}
142     )
143     public void testCertificateFactory02() {
144         try {
145             CertificateFactory.getInstance(null);
146             fail("NullPointerException or CertificateException must be thrown when type is null");
147         } catch (CertificateException e) {
148         } catch (NullPointerException e) {
149         }
150         for (int i = 0; i < invalidValues.length; i++) {
151             try {
152                 CertificateFactory.getInstance(invalidValues[i]);
153                 fail("CertificateException must be thrown when type: "
154                         .concat(invalidValues[i]));
155             } catch (CertificateException e) {
156             }
157         }
158     }
159
160     /**
161      * Test for <code>getInstance(String type, String provider)</code> method
162      * Assertion: throws IllegalArgumentException when provider is null or empty
163      */
164     @TestTargetNew(
165         level = TestLevel.PARTIAL_COMPLETE,
166         notes = "Verifies IllegalArgumentException. IllegalArgumentException was checked instead of NoSuchProviderException",
167         method = "getInstance",
168         args = {java.lang.String.class, java.lang.String.class}
169     )
170     public void testCertificateFactory03() throws CertificateException,
171             NoSuchProviderException {
172         if (!X509Support) {
173             fail(NotSupportMsg);
174             return;
175         }
176         String provider = null;
177         for (int i = 0; i < validValues.length; i++) {
178             try {
179                 CertificateFactory.getInstance(validValues[i], provider);
180                 fail("IllegalArgumentException must be thrown when provider is null");
181             } catch (IllegalArgumentException e) {
182             }
183             try {
184                 CertificateFactory.getInstance(validValues[i], "");
185                 fail("IllegalArgumentException  must be thrown when provider is empty");
186             } catch (IllegalArgumentException e) {
187             }
188         }
189     }
190
191     /**
192      * Test for <code>getInstance(String type, String provider)</code> method
193      * Assertion:
194      * throws NullPointerException when type is null
195      * throws CertificateException when type is not available
196      */
197     @TestTargetNew(
198         level = TestLevel.PARTIAL_COMPLETE,
199         notes = "Verifies CertificateException and NullPointerException.",
200         method = "getInstance",
201         args = {java.lang.String.class, java.lang.String.class}
202     )
203     public void testCertificateFactory04() throws NoSuchProviderException {
204         if (!X509Support) {
205             fail(NotSupportMsg);
206             return;
207         }
208         try {
209             CertificateFactory.getInstance(null, defaultProviderName);
210             fail("NullPointerException or CertificateException must be thrown when type is null");
211         } catch (CertificateException e) {
212         } catch (NullPointerException e) {
213         }
214         for (int i = 0; i < invalidValues.length; i++) {
215             try {
216                 CertificateFactory.getInstance(invalidValues[i],
217                         defaultProviderName);
218                 fail("CertificateException must be thrown (type: ".concat(
219                         invalidValues[i]).concat(" provider: ").concat(
220                         defaultProviderName).concat(")"));
221             } catch (CertificateException e) {
222             }
223         }
224     }
225
226     /**
227      * Test for <code>getInstance(String type, String provider)</code> method
228      * Assertion: returns CertificateFactory when type and provider have valid
229      * values
230      */
231     @TestTargetNew(
232         level = TestLevel.PARTIAL_COMPLETE,
233         notes = "Verifies positive functionality.",
234         method = "getInstance",
235         args = {java.lang.String.class, java.lang.String.class}
236     )
237     public void testCertificateFactory05() throws CertificateException,
238             NoSuchProviderException {
239         if (!X509Support) {
240             fail(NotSupportMsg);
241             return;
242         }
243         CertificateFactory certF;
244         for (int i = 0; i < validValues.length; i++) {
245             certF = CertificateFactory.getInstance(validValues[i],
246                     defaultProviderName);
247             assertEquals("Incorrect type", certF.getType(), validValues[i]);
248             assertEquals("Incorrect provider name", certF.getProvider()
249                     .getName(), defaultProviderName);
250         }
251     }
252
253     /**
254      * Test for <code>getInstance(String type, Provider provider)</code>
255      * method
256      * Assertion: throws IllegalArgumentException when provider is null
257      */
258     @TestTargetNew(
259         level = TestLevel.PARTIAL_COMPLETE,
260         notes = "Verifies IllegalArgumentException.",
261         method = "getInstance",
262         args = {java.lang.String.class, java.security.Provider.class}
263     )
264     public void testCertificateFactory06() throws CertificateException {
265         if (!X509Support) {
266             fail(NotSupportMsg);
267             return;
268         }
269         Provider provider = null;
270         for (int i = 0; i < validValues.length; i++) {
271             try {
272                 CertificateFactory.getInstance(validValues[i], provider);
273                 fail("IllegalArgumentException must be thrown  when provider is null");
274             } catch (IllegalArgumentException e) {
275             }
276         }
277     }
278
279     /**
280      * Test for <code>getInstance(String type, Provider provider)</code>
281      * method
282      * Assertion:
283      * throws NullPointerException when type is null
284      * throws CertificateException when type is not available
285      */
286     @TestTargetNew(
287         level = TestLevel.PARTIAL_COMPLETE,
288         notes = "Verifies CertificateException.",
289         method = "getInstance",
290         args = {java.lang.String.class, java.security.Provider.class}
291     )
292     public void testCertificateFactory07() {
293         if (!X509Support) {
294             fail(NotSupportMsg);
295             return;
296         }
297         try {
298             CertificateFactory.getInstance(null, defaultProvider);
299             fail("NullPointerException or CertificateException must be thrown when type is null");
300         } catch (CertificateException e) {
301         } catch (NullPointerException e) {
302         }
303         for (int i = 0; i < invalidValues.length; i++) {
304             try {
305                 CertificateFactory.getInstance(invalidValues[i],
306                         defaultProvider);
307                 fail("CertificateException was not thrown as expected (type:"
308                         .concat(invalidValues[i]).concat(" provider: ").concat(
309                                 defaultProvider.getName()).concat(")"));
310             } catch (CertificateException e) {
311             }
312         }
313     }
314
315     /**
316      * Test for <code>getInstance(String type, Provider provider)</code>
317      * method
318      * Assertion: returns CertificateFactorythrows when type and provider
319      * have valid values
320      */
321     @TestTargetNew(
322         level = TestLevel.PARTIAL_COMPLETE,
323         notes = "Verifies positive functionality of getInstance method.",
324         method = "getInstance",
325         args = {java.lang.String.class, java.security.Provider.class}
326     )
327     public void testCertificateFactory08() throws CertificateException {
328         if (!X509Support) {
329             fail(NotSupportMsg);
330             return;
331         }
332         CertificateFactory certF;
333         for (int i = 0; i < validValues.length; i++) {
334             certF = CertificateFactory.getInstance(validValues[i],
335                     defaultProvider);
336             assertEquals("Incorrect provider", certF.getProvider(),
337                     defaultProvider);
338             assertEquals("Incorrect type", certF.getType(), validValues[i]);
339         }
340     }
341
342     /**
343      * Test for <code>getCertPathEncodings()</code> method
344      * Assertion: returns encodings
345      */
346     @TestTargetNew(
347         level = TestLevel.COMPLETE,
348         notes = "",
349         method = "getCertPathEncodings",
350         args = {}
351     )
352     public void testCertificateFactory09() {
353         if (!X509Support) {
354             fail(NotSupportMsg);
355             return;
356         }
357         CertificateFactory[] certFs = initCertFs();
358         assertNotNull("CertificateFactory objects were not created", certFs);
359         Iterator<String> it1 = certFs[0].getCertPathEncodings();
360         Iterator<String> it2 = certFs[1].getCertPathEncodings();
361         assertEquals("Incorrect encodings", it1.hasNext(), it2.hasNext());
362         while (it1.hasNext()) {
363             it2 = certFs[1].getCertPathEncodings();
364             String s1 = it1.next();
365             boolean yesNo = false;
366             while (it2.hasNext()) {
367                 if (s1.equals(it2.next())) {
368                     yesNo = true;
369                     break;
370                 }
371             }
372             assertTrue("Encoding: ".concat(s1).concat(
373                     " does not define for certF2 CertificateFactory"), yesNo);
374         }
375         it1 = certFs[0].getCertPathEncodings();
376         it2 = certFs[2].getCertPathEncodings();
377         assertEquals("Incorrect encodings", it1.hasNext(), it2.hasNext());
378         while (it1.hasNext()) {
379             it2 = certFs[2].getCertPathEncodings();
380             String s1 = it1.next();
381             boolean yesNo = false;
382             while (it2.hasNext()) {
383                 if (s1.equals(it2.next())) {
384                     yesNo = true;
385                     break;
386                 }
387             }
388             assertTrue("Encoding: ".concat(s1).concat(
389                     " does not define for certF3 CertificateFactory"), yesNo);
390         }
391     }
392
393     /**
394      * Test for <code>generateCertificate(InputStream inStream)</code>
395      * <code>generateCertificates(InputStream inStream)</code>
396      * <code>generateCRL(InputStream inStream)</code>
397      * <code>generateCRLs(InputStream inStream)</code>
398      * methods
399      * Assertion: throw CertificateException and CRLException when
400      * inStream is null or empty
401      */
402     @TestTargets({
403         @TestTargetNew(
404             level = TestLevel.PARTIAL_COMPLETE,
405             notes = "Verifies methods with null and empty InputStream.",
406             method = "generateCertificate",
407             args = {java.io.InputStream.class}
408         ),
409         @TestTargetNew(
410             level = TestLevel.PARTIAL_COMPLETE,
411             notes = "Verifies methods with null and empty InputStream.",
412             method = "generateCertificates",
413             args = {java.io.InputStream.class}
414         ),
415         @TestTargetNew(
416             level = TestLevel.PARTIAL_COMPLETE,
417             notes = "Verifies methods with null and empty InputStream.",
418             method = "generateCRL",
419             args = {java.io.InputStream.class}
420         ),
421         @TestTargetNew(
422             level = TestLevel.PARTIAL_COMPLETE,
423             notes = "Verifies methods with null and empty InputStream.",
424             method = "generateCRLs",
425             args = {java.io.InputStream.class}
426         )
427     })
428     public void testCertificateFactory10() {
429         if (!X509Support) {
430             fail(NotSupportMsg);
431             return;
432         }
433         CertificateFactory[] certFs = initCertFs();
434         assertNotNull("CertificateFactory objects were not created", certFs);
435         byte [] bb = {};
436         InputStream is = new ByteArrayInputStream(bb);
437         Collection<?> colCer;
438         Collection<?> colCrl;
439         for (int i = 0; i < certFs.length; i++) {
440             try {
441                 certFs[i].generateCertificate(null);
442                 fail("generateCertificate must thrown CertificateException or NullPointerEXception when input stream is null");
443             } catch (CertificateException e) {
444             } catch (NullPointerException e) {
445             }
446             is = new ByteArrayInputStream(bb);
447             try {
448                 certFs[i].generateCertificates(null);
449                 fail("generateCertificates must throw CertificateException or NullPointerException when input stream is null");
450             } catch (CertificateException e) {
451             } catch (NullPointerException e) {
452             }
453             is = new ByteArrayInputStream(bb);
454             try {
455                 certFs[i].generateCertificate(is);
456             } catch (CertificateException e) {
457             }
458             is = new ByteArrayInputStream(bb);
459             try {
460                 colCer = certFs[i].generateCertificates(is);
461                 if (colCer != null) {
462                     assertTrue("Not empty certificate collection", colCer.isEmpty());
463                 }
464             } catch (CertificateException e) {
465             }
466         }
467         for (int i = 0; i < certFs.length; i++) {
468             try {
469                 certFs[i].generateCRL(null);
470             } catch (CRLException e) {
471             } catch (NullPointerException e) {
472             }
473             try {
474                 colCrl = certFs[i].generateCRLs(null);
475                 if (colCrl != null) {
476                     assertTrue("Not empty CRL collection was returned from null stream", colCrl.isEmpty());
477                 }
478             } catch (CRLException e) {
479             } catch (NullPointerException e) {
480             }
481             is = new ByteArrayInputStream(bb);
482             try {
483                  certFs[i].generateCRL(is);
484             } catch (CRLException e) {
485             }
486             is = new ByteArrayInputStream(bb);
487             try {
488                 certFs[i].generateCRLs(is);
489                 colCrl = certFs[i].generateCRLs(null);
490                 if (colCrl != null) {
491                     assertTrue("Not empty CRL collection was returned from empty stream", colCrl.isEmpty());
492                 }
493             } catch (CRLException e) {
494             }
495         }
496     }
497
498     /*
499      * Test for <code> generateCertificate(InputStream inStream) </code><code>
500      * generateCertificates(InputStream inStream) </code><code>
501      * generateCRL(InputStream inStream) </code><code>
502      * generateCRLs(InputStream inStream) </code>
503      * methods
504      * Assertion: throw CertificateException and CRLException when inStream
505      * contains incompatible datas
506      */
507     @TestTargets({
508         @TestTargetNew(
509             level = TestLevel.PARTIAL_COMPLETE,
510             notes = "Verifies positive functionality of methods.",
511             method = "generateCertificate",
512             args = {java.io.InputStream.class}
513         ),
514         @TestTargetNew(
515             level = TestLevel.PARTIAL_COMPLETE,
516             notes = "Verifies positive functionality of methods.",
517             method = "generateCertificates",
518             args = {java.io.InputStream.class}
519         ),
520         @TestTargetNew(
521             level = TestLevel.PARTIAL_COMPLETE,
522             notes = "Verifies positive functionality of methods.",
523             method = "generateCRL",
524             args = {java.io.InputStream.class}
525         ),
526         @TestTargetNew(
527             level = TestLevel.PARTIAL_COMPLETE,
528             notes = "Verifies positive functionality of methods.",
529             method = "generateCRLs",
530             args = {java.io.InputStream.class}
531         )
532     })
533     public void testCertificateFactory11() throws IOException {
534         if (!X509Support) {
535             fail(NotSupportMsg);
536             return;
537         }
538         CertificateFactory[] certFs = initCertFs();
539         assertNotNull("CertificateFactory objects were not created", certFs);
540         MyCertificate mc = createMC();
541         ByteArrayOutputStream os = new ByteArrayOutputStream();
542         ObjectOutputStream oos = new ObjectOutputStream(os);
543         oos.writeObject(mc);
544         oos.flush();
545         oos.close();
546
547         Certificate cer;
548         Collection<?> colCer;
549         CRL crl;
550         Collection<?> colCrl;
551
552         byte[] arr = os.toByteArray();
553         ByteArrayInputStream is;
554         for (int i = 0; i < certFs.length; i++) {
555             is = new ByteArrayInputStream(arr);
556             try {
557                 cer = certFs[i].generateCertificate(is);
558                 assertNull("Not null certificate was created", cer);
559             } catch (CertificateException e) {
560             }
561             is = new ByteArrayInputStream(arr);
562             try {
563                 colCer = certFs[i].generateCertificates(is);
564                 if (colCer != null) {
565                     assertTrue("Not empty certificate Collection was created", colCer.isEmpty());
566                 }
567             } catch (CertificateException e) {
568             }
569             is = new ByteArrayInputStream(arr);
570             try {
571                 crl = certFs[i].generateCRL(is);
572                 assertNull("Not null CRL was created", crl);
573             } catch (CRLException e) {
574             }
575             is = new ByteArrayInputStream(arr);
576             try {
577                 colCrl = certFs[i].generateCRLs(is);
578                 if (colCrl != null) {
579                     assertTrue("Not empty CRL Collection was created", colCrl.isEmpty());
580                 }
581             } catch (CRLException e) {
582             }
583         }
584     }
585
586     /**
587      * Test for <code>generateCertPath(InputStream inStream)</code>
588      * <code>generateCertPath(InputStream inStream, String encoding)</code>
589      * methods
590      * Assertion: throws CertificateException when inStream is null or
591      * when isStream contains invalid datas
592      */
593     @TestTargets({
594         @TestTargetNew(
595             level = TestLevel.PARTIAL_COMPLETE,
596             notes = "Verifies CertificateException.",
597             method = "generateCertPath",
598             args = {java.io.InputStream.class, java.lang.String.class}
599         ),
600         @TestTargetNew(
601             level = TestLevel.PARTIAL_COMPLETE,
602             notes = "Verifies CertificateException.",
603             method = "generateCertPath",
604             args = {java.io.InputStream.class}
605         )
606     })
607     public void testCertificateFactory12() {
608         if (!X509Support) {
609             fail(NotSupportMsg);
610             return;
611         }
612         CertificateFactory[] certFs = initCertFs();
613         assertNotNull("CertificateFactory objects were not created", certFs);
614         InputStream is1 = null;
615         InputStream is2 = new ByteArrayInputStream(new byte[10]);
616
617         for (int i = 0; i < certFs.length; i++) {
618             try {
619                 certFs[i].generateCertPath(is1);
620                 fail("generateCertificate must thrown CertificateException or NullPointerException when input stream is null");
621             } catch (CertificateException e) {
622             } catch (NullPointerException e) {
623             }
624             try {
625                 certFs[i].generateCertPath(is2);
626                 fail("generateCertificate must thrown CertificateException when input stream contains invalid datas");
627             } catch (CertificateException e) {
628             }
629             Iterator<String> it = certFs[i].getCertPathEncodings();
630             while (it.hasNext()) {
631                 String enc = it.next();
632                 try {
633                     certFs[i].generateCertPath(is1, enc);
634                     fail("generateCertificate must thrown CertificateException or NullPointerException when input stream is null and encodings "
635                             .concat(enc));
636                 } catch (CertificateException e) {
637                 } catch (NullPointerException e) {
638                 }
639                 try {
640                     certFs[i].generateCertPath(is2, enc);
641                     fail("generateCertificate must thrown CertificateException when input stream contains invalid datas  and encodings "
642                             .concat(enc));
643                 } catch (CertificateException e) {
644                 }
645             }
646         }
647     }
648
649     /**
650      * Test for <code>generateCertPath(InputStream inStream)</code>
651      * <code>generateCertPath(InputStream inStream, String encoding)</code>
652      * methods
653      * Assertion: throw CertificateException when isStream contains invalid datas
654      */
655     @TestTargets({
656         @TestTargetNew(
657             level = TestLevel.PARTIAL_COMPLETE,
658             notes = "Verifies CertificateException.",
659             method = "generateCertPath",
660             args = {java.io.InputStream.class}
661         ),
662         @TestTargetNew(
663             level = TestLevel.PARTIAL_COMPLETE,
664             notes = "Verifies CertificateException.",
665             method = "generateCertPath",
666             args = {java.io.InputStream.class, java.lang.String.class}
667         )
668     })
669     // Test passed on RI
670     public void testCertificateFactory13() throws IOException {
671         if (!X509Support) {
672             fail(NotSupportMsg);
673             return;
674         }
675         CertificateFactory[] certFs = initCertFs();
676         assertNotNull("CertificateFactory objects were not created", certFs);
677         byte[] enc = { (byte) 0, (byte) 2, (byte) 3, (byte) 4, (byte) 5 };
678         MyCertPath mc = new MyCertPath(enc);
679         ByteArrayOutputStream os = new ByteArrayOutputStream();
680
681         ObjectOutputStream oos = new ObjectOutputStream(os);
682         oos.writeObject(mc);
683         oos.flush();
684         oos.close();
685
686         byte[] arr = os.toByteArray();
687         ByteArrayInputStream is = new ByteArrayInputStream(arr);
688
689         for (int i = 0; i < certFs.length; i++) {
690             try {
691                 certFs[i].generateCertPath(is);
692                 fail("CertificateException must be thrown because input stream contains incorrect datas");
693             } catch (CertificateException e) {
694             }
695             Iterator<String> it = certFs[i].getCertPathEncodings();
696             while (it.hasNext()) {
697                 try {
698                     certFs[i].generateCertPath(is, it.next());
699                     fail("CertificateException must be thrown because input stream contains incorrect datas");
700                 } catch (CertificateException e) {
701                 }
702             }
703         }
704     }
705
706     /**
707      * Test for <code>generateCertPath(List certificates)</code> method
708      * Assertion: throw NullPointerException certificates is null
709      */
710     @TestTargetNew(
711         level = TestLevel.PARTIAL_COMPLETE,
712         notes = "Verifies NullPointerException. Valid parameters checking missed.",
713         method = "generateCertPath",
714         args = {java.util.List.class}
715     )
716     public void testCertificateFactory14() throws CertificateException {
717         if (!X509Support) {
718             fail(NotSupportMsg);
719             return;
720         }
721         CertificateFactory[] certFs = initCertFs();
722         assertNotNull("CertificateFactory objects were not created", certFs);
723         List<Certificate> list = null;
724         for (int i = 0; i < certFs.length; i++) {
725             try {
726                 certFs[i].generateCertPath(list);
727                 fail("generateCertificate must thrown CertificateException when list is null");
728             } catch (NullPointerException e) {
729             }
730         }
731     }
732
733     /**
734      * Test for <code>generateCertPath(List certificates)</code> method
735      * Assertion: returns empty CertPath if certificates is empty
736      */
737     @TestTargetNew(
738         level = TestLevel.PARTIAL_COMPLETE,
739         notes = "Verifies that generateCertPath method returns empty CertPath if certificates is empty. Valid parameters checking missed.",
740         method = "generateCertPath",
741         args = {java.util.List.class}
742     )
743     public void testCertificateFactory15() throws CertificateException {
744         if (!X509Support) {
745             fail(NotSupportMsg);
746             return;
747         }
748         CertificateFactory[] certFs = initCertFs();
749         assertNotNull("CertificateFactory objects were not created", certFs);
750         List<Certificate> list = new Vector<Certificate>();
751         for (int i = 0; i < certFs.length; i++) {
752             CertPath cp = certFs[i].generateCertPath(list);
753             List<? extends Certificate> list1 = cp.getCertificates();
754             assertTrue("List should be empty", list1.isEmpty());
755         }
756     }
757
758     /**
759      * Test for <code>generateCertPath(List certificates)</code> method
760      * Assertion: throws CertificateException when certificates contains
761      * incorrect Certificate
762      */
763     @TestTargetNew(
764         level = TestLevel.PARTIAL_COMPLETE,
765         notes = "Verifies CertificateException. Valid parameters checking missed.",
766         method = "generateCertPath",
767         args = {java.util.List.class}
768     )
769     public void testCertificateFactory16() {
770         if (!X509Support) {
771             fail(NotSupportMsg);
772             return;
773         }
774         CertificateFactory[] certFs = initCertFs();
775         assertNotNull("CertificateFactory objects were not created", certFs);
776         MyCertificate ms = createMC();
777         List<Certificate> list = new Vector<Certificate>();
778         list.add(ms);
779         for (int i = 0; i < certFs.length; i++) {
780             try {
781                 certFs[i].generateCertPath(list);
782                 fail("CertificateException must be thrown");
783             } catch (CertificateException e) {
784             }
785         }
786     }
787
788     /**
789      * Test for <code>CertificateFactory</code> constructor
790      * Assertion: returns CertificateFactory object
791      */
792     @TestTargetNew(
793         level = TestLevel.PARTIAL_COMPLETE,
794         notes = "Verifies CRLException and NullPointerException.",
795         method = "generateCRLs",
796         args = {java.io.InputStream.class}
797     )
798     public void testCertificateFactory17() throws CRLException {
799         if (!X509Support) {
800             fail(NotSupportMsg);
801             return;
802         }
803         CertificateFactorySpi spi = new MyCertificateFactorySpi();
804         CertificateFactory cf = new myCertificateFactory(spi, defaultProvider,
805                 defaultType);
806         assertEquals("Incorrect type", cf.getType(), defaultType);
807         assertEquals("Incorrect provider", cf.getProvider(), defaultProvider);
808         try {
809             cf.generateCRLs(null);
810             fail("CRLException must be thrown");
811         } catch (CRLException e) {
812         }
813
814         cf = new myCertificateFactory(null, null, null);
815         assertNull("Incorrect type", cf.getType());
816         assertNull("Incorrect provider", cf.getProvider());
817         try {
818             cf.generateCRLs(null);
819             fail("NullPointerException must be thrown");
820         } catch (NullPointerException e) {
821         }
822     }
823
824     /**
825      * Test for <code>getType()</code> method
826      */
827     @TestTargetNew(
828         level = TestLevel.COMPLETE,
829         notes = "",
830         method = "getType",
831         args = {}
832     )
833     public void testCertificateFactory18() throws CertificateException {
834         if (!X509Support) {
835             fail(NotSupportMsg);
836             return;
837         }
838         for (int i = 0; i < validValues.length; i++) {
839             try {
840                 CertificateFactory certF = CertificateFactory
841                         .getInstance(validValues[i]);
842                 assertEquals("Incorrect type: ", validValues[i], certF
843                         .getType());
844                 certF = CertificateFactory.getInstance(validValues[i],
845                         defaultProviderName);
846                 assertEquals("Incorrect type", certF.getType(), validValues[i]);
847
848                 certF = CertificateFactory.getInstance(validValues[i],
849                         defaultProvider);
850                 assertEquals("Incorrect provider", certF.getProvider(),
851                         defaultProvider);
852                 assertEquals("Incorrect type", certF.getType(), validValues[i]);
853
854             } catch (NoSuchProviderException e) {
855                 fail("Unexpected NoSuchProviderException " + e.getMessage());
856             }
857         }
858     }
859
860     @SuppressWarnings("cast")
861     @TestTargetNew(
862         level = TestLevel.COMPLETE,
863         notes = "",
864         method = "CertificateFactory",
865         args = {java.security.cert.CertificateFactorySpi.class, java.security.Provider.class, java.lang.String.class}
866     )
867     public void testCertificateFactory19() {
868         if (!X509Support) {
869             fail(NotSupportMsg);
870             return;
871         }
872         CertificateFactorySpi spi = new MyCertificateFactorySpi();
873         myCertificateFactory cf;
874         try {
875             cf = new myCertificateFactory(spi, defaultProvider,
876                                       defaultType);
877             assertEquals("Incorrect type", cf.getType(), defaultType);
878             assertEquals("Incorrect provider", cf.getProvider(), defaultProvider);
879             assertTrue(cf instanceof CertificateFactory);
880         } catch (Exception e) {
881             fail("Unexpected exception" + e);
882         }
883
884         try {
885             cf = new myCertificateFactory(null, null, null);
886         } catch (Exception e) {
887             fail("Unexpected exception" + e);
888         }
889     }
890 }
891 /**
892  * Additional class to verify CertificateFactory constructor
893  */
894
895 class myCertificateFactory extends CertificateFactory {
896
897     public myCertificateFactory(CertificateFactorySpi spi, Provider prov,
898             String type) {
899         super(spi, prov, type);
900     }
901 }