1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @author Boris V. Kuznetsov
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @version $Revision$
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.security.tests.java.security;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidParameterException;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Security;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Arrays;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.HashMap;
30a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilsonimport java.util.Locale;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Map;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Set;
33a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilsonimport junit.framework.TestCase;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class SecurityTest extends TestCase {
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
39229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.Security#insertProviderAt(Provider, int)
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void test_insertProviderAtLjava_security_ProviderLI() {
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.insertProviderAt(null, 1);
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected NullPointerException");
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider p = new MyProvider();
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int initNum = Security.getProviders().length; // initial number of
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // providers
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider initialSecondProviderName = Security.getProviders()[1];
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Insert at position -1, the provider is inserted at the end
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(initNum + 1, Security.insertProviderAt(p, -1));
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertSame(p, Security.getProviders()[initNum]);
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // A provider cannot be added if it is already installed
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(-1, Security.insertProviderAt(p, 1));
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.removeProvider(p.getName());
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // insert at the end
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(initNum + 1, Security.insertProviderAt(p,
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    initNum + 100));
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertSame(p, Security.getProviders()[initNum]);
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.removeProvider(p.getName());
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // insert at the first position
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(1, Security.insertProviderAt(p, 1));
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertSame(p, Security.getProviders()[0]);
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertSame(initialSecondProviderName, // provider shifted down
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    Security.getProviders()[2]);
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } finally { // clean up
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.removeProvider(p.getName());
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
83229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.Security#addProvider(Provider)
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void test_addProviderLjava_security_Provider() {
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.addProvider(null);
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected NullPointerException");
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider p = new MyProvider();
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int initNum = Security.getProviders().length; // initial number of
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // providers
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // add
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(initNum + 1, Security.addProvider(p));
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertSame(p, Security.getProviders()[initNum]);
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // A provider cannot be added if it is already installed
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(-1, Security.addProvider(p));
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } finally { // clean up
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.removeProvider(p.getName());
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
110229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.Security#getAlgorithmProperty(String algName, String
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *        propName)
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @disabled because Security.getAlgorithmProperty looks for
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *           "propName.algName" instead of "Alg.propName.algName"
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("deprecation")
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testGetAlgorithmPropertyLjava_lang_String_java_lang_String() {
117f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider provider = new MyProvider();
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Map<String, String> m = new HashMap<String, String>();
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        m.clear();
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        m.put("Alg.propName.algName", "value");
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        provider.putAll(m);
123f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
1255850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann            Security.addProvider(provider);
126f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
1275850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann            assertNotNull(Security.getAlgorithmProperty("algName", "propName"));
128f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
1295850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann            assertNull(Security.getAlgorithmProperty("DSA", null));
1305850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann            assertNull(Security.getAlgorithmProperty("DSA", "propName"));
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } finally {
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.removeProvider(provider.getName());
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
137229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.Security#getAlgorithms(String serviceName)
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testGetAlgorithmsLjava_lang_String() {
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] servicesNames = { "Signature", "MessageDigest", "Cipher",
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "Mac", "KeyStore" };
142f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String[] invalidServiceNames = { "Rubbish", "", null };
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < servicesNames.length; i++) {
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Set<String> algs = Security.getAlgorithms(servicesNames[i]);
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("no services with specified name: " + servicesNames[i], algs.size() > 0);
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
149f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidServiceNames.length; i++) {
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Set<String> algs = Security.getAlgorithms(invalidServiceNames[i]);
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("services with specified name: " + invalidServiceNames[i], algs.size() == 0);
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testRemoveProvider() {
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider[] providers;
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider[] providers1;
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        providers = Security.getProviders();
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            for (int i = 0; i < providers.length; i++) {
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Security.removeProvider(providers[i].getName());
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Providers not removed", 0,
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    Security.getProviders().length);
1682f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        } finally {    // restore providers
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            for (int i = 0; i < providers.length; i++) {
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                Security.addProvider(providers[i]);
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            providers1 = Security.getProviders();
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            for (int i = 0; i < providers1.length; i++) {
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                assertEquals("Providers not restored correctly", providers[i],
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        providers1[i]);
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
181229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.Security#getProvider(String)
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void test_getProviderLjava_lang_String() {
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Returns null if no provider with the specified name is installed
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(Security.getProvider("SOMEINCORRECTPROVIDERNAME"));
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Returns null if name is null
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(Security.getProvider(null));
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test for existing providers
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider[] providers = Security.getProviders();
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue("getProviders returned zero length array",
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                providers.length > 0);
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (Provider p : providers) {
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String providerName = p.getName();
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertSame(p, Security.getProvider(providerName));
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test for newly installed provider
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider p = new MyProvider();
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.addProvider(p);
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertSame(p, Security.getProvider(p.getName()));
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } finally { // clean up
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.removeProvider(p.getName());
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
212229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.Security#getProviders(String)
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getProvidersLjava_lang_String() {
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.getProviders("");
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected InvalidParameterException");
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidParameterException e) {
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.getProviders((String) null);
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected NullPointerException");
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
227a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson        testGetProviders(Locale.US);
228a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson        testGetProviders(new Locale("tr", "TR"));
229a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson    }
230a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson
231a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson    /**
232a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson     * Test that Security.getProviders does case sensitive operations
233a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson     * independent of its locale.
234a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson     */
235a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson    private void testGetProviders(Locale locale) {
236a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson        Locale defaultLocale = Locale.getDefault();
237a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson        Locale.setDefault(locale);
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider p = new MyProvider();
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.addProvider(p);
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String filter = "MyService.MyAlgorithm";
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue(filter, Arrays.equals(new Provider[] { p }, Security
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getProviders(filter)));
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            filter = "MyService.MyAlgorithm KeySize:512";
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue(filter, Arrays.equals(new Provider[] { p }, Security
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getProviders(filter)));
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            filter = "MyService.MyAlgorithm KeySize:1025";
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull(filter, Security.getProviders(filter));
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // attribute name and value are case insensitive
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            filter = "MyService.MyAlgorithm imPLementedIn:softWARE";
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue(filter, Arrays.equals(new Provider[] { p }, Security
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getProviders(filter)));
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            filter = "MyService.MyAlgorithm ATTribute:attributeVALUE";
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue(filter, Arrays.equals(new Provider[] { p }, Security
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getProviders(filter)));
260a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson            filter = "MyService.MyAlgorithm \u0130mPLemented\u0131n:softWARE"; // Turkish dotless i
261a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson            assertTrue(filter, Arrays.equals(new Provider[] { p }, Security
262a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson                    .getProviders(filter)));
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Regression for HARMONY-2761
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            filter = "MyService.NoKeySize KeySize:512";
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull(filter, Security.getProviders(filter));
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            filter = "MyService.NoImplementedIn ImplementedIn:Software";
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull(filter, Security.getProviders(filter));
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            filter = "ABCService.NoAttribute Attribute:ABC";
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull(filter, Security.getProviders(filter));
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } finally { // clean up
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.removeProvider(p.getName());
275a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson            Locale.setDefault(defaultLocale);
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
280229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.Security#getProviders(java.util.Map)
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getProvidersLjava_util_Map() {
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Map<String, String> m = new HashMap<String, String>();
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Security.getProviders(m);
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Not null result on empty map", Security.getProviders(m));
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.getProviders((Map<String, String>) null);
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected NullPointerException");
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        m.put("AAA.BBB.CCC", "aaaa"); // key has dot instead of space
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.getProviders(m);
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected InvalidParameterException");
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidParameterException e) {
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider p = new MyProvider();
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.addProvider(p);
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.clear();
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.put("MyService.MyAlgorithm", "");
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.put("MessageDigest.SHA-1", "");
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("MyService.MyAlgorithm", Arrays.equals(
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new Provider[] { p }, Security.getProviders(m)));
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.clear();
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.put("MyService.MyAlgorithm KeySize", "512");
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.put("MessageDigest.SHA-1", "");
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("MyService.MyAlgorithm KeySize:512", Arrays.equals(
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new Provider[] { p }, Security.getProviders(m)));
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.clear();
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.put("MyService.MyAlgorithm KeySize", "1025");
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.put("MessageDigest.SHA-1", "");
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull("MyService.MyAlgorithm KeySize:1025", Security
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getProviders(m));
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // attribute name and value are case insensitive
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.clear();
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.put("MyService.MyAlgorithm imPLementedIn", "softWARE");
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue(Arrays.equals(new Provider[] { p }, Security
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getProviders(m)));
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.clear();
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.put("MyService.MyAlgorithm ATTribute", "attributeVALUE");
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue(Arrays.equals(new Provider[] { p }, Security
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getProviders(m)));
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // Regression for HARMONY-2761
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.clear();
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.put("MyService.NoKeySize KeySize", "512");
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull("No KeySize attribute", Security.getProviders(m));
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.clear();
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.put("MyService.NoImplementedIn ImplementedIn", "Software");
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull("No ImplementedIn attribute", Security.getProviders(m));
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.clear();
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            m.put("ABCService.NoAttribute Attribute", "ABC");
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull(Security.getProviders(m));
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } finally { // clean up
347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.removeProvider(p.getName());
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
350f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
352229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.Security#getProviders()
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getProviders() {
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider[] prv;
356f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyProvider provider = new MyProvider();
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            prv = Security.getProviders();
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int len1 = prv.length;
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (len1 == 0) {
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("Array of providers is ampty");
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.addProvider(provider);
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            prv = Security.getProviders();
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int len2 = prv.length;
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if ((len2 == len1 + 1) && (prv[len2-1].toString().equals("MyProvider version 1.0"))) {
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // ok
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } else {
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("Method getProviders() returned incorrect values");
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception ex) {
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception");
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        finally {
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.removeProvider(provider.getName());
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
381229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.Security#getProperty(String)
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getPropertyLjava_lang_String() {
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.getProperty(null);
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected NullPointerException.");
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
390f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
3912f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        Security.setProperty("myprop","test white space    ");
3922f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertEquals("test white space", Security.getProperty("myprop"));
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
396229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.Security#setProperty(String,String)
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_setPropertyLjava_lang_StringLjava_lang_String() {
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.setProperty(null, "");
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected NullPointerException.");
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Security.setProperty("", null);
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected NullPointerException.");
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Security.setProperty("", "");
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Empty property", "", Security.getProperty(""));
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Security.setProperty("My Test Property", "My property value");
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("My property value", Security
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getProperty("My Test Property"));
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("serial")
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class MyProvider extends Provider {
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyProvider() {
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super("MyProvider", 1.0, "Provider for testing");
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            put("MessageDigest.SHA-1", "SomeClassName");
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            put("MyService.MyAlgorithm", "SomeClassName");
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            put("MyService.MyAlgorithm KeySize", "1024");
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            put("MyService.MyAlgorithm ImplementedIn", "Software");
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            put("MyService.MyAlgorithm Attribute", "AttributeValue");
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // service has no KeySize attribute
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            put("MyService.NoKeySize", "SomeClassName");
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // service has no ImplementedIn attribute
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            put("MyService.NoImplementedIn", "SomeClassName");
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // service has no 'Attribute' attribute
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            put("ABCService.NoAttribute", "SomeClassName");
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
441