michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: MARIONETTE_TIMEOUT = 60000; michael@0: MARIONETTE_HEAD_JS = "head.js"; michael@0: michael@0: const SETTINGS_KEY_DATA_DEFAULT_ID = "ril.data.defaultServiceId"; michael@0: michael@0: let connections; michael@0: let numOfRadioInterfaces; michael@0: let currentDataDefaultId = 0; michael@0: michael@0: function muxModem(id) { michael@0: return runEmulatorCmdSafe("mux modem " + id); michael@0: } michael@0: michael@0: function switchDataDefaultId(defaultId) { michael@0: return Promise.resolve() michael@0: .then(() => setSettings1(SETTINGS_KEY_DATA_DEFAULT_ID, defaultId)) michael@0: .then(() => { michael@0: log("Data default id switched to: " + defaultId); michael@0: currentDataDefaultId = defaultId; michael@0: }); michael@0: } michael@0: michael@0: function setDataRoamingSettings(enableDataRoammingIds) { michael@0: let dataRoamingSettings = []; michael@0: for (let i = 0; i < numOfRadioInterfaces; i++) { michael@0: dataRoamingSettings.push(false); michael@0: } michael@0: michael@0: for (let i = 0; i < enableDataRoammingIds.length; i++) { michael@0: log("Enable data roaming for id: " + enableDataRoammingIds[i]); michael@0: dataRoamingSettings[enableDataRoammingIds[i]] = true; michael@0: } michael@0: michael@0: return setDataRoamingEnabled(dataRoamingSettings); michael@0: } michael@0: michael@0: function setApnSettings() { michael@0: let apn = [{ michael@0: "carrier":"T-Mobile US", michael@0: "apn":"epc.tmobile.com", michael@0: "mmsc":"http://mms.msg.eng.t-mobile.com/mms/wapenc", michael@0: "types":["default","supl","mms"] michael@0: }]; michael@0: michael@0: // Use the same APN for all sims for now. michael@0: let apns = []; michael@0: for (let i = 0; i < numOfRadioInterfaces; i++) { michael@0: apns.push(apn); michael@0: } michael@0: michael@0: return setDataApnSettings(apns); michael@0: michael@0: } michael@0: michael@0: function waitForDataState(clientId, connected) { michael@0: let deferred = Promise.defer(); michael@0: michael@0: let connection = connections[clientId]; michael@0: if (connection.data.connected === connected) { michael@0: log("data connection for client " + clientId + " is now " + michael@0: connection.data.connected); michael@0: deferred.resolve(); michael@0: return; michael@0: } michael@0: michael@0: return Promise.resolve() michael@0: .then(() => waitForManagerEvent("datachange", clientId)) michael@0: .then(() => waitForDataState(clientId, connected)); michael@0: } michael@0: michael@0: function restoreTestEnvironment() { michael@0: return Promise.resolve() michael@0: .then(() => setEmulatorRoamingAndWait(false, currentDataDefaultId)) michael@0: .then(() => setDataRoamingSettings([])) michael@0: .then(() => switchDataDefaultId(0)) michael@0: .then(() => muxModem(0)); michael@0: } michael@0: michael@0: function testEnableData() { michael@0: log("Turn data on."); michael@0: michael@0: let connection = connections[currentDataDefaultId]; michael@0: is(connection.data.connected, false); michael@0: michael@0: return Promise.resolve() michael@0: .then(() => setApnSettings()) michael@0: .then(() => setDataEnabledAndWait(true, currentDataDefaultId)); michael@0: } michael@0: michael@0: function testSwitchDefaultDataToSimTwo() { michael@0: log("Switch data connection to sim 2."); michael@0: michael@0: is(currentDataDefaultId, 0); michael@0: let connection = connections[currentDataDefaultId]; michael@0: is(connection.data.connected, true); michael@0: michael@0: return Promise.resolve() michael@0: .then(() => switchDataDefaultId(1)) michael@0: .then(() => { michael@0: is(currentDataDefaultId, 1); michael@0: }) michael@0: .then(() => waitForDataState(currentDataDefaultId, true)); michael@0: } michael@0: michael@0: function testDisableDataRoamingWhileRoaming() { michael@0: log("Disable data roaming setting while roaming."); michael@0: michael@0: let connection = connections[currentDataDefaultId]; michael@0: is(connection.data.connected, true); michael@0: is(connection.data.roaming, false); michael@0: michael@0: return Promise.resolve() michael@0: .then(() => setDataRoamingSettings([])) michael@0: .then(() => muxModem(currentDataDefaultId)) michael@0: .then(() => setEmulatorRoamingAndWait(true, currentDataDefaultId)) michael@0: .then(() => waitForDataState(currentDataDefaultId, false)); michael@0: } michael@0: michael@0: function testEnableDataRoamingWhileRoaming() { michael@0: log("Enable data roaming setting while roaming."); michael@0: michael@0: let connection = connections[currentDataDefaultId]; michael@0: is(connection.data.connected, false); michael@0: is(connection.data.roaming, true); michael@0: michael@0: return Promise.resolve() michael@0: .then(() => setDataRoamingSettings([currentDataDefaultId])) michael@0: .then(() => waitForDataState(currentDataDefaultId, true)); michael@0: } michael@0: michael@0: function testDisableData() { michael@0: log("Turn data off."); michael@0: michael@0: let connection = connections[currentDataDefaultId]; michael@0: is(connection.data.connected, true); michael@0: michael@0: return Promise.resolve() michael@0: .then(() => setDataEnabledAndWait(false, currentDataDefaultId)); michael@0: } michael@0: michael@0: startDSDSTestCommon(function() { michael@0: connections = workingFrame.contentWindow.navigator.mozMobileConnections; michael@0: numOfRadioInterfaces = getNumOfRadioInterfaces(); michael@0: michael@0: return testEnableData() michael@0: .then(testSwitchDefaultDataToSimTwo) michael@0: .then(testDisableDataRoamingWhileRoaming) michael@0: .then(testEnableDataRoamingWhileRoaming) michael@0: .then(testDisableData) michael@0: .then(restoreTestEnvironment); michael@0: }, ["settings-read", "settings-write"]);