1/*
2 *  Licensed to the Apache Software Foundation (ASF) under one or more
3 *  contributor license agreements.  See the NOTICE file distributed with
4 *  this work for additional information regarding copyright ownership.
5 *  The ASF licenses this file to You under the Apache License, Version 2.0
6 *  (the "License"); you may not use this file except in compliance with
7 *  the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 */
17
18package org.apache.harmony.xnet.provider.jsse;
19
20import java.util.Arrays;
21
22import junit.framework.TestCase;
23
24/**
25 * Tests for <code>CertificateVerify</code> constructor and methods
26 *
27 */
28public class CertificateVerifyTest extends TestCase {
29
30	public void testCertificateVerify() throws Exception {
31		byte[] anonHash = new byte[0];
32		byte[] RSAHash = new byte[] {
33				1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
34				1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
35				1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
36				1, 2, 3, 4, 5, 6};
37		byte[] DSAHash  = new byte[] {
38				1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
39				1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
40		byte[][] signatures = new byte[][] { RSAHash, DSAHash };
41        try {
42            new CertificateVerify(anonHash);
43            fail("Anonymous: No expected AlertException");
44        } catch (AlertException e) {
45        }
46        try {
47            HandshakeIODataStream in = new HandshakeIODataStream();
48            new CertificateVerify(in, 0);
49            fail("Anonymous: No expected AlertException");
50        } catch (AlertException e) {
51        }
52		for (int i = 0; i < signatures.length; i++) {
53			CertificateVerify message = new CertificateVerify(signatures[i]);
54            assertEquals("incorrect type", Handshake.CERTIFICATE_VERIFY,
55                    message.getType());
56            assertTrue("incorrect CertificateVerify",
57                    Arrays.equals(message.signedHash, signatures[i]));
58
59			HandshakeIODataStream out = new HandshakeIODataStream();
60			message.send(out);
61			byte[] encoded = out.getData(1000);
62            assertEquals("incorrect out data length", message.length(),
63                    encoded.length);
64
65			HandshakeIODataStream in = new HandshakeIODataStream();
66			in.append(encoded);
67			CertificateVerify message_2 = new CertificateVerify(in, message.length());
68            assertTrue("incorrect message decoding",
69                    Arrays.equals(message.signedHash, message_2.signedHash));
70
71			in.append(encoded);
72			try {
73				message_2 = new CertificateVerify(in, message.length() - 1);
74				fail("Small length: No expected AlertException");
75			} catch (AlertException e) {
76			}
77
78			in.append(encoded);
79			in.append(new byte[] { 1, 2, 3 });
80			try {
81				message_2 = new CertificateVerify(in, message.length() + 3);
82				fail("Extra bytes: No expected AlertException ");
83			} catch (AlertException e) {
84			}
85		}
86	}
87
88}
89