< prev index next >
test/sun/security/smartcardio/Utils.java
Print this page
rev 13550 : imported patch 8059212-Modify-smartcardio-manual-regression-tests-so-that-they-do-not-just-fail-if-no-cardreader-found
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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.
@@ -25,10 +25,11 @@
// common utility functions for the PC/SC tests
import java.io.StringReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.List;
import javax.smartcardio.CardTerminal;
import javax.smartcardio.CardChannel;
import javax.smartcardio.ResponseAPDU;
@@ -41,30 +42,63 @@
if ((args.length > 0) && args[0].equalsIgnoreCase("MUSCLE")) {
System.setProperty("sun.security.smartcardio.library", "/usr/local/$LIBISA/libpcsclite.so");
}
}
+ static TerminalFactory getTerminalFactory(String provName) throws Exception {
+ try {
+ TerminalFactory factory = (provName == null)
+ ? TerminalFactory.getInstance("PC/SC", null)
+ : TerminalFactory.getInstance("PC/SC", null, provName);
+ System.out.println(factory);
+ return factory;
+ } catch (NoSuchAlgorithmException e) {
+ Throwable cause = e.getCause();
+ if (cause != null && cause.getMessage().startsWith("PC/SC not available")) {
+ return null;
+ }
+ throw e;
+ }
+ }
+
static CardTerminal getTerminal(String[] args) throws Exception {
+ return getTerminal(args, null);
+ }
+
+ static CardTerminal getTerminal(String[] args, String provider) throws Exception {
setLibrary(args);
- TerminalFactory factory = TerminalFactory.getInstance("PC/SC", null);
+ try {
+ TerminalFactory factory = (provider == null)
+ ? TerminalFactory.getInstance("PC/SC", null)
+ : TerminalFactory.getInstance("PC/SC", null, provider);
System.out.println(factory);
List<CardTerminal> terminals = factory.terminals().list();
System.out.println("Terminals: " + terminals);
if (terminals.isEmpty()) {
- throw new Exception("No card terminals available");
+ return null;
}
CardTerminal terminal = terminals.get(0);
if (terminal.isCardPresent() == false) {
System.out.println("*** Insert card");
if (terminal.waitForCardPresent(20 * 1000) == false) {
throw new Exception("no card available");
}
}
+ System.out.println("card present: " + terminal.isCardPresent());
+
return terminal;
+
+ } catch (NoSuchAlgorithmException e) {
+ Throwable cause = e.getCause();
+ if (cause != null && cause.getMessage().startsWith("PC/SC not available")) {
+ return null;
+ }
+ throw e;
+ }
}
static final byte[] C1 = parse("00 A4 04 00 07 A0 00 00 00 62 81 01 00");
static final byte[] R1a = parse("07 A0 00 00 00 62 81 01 04 01 00 00 24 05 00 0B 04 B0 25 90 00");
static final byte[] R1b = parse("07 A0 00 00 00 62 81 01 04 01 00 00 24 05 00 0B 04 B0 55 90 00");
< prev index next >