From 72e0603d7a185f83f7f53b7c880936e8f89d683e Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Fri, 19 Oct 2018 11:30:00 +0200 Subject: Hostlist test: test non-empty domain Add optional load list benchmark --- test/hostlist/hostlisttest.cpp | 67 +++++++++++++++++++++++++++--------------- test/hostlist/hostlisttest.h | 6 +++- 2 files changed, 48 insertions(+), 25 deletions(-) (limited to 'test') diff --git a/test/hostlist/hostlisttest.cpp b/test/hostlist/hostlisttest.cpp index cd1d39f..5270118 100644 --- a/test/hostlist/hostlisttest.cpp +++ b/test/hostlist/hostlisttest.cpp @@ -3,40 +3,59 @@ void HostlistTest::parseList() { - //FilterTree tree; - // 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() { - // test block - QVector block = tree.match(QUrl(), QUrl::fromUserInput("blockeddomain.com")); - QCOMPARE(block.length(), 1); - QCOMPARE(block.constFirst()->action(), FilterLeaf::Block); - - // test redirect - QVector redirectResult = tree.match(QUrl(), QUrl::fromUserInput("localhost.localdomain")); - QCOMPARE(redirectResult.length(), 1); - QCOMPARE(redirectResult.at(0)->action(), FilterLeaf::Redirect); - QCOMPARE(redirectResult.at(0)->redirect(), "127.0.0.1"); - - // two domains on one line - QVector blockFirst = tree.match(QUrl(), QUrl::fromUserInput("blockeddomain.first")); - QCOMPARE(blockFirst.length(), 1); - QCOMPARE(blockFirst.constFirst()->action(), FilterLeaf::Block); - QVector blockSecond = tree.match(QUrl(), QUrl::fromUserInput("blockeddomain.second")); - QCOMPARE(blockSecond.length(), 1); - QCOMPARE(blockSecond.constFirst()->action(), FilterLeaf::Block); - - // domain not on list - QVector missing = tree.match(QUrl(), QUrl::fromUserInput("other.domain")); - QCOMPARE(missing.length(), 0); + 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) diff --git a/test/hostlist/hostlisttest.h b/test/hostlist/hostlisttest.h index 9a87e0d..96051a9 100644 --- a/test/hostlist/hostlisttest.h +++ b/test/hostlist/hostlisttest.h @@ -1,8 +1,8 @@ #ifndef HOSTLIST_TEST #define HOSTLIST_TEST -#include #include "filtertree.h" +#include class HostlistTest : public QObject { @@ -10,8 +10,12 @@ class HostlistTest : public QObject private slots: void parseList(); + + void checkRules_data(); void checkRules(); + void benchmark_parse(); + private: FilterTree tree; }; -- cgit v1.2.1