mirror of
https://github.com/Feodor2/Mypal68.git
synced 2025-06-22 08:45:41 -04:00
331 lines
7.5 KiB
JavaScript
331 lines
7.5 KiB
JavaScript
var checkUrls = [];
|
|
var checkExpect;
|
|
|
|
var chunk1Urls = ["test.com/aba", "test.com/foo/bar", "foo.bar.com/a/b/c"];
|
|
var chunk1 = chunk1Urls.join("\n");
|
|
|
|
var chunk2Urls = [
|
|
"blah.com/a",
|
|
"baz.com/",
|
|
"255.255.0.1/",
|
|
"www.foo.com/test2?param=1",
|
|
];
|
|
var chunk2 = chunk2Urls.join("\n");
|
|
|
|
var chunk3Urls = ["test.com/a", "foo.bar.com/a", "blah.com/a"];
|
|
var chunk3 = chunk3Urls.join("\n");
|
|
|
|
var chunk3SubUrls = ["1:test.com/a", "1:foo.bar.com/a", "2:blah.com/a"];
|
|
var chunk3Sub = chunk3SubUrls.join("\n");
|
|
|
|
var chunk4Urls = ["a.com/b", "b.com/c"];
|
|
var chunk4 = chunk4Urls.join("\n");
|
|
|
|
var chunk5Urls = ["d.com/e", "f.com/g"];
|
|
var chunk5 = chunk5Urls.join("\n");
|
|
|
|
var chunk6Urls = ["h.com/i", "j.com/k"];
|
|
var chunk6 = chunk6Urls.join("\n");
|
|
|
|
var chunk7Urls = ["l.com/m", "n.com/o"];
|
|
var chunk7 = chunk7Urls.join("\n");
|
|
|
|
// we are going to add chunks 1, 2, 4, 5, and 6 to phish-simple,
|
|
// chunk 2 to malware-simple, and chunk 3 to unwanted-simple,
|
|
// and chunk 7 to block-simple.
|
|
// Then we'll remove the urls in chunk3 from phish-simple, then
|
|
// expire chunk 1 and chunks 4-7 from phish-simple.
|
|
var phishExpected = {};
|
|
var phishUnexpected = {};
|
|
var malwareExpected = {};
|
|
var unwantedExpected = {};
|
|
var blockedExpected = {};
|
|
for (let i = 0; i < chunk2Urls.length; i++) {
|
|
phishExpected[chunk2Urls[i]] = true;
|
|
malwareExpected[chunk2Urls[i]] = true;
|
|
}
|
|
for (let i = 0; i < chunk3Urls.length; i++) {
|
|
unwantedExpected[chunk3Urls[i]] = true;
|
|
delete phishExpected[chunk3Urls[i]];
|
|
phishUnexpected[chunk3Urls[i]] = true;
|
|
}
|
|
for (let i = 0; i < chunk1Urls.length; i++) {
|
|
// chunk1 urls are expired
|
|
phishUnexpected[chunk1Urls[i]] = true;
|
|
}
|
|
for (let i = 0; i < chunk4Urls.length; i++) {
|
|
// chunk4 urls are expired
|
|
phishUnexpected[chunk4Urls[i]] = true;
|
|
}
|
|
for (let i = 0; i < chunk5Urls.length; i++) {
|
|
// chunk5 urls are expired
|
|
phishUnexpected[chunk5Urls[i]] = true;
|
|
}
|
|
for (let i = 0; i < chunk6Urls.length; i++) {
|
|
// chunk6 urls are expired
|
|
phishUnexpected[chunk6Urls[i]] = true;
|
|
}
|
|
for (let i = 0; i < chunk7Urls.length; i++) {
|
|
blockedExpected[chunk7Urls[i]] = true;
|
|
// chunk7 urls are expired
|
|
phishUnexpected[chunk7Urls[i]] = true;
|
|
}
|
|
|
|
// Check that the entries hit based on sub-parts
|
|
phishExpected["baz.com/foo/bar"] = true;
|
|
phishExpected["foo.bar.baz.com/foo"] = true;
|
|
phishExpected["bar.baz.com/"] = true;
|
|
|
|
var numExpecting;
|
|
|
|
function testFailure(arg) {
|
|
do_throw(arg);
|
|
}
|
|
|
|
function checkNoHost() {
|
|
// Looking up a no-host uri such as a data: uri should throw an exception.
|
|
var exception;
|
|
try {
|
|
let principal = Services.scriptSecurityManager.createCodebasePrincipal(
|
|
Services.io.newURI("data:text/html,<b>test</b>"),
|
|
{}
|
|
);
|
|
dbservice.lookup(principal, allTables);
|
|
|
|
exception = false;
|
|
} catch (e) {
|
|
exception = true;
|
|
}
|
|
Assert.ok(exception);
|
|
|
|
do_test_finished();
|
|
}
|
|
|
|
function tablesCallbackWithoutSub(tables) {
|
|
var parts = tables.split("\n");
|
|
parts.sort();
|
|
|
|
// there's a leading \n here because splitting left an empty string
|
|
// after the trailing newline, which will sort first
|
|
Assert.equal(
|
|
parts.join("\n"),
|
|
"\ntest-block-simple;a:1\ntest-malware-simple;a:1\ntest-phish-simple;a:2\ntest-unwanted-simple;a:1"
|
|
);
|
|
|
|
checkNoHost();
|
|
}
|
|
|
|
function expireSubSuccess(result) {
|
|
dbservice.getTables(tablesCallbackWithoutSub);
|
|
}
|
|
|
|
function tablesCallbackWithSub(tables) {
|
|
var parts = tables.split("\n");
|
|
parts.sort();
|
|
|
|
// there's a leading \n here because splitting left an empty string
|
|
// after the trailing newline, which will sort first
|
|
Assert.equal(
|
|
parts.join("\n"),
|
|
"\ntest-block-simple;a:1\ntest-malware-simple;a:1\ntest-phish-simple;a:2:s:3\ntest-unwanted-simple;a:1"
|
|
);
|
|
|
|
// verify that expiring a sub chunk removes its name from the list
|
|
var data = "n:1000\ni:test-phish-simple\nsd:3\n";
|
|
|
|
doSimpleUpdate(data, expireSubSuccess, testFailure);
|
|
}
|
|
|
|
function checkChunksWithSub() {
|
|
dbservice.getTables(tablesCallbackWithSub);
|
|
}
|
|
|
|
function checkDone() {
|
|
if (--numExpecting == 0) {
|
|
checkChunksWithSub();
|
|
}
|
|
}
|
|
|
|
function phishExists(result) {
|
|
dumpn("phishExists: " + result);
|
|
try {
|
|
Assert.ok(result.includes("test-phish-simple"));
|
|
} finally {
|
|
checkDone();
|
|
}
|
|
}
|
|
|
|
function phishDoesntExist(result) {
|
|
dumpn("phishDoesntExist: " + result);
|
|
try {
|
|
Assert.ok(!result.includes("test-phish-simple"));
|
|
} finally {
|
|
checkDone();
|
|
}
|
|
}
|
|
|
|
function malwareExists(result) {
|
|
dumpn("malwareExists: " + result);
|
|
|
|
try {
|
|
Assert.ok(result.includes("test-malware-simple"));
|
|
} finally {
|
|
checkDone();
|
|
}
|
|
}
|
|
|
|
function unwantedExists(result) {
|
|
dumpn("unwantedExists: " + result);
|
|
|
|
try {
|
|
Assert.ok(result.includes("test-unwanted-simple"));
|
|
} finally {
|
|
checkDone();
|
|
}
|
|
}
|
|
|
|
function blockedExists(result) {
|
|
dumpn("blockedExists: " + result);
|
|
|
|
try {
|
|
Assert.ok(result.includes("test-block-simple"));
|
|
} finally {
|
|
checkDone();
|
|
}
|
|
}
|
|
|
|
function checkState() {
|
|
numExpecting = 0;
|
|
|
|
for (let key in phishExpected) {
|
|
let principal = Services.scriptSecurityManager.createCodebasePrincipal(
|
|
Services.io.newURI("http://" + key),
|
|
{}
|
|
);
|
|
dbservice.lookup(principal, allTables, phishExists, true);
|
|
numExpecting++;
|
|
}
|
|
|
|
for (let key in phishUnexpected) {
|
|
let principal = Services.scriptSecurityManager.createCodebasePrincipal(
|
|
Services.io.newURI("http://" + key),
|
|
{}
|
|
);
|
|
dbservice.lookup(principal, allTables, phishDoesntExist, true);
|
|
numExpecting++;
|
|
}
|
|
|
|
for (let key in malwareExpected) {
|
|
let principal = Services.scriptSecurityManager.createCodebasePrincipal(
|
|
Services.io.newURI("http://" + key),
|
|
{}
|
|
);
|
|
dbservice.lookup(principal, allTables, malwareExists, true);
|
|
numExpecting++;
|
|
}
|
|
|
|
for (let key in unwantedExpected) {
|
|
let principal = Services.scriptSecurityManager.createCodebasePrincipal(
|
|
Services.io.newURI("http://" + key),
|
|
{}
|
|
);
|
|
dbservice.lookup(principal, allTables, unwantedExists, true);
|
|
numExpecting++;
|
|
}
|
|
|
|
for (let key in blockedExpected) {
|
|
let principal = Services.scriptSecurityManager.createCodebasePrincipal(
|
|
Services.io.newURI("http://" + key),
|
|
{}
|
|
);
|
|
dbservice.lookup(principal, allTables, blockedExists, true);
|
|
numExpecting++;
|
|
}
|
|
}
|
|
|
|
function testSubSuccess(result) {
|
|
Assert.equal(result, "1000");
|
|
checkState();
|
|
}
|
|
|
|
function do_subs() {
|
|
var data =
|
|
"n:1000\n" +
|
|
"i:test-phish-simple\n" +
|
|
"s:3:32:" +
|
|
chunk3Sub.length +
|
|
"\n" +
|
|
chunk3Sub +
|
|
"\n" +
|
|
"ad:1\n" +
|
|
"ad:4-6\n";
|
|
|
|
doSimpleUpdate(data, testSubSuccess, testFailure);
|
|
}
|
|
|
|
function testAddSuccess(arg) {
|
|
Assert.equal(arg, "1000");
|
|
|
|
do_subs();
|
|
}
|
|
|
|
function do_adds() {
|
|
// This test relies on the fact that only -regexp tables are ungzipped,
|
|
// and only -hash tables are assumed to be pre-md5'd. So we use
|
|
// a 'simple' table type to get simple hostname-per-line semantics.
|
|
|
|
var data =
|
|
"n:1000\n" +
|
|
"i:test-phish-simple\n" +
|
|
"a:1:32:" +
|
|
chunk1.length +
|
|
"\n" +
|
|
chunk1 +
|
|
"\n" +
|
|
"a:2:32:" +
|
|
chunk2.length +
|
|
"\n" +
|
|
chunk2 +
|
|
"\n" +
|
|
"a:4:32:" +
|
|
chunk4.length +
|
|
"\n" +
|
|
chunk4 +
|
|
"\n" +
|
|
"a:5:32:" +
|
|
chunk5.length +
|
|
"\n" +
|
|
chunk5 +
|
|
"\n" +
|
|
"a:6:32:" +
|
|
chunk6.length +
|
|
"\n" +
|
|
chunk6 +
|
|
"\n" +
|
|
"i:test-malware-simple\n" +
|
|
"a:1:32:" +
|
|
chunk2.length +
|
|
"\n" +
|
|
chunk2 +
|
|
"\n" +
|
|
"i:test-unwanted-simple\n" +
|
|
"a:1:32:" +
|
|
chunk3.length +
|
|
"\n" +
|
|
chunk3 +
|
|
"\n" +
|
|
"i:test-block-simple\n" +
|
|
"a:1:32:" +
|
|
chunk7.length +
|
|
"\n" +
|
|
chunk7 +
|
|
"\n";
|
|
|
|
doSimpleUpdate(data, testAddSuccess, testFailure);
|
|
}
|
|
|
|
function run_test() {
|
|
do_adds();
|
|
do_test_pending();
|
|
}
|