summaryrefslogtreecommitdiffstats
path: root/dom/system/gonk/tests/test_ril_worker_ruim.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/system/gonk/tests/test_ril_worker_ruim.js')
-rw-r--r--dom/system/gonk/tests/test_ril_worker_ruim.js328
1 files changed, 328 insertions, 0 deletions
diff --git a/dom/system/gonk/tests/test_ril_worker_ruim.js b/dom/system/gonk/tests/test_ril_worker_ruim.js
new file mode 100644
index 000000000..0ddc10f29
--- /dev/null
+++ b/dom/system/gonk/tests/test_ril_worker_ruim.js
@@ -0,0 +1,328 @@
+/* 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 RUIM Service.
+ */
+add_test(function test_is_ruim_service_available() {
+ let worker = newWorker();
+ let context = worker.ContextPool._contexts[0];
+ context.RIL._isCdma = true;
+ context.RIL.appType = CARD_APPTYPE_RUIM;
+
+ function test_table(cst, geckoService, enabled) {
+ context.RIL.iccInfoPrivate.cst = cst;
+ equal(context.ICCUtilsHelper.isICCServiceAvailable(geckoService),
+ enabled);
+ }
+
+ test_table([0x0, 0x0, 0x0, 0x0, 0x03], "SPN", true);
+ test_table([0x0, 0x0, 0x0, 0x03, 0x0], "SPN", false);
+ test_table([0x0, 0x0C, 0x0, 0x0, 0x0], "ENHANCED_PHONEBOOK", true);
+ test_table([0x0, 0x0, 0x0, 0x0, 0x0], "ENHANCED_PHONEBOOK", false);
+
+ run_next_test();
+});
+
+/**
+ * Verify EF_PATH for RUIM file.
+ */
+add_test(function test_ruim_file_path_id() {
+ let worker = newWorker();
+ let context = worker.ContextPool._contexts[0];
+ let RIL = context.RIL;
+ let ICCFileHelper = context.ICCFileHelper;
+
+ RIL.appType = CARD_APPTYPE_RUIM;
+ equal(ICCFileHelper.getEFPath(ICC_EF_CSIM_CST),
+ EF_PATH_MF_SIM + EF_PATH_DF_CDMA);
+
+ run_next_test();
+});
+
+add_test(function test_fetch_ruim_recodes() {
+ let worker = newWorker();
+ let context = worker.ContextPool._contexts[0];
+ let RIL = context.RIL;
+ let ruimHelper = context.RuimRecordHelper;
+
+ function testFetchRuimRecordes(expectCalled) {
+ let ifCalled = [];
+
+ ruimHelper.getIMSI_M = function() {
+ ifCalled.push("getIMSI_M");
+ };
+
+ ruimHelper.readCST = function() {
+ ifCalled.push("readCST");
+ };
+
+ ruimHelper.readCDMAHome = function() {
+ ifCalled.push("readCDMAHome");
+ };
+
+ RIL.getCdmaSubscription = function() {
+ ifCalled.push("getCdmaSubscription");
+ };
+
+ ruimHelper.fetchRuimRecords();
+
+ for (let i = 0; i < expectCalled.length; i++ ) {
+ if (ifCalled[i] != expectCalled[i]) {
+ do_print(expectCalled[i] + " is not called.");
+ ok(false);
+ }
+ }
+ }
+
+ let expectCalled = ["getIMSI_M", "readCST", "readCDMAHome",
+ "getCdmaSubscription"];
+ testFetchRuimRecordes(expectCalled);
+
+ run_next_test();
+});
+
+/**
+ * Verify RuimRecordHelper.decodeIMSIValue
+ */
+add_test(function test_decode_imsi_value() {
+ let worker = newUint8Worker();
+ let context = worker.ContextPool._contexts[0];
+
+ function testDecodeImsiValue(encoded, length, expect) {
+ let decoded = context.RuimRecordHelper.decodeIMSIValue(encoded, length);
+
+ equal(expect, decoded);
+ }
+
+ testDecodeImsiValue( 99, 2, "00");
+ testDecodeImsiValue( 90, 2, "01");
+ testDecodeImsiValue( 19, 2, "20");
+ testDecodeImsiValue( 23, 2, "34");
+ testDecodeImsiValue(999, 3, "000");
+ testDecodeImsiValue(990, 3, "001");
+ testDecodeImsiValue(909, 3, "010");
+ testDecodeImsiValue( 99, 3, "100");
+ testDecodeImsiValue(901, 3, "012");
+ testDecodeImsiValue( 19, 3, "120");
+ testDecodeImsiValue( 91, 3, "102");
+ testDecodeImsiValue(199, 3, "200");
+ testDecodeImsiValue(123, 3, "234");
+ testDecodeImsiValue(578, 3, "689");
+
+ run_next_test();
+});
+
+/**
+ * Verify RuimRecordHelper.getIMSI_M
+ */
+add_test(function test_get_imsi_m() {
+ let worker = newUint8Worker();
+ let context = worker.ContextPool._contexts[0];
+ let helper = context.GsmPDUHelper;
+ let buf = context.Buf;
+ let io = context.ICCIOHelper;
+
+ function testDecodeImsi(encodedImsi, expectedImsi) {
+ io.loadTransparentEF = function fakeLoadTransparentEF(options) {
+ // Write data size
+ buf.writeInt32(encodedImsi.length * 2);
+
+ // Write imsi
+ for (let i = 0; i < encodedImsi.length; i++) {
+ helper.writeHexOctet(encodedImsi[i]);
+ }
+
+ // Write string delimiter
+ buf.writeStringDelimiter(encodedImsi.length * 2);
+
+ if (options.callback) {
+ options.callback(options);
+ }
+ };
+
+ context.RuimRecordHelper.getIMSI_M();
+ let imsi = context.RIL.iccInfoPrivate.imsi;
+
+ equal(expectedImsi, imsi)
+ }
+
+ let imsi_1 = "466050081062861";
+ testDecodeImsi([0x0, 0xe5, 0x03, 0xee, 0xca, 0x17, 0x5e, 0x80, 0x63, 0x01], imsi_1);
+
+ let imsi_2 = "460038351175976";
+ testDecodeImsi([0x0, 0xd4, 0x02, 0x61, 0x97, 0x01, 0x5c, 0x80, 0x67, 0x01], imsi_2);
+
+ run_next_test();
+});
+
+/**
+ * Verify RuimRecordHelper.readCDMAHome
+ */
+add_test(function test_read_cdmahome() {
+ let worker = newUint8Worker();
+ let context = worker.ContextPool._contexts[0];
+ let helper = context.GsmPDUHelper;
+ let buf = context.Buf;
+ let io = context.ICCIOHelper;
+
+ io.loadLinearFixedEF = function fakeLoadLinearFixedEF(options) {
+ let cdmaHome = [0xc1, 0x34, 0xff, 0xff, 0x00];
+
+ // Write data size
+ buf.writeInt32(cdmaHome.length * 2);
+
+ // Write cdma home file.
+ for (let i = 0; i < cdmaHome.length; i++) {
+ helper.writeHexOctet(cdmaHome[i]);
+ }
+
+ // Write string delimiter
+ buf.writeStringDelimiter(cdmaHome.length * 2);
+
+ // We just have 1 test record.
+
+ options.totalRecords = 1;
+ if (options.callback) {
+ options.callback(options);
+ }
+ };
+
+ function testCdmaHome(expectedSystemIds, expectedNetworkIds) {
+ context.RuimRecordHelper.readCDMAHome();
+ let cdmaHome = context.RIL.cdmaHome;
+ for (let i = 0; i < expectedSystemIds.length; i++) {
+ equal(cdmaHome.systemId[i], expectedSystemIds[i]);
+ equal(cdmaHome.networkId[i], expectedNetworkIds[i]);
+ }
+ equal(cdmaHome.systemId.length, expectedSystemIds.length);
+ equal(cdmaHome.networkId.length, expectedNetworkIds.length);
+ }
+
+ testCdmaHome([13505], [65535]);
+
+ run_next_test();
+});
+
+/**
+ * Verify reading CDMA EF_SPN
+ */
+add_test(function test_read_cdmaspn() {
+ let worker = newUint8Worker();
+ let context = worker.ContextPool._contexts[0];
+ let helper = context.GsmPDUHelper;
+ let buf = context.Buf;
+ let io = context.ICCIOHelper;
+
+ function testReadSpn(file, expectedSpn, expectedDisplayCondition) {
+ io.loadTransparentEF = function fakeLoadTransparentEF(options) {
+ // Write data size
+ buf.writeInt32(file.length * 2);
+
+ // Write file.
+ for (let i = 0; i < file.length; i++) {
+ helper.writeHexOctet(file[i]);
+ }
+
+ // Write string delimiter
+ buf.writeStringDelimiter(file.length * 2);
+
+ if (options.callback) {
+ options.callback(options);
+ }
+ };
+
+ context.RuimRecordHelper.readSPN();
+ equal(context.RIL.iccInfo.spn, expectedSpn);
+ equal(context.RIL.iccInfoPrivate.spnDisplayCondition,
+ expectedDisplayCondition);
+ }
+
+ testReadSpn([0x01, 0x04, 0x06, 0x4e, 0x9e, 0x59, 0x2a, 0x96,
+ 0xfb, 0x4f, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff],
+ String.fromCharCode(0x4e9e) +
+ String.fromCharCode(0x592a) +
+ String.fromCharCode(0x96fb) +
+ String.fromCharCode(0x4fe1),
+ 0x1);
+
+ // Test when there's no tailing 0xff in spn string.
+ testReadSpn([0x01, 0x04, 0x06, 0x4e, 0x9e, 0x59, 0x2a, 0x96,
+ 0xfb, 0x4f, 0xe1],
+ String.fromCharCode(0x4e9e) +
+ String.fromCharCode(0x592a) +
+ String.fromCharCode(0x96fb) +
+ String.fromCharCode(0x4fe1),
+ 0x1);
+
+ run_next_test();
+});
+
+/**
+ * Verify display condition for CDMA.
+ */
+add_test(function test_cdma_spn_display_condition() {
+ let worker = newWorker({
+ postRILMessage: function(data) {
+ // Do nothing
+ },
+ postMessage: function(message) {
+ // Do nothing
+ }
+ });
+ let context = worker.ContextPool._contexts[0];
+ let RIL = context.RIL;
+ let ICCUtilsHelper = context.ICCUtilsHelper;
+
+ // Set cdma.
+ RIL._isCdma = true;
+
+ // Test updateDisplayCondition runs before any of SIM file is ready.
+ equal(ICCUtilsHelper.updateDisplayCondition(), true);
+ equal(RIL.iccInfo.isDisplayNetworkNameRequired, true);
+ equal(RIL.iccInfo.isDisplaySpnRequired, false);
+
+ // Test with value.
+ function testDisplayCondition(ruimDisplayCondition,
+ homeSystemIds, homeNetworkIds,
+ currentSystemId, currentNetworkId,
+ expectUpdateDisplayCondition,
+ expectIsDisplaySPNRequired) {
+ RIL.iccInfoPrivate.spnDisplayCondition = ruimDisplayCondition;
+ RIL.cdmaHome = {
+ systemId: homeSystemIds,
+ networkId: homeNetworkIds
+ };
+ RIL.voiceRegistrationState.cell = {
+ cdmaSystemId: currentSystemId,
+ cdmaNetworkId: currentNetworkId
+ };
+
+ equal(ICCUtilsHelper.updateDisplayCondition(), expectUpdateDisplayCondition);
+ equal(RIL.iccInfo.isDisplayNetworkNameRequired, false);
+ equal(RIL.iccInfo.isDisplaySpnRequired, expectIsDisplaySPNRequired);
+ };
+
+ // SPN is not required when ruimDisplayCondition is false.
+ testDisplayCondition(0x0, [123], [345], 123, 345, true, false);
+
+ // System id and network id are all match.
+ testDisplayCondition(0x1, [123], [345], 123, 345, true, true);
+
+ // Network is 65535, we should only need to match system id.
+ testDisplayCondition(0x1, [123], [65535], 123, 345, false, true);
+
+ // Not match.
+ testDisplayCondition(0x1, [123], [456], 123, 345, true, false);
+
+ run_next_test();
+});