1f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes/*
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
8f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
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 Projectpackage org.apache.harmony.security.tests.java.security;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
202f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughesimport java.security.MessageDigest;
212f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughesimport java.security.NoSuchAlgorithmException;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider;
232f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughesimport java.security.Security;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class Provider2Test extends junit.framework.TestCase {
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class TestProvider extends Provider {
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TestProvider(String name, double version, String info) {
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(name, version, info);
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    class MyEntry implements java.util.Map.Entry {
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         public Object getKey() {
35f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes             return null;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         }
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         public Object getValue() {
39f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes             return null;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         }
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         public Object setValue(Object value) {
43f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes             return null;
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         }
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
46f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    TestProvider provTest = new TestProvider("provTest", 1.2,
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            "contains nothings, purely for testing the class");
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
50f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
52229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.Provider#entrySet()
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_entrySet() {
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test method of java.security.provider.entrySet
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        provTest.put("test.prop", "this is a test property");
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //make it compilable on 1.5
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            provTest.entrySet().add(new MyEntry());
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("was able to modify the entrySet");
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (UnsupportedOperationException e) {
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
67229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.Provider#getInfo()
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInfo() {
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test method of java.security.provider.getInfo
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("the information of the provider is not stored properly",
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "contains nothings, purely for testing the class", provTest
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .getInfo());
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
77229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.Provider#getName()
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getName() {
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test method of java.security.provider.getName
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("the name of the provider is not stored properly",
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "provTest", provTest.getName());
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
86229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.Provider#getVersion()
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getVersion() {
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test method of java.security.provider.getVersion
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("the version of the provider is not stored properly",
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                1.2, provTest.getVersion(), 0);
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
95229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.Provider#keySet()
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_keySet() {
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test method of java.security.provider.keySet
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        provTest.put("test.prop", "this is a test property");
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            provTest.keySet().add("another property key");
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("was able to modify the keySet");
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (UnsupportedOperationException e) {
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
109229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.Provider#values()
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_values() {
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // test method of java.security.provider.values
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        provTest.put("test.prop", "this is a test property");
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            provTest.values().add("another property value");
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("was able to modify the values collection");
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (UnsupportedOperationException e) {
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
121f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
122f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
124229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.security.Provider#toString()
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_toString() {
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // Regression for HARMONY-3734
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("provTest version 1.2", provTest.toString());
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
130f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
1312f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // Regression Test for Provider.Service.getAlias(), which is an package
1322f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // private method but will lead to NPE thrown at
1332f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // Secure.SecurityDorr.getAliases
1342f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    public void test_getAlias() throws Exception {
1352f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        MockProvider mockProvider = new MockProvider("MOCKNAME", 1.0,
1362f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes                "MOCKINFO");
1372f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        Provider.Service service = new Provider.Service(mockProvider,
1382f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes                "MOCKTYPE", "MOCKALGORITHM", "TESTCLASSNAME", null, null);
1392f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        mockProvider.putService(service);
1402f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        Security.addProvider(mockProvider);
1412f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        try {
1422f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            MessageDigest messageDigest = MessageDigest
1432f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes                    .getInstance("NOTEXISTS");
1442f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        }
1452f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes
1462f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        catch (NoSuchAlgorithmException e) {
1472f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            // expected
1482f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        } finally {
1492f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            Security.removeProvider("MOCKNAME");
1502f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        }
1512f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    }
1522f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes
1532f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    public static class MockProvider extends Provider {
1542f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes
1552f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        private static final long serialVersionUID = 1L;
1562f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes
1572f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        public MockProvider(String name, double version, String info) {
1582f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            super(name, version, info);
1592f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes
1602f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        }
1612f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes
1622f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        public void putService(Provider.Service service) {
1632f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            super.putService(service);
1642f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        }
1652f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes
1662f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        public void removeService(Provider.Service service) {
1672f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            super.removeService(service);
1682f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        }
1692f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    }
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
171