michael@0: function doTest(updates, assertions, expectError) michael@0: { michael@0: if (expectError) { michael@0: doUpdateTest(updates, assertions, updateError, runNextTest); michael@0: } else { michael@0: doUpdateTest(updates, assertions, runNextTest, updateError); michael@0: } michael@0: } michael@0: michael@0: function testFillDb() { michael@0: var add1Urls = [ "zaz.com/a", "yxz.com/c" ]; michael@0: michael@0: var update = "n:1000\n"; michael@0: update += "i:test-phish-simple\n"; michael@0: michael@0: var update1 = buildBareUpdate( michael@0: [{ "chunkNum" : 1, michael@0: "urls" : add1Urls }]); michael@0: update += "u:data:," + encodeURIComponent(update1) + "\n"; michael@0: michael@0: var assertions = { michael@0: "tableData" : "test-phish-simple;a:1", michael@0: "urlsExist" : add1Urls michael@0: }; michael@0: michael@0: doTest([update], assertions, false); michael@0: } michael@0: michael@0: function testSimpleForward() { michael@0: var add1Urls = [ "foo.com/a", "bar.com/c" ]; michael@0: var add2Urls = [ "foo.com/b" ]; michael@0: var add3Urls = [ "bar.com/d" ]; michael@0: michael@0: var update = "n:1000\n"; michael@0: update += "i:test-phish-simple\n"; michael@0: michael@0: var update1 = buildBareUpdate( michael@0: [{ "chunkNum" : 1, michael@0: "urls" : add1Urls }]); michael@0: update += "u:data:," + encodeURIComponent(update1) + "\n"; michael@0: michael@0: var update2 = buildBareUpdate( michael@0: [{ "chunkNum" : 2, michael@0: "urls" : add2Urls }]); michael@0: update += "u:data:," + encodeURIComponent(update2) + "\n"; michael@0: michael@0: var update3 = buildBareUpdate( michael@0: [{ "chunkNum" : 3, michael@0: "urls" : add3Urls }]); michael@0: update += "u:data:," + encodeURIComponent(update3) + "\n"; michael@0: michael@0: var assertions = { michael@0: "tableData" : "test-phish-simple;a:1-3", michael@0: "urlsExist" : add1Urls.concat(add2Urls).concat(add3Urls) michael@0: }; michael@0: michael@0: doTest([update], assertions, false); michael@0: } michael@0: michael@0: // Make sure that a nested forward (a forward within a forward) causes michael@0: // the update to fail. michael@0: function testNestedForward() { michael@0: var add1Urls = [ "foo.com/a", "bar.com/c" ]; michael@0: var add2Urls = [ "foo.com/b" ]; michael@0: michael@0: var update = "n:1000\n"; michael@0: update += "i:test-phish-simple\n"; michael@0: michael@0: var update1 = buildBareUpdate( michael@0: [{ "chunkNum" : 1, michael@0: "urls" : add1Urls }]); michael@0: update += "u:data:," + encodeURIComponent(update1) + "\n"; michael@0: michael@0: var update2 = buildBareUpdate( michael@0: [{ "chunkNum" : 2 }]); michael@0: var update3 = buildBareUpdate( michael@0: [{ "chunkNum" : 3, michael@0: "urls" : add1Urls }]); michael@0: michael@0: update2 += "u:data:," + encodeURIComponent(update3) + "\n"; michael@0: michael@0: update += "u:data:," + encodeURIComponent(update2) + "\n"; michael@0: michael@0: var assertions = { michael@0: "tableData" : "", michael@0: "urlsDontExist" : add1Urls.concat(add2Urls) michael@0: }; michael@0: michael@0: doTest([update], assertions, true); michael@0: } michael@0: michael@0: // An invalid URL forward causes the update to fail. michael@0: function testInvalidUrlForward() { michael@0: var add1Urls = [ "foo.com/a", "bar.com/c" ]; michael@0: michael@0: var update = buildPhishingUpdate( michael@0: [{ "chunkNum" : 1, michael@0: "urls" : add1Urls }]); michael@0: update += "u:asdf://blah/blah\n"; // invalid URL scheme michael@0: michael@0: // The first part of the update should have succeeded. michael@0: michael@0: var assertions = { michael@0: "tableData" : "test-phish-simple;a:1", michael@0: "urlsExist" : add1Urls michael@0: }; michael@0: michael@0: doTest([update], assertions, false); michael@0: } michael@0: michael@0: // A failed network request causes the update to fail. michael@0: function testErrorUrlForward() { michael@0: var add1Urls = [ "foo.com/a", "bar.com/c" ]; michael@0: michael@0: var update = buildPhishingUpdate( michael@0: [{ "chunkNum" : 1, michael@0: "urls" : add1Urls }]); michael@0: update += "u:http://test.invalid/asdf/asdf\n"; // invalid URL scheme michael@0: michael@0: // The first part of the update should have succeeded michael@0: michael@0: var assertions = { michael@0: "tableData" : "test-phish-simple;a:1", michael@0: "urlsExist" : add1Urls michael@0: }; michael@0: michael@0: doTest([update], assertions, false); michael@0: } michael@0: michael@0: function testMultipleTables() { michael@0: var add1Urls = [ "foo.com/a", "bar.com/c" ]; michael@0: var add2Urls = [ "foo.com/b" ]; michael@0: var add3Urls = [ "bar.com/d" ]; michael@0: michael@0: var update = "n:1000\n"; michael@0: update += "i:test-phish-simple\n"; michael@0: michael@0: var update1 = buildBareUpdate( michael@0: [{ "chunkNum" : 1, michael@0: "urls" : add1Urls }]); michael@0: update += "u:data:," + encodeURIComponent(update1) + "\n"; michael@0: michael@0: var update2 = buildBareUpdate( michael@0: [{ "chunkNum" : 2, michael@0: "urls" : add2Urls }]); michael@0: update += "u:data:," + encodeURIComponent(update2) + "\n"; michael@0: michael@0: update += "i:test-malware-simple\n"; michael@0: michael@0: var update3 = buildBareUpdate( michael@0: [{ "chunkNum" : 3, michael@0: "urls" : add3Urls }]); michael@0: update += "u:data:," + encodeURIComponent(update3) + "\n"; michael@0: michael@0: var assertions = { michael@0: "tableData" : "test-malware-simple;a:3\ntest-phish-simple;a:1-2", michael@0: "urlsExist" : add1Urls.concat(add2Urls), michael@0: "malwareUrlsExist" : add3Urls michael@0: }; michael@0: michael@0: doTest([update], assertions, false); michael@0: } michael@0: michael@0: function Observer(callback) { michael@0: this.observe = callback; michael@0: } michael@0: michael@0: Observer.prototype = michael@0: { michael@0: QueryInterface: function(iid) michael@0: { michael@0: if (!iid.equals(Ci.nsISupports) && michael@0: !iid.equals(Ci.nsIObserver)) { michael@0: throw Cr.NS_ERROR_NO_INTERFACE; michael@0: } michael@0: return this; michael@0: } michael@0: }; michael@0: michael@0: // Tests a database reset request. michael@0: function testReset() { michael@0: var addUrls1 = [ "foo.com/a", "foo.com/b" ]; michael@0: var update1 = buildPhishingUpdate( michael@0: [ michael@0: { "chunkNum" : 1, michael@0: "urls" : addUrls1 michael@0: }]); michael@0: michael@0: var update2 = "n:1000\nr:pleasereset\n"; michael@0: michael@0: var addUrls3 = [ "bar.com/a", "bar.com/b" ]; michael@0: var update3 = buildPhishingUpdate( michael@0: [ michael@0: { "chunkNum" : 3, michael@0: "urls" : addUrls3 michael@0: }]); michael@0: michael@0: var assertions = { michael@0: "tableData" : "test-phish-simple;a:3", michael@0: "urlsExist" : addUrls3, michael@0: "urlsDontExist" : addUrls1 michael@0: }; michael@0: michael@0: doTest([update1, update2, update3], assertions, false); michael@0: } michael@0: michael@0: michael@0: function run_test() michael@0: { michael@0: runTests([ michael@0: testSimpleForward, michael@0: testNestedForward, michael@0: testInvalidUrlForward, michael@0: testErrorUrlForward, michael@0: testMultipleTables, michael@0: testReset michael@0: ]); michael@0: } michael@0: michael@0: do_test_pending();