1/* 2 * Copyright (c) 2005, 2016, 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/* 25 * @test 26 * @bug 6239117 6445367 27 * @summary test that CardTerminals.waitForCard() works 28 * @author Andreas Sterbenz 29 * @modules java.smartcardio/javax.smartcardio 30 * @run main/manual TestMultiplePresent 31 */ 32 33// This test requires special hardware. 34 35import java.util.List; 36import javax.smartcardio.CardTerminal; 37import javax.smartcardio.CardTerminals; 38import javax.smartcardio.TerminalFactory; 39import static javax.smartcardio.CardTerminals.State.*; 40 41public class TestMultiplePresent { 42 43 public static void main(String[] args) throws Exception { 44 Utils.setLibrary(args); 45 TerminalFactory factory = Utils.getTerminalFactory(null); 46 if (factory == null) { 47 System.out.println("Skipping the test: " + 48 "no card terminals available"); 49 return; 50 } 51 System.out.println(factory); 52 53 CardTerminals terminals = factory.terminals(); 54 List<CardTerminal> list = terminals.list(); 55 System.out.println("Terminals: " + list); 56 boolean multipleReaders = true; 57 if (list.size() < 2) { 58 if (list.isEmpty()) { 59 System.out.println("Skipping the test: " + 60 "no card terminals available"); 61 return; 62 } 63 System.out.println("Only one reader present, using simplified test"); 64 multipleReaders = false; 65 } 66 67 while (true) { 68 boolean present = false; 69 for (CardTerminal terminal : list) { 70 present |= terminal.isCardPresent(); 71 } 72 if (present == false) { 73 break; 74 } 75 System.out.println("*** Remove all cards!"); 76 Thread.sleep(1000); 77 } 78 System.out.println("OK"); 79 80 List<CardTerminal> result; 81 82 result = terminals.list(CARD_PRESENT); 83 if (result.size() != 0) { 84 throw new Exception("List not empty: " + result); 85 } 86 87 if (terminals.waitForChange(1000)) { 88 throw new Exception("no timeout"); 89 } 90 if (terminals.waitForChange(1000)) { 91 throw new Exception("no timeout"); 92 } 93 result = terminals.list(CARD_PRESENT); 94 if (result.size() != 0) { 95 throw new Exception("List not empty: " + result); 96 } 97 98 System.out.println("*** Insert card!"); 99 terminals.waitForChange(); 100 101 result = terminals.list(CARD_INSERTION); 102 System.out.println(result); 103 if (result.size() != 1) { 104 throw new Exception("no card present"); 105 } 106 CardTerminal t1 = result.get(0); 107 108 result = terminals.list(CARD_INSERTION); 109 System.out.println(result); 110 if ((result.size() != 1) || (result.get(0) != t1)) { 111 throw new Exception("no card present"); 112 } 113 114 if (terminals.list(CARD_REMOVAL).size() != 0) { 115 throw new Exception("List not empty: " + result); 116 } 117 if (terminals.list(CARD_REMOVAL).size() != 0) { 118 throw new Exception("List not empty: " + result); 119 } 120 121 122 if (terminals.waitForChange(1000)) { 123 throw new Exception("no timeout"); 124 } 125 126 if (terminals.list(CARD_REMOVAL).size() != 0) { 127 throw new Exception("List not empty: " + result); 128 } 129 130 if (multipleReaders) { 131 System.out.println("*** Insert card into other reader!"); 132 terminals.waitForChange(); 133 134 result = terminals.list(CARD_INSERTION); 135 System.out.println(result); 136 if (result.size() != 1) { 137 throw new Exception("no card present"); 138 } 139 CardTerminal t2 = result.get(0); 140 if (t1.getName().equals(t2.getName())) { 141 throw new Exception("same terminal"); 142 } 143 144 System.out.println("*** Remove card from 2nd reader!"); 145 terminals.waitForChange(); 146 147 if (terminals.list(CARD_INSERTION).size() != 0) { 148 throw new Exception("List not empty: " + result); 149 } 150 result = terminals.list(CARD_REMOVAL); 151 if ((result.size() != 1) || (result.get(0) != t2)) { 152 throw new Exception("no or wrong terminal"); 153 } 154 } 155 156 System.out.println("*** Remove card from 1st reader!"); 157 terminals.waitForChange(); 158 159 if (terminals.list(CARD_INSERTION).size() != 0) { 160 throw new Exception("List not empty: " + result); 161 } 162 result = terminals.list(CARD_REMOVAL); 163 if ((result.size() != 1) || (result.get(0) != t1)) { 164 throw new Exception("no or wrong terminal"); 165 } 166 167 System.out.println("OK."); 168 } 169 170} 171