| /* |
| * 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. |
| */ |
| |
| /** |
| * @author Boris V. Kuznetsov |
| * @version $Revision$ |
| */ |
| |
| package org.apache.harmony.security.tests.java.security; |
| |
| import java.security.InvalidParameterException; |
| import java.security.Provider; |
| import java.security.Security; |
| import java.util.Arrays; |
| import java.util.HashMap; |
| import java.util.Locale; |
| import java.util.Map; |
| import java.util.Set; |
| import junit.framework.TestCase; |
| |
| |
| public class SecurityTest extends TestCase { |
| |
| /** |
| * java.security.Security#insertProviderAt(Provider, int) |
| */ |
| public final void test_insertProviderAtLjava_security_ProviderLI() { |
| |
| try { |
| Security.insertProviderAt(null, 1); |
| fail("No expected NullPointerException"); |
| } catch (NullPointerException e) { |
| } |
| |
| Provider p = new MyProvider(); |
| int initNum = Security.getProviders().length; // initial number of |
| // providers |
| Provider initialSecondProviderName = Security.getProviders()[1]; |
| |
| try { |
| |
| // Insert at position -1, the provider is inserted at the end |
| assertEquals(initNum + 1, Security.insertProviderAt(p, -1)); |
| assertSame(p, Security.getProviders()[initNum]); |
| |
| // A provider cannot be added if it is already installed |
| assertEquals(-1, Security.insertProviderAt(p, 1)); |
| |
| Security.removeProvider(p.getName()); |
| |
| // insert at the end |
| assertEquals(initNum + 1, Security.insertProviderAt(p, |
| initNum + 100)); |
| assertSame(p, Security.getProviders()[initNum]); |
| |
| Security.removeProvider(p.getName()); |
| |
| // insert at the first position |
| assertEquals(1, Security.insertProviderAt(p, 1)); |
| assertSame(p, Security.getProviders()[0]); |
| assertSame(initialSecondProviderName, // provider shifted down |
| Security.getProviders()[2]); |
| } finally { // clean up |
| Security.removeProvider(p.getName()); |
| } |
| } |
| |
| /** |
| * java.security.Security#addProvider(Provider) |
| */ |
| public final void test_addProviderLjava_security_Provider() { |
| |
| try { |
| Security.addProvider(null); |
| fail("No expected NullPointerException"); |
| } catch (NullPointerException e) { |
| } |
| |
| Provider p = new MyProvider(); |
| int initNum = Security.getProviders().length; // initial number of |
| // providers |
| |
| try { |
| // add |
| assertEquals(initNum + 1, Security.addProvider(p)); |
| assertSame(p, Security.getProviders()[initNum]); |
| |
| // A provider cannot be added if it is already installed |
| assertEquals(-1, Security.addProvider(p)); |
| } finally { // clean up |
| Security.removeProvider(p.getName()); |
| } |
| } |
| |
| /** |
| * java.security.Security#getAlgorithmProperty(String algName, String |
| * propName) |
| * @disabled because Security.getAlgorithmProperty looks for |
| * "propName.algName" instead of "Alg.propName.algName" |
| */ |
| @SuppressWarnings("deprecation") |
| public final void testGetAlgorithmPropertyLjava_lang_String_java_lang_String() { |
| |
| Provider provider = new MyProvider(); |
| Map<String, String> m = new HashMap<String, String>(); |
| m.clear(); |
| m.put("Alg.propName.algName", "value"); |
| provider.putAll(m); |
| |
| try { |
| Security.addProvider(provider); |
| |
| assertNotNull(Security.getAlgorithmProperty("algName", "propName")); |
| |
| assertNull(Security.getAlgorithmProperty("DSA", null)); |
| assertNull(Security.getAlgorithmProperty("DSA", "propName")); |
| } finally { |
| Security.removeProvider(provider.getName()); |
| } |
| } |
| |
| /** |
| * java.security.Security#getAlgorithms(String serviceName) |
| */ |
| public final void testGetAlgorithmsLjava_lang_String() { |
| String[] servicesNames = { "Signature", "MessageDigest", "Cipher", |
| "Mac", "KeyStore" }; |
| |
| String[] invalidServiceNames = { "Rubbish", "", null }; |
| |
| for (int i = 0; i < servicesNames.length; i++) { |
| Set<String> algs = Security.getAlgorithms(servicesNames[i]); |
| assertTrue("no services with specified name: " + servicesNames[i], algs.size() > 0); |
| } |
| |
| for (int i = 0; i < invalidServiceNames.length; i++) { |
| Set<String> algs = Security.getAlgorithms(invalidServiceNames[i]); |
| assertTrue("services with specified name: " + invalidServiceNames[i], algs.size() == 0); |
| } |
| } |
| |
| public final void testRemoveProvider() { |
| Provider[] providers; |
| Provider[] providers1; |
| |
| providers = Security.getProviders(); |
| |
| try { |
| for (int i = 0; i < providers.length; i++) { |
| Security.removeProvider(providers[i].getName()); |
| } |
| assertEquals("Providers not removed", 0, |
| Security.getProviders().length); |
| } finally { // restore providers |
| for (int i = 0; i < providers.length; i++) { |
| Security.addProvider(providers[i]); |
| } |
| providers1 = Security.getProviders(); |
| for (int i = 0; i < providers1.length; i++) { |
| assertEquals("Providers not restored correctly", providers[i], |
| providers1[i]); |
| } |
| } |
| } |
| |
| /** |
| * java.security.Security#getProvider(String) |
| */ |
| public final void test_getProviderLjava_lang_String() { |
| |
| // Returns null if no provider with the specified name is installed |
| assertNull(Security.getProvider("SOMEINCORRECTPROVIDERNAME")); |
| |
| // Returns null if name is null |
| assertNull(Security.getProvider(null)); |
| |
| // test for existing providers |
| Provider[] providers = Security.getProviders(); |
| assertTrue("getProviders returned zero length array", |
| providers.length > 0); |
| for (Provider p : providers) { |
| String providerName = p.getName(); |
| assertSame(p, Security.getProvider(providerName)); |
| } |
| |
| // test for newly installed provider |
| Provider p = new MyProvider(); |
| try { |
| Security.addProvider(p); |
| |
| assertSame(p, Security.getProvider(p.getName())); |
| } finally { // clean up |
| Security.removeProvider(p.getName()); |
| } |
| } |
| |
| /** |
| * java.security.Security#getProviders(String) |
| */ |
| public void test_getProvidersLjava_lang_String() { |
| try { |
| Security.getProviders(""); |
| fail("No expected InvalidParameterException"); |
| } catch (InvalidParameterException e) { |
| } |
| |
| try { |
| Security.getProviders((String) null); |
| fail("No expected NullPointerException"); |
| } catch (NullPointerException e) { |
| } |
| |
| testGetProviders(Locale.US); |
| testGetProviders(new Locale("tr", "TR")); |
| } |
| |
| /** |
| * Test that Security.getProviders does case sensitive operations |
| * independent of its locale. |
| */ |
| private void testGetProviders(Locale locale) { |
| Locale defaultLocale = Locale.getDefault(); |
| Locale.setDefault(locale); |
| Provider p = new MyProvider(); |
| try { |
| Security.addProvider(p); |
| |
| String filter = "MyService.MyAlgorithm"; |
| assertTrue(filter, Arrays.equals(new Provider[] { p }, Security |
| .getProviders(filter))); |
| |
| filter = "MyService.MyAlgorithm KeySize:512"; |
| assertTrue(filter, Arrays.equals(new Provider[] { p }, Security |
| .getProviders(filter))); |
| |
| filter = "MyService.MyAlgorithm KeySize:1025"; |
| assertNull(filter, Security.getProviders(filter)); |
| |
| // attribute name and value are case insensitive |
| filter = "MyService.MyAlgorithm imPLementedIn:softWARE"; |
| assertTrue(filter, Arrays.equals(new Provider[] { p }, Security |
| .getProviders(filter))); |
| filter = "MyService.MyAlgorithm ATTribute:attributeVALUE"; |
| assertTrue(filter, Arrays.equals(new Provider[] { p }, Security |
| .getProviders(filter))); |
| filter = "MyService.MyAlgorithm \u0130mPLemented\u0131n:softWARE"; // Turkish dotless i |
| assertTrue(filter, Arrays.equals(new Provider[] { p }, Security |
| .getProviders(filter))); |
| |
| // Regression for HARMONY-2761 |
| filter = "MyService.NoKeySize KeySize:512"; |
| assertNull(filter, Security.getProviders(filter)); |
| |
| filter = "MyService.NoImplementedIn ImplementedIn:Software"; |
| assertNull(filter, Security.getProviders(filter)); |
| |
| filter = "ABCService.NoAttribute Attribute:ABC"; |
| assertNull(filter, Security.getProviders(filter)); |
| } finally { // clean up |
| Security.removeProvider(p.getName()); |
| Locale.setDefault(defaultLocale); |
| } |
| } |
| |
| /** |
| * java.security.Security#getProviders(java.util.Map) |
| */ |
| public void test_getProvidersLjava_util_Map() { |
| |
| Map<String, String> m = new HashMap<String, String>(); |
| Security.getProviders(m); |
| |
| assertNull("Not null result on empty map", Security.getProviders(m)); |
| |
| try { |
| Security.getProviders((Map<String, String>) null); |
| fail("No expected NullPointerException"); |
| } catch (NullPointerException e) { |
| } |
| |
| m.put("AAA.BBB.CCC", "aaaa"); // key has dot instead of space |
| try { |
| Security.getProviders(m); |
| fail("No expected InvalidParameterException"); |
| } catch (InvalidParameterException e) { |
| } |
| |
| Provider p = new MyProvider(); |
| try { |
| Security.addProvider(p); |
| |
| m.clear(); |
| m.put("MyService.MyAlgorithm", ""); |
| m.put("MessageDigest.SHA-1", ""); |
| assertTrue("MyService.MyAlgorithm", Arrays.equals( |
| new Provider[] { p }, Security.getProviders(m))); |
| |
| m.clear(); |
| m.put("MyService.MyAlgorithm KeySize", "512"); |
| m.put("MessageDigest.SHA-1", ""); |
| assertTrue("MyService.MyAlgorithm KeySize:512", Arrays.equals( |
| new Provider[] { p }, Security.getProviders(m))); |
| |
| m.clear(); |
| m.put("MyService.MyAlgorithm KeySize", "1025"); |
| m.put("MessageDigest.SHA-1", ""); |
| assertNull("MyService.MyAlgorithm KeySize:1025", Security |
| .getProviders(m)); |
| |
| // attribute name and value are case insensitive |
| m.clear(); |
| m.put("MyService.MyAlgorithm imPLementedIn", "softWARE"); |
| assertTrue(Arrays.equals(new Provider[] { p }, Security |
| .getProviders(m))); |
| m.clear(); |
| m.put("MyService.MyAlgorithm ATTribute", "attributeVALUE"); |
| assertTrue(Arrays.equals(new Provider[] { p }, Security |
| .getProviders(m))); |
| |
| // Regression for HARMONY-2761 |
| m.clear(); |
| m.put("MyService.NoKeySize KeySize", "512"); |
| assertNull("No KeySize attribute", Security.getProviders(m)); |
| |
| m.clear(); |
| m.put("MyService.NoImplementedIn ImplementedIn", "Software"); |
| assertNull("No ImplementedIn attribute", Security.getProviders(m)); |
| |
| m.clear(); |
| m.put("ABCService.NoAttribute Attribute", "ABC"); |
| assertNull(Security.getProviders(m)); |
| } finally { // clean up |
| Security.removeProvider(p.getName()); |
| } |
| } |
| |
| /** |
| * java.security.Security#getProviders() |
| */ |
| public void test_getProviders() { |
| Provider[] prv; |
| |
| MyProvider provider = new MyProvider(); |
| try { |
| prv = Security.getProviders(); |
| int len1 = prv.length; |
| if (len1 == 0) { |
| fail("Array of providers is ampty"); |
| } |
| Security.addProvider(provider); |
| prv = Security.getProviders(); |
| int len2 = prv.length; |
| if ((len2 == len1 + 1) && (prv[len2-1].toString().equals("MyProvider version 1.0"))) { |
| // ok |
| } else { |
| fail("Method getProviders() returned incorrect values"); |
| } |
| } catch (Exception ex) { |
| fail("Unexpected exception"); |
| } |
| finally { |
| Security.removeProvider(provider.getName()); |
| } |
| } |
| |
| /** |
| * java.security.Security#getProperty(String) |
| */ |
| public void test_getPropertyLjava_lang_String() { |
| |
| try { |
| Security.getProperty(null); |
| fail("No expected NullPointerException."); |
| } catch (NullPointerException e) { |
| } |
| |
| Security.setProperty("myprop","test white space "); |
| assertEquals("test white space", Security.getProperty("myprop")); |
| } |
| |
| /** |
| * java.security.Security#setProperty(String,String) |
| */ |
| public void test_setPropertyLjava_lang_StringLjava_lang_String() { |
| |
| try { |
| Security.setProperty(null, ""); |
| fail("No expected NullPointerException."); |
| } catch (NullPointerException e) { |
| } |
| |
| try { |
| Security.setProperty("", null); |
| fail("No expected NullPointerException."); |
| } catch (NullPointerException e) { |
| } |
| |
| Security.setProperty("", ""); |
| assertEquals("Empty property", "", Security.getProperty("")); |
| |
| Security.setProperty("My Test Property", "My property value"); |
| assertEquals("My property value", Security |
| .getProperty("My Test Property")); |
| } |
| |
| @SuppressWarnings("serial") |
| class MyProvider extends Provider { |
| MyProvider() { |
| super("MyProvider", 1.0, "Provider for testing"); |
| put("MessageDigest.SHA-1", "SomeClassName"); |
| put("MyService.MyAlgorithm", "SomeClassName"); |
| put("MyService.MyAlgorithm KeySize", "1024"); |
| put("MyService.MyAlgorithm ImplementedIn", "Software"); |
| put("MyService.MyAlgorithm Attribute", "AttributeValue"); |
| |
| // service has no KeySize attribute |
| put("MyService.NoKeySize", "SomeClassName"); |
| |
| // service has no ImplementedIn attribute |
| put("MyService.NoImplementedIn", "SomeClassName"); |
| |
| // service has no 'Attribute' attribute |
| put("ABCService.NoAttribute", "SomeClassName"); |
| } |
| } |
| } |