1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project* @author Alexander V. Astapchuk 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project* @version $Revision$ 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/ 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.apache.harmony.security.tests.java.security; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.CodeSigner; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Timestamp; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.CertPath; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Date; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.tests.support.TestCertUtils; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase; 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(CodeSigner.class) 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unit test for CodeSigner. 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class CodeSignerTest extends TestCase { 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Entry point for standalone runs. 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param args command line arguments 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static void main(String[] args) { 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project junit.textui.TestRunner.run(CodeSignerTest.class); 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private CertPath cpath = TestCertUtils.genCertPath(3, 0); 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Date now = new Date(); 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Timestamp ts = new Timestamp(now, cpath); 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * must throw NPE if signerCertPath is null 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "NPE case", 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "CodeSigner", 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.security.cert.CertPath.class, java.security.Timestamp.class} 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testCodeSigner_00() { 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new CodeSigner(null, ts); 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("must not accept null"); 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException ex) { 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* it's ok */ 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * timestamp can be null 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Null parameter timestamp checking", 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "CodeSigner", 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.security.cert.CertPath.class, java.security.Timestamp.class} 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testCodeSigner_01() { 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CodeSigner cs = new CodeSigner(cpath, null); 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(cs); 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception e) { 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Unexpected exception"); 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Not null parameters 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "CodeSigner", 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.security.cert.CertPath.class, java.security.Timestamp.class} 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testCodeSigner_02() { 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CodeSigner cs = new CodeSigner(cpath, ts); 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(cs); 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (Exception e) { 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Unexpected exception"); 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Test various assertions about equals() 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "equals", 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.lang.Object.class} 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testEqualsObject() { 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CodeSigner one = new CodeSigner(cpath, ts); 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CodeSigner two = new CodeSigner(cpath, ts); 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CodeSigner three = new CodeSigner(cpath, null); 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CertPath cpath2 = TestCertUtils.genCertPath(5, 3); 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CodeSigner four = new CodeSigner(cpath2, null); 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(one.equals(one)); 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(one.equals(two)); 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(two.equals(one)); 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse(one.equals(three)); 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse(three.equals(one)); 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(three.equals(three)); 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // different CertPaths 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse( three.equals(four)); 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // special cases 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse( one.equals(null) ); 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse( one.equals(new Object()) ); 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Tests CodeSigner.getSignerCertPath() 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getSignerCertPath", 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testGetSignerCertPath() { 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame(new CodeSigner(cpath, null).getSignerCertPath(), cpath); 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Tests CodeSigner.getTimeStamp() 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getTimestamp", 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testGetTimestamp() { 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNull(new CodeSigner(cpath, null).getTimestamp()); 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertSame(new CodeSigner(cpath, ts).getTimestamp(), ts); 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Tests CodeSigner.toString() 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "toString", 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testToString() { 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(new CodeSigner(cpath, null).toString().contains("")); 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(new CodeSigner(cpath, ts).toString().contains("")); 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(new CodeSigner(cpath, null).toString().contains("Signer")); 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(new CodeSigner(cpath, ts).toString().contains(ts.toString())); 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Tests CodeSigner.hashCode() 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "hashCode", 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void testHashCode() { 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CodeSigner cs1 = new CodeSigner(cpath, ts); 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CodeSigner cs2 = new CodeSigner(cpath, ts); 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CodeSigner cs3 = new CodeSigner(cpath, null); 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(cs1.hashCode() == cs2.hashCode()); 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(cs2.hashCode() != cs3.hashCode()); 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 206