This commit is contained in:
Lana Steuck 2015-01-01 16:14:01 -08:00
commit 239e6cacfc
19 changed files with 450 additions and 269 deletions

View File

@ -393,7 +393,7 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> {
* <p>Note that if the sequence of characters is already available
* within a character array, using this constructor is faster than
* converting the {@code char} array to string and using the
* {@code BigDecimal(String)} constructor .
* {@code BigDecimal(String)} constructor.
*
* @param in {@code char} array that is the source of characters.
* @param offset first character in the array to inspect.
@ -466,7 +466,8 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> {
} else if (c == '.') { // have dot
// have dot
if (dot) // two dots
throw new NumberFormatException();
throw new NumberFormatException("Character array"
+ " contains more than one decimal point.");
dot = true;
} else if (Character.isDigit(c)) { // slow path
int digit = Character.digit(c, 10);
@ -488,14 +489,16 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> {
exp = parseExp(in, offset, len);
// Next test is required for backwards compatibility
if ((int) exp != exp) // overflow
throw new NumberFormatException();
throw new NumberFormatException("Exponent overflow.");
break; // [saves a test]
} else {
throw new NumberFormatException();
throw new NumberFormatException("Character " + c
+ " is neither a decimal digit number, decimal point, nor"
+ " \"e\" notation exponential mark.");
}
}
if (prec == 0) // no digits found
throw new NumberFormatException();
throw new NumberFormatException("No digits found.");
// Adjust scale if exp is not zero.
if (exp != 0) { // had significant exponent
scl = adjustScale(scl, exp);
@ -541,22 +544,24 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> {
if (c == '.') {
// have dot
if (dot) // two dots
throw new NumberFormatException();
throw new NumberFormatException("Character array"
+ " contains more than one decimal point.");
dot = true;
continue;
}
// exponent expected
if ((c != 'e') && (c != 'E'))
throw new NumberFormatException();
throw new NumberFormatException("Character array"
+ " is missing \"e\" notation exponential mark.");
exp = parseExp(in, offset, len);
// Next test is required for backwards compatibility
if ((int) exp != exp) // overflow
throw new NumberFormatException();
throw new NumberFormatException("Exponent overflow.");
break; // [saves a test]
}
// here when no characters left
if (prec == 0) // no digits found
throw new NumberFormatException();
throw new NumberFormatException("No digits found.");
// Adjust scale if exp is not zero.
if (exp != 0) { // had significant exponent
scl = adjustScale(scl, exp);
@ -592,10 +597,10 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> {
}
}
}
} catch (ArrayIndexOutOfBoundsException e) {
throw new NumberFormatException();
} catch (NegativeArraySizeException e) {
throw new NumberFormatException();
} catch (ArrayIndexOutOfBoundsException | NegativeArraySizeException e) {
NumberFormatException nfe = new NumberFormatException();
nfe.initCause(e);
throw nfe;
}
this.scale = scl;
this.precision = prec;
@ -627,7 +632,7 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> {
len--;
}
if (len <= 0) // no exponent digits
throw new NumberFormatException();
throw new NumberFormatException("No exponent digits.");
// skip leading zeros in the exponent
while (len > 10 && (c=='0' || (Character.digit(c, 10) == 0))) {
offset++;
@ -635,7 +640,7 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> {
len--;
}
if (len > 10) // too many nonzero exponent digits
throw new NumberFormatException();
throw new NumberFormatException("Too many nonzero exponent digits.");
// c now holds first digit of exponent
for (;; len--) {
int v;
@ -644,7 +649,7 @@ public class BigDecimal extends Number implements Comparable<BigDecimal> {
} else {
v = Character.digit(c, 10);
if (v < 0) // not a digit
throw new NumberFormatException();
throw new NumberFormatException("Not a digit.");
}
exp = exp * 10 + v;
if (len == 1)

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1996, 2014, 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
@ -117,7 +117,6 @@ abstract class DSA extends SignatureSpi {
if (params == null) {
throw new InvalidKeyException("DSA private key lacks parameters");
}
checkKey(params);
this.params = params;
this.presetX = priv.getX();
@ -149,7 +148,6 @@ abstract class DSA extends SignatureSpi {
if (params == null) {
throw new InvalidKeyException("DSA public key lacks parameters");
}
checkKey(params);
this.params = params;
this.presetY = pub.getY();
@ -291,16 +289,6 @@ abstract class DSA extends SignatureSpi {
return null;
}
protected void checkKey(DSAParams params) throws InvalidKeyException {
// FIPS186-3 states in sec4.2 that a hash function which provides
// a lower security strength than the (L, N) pair ordinarily should
// not be used.
int valueN = params.getQ().bitLength();
if (valueN > md.getDigestLength()*8) {
throw new InvalidKeyException("Key is too strong for this signature algorithm");
}
}
private BigInteger generateR(BigInteger p, BigInteger q, BigInteger g,
BigInteger k) {
BigInteger temp = g.modPow(k, p);
@ -480,14 +468,6 @@ abstract class DSA extends SignatureSpi {
}
}
@Override
protected void checkKey(DSAParams params) throws InvalidKeyException {
int valueL = params.getP().bitLength();
if (valueL > 1024) {
throw new InvalidKeyException("Key is too long for this algorithm");
}
}
/*
* Please read bug report 4044247 for an alternative, faster,
* NON-FIPS approved method to generate K

View File

@ -76,10 +76,11 @@ Java_java_util_zip_Deflater_init(JNIEnv *env, jclass cls, jint level,
JNU_ThrowOutOfMemoryError(env, 0);
return jlong_zero;
} else {
char *msg;
switch (deflateInit2(strm, level, Z_DEFLATED,
nowrap ? -MAX_WBITS : MAX_WBITS,
DEF_MEM_LEVEL, strategy)) {
const char *msg;
int ret = deflateInit2(strm, level, Z_DEFLATED,
nowrap ? -MAX_WBITS : MAX_WBITS,
DEF_MEM_LEVEL, strategy);
switch (ret) {
case Z_OK:
return ptr_to_jlong(strm);
case Z_MEM_ERROR:
@ -91,7 +92,11 @@ Java_java_util_zip_Deflater_init(JNIEnv *env, jclass cls, jint level,
JNU_ThrowIllegalArgumentException(env, 0);
return jlong_zero;
default:
msg = strm->msg;
msg = ((strm->msg != NULL) ? strm->msg :
(ret == Z_VERSION_ERROR) ?
"zlib returned Z_VERSION_ERROR: "
"compile time and runtime zlib implementations differ" :
"unknown error initializing zlib library");
free(strm);
JNU_ThrowInternalError(env, msg);
return jlong_zero;

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2004, 2014, 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
@ -42,7 +42,7 @@ import java.util.regex.*;
*/
public class AliasFileParser {
private static final String ALIAS = "alias";
private static final boolean DEBUG = false;
// 8028357 removed old, inefficient debug logging
// other variables
private URL inputfile;
@ -64,21 +64,12 @@ public class AliasFileParser {
}
}
private void logln(String s) {
if (DEBUG) {
System.err.println(s);
}
}
/**
* method to get the next token as a Token type
*/
private void nextToken() throws IOException {
st.nextToken();
currentToken = new Token(st.ttype, st.sval);
logln("Read token: type = " + currentToken.ttype
+ " string = " + currentToken.sval);
}
/**
@ -90,8 +81,6 @@ public class AliasFileParser {
if ((currentToken.ttype == ttype)
&& (currentToken.sval.compareTo(token) == 0)) {
logln("matched type: " + ttype + " and token = "
+ currentToken.sval);
nextToken();
} else {
throw new SyntaxException(st.lineno());
@ -105,7 +94,6 @@ public class AliasFileParser {
*/
private void match(int ttype) throws IOException, SyntaxException {
if (currentToken.ttype == ttype) {
logln("matched type: " + ttype + ", token = " + currentToken.sval);
nextToken();
} else {
throw new SyntaxException(st.lineno());
@ -157,8 +145,6 @@ public class AliasFileParser {
} while ((currentToken.ttype != StreamTokenizer.TT_EOF)
&& (currentToken.sval.compareTo(ALIAS) != 0));
logln("adding map entry for " + name + " values = " + aliases);
map.put(name, aliases);
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2004, 2014, 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
@ -35,7 +35,7 @@ import java.util.*;
*/
public class CountedTimerTaskUtils {
private static final boolean DEBUG = false;
// 8028357 removed old, inefficient debug logging
/**
* Reschedule a CountedTimeTask at a different interval. Probably not
@ -58,14 +58,6 @@ public class CountedTimerTaskUtils {
long lastRun = oldTask.scheduledExecutionTime();
long expired = now - lastRun;
if (DEBUG) {
System.err.println("computing timer delay: "
+ " oldInterval = " + oldInterval
+ " newInterval = " + newInterval
+ " samples = " + oldTask.executionCount()
+ " expired = " + expired);
}
/*
* check if original task ever ran - if not, then lastRun is
* undefined and we simply set the delay to 0.
@ -76,12 +68,6 @@ public class CountedTimerTaskUtils {
delay = remainder >= 0 ? remainder : 0;
}
if (DEBUG) {
System.err.println("rescheduling sampler task: interval = "
+ newInterval
+ " delay = " + delay);
}
timer.schedule(newTask, delay, newInterval);
}
}

View File

@ -44,7 +44,8 @@ import java.nio.*;
*/
public class PerfDataBuffer extends PerfDataBufferImpl {
private static final boolean DEBUG = false;
// 8028357 removed old, inefficient debug logging
private static final int syncWaitMs =
Integer.getInteger("sun.jvmstat.perdata.syncWaitMs", 5000);
private static final ArrayList<Monitor> EMPTY_LIST = new ArrayList<Monitor>(0);
@ -268,18 +269,13 @@ public class PerfDataBuffer extends PerfDataBufferImpl {
* loop waiting for the ticks counter to be non zero. This is
* an indication that the jvm is initialized.
*/
log("synchWithTarget: " + lvmid + " ");
while (ticks.longValue() == 0) {
log(".");
try { Thread.sleep(20); } catch (InterruptedException e) { }
if (System.currentTimeMillis() > timeLimit) {
lognl("failed: " + lvmid);
throw new MonitorException("Could Not Synchronize with target");
}
}
lognl("success: " + lvmid);
}
/**
@ -291,24 +287,18 @@ public class PerfDataBuffer extends PerfDataBufferImpl {
throws MonitorException {
Monitor monitor = null;
log("polling for: " + lvmid + "," + name + " ");
pollForEntry = nextEntry;
while ((monitor = map.get(name)) == null) {
log(".");
try { Thread.sleep(20); } catch (InterruptedException e) { }
long t = System.currentTimeMillis();
if ((t > timeLimit) || (overflow.intValue() > 0)) {
lognl("failed: " + lvmid + "," + name);
dumpAll(map, lvmid);
throw new MonitorException("Could not find expected counter");
}
getNewMonitors(map);
}
lognl("success: " + lvmid + "," + name);
return monitor;
}
@ -481,8 +471,6 @@ public class PerfDataBuffer extends PerfDataBufferImpl {
// check for the end of the buffer
if (nextEntry == buffer.limit()) {
lognl("getNextMonitorEntry():"
+ " nextEntry == buffer.limit(): returning");
return null;
}
@ -614,37 +602,4 @@ public class PerfDataBuffer extends PerfDataBufferImpl {
nextEntry = entryStart + entryLength;
return monitor;
}
/**
* Method to dump debugging information
*/
private void dumpAll(Map<String, Monitor> map, int lvmid) {
if (DEBUG) {
Set<String> keys = map.keySet();
System.err.println("Dump for " + lvmid);
int j = 0;
for (Iterator<String> i = keys.iterator(); i.hasNext(); j++) {
Monitor monitor = map.get(i.next());
System.err.println(j + "\t" + monitor.getName()
+ "=" + monitor.getValue());
}
System.err.println("nextEntry = " + nextEntry
+ " pollForEntry = " + pollForEntry);
System.err.println("Buffer info:");
System.err.println("buffer = " + buffer);
}
}
private void lognl(String s) {
if (DEBUG) {
System.err.println(s);
}
}
private void log(String s) {
if (DEBUG) {
System.err.print(s);
}
}
}

View File

@ -62,7 +62,8 @@ import java.nio.*;
*/
public class PerfDataBuffer extends PerfDataBufferImpl {
private static final boolean DEBUG = false;
// 8028357 removed old, inefficient debug logging
private static final int syncWaitMs =
Integer.getInteger("sun.jvmstat.perdata.syncWaitMs", 5000);
private static final ArrayList<Monitor> EMPTY_LIST = new ArrayList<>(0);
@ -264,20 +265,15 @@ public class PerfDataBuffer extends PerfDataBufferImpl {
long timeLimit = System.currentTimeMillis() + syncWaitMs;
// loop waiting for the accessible indicater to be non-zero
log("synchWithTarget: " + lvmid + " ");
while (!prologue.isAccessible()) {
log(".");
// give the target jvm a chance to complete initializatoin
try { Thread.sleep(20); } catch (InterruptedException e) { }
if (System.currentTimeMillis() > timeLimit) {
logln("failed: " + lvmid);
throw new MonitorException("Could not synchronize with target");
}
}
logln("success: " + lvmid);
}
/**
@ -306,8 +302,6 @@ public class PerfDataBuffer extends PerfDataBufferImpl {
// check for end of the buffer
if (nextEntry == buffer.limit()) {
logln("getNextMonitorEntry():"
+ " nextEntry == buffer.limit(): returning");
return null;
}
@ -346,9 +340,6 @@ public class PerfDataBuffer extends PerfDataBufferImpl {
byte varByte = buffer.get();
int dataOffset = buffer.getInt();
dump_entry_fixed(entryStart, nameOffset, vectorLength, typeCodeByte,
flags, unitsByte, varByte, dataOffset);
// convert common attributes to their object types
Units units = Units.toUnits(unitsByte);
Variability variability = Variability.toVariability(varByte);
@ -439,8 +430,6 @@ public class PerfDataBuffer extends PerfDataBufferImpl {
// set the position to the start of the data item
buffer.position(entryStart + dataOffset);
dump_entry_variable(name, buffer, dataSize);
if (vectorLength == 0) {
// create a scalar Monitor object
if (typeCode == TypeCode.LONG) {
@ -514,103 +503,4 @@ public class PerfDataBuffer extends PerfDataBufferImpl {
nextEntry = entryStart + entryLength;
return monitor;
}
/**
* Method to dump debugging information
*/
private void dumpAll(Map<String, Monitor> map, int lvmid) {
if (DEBUG) {
Set<String> keys = map.keySet();
System.err.println("Dump for " + lvmid);
int j = 0;
for (Iterator<String> i = keys.iterator(); i.hasNext(); j++) {
Monitor monitor = map.get(i.next());
System.err.println(j + "\t" + monitor.getName()
+ "=" + monitor.getValue());
}
System.err.println("nextEntry = " + nextEntry);
System.err.println("Buffer info:");
System.err.println("buffer = " + buffer);
}
}
/**
* Method to dump the fixed portion of an entry.
*/
private void dump_entry_fixed(int entry_start, int nameOffset,
int vectorLength, byte typeCodeByte,
byte flags, byte unitsByte, byte varByte,
int dataOffset) {
if (DEBUG) {
System.err.println("Entry at offset: 0x"
+ Integer.toHexString(entry_start));
System.err.println("\tname_offset = 0x"
+ Integer.toHexString(nameOffset));
System.err.println("\tvector_length = 0x"
+ Integer.toHexString(vectorLength));
System.err.println("\tdata_type = 0x"
+ Integer.toHexString(typeCodeByte));
System.err.println("\tflags = 0x"
+ Integer.toHexString(flags));
System.err.println("\tdata_units = 0x"
+ Integer.toHexString(unitsByte));
System.err.println("\tdata_variability = 0x"
+ Integer.toHexString(varByte));
System.err.println("\tdata_offset = 0x"
+ Integer.toHexString(dataOffset));
}
}
private void dump_entry_variable(String name, ByteBuffer bb, int size) {
if (DEBUG) {
char[] toHex = new char[] { '0', '1', '2', '3',
'4', '5', '6', '7',
'8', '9', 'a', 'b',
'c', 'd', 'e', 'f' };
ByteBuffer data = bb.slice();
data.limit(size);
System.err.println("\tname = " + name);
System.err.println("\tdata = ");
int count=0;
while (data.hasRemaining()) {
byte b = data.get();
byte high = (byte)((b >> 8) & 0x0f);
byte low = (byte)(b & 0x0f);
if (count % 16 == 0) {
System.err.print("\t\t" + Integer.toHexString(count / 16)
+ ": ");
}
System.err.print(String.valueOf(toHex[high])
+ String.valueOf(toHex[low]));
count++;
if (count % 16 == 0) {
System.err.println();
} else {
System.err.print(" ");
}
}
if (count % 16 != 0) {
System.err.println();
}
}
}
private void logln(String s) {
if (DEBUG) {
System.err.println(s);
}
}
private void log(String s) {
if (DEBUG) {
System.err.print(s);
}
}
}

View File

@ -120,6 +120,10 @@
# jdk_lang
# 8029891
java/lang/ClassLoader/deadlock/GetResource.java generic-all
############################################################################
# jdk_instrument
@ -264,7 +268,7 @@ java/security/Security/ClassLoaderDeadlock/Deadlock2.sh generic-all
# Tests take too long, on sparcs see 7143279
# also see 8059906
tools/pack200/CommandLineTests.java
tools/pack200/CommandLineTests.java generic-all
tools/pack200/Pack200Test.java solaris-all,macosx-all
# 8007410

View File

@ -0,0 +1,138 @@
/*
* Copyright (c) 2007, 2014, 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.
*/
/*
* @test
* @bug 8049021
* @summary Test different constructors for CommandAPDU and check CLA,INS,NC,NE,
* P1,and P2
* @run testng CommandAPDUTest
*/
import java.nio.ByteBuffer;
import javax.smartcardio.CommandAPDU;
import static org.testng.Assert.*;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class CommandAPDUTest {
static final byte[] C1 = {(byte) 0x00, (byte) 0xA4, (byte) 0x04,
(byte) 0x00, (byte) 0x07, (byte) 0xA0, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x62, (byte) 0x81, (byte) 0x01, (byte) 0x00};
static int cla, ins, nc, ne, p1, p2;
static byte[] apdu, data;
static CommandAPDU cm1, cm2, cm3, cm4, cm5, cm6, cm7, cm8, cm9;
@BeforeClass
public static void setUpClass() throws Exception {
//expected values of apdu, data, headers, nc, ne
CommandAPDU capdu = new CommandAPDU(C1);
apdu = capdu.getBytes();
data = capdu.getData();
cla = capdu.getCLA();
if (cla != (C1[0] & 0xff)) {
throw new RuntimeException("Failure: cla is not right");
}
ins = capdu.getINS();
if (ins != (C1[1] & 0xff)) {
throw new RuntimeException("Failure: ins is not right");
}
p1 = capdu.getP1();
if (p1 != (C1[2] & 0xff)) {
throw new RuntimeException("Failure: p1 is not right");
}
p2 = capdu.getP2();
if (p2 != (C1[3] & 0xff)) {
throw new RuntimeException("Failure: p2 is not right");
}
nc = capdu.getNc();
ne = capdu.getNe();
//Test on following constructors
cm1 = new CommandAPDU(apdu);
cm2 = new CommandAPDU(cla, ins, p1, p2);
cm3 = new CommandAPDU(cla, ins, p1, p2, data);
cm4 = new CommandAPDU(cla, ins, p1, p2, data, ne);
cm5 = new CommandAPDU(cla, ins, p1, p2, ne);
cm6 = new CommandAPDU(ByteBuffer.wrap(apdu));
cm7 = new CommandAPDU(apdu, 0, apdu.length);
cm8 = new CommandAPDU(cla, ins, p1, p2, data, 0, nc);
cm9 = new CommandAPDU(cla, ins, p1, p2, data, 0, nc, ne);
}
@Test(dataProvider = "provider1")
public static void testHeaders(CommandAPDU cm) {
assertEquals(cla, cm.getCLA());
assertEquals(ins, cm.getINS());
assertEquals(p1, cm.getP1());
assertEquals(p2, cm.getP2());
}
@Test(dataProvider = "provider2")
public static void testAPDU(CommandAPDU cm) {
assertEquals(apdu, cm.getBytes());
}
@Test(dataProvider = "provider3")
public static void testData(CommandAPDU cm) {
assertEquals(data, cm.getData());
}
@Test(dataProvider = "provider3")
public static void testNC(CommandAPDU cm) {
assertEquals(nc, cm.getNc());
}
@Test(dataProvider = "provider4")
public static void testNE(CommandAPDU cm) {
assertEquals(ne, cm.getNe());
}
@DataProvider
public Object[][] provider1() {
return new Object[][]{{cm1}, {cm2}, {cm3}, {cm4}, {cm5}, {cm6}, {cm7},
{cm8}, {cm9}};
}
@DataProvider
public Object[][] provider2() {
return new Object[][]{{cm1}, {cm6}, {cm7}};
}
@DataProvider
public Object[][] provider3() {
return new Object[][]{{cm1}, {cm3}, {cm4}, {cm6}, {cm7}, {cm8}, {cm9}};
}
@DataProvider
public Object[][] provider4() {
return new Object[][]{{cm1}, {cm4}, {cm5}, {cm6}, {cm7}, {cm9}};
}
}

View File

@ -0,0 +1,71 @@
/*
* Copyright (c) 2007, 2014, 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.
*/
/*
* @test
* @bug 8049021
* @summary Construct ResponseAPDU from byte array and check NR< SW, SW1 and SW2
* @run testng ResponseAPDUTest
*/
import javax.smartcardio.ResponseAPDU;
import static org.testng.Assert.*;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class ResponseAPDUTest {
static final byte[] R1 = {(byte) 0x07, (byte) 0xA0, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x62, (byte) 0x81, (byte) 0x01,
(byte) 0x04, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x24,
(byte) 0x05, (byte) 0x00, (byte) 0x0B, (byte) 0x04, (byte) 0xB0,
(byte) 0x25, (byte) 0x90, (byte) 0x00};
static final ResponseAPDU RAPDU = new ResponseAPDU(R1);
static byte[] expectedData;
static int expectedNr, expectedSw1, expectedSw2, expectedSw;
@BeforeClass
public static void setUpClass() throws Exception {
//expected values for data,nr,sw1,sw2 and sw
int apduLen = R1.length;
expectedData = new byte[apduLen - 2];
for (int i = 0; i < (apduLen - 2); i++) {
expectedData[i] = R1[i];
}
expectedNr = expectedData.length;
expectedSw1 = R1[apduLen - 2] & 0xff;
expectedSw2 = R1[apduLen - 1] & 0xff;
expectedSw = (expectedSw1 << 8) | expectedSw2;
}
@Test
public static void test() {
assertEquals(RAPDU.getBytes(), R1);
assertEquals(RAPDU.getData(), expectedData);
assertEquals(RAPDU.getNr(), expectedNr);
assertEquals(RAPDU.getSW(), expectedSw);
assertEquals(RAPDU.getSW1(), expectedSw1);
assertEquals(RAPDU.getSW2(), expectedSw2);
}
}

View File

@ -0,0 +1,72 @@
/*
* Copyright (c) 2007, 2014, 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.
*/
/*
* @test
* @bug 8049021
* @summary Test if we can write new provider for smart card
* @run main/othervm/policy=policy TerminalFactorySpiTest
*/
import java.security.Provider;
import java.security.Security;
import java.util.Arrays;
import javax.smartcardio.CardTerminals;
import javax.smartcardio.TerminalFactory;
import javax.smartcardio.TerminalFactorySpi;
public class TerminalFactorySpiTest {
static boolean callMethod = false;
public static void main(String[] args) throws Exception {
Provider myProvider = new MyProvider();
Security.addProvider(myProvider);
System.out.println(Arrays.asList(Security.getProviders()));
TerminalFactory.getInstance("MyType", new Object()).terminals();
if (!callMethod) {
throw new RuntimeException("Expected engineTerminals() not called");
}
}
public static class MyProvider extends Provider {
MyProvider() {
super("MyProvider", 1.0d, "smart Card Example");
put("TerminalFactory.MyType", "TerminalFactorySpiTest$MyTerminalFactorySpi");
}
}
public static class MyTerminalFactorySpi extends TerminalFactorySpi {
public MyTerminalFactorySpi(Object ob) {
}
protected CardTerminals engineTerminals() {
System.out.println("MyTerminalFactory.engineTerminals()");
callMethod = true;
return null;
}
}
}

View File

@ -0,0 +1,4 @@
grant {
permission java.security.SecurityPermission "insertProvider.MyProvider";
permission java.security.SecurityPermission "putProviderProperty.MyProvider";
};

View File

@ -0,0 +1,96 @@
/*
* Copyright (c) 2014, 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.
*/
/* @test
* @bug 8065957
* @library ../../../../java/rmi/testlibrary
* @build TestLibrary
* @summary Compiles a PortableRemoteObject with rmic -iiop and ensures that stub and tie classes are generated.
* @run main IIOPCompilation
* @author Felix Yang
*
*/
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.rmi.RemoteException;
import java.util.Arrays;
import java.util.List;
import javax.rmi.PortableRemoteObject;
public class IIOPCompilation {
public static void main(String args[]) throws IOException, InterruptedException {
IIOPCompilation test = new IIOPCompilation();
test.doTest();
}
private void doTest() throws IOException, InterruptedException {
String className = DummyImpl.class.getName();
int exitCode = runRmic(className);
if (exitCode != 0) {
throw new RuntimeException("Rmic failed. The exit code is " + exitCode);
}
// Check the stub class generated correctly
String stubFile = "_" + Dummy.class.getName() + "_Stub.class";
assertFileExists(stubFile);
// Check the tie class generated correctly
String tieFile = "_" + className + "_Tie.class";
assertFileExists(tieFile);
}
private void assertFileExists(String fileName) throws FileNotFoundException {
if (!new File(fileName).exists()) {
throw new FileNotFoundException(fileName + " doesn't exist!");
}
}
private int runRmic(String classname) throws IOException, InterruptedException {
String rmicProgramStr = TestLibrary.getProperty("java.home", "") + File.separator + "bin" + File.separator + "rmic";
String testClasses = TestLibrary.getProperty("test.classes", "");
List<String> command = Arrays.asList(rmicProgramStr, "-iiop", "-classpath", testClasses, classname);
System.out.println("Running command: " + command);
Process p = null;
try {
p = new ProcessBuilder(command).inheritIO().start();
p.waitFor();
return p.exitValue();
} finally {
if (p != null && p.isAlive()) {
p.destroy();
}
}
}
}
interface Dummy extends java.rmi.Remote {
}
class DummyImpl extends PortableRemoteObject implements Dummy {
public DummyImpl() throws RemoteException {
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2014, 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
@ -50,7 +50,7 @@ public class TestDSA2 {
public static void main(String[] args) throws Exception {
boolean[] expectedToPass = { true, true, true };
test(1024, expectedToPass);
boolean[] expectedToPass2 = { false, true, true };
boolean[] expectedToPass2 = { true, true, true };
test(2048, expectedToPass2);
}

View File

@ -127,7 +127,7 @@ public class Pack200Test {
// select the jars carefully, adding more jars will increase the
// testing time, especially for jprt.
jarList.add(Utils.createRtJar());
jarList.add(Utils.locateJar("golden.jar"));
jarList.add(Utils.getGoldenJar());
System.out.println(jarList);
doPackUnpack();
}

View File

@ -52,7 +52,7 @@ public class PackTestZip64 {
// make a copy of the test specimen to local directory
File testFile = new File("tools_java.jar");
// Add a large number of small files to the golden jar
generateLargeJar(testFile, Utils.locateJar("golden.jar"));
generateLargeJar(testFile, Utils.getGoldenJar());
List<String> cmdsList = new ArrayList<>();

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2014, 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
@ -50,7 +50,7 @@ public class RepackTest {
// make a copy of the test specimen to local directory
File testFile = new File("src_tools.jar");
Utils.copyFile(Utils.locateJar("golden.jar"), testFile);
Utils.copyFile(Utils.getGoldenJar(), testFile);
List<String> cmdsList = new ArrayList<>();
// case 1:

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2010, 2014, 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
@ -54,7 +54,7 @@ public class TimeStamp {
public static void main(String... args) throws IOException {
// make a local copy of our test file
File srcFile = Utils.locateJar("golden.jar");
File srcFile = Utils.getGoldenJar();
File goldenFile = new File("golden.jar");
Utils.copyFile(srcFile, goldenFile);

View File

@ -63,7 +63,7 @@ class Utils {
System.getProperty("os.name").startsWith("Windows");
static final boolean Is64Bit =
System.getProperty("sun.arch.data.model", "32").equals("64");
static final File JavaSDK = new File(JavaHome).getParentFile();
static final File JavaSDK = new File(JavaHome);
static final String PACK_FILE_EXT = ".pack";
static final String JAVA_FILE_EXT = ".java";
@ -82,11 +82,7 @@ class Utils {
if (VerifierJar.exists()) {
return;
}
File srcDir = new File(TEST_SRC_DIR, VERIFIER_DIR_NAME);
if (!srcDir.exists()) {
// if not available try one level above
srcDir = new File(TEST_SRC_DIR.getParentFile(), VERIFIER_DIR_NAME);
}
File srcDir = new File(getVerifierDir(), "src");
List<File> javaFileList = findFiles(srcDir, createFilter(JAVA_FILE_EXT));
File tmpFile = File.createTempFile("javac", ".tmp");
XCLASSES.mkdirs();
@ -115,6 +111,18 @@ class Utils {
".");
}
private static File getVerifierDir() {
File srcDir = new File(TEST_SRC_DIR, VERIFIER_DIR_NAME);
if (!srcDir.exists()) {
// if not available try one level above
srcDir = new File(TEST_SRC_DIR.getParentFile(), VERIFIER_DIR_NAME);
}
return srcDir;
}
static File getGoldenJar() {
return new File(new File(getVerifierDir(), "data"), "golden.jar");
}
static void dirlist(File dir) {
File[] files = dir.listFiles();
System.out.println("--listing " + dir.getAbsolutePath() + "---");
@ -564,7 +572,8 @@ class Utils {
File rtJar = new File("rt.jar");
cmdList.clear();
cmdList.add(getJarCmd());
cmdList.add("cvf");
// cmdList.add("cvf"); too noisy
cmdList.add("cf");
cmdList.add(rtJar.getName());
cmdList.add("-C");
cmdList.add("out");
@ -574,24 +583,4 @@ class Utils {
recursiveDelete(new File("out"));
return rtJar;
}
private static List<File> locaterCache = null;
// search the source dir and jdk dir for requested file and returns
// the first location it finds.
static File locateJar(String name) {
try {
if (locaterCache == null) {
locaterCache = new ArrayList<File>();
locaterCache.addAll(findFiles(TEST_SRC_DIR, createFilter(JAR_FILE_EXT)));
locaterCache.addAll(findFiles(JavaSDK, createFilter(JAR_FILE_EXT)));
}
for (File f : locaterCache) {
if (f.getName().equals(name)) {
return f;
}
}
throw new IOException("file not found: " + name);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}