1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/components/url-classifier/tests/unit/test_streamupdater.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,220 @@ 1.4 +function doTest(updates, assertions, expectError) 1.5 +{ 1.6 + if (expectError) { 1.7 + doUpdateTest(updates, assertions, updateError, runNextTest); 1.8 + } else { 1.9 + doUpdateTest(updates, assertions, runNextTest, updateError); 1.10 + } 1.11 +} 1.12 + 1.13 +function testFillDb() { 1.14 + var add1Urls = [ "zaz.com/a", "yxz.com/c" ]; 1.15 + 1.16 + var update = "n:1000\n"; 1.17 + update += "i:test-phish-simple\n"; 1.18 + 1.19 + var update1 = buildBareUpdate( 1.20 + [{ "chunkNum" : 1, 1.21 + "urls" : add1Urls }]); 1.22 + update += "u:data:," + encodeURIComponent(update1) + "\n"; 1.23 + 1.24 + var assertions = { 1.25 + "tableData" : "test-phish-simple;a:1", 1.26 + "urlsExist" : add1Urls 1.27 + }; 1.28 + 1.29 + doTest([update], assertions, false); 1.30 +} 1.31 + 1.32 +function testSimpleForward() { 1.33 + var add1Urls = [ "foo.com/a", "bar.com/c" ]; 1.34 + var add2Urls = [ "foo.com/b" ]; 1.35 + var add3Urls = [ "bar.com/d" ]; 1.36 + 1.37 + var update = "n:1000\n"; 1.38 + update += "i:test-phish-simple\n"; 1.39 + 1.40 + var update1 = buildBareUpdate( 1.41 + [{ "chunkNum" : 1, 1.42 + "urls" : add1Urls }]); 1.43 + update += "u:data:," + encodeURIComponent(update1) + "\n"; 1.44 + 1.45 + var update2 = buildBareUpdate( 1.46 + [{ "chunkNum" : 2, 1.47 + "urls" : add2Urls }]); 1.48 + update += "u:data:," + encodeURIComponent(update2) + "\n"; 1.49 + 1.50 + var update3 = buildBareUpdate( 1.51 + [{ "chunkNum" : 3, 1.52 + "urls" : add3Urls }]); 1.53 + update += "u:data:," + encodeURIComponent(update3) + "\n"; 1.54 + 1.55 + var assertions = { 1.56 + "tableData" : "test-phish-simple;a:1-3", 1.57 + "urlsExist" : add1Urls.concat(add2Urls).concat(add3Urls) 1.58 + }; 1.59 + 1.60 + doTest([update], assertions, false); 1.61 +} 1.62 + 1.63 +// Make sure that a nested forward (a forward within a forward) causes 1.64 +// the update to fail. 1.65 +function testNestedForward() { 1.66 + var add1Urls = [ "foo.com/a", "bar.com/c" ]; 1.67 + var add2Urls = [ "foo.com/b" ]; 1.68 + 1.69 + var update = "n:1000\n"; 1.70 + update += "i:test-phish-simple\n"; 1.71 + 1.72 + var update1 = buildBareUpdate( 1.73 + [{ "chunkNum" : 1, 1.74 + "urls" : add1Urls }]); 1.75 + update += "u:data:," + encodeURIComponent(update1) + "\n"; 1.76 + 1.77 + var update2 = buildBareUpdate( 1.78 + [{ "chunkNum" : 2 }]); 1.79 + var update3 = buildBareUpdate( 1.80 + [{ "chunkNum" : 3, 1.81 + "urls" : add1Urls }]); 1.82 + 1.83 + update2 += "u:data:," + encodeURIComponent(update3) + "\n"; 1.84 + 1.85 + update += "u:data:," + encodeURIComponent(update2) + "\n"; 1.86 + 1.87 + var assertions = { 1.88 + "tableData" : "", 1.89 + "urlsDontExist" : add1Urls.concat(add2Urls) 1.90 + }; 1.91 + 1.92 + doTest([update], assertions, true); 1.93 +} 1.94 + 1.95 +// An invalid URL forward causes the update to fail. 1.96 +function testInvalidUrlForward() { 1.97 + var add1Urls = [ "foo.com/a", "bar.com/c" ]; 1.98 + 1.99 + var update = buildPhishingUpdate( 1.100 + [{ "chunkNum" : 1, 1.101 + "urls" : add1Urls }]); 1.102 + update += "u:asdf://blah/blah\n"; // invalid URL scheme 1.103 + 1.104 + // The first part of the update should have succeeded. 1.105 + 1.106 + var assertions = { 1.107 + "tableData" : "test-phish-simple;a:1", 1.108 + "urlsExist" : add1Urls 1.109 + }; 1.110 + 1.111 + doTest([update], assertions, false); 1.112 +} 1.113 + 1.114 +// A failed network request causes the update to fail. 1.115 +function testErrorUrlForward() { 1.116 + var add1Urls = [ "foo.com/a", "bar.com/c" ]; 1.117 + 1.118 + var update = buildPhishingUpdate( 1.119 + [{ "chunkNum" : 1, 1.120 + "urls" : add1Urls }]); 1.121 + update += "u:http://test.invalid/asdf/asdf\n"; // invalid URL scheme 1.122 + 1.123 + // The first part of the update should have succeeded 1.124 + 1.125 + var assertions = { 1.126 + "tableData" : "test-phish-simple;a:1", 1.127 + "urlsExist" : add1Urls 1.128 + }; 1.129 + 1.130 + doTest([update], assertions, false); 1.131 +} 1.132 + 1.133 +function testMultipleTables() { 1.134 + var add1Urls = [ "foo.com/a", "bar.com/c" ]; 1.135 + var add2Urls = [ "foo.com/b" ]; 1.136 + var add3Urls = [ "bar.com/d" ]; 1.137 + 1.138 + var update = "n:1000\n"; 1.139 + update += "i:test-phish-simple\n"; 1.140 + 1.141 + var update1 = buildBareUpdate( 1.142 + [{ "chunkNum" : 1, 1.143 + "urls" : add1Urls }]); 1.144 + update += "u:data:," + encodeURIComponent(update1) + "\n"; 1.145 + 1.146 + var update2 = buildBareUpdate( 1.147 + [{ "chunkNum" : 2, 1.148 + "urls" : add2Urls }]); 1.149 + update += "u:data:," + encodeURIComponent(update2) + "\n"; 1.150 + 1.151 + update += "i:test-malware-simple\n"; 1.152 + 1.153 + var update3 = buildBareUpdate( 1.154 + [{ "chunkNum" : 3, 1.155 + "urls" : add3Urls }]); 1.156 + update += "u:data:," + encodeURIComponent(update3) + "\n"; 1.157 + 1.158 + var assertions = { 1.159 + "tableData" : "test-malware-simple;a:3\ntest-phish-simple;a:1-2", 1.160 + "urlsExist" : add1Urls.concat(add2Urls), 1.161 + "malwareUrlsExist" : add3Urls 1.162 + }; 1.163 + 1.164 + doTest([update], assertions, false); 1.165 +} 1.166 + 1.167 +function Observer(callback) { 1.168 + this.observe = callback; 1.169 +} 1.170 + 1.171 +Observer.prototype = 1.172 +{ 1.173 +QueryInterface: function(iid) 1.174 +{ 1.175 + if (!iid.equals(Ci.nsISupports) && 1.176 + !iid.equals(Ci.nsIObserver)) { 1.177 + throw Cr.NS_ERROR_NO_INTERFACE; 1.178 + } 1.179 + return this; 1.180 +} 1.181 +}; 1.182 + 1.183 +// Tests a database reset request. 1.184 +function testReset() { 1.185 + var addUrls1 = [ "foo.com/a", "foo.com/b" ]; 1.186 + var update1 = buildPhishingUpdate( 1.187 + [ 1.188 + { "chunkNum" : 1, 1.189 + "urls" : addUrls1 1.190 + }]); 1.191 + 1.192 + var update2 = "n:1000\nr:pleasereset\n"; 1.193 + 1.194 + var addUrls3 = [ "bar.com/a", "bar.com/b" ]; 1.195 + var update3 = buildPhishingUpdate( 1.196 + [ 1.197 + { "chunkNum" : 3, 1.198 + "urls" : addUrls3 1.199 + }]); 1.200 + 1.201 + var assertions = { 1.202 + "tableData" : "test-phish-simple;a:3", 1.203 + "urlsExist" : addUrls3, 1.204 + "urlsDontExist" : addUrls1 1.205 + }; 1.206 + 1.207 + doTest([update1, update2, update3], assertions, false); 1.208 +} 1.209 + 1.210 + 1.211 +function run_test() 1.212 +{ 1.213 + runTests([ 1.214 + testSimpleForward, 1.215 + testNestedForward, 1.216 + testInvalidUrlForward, 1.217 + testErrorUrlForward, 1.218 + testMultipleTables, 1.219 + testReset 1.220 + ]); 1.221 +} 1.222 + 1.223 +do_test_pending();