jolly has uploaded this change for review.
CCID: Check if reader sends request TPDU with maximum size
The maximum size of a request TPDU can have 5 bytes header and 255 bytes
data. It is expected that the reader transmits all bytes to SIM without
failure.
Change-Id: I7c1cb52b578c19d6c0ec1493e45f6ed9c43735b4
---
M ccid/CCID_Tests.ttcn
1 file changed, 44 insertions(+), 1 deletion(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/04/42804/1
diff --git a/ccid/CCID_Tests.ttcn b/ccid/CCID_Tests.ttcn
index b9a23ef..5e7c49b 100644
--- a/ccid/CCID_Tests.ttcn
+++ b/ccid/CCID_Tests.ttcn
@@ -760,12 +760,54 @@
f_start_and_wait();
}
+/* The SIM request with 255 bytes. */
+private function f_TC_255_bytes_request() runs on CardemSlot_CT
+{
+ var octetstring req := '00D60000FF000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e'O
+ var octetstring res := '9000'O;
+ var CCID_PDU ccid_pdu;
+
+ f_cardem_manager();
+
+ f_ccid_power_on(CCID_PWRSEL_3V0);
+
+ /* Send a request towards reader. */
+ CCID.send(ts_CCID_XfrBlock(g_slot_nr, req, 0));
+ /* Receive the request by SIM. */
+ f_cardem_receive(tr_SIMTRACE_CEMU_RX_DATA(?, substr(req, 0, 5)));
+ /* Transmit the procedure byte from SIM. */
+ f_cardem_transmit(ts_SIMTRACE_CEMU_TX_DATA(ts_CardEmu_DataFlags(pb_and_rx := true, final := false),
+ 'D6'O));
+ /* Receive the data by SIM. */
+ f_cardem_receive(tr_SIMTRACE_CEMU_RX_DATA(?, substr(req, 5, lengthof(req) - 5)));
+ /* Transmit the status bytes from SIM. */
+ f_cardem_transmit(ts_SIMTRACE_CEMU_TX_DATA(ts_CardEmu_DataFlags(pb_and_tx := true, final := true),
+ res));
+ /* Receive the response from reader. */
+ ccid_pdu := f_ccid_receive(tr_CCID_DataBlock(g_slot_nr, ?, ?, ?));
+ if (ccid_pdu.u.DataBlock.abData != res) {
+ setverdict(fail, "Unexpected SW1/SW2");
+ mtc.stop;
+ }
+
+ /* Stop simtrace emulation, to prevent race condition. */
+ vc_Cardem.stop;
+ vc_Cardem.done;
+}
+testcase TC_255_bytes_request() runs on Test_CT
+{
+ f_init();
+
+ f_start_handler(refers(f_TC_255_bytes_request), mp_simtrace_slot, true);
+
+ f_start_and_wait();
+}
+
/* TODO */
/* IccPowerOn: verify that CCID resets all parameters to default values */
/* IccPowerOn: verify that bPowerSelect has no effect in active state */
-/* XfrBlock: length corner cases (Lc/Le max, ...) */
/* IccClock: verify clock has stopped/restarted */
/* Abort for command that already terminated */
/* Abort for command that's still processing */
@@ -1124,6 +1166,7 @@
execute( TC_255_bytes_response() );
execute( TC_256_bytes_response() );
execute( TC_null_procedure_byte() );
+ execute( TC_255_bytes_request() );
/* error handling */
execute( TC_inval_slot() );
To view, visit change 42804. To unsubscribe, or for help writing mail filters, visit settings.