1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/network/tests/test_networkstats_basics.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,331 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html> 1.6 +<head> 1.7 + <title>Test for NetworkStats</title> 1.8 + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 1.9 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 1.10 +</head> 1.11 +<body> 1.12 +<p id="display"></p> 1.13 +<div id="content" style="display: none"> 1.14 +</div> 1.15 +<pre id="test"> 1.16 +<script type="application/javascript"> 1.17 + 1.18 +function test() { 1.19 + netStats = window.navigator.mozNetworkStats; 1.20 + ok(netStats, "mozNetworkStats exists"); 1.21 + 1.22 + // Test IDL attributes 1.23 + ok('sampleRate' in netStats, 1.24 + "sampleRate should be a NetworkStats attribute"); 1.25 + ok(netStats.sampleRate > 0, 1.26 + "sampleRate is greater than 0."); 1.27 + 1.28 + ok('maxStorageAge' in netStats, 1.29 + "maxStorageAge should be a NetworkStats attribute"); 1.30 + ok(netStats.maxStorageAge > 0, 1.31 + "maxStorageAge is greater than 0."); 1.32 + 1.33 + // Test IDL methods 1.34 + next(); 1.35 + return; 1.36 +} 1.37 + 1.38 +function checkDataDates(data, start, end, sampleRate) { 1.39 + var offset = (new Date()).getTimezoneOffset() * 60 * 1000; 1.40 + start = Math.floor((start.getTime() - offset) / sampleRate) * sampleRate + offset; 1.41 + end = Math.floor((end.getTime() - offset) / sampleRate) * sampleRate + offset; 1.42 + 1.43 + var counter = 0; 1.44 + var date = start; 1.45 + var success = true; 1.46 + 1.47 + do { 1.48 + if(data[counter].date.getTime() != date) { 1.49 + success = false; 1.50 + break; 1.51 + } 1.52 + date += sampleRate; 1.53 + counter++; 1.54 + } while (date <= end); 1.55 + 1.56 + ok(success, "data result has correct dates"); 1.57 +} 1.58 + 1.59 +function compareNetworks(networkA, networkB) { 1.60 + return (networkA.id == networkB.id && 1.61 + networkA.type == networkB.type); 1.62 +} 1.63 + 1.64 +var req; 1.65 +var index = -1; 1.66 +var netStats = null; 1.67 + 1.68 +var steps = [ 1.69 + function () { 1.70 + // Test getAvailableNetworks 1.71 + req = netStats.getAvailableNetworks(); 1.72 + req.onsuccess = function () { 1.73 + ok(true, "getAvailableNetworks request ok"); 1.74 + ok(Array.isArray(req.result) && req.result.length > 0, 1.75 + "getAvailableNetworks returns an array not empty"); 1.76 + next(); 1.77 + }; 1.78 + req.onerror = function () { 1.79 + ok(false, "getAvailableNetworks failure!"); 1.80 + } 1.81 + }, 1.82 + function () { 1.83 + // Test clearAllStats 1.84 + req = netStats.clearAllStats(); 1.85 + req.onsuccess = function () { 1.86 + ok(true, "clearAllStats deleted the database"); 1.87 + next(); 1.88 + }; 1.89 + req.onerror = function () { 1.90 + ok(false, "clearAllStats deleted the database"); 1.91 + } 1.92 + }, 1.93 + function () { 1.94 + // Check if getSamples launch exception when start is greather than end 1.95 + 1.96 + // Prepare get params 1.97 + req = netStats.getAvailableNetworks(); 1.98 + req.onsuccess = function () { 1.99 + var network = req.result[0]; 1.100 + 1.101 + // Get dates 1.102 + var endDate = new Date(); 1.103 + var startDate = new Date(endDate.getTime() + 1000); 1.104 + 1.105 + try { 1.106 + netStats.getSamples(network, startDate, endDate); 1.107 + } catch(ex) { 1.108 + ok(true, "getSamples launch exception when start is greater than end"); 1.109 + next(); 1.110 + return; 1.111 + } 1.112 + 1.113 + ok(false, "getSamples launch exception when start is greater than end"); 1.114 + next(); 1.115 + return; 1.116 + }; 1.117 + req.onerror = function () { 1.118 + ok(false, "Error getting networks!"); 1.119 + } 1.120 + }, 1.121 + function () { 1.122 + // Test if call getSamples with network of type different than 1.123 + // nsIDOMMozNetworkStatsInterface launch an exception 1.124 + 1.125 + // Prepare get params 1.126 + var network = "wifi"; 1.127 + var endDate = new Date(); 1.128 + var startDate = new Date(endDate.getTime() - 1000); 1.129 + 1.130 + try { 1.131 + netStats.getSamples(network, new Date(), new Date()); 1.132 + } catch(ex) { 1.133 + ok(true, "getSamples launch exception if network is not " + 1.134 + "a nsIDOMMozNetworkStatsInterface"); 1.135 + next(); 1.136 + return; 1.137 + } 1.138 + 1.139 + ok(false, "getSamples launch exception if network is not " + 1.140 + "a nsIDOMMozNetworkStatsInterface"); 1.141 + }, 1.142 + function () { 1.143 + // Test if call getSamples with start parameter type different than Date launch an exception 1.144 + 1.145 + // Prepare get params 1.146 + req = netStats.getAvailableNetworks(); 1.147 + req.onsuccess = function () { 1.148 + var network = req.result[0]; 1.149 + 1.150 + var endDate = new Date(); 1.151 + var startDate = new Date(endDate.getTime() - 1000); 1.152 + startDate = startDate.toString(); 1.153 + 1.154 + try { 1.155 + netStats.getSamples(network, startDate, endDate); 1.156 + } catch(ex) { 1.157 + ok(true, "getSamples launch exception when start param is not a Date"); 1.158 + next(); 1.159 + return; 1.160 + } 1.161 + 1.162 + ok(false, "getSamples launch exception when start param is not a Date"); 1.163 + }; 1.164 + req.onerror = function () { 1.165 + ok(false, "Error getting networks!"); 1.166 + }; 1.167 + }, 1.168 + function () { 1.169 + // Test if call getSamples with end parameter type different than Date launch an exception 1.170 + 1.171 + // Prepare get params 1.172 + req = netStats.getAvailableNetworks(); 1.173 + req.onsuccess = function () { 1.174 + var network = req.result[0]; 1.175 + 1.176 + var endDate = new Date(); 1.177 + var startDate = new Date(endDate.getTime() - 1000); 1.178 + endDate = startDate.toString(); 1.179 + 1.180 + try { 1.181 + netStats.getSamples(network, startDate, endDate); 1.182 + } catch(ex) { 1.183 + ok(true, "getSamples launch exception when end param is not a Date"); 1.184 + next(); 1.185 + return; 1.186 + } 1.187 + 1.188 + ok(false, "getSamples launch exception when end param is not a Date"); 1.189 + }; 1.190 + req.onerror = function () { 1.191 + ok(false, "Error getting networks!"); 1.192 + }; 1.193 + }, 1.194 + function () { 1.195 + ok(true, "Get stats for a network and dates adapted to samplerate"); 1.196 + // Prepare get params 1.197 + req = netStats.getAvailableNetworks(); 1.198 + req.onsuccess = function () { 1.199 + var network = req.result[0]; 1.200 + var diff = 2; 1.201 + // Get samplerate in millis 1.202 + var sampleRate = netStats.sampleRate; 1.203 + // Get date with samplerate's precision 1.204 + var offset = new Date().getTimezoneOffset() * 60 * 1000; 1.205 + var endDate = new Date(Math.floor((new Date().getTime() - offset) / sampleRate) 1.206 + * sampleRate + offset); 1.207 + var startDate = new Date(endDate.getTime() - (sampleRate * diff)); 1.208 + // Calculate the number of samples that should be returned based on the 1.209 + // the samplerate and including final and initial samples. 1.210 + var samples = (endDate.getTime() - startDate.getTime()) / sampleRate + 1; 1.211 + 1.212 + // Launch request 1.213 + req = netStats.getSamples(network, startDate, endDate); 1.214 + req.onsuccess = function () { 1.215 + ok(true, "Get system stats request ok"); 1.216 + ok(req.result.manifestURL == null, "manifestURL should be null"); 1.217 + ok(compareNetworks(req.result.network, network), "networks should be equals"); 1.218 + ok(req.result.start.getTime() == startDate.getTime(), "starts should be equals"); 1.219 + ok(req.result.end.getTime() == endDate.getTime(), "ends should be equals"); 1.220 + var data = req.result.data; 1.221 + ok(Array.isArray(data) && data.length == samples, 1.222 + "data is an array of length " + samples); 1.223 + checkDataDates(data, startDate, endDate, sampleRate); 1.224 + next(); 1.225 + }; 1.226 + req.onerror = function () { 1.227 + ok(false, "Get stats failure!"); 1.228 + } 1.229 + }; 1.230 + req.onerror = function () { 1.231 + ok(false, "Error getting networks!"); 1.232 + }; 1.233 + }, 1.234 + function () { 1.235 + ok(true, "Get system stats for a network and dates not adapted to samplerate"); 1.236 + // Prepare get params 1.237 + req = netStats.getAvailableNetworks(); 1.238 + req.onsuccess = function () { 1.239 + var network = req.result[0]; 1.240 + var diff = 2; 1.241 + // Get samplerate in millis 1.242 + var sampleRate = netStats.sampleRate; 1.243 + var endDate = new Date(); 1.244 + var startDate = new Date(endDate.getTime() - (sampleRate * diff)); 1.245 + // Calculate the number of samples that should be returned based on the 1.246 + // the samplerate, including final and initial samples and taking into 1.247 + // account that these will be filtered according to precision. 1.248 + var samples = (Math.floor(endDate.getTime() / (sampleRate)) * sampleRate - 1.249 + Math.floor(startDate.getTime() / (sampleRate)) * sampleRate) / sampleRate + 1; 1.250 + 1.251 + // Launch request 1.252 + req = netStats.getSamples(network, startDate, endDate); 1.253 + req.onsuccess = function () { 1.254 + ok(true, "Get stats request ok"); 1.255 + ok(req.result.manifestURL == null, "manifestURL should be null"); 1.256 + ok(compareNetworks(req.result.network, network), "networks should be equals"); 1.257 + ok(req.result.start.getTime() == startDate.getTime(), "starts should be equals"); 1.258 + ok(req.result.end.getTime() == endDate.getTime(), "ends should be equals"); 1.259 + var data = req.result.data; 1.260 + ok(Array.isArray(data) && data.length == samples, 1.261 + "data is an array of length " + samples); 1.262 + checkDataDates(data, startDate, endDate, sampleRate); 1.263 + next(); 1.264 + }; 1.265 + req.onerror = function () { 1.266 + ok(false, "Get stats failure!"); 1.267 + } 1.268 + }; 1.269 + req.onerror = function () { 1.270 + ok(false, "Error getting networks!"); 1.271 + }; 1.272 + }, 1.273 + function () { 1.274 + // Test clearStats 1.275 + req = netStats.getAvailableNetworks(); 1.276 + req.onsuccess = function () { 1.277 + var network = req.result[0]; 1.278 + 1.279 + req = netStats.clearStats(network); 1.280 + req.onsuccess = function () { 1.281 + ok(true, "clearStats deleted the database"); 1.282 + next(); 1.283 + }; 1.284 + req.onerror = function () { 1.285 + ok(false, "clearStats deleted the database"); 1.286 + } 1.287 + }; 1.288 + req.onerror = function () { 1.289 + ok(false, "Error getting networks!"); 1.290 + }; 1.291 + }, 1.292 + function () { 1.293 + // Test getAvailableServiceTypes 1.294 + req = netStats.getAvailableServiceTypes(); 1.295 + req.onsuccess = function () { 1.296 + ok(true, "getAvailableServiceTypes request ok"); 1.297 + ok(Array.isArray(req.result) && req.result.length == 0, 1.298 + "getAvailableServiceTypes returns an empty array"); 1.299 + next(); 1.300 + }; 1.301 + req.onerror = function () { 1.302 + ok(false, "getAvailableServiceTypes failure!"); 1.303 + } 1.304 + }, 1.305 + function () { 1.306 + ok(true, "all done!\n"); 1.307 + SpecialPowers.removePermission("networkstats-manage", document); 1.308 + SimpleTest.finish(); 1.309 + return; 1.310 + } 1.311 +]; 1.312 + 1.313 +function next() { 1.314 + index += 1; 1.315 + if (index >= steps.length) { 1.316 + ok(false, "Shouldn't get here!"); 1.317 + return; 1.318 + } 1.319 + try { 1.320 + steps[index](); 1.321 + } catch(ex) { 1.322 + ok(false, "Caught exception", ex); 1.323 + } 1.324 +} 1.325 + 1.326 +SimpleTest.waitForExplicitFinish(); 1.327 + 1.328 +SpecialPowers.addPermission("networkstats-manage", true, document); 1.329 +SpecialPowers.pushPrefEnv({'set': [["dom.mozNetworkStats.enabled", true]]}, test); 1.330 + 1.331 +</script> 1.332 +</pre> 1.333 +</body> 1.334 +</html>