test/jdk/sun/security/ssl/StatusStapling/java.base/sun/security/ssl/CertStatusReqExtensionTests.java
branchJDK-8145252-TLS13-branch
changeset 56542 56aaa6cb3693
parent 56541 92cbbfc996f3
child 56543 2352538d2f6e
--- a/test/jdk/sun/security/ssl/StatusStapling/java.base/sun/security/ssl/CertStatusReqExtensionTests.java	Fri May 11 14:55:56 2018 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,338 +0,0 @@
-/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.security.ssl;
-
-import java.io.IOException;
-import java.util.*;
-import java.nio.ByteBuffer;
-
-/*
- * Checks that the hash value for a certificate's issuer name is generated
- * correctly. Requires any certificate that is not self-signed.
- *
- * NOTE: this test uses Sun private classes which are subject to change.
- */
-public class CertStatusReqExtensionTests {
-
-    private static final boolean debug = false;
-
-    // Default status_request extension (type = ocsp, OCSPStatusRequest
-    // with no responder IDs or extensions
-    private static final byte[] CSRE_DEF_OSR = {1, 0, 0, 0, 0};
-
-    // A status_request extension using a user-defined type (0xFF) and
-    // an underlying no-Responder ID/no-extension OCSPStatusRequest
-    private static final byte[] CSRE_TYPE_FF = {-1, 0, 0, 0, 0};
-
-    // A CertStatusReqExtension with 5 ResponderIds and 1 Extension
-    private static final byte[] CSRE_REQ_RID_EXTS = {
-           1,    0,  -13,    0,   59,  -95,   57,   48,
-          55,   49,   16,   48,   14,    6,    3,   85,
-           4,   10,   19,    7,   83,  111,  109,  101,
-          73,  110,   99,   49,   16,   48,   14,    6,
-           3,   85,    4,   11,   19,    7,   83,  111,
-         109,  101,   80,   75,   73,   49,   17,   48,
-          15,    6,    3,   85,    4,    3,   19,    8,
-          83,  111,  109,  101,   79,   67,   83,   80,
-           0,   68,  -95,   66,   48,   64,   49,   13,
-          48,   11,    6,    3,   85,    4,   10,   19,
-           4,   79,  104,   77,  121,   49,   14,   48,
-          12,    6,    3,   85,    4,   11,   19,    5,
-          66,  101,   97,  114,  115,   49,   15,   48,
-          13,    6,    3,   85,    4,   11,   19,    6,
-          84,  105,  103,  101,  114,  115,   49,   14,
-          48,   12,    6,    3,   85,    4,    3,   19,
-           5,   76,  105,  111,  110,  115,    0,   58,
-         -95,   56,   48,   54,   49,   16,   48,   14,
-           6,    3,   85,    4,   10,   19,    7,   67,
-         111,  109,  112,   97,  110,  121,   49,   13,
-          48,   11,    6,    3,   85,    4,   11,   19,
-           4,   87,  101,  115,  116,   49,   19,   48,
-          17,    6,    3,   85,    4,    3,   19,   10,
-          82,  101,  115,  112,  111,  110,  100,  101,
-         114,   49,    0,   24,  -94,   22,    4,   20,
-         -67,  -36,  114,  121,   92,  -79,  116,   -1,
-         102, -107,    7,  -21,   18, -113,   64,   76,
-          96,   -7,  -66,  -63,    0,   24,  -94,   22,
-           4,   20,  -51,  -69,  107,  -82,  -39,  -87,
-          45,   25,   41,   28,  -76,  -68,  -11, -110,
-         -94,  -97,   62,   47,   58, -125,    0,   51,
-          48,   49,   48,   47,    6,    9,   43,    6,
-           1,    5,    5,    7,   48,    1,    2,    4,
-          34,    4,   32,  -26,  -81, -120,  -61, -127,
-         -79,    0,  -39,  -54,   49,    3,  -51,  -57,
-         -85,   19, -126,   94,   -2,   21,   26,   98,
-           6,  105,  -35,  -37,  -29,  -73,  101,   53,
-          44,   15,  -19
-    };
-
-    public static void main(String[] args) throws Exception {
-        Map<String, TestCase> testList =
-                new LinkedHashMap<String, TestCase>() {{
-            put("CTOR (default)", testCtorDefault);
-            put("CTOR (int, StatusRequest)", testCtorStatReqs);
-            put("CTOR (HandshakeInStream, length, getReqType, getRequest)",
-                    testCtorInStream);
-        }};
-
-        TestUtils.runTests(testList);
-    }
-
-    public static final TestCase testCtorDefault = new TestCase() {
-        @Override
-        public Map.Entry<Boolean, String> runTest() {
-            Boolean pass = Boolean.FALSE;
-            String message = null;
-            try {
-                CertStatusReqExtension csreDef = new CertStatusReqExtension();
-                HandshakeOutStream hsout =
-                        new HandshakeOutStream(null);
-                csreDef.send(hsout);
-                TestUtils.valueCheck(wrapExtData(null), hsout.toByteArray());
-
-                // The length should be 4 (2 bytes for the type, 2 for the
-                // encoding of zero-length
-                if (csreDef.length() != 4) {
-                    throw new RuntimeException("Incorrect length from " +
-                            "default object.  Expected 4, got " +
-                            csreDef.length());
-                }
-
-                // Since there's no data, there are no status_type or request
-                // data fields defined.  Both should return null in this case
-                if (csreDef.getType() != null) {
-                    throw new RuntimeException("Default CSRE returned " +
-                            "non-null status_type");
-                } else if (csreDef.getRequest() != null) {
-                    throw new RuntimeException("Default CSRE returned " +
-                            "non-null request object");
-                }
-
-                pass = Boolean.TRUE;
-            } catch (Exception e) {
-                e.printStackTrace(System.out);
-                message = e.getClass().getName();
-            }
-
-            return new AbstractMap.SimpleEntry<>(pass, message);
-        }
-    };
-
-    public static final TestCase testCtorStatReqs = new TestCase() {
-        @Override
-        public Map.Entry<Boolean, String> runTest() {
-            Boolean pass = Boolean.FALSE;
-            String message = null;
-            try {
-                HandshakeOutStream hsout =
-                        new HandshakeOutStream(null);
-                StatusRequest basicStatReq = new OCSPStatusRequest();
-
-                // Create an extension using a default-style OCSPStatusRequest
-                // (no responder IDs, no extensions).
-                CertStatusReqExtension csre1 = new CertStatusReqExtension(
-                        StatusRequestType.OCSP, basicStatReq);
-                csre1.send(hsout);
-                TestUtils.valueCheck(wrapExtData(CSRE_DEF_OSR),
-                        hsout.toByteArray());
-                hsout.reset();
-
-                // Create the extension using a StatusRequestType not already
-                // instantiated as a static StatusRequestType
-                // (e.g. OCSP/OCSP_MULTI)
-                CertStatusReqExtension csre2 =
-                        new CertStatusReqExtension(StatusRequestType.get(-1),
-                                basicStatReq);
-                csre2.send(hsout);
-                TestUtils.valueCheck(wrapExtData(CSRE_TYPE_FF),
-                        hsout.toByteArray());
-
-                // Create the extension using a StatusRequest that
-                // does not match the status_type field
-                // This should throw an IllegalArgumentException
-                try {
-                    CertStatusReqExtension csreBadRequest =
-                            new CertStatusReqExtension(StatusRequestType.OCSP,
-                                    new BogusStatusRequest());
-                    throw new RuntimeException("Constructor accepted a " +
-                            "StatusRequest that is inconsistent with " +
-                            "the status_type");
-                } catch (IllegalArgumentException iae) { }
-
-                // We don't allow a null value for the StatusRequestType
-                // parameter in this constructor.
-                try {
-                    CertStatusReqExtension csreBadRequest =
-                            new CertStatusReqExtension(null, basicStatReq);
-                    throw new RuntimeException("Constructor accepted a " +
-                            "null StatusRequestType");
-                } catch (NullPointerException npe) { }
-
-                // We also don't allow a null value for the StatusRequest
-                // parameter in this constructor.
-                try {
-                    CertStatusReqExtension csreBadRequest =
-                            new CertStatusReqExtension(StatusRequestType.OCSP,
-                                    null);
-                    throw new RuntimeException("Constructor accepted a " +
-                            "null StatusRequest");
-                } catch (NullPointerException npe) { }
-
-                pass = Boolean.TRUE;
-            } catch (Exception e) {
-                e.printStackTrace(System.out);
-                message = e.getClass().getName();
-            }
-
-            return new AbstractMap.SimpleEntry<>(pass, message);
-        }
-    };
-
-    // Test the constructor that builds the ob ject using data from
-    // a HandshakeInStream
-    // This also tests the length, getReqType and getRequest methods
-    public static final TestCase testCtorInStream = new TestCase() {
-        @Override
-        public Map.Entry<Boolean, String> runTest() {
-            Boolean pass = Boolean.FALSE;
-            String message = null;
-            OCSPStatusRequest osr;
-
-            try {
-                // To simulate the extension coming in a ServerHello, the
-                // type and length would already be read by HelloExtensions
-                // and there is no extension data
-                HandshakeInStream hsis = new HandshakeInStream();
-                hsis.incomingRecord(ByteBuffer.wrap(new byte[0]));
-                CertStatusReqExtension csre =
-                        new CertStatusReqExtension(hsis, hsis.available());
-                // Verify length/type/request
-                if (csre.length() != 4) {
-                     throw new RuntimeException("Invalid length: received " +
-                            csre.length() + ", expected 4");
-                } else if (csre.getType() != null) {
-                    throw new RuntimeException("Non-null type from default " +
-                            "extension");
-                } else if (csre.getRequest() != null) {
-                    throw new RuntimeException("Non-null request from default " +
-                            "extension");
-                }
-
-                // Try the an extension with a default OCSPStatusRequest
-                hsis = new HandshakeInStream();
-                hsis.incomingRecord(ByteBuffer.wrap(CSRE_DEF_OSR));
-                csre = new CertStatusReqExtension(hsis, hsis.available());
-                if (csre.length() != (CSRE_DEF_OSR.length + 4)) {
-                    throw new RuntimeException("Invalid length: received " +
-                            csre.length() + ", expected " +
-                            CSRE_DEF_OSR.length + 4);
-                } else if (!csre.getType().equals(StatusRequestType.OCSP)) {
-                    throw new RuntimeException("Unknown status_type: " +
-                            String.format("0x%02X", csre.getType().id));
-                } else {
-                    osr = (OCSPStatusRequest)csre.getRequest();
-                    if (!osr.getResponderIds().isEmpty() ||
-                            !osr.getExtensions().isEmpty()) {
-                        throw new RuntimeException("Non-default " +
-                                "OCSPStatusRequest found in extension");
-                    }
-                }
-
-                // Try with a non-default extension
-                hsis = new HandshakeInStream();
-                hsis.incomingRecord(ByteBuffer.wrap(CSRE_REQ_RID_EXTS));
-                csre = new CertStatusReqExtension(hsis, hsis.available());
-                if (csre.length() != (CSRE_REQ_RID_EXTS.length + 4)) {
-                    throw new RuntimeException("Invalid length: received " +
-                            csre.length() + ", expected " +
-                            CSRE_REQ_RID_EXTS.length + 4);
-                } else if (!(csre.getType().equals(StatusRequestType.OCSP))) {
-                    throw new RuntimeException("Unknown status_type: " +
-                            String.format("0x%02X", csre.getType().id));
-                } else {
-                    osr = (OCSPStatusRequest)csre.getRequest();
-                    if (osr.getResponderIds().size() != 5 ||
-                            osr.getExtensions().size() != 1) {
-                        throw new RuntimeException("Incorrect number of " +
-                                "ResponderIds or Extensions found in " +
-                                "OCSPStatusRequest");
-                    }
-                }
-
-                // Create a CSRE that asserts status_request and has the
-                // proper length, but really is a bunch of random junk inside
-                // In this case, it will create an UnknownStatusRequest to
-                // handle the unparseable data.
-                byte[] junkData = new byte[48];
-                Random r = new Random(System.currentTimeMillis());
-                r.nextBytes(junkData);
-                junkData[0] = 7;        // Ensure it isn't a valid status_type
-                hsis = new HandshakeInStream();
-                hsis.incomingRecord(ByteBuffer.wrap(junkData));
-                csre = new CertStatusReqExtension(hsis, hsis.available());
-                StatusRequest sr = csre.getRequest();
-                if (!(sr instanceof UnknownStatusRequest)) {
-                    throw new RuntimeException("Expected returned status " +
-                            "request to be of type UnknownStatusRequest but " +
-                            "received " + sr.getClass().getName());
-                } else if (csre.length() != (junkData.length + 4)) {
-                    throw new RuntimeException("Invalid length: received " +
-                            csre.length() + ", expected " +
-                            junkData.length + 4);
-                }
-
-                // Set the leading byte to 1 (OCSP type) and run again
-                // It should pass the argument check and fail trying to parse
-                // the underlying StatusRequest.
-                junkData[0] = (byte)StatusRequestType.OCSP.id;
-                hsis = new HandshakeInStream();
-                hsis.incomingRecord(ByteBuffer.wrap(junkData));
-                try {
-                    csre = new CertStatusReqExtension(hsis, hsis.available());
-                    throw new RuntimeException("Expected CTOR exception did " +
-                            "not occur");
-                } catch (IOException ioe) { }
-
-                pass = Boolean.TRUE;
-            } catch (Exception e) {
-                e.printStackTrace(System.out);
-                message = e.getClass().getName();
-            }
-
-            return new AbstractMap.SimpleEntry<>(pass, message);
-        }
-    };
-
-    // Take CSRE extension data and add extension type and length decorations
-    private static byte[] wrapExtData(byte[] extData) {
-        int bufferLen = (extData != null ? extData.length : 0) + 4;
-        ByteBuffer bb = ByteBuffer.allocate(bufferLen);
-        bb.putShort((short)ExtensionType.EXT_STATUS_REQUEST.id);
-        bb.putShort((short)(extData != null ? extData.length: 0));
-        if (extData != null) {
-            bb.put(extData);
-        }
-        return bb.array();
-    }
-}