From: Yang Gu <yang.gu@intel.com>
To: ofono@ofono.org
Subject: [PATCH 21/27] test-stk: Add test for perform card apdu parser
Date: Thu, 13 May 2010 18:48:38 +0800 [thread overview]
Message-ID: <1273747724-28019-21-git-send-email-yang.gu@intel.com> (raw)
In-Reply-To: <1273747724-28019-1-git-send-email-yang.gu@intel.com>
[-- Attachment #1: Type: text/plain, Size: 9303 bytes --]
---
unit/test-stkutil.c | 259 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 259 insertions(+), 0 deletions(-)
diff --git a/unit/test-stkutil.c b/unit/test-stkutil.c
index 66aa091..340f15f 100644
--- a/unit/test-stkutil.c
+++ b/unit/test-stkutil.c
@@ -45,6 +45,7 @@ static gboolean g_mem_equal(const unsigned char *v1, const unsigned char *v2,
for (i = 0; i < len; i++)
if (v1[i] != v2[i])
return FALSE;
+
return TRUE;
}
@@ -250,6 +251,21 @@ static void check_item_icon_id_list(const struct stk_item_icon_id_list *command,
g_assert(g_mem_equal(command->list, test->list, test->len));
}
+/* Defined in TS 102.223 Section 8.35 */
+static void check_c_apdu(const struct stk_c_apdu *command,
+ const struct stk_c_apdu *test)
+{
+ g_assert(command->cla == test->cla);
+ g_assert(command->ins == test->ins);
+ g_assert(command->p1 == test->p1);
+ g_assert(command->p2 == test->p2);
+ g_assert(command->lc == test->lc);
+ g_assert(g_mem_equal(command->data, test->data, test->lc));
+
+ if (test->has_le)
+ g_assert(command->le == test->le);
+}
+
/* Defined in TS 102.223 Section 8.43 */
static inline void check_imm_resp(const unsigned char command,
const unsigned char test)
@@ -9181,6 +9197,230 @@ static void test_setup_event_list(gconstpointer data)
stk_command_free(command);
}
+struct perform_card_apdu_test {
+ const unsigned char *pdu;
+ unsigned int pdu_len;
+ unsigned char qualifier;
+ unsigned char dst;
+ struct stk_c_apdu c_apdu;
+};
+
+static unsigned char perform_card_apdu_111[] = { 0xD0, 0x12, 0x81, 0x03, 0x01,
+ 0x30, 0x00, 0x82, 0x02, 0x81,
+ 0x11, 0xA2, 0x07, 0xA0, 0xA4,
+ 0x00, 0x00, 0x02, 0x3F, 0x00 };
+
+static unsigned char perform_card_apdu_112[] = { 0xD0, 0x10, 0x81, 0x03, 0x01,
+ 0x30, 0x00, 0x82, 0x02, 0x81,
+ 0x11, 0xA2, 0x05, 0xA0, 0xC0,
+ 0x00, 0x00, 0x1B };
+
+static unsigned char perform_card_apdu_121[] = { 0xD0, 0x12, 0x81, 0x03, 0x01,
+ 0x30, 0x00, 0x82, 0x02, 0x81,
+ 0x11, 0xA2, 0x07, 0xA0, 0xA4,
+ 0x00, 0x00, 0x02, 0x7F, 0x20 };
+
+static unsigned char perform_card_apdu_122[] = { 0xD0, 0x12, 0x81, 0x03, 0x01,
+ 0x30, 0x00, 0x82, 0x02, 0x81,
+ 0x11, 0xA2, 0x07, 0xA0, 0xA4,
+ 0x00, 0x00, 0x02, 0x6F, 0x30 };
+
+static unsigned char perform_card_apdu_123[] = { 0xD0, 0x28, 0x81, 0x03, 0x01,
+ 0x30, 0x00, 0x82, 0x02, 0x81,
+ 0x11, 0xA2, 0x1D, 0xA0, 0xD6,
+ 0x00, 0x00, 0x18, 0x00, 0x01,
+ 0x02, 0x03, 0x04, 0x05, 0x06,
+ 0x07, 0x08, 0x09, 0x0A, 0x0B,
+ 0x0C, 0x0D, 0x0E, 0x0F, 0x10,
+ 0x11, 0x12, 0x13, 0x14, 0x15,
+ 0x16, 0x17 };
+
+static unsigned char perform_card_apdu_124[] = { 0xD0, 0x10, 0x81, 0x03, 0x01,
+ 0x30, 0x00, 0x82, 0x02, 0x81,
+ 0x11, 0xA2, 0x05, 0xA0, 0xB0,
+ 0x00, 0x00, 0x18 };
+
+static unsigned char perform_card_apdu_125[] = { 0xD0, 0x28, 0x81, 0x03, 0x01,
+ 0x30, 0x00, 0x82, 0x02, 0x81,
+ 0x11, 0xA2, 0x1D, 0xA0, 0xD6,
+ 0x00, 0x00, 0x18, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF };
+
+static unsigned char perform_card_apdu_151[] = { 0xD0, 0x12, 0x81, 0x03, 0x01,
+ 0x30, 0x00, 0x82, 0x02, 0x81,
+ 0x17, 0xA2, 0x07, 0xA0, 0xA4,
+ 0x00, 0x00, 0x02, 0x3F, 0x00 };
+
+static unsigned char perform_card_apdu_211[] = { 0xD0, 0x12, 0x81, 0x03, 0x01,
+ 0x30, 0x00, 0x82, 0x02, 0x81,
+ 0x11, 0xA2, 0x07, 0xA0, 0xA4,
+ 0x00, 0x00, 0x02, 0x3F, 0x00 };
+
+static struct perform_card_apdu_test perform_card_apdu_data_111 = {
+ .pdu = perform_card_apdu_111,
+ .pdu_len = sizeof(perform_card_apdu_111),
+ .qualifier = 0x00,
+ .dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_1,
+ .c_apdu = {
+ .cla = 0xA0,
+ .ins = STK_INS_SELECT,
+ .p1 = 0x00,
+ .p2 = 0x00,
+ .lc = 0x02,
+ .data = { 0x3F, 0x00 }
+ }
+};
+
+static struct perform_card_apdu_test perform_card_apdu_data_112 = {
+ .pdu = perform_card_apdu_112,
+ .pdu_len = sizeof(perform_card_apdu_112),
+ .qualifier = 0x00,
+ .dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_1,
+ .c_apdu = {
+ .cla = 0xA0,
+ .ins = STK_INS_GET_RESPONSE,
+ .p1 = 0x00,
+ .p2 = 0x00,
+ .has_le = 1,
+ .le = 0x1B
+ }
+};
+
+static struct perform_card_apdu_test perform_card_apdu_data_121 = {
+ .pdu = perform_card_apdu_121,
+ .pdu_len = sizeof(perform_card_apdu_121),
+ .qualifier = 0x00,
+ .dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_1,
+ .c_apdu = {
+ .cla = 0xA0,
+ .ins = STK_INS_SELECT,
+ .p1 = 0x00,
+ .p2 = 0x00,
+ .lc = 0x02,
+ .data = { 0x7F, 0x20 }
+ }
+};
+
+static struct perform_card_apdu_test perform_card_apdu_data_122 = {
+ .pdu = perform_card_apdu_122,
+ .pdu_len = sizeof(perform_card_apdu_122),
+ .qualifier = 0x00,
+ .dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_1,
+ .c_apdu = {
+ .cla = 0xA0,
+ .ins = STK_INS_SELECT,
+ .p1 = 0x00,
+ .p2 = 0x00,
+ .lc = 0x02,
+ .data = { 0x6F, 0x30 }
+ }
+};
+
+/* Byte 14 of Data is not correct in spec. */
+static struct perform_card_apdu_test perform_card_apdu_data_123 = {
+ .pdu = perform_card_apdu_123,
+ .pdu_len = sizeof(perform_card_apdu_123),
+ .qualifier = 0x00,
+ .dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_1,
+ .c_apdu = {
+ .cla = 0xA0,
+ .ins = STK_INS_UPDATE_BINARY_D6,
+ .p1 = 0x00,
+ .p2 = 0x00,
+ .lc = 0x18,
+ .data = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+ 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,
+ 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 }
+ }
+};
+
+static struct perform_card_apdu_test perform_card_apdu_data_124 = {
+ .pdu = perform_card_apdu_124,
+ .pdu_len = sizeof(perform_card_apdu_124),
+ .qualifier = 0x00,
+ .dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_1,
+ .c_apdu = {
+ .cla = 0xA0,
+ .ins = STK_INS_READ_BINARY_B0,
+ .p1 = 0x00,
+ .p2 = 0x00,
+ .has_le = 1,
+ .le = 0x18
+ }
+};
+
+static struct perform_card_apdu_test perform_card_apdu_data_125 = {
+ .pdu = perform_card_apdu_125,
+ .pdu_len = sizeof(perform_card_apdu_125),
+ .qualifier = 0x00,
+ .dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_1,
+ .c_apdu = {
+ .cla = 0xA0,
+ .ins = STK_INS_UPDATE_BINARY_D6,
+ .p1 = 0x00,
+ .p2 = 0x00,
+ .lc = 0x18,
+ .data = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
+ }
+};
+
+static struct perform_card_apdu_test perform_card_apdu_data_151 = {
+ .pdu = perform_card_apdu_151,
+ .pdu_len = sizeof(perform_card_apdu_151),
+ .qualifier = 0x00,
+ .dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_7,
+ .c_apdu = {
+ .cla = 0xA0,
+ .ins = STK_INS_SELECT,
+ .p1 = 0x00,
+ .p2 = 0x00,
+ .lc = 0x02,
+ .data = { 0x3F, 0x00 }
+ }
+};
+
+static struct perform_card_apdu_test perform_card_apdu_data_211 = {
+ .pdu = perform_card_apdu_211,
+ .pdu_len = sizeof(perform_card_apdu_211),
+ .qualifier = 0x00,
+ .dst = STK_DEVICE_IDENTITY_TYPE_CARD_READER_1,
+ .c_apdu = {
+ .cla = 0xA0,
+ .ins = STK_INS_SELECT,
+ .p1 = 0x00,
+ .p2 = 0x00,
+ .lc = 0x02,
+ .data = { 0x3F, 0x00 }
+ }
+};
+
+static void test_perform_card_apdu(gconstpointer data)
+{
+ const struct perform_card_apdu_test *test = data;
+ struct stk_command *command;
+
+ command = stk_command_new_from_pdu(test->pdu, test->pdu_len);
+
+ g_assert(command);
+
+ g_assert(command->number == 1);
+ g_assert(command->type == STK_COMMAND_TYPE_PERFORM_CARD_APDU);
+ g_assert(command->qualifier == test->qualifier);
+
+ g_assert(command->src == STK_DEVICE_IDENTITY_TYPE_UICC);
+ g_assert(command->dst == test->dst);
+
+ check_c_apdu(&command->perform_card_apdu.c_apdu, &test->c_apdu);
+
+ stk_command_free(command);
+}
+
int main(int argc, char **argv)
{
g_test_init(&argc, &argv, NULL);
@@ -9841,5 +10081,24 @@ int main(int argc, char **argv)
g_test_add_data_func("/teststk/Setup Event List 1.4.1",
&setup_event_list_data_141, test_setup_event_list);
+ g_test_add_data_func("/teststk/Perform Card APDU 1.1.1",
+ &perform_card_apdu_data_111, test_perform_card_apdu);
+ g_test_add_data_func("/teststk/Perform Card APDU 1.1.2",
+ &perform_card_apdu_data_112, test_perform_card_apdu);
+ g_test_add_data_func("/teststk/Perform Card APDU 1.2.1",
+ &perform_card_apdu_data_121, test_perform_card_apdu);
+ g_test_add_data_func("/teststk/Perform Card APDU 1.2.2",
+ &perform_card_apdu_data_122, test_perform_card_apdu);
+ g_test_add_data_func("/teststk/Perform Card APDU 1.2.3",
+ &perform_card_apdu_data_123, test_perform_card_apdu);
+ g_test_add_data_func("/teststk/Perform Card APDU 1.2.4",
+ &perform_card_apdu_data_124, test_perform_card_apdu);
+ g_test_add_data_func("/teststk/Perform Card APDU 1.2.5",
+ &perform_card_apdu_data_125, test_perform_card_apdu);
+ g_test_add_data_func("/teststk/Perform Card APDU 1.5.1",
+ &perform_card_apdu_data_151, test_perform_card_apdu);
+ g_test_add_data_func("/teststk/Perform Card APDU 2.1.1",
+ &perform_card_apdu_data_211, test_perform_card_apdu);
+
return g_test_run();
}
--
1.7.0.4
next prev parent reply other threads:[~2010-05-13 10:48 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-13 10:48 [PATCH 01/27] stk: Add poll interval proactive command parser Yang Gu
2010-05-13 10:48 ` [PATCH 02/27] test-stkutil: Add test for poll interval parser Yang Gu
2010-05-13 10:48 ` [PATCH 03/27] stkutil: Add setup menu proactive command parser Yang Gu
2010-05-13 10:48 ` [PATCH 04/27] test-stkutil: Add test for setup menu parser Yang Gu
2010-05-13 10:48 ` [PATCH 05/27] stkutil: Add select item proactive command parser Yang Gu
2010-05-13 10:48 ` [PATCH 06/27] test-stkutil: Add test for select item parser Yang Gu
2010-05-13 10:48 ` [PATCH 07/27] test-stkutil: Use dedicated functions to check Yang Gu
2010-05-13 10:48 ` [PATCH 08/27] test-stkutil: Refactor test for send sms parser Yang Gu
2010-05-13 10:48 ` [PATCH 09/27] stk: Adjust the sequence of dataobj Yang Gu
2010-05-13 10:48 ` [PATCH 10/27] stkutil: Add setup call proactive command parser Yang Gu
2010-05-13 10:48 ` [PATCH 11/27] test-stkutil: Add unit test for setup call parser Yang Gu
2010-05-13 10:48 ` [PATCH 12/27] stkutil: Add refresh proactive command parser Yang Gu
2010-05-13 10:48 ` [PATCH 13/27] test-stkutil: Add test for refresh parser Yang Gu
2010-05-13 10:48 ` [PATCH 14/27] stkutil: Add polling off proactive command parser Yang Gu
2010-05-13 10:48 ` [PATCH 15/27] test-stkutil: Add test for polling off parser Yang Gu
2010-05-13 10:48 ` [PATCH 16/27] stkutil: Add provide local info command parser Yang Gu
2010-05-13 10:48 ` [PATCH 17/27] test-stk: Add test for provide local info parser Yang Gu
2010-05-13 10:48 ` [PATCH 18/27] stkutil: Add event list command parser Yang Gu
2010-05-13 10:48 ` [PATCH 19/27] test-stkutil: Add test for event list parser Yang Gu
2010-05-13 10:48 ` [PATCH 20/27] stkutil: Add perform card apdu command parser Yang Gu
2010-05-13 10:48 ` Yang Gu [this message]
2010-05-13 10:48 ` [PATCH 22/27] stkutil: Add power off card " Yang Gu
2010-05-13 10:48 ` [PATCH 23/27] stkutil: Add power on " Yang Gu
2010-05-13 10:48 ` [PATCH 24/27] stkutil: Add get reader status " Yang Gu
2010-05-13 10:48 ` [PATCH 25/27] test-stk: Add test for get reader status parser Yang Gu
2010-05-13 10:48 ` [PATCH 26/27] stkutil: Add timer management command parser Yang Gu
2010-05-13 10:48 ` [PATCH 27/27] test-stk: Add test for timer management parser Yang Gu
2010-05-13 20:37 ` [PATCH 01/27] stk: Add poll interval proactive command parser Denis Kenzior
2010-05-14 8:37 ` Gu, Yang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1273747724-28019-21-git-send-email-yang.gu@intel.com \
--to=yang.gu@intel.com \
--cc=ofono@ofono.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.