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 Aleksei Y. Semenov
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @version $Revision$
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.java.security;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Identity;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.IdentityScope;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyManagementException;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Permission;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Permissions;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.PublicKey;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.SecurityPermission;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.CertificateStub;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.IdentityStub;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.PublicKeyStub;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for class Identity
41f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project@SuppressWarnings("deprecation")
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class IdentityTest extends TestCase {
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static class MySecurityManager extends SecurityManager {
47f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        public Permissions denied = new Permissions();
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void checkPermission(Permission permission){
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (denied!=null && denied.implies(permission)) throw new SecurityException();
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
52f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testHashCode() {
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        new IdentityStub("testHashCode").hashCode();
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testEquals() throws Exception {
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        IdentityStub i1 = new IdentityStub("testEquals");
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object value[] =  {
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                null, Boolean.FALSE,
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new Object(), Boolean.FALSE,
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                i1, Boolean.TRUE,
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new IdentityStub(i1.getName()), Boolean.TRUE
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
65f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int k=0; k<value.length; k+=2) {
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(value[k+1], new Boolean(i1.equals(value[k])));
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (Boolean.TRUE.equals(value[k+1])) assertEquals(i1.hashCode(), value[k].hashCode());
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // check other cases
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Identity i2 = new IdentityStub("testEquals", IdentityScope.getSystemScope());
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(i1.identityEquals(i2), i1.equals(i2));
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Identity i3 = new IdentityStub("testEquals3");
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(i1.identityEquals(i3), i1.equals(i3));
75f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
79f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * verify Identity.toString()
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
81f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     public void testToString2() {
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(new IdentityStub("testToString2").toString());
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * verify Identity() creates instance
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testIdentity() {
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(new IdentityStub());
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /*
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * verify Identity(String) creates instance with given name
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testIdentityString() {
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Identity i = new IdentityStub("iii");
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(i);
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("iii", i.getName());
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        i=new IdentityStub(null);
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(i);
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(i.getName());
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * verify Identity(String, IdentityScope) creates instance with given name and in give scope
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testIdentityStringIdentityScope() throws Exception {
108f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        IdentityScope s = IdentityScope.getSystemScope();
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Identity i = new IdentityStub("iii2", s);
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(i);
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("iii2", i.getName());
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertSame(s, i.getScope());
113f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertSame(i, s.getIdentity(i.getName()));
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * verify addCertificate(Certificate certificate) adds a certificate for this identity.
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * If the identity has a public key, the public key in the certificate must be the same
119f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testAddCertificate1() throws Exception {
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Identity i = new IdentityStub("iii");
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKeyStub pk1 = new PublicKeyStub("kkk", "fff", new byte[]{1,2,3,4,5});
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        i.setPublicKey(pk1);
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // try with the same key
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertificateStub c1 = new CertificateStub("fff", null, null, pk1);
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        i.addCertificate(c1);
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertSame(c1, i.certificates()[0]);
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // try Certificate with different key
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            i.addCertificate(new CertificateStub("ccc", null, null, new PublicKeyStub("k2", "fff", new byte[]{6,7,8,9,0})));
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("KeyManagementException should be thrown");
133f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        } catch (KeyManagementException ok) {}
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * verify addCertificate(Certificate certificate) adds a certificate for this identity.
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * if the identity does not have a public key, the identity's public key is set to be that specified in the certificate.
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testAddCertificate2() throws Exception {
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Identity i = new IdentityStub("iii");
142f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        PublicKeyStub pk1 = new PublicKeyStub("kkk", "fff", null);
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertificateStub c1 = new CertificateStub("fff", null, null, pk1);
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        i.addCertificate(c1);
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertSame(c1, i.certificates()[0]);
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertSame(pk1, i.getPublicKey());
147f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
149f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * verify addCertificate(Certificate certificate) throws KeyManagementException if certificate is null
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testAddCertificate4() throws Exception {
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            new IdentityStub("aaa").addCertificate(null);
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("KeyManagementException should be thrown");
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (KeyManagementException ok) {
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException ok) {}
159f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//
162f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes//  Commented out since there will no be fix for the test failure
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//    /**
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//     * verify removeCertificate(Certificate certificate) removes certificate
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//     */
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//    public void testRemoveCertificate1() throws Exception{
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        Identity i = new IdentityStub("iii");
168f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes//        PublicKeyStub pk1 = new PublicKeyStub("kkk", "fff", null);
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        CertificateStub c1 = new CertificateStub("fff", null, null, pk1);
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        i.addCertificate(c1);
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        assertSame(c1, i.certificates()[0]);
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        i.removeCertificate(c1);
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        assertEquals(0, i.certificates().length);
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        // throw KeyManagementException if certificate not found
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        try {
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//            i.removeCertificate(c1);
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//            fail("KeyManagementException should be thrown");
178f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes//        } catch (KeyManagementException ok) {
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        }
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        try {
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//            i.removeCertificate(null);
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//            fail("KeyManagementException should be thrown");
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        } catch (KeyManagementException ok) {
184f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes//
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        }
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//    }
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * verify certificates() returns a copy of all certificates for this identity
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testCertificates() throws Exception {
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Identity i = new IdentityStub("iii");
193f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        PublicKeyStub pk1 = new PublicKeyStub("kkk", "fff", null);
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertificateStub c1 = new CertificateStub("fff", null, null, pk1);
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertificateStub c2 = new CertificateStub("zzz", null, null, pk1);
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        i.addCertificate(c1);
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        i.addCertificate(c2);
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        java.security.Certificate[] s = i.certificates();
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(2, s.length);
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(c1.equals(s[0]) || c2.equals(s[0]));
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(c1.equals(s[1]) || c2.equals(s[1]));
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        s[0] = null;
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        s[1] = null;
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // check that the copy was modified
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        s = i.certificates();
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(2, s.length);
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(c1.equals(s[0]) || c2.equals(s[0]));
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(c1.equals(s[1]) || c2.equals(s[1]));
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
212f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * verify Identity.identityEquals(Identity) return true, only if names and public keys are equal
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testIdentityEquals() throws Exception {
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String name = "nnn";
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey pk = new PublicKeyStub("aaa", "fff", new byte[]{1,2,3,4,5});
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        IdentityStub i = new IdentityStub(name);
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        i.setPublicKey(pk);
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object[] value = {
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                //null, Boolean.FALSE,
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                //new Object(), Boolean.FALSE,
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new IdentityStub("111"), Boolean.FALSE,
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new IdentityStub(name), Boolean.FALSE,
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new IdentityStub(name, IdentityScope.getSystemScope()), Boolean.FALSE,
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                i, Boolean.TRUE,
226f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                new IdentityStub(name, pk), Boolean.TRUE
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int k=0; k<value.length; k+=2){
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(value[k+1], new Boolean(i.identityEquals((Identity)value[k])));
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (Boolean.TRUE.equals(value[k+1])) assertEquals(i.hashCode(), value[k].hashCode());
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
232f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        Identity i2 = IdentityScope.getSystemScope().getIdentity(name);
233f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        i2.setPublicKey(pk);
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(i.identityEquals(i2));
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * verify Identity.toString(boolean) return string representation of identity
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testToStringboolean() throws Exception {
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        new IdentityStub("aaa").toString(false);
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        new IdentityStub("aaa2", IdentityScope.getSystemScope()).toString(false);
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        new IdentityStub("bbb").toString(true);
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        new IdentityStub("bbb2", IdentityScope.getSystemScope()).toString(true);
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * verify Identity.getScope() returns identity's scope
249f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     */
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetScope() throws Exception {
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project       Identity i = new IdentityStub("testGetScope");
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project       assertNull(i.getScope());
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project       IdentityScope s = IdentityScope.getSystemScope();
254f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project       Identity i2 = new IdentityStub("testGetScope2", s);
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project       assertSame(s, i2.getScope());
257f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
260f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
261f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * verify Identity.setPublicKey() throws KeyManagementException if key is invalid
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSetPublicKey2() throws Exception {
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Identity i2 = new IdentityStub("testSetPublicKey2_2", IdentityScope.getSystemScope());
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        new PublicKeyStub("kkk", "testSetPublicKey2", new byte[]{1,2,3,4,5});
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            i2.setPublicKey(null);
269f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            //fail("KeyManagementException should be thrown - key is null");
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (KeyManagementException ok) {}
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
272f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//
274f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes//  Commented out since there will no be fix for the test failure
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//    /**
276f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes//     *
277f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes//     * verify Identity.setPublicKey() throws KeyManagementException if key is already used
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//     *
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//     */
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//    public void testSetPublicKey3() throws Exception {
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        Identity i1 = new IdentityStub("testSetPublicKey3_1", IdentityScope.getSystemScope());
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        Identity i2 = new IdentityStub("testSetPublicKey3_2", IdentityScope.getSystemScope());
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        PublicKey pk = new PublicKeyStub("kkk", "fff", new byte[]{1,2,3,4,5});
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        i1.setPublicKey(pk);
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        try {
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//            i2.setPublicKey(pk);
287f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes//            fail("KeyManagementException should be thrown - key already used");
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//        } catch (KeyManagementException ok) {};
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project//    }
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
291f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * verify Identity.setPublicKey()  removes old key and all identity's certificates
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testSetPublicKey4() throws Exception {
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Identity i = new IdentityStub("testSetPublicKey4");
297f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        PublicKeyStub pk1 = new PublicKeyStub("kkk", "Identity.testSetPublicKey4", null);
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertificateStub c1 = new CertificateStub("fff", null, null, pk1);
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertificateStub c2 = new CertificateStub("zzz", null, null, pk1);
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        i.addCertificate(c1);
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        i.addCertificate(c2);
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(2, i.certificates().length);
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertSame(pk1, i.getPublicKey());
304f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
305f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        PublicKeyStub pk2 = new PublicKeyStub("zzz", "Identity.testSetPublicKey4", null);
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        i.setPublicKey(pk2);
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertSame(pk2, i.getPublicKey());
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(0, i.certificates().length);
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
310f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * verify Identity.getPublicKey() returns public key
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetPublicKey() throws Exception {
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Identity i = new IdentityStub("testGetPublicKey");
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(i.getPublicKey());
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PublicKey pk = new PublicKeyStub("kkk", "Identity.testGetPublicKey", null);
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        i.setPublicKey(pk);
319f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertSame(pk, i.getPublicKey());
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetInfo() {
323f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Identity i = new IdentityStub("testGetInfo");
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        i.setInfo("some info");
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("some info", i.getInfo());
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
328f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetName() {
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Identity i = new IdentityStub("testGetName");
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals ("testGetName", i.getName());
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
335