package com.licel.jcardsim.base; import com.licel.jcardsim.samples.DualInterfaceApplet; import com.licel.jcardsim.utils.AIDUtil; import com.licel.jcardsim.utils.ByteUtil; import javacard.framework.AID; import javacard.framework.APDU; import javacard.framework.ISO7816; import junit.framework.TestCase; public class ProtocolTest extends TestCase { private static final byte CLA = (byte) 0x80; private static final byte INS_READ = 0; private static final byte INS_WRITE = 2; private static final byte INS_INFO = 4; private final AID aid = AIDUtil.create("D0000CAFE00001"); public ProtocolTest(String name) { super(name); } public void testDualInterfaceApplet() { final String expectedOutput = "CAFE9000"; byte[] response; Simulator simulator = new Simulator(); simulator.installApplet(aid, DualInterfaceApplet.class); simulator.selectApplet(aid); // check interface is T=0 (contacted) response = simulator.transmitCommand(new byte[]{CLA, INS_INFO, 0, 0}); assertEquals(APDU.PROTOCOL_T0, response[0]); assertEquals(ISO7816.SW_NO_ERROR, ByteUtil.getSW(response)); // store data response = simulator.transmitCommand(new byte[]{CLA,INS_WRITE,0,0,2, (byte) 0xCA, (byte) 0xFE}); assertEquals(ISO7816.SW_NO_ERROR, ByteUtil.getSW(response)); // read data response = simulator.transmitCommand(new byte[]{CLA, INS_READ, 0, 0}); assertEquals(expectedOutput, ByteUtil.hexString(response)); // change protocol simulator.changeProtocol("T=CL"); response = simulator.transmitCommand(new byte[]{CLA, INS_INFO, 0, 0}); assertEquals(APDU.PROTOCOL_MEDIA_CONTACTLESS_TYPE_A, response[0]); assertEquals(ISO7816.SW_NO_ERROR, ByteUtil.getSW(response)); // read data response = simulator.transmitCommand(new byte[]{CLA, INS_READ, 0, 0}); assertEquals(expectedOutput, ByteUtil.hexString(response)); // store data should fail response = simulator.transmitCommand(new byte[]{CLA,INS_WRITE,0,0,2, (byte) 0xBA, (byte) 0xD0}); assertEquals(ISO7816.SW_CONDITIONS_NOT_SATISFIED, ByteUtil.getSW(response)); } }