1 /*
   2  * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 package sun.security.ssl;
  25 
  26 import java.nio.ByteBuffer;
  27 import java.util.Arrays;
  28 import java.util.Map;
  29 
  30 public class TestUtils {
  31 
  32     // private constructor to prevent instantiation for this utility class
  33     private TestUtils() {
  34         throw new AssertionError();
  35     }
  36 
  37     public static void runTests(Map<String, TestCase> testList) {
  38         int testNo = 0;
  39         int numberFailed = 0;
  40         Map.Entry<Boolean, String> result;
  41 
  42         System.out.println("============ Tests ============");
  43         for (String testName : testList.keySet()) {
  44             System.out.println("Test " + ++testNo + ": " + testName);
  45             result = testList.get(testName).runTest();
  46             System.out.print("Result: " + (result.getKey() ? "PASS" : "FAIL"));
  47             System.out.println(" " +
  48                     (result.getValue() != null ? result.getValue() : ""));
  49             System.out.println("-------------------------------------------");
  50             if (!result.getKey()) {
  51                 numberFailed++;
  52             }
  53         }
  54 
  55         System.out.println("End Results: " + (testList.size() - numberFailed) +
  56                 " Passed" + ", " + numberFailed + " Failed.");
  57         if (numberFailed > 0) {
  58             throw new RuntimeException(
  59                     "One or more tests failed, see test output for details");
  60         }
  61     }
  62 
  63     public static void dumpBytes(byte[] data) {
  64         dumpBytes(ByteBuffer.wrap(data));
  65     }
  66 
  67     public static void dumpBytes(ByteBuffer data) {
  68         int i = 0;
  69 
  70         data.mark();
  71         while (data.hasRemaining()) {
  72             if (i % 16 == 0 && i != 0) {
  73                 System.out.print("\n");
  74             }
  75             System.out.print(String.format("%02X ", data.get()));
  76             i++;
  77         }
  78         System.out.print("\n");
  79         data.reset();
  80     }
  81 
  82     public static void valueCheck(byte[] array1, byte[] array2) {
  83         if (!Arrays.equals(array1, array2)) {
  84             throw new RuntimeException("Array mismatch");
  85         }
  86     }
  87 
  88     // Compares a range of bytes at specific offsets in each array
  89     public static void valueCheck(byte[] array1, byte[] array2, int skip1,
  90             int skip2, int length) {
  91         ByteBuffer buf1 = ByteBuffer.wrap(array1);
  92         ByteBuffer buf2 = ByteBuffer.wrap(array2);
  93 
  94         // Skip past however many bytes are requested in both buffers
  95         buf1.position(skip1);
  96         buf2.position(skip2);
  97 
  98         // Reset the limits on each buffer to account for the length
  99         buf1.limit(buf1.position() + length);
 100         buf2.limit(buf2.position() + length);
 101 
 102         if (!buf1.equals(buf2)) {
 103             throw new RuntimeException("Array range mismatch");
 104         }
 105     }
 106 
 107     // Concatenate 1 or more arrays
 108     public static byte[] gatherBuffers(byte[]... arrays) {
 109         int totalLength = 0;
 110         for (byte[] ar : arrays) {
 111             totalLength += ar != null ? ar.length : 0;
 112         }
 113 
 114         byte[] resultBuf = new byte[totalLength];
 115         int offset = 0;
 116         for (byte[] ar : arrays) {
 117             if (ar != null) {
 118                 System.arraycopy(ar, 0, resultBuf, offset, ar.length);
 119                 offset += ar.length;
 120             }
 121         }
 122         return resultBuf;
 123     }
 124 }