summaryrefslogtreecommitdiffstats
path: root/dom/system/gonk/tests/test_ril_worker_icc_ICCIOHelper.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/system/gonk/tests/test_ril_worker_icc_ICCIOHelper.js')
-rw-r--r--dom/system/gonk/tests/test_ril_worker_icc_ICCIOHelper.js173
1 files changed, 173 insertions, 0 deletions
diff --git a/dom/system/gonk/tests/test_ril_worker_icc_ICCIOHelper.js b/dom/system/gonk/tests/test_ril_worker_icc_ICCIOHelper.js
new file mode 100644
index 000000000..e690b1206
--- /dev/null
+++ b/dom/system/gonk/tests/test_ril_worker_icc_ICCIOHelper.js
@@ -0,0 +1,173 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+subscriptLoader.loadSubScript("resource://gre/modules/ril_consts.js", this);
+
+function run_test() {
+ run_next_test();
+}
+
+/**
+ * Verify ICCIOHelper.loadLinearFixedEF with recordSize.
+ */
+add_test(function test_load_linear_fixed_ef() {
+ let worker = newUint8Worker();
+ let context = worker.ContextPool._contexts[0];
+ let ril = context.RIL;
+ let io = context.ICCIOHelper;
+
+ io.getResponse = function fakeGetResponse(options) {
+ // When recordSize is provided, loadLinearFixedEF should call iccIO directly.
+ ok(false);
+ run_next_test();
+ };
+
+ ril.iccIO = function fakeIccIO(options) {
+ ok(true);
+ run_next_test();
+ };
+
+ io.loadLinearFixedEF({recordSize: 0x20});
+});
+
+/**
+ * Verify ICCIOHelper.loadLinearFixedEF without recordSize.
+ */
+add_test(function test_load_linear_fixed_ef() {
+ let worker = newUint8Worker();
+ let context = worker.ContextPool._contexts[0];
+ let ril = context.RIL;
+ let io = context.ICCIOHelper;
+
+ io.getResponse = function fakeGetResponse(options) {
+ ok(true);
+ run_next_test();
+ };
+
+ ril.iccIO = function fakeIccIO(options) {
+ // When recordSize is not provided, loadLinearFixedEF should call getResponse.
+ ok(false);
+ run_next_test();
+ };
+
+ io.loadLinearFixedEF({});
+});
+
+/**
+ * Verify ICC IO Error.
+ */
+add_test(function test_process_icc_io_error() {
+ let worker = newUint8Worker();
+ let context = worker.ContextPool._contexts[0];
+ let buf = context.Buf;
+
+ function do_test(sw1, sw2, expectedErrorMsg) {
+ let called = false;
+ function errorCb(errorMsg) {
+ called = true;
+ equal(errorMsg, expectedErrorMsg);
+ }
+
+ // Write sw1 and sw2 to buffer.
+ buf.writeInt32(sw1);
+ buf.writeInt32(sw2);
+
+ context.RIL[REQUEST_SIM_IO](0, {fileId: 0xffff,
+ command: 0xff,
+ onerror: errorCb});
+
+ // onerror callback should be triggered.
+ ok(called);
+ }
+
+ let TEST_DATA = [
+ // [sw1, sw2, expectError]
+ [ICC_STATUS_ERROR_COMMAND_NOT_ALLOWED, 0xff, GECKO_ERROR_GENERIC_FAILURE],
+ [ICC_STATUS_ERROR_WRONG_PARAMETERS, 0xff, GECKO_ERROR_GENERIC_FAILURE],
+ ];
+
+ for (let i = 0; i < TEST_DATA.length; i++) {
+ do_test.apply(null, TEST_DATA[i]);
+ }
+
+ run_next_test();
+});
+
+/**
+ * Verify ICCIOHelper.processICCIOGetResponse for EF_TYPE_TRANSPARENT.
+ */
+add_test(function test_icc_io_get_response_for_transparent_structure() {
+ let worker = newUint8Worker();
+ let context = worker.ContextPool._contexts[0];
+ let buf = context.Buf;
+ let iccioHelper = context.ICCIOHelper;
+ let pduHelper = context.GsmPDUHelper;
+
+ let responseArray = [
+ // SIM response.
+ [0x00, 0x00, 0x00, 0x0A, 0x2F, 0xE2, 0x04, 0x00, 0x0A, 0xA0, 0xAA, 0x00,
+ 0x02, 0x00, 0x00],
+ // USIM response.
+ [0x62, 0x22, 0x82, 0x02, 0x41, 0x21, 0x83, 0x02, 0x2F, 0xE2, 0xA5, 0x09,
+ 0xC1, 0x04, 0x40, 0x0F, 0xF5, 0x55, 0x92, 0x01, 0x00, 0x8A, 0x01, 0x05,
+ 0x8B, 0x03, 0x2F, 0x06, 0x0B, 0x80, 0x02, 0x00, 0x0A, 0x88, 0x01, 0x10]
+ ];
+
+ for (let i = 0; i < responseArray.length; i++) {
+ let strLen = responseArray[i].length * 2;
+ buf.writeInt32(strLen);
+ for (let j = 0; j < responseArray[i].length; j++) {
+ pduHelper.writeHexOctet(responseArray[i][j]);
+ }
+ buf.writeStringDelimiter(strLen);
+
+ let options = {fileId: ICC_EF_ICCID,
+ structure: EF_STRUCTURE_TRANSPARENT};
+ iccioHelper.processICCIOGetResponse(options);
+
+ equal(options.fileSize, 0x0A);
+ }
+
+ run_next_test();
+});
+
+/**
+ * Verify ICCIOHelper.processICCIOGetResponse for EF_TYPE_LINEAR_FIXED.
+ */
+add_test(function test_icc_io_get_response_for_linear_fixed_structure() {
+ let worker = newUint8Worker();
+ let context = worker.ContextPool._contexts[0];
+ let buf = context.Buf;
+ let iccioHelper = context.ICCIOHelper;
+ let pduHelper = context.GsmPDUHelper;
+
+ let responseArray = [
+ // SIM response.
+ [0x00, 0x00, 0x00, 0x1A, 0x6F, 0x40, 0x04, 0x00, 0x11, 0xA0, 0xAA, 0x00,
+ 0x02, 0x01, 0x1A],
+ // USIM response.
+ [0x62, 0x1E, 0x82, 0x05, 0x42, 0x21, 0x00, 0x1A, 0x01, 0x83, 0x02, 0x6F,
+ 0x40, 0xA5, 0x03, 0x92, 0x01, 0x00, 0x8A, 0x01, 0x07, 0x8B, 0x03, 0x6F,
+ 0x06, 0x02, 0x80, 0x02, 0x00, 0x1A, 0x88, 0x00]
+ ];
+
+ for (let i = 0; i < responseArray.length; i++) {
+ let strLen = responseArray[i].length * 2;
+ buf.writeInt32(strLen);
+ for (let j = 0; j < responseArray[i].length; j++) {
+ pduHelper.writeHexOctet(responseArray[i][j]);
+ }
+ buf.writeStringDelimiter(strLen);
+
+ let options = {fileId: ICC_EF_MSISDN,
+ structure: EF_STRUCTURE_LINEAR_FIXED};
+ iccioHelper.processICCIOGetResponse(options);
+
+ equal(options.fileSize, 0x1A);
+ equal(options.recordSize, 0x1A);
+ equal(options.totalRecords, 0x01);
+ }
+
+ run_next_test();
+});
+