Open Source Telephony
 help / color / mirror / Atom feed
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


  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox