/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.nfc_extras.tests; import android.content.Context; import android.nfc.NfcAdapter; import android.test.InstrumentationTestCase; import android.util.Log; import com.android.nfc_extras.NfcAdapterExtras; import com.android.nfc_extras.NfcAdapterExtras.CardEmulationRoute; import com.android.nfc_extras.NfcExecutionEnvironment; import java.io.IOException; import java.util.Arrays; public class BasicNfcEeTest extends InstrumentationTestCase { private Context mContext; private NfcAdapterExtras mAdapterExtras; private NfcExecutionEnvironment mEe; public static final byte[] SELECT_CARD_MANAGER_COMMAND = new byte[] { (byte)0x00, (byte)0xA4, (byte)0x04, (byte)0x00, // command (byte)0x08, // data length (byte)0xA0, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00, // card manager AID (byte)0x00 // trailer }; public static final byte[] SELECT_CARD_MANAGER_RESPONSE = new byte[] { (byte)0x90, (byte)0x00, }; @Override protected void setUp() throws Exception { super.setUp(); mContext = getInstrumentation().getTargetContext(); mAdapterExtras = NfcAdapterExtras.get(NfcAdapter.getDefaultAdapter(mContext)); mEe = mAdapterExtras.getEmbeddedExecutionEnvironment(); } public void testSendCardManagerApdu() throws IOException { mEe.open(); try { byte[] out = mEe.transceive(SELECT_CARD_MANAGER_COMMAND); assertTrue(out.length >= SELECT_CARD_MANAGER_RESPONSE.length); byte[] trailing = Arrays.copyOfRange(out, out.length - SELECT_CARD_MANAGER_RESPONSE.length, out.length); assertByteArrayEquals(SELECT_CARD_MANAGER_RESPONSE, trailing); } finally { mEe.close(); } } public void testSendCardManagerApduMultiple() throws IOException { for (int i=0; i<10; i++) { try { mEe.open(); try { byte[] out = mEe.transceive(SELECT_CARD_MANAGER_COMMAND); byte[] trailing = Arrays.copyOfRange(out, out.length - SELECT_CARD_MANAGER_RESPONSE.length, out.length); } finally { try {Thread.sleep(1000);} catch (InterruptedException e) {} mEe.close(); } } catch (IOException e) {} } testSendCardManagerApdu(); } public void testEnableEe() { mAdapterExtras.setCardEmulationRoute( new CardEmulationRoute(CardEmulationRoute.ROUTE_ON_WHEN_SCREEN_ON, mEe)); CardEmulationRoute newRoute = mAdapterExtras.getCardEmulationRoute(); assertEquals(CardEmulationRoute.ROUTE_ON_WHEN_SCREEN_ON, newRoute.route); assertEquals(mEe, newRoute.nfcEe); } public void testDisableEe() { mAdapterExtras.setCardEmulationRoute( new CardEmulationRoute(CardEmulationRoute.ROUTE_OFF, null)); CardEmulationRoute newRoute = mAdapterExtras.getCardEmulationRoute(); assertEquals(CardEmulationRoute.ROUTE_OFF, newRoute.route); assertNull(newRoute.nfcEe); } private static void assertByteArrayEquals(byte[] b1, byte[] b2) { assertEquals(b1.length, b2.length); for (int i = 0; i < b1.length; i++) { assertEquals(b1[i], b2[i]); } } }