summaryrefslogtreecommitdiffstats
path: root/harmony-tests/src/test/java/org/apache/harmony/tests/javax/net/ssl/KeyManagerFactory1Test.java
diff options
context:
space:
mode:
Diffstat (limited to 'harmony-tests/src/test/java/org/apache/harmony/tests/javax/net/ssl/KeyManagerFactory1Test.java')
-rw-r--r--harmony-tests/src/test/java/org/apache/harmony/tests/javax/net/ssl/KeyManagerFactory1Test.java532
1 files changed, 532 insertions, 0 deletions
diff --git a/harmony-tests/src/test/java/org/apache/harmony/tests/javax/net/ssl/KeyManagerFactory1Test.java b/harmony-tests/src/test/java/org/apache/harmony/tests/javax/net/ssl/KeyManagerFactory1Test.java
new file mode 100644
index 0000000..b369ed9
--- /dev/null
+++ b/harmony-tests/src/test/java/org/apache/harmony/tests/javax/net/ssl/KeyManagerFactory1Test.java
@@ -0,0 +1,532 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package tests.api.javax.net.ssl;
+
+import java.io.IOException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.Provider;
+import java.security.Security;
+import java.security.UnrecoverableKeyException;
+import java.security.cert.CertificateException;
+
+import javax.net.ssl.KeyStoreBuilderParameters;
+import javax.net.ssl.ManagerFactoryParameters;
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.KeyManagerFactorySpi;
+
+import org.apache.harmony.security.tests.support.SpiEngUtils;
+import org.apache.harmony.xnet.tests.support.MyKeyManagerFactorySpi;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for <code>KeyManagerFactory</code> class constructors and methods.
+ *
+ */
+public class KeyManagerFactory1Test extends TestCase {
+
+ private static final String srvKeyManagerFactory = "KeyManagerFactory";
+
+ private static String defaultAlgorithm = null;
+
+ private static String defaultProviderName = null;
+
+ private static Provider defaultProvider = null;
+
+ private static boolean DEFSupported = false;
+
+ private static final String NotSupportedMsg = "There is no suitable provider for KeyManagerFactory";
+
+ private static final String[] invalidValues = SpiEngUtils.invalidValues;
+
+ private static String[] validValues = new String[3];
+ static {
+ defaultAlgorithm = Security
+ .getProperty("ssl.KeyManagerFactory.algorithm");
+ if (defaultAlgorithm != null) {
+ defaultProvider = SpiEngUtils.isSupport(defaultAlgorithm,
+ srvKeyManagerFactory);
+ DEFSupported = (defaultProvider != null);
+ defaultProviderName = (DEFSupported ? defaultProvider.getName()
+ : null);
+ validValues[0] = defaultAlgorithm;
+ validValues[1] = defaultAlgorithm.toUpperCase();
+ validValues[2] = defaultAlgorithm.toLowerCase();
+ }
+ }
+
+ protected KeyManagerFactory[] createKMFac() {
+ if (!DEFSupported) {
+ fail(defaultAlgorithm + " algorithm is not supported");
+ return null;
+ }
+ KeyManagerFactory[] kMF = new KeyManagerFactory[3];
+ try {
+ kMF[0] = KeyManagerFactory.getInstance(defaultAlgorithm);
+ kMF[1] = KeyManagerFactory.getInstance(defaultAlgorithm,
+ defaultProvider);
+ kMF[2] = KeyManagerFactory.getInstance(defaultAlgorithm,
+ defaultProviderName);
+ return kMF;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ /**
+ * avax.net.ssl.KeyManagerFactory#getAlgorithm()
+ */
+ public void test_getAlgorithm()
+ throws NoSuchAlgorithmException, NoSuchProviderException {
+ if (!DEFSupported) fail(NotSupportedMsg);
+ assertEquals("Incorrect algorithm",
+ defaultAlgorithm,
+ KeyManagerFactory
+ .getInstance(defaultAlgorithm).getAlgorithm());
+ assertEquals("Incorrect algorithm",
+ defaultAlgorithm,
+ KeyManagerFactory
+ .getInstance(defaultAlgorithm, defaultProviderName)
+ .getAlgorithm());
+ assertEquals("Incorrect algorithm",
+ defaultAlgorithm,
+ KeyManagerFactory.getInstance(defaultAlgorithm, defaultProvider)
+ .getAlgorithm());
+ }
+
+ /**
+ * Test for <code>getDefaultAlgorithm()</code> method
+ * Assertion: returns value which is specifoed in security property
+ */
+ public void test_getDefaultAlgorithm() {
+ if (!DEFSupported) {
+ fail(NotSupportedMsg);
+ return;
+ }
+ String def = KeyManagerFactory.getDefaultAlgorithm();
+ if (defaultAlgorithm == null) {
+ assertNull("DefaultAlgorithm must be null", def);
+ } else {
+ assertEquals("Invalid default algorithm", def, defaultAlgorithm);
+ }
+ String defA = "Proba.keymanagerfactory.defaul.type";
+ Security.setProperty("ssl.KeyManagerFactory.algorithm", defA);
+ assertEquals("Incorrect defaultAlgorithm",
+ KeyManagerFactory.getDefaultAlgorithm(), defA);
+ if (def == null) {
+ def = "";
+ }
+ Security.setProperty("ssl.KeyManagerFactory.algorithm", def);
+ assertEquals("Incorrect defaultAlgorithm",
+ KeyManagerFactory.getDefaultAlgorithm(), def);
+ }
+
+ /**
+ * Test for <code>getInstance(String algorithm)</code> method
+ * Assertions:
+ * returns security property "ssl.KeyManagerFactory.algorithm";
+ * returns instance of KeyManagerFactory
+ */
+ public void test_getInstanceLjava_lang_String01() throws NoSuchAlgorithmException {
+ if (!DEFSupported) {
+ fail(NotSupportedMsg);
+ return;
+ }
+ KeyManagerFactory keyMF;
+ for (int i = 0; i < validValues.length; i++) {
+ keyMF = KeyManagerFactory.getInstance(validValues[i]);
+ assertNotNull("No KeyManagerFactory created", keyMF);
+ assertEquals("Invalid algorithm", keyMF.getAlgorithm(),
+ validValues[i]);
+ }
+ }
+
+ /**
+ * Test for <code>getInstance(String algorithm)</code> method
+ * Assertion:
+ * throws NullPointerException when algorithm is null;
+ * throws NoSuchAlgorithmException when algorithm is not correct;
+ */
+ public void test_getInstanceLjava_lang_String02() {
+ try {
+ KeyManagerFactory.getInstance(null);
+ fail("NoSuchAlgorithmException or NullPointerException should be thrown (algorithm is null");
+ } catch (NoSuchAlgorithmException e) {
+ } catch (NullPointerException e) {
+ }
+ for (int i = 0; i < invalidValues.length; i++) {
+ try {
+ KeyManagerFactory.getInstance(invalidValues[i]);
+ fail("NoSuchAlgorithmException was not thrown as expected for algorithm: "
+ .concat(invalidValues[i]));
+ } catch (NoSuchAlgorithmException e) {
+ }
+ }
+ }
+
+ /**
+ * Test for <code>getInstance(String algorithm, String provider)</code>
+ * method
+ * Assertion: throws IllegalArgumentException when provider is null or empty
+ */
+ public void test_getInstanceLjava_lang_StringLjava_lang_String01() throws NoSuchProviderException,
+ NoSuchAlgorithmException {
+ if (!DEFSupported) {
+ fail(NotSupportedMsg);
+ return;
+ }
+ String provider = null;
+ for (int i = 0; i < validValues.length; i++) {
+ try {
+ KeyManagerFactory.getInstance(validValues[i], provider);
+ fail("Expected IllegalArgumentException was not thrown for null provider");
+ } catch (IllegalArgumentException e) {
+ }
+ try {
+ KeyManagerFactory.getInstance(validValues[i], "");
+ fail("Expected IllegalArgumentException was not thrown for empty provider");
+ } catch (IllegalArgumentException e) {
+ }
+ }
+ }
+
+ /**
+ * Test for <code>getInstance(String algorithm, String provider)</code>
+ * method
+ * Assertion:
+ * throws NullPointerException when algorithm is null;
+ * throws NoSuchAlgorithmException when algorithm is not correct;
+ */
+ public void test_getInstanceLjava_lang_StringLjava_lang_String02() throws NoSuchProviderException {
+ if (!DEFSupported) {
+ fail(NotSupportedMsg);
+ return;
+ }
+ try {
+ KeyManagerFactory.getInstance(null, defaultProviderName);
+ fail("NoSuchAlgorithmException or NullPointerException should be thrown (algorithm is null");
+ } catch (NoSuchAlgorithmException e) {
+ } catch (NullPointerException e) {
+ }
+ for (int i = 0; i < invalidValues.length; i++) {
+ try {
+ KeyManagerFactory.getInstance(invalidValues[i],
+ defaultProviderName);
+ fail("NoSuchAlgorithmException must be thrown (algorithm: "
+ .concat(invalidValues[i]).concat(")"));
+ } catch (NoSuchAlgorithmException e) {
+ }
+ }
+ }
+
+ /**
+ * Test for <code>getInstance(String algorithm, String provider)</code>
+ * method
+ * Assertion: throws NoSuchProviderException when provider has
+ * invalid value
+ */
+ public void test_getInstanceLjava_lang_StringLjava_lang_String03()
+ throws NoSuchAlgorithmException {
+ if (!DEFSupported) {
+ fail(NotSupportedMsg);
+ return;
+ }
+ for (int i = 0; i < validValues.length; i++) {
+ for (int j = 1; j < invalidValues.length; j++) {
+ try {
+ KeyManagerFactory.getInstance(validValues[i],
+ invalidValues[j]);
+ fail("NuSuchProviderException must be thrown (algorithm: "
+ + validValues[i] + " provider: " + invalidValues[j]
+ + ")");
+ } catch (NoSuchProviderException e) {
+ }
+ }
+ }
+ }
+
+ /**
+ * Test for <code>getInstance(String algorithm, String provider)</code>
+ * method Assertion: returns instance of KeyManagerFactory
+ */
+ public void test_getInstanceLjava_lang_StringLjava_lang_String04()
+ throws NoSuchProviderException,
+ NoSuchAlgorithmException {
+ if (!DEFSupported) {
+ fail(NotSupportedMsg);
+ return;
+ }
+ KeyManagerFactory kMF;
+ for (int i = 0; i < validValues.length; i++) {
+ kMF = KeyManagerFactory.getInstance(validValues[i],
+ defaultProviderName);
+ assertNotNull("No KeyManagerFactory created", kMF);
+ assertEquals("Incorrect algorithm", kMF.getAlgorithm(),
+ validValues[i]);
+ assertEquals("Incorrect provider", kMF.getProvider().getName(),
+ defaultProviderName);
+ }
+ }
+
+ /**
+ * Test for <code>getInstance(String algorithm, Provider provider)</code>
+ * method
+ * Assertion: throws IllegalArgumentException when provider is null
+ */
+ public void test_getInstanceLjava_lang_StringLjava_security_Provider01()
+ throws NoSuchAlgorithmException {
+ if (!DEFSupported) {
+ fail(NotSupportedMsg);
+ return;
+ }
+ Provider provider = null;
+ for (int i = 0; i < validValues.length; i++) {
+ try {
+ KeyManagerFactory.getInstance(validValues[i], provider);
+ fail("Expected IllegalArgumentException was not thrown when provider is null");
+ } catch (IllegalArgumentException e) {
+ }
+ }
+ }
+
+ /**
+ * Test for <code>getInstance(String algorithm, Provider provider)</code>
+ * method
+ * Assertion:
+ * throws NullPointerException when algorithm is null;
+ * throws NoSuchAlgorithmException when algorithm is not correct;
+ */
+ public void test_getInstanceLjava_lang_StringLjava_security_Provider02() {
+ if (!DEFSupported) {
+ fail(NotSupportedMsg);
+ return;
+ }
+ try {
+ KeyManagerFactory.getInstance(null, defaultProvider);
+ fail("NoSuchAlgorithmException or NullPointerException should be thrown (algorithm is null");
+ } catch (NoSuchAlgorithmException e) {
+ } catch (NullPointerException e) {
+ }
+ for (int i = 0; i < invalidValues.length; i++) {
+ try {
+ KeyManagerFactory
+ .getInstance(invalidValues[i], defaultProvider);
+ fail("Expected NuSuchAlgorithmException was not thrown");
+ } catch (NoSuchAlgorithmException e) {
+ }
+ }
+ }
+
+ /**
+ * Test for <code>getInstance(String algorithm, Provider provider)</code>
+ * method
+ * Assertion: returns instance of KeyManagerFactory
+ */
+ public void test_getInstanceLjava_lang_StringLjava_security_Provider03()
+ throws NoSuchAlgorithmException,
+ IllegalArgumentException {
+ if (!DEFSupported) {
+ fail(NotSupportedMsg);
+ return;
+ }
+ KeyManagerFactory kMF;
+ for (int i = 0; i < validValues.length; i++) {
+ kMF = KeyManagerFactory
+ .getInstance(validValues[i], defaultProvider);
+ assertNotNull("No KeyManagerFactory created", kMF);
+ assertEquals(kMF.getAlgorithm(), validValues[i]);
+ assertEquals(kMF.getProvider(), defaultProvider);
+ }
+ }
+
+ /**
+ * Test for <code>KeyManagerFactory</code> constructor
+ * Assertion: returns KeyManagerFactory object
+ */
+ public void test_Constructor() throws NoSuchAlgorithmException {
+ if (!DEFSupported) {
+ fail(NotSupportedMsg);
+ return;
+ }
+ KeyManagerFactorySpi spi = new MyKeyManagerFactorySpi();
+ KeyManagerFactory keyMF = new myKeyManagerFactory(spi, defaultProvider,
+ defaultAlgorithm);
+ assertEquals("Incorrect algorithm", keyMF.getAlgorithm(),
+ defaultAlgorithm);
+ assertEquals("Incorrect provider", keyMF.getProvider(), defaultProvider);
+ try {
+ keyMF.init(null, new char[1]);
+ fail("UnrecoverableKeyException must be thrown");
+ } catch (UnrecoverableKeyException e) {
+ } catch (Exception e) {
+ fail("Unexpected: "+e.toString()+" was thrown");
+ }
+ keyMF = new myKeyManagerFactory(null, null, null);
+ assertNull("Aalgorithm must be null", keyMF.getAlgorithm());
+ assertNull("Provider must be null", keyMF.getProvider());
+ try {
+ keyMF.getKeyManagers();
+ } catch (NullPointerException e) {
+ }
+ }
+
+ /**
+ * avax.net.ssl.KeyManagerFactory#getKeyManagers()
+ * @throws NoSuchAlgorithmException
+ * @throws KeyStoreException
+ * @throws IOException
+ * @throws CertificateException
+ * @throws UnrecoverableKeyException
+ */
+ public void test_getKeyManagers()
+ throws Exception {
+ if (!DEFSupported) fail(NotSupportedMsg);
+ KeyManagerFactory kmf = KeyManagerFactory.getInstance(defaultAlgorithm);
+ char[] pass = "password".toCharArray();
+ kmf.init(null, pass);
+ assertNotNull("Key manager array is null", kmf.getKeyManagers());
+ assertEquals("Incorrect size of array",
+ 1, kmf.getKeyManagers().length);
+ }
+
+ /**
+ * avax.net.ssl.KeyManagerFactory#getProvider()
+ */
+ public void test_getProvider()
+ throws Exception {
+ if (!DEFSupported) fail(NotSupportedMsg);
+ assertEquals("Incorrect provider",
+ defaultProvider,
+ KeyManagerFactory
+ .getInstance(defaultAlgorithm).getProvider());
+ assertEquals("Incorrect provider",
+ defaultProvider,
+ KeyManagerFactory
+ .getInstance(defaultAlgorithm, defaultProviderName)
+ .getProvider());
+ assertEquals("Incorrect provider",
+ defaultProvider,
+ KeyManagerFactory.getInstance(defaultAlgorithm, defaultProvider)
+ .getProvider());
+ }
+
+ /**
+ * Test for <code>init(KeyStore keyStore, char[] password)</code> and
+ * <code>getKeyManagers()</code>
+ * Assertion: returns not empty KeyManager array
+ */
+ public void test_initLjava_security_KeyStore$C()
+ throws NoSuchAlgorithmException,
+ KeyStoreException, UnrecoverableKeyException {
+ if (!DEFSupported) {
+ fail(NotSupportedMsg);
+ return;
+ }
+ KeyManagerFactory[] keyMF = createKMFac();
+ assertNotNull("KeyManagerFactory object were not created", keyMF);
+ KeyStore ksNull = null;
+ KeyManager[] km;
+ for (int i = 0; i < keyMF.length; i++) {
+ keyMF[i].init(ksNull, new char[10]);
+ km = keyMF[i].getKeyManagers();
+ assertNotNull("Result should not be null", km);
+ assertTrue("Length of result KeyManager array should not be 0",
+ (km.length > 0));
+ }
+ KeyStore ks;
+ try {
+ ks = KeyStore.getInstance(KeyStore.getDefaultType());
+ ks.load(null, null);
+ } catch (KeyStoreException e) {
+ fail(e.toString() + "default KeyStore type is not supported");
+ return;
+ } catch (Exception e) {
+ fail("Unexpected: " + e.toString());
+ return;
+ }
+ for (int i = 0; i < keyMF.length; i++) {
+ try {
+ keyMF[i].init(ks, new char[10]);
+ } catch (KeyStoreException e) {
+ }
+ km = keyMF[i].getKeyManagers();
+ assertNotNull("Result has not be null", km);
+ assertTrue("Length of result KeyManager array should not be 0",
+ (km.length > 0));
+ }
+
+ }
+
+ /**
+ * Test for <code>init(ManagerFactoryParameters params)</code>
+ * Assertion:
+ * throws InvalidAlgorithmParameterException when params is null
+ */
+ public void test_initLjavax_net_ssl_ManagerFactoryParameters()
+ throws NoSuchAlgorithmException {
+
+ if (!DEFSupported) {
+ fail(NotSupportedMsg);
+ return;
+ }
+ ManagerFactoryParameters par = null;
+ KeyManagerFactory[] keyMF = createKMFac();
+ assertNotNull("KeyManagerFactory object were not created", keyMF);
+ for (int i = 0; i < keyMF.length; i++) {
+ try {
+ keyMF[i].init(par);
+ fail("InvalidAlgorithmParameterException must be thrown");
+ } catch (InvalidAlgorithmParameterException e) {
+ }
+ }
+
+ KeyStore.ProtectionParameter pp = new ProtectionParameterImpl();
+ KeyStore.Builder bld = KeyStore.Builder.newInstance("testType", null, pp);
+ assertNotNull("Null object KeyStore.Builder", bld);
+
+ try {
+ KeyManagerFactory kmf = KeyManagerFactory.getInstance(defaultAlgorithm);
+ KeyStoreBuilderParameters ksp = new KeyStoreBuilderParameters(bld);
+ assertNotNull(ksp.getParameters());
+ kmf.init(ksp);
+ fail("InvalidAlgorithmParameterException must be thrown");
+ } catch (InvalidAlgorithmParameterException e) {
+ }
+ }
+
+}
+
+/**
+ * Additional class for KeyManagerFactory constructor verification
+ */
+class myKeyManagerFactory extends KeyManagerFactory {
+ public myKeyManagerFactory(KeyManagerFactorySpi spi, Provider prov,
+ String alg) {
+ super(spi, prov, alg);
+ }
+}
+
+class ProtectionParameterImpl implements KeyStore.ProtectionParameter {
+ ProtectionParameterImpl(){}
+}