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