#include "hostlisttest.h" #include void HostlistTest::parseList() { // load filters QFile hostlist("hostlist.txt"); QCOMPARE(hostlist.open(QIODevice::ReadOnly | QIODevice::Text), true); QCOMPARE(loadHostlist(hostlist, &tree), true); // hostlist filters are applied to all domains, so there should only be one branch QCOMPARE(tree.branches().length(), 1); } void HostlistTest::checkRules_data() { QTest::addColumn("domain"); QTest::addColumn("request"); QTest::addColumn("matches"); QTest::addColumn("action"); const QVector domains{ QUrl(), QUrl::fromUserInput("testdomain.host") }; for(const QUrl &domain : domains) { QTest::newRow("block (1 domain per line)") << domain << QUrl::fromUserInput("blockeddomain.com") << 1 << FilterLeaf::Block; QTest::newRow("block (2 domains per line #1)") << domain << QUrl::fromUserInput("blockeddomain.first") << 1 << FilterLeaf::Block; QTest::newRow("block (2 domains per line #2)") << domain << QUrl::fromUserInput("blockeddomain.second") << 1 << FilterLeaf::Block; QTest::newRow("redirect") << domain << QUrl::fromUserInput("localhost.localdomain") << 1 << FilterLeaf::Redirect; QTest::newRow("domain not in hostlist") << domain << QUrl::fromUserInput("other.domain") << 0 << FilterLeaf::NotMatched; } } void HostlistTest::checkRules() { QFETCH(QUrl, domain); QFETCH(QUrl, request); QFETCH(int, matches); QFETCH(FilterLeaf::Action, action); auto result = tree.match(domain, request); QCOMPARE(result.length(), matches); if(matches > 0) QCOMPARE(result.constFirst()->action(), action); if(action == FilterLeaf::Redirect) QCOMPARE(result.constFirst()->redirect(), QLatin1Literal("127.0.0.1")); } void HostlistTest::benchmark_parse() { QFile hostlist("hostlist-benchmark.txt"); if(hostlist.open(QIODevice::ReadOnly | QIODevice::Text)) { FilterTree benchmarkTree; bool loaded; QBENCHMARK { loaded = loadHostlist(hostlist, &benchmarkTree); } QCOMPARE(loaded, true); hostlist.close(); } } QTEST_GUILESS_MAIN(HostlistTest)