Path: blob/master/test/jdk/java/security/misc/GetInstanceNullsEmpties.java
41149 views
/*1* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223import java.security.*;24import java.security.cert.*;25import javax.crypto.*;26import javax.net.ssl.*;27import javax.security.auth.login.*;28import java.lang.reflect.*;29import java.util.Arrays;3031/*32* @test33* @bug 498569434* @summary Incomplete spec for most of the getInstances35*/36/**37* A simple test to see what is being thrown when null Strings are passed38* to the various getInstance() methods.39*40* These tests use various algorithm names that don't exist (e.g. "FOO"41* Ciphers). Just need something non-null for testing, as the tests will throw42* exceptions before trying to instantiate a real object.43*/44public class GetInstanceNullsEmpties {4546private static final Provider SUN = Security.getProvider("SUN");4748/*49* See if there are more than "expected" number of getInstance() methods,50* which will indicate to developers that this test needs an update.51*/52private static void checkNewMethods(Class<?> clazz, int expected)53throws Exception {5455long found = Arrays.stream(clazz.getMethods())56.filter(name -> name.getName().equals("getInstance"))57.count();5859if (found != expected) {60throw new Exception("Number of getInstance() mismatch: "61+ expected + " expected, " + found + " found");62}63}6465/**66* Main loop.67*/68public static void main(String[] args) throws Exception {6970/*71* JCA72*/73testAlgorithmParameterGenerator();74testAlgorithmParameters();75testCertificateFactory();76testCertPathBuilder();77testCertPathValidator();78testCertStore();79testKeyFactory();80testKeyPairGenerator();81testKeyStore();82testMessageDigest();83testPolicy();84testSecureRandom();85testSignature();8687/*88* JCE89*/90testCipher();91testExemptionMechanism();92testKeyAgreement();93testKeyGenerator();94testMac();95testSecretKeyFactory();9697/*98* JSSE99*/100testKeyManagerFactory();101testSSLContext();102testTrustManagerFactory();103104/*105* JGSS106*107* KeyTab.getInstance doesn't take algorithm names, so we'll108* ignore this one.109*/110testConfiguration();111112System.out.println("\nTEST PASSED!");113}114115private static Method getInstance(Class clazz, Class... args)116throws Exception {117boolean firstPrinted = false;118119System.out.print("\n" + clazz.getName() + "(");120for (Class c : args) {121System.out.print(firstPrinted122? ", " + c.getName() : c.getName());123firstPrinted = true;124}125System.out.println("):");126127return clazz.getMethod("getInstance", args);128}129130private static void run(Method m, Class expectedException,131Object... args) throws Exception {132133try {134m.invoke(null, args);135throw new Exception("Didn't throw exception");136} catch (InvocationTargetException ite) {137Throwable root = ite.getCause();138if (root instanceof Exception) {139Exception e = (Exception) root;140if (expectedException.isInstance(e)) {141System.out.print("OK ");142return;143} else {144System.out.println(145"Unexpected InvocationTargetException!");146throw e;147}148}149throw ite;150}151}152153/*154* Constants so lines aren't so long.155*/156private static final Class STRING = String.class;157private static final Class PROVIDER = Provider.class;158159private static void testAlgorithmParameterGenerator() throws Exception {160Class clazz = AlgorithmParameterGenerator.class;161Method m;162163checkNewMethods(clazz, 3);164165m = getInstance(clazz, STRING);166run(m, NullPointerException.class, (Object) null);167run(m, NoSuchAlgorithmException.class, "");168169m = getInstance(clazz, STRING, STRING);170run(m, NullPointerException.class, null, "SUN");171run(m, NoSuchAlgorithmException.class, "", "SUN");172run(m, IllegalArgumentException.class, "FOO", null);173run(m, IllegalArgumentException.class, "FOO", "");174175m = getInstance(clazz, STRING, PROVIDER);176run(m, NullPointerException.class, null, SUN);177run(m, NoSuchAlgorithmException.class, "", SUN);178run(m, IllegalArgumentException.class, "FOO", null);179}180181private static void testAlgorithmParameters() throws Exception {182Class clazz = AlgorithmParameters.class;183Method m;184185checkNewMethods(clazz, 3);186187m = getInstance(clazz, STRING);188run(m, NullPointerException.class, (Object) null);189run(m, NoSuchAlgorithmException.class, "");190191m = getInstance(clazz, STRING, STRING);192run(m, NullPointerException.class, null, "SUN");193run(m, NoSuchAlgorithmException.class, "", "SUN");194run(m, IllegalArgumentException.class, "FOO", null);195run(m, IllegalArgumentException.class, "FOO", "");196197m = getInstance(clazz, STRING, PROVIDER);198run(m, NullPointerException.class, null, SUN);199run(m, NoSuchAlgorithmException.class, "", SUN);200run(m, IllegalArgumentException.class, "FOO", null);201}202203private static void testCertPathBuilder() throws Exception {204Class clazz = CertPathBuilder.class;205Method m;206207checkNewMethods(clazz, 3);208209m = getInstance(clazz, STRING);210run(m, NullPointerException.class, (Object) null);211run(m, NoSuchAlgorithmException.class, "");212213m = getInstance(clazz, STRING, STRING);214run(m, NullPointerException.class, null, "SUN");215run(m, NoSuchAlgorithmException.class, "", "SUN");216run(m, IllegalArgumentException.class, "FOO", null);217run(m, IllegalArgumentException.class, "FOO", "");218219m = getInstance(clazz, STRING, PROVIDER);220run(m, NullPointerException.class, null, SUN);221run(m, NoSuchAlgorithmException.class, "", SUN);222run(m, IllegalArgumentException.class, "FOO", null);223}224225private static void testCertPathValidator() throws Exception {226Class clazz = CertPathValidator.class;227Method m;228229checkNewMethods(clazz, 3);230231m = getInstance(clazz, STRING);232run(m, NullPointerException.class, (Object) null);233run(m, NoSuchAlgorithmException.class, "");234235m = getInstance(clazz, STRING, STRING);236run(m, NullPointerException.class, null, "SUN");237run(m, NoSuchAlgorithmException.class, "", "SUN");238run(m, IllegalArgumentException.class, "FOO", null);239run(m, IllegalArgumentException.class, "FOO", "");240241m = getInstance(clazz, STRING, PROVIDER);242run(m, NullPointerException.class, null, SUN);243run(m, NoSuchAlgorithmException.class, "", SUN);244run(m, IllegalArgumentException.class, "FOO", null);245}246247private static void testCertStore() throws Exception {248Class clazz = CertStore.class;249Method m;250CertStoreParameters csp = () -> null;251252checkNewMethods(clazz, 3);253254m = getInstance(clazz, STRING, CertStoreParameters.class);255run(m, NullPointerException.class, (Object) null, csp);256run(m, NoSuchAlgorithmException.class, "", csp);257258m = getInstance(clazz, STRING, CertStoreParameters.class, STRING);259run(m, NullPointerException.class, null, csp, "SUN");260run(m, NoSuchAlgorithmException.class, "", csp, "SUN");261run(m, IllegalArgumentException.class, "FOO", csp, null);262run(m, IllegalArgumentException.class, "FOO", csp, "");263264m = getInstance(clazz, STRING, CertStoreParameters.class, PROVIDER);265run(m, NullPointerException.class, null, csp, SUN);266run(m, NoSuchAlgorithmException.class, "", csp, SUN);267run(m, IllegalArgumentException.class, "FOO", csp, null);268}269270private static void testCertificateFactory() throws Exception {271Class clazz = CertificateFactory.class;272Method m;273274checkNewMethods(clazz, 3);275276m = getInstance(clazz, STRING);277run(m, NullPointerException.class, (Object) null);278run(m, CertificateException.class, "");279280m = getInstance(clazz, STRING, STRING);281run(m, NullPointerException.class, null, "SUN");282run(m, CertificateException.class, "", "SUN");283run(m, IllegalArgumentException.class, "FOO", null);284run(m, IllegalArgumentException.class, "FOO", "");285286m = getInstance(clazz, STRING, PROVIDER);287run(m, NullPointerException.class, null, SUN);288run(m, CertificateException.class, "", SUN);289run(m, IllegalArgumentException.class, "FOO", null);290}291292private static void testCipher() throws Exception {293Class clazz = Cipher.class;294Method m;295296checkNewMethods(clazz, 3);297298/*299* Note the Cipher API is spec'd to throw a NoSuchAlgorithmException300* for a null transformation.301*/302m = getInstance(clazz, STRING);303run(m, NoSuchAlgorithmException.class, (Object) null);304run(m, NoSuchAlgorithmException.class, "");305306m = getInstance(clazz, STRING, STRING);307run(m, NoSuchAlgorithmException.class, null, "SUN");308run(m, NoSuchAlgorithmException.class, "", "SUN");309run(m, IllegalArgumentException.class, "FOO", null);310run(m, IllegalArgumentException.class, "FOO", "");311312m = getInstance(clazz, STRING, PROVIDER);313run(m, NoSuchAlgorithmException.class, null, SUN);314run(m, NoSuchAlgorithmException.class, "", SUN);315run(m, IllegalArgumentException.class, "FOO", null);316}317318private static void testConfiguration() throws Exception {319Class clazz = Configuration.class;320Method m;321Configuration.Parameters cp = new Configuration.Parameters() {322};323324checkNewMethods(clazz, 3);325326m = getInstance(clazz, STRING, Configuration.Parameters.class);327run(m, NullPointerException.class, (Object) null, cp);328run(m, NoSuchAlgorithmException.class, "", cp);329330m = getInstance(clazz, STRING, Configuration.Parameters.class, STRING);331run(m, NullPointerException.class, null, cp, "SUN");332run(m, NoSuchAlgorithmException.class, "", cp, "SUN");333run(m, IllegalArgumentException.class, "FOO", cp, null);334run(m, IllegalArgumentException.class, "FOO", cp, "");335336m = getInstance(clazz, STRING, Configuration.Parameters.class,337PROVIDER);338run(m, NullPointerException.class, null, cp, SUN);339run(m, NoSuchAlgorithmException.class, "", cp, SUN);340run(m, IllegalArgumentException.class, "FOO", cp, null);341}342343private static void testExemptionMechanism() throws Exception {344Class clazz = ExemptionMechanism.class;345Method m;346347checkNewMethods(clazz, 3);348349m = getInstance(clazz, STRING);350run(m, NullPointerException.class, (Object) null);351run(m, NoSuchAlgorithmException.class, "");352353m = getInstance(clazz, STRING, STRING);354run(m, NullPointerException.class, null, "SUN");355run(m, NoSuchAlgorithmException.class, "", "SUN");356run(m, IllegalArgumentException.class, "FOO", null);357run(m, IllegalArgumentException.class, "FOO", "");358359m = getInstance(clazz, STRING, PROVIDER);360run(m, NullPointerException.class, null, SUN);361run(m, NoSuchAlgorithmException.class, "", SUN);362run(m, IllegalArgumentException.class, "FOO", null);363}364365private static void testKeyAgreement() throws Exception {366Class clazz = KeyAgreement.class;367Method m;368369checkNewMethods(clazz, 3);370371m = getInstance(clazz, STRING);372run(m, NullPointerException.class, (Object) null);373run(m, NoSuchAlgorithmException.class, "");374375m = getInstance(clazz, STRING, STRING);376run(m, NullPointerException.class, null, "SUN");377run(m, NoSuchAlgorithmException.class, "", "SUN");378run(m, IllegalArgumentException.class, "FOO", null);379run(m, IllegalArgumentException.class, "FOO", "");380381m = getInstance(clazz, STRING, PROVIDER);382run(m, NullPointerException.class, null, SUN);383run(m, NoSuchAlgorithmException.class, "", SUN);384run(m, IllegalArgumentException.class, "FOO", null);385}386387private static void testKeyFactory() throws Exception {388Class clazz = KeyFactory.class;389Method m;390391checkNewMethods(clazz, 3);392393m = getInstance(clazz, STRING);394run(m, NullPointerException.class, (Object) null);395run(m, NoSuchAlgorithmException.class, "");396397m = getInstance(clazz, STRING, STRING);398run(m, NullPointerException.class, null, "SUN");399run(m, NoSuchAlgorithmException.class, "", "SUN");400run(m, IllegalArgumentException.class, "FOO", null);401run(m, IllegalArgumentException.class, "FOO", "");402403m = getInstance(clazz, STRING, PROVIDER);404run(m, NullPointerException.class, null, SUN);405run(m, NoSuchAlgorithmException.class, "", SUN);406run(m, IllegalArgumentException.class, "FOO", null);407}408409private static void testKeyGenerator() throws Exception {410Class clazz = KeyGenerator.class;411Method m;412413checkNewMethods(clazz, 3);414415m = getInstance(clazz, STRING);416run(m, NullPointerException.class, (Object) null);417run(m, NoSuchAlgorithmException.class, "");418419m = getInstance(clazz, STRING, STRING);420run(m, NullPointerException.class, null, "SUN");421run(m, NoSuchAlgorithmException.class, "", "SUN");422run(m, IllegalArgumentException.class, "FOO", null);423run(m, IllegalArgumentException.class, "FOO", "");424425m = getInstance(clazz, STRING, PROVIDER);426run(m, NullPointerException.class, null, SUN);427run(m, NoSuchAlgorithmException.class, "", SUN);428run(m, IllegalArgumentException.class, "FOO", null);429}430431private static void testKeyManagerFactory() throws Exception {432Class clazz = KeyManagerFactory.class;433Method m;434435checkNewMethods(clazz, 3);436437m = getInstance(clazz, STRING);438run(m, NullPointerException.class, (Object) null);439run(m, NoSuchAlgorithmException.class, "");440441m = getInstance(clazz, STRING, STRING);442run(m, NullPointerException.class, null, "SUN");443run(m, NoSuchAlgorithmException.class, "", "SUN");444run(m, IllegalArgumentException.class, "FOO", null);445run(m, IllegalArgumentException.class, "FOO", "");446447m = getInstance(clazz, STRING, PROVIDER);448run(m, NullPointerException.class, null, SUN);449run(m, NoSuchAlgorithmException.class, "", SUN);450run(m, IllegalArgumentException.class, "FOO", null);451}452453private static void testKeyPairGenerator() throws Exception {454Class clazz = KeyPairGenerator.class;455Method m;456457checkNewMethods(clazz, 3);458459m = getInstance(clazz, STRING);460run(m, NullPointerException.class, (Object) null);461run(m, NoSuchAlgorithmException.class, "");462463m = getInstance(clazz, STRING, STRING);464run(m, NullPointerException.class, null, "SUN");465run(m, NoSuchAlgorithmException.class, "", "SUN");466run(m, IllegalArgumentException.class, "FOO", null);467run(m, IllegalArgumentException.class, "FOO", "");468469m = getInstance(clazz, STRING, PROVIDER);470run(m, NullPointerException.class, null, SUN);471run(m, NoSuchAlgorithmException.class, "", SUN);472run(m, IllegalArgumentException.class, "FOO", null);473}474475private static void testKeyStore() throws Exception {476Class clazz = KeyStore.class;477Method m;478479/*480* There are actually two additional getInstance() methods with File481* as the first parameter.482*/483checkNewMethods(clazz, 5);484485m = getInstance(clazz, STRING);486run(m, NullPointerException.class, (Object) null);487run(m, KeyStoreException.class, "");488489m = getInstance(clazz, STRING, STRING);490run(m, NullPointerException.class, null, "SUN");491run(m, KeyStoreException.class, "", "SUN");492run(m, IllegalArgumentException.class, "FOO", null);493run(m, IllegalArgumentException.class, "FOO", "");494495m = getInstance(clazz, STRING, PROVIDER);496run(m, NullPointerException.class, null, SUN);497run(m, KeyStoreException.class, "", SUN);498run(m, IllegalArgumentException.class, "FOO", null);499}500501private static void testMac() throws Exception {502Class clazz = Mac.class;503Method m;504505checkNewMethods(clazz, 3);506507m = getInstance(clazz, STRING);508run(m, NullPointerException.class, (Object) null);509run(m, NoSuchAlgorithmException.class, "");510511m = getInstance(clazz, STRING, STRING);512run(m, NullPointerException.class, null, "SUN");513run(m, NoSuchAlgorithmException.class, "", "SUN");514run(m, IllegalArgumentException.class, "FOO", null);515run(m, IllegalArgumentException.class, "FOO", "");516517m = getInstance(clazz, STRING, PROVIDER);518run(m, NullPointerException.class, null, SUN);519run(m, NoSuchAlgorithmException.class, "", SUN);520run(m, IllegalArgumentException.class, "FOO", null);521}522523private static void testMessageDigest() throws Exception {524Class clazz = MessageDigest.class;525Method m;526527checkNewMethods(clazz, 3);528529m = getInstance(clazz, STRING);530run(m, NullPointerException.class, (Object) null);531run(m, NoSuchAlgorithmException.class, "");532533m = getInstance(clazz, STRING, STRING);534run(m, NullPointerException.class, null, "SUN");535run(m, NoSuchAlgorithmException.class, "", "SUN");536run(m, IllegalArgumentException.class, "FOO", null);537run(m, IllegalArgumentException.class, "FOO", "");538539m = getInstance(clazz, STRING, PROVIDER);540run(m, NullPointerException.class, null, SUN);541run(m, NoSuchAlgorithmException.class, "", SUN);542run(m, IllegalArgumentException.class, "FOO", null);543}544545private static void testPolicy() throws Exception {546Class clazz = Policy.class;547Method m;548Policy.Parameters pp = new Policy.Parameters() {549};550551checkNewMethods(clazz, 3);552553m = getInstance(clazz, STRING, Policy.Parameters.class);554run(m, NullPointerException.class, (Object) null, pp);555run(m, NoSuchAlgorithmException.class, "", pp);556557m = getInstance(clazz, STRING, Policy.Parameters.class, STRING);558run(m, NullPointerException.class, null, pp, "SUN");559run(m, NoSuchAlgorithmException.class, "", pp, "SUN");560run(m, IllegalArgumentException.class, "FOO", pp, null);561run(m, IllegalArgumentException.class, "FOO", pp, "");562563m = getInstance(clazz, STRING, Policy.Parameters.class, PROVIDER);564run(m, NullPointerException.class, null, pp, SUN);565run(m, NoSuchAlgorithmException.class, "", pp, SUN);566run(m, IllegalArgumentException.class, "FOO", pp, null);567}568569private static void testSSLContext() throws Exception {570Class clazz = SSLContext.class;571Method m;572573checkNewMethods(clazz, 3);574575m = getInstance(clazz, STRING);576run(m, NullPointerException.class, (Object) null);577run(m, NoSuchAlgorithmException.class, "");578579m = getInstance(clazz, STRING, STRING);580run(m, NullPointerException.class, null, "SUN");581run(m, NoSuchAlgorithmException.class, "", "SUN");582run(m, IllegalArgumentException.class, "FOO", null);583run(m, IllegalArgumentException.class, "FOO", "");584585m = getInstance(clazz, STRING, PROVIDER);586run(m, NullPointerException.class, null, SUN);587run(m, NoSuchAlgorithmException.class, "", SUN);588run(m, IllegalArgumentException.class, "FOO", null);589}590591private static void testSecretKeyFactory() throws Exception {592Class clazz = SecretKeyFactory.class;593Method m;594595checkNewMethods(clazz, 3);596597m = getInstance(clazz, STRING);598run(m, NullPointerException.class, (Object) null);599run(m, NoSuchAlgorithmException.class, "");600601m = getInstance(clazz, STRING, STRING);602run(m, NullPointerException.class, null, "SUN");603run(m, NoSuchAlgorithmException.class, "", "SUN");604run(m, IllegalArgumentException.class, "FOO", null);605run(m, IllegalArgumentException.class, "FOO", "");606607m = getInstance(clazz, STRING, PROVIDER);608run(m, NullPointerException.class, null, SUN);609run(m, NoSuchAlgorithmException.class, "", SUN);610run(m, IllegalArgumentException.class, "FOO", null);611}612613private static void testSecureRandom() throws Exception {614Class clazz = SecureRandom.class;615Method m;616SecureRandomParameters srp = new SecureRandomParameters() {617};618619checkNewMethods(clazz, 6);620621m = getInstance(clazz, STRING);622run(m, NullPointerException.class, (Object) null);623run(m, NoSuchAlgorithmException.class, "");624625m = getInstance(clazz, STRING, STRING);626run(m, NullPointerException.class, null, "SUN");627run(m, NoSuchAlgorithmException.class, "", "SUN");628run(m, IllegalArgumentException.class, "FOO", null);629run(m, IllegalArgumentException.class, "FOO", "");630631m = getInstance(clazz, STRING, PROVIDER);632run(m, NullPointerException.class, null, SUN);633run(m, NoSuchAlgorithmException.class, "", SUN);634run(m, IllegalArgumentException.class, "FOO", null);635636m = getInstance(clazz, STRING, SecureRandomParameters.class);637run(m, NullPointerException.class, (Object) null, srp);638run(m, NoSuchAlgorithmException.class, "", srp);639640m = getInstance(clazz, STRING, SecureRandomParameters.class, STRING);641run(m, NullPointerException.class, null, srp, "SUN");642run(m, NoSuchAlgorithmException.class, "", srp, "SUN");643run(m, IllegalArgumentException.class, "FOO", srp, null);644run(m, IllegalArgumentException.class, "FOO", srp, "");645646m = getInstance(clazz, STRING, SecureRandomParameters.class, PROVIDER);647run(m, NullPointerException.class, null, srp, SUN);648run(m, NoSuchAlgorithmException.class, "", srp, SUN);649run(m, IllegalArgumentException.class, "FOO", srp, null);650}651652private static void testSignature() throws Exception {653Class clazz = Signature.class;654Method m;655656checkNewMethods(clazz, 3);657658m = getInstance(clazz, STRING);659run(m, NullPointerException.class, (Object) null);660run(m, NoSuchAlgorithmException.class, "");661662m = getInstance(clazz, STRING, STRING);663run(m, NullPointerException.class, null, "SUN");664run(m, NoSuchAlgorithmException.class, "", "SUN");665run(m, IllegalArgumentException.class, "FOO", null);666run(m, IllegalArgumentException.class, "FOO", "");667668m = getInstance(clazz, STRING, PROVIDER);669run(m, NullPointerException.class, null, SUN);670run(m, NoSuchAlgorithmException.class, "", SUN);671run(m, IllegalArgumentException.class, "FOO", null);672}673674private static void testTrustManagerFactory() throws Exception {675Class clazz = TrustManagerFactory.class;676Method m;677678checkNewMethods(clazz, 3);679680m = getInstance(clazz, STRING);681run(m, NullPointerException.class, (Object) null);682run(m, NoSuchAlgorithmException.class, "");683684m = getInstance(clazz, STRING, STRING);685run(m, NullPointerException.class, null, "SUN");686run(m, NoSuchAlgorithmException.class, "", "SUN");687run(m, IllegalArgumentException.class, "FOO", null);688run(m, IllegalArgumentException.class, "FOO", "");689690m = getInstance(clazz, STRING, PROVIDER);691run(m, NullPointerException.class, null, SUN);692run(m, NoSuchAlgorithmException.class, "", SUN);693run(m, IllegalArgumentException.class, "FOO", null);694}695}696697698