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.io.ByteArrayInputStream;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayOutputStream;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.PrintStream;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Permission;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Security;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.SecurityPermission;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider.Service;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Collection;
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.HashMap;
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Iterator;
39a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilsonimport java.util.Locale;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Set;
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Map.Entry;
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for <code>Provider</code> constructor and methods
47f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class ProviderTest extends TestCase {
505850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann    /*
515850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann     * Implementation note: The algorithm name ASH-1 might seem a bit strange,
525850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann     * but since the algorithms cannot be uninstalled anymore we need to make
535850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann     * sure there are not side-effects on other tests. Simply inserting SHA-1
545850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann     * destroys the existing provider infrastructure.
555850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann     */
56f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
575850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann    Provider[] storedProviders;
58f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    Provider p;
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /*
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @see TestCase#setUp()
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void setUp() throws Exception {
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super.setUp();
66f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
675850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann        storedProviders = Security.getProviders();
68f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        p = new MyProvider();
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
725850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann    @Override
735850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann    protected void tearDown() throws Exception {
745850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann        p.remove("MessageDigest.ASH-1");
755850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann        p.remove("MessageDigest.abc");
765850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann        p.remove("Alg.Alias.MessageDigest.ASH1");
77f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
785850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann        for (Provider p: Security.getProviders()) {
795850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann            Security.removeProvider(p.getName());
805850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann        }
815850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann
825850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann        for (Provider p: storedProviders) {
835850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann            Security.addProvider(p);
845850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann        }
85f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
865850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann        super.tearDown();
875850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann    }
88f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /*
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Class under test for void Provider()
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testProvider() {
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!p.getProperty("Provider.id name").equals(
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                String.valueOf(p.getName()))) {
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Incorrect \"Provider.id name\" value");
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!p.getProperty("Provider.id version").equals(
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                String.valueOf(p.getVersion()))) {
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Incorrect \"Provider.id version\" value");
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!p.getProperty("Provider.id info").equals(
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                String.valueOf(p.getInfo()))) {
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Incorrect \"Provider.id info\" value");
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!p.getProperty("Provider.id className").equals(
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                p.getClass().getName())) {
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Incorrect \"Provider.id className\" value");
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testClear() {
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        p.clear();
1132f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertNull(p.getProperty("MessageDigest.SHA-1"));
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
115f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /*
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Class under test for void Provider(String, double, String)
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testProviderStringdoubleString() {
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider p = new MyProvider("Provider name", 123.456, "Provider info");
1212f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertEquals("Provider name", p.getName());
1222f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertEquals(123.456, p.getVersion(), 0L);
1232f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertEquals("Provider info", p.getInfo());
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testGetName() {
1272f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertEquals("MyProvider", p.getName());
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testGetVersion() {
1312f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertEquals(1.0, p.getVersion(), 0L);
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testGetInfo() {
1352f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertEquals("Provider for testing", p.getInfo());
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /*
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Class under test for void putAll(Map)
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testPutAllMap() {
1422f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        HashMap hm = new HashMap();
1432f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        hm.put("MessageDigest.SHA-1", "aaa.bbb.ccc.ddd");
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        hm.put("Property 1", "value 1");
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        hm.put("serviceName.algName attrName", "attrValue");
1462f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        hm.put("Alg.Alias.engineClassName.aliasName", "standardName");
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        p.putAll(hm);
1482f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        if (!"value 1".equals(p.getProperty("Property 1").trim()) ||
1492f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes                !"attrValue".equals(p.getProperty("serviceName.algName attrName").trim()) ||
1502f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes                !"standardName".equals(p.getProperty("Alg.Alias.engineClassName.aliasName").trim()) ||
1512f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes                !"aaa.bbb.ccc.ddd".equals(p.getProperty("MessageDigest.SHA-1").trim()) ) {
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Incorrect property value");
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /*
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Class under test for Set entrySet()
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testEntrySet() {
1602f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        p.put("MessageDigest.SHA-256", "aaa.bbb.ccc.ddd");
161f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
1622f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        Set s = p.entrySet();
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            s.clear();
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Must return unmodifiable set");
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (UnsupportedOperationException e) {
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
168f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect set size", 8, s.size());
170f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
1712f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        for (Iterator it = s.iterator(); it.hasNext();) {
1722f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            Entry e = (Entry)it.next();
1732f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            String key = (String)e.getKey();
1742f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            String val = (String)e.getValue();
1752f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            if (key.equals("MessageDigest.SHA-1") && val.equals("SomeClassName")) {
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                continue;
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1782f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            if (key.equals("Alg.Alias.MessageDigest.SHA1") && val.equals("SHA-1")) {
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                continue;
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (key.equals("MessageDigest.abc") && val.equals("SomeClassName")) {
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                continue;
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1842f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            if (key.equals("Provider.id className") && val.equals(p.getClass().getName())) {
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                continue;
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (key.equals("Provider.id name") && val.equals("MyProvider")) {
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                continue;
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1902f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            if (key.equals("MessageDigest.SHA-256") && val.equals("aaa.bbb.ccc.ddd")) {
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                continue;
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (key.equals("Provider.id version") && val.equals("1.0")) {
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                continue;
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
1962f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            if (key.equals("Provider.id info") && val.equals("Provider for testing")) {
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                continue;
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Incorrect set");
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /*
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Class under test for Set keySet()
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testKeySet() {
2072f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        p.put("MessageDigest.SHA-256", "aaa.bbb.ccc.ddd");
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set<Object> s = p.keySet();
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            s.clear();
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (UnsupportedOperationException e) {
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2142f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        Set s1 = p.keySet();
2152f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes
2162f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertNotSame(s, s1);
2172f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertFalse(s1.isEmpty());
2182f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertEquals(8, s1.size());
2192f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes
2202f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertTrue(s1.contains("MessageDigest.SHA-256"));
2212f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertTrue(s1.contains("MessageDigest.SHA-1"));
2222f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertTrue(s1.contains("Alg.Alias.MessageDigest.SHA1"));
2232f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertTrue(s1.contains("MessageDigest.abc"));
2242f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertTrue(s1.contains("Provider.id info"));
2252f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertTrue(s1.contains("Provider.id className"));
2262f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertTrue(s1.contains("Provider.id version"));
2272f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertTrue(s1.contains("Provider.id name"));
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /*
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Class under test for Collection values()
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testValues() {
2345850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann        p.put("MessageDigest.ASH-256", "aaa.bbb.ccc.ddd");
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Collection<Object> c = p.values();
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            c.clear();
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (UnsupportedOperationException e) {
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2412f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        Collection c1 = p.values();
2422f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes
2432f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertNotSame(c, c1);
2442f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertFalse(c1.isEmpty());
2452f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertEquals(8, c1.size());
2462f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes
2472f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertTrue(c1.contains("MyProvider"));
2482f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertTrue(c1.contains("aaa.bbb.ccc.ddd"));
2492f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertTrue(c1.contains("Provider for testing"));
2502f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertTrue(c1.contains("1.0"));
2512f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertTrue(c1.contains("SomeClassName"));
2522f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertTrue(c1.contains("SHA-1"));
2532f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertTrue(c1.contains(p.getClass().getName()));
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /*
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Class under test for Object put(Object, Object)
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testPutObjectObject() {
2602f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        p.put("MessageDigest.SHA-1", "aaa.bbb.ccc.ddd");
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        p.put("Type.Algorithm", "className");
2622f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertEquals("aaa.bbb.ccc.ddd", p.getProperty("MessageDigest.SHA-1")
2632f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes                .trim());
264f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2652f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        Set services = p.getServices();
2662f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertEquals(3, services.size());
267f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
2682f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        for (Iterator it = services.iterator(); it.hasNext();) {
2692f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            Provider.Service s = (Provider.Service)it.next();
2702f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            if ("Type".equals(s.getType()) &&
2712f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes                    "Algorithm".equals(s.getAlgorithm()) &&
2722f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes                    "className".equals(s.getClassName())) {
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                continue;
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2752f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            if ("MessageDigest".equals(s.getType()) &&
2762f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes                    "SHA-1".equals(s.getAlgorithm()) &&
2772f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes                    "aaa.bbb.ccc.ddd".equals(s.getClassName())) {
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                continue;
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
2802f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            if ("MessageDigest".equals(s.getType()) &&
2812f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes                    "abc".equals(s.getAlgorithm()) &&
2822f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes                    "SomeClassName".equals(s.getClassName())) {
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                continue;
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Incorrect service");
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
2892f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    /*
2902f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes     * Class under test for Object remove(Object)
2912f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes     */
2922f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    public final void testRemoveObject() {
2932f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        Object o = p.remove("MessageDigest.SHA-1");
2942f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes
2952f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertEquals("SomeClassName", o);
2962f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertNull(p.getProperty("MessageDigest.SHA-1"));
2972f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertEquals(1, p.getServices().size());
2982f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    }
299f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
3002f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    public final void testService1() {
3012f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        p.put("MessageDigest.SHA-1", "AnotherClassName");
3022f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        Provider.Service s = p.getService("MessageDigest", "SHA-1");
3032f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertEquals("AnotherClassName", s.getClassName());
3042f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    }
3052f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes
306a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson    public final void testGetServiceCaseSensitivity() {
307a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson        p.put("i.I", "foo");
308a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson
309a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson        Locale defaultLocale = Locale.getDefault();
310a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson        Locale.setDefault(new Locale("tr", "TR"));
311a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson        try {
312a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson            assertEquals("foo", p.getService("i", "i").getClassName());
313a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson            assertEquals("foo", p.getService("i", "I").getClassName());
314a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson            assertNull(p.getService("\u0130", "\u0130")); // Turkish dotless i and dotted I
315a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson            assertNull(p.getService("\u0131", "\u0131"));
316a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson        } finally {
317a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson            Locale.setDefault(defaultLocale);
318a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson        }
319a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson    }
320a695e8fafadd2591cd148e78f19bc6d7c15121bbJesse Wilson
3212f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // Regression for HARMONY-2760.
3222f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    public void testConstructor() {
3232f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        MyProvider myProvider = new MyProvider(null, 1, null);
3242f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertNull(myProvider.getName());
3252f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertNull(myProvider.getInfo());
3262f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertEquals("null", myProvider.getProperty("Provider.id name"));
3272f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        assertEquals("null", myProvider.getProperty("Provider.id info"));
3282f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    }
3292f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes
3302f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    class MyProvider extends Provider {
3312f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        MyProvider() {
3322f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            super("MyProvider", 1.0, "Provider for testing");
3332f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            put("MessageDigest.SHA-1", "SomeClassName");
3342f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            put("MessageDigest.abc", "SomeClassName");
3352f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            put("Alg.Alias.MessageDigest.SHA1", "SHA-1");
3362f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        }
337f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
3382f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        MyProvider(String name, double version, String info) {
3392f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            super(name, version, info);
3402f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        }
341f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
3422f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        // BEGIN android-added
3432f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        public void putService(Provider.Service s) {
3442f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            super.putService(s);
3452f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        }
3462f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        // END android-added
347f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
3482f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        // BEGIN android-added
3492f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        public void removeService(Provider.Service s) {
3502f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            super.removeService(s);
3512f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        }
3522f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        // END android-added
353f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
3542f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        // BEGIN android-added
3552f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        public int getNumServices() {
3562f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            return getServices().size();
3572f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        }
3582f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes        // END android-added
3592f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    }
3602f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes
3612f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // BEGIN android-added
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testService2() {
3635850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann        Provider[] pp = Security.getProviders("MessageDigest.ASH-1");
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (pp == null) {
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider p2 = pp[0];
3685850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann        String old = p2.getProperty("MessageDigest.ASH-1");
3695850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann        p2.put("MessageDigest.ASH-1", "AnotherClassName");
3705850b60b2000dfdfd7c7bbe27d9ecee52d243933Jorg Pleumann        Provider.Service s = p2.getService("MessageDigest", "ASH-1");
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!"AnotherClassName".equals(s.getClassName())) {
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Incorrect class name " + s.getClassName());
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            s.newInstance(null);
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("No expected NoSuchAlgorithmException");
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
3802f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // END android-added
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
3822f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // BEGIN android-added
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testGetServices() {
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyProvider myProvider = new MyProvider(null, 1, null);
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set<Provider.Service> services = myProvider.getServices();
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(0, services.size());
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider.Service s[] = new Provider.Service[3];
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        s[0] = new Provider.Service(p, "type1", "algorithm1", "className1",
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                null, null);
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        s[1] = new Provider.Service(p, "type2", "algorithm2", "className2",
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                null, null);
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        s[2] = new Provider.Service(p, "type3", "algorithm3", "className3",
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                null, null);
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        myProvider.putService(s[0]);
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        myProvider.putService(s[1]);
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(2, myProvider.getNumServices());
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set<Service> actual = myProvider.getServices();
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[0]));
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[1]));
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(!actual.contains(s[2]));
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        myProvider.removeService(s[1]);
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        actual = myProvider.getServices();
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(1, myProvider.getNumServices());
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[0]));
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(!actual.contains(s[1]));
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(!actual.contains(s[2]));
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        myProvider.putService(s[2]);
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        actual = myProvider.getServices();
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(2, myProvider.getNumServices());
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[0]));
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(!actual.contains(s[1]));
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[2]));
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
4202f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // END android-added
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
4222f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // BEGIN android-added
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testPutService() {
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyProvider myProvider = new MyProvider(null, 1, null);
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider.Service s[] = new Provider.Service[3];
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        s[0] = new Provider.Service(p, "type1", "algorithm1", "className1",
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                null, null);
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        s[1] = new Provider.Service(p, "type2", "algorithm2", "className2",
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                null, null);
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        s[2] = new Provider.Service(p, "type3", "algorithm3", "className3",
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                null, null);
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        myProvider.putService(s[0]);
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        myProvider.putService(s[1]);
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(2, myProvider.getNumServices());
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set<Service> actual = myProvider.getServices();
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[0]));
439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[1]));
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(!actual.contains(s[2]));
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        myProvider.removeService(s[1]);
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(1, myProvider.getNumServices());
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        actual = myProvider.getServices();
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[0]));
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(!actual.contains(s[1]));
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(!actual.contains(s[2]));
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        myProvider.putService(s[2]);
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        actual = myProvider.getServices();
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(2, myProvider.getNumServices());
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[0]));
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(!actual.contains(s[1]));
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[2]));
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        myProvider.putService(s[2]);
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        actual = myProvider.getServices();
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(2, myProvider.getNumServices());
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[0]));
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(!actual.contains(s[1]));
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[2]));
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            myProvider.putService(null);
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException expected");
467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
4712f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // END android-added
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
4732f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // BEGIN android-added
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testRemoveService() {
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyProvider myProvider = new MyProvider(null, 1, null);
476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            myProvider.removeService(null);
478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPoiterException expected");
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider.Service s[] = new Provider.Service[3];
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        s[0] = new Provider.Service(p, "type0", "algorithm0", "className0",
486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                null, null);
487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        s[1] = new Provider.Service(p, "type1", "algorithm1", "className1",
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                null, null);
489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        s[2] = new Provider.Service(p, "type2", "algorithm2", "className2",
490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                null, null);
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            myProvider.removeService(s[0]);
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception");
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        myProvider.putService(s[0]);
499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        myProvider.putService(s[1]);
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        myProvider.putService(s[2]);
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(3, myProvider.getNumServices());
502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Set<Service> actual = myProvider.getServices();
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[0]));
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[1]));
506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[2]));
507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        myProvider.removeService(s[1]);
509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(2, myProvider.getNumServices());
510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        actual = myProvider.getServices();
511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[0]));
513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(!actual.contains(s[1]));
514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[2]));
515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        myProvider.removeService(s[0]);
517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(1, myProvider.getNumServices());
518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        actual = myProvider.getServices();
519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(!actual.contains(s[0]));
521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(!actual.contains(s[1]));
522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(actual.contains(s[2]));
523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        myProvider.removeService(s[2]);
525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(0, myProvider.getNumServices());
526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        actual = myProvider.getServices();
527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(!actual.contains(s[0]));
529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(!actual.contains(s[1]));
530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(!actual.contains(s[2]));
531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            myProvider.removeService(null);
534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPoiterException expected");
535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
5392f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // END android-added
540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
5412f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // BEGIN android-added
542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testLoad() throws IOException {
543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        InputStream is = new ByteArrayInputStream(writeProperties());
544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyProvider myProvider = new MyProvider("name", 1, "info");
545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        myProvider.load(is);
546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("tests.security", myProvider.get("test.pkg"));
547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Unit Tests", myProvider.get("test.proj"));
548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(myProvider.get("#commented.entry"));
549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("info", myProvider.get("Provider.id info"));
551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String className = myProvider.getClass().toString();
552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(
553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                className.substring("class ".length(), className.length()),
554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                myProvider.get("Provider.id className"));
555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("1.0", myProvider.get("Provider.id version"));
556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
558565a85d06ab8bc321d39f12012468cdfb65f5cfeElliott Hughes            myProvider.load((InputStream) null);
559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException expected");
560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // expected
562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
5642f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // END android-added
5652f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes
5662f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // BEGIN android-added
567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final void testLoad2() {
568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        class TestInputStream extends InputStream {
569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            @Override
570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public int read() throws IOException {
571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throw new IOException();
572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
574f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyProvider p = new MyProvider();
576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            p.load(new TestInputStream());
578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("expected IOException");
579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IOException e) {
5802f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes            // expected
581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
5832f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // END android-added
584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
5852f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // BEGIN android-added
586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected byte[] writeProperties() {
587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ByteArrayOutputStream bout = new ByteArrayOutputStream();
588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PrintStream ps = new PrintStream(bout);
589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ps.println("#commented.entry=Bogus");
590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ps.println("test.pkg=tests.security");
591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ps.println("test.proj=Unit Tests");
592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ps.close();
593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return bout.toByteArray();
594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
5952f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // END android-added
596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
5972f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // BEGIN android-added
598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static class TestSecurityManager extends SecurityManager {
599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean called = false;
600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        private final String permissionName;
601f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public TestSecurityManager(String permissionName) {
603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            this.permissionName = permissionName;
604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
605f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @Override
607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void checkPermission(Permission permission) {
608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (permission instanceof SecurityPermission) {
609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (permissionName.equals(permission.getName())) {
610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    called = true;
611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
6152f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes    // END android-added
616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
617