Index: chrome/content/tests/synchronizer.js |
=================================================================== |
--- a/chrome/content/tests/synchronizer.js |
+++ b/chrome/content/tests/synchronizer.js |
@@ -54,33 +54,35 @@ |
subscription.expires = subscription.softExpiration = 0; |
subscription.title = ""; |
subscription.homepage = null; |
subscription.errors = 0; |
subscription.downloadStatus = null; |
subscription.requiredVersion = null; |
} |
+ let initialDelay = 1 / 60; |
+ |
test("Downloads of one subscription", function() |
{ |
let subscription = Subscription.fromURL("http://example.com/subscription"); |
FilterStorage.addSubscription(subscription); |
let requests = []; |
testRunner.registerHandler("/subscription", function(metadata) |
{ |
requests.push([testRunner.getTimeOffset(), metadata.method, metadata.path]); |
return [Cr.NS_OK, 200, "[Adblock]\n! ExPiREs: 1day\nfoo\nbar"]; |
}); |
testRunner.runScheduledTasks(50); |
deepEqual(requests, [ |
- [0.1, "GET", "/subscription"], |
- [24.1, "GET", "/subscription"], |
- [48.1, "GET", "/subscription"], |
+ [0 + initialDelay, "GET", "/subscription"], |
+ [24 + initialDelay, "GET", "/subscription"], |
+ [48 + initialDelay, "GET", "/subscription"], |
], "Requests after 50 hours"); |
}); |
test("Downloads of two subscriptions", function() |
{ |
let subscription1 = Subscription.fromURL("http://example.com/subscription1"); |
FilterStorage.addSubscription(subscription1); |
@@ -97,22 +99,22 @@ |
return [Cr.NS_OK, 200, "[Adblock]\n! ExPiREs: 1day\nfoo\nbar"]; |
} |
testRunner.registerHandler("/subscription1", handler); |
testRunner.registerHandler("/subscription2", handler); |
testRunner.runScheduledTasks(55); |
deepEqual(requests, [ |
- [0.1, "GET", "/subscription1"], |
- [2.1, "GET", "/subscription2"], |
- [24.1, "GET", "/subscription1"], |
- [26.1, "GET", "/subscription2"], |
- [48.1, "GET", "/subscription1"], |
- [50.1, "GET", "/subscription2"], |
+ [0 + initialDelay, "GET", "/subscription1"], |
+ [2 + initialDelay, "GET", "/subscription2"], |
+ [24 + initialDelay, "GET", "/subscription1"], |
+ [26 + initialDelay, "GET", "/subscription2"], |
+ [48 + initialDelay, "GET", "/subscription1"], |
+ [50 + initialDelay, "GET", "/subscription2"], |
], "Requests after 55 hours"); |
}); |
test("Download result, various subscription headers", function() |
{ |
let test; |
let subscription = Subscription.fromURL("http://example.com/subscription"); |
FilterStorage.addSubscription(subscription); |
@@ -185,73 +187,73 @@ |
requests.push(testRunner.getTimeOffset()); |
return [Cr.NS_OK, 200, "[Adblock]\nfoo\n!Expires: " + test.expiration + "\nbar"]; |
}); |
let tests = [ |
{ |
expiration: "default", |
randomResult: 0.5, |
- requests: [0.1, 5 * 24 + 0.1] |
+ requests: [0 + initialDelay, 5 * 24 + initialDelay] |
}, |
{ |
expiration: "1 hours", // Minimal expiration interval |
randomResult: 0.5, |
- requests: [0.1, 1.1, 2.1, 3.1] |
+ requests: [0 + initialDelay, 1 + initialDelay, 2 + initialDelay, 3 + initialDelay] |
}, |
{ |
expiration: "26 hours", |
randomResult: 0.5, |
- requests: [0.1, 26.1] |
+ requests: [0 + initialDelay, 26 + initialDelay] |
}, |
{ |
expiration: "2 days", |
randomResult: 0.5, |
- requests: [0.1, 48.1] |
+ requests: [0 + initialDelay, 48 + initialDelay] |
}, |
{ |
expiration: "20 days", // Too large, will be corrected |
randomResult: 0.5, |
- requests: [0.1, 14 * 24 + 0.1] |
+ requests: [0 + initialDelay, 14 * 24 + initialDelay] |
}, |
{ |
expiration: "35 hours", |
randomResult: 0, // Changes interval by factor 0.8 |
- requests: [0.1, 28.1] |
+ requests: [0 + initialDelay, 28 + initialDelay] |
}, |
{ |
expiration: "35 hours", |
randomResult: 1, // Changes interval by factor 1.2 |
- requests: [0.1, 42.1] |
+ requests: [0 + initialDelay, 42 + initialDelay] |
}, |
{ |
expiration: "35 hours", |
randomResult: 0.25, // Changes interval by factor 0.9 |
- requests: [0.1, 32.1] |
+ requests: [0 + initialDelay, 32 + initialDelay] |
}, |
{ |
expiration: "40 hours", |
randomResult: 0.5, |
- skipAfter: 5.1, |
+ skipAfter: 5 + initialDelay, |
skip: 10, // Short break should not increase soft expiration |
- requests: [0.1, 40.1] |
+ requests: [0 + initialDelay, 40 + initialDelay] |
}, |
{ |
expiration: "40 hours", |
randomResult: 0.5, |
- skipAfter: 5.1, |
+ skipAfter: 5 + initialDelay, |
skip: 30, // Long break should increase soft expiration |
- requests: [0.1, 70.1] |
+ requests: [0 + initialDelay, 70 + initialDelay] |
}, |
{ |
expiration: "40 hours", |
randomResult: 0.5, |
- skipAfter: 5.1, |
+ skipAfter: 5 + initialDelay, |
skip: 80, // Hitting hard expiration, immediate download |
- requests: [0.1, 85.1] |
+ requests: [0 + initialDelay, 85 + initialDelay] |
} |
] |
for (test of tests) |
{ |
requests = []; |
randomResult = test.randomResult; |
resetSubscription(subscription); |
@@ -350,17 +352,17 @@ |
{ |
requests.push(testRunner.getTimeOffset()); |
return [Cr.NS_OK, 200, "[Adblock]\nfoo\n! Expires: 8 hours\nbar"]; |
}); |
resetSubscription(subscription); |
testRunner.runScheduledTasks(15); |
equal(FilterStorage.subscriptions[0].url, "http://example.com/redirected", "Redirect followed"); |
- deepEqual(requests, [0.1, 8.1], "Resulting requests"); |
+ deepEqual(requests, [0 + initialDelay, 8 + initialDelay], "Resulting requests"); |
testRunner.registerHandler("/redirected", function(metadata) |
{ |
return [Cr.NS_OK, 200, "[Adblock]\nfoo\n!Redirect: http://example.com/subscription\nbar"]; |
}) |
subscription = Subscription.fromURL("http://example.com/subscription"); |
resetSubscription(subscription); |
@@ -385,64 +387,64 @@ |
let requests = []; |
testRunner.registerHandler("/subscription", function(metadata) |
{ |
requests.push(testRunner.getTimeOffset()); |
return [Cr.NS_OK, 404, ""]; |
}); |
testRunner.runScheduledTasks(100); |
- deepEqual(requests, [0.1, 24.1, 48.1, 72.1, 96.1], "Continue trying if the fallback doesn't respond"); |
+ deepEqual(requests, [0 + initialDelay, 24 + initialDelay, 48 + initialDelay, 72 + initialDelay, 96 + initialDelay], "Continue trying if the fallback doesn't respond"); |
// Fallback giving "Gone" response |
resetSubscription(subscription); |
requests = []; |
fallbackParams = null; |
testRunner.registerHandler("/fallback", function(metadata) |
{ |
fallbackParams = decodeURIComponent(metadata.queryString); |
return [Cr.NS_OK, 200, "410 Gone"]; |
}); |
testRunner.runScheduledTasks(100); |
- deepEqual(requests, [0.1, 24.1, 48.1], "Stop trying if the fallback responds with Gone"); |
+ deepEqual(requests, [0 + initialDelay, 24 + initialDelay, 48 + initialDelay], "Stop trying if the fallback responds with Gone"); |
equal(fallbackParams, "http://example.com/subscription&0&404", "Fallback arguments"); |
// Fallback redirecting to a missing file |
subscription = Subscription.fromURL("http://example.com/subscription"); |
resetSubscription(subscription); |
FilterStorage.removeSubscription(FilterStorage.subscriptions[0]); |
FilterStorage.addSubscription(subscription); |
requests = []; |
testRunner.registerHandler("/fallback", function(metadata) |
{ |
return [Cr.NS_OK, 200, "301 http://example.com/redirected"]; |
}); |
testRunner.runScheduledTasks(100); |
equal(FilterStorage.subscriptions[0].url, "http://example.com/subscription", "Ignore invalid redirect from fallback"); |
- deepEqual(requests, [0.1, 24.1, 48.1, 72.1, 96.1], "Requests not affected by invalid redirect"); |
+ deepEqual(requests, [0 + initialDelay, 24 + initialDelay, 48 + initialDelay, 72 + initialDelay, 96 + initialDelay], "Requests not affected by invalid redirect"); |
// Fallback redirecting to an existing file |
resetSubscription(subscription); |
requests = []; |
let redirectedRequests = []; |
testRunner.registerHandler("/redirected", function(metadata) |
{ |
redirectedRequests.push(testRunner.getTimeOffset()); |
return [Cr.NS_OK, 200, "[Adblock]\n!Expires: 1day\nfoo\nbar"]; |
}); |
testRunner.runScheduledTasks(100); |
equal(FilterStorage.subscriptions[0].url, "http://example.com/redirected", "Valid redirect from fallback is followed"); |
- deepEqual(requests, [0.1, 24.1, 48.1], "Stop polling original URL after a valid redirect from fallback"); |
- deepEqual(redirectedRequests, [48.1, 72.1, 96.1], "Request new URL after a valid redirect from fallback"); |
+ deepEqual(requests, [0 + initialDelay, 24 + initialDelay, 48 + initialDelay], "Stop polling original URL after a valid redirect from fallback"); |
+ deepEqual(redirectedRequests, [48 + initialDelay, 72 + initialDelay, 96 + initialDelay], "Request new URL after a valid redirect from fallback"); |
// Checksum mismatch |
testRunner.registerHandler("/subscription", function(metadata) |
{ |
return [Cr.NS_OK, 200, "[Adblock]\n! Checksum: wrong\nfoo\nbar"]; |
}); |
@@ -483,40 +485,40 @@ |
{ |
return [Cr.NS_OK, 200, "[Adblock]\n! Expires: 2 hours\nfoo\nbar"]; |
}); |
let startTime = testRunner.currentTime; |
testRunner.runScheduledTasks(2); |
equal(subscription.downloadStatus, "synchronize_ok", "downloadStatus after successful download"); |
- equal(subscription.lastDownload * MILLIS_IN_SECOND, startTime + 0.1 * MILLIS_IN_HOUR, "lastDownload after successful download"); |
- equal(subscription.lastSuccess * MILLIS_IN_SECOND, startTime + 0.1 * MILLIS_IN_HOUR, "lastSuccess after successful download"); |
- equal(subscription.lastCheck * MILLIS_IN_SECOND, startTime + 1.1 * MILLIS_IN_HOUR, "lastCheck after successful download"); |
+ equal(subscription.lastDownload * MILLIS_IN_SECOND, startTime + initialDelay * MILLIS_IN_HOUR, "lastDownload after successful download"); |
+ equal(subscription.lastSuccess * MILLIS_IN_SECOND, startTime + initialDelay * MILLIS_IN_HOUR, "lastSuccess after successful download"); |
+ equal(subscription.lastCheck * MILLIS_IN_SECOND, startTime + (1 + initialDelay) * MILLIS_IN_HOUR, "lastCheck after successful download"); |
equal(subscription.errors, 0, "errors after successful download"); |
testRunner.registerHandler("/subscription", function(metadata) |
{ |
return [Cr.NS_ERROR_FAILURE, 0, ""]; |
}); |
testRunner.runScheduledTasks(2); |
equal(subscription.downloadStatus, "synchronize_connection_error", "downloadStatus after connection error"); |
- equal(subscription.lastDownload * MILLIS_IN_SECOND, startTime + 2.1 * MILLIS_IN_HOUR, "lastDownload after connection error"); |
- equal(subscription.lastSuccess * MILLIS_IN_SECOND, startTime + 0.1 * MILLIS_IN_HOUR, "lastSuccess after connection error"); |
- equal(subscription.lastCheck * MILLIS_IN_SECOND, startTime + 3.1 * MILLIS_IN_HOUR, "lastCheck after connection error"); |
+ equal(subscription.lastDownload * MILLIS_IN_SECOND, startTime + (2 + initialDelay) * MILLIS_IN_HOUR, "lastDownload after connection error"); |
+ equal(subscription.lastSuccess * MILLIS_IN_SECOND, startTime + initialDelay * MILLIS_IN_HOUR, "lastSuccess after connection error"); |
+ equal(subscription.lastCheck * MILLIS_IN_SECOND, startTime + (3 + initialDelay) * MILLIS_IN_HOUR, "lastCheck after connection error"); |
equal(subscription.errors, 1, "errors after connection error"); |
testRunner.registerHandler("/subscription", function(metadata) |
{ |
return [Cr.NS_OK, 404, ""]; |
}); |
testRunner.runScheduledTasks(24); |
equal(subscription.downloadStatus, "synchronize_connection_error", "downloadStatus after download error"); |
- equal(subscription.lastDownload * MILLIS_IN_SECOND, startTime + 26.1 * MILLIS_IN_HOUR, "lastDownload after download error"); |
- equal(subscription.lastSuccess * MILLIS_IN_SECOND, startTime + 0.1 * MILLIS_IN_HOUR, "lastSuccess after download error"); |
- equal(subscription.lastCheck * MILLIS_IN_SECOND, startTime + 27.1 * MILLIS_IN_HOUR, "lastCheck after download error"); |
+ equal(subscription.lastDownload * MILLIS_IN_SECOND, startTime + (26 + initialDelay) * MILLIS_IN_HOUR, "lastDownload after download error"); |
+ equal(subscription.lastSuccess * MILLIS_IN_SECOND, startTime + initialDelay * MILLIS_IN_HOUR, "lastSuccess after download error"); |
+ equal(subscription.lastCheck * MILLIS_IN_SECOND, startTime + (27 + initialDelay) * MILLIS_IN_HOUR, "lastCheck after download error"); |
equal(subscription.errors, 2, "errors after download error"); |
}); |
})(); |