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* @author Vladimir N. Molotkov 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project* @version $Revision$ 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/ 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage tests.security.cert; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase; 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.cert.PolicyQualifierInfo; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Arrays; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * PolicyQualifierInfo test 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(PolicyQualifierInfo.class) 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class PolicyQualifierInfoTest extends TestCase { 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Test #1 for <code>PolicyQualifierInfo</code> constructor<br> 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Assertion: throws <code>IOException</code> if byte array 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * parameter does not represent a valid and parsable policy 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * qualifier info 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies NullPointerException and IOException.", 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "PolicyQualifierInfo", 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class} 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void test_Ctor() throws IOException { 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // pass null 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new PolicyQualifierInfo(null); 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("No expected NullPointerException"); 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException e) { 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // pass empty array 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new PolicyQualifierInfo(new byte[0]); 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IOE expected"); 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // pass invalid array 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new PolicyQualifierInfo( 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new byte[] {(byte)0x06, (byte)0x03, 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (byte)0x81, (byte)0x34, (byte)0x03}); 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IOE expected"); 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Test #2 for <code>PolicyQualifierInfo</code> constructor<br> 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Assertion: throws <code>IOException</code> if byte array 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * parameter does not represent a valid and parsable policy 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * qualifier info 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies IOException.", 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "PolicyQualifierInfo", 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class} 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testPolicyQualifierInfo02() { 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get valid encoding 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encoding = getDerEncoding(); 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // corrupt root seq length 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project encoding[1] = (byte)0x27; 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // pass invalid array 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new PolicyQualifierInfo(encoding); 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IOE expected"); 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get valid encoding 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project encoding = getDerEncoding(); 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // corrupt policy qualifier ID: 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // - change OID to the Relative OID 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project encoding[2] = (byte)13; 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // pass invalid array 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new PolicyQualifierInfo(encoding); 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IOE expected"); 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Test #3 for <code>PolicyQualifierInfo</code> constructor<br> 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Assertion: Creates an instance of <code>PolicyQualifierInfo</code> 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * from the encoded bytes 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "PolicyQualifierInfo", 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class} 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testPolicyQualifierInfo03() throws IOException { 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get valid encoding 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encoding = getDerEncoding(); 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // pass valid array 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new PolicyQualifierInfo(encoding); 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Test #4 for <code>PolicyQualifierInfo</code> constructor<br> 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Assertion: The encoded byte array is copied on construction 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies constructor with encoded byte array copied on construction.", 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "PolicyQualifierInfo", 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {byte[].class} 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testPolicyQualifierInfo04() throws IOException { 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get valid encoding 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encoding = getDerEncoding(); 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encodingCopy = encoding.clone(); 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // pass valid array 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PolicyQualifierInfo i = new PolicyQualifierInfo(encodingCopy); 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get encoding 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encodingRet = i.getEncoded(); 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // check returned array 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(Arrays.equals(encoding, encodingRet)); 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // modify input 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project encodingCopy[0] = (byte)0; 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get encoding again 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encodingRet1 = i.getEncoded(); 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // check that above modification did not change 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // internal state of the PolicyQualifierInfo instance 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(Arrays.equals(encoding, encodingRet1)); 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Test #1 for <code>getEncoded()</code> method 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Assertion: Returns the ASN.1 DER encoded form of 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this <code>PolicyQualifierInfo</code> 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getEncoded", 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testGetEncoded01() throws IOException { 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get valid encoding 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encoding = getDerEncoding(); 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // pass valid array 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PolicyQualifierInfo i = new PolicyQualifierInfo(encoding); 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get encoding 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encodingRet = i.getEncoded(); 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // check returned array 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(Arrays.equals(encoding, encodingRet)); 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Test #2 for <code>getEncoded()</code> method 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Assertion: a copy is returned each time 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getEncoded", 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testGetEncoded02() throws IOException { 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get valid encoding 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encoding = getDerEncoding(); 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encodingCopy = encoding.clone(); 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // pass valid array 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PolicyQualifierInfo i = new PolicyQualifierInfo(encodingCopy); 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get encoding 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encodingRet = i.getEncoded(); 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // modify returned array 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project encodingRet[0] = (byte)0; 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get encoding again 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encodingRet1 = i.getEncoded(); 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // check that above modification did not change 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // internal state of the PolicyQualifierInfo instance 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(Arrays.equals(encoding, encodingRet1)); 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Test #1 for <code>getPolicyQualifier()</code> method 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Assertion: Returns the ASN.1 DER encoded form of 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this <code>PolicyQualifierInfo</code> 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getPolicyQualifier", 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testGetPolicyQualifier01() throws IOException { 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get valid encoding 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encoding = getDerEncoding(); 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get policy qualifier encoding 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] pqEncoding = new byte[28]; 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.arraycopy(encoding, 12, pqEncoding, 0, pqEncoding.length); 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // pass valid array 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PolicyQualifierInfo i = new PolicyQualifierInfo(encoding); 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get encoding 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] pqEncodingRet = i.getPolicyQualifier(); 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // check returned array 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(Arrays.equals(pqEncoding, pqEncodingRet)); 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Test #2 for <code>getPolicyQualifier()</code> method 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Assertion: a copy is returned each time 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getPolicyQualifier", 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testGetPolicyQualifier02() throws IOException { 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get valid encoding 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encoding = getDerEncoding(); 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get policy qualifier encoding 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] pqEncoding = new byte[28]; 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.arraycopy(encoding, 12, pqEncoding, 0, pqEncoding.length); 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // pass valid array 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PolicyQualifierInfo i = new PolicyQualifierInfo(encoding); 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get encoding 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] pqEncodingRet = i.getPolicyQualifier(); 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // modify returned array 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project pqEncodingRet[0] = (byte)0; 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get encoding again 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] pqEncodingRet1 = i.getPolicyQualifier(); 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotSame(pqEncodingRet, pqEncodingRet1); 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // check that above modification did not change 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // internal state of the PolicyQualifierInfo instance 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(Arrays.equals(pqEncoding, pqEncodingRet1)); 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Test for <code>getPolicyQualifierId()</code> method 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Assertion: Returns the <code>policyQualifierId</code> 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * field of this <code>PolicyQualifierInfo</code>. 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The <code>policyQualifierId</code> is an Object Identifier (OID) 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * represented by a set of nonnegative integers separated by periods 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "getPolicyQualifierId", 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testGetPolicyQualifierId() throws IOException { 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get valid encoding 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encoding = getDerEncoding(); 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // pass valid array 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PolicyQualifierInfo i = new PolicyQualifierInfo(encoding); 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get OID as String and check it 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("1.3.6.1.5.5.7.2.1", i.getPolicyQualifierId()); 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get valid encoding 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project encoding = getDerEncoding(); 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // change OID to 1.3.98437.82818.1 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project encoding[5] = (byte)0x86; 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project encoding[6] = (byte)0x81; 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project encoding[8] = (byte)0x85; 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project encoding[9] = (byte)0x87; 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project i = new PolicyQualifierInfo(encoding); 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get OID as String and check it 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("1.3.98437.82818.1", i.getPolicyQualifierId()); 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Test for <code>toString()</code> method 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Assertion: returns description of the contents of this 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <code>PolicyQualifierInfo</code> as printable <code>String</code> 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "toString", 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final void testToString() throws IOException { 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // get valid encoding 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] encoding = getDerEncoding(); 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // pass valid array 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PolicyQualifierInfo i = new PolicyQualifierInfo(encoding); 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNotNull(i.toString()); 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Private stuff 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns valid DER encoding for the following ASN.1 definition 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (as specified in RFC 3280 - 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Internet X.509 Public Key Infrastructure. 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Certificate and Certificate Revocation List (CRL) Profile. 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.ietf.org/rfc/rfc3280.txt): 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * PolicyQualifierInfo ::= SEQUENCE { 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * policyQualifierId PolicyQualifierId, 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * qualifier ANY DEFINED BY policyQualifierId 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * } 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * where policyQualifierId (OID) is 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 1.3.6.1.5.5.7.2.1 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and qualifier (IA5String) is 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "http://www.qq.com/stmt.txt" 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (data generated by own encoder during test development) 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final byte[] getDerEncoding() { 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // DO NOT MODIFY! 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new byte[] { 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (byte)0x30, (byte)0x26, // tag Seq, length 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (byte)0x06, (byte)0x08, // tag OID, length 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (byte)0x2b, (byte)0x06, (byte)0x01, (byte)0x05, // oid value 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (byte)0x05, (byte)0x07, (byte)0x02, (byte)0x01, // oid value 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (byte)0x16, (byte)0x1a, // tag IA5String, length 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (byte)0x68, (byte)0x74, (byte)0x74, (byte)0x70, // IA5String value 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (byte)0x3a, (byte)0x2f, (byte)0x2f, (byte)0x77, // IA5String value 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (byte)0x77, (byte)0x77, (byte)0x2e, (byte)0x71, // IA5String value 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (byte)0x71, (byte)0x2e, (byte)0x63, (byte)0x6f, // IA5String value 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (byte)0x6d, (byte)0x2f, (byte)0x73, (byte)0x74, // IA5String value 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (byte)0x6d, (byte)0x74, (byte)0x2e, (byte)0x74, // IA5String value 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (byte)0x78, (byte)0x74 // IA5String value 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 383