diff options
Diffstat (limited to 'dom/system/gonk/tests/test_ril_worker_ruim.js')
-rw-r--r-- | dom/system/gonk/tests/test_ril_worker_ruim.js | 328 |
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(); +}); |