|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 MARIONETTE_TIMEOUT = 60000; |
|
5 MARIONETTE_HEAD_JS = "head.js"; |
|
6 |
|
7 const SETTINGS_KEY_DATA_DEFAULT_ID = "ril.data.defaultServiceId"; |
|
8 |
|
9 let connections; |
|
10 let numOfRadioInterfaces; |
|
11 let currentDataDefaultId = 0; |
|
12 |
|
13 function muxModem(id) { |
|
14 return runEmulatorCmdSafe("mux modem " + id); |
|
15 } |
|
16 |
|
17 function switchDataDefaultId(defaultId) { |
|
18 return Promise.resolve() |
|
19 .then(() => setSettings1(SETTINGS_KEY_DATA_DEFAULT_ID, defaultId)) |
|
20 .then(() => { |
|
21 log("Data default id switched to: " + defaultId); |
|
22 currentDataDefaultId = defaultId; |
|
23 }); |
|
24 } |
|
25 |
|
26 function setDataRoamingSettings(enableDataRoammingIds) { |
|
27 let dataRoamingSettings = []; |
|
28 for (let i = 0; i < numOfRadioInterfaces; i++) { |
|
29 dataRoamingSettings.push(false); |
|
30 } |
|
31 |
|
32 for (let i = 0; i < enableDataRoammingIds.length; i++) { |
|
33 log("Enable data roaming for id: " + enableDataRoammingIds[i]); |
|
34 dataRoamingSettings[enableDataRoammingIds[i]] = true; |
|
35 } |
|
36 |
|
37 return setDataRoamingEnabled(dataRoamingSettings); |
|
38 } |
|
39 |
|
40 function setApnSettings() { |
|
41 let apn = [{ |
|
42 "carrier":"T-Mobile US", |
|
43 "apn":"epc.tmobile.com", |
|
44 "mmsc":"http://mms.msg.eng.t-mobile.com/mms/wapenc", |
|
45 "types":["default","supl","mms"] |
|
46 }]; |
|
47 |
|
48 // Use the same APN for all sims for now. |
|
49 let apns = []; |
|
50 for (let i = 0; i < numOfRadioInterfaces; i++) { |
|
51 apns.push(apn); |
|
52 } |
|
53 |
|
54 return setDataApnSettings(apns); |
|
55 |
|
56 } |
|
57 |
|
58 function waitForDataState(clientId, connected) { |
|
59 let deferred = Promise.defer(); |
|
60 |
|
61 let connection = connections[clientId]; |
|
62 if (connection.data.connected === connected) { |
|
63 log("data connection for client " + clientId + " is now " + |
|
64 connection.data.connected); |
|
65 deferred.resolve(); |
|
66 return; |
|
67 } |
|
68 |
|
69 return Promise.resolve() |
|
70 .then(() => waitForManagerEvent("datachange", clientId)) |
|
71 .then(() => waitForDataState(clientId, connected)); |
|
72 } |
|
73 |
|
74 function restoreTestEnvironment() { |
|
75 return Promise.resolve() |
|
76 .then(() => setEmulatorRoamingAndWait(false, currentDataDefaultId)) |
|
77 .then(() => setDataRoamingSettings([])) |
|
78 .then(() => switchDataDefaultId(0)) |
|
79 .then(() => muxModem(0)); |
|
80 } |
|
81 |
|
82 function testEnableData() { |
|
83 log("Turn data on."); |
|
84 |
|
85 let connection = connections[currentDataDefaultId]; |
|
86 is(connection.data.connected, false); |
|
87 |
|
88 return Promise.resolve() |
|
89 .then(() => setApnSettings()) |
|
90 .then(() => setDataEnabledAndWait(true, currentDataDefaultId)); |
|
91 } |
|
92 |
|
93 function testSwitchDefaultDataToSimTwo() { |
|
94 log("Switch data connection to sim 2."); |
|
95 |
|
96 is(currentDataDefaultId, 0); |
|
97 let connection = connections[currentDataDefaultId]; |
|
98 is(connection.data.connected, true); |
|
99 |
|
100 return Promise.resolve() |
|
101 .then(() => switchDataDefaultId(1)) |
|
102 .then(() => { |
|
103 is(currentDataDefaultId, 1); |
|
104 }) |
|
105 .then(() => waitForDataState(currentDataDefaultId, true)); |
|
106 } |
|
107 |
|
108 function testDisableDataRoamingWhileRoaming() { |
|
109 log("Disable data roaming setting while roaming."); |
|
110 |
|
111 let connection = connections[currentDataDefaultId]; |
|
112 is(connection.data.connected, true); |
|
113 is(connection.data.roaming, false); |
|
114 |
|
115 return Promise.resolve() |
|
116 .then(() => setDataRoamingSettings([])) |
|
117 .then(() => muxModem(currentDataDefaultId)) |
|
118 .then(() => setEmulatorRoamingAndWait(true, currentDataDefaultId)) |
|
119 .then(() => waitForDataState(currentDataDefaultId, false)); |
|
120 } |
|
121 |
|
122 function testEnableDataRoamingWhileRoaming() { |
|
123 log("Enable data roaming setting while roaming."); |
|
124 |
|
125 let connection = connections[currentDataDefaultId]; |
|
126 is(connection.data.connected, false); |
|
127 is(connection.data.roaming, true); |
|
128 |
|
129 return Promise.resolve() |
|
130 .then(() => setDataRoamingSettings([currentDataDefaultId])) |
|
131 .then(() => waitForDataState(currentDataDefaultId, true)); |
|
132 } |
|
133 |
|
134 function testDisableData() { |
|
135 log("Turn data off."); |
|
136 |
|
137 let connection = connections[currentDataDefaultId]; |
|
138 is(connection.data.connected, true); |
|
139 |
|
140 return Promise.resolve() |
|
141 .then(() => setDataEnabledAndWait(false, currentDataDefaultId)); |
|
142 } |
|
143 |
|
144 startDSDSTestCommon(function() { |
|
145 connections = workingFrame.contentWindow.navigator.mozMobileConnections; |
|
146 numOfRadioInterfaces = getNumOfRadioInterfaces(); |
|
147 |
|
148 return testEnableData() |
|
149 .then(testSwitchDefaultDataToSimTwo) |
|
150 .then(testDisableDataRoamingWhileRoaming) |
|
151 .then(testEnableDataRoamingWhileRoaming) |
|
152 .then(testDisableData) |
|
153 .then(restoreTestEnvironment); |
|
154 }, ["settings-read", "settings-write"]); |