From 3c1889fbd0d7b96aae16f3479ac8aae70a7e15f7 Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Wed, 28 Oct 2015 19:13:53 +0100 Subject: Use Catch for our test suite `make check` is also added to compile and run the tests Catch is fetched with cmake automatically into the build directory when needed --- tests/dns.cpp | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 tests/dns.cpp (limited to 'tests/dns.cpp') diff --git a/tests/dns.cpp b/tests/dns.cpp new file mode 100644 index 0000000..e8cbc7f --- /dev/null +++ b/tests/dns.cpp @@ -0,0 +1,83 @@ +#include "catch.hpp" + +#include +#include +#include + +#include + +TEST_CASE("DNS resolver") +{ + Resolver resolver; + + /** + * If we are using cares, we need to run a poller loop until each + * resolution is finished. Without cares we get the result before + * resolve() returns because it’s blocking. + */ +#ifdef CARES_FOUND + auto p = std::make_shared(); + + const auto loop = [&p]() + { + do + { + DNSHandler::instance.watch_dns_sockets(p); + } + while (p->poll(utils::no_timeout) != -1); + }; +#else + // We don’t need to do anything if we are not using cares. + const auto loop = [](){}; +#endif + + std::string hostname; + std::string port = "6667"; + + bool success = true; + + auto error_cb = [&success, &hostname, &port](const char* msg) + { + INFO("Failed to resolve " << hostname << ":" << port << ": " << msg); + success = false; + }; + auto success_cb = [&success, &hostname, &port](const struct addrinfo* addr) + { + INFO("Successfully resolved " << hostname << ":" << port << ": " << addr_to_string(addr)); + success = true; + }; + + hostname = "example.com"; + resolver.resolve(hostname, port, + success_cb, error_cb); + loop(); + CHECK(success); + + hostname = "this.should.fail.because.it.is..misformatted"; + resolver.resolve(hostname, port, + success_cb, error_cb); + loop(); + CHECK(!success); + + hostname = "this.should.fail.because.it.is.does.not.exist.invalid"; + resolver.resolve(hostname, port, + success_cb, error_cb); + loop(); + CHECK(!success); + + hostname = "localhost6"; + resolver.resolve(hostname, port, + success_cb, error_cb); + loop(); + CHECK(success); + + hostname = "localhost"; + resolver.resolve(hostname, port, + success_cb, error_cb); + loop(); + CHECK(success); + +#ifdef CARES_FOUND + DNSHandler::instance.destroy(); +#endif +} -- cgit v1.2.3 From 0c85ed128a650aa4dde7d919b4165162225a818f Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Fri, 15 Jan 2016 12:14:49 +0100 Subject: =?UTF-8?q?Remove=20the=20localhost6=20test,=20that=E2=80=99s=20no?= =?UTF-8?q?t=20portable=20at=20all?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/dns.cpp | 6 ------ 1 file changed, 6 deletions(-) (limited to 'tests/dns.cpp') diff --git a/tests/dns.cpp b/tests/dns.cpp index e8cbc7f..4ec1b96 100644 --- a/tests/dns.cpp +++ b/tests/dns.cpp @@ -65,12 +65,6 @@ TEST_CASE("DNS resolver") loop(); CHECK(!success); - hostname = "localhost6"; - resolver.resolve(hostname, port, - success_cb, error_cb); - loop(); - CHECK(success); - hostname = "localhost"; resolver.resolve(hostname, port, success_cb, error_cb); -- cgit v1.2.3 From c7e4fc1386b7992c33ea912bf3bfcfcff5d85758 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?louiz=E2=80=99?= Date: Mon, 25 Jul 2016 14:59:25 +0200 Subject: Test the resolving of multiple hostnames at the same time --- tests/dns.cpp | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) (limited to 'tests/dns.cpp') diff --git a/tests/dns.cpp b/tests/dns.cpp index 4ec1b96..c3eda7b 100644 --- a/tests/dns.cpp +++ b/tests/dns.cpp @@ -9,6 +9,8 @@ TEST_CASE("DNS resolver") { Resolver resolver; + Resolver resolver2; + Resolver resolver3; /** * If we are using cares, we need to run a poller loop until each @@ -36,38 +38,50 @@ TEST_CASE("DNS resolver") bool success = true; - auto error_cb = [&success, &hostname, &port](const char* msg) - { - INFO("Failed to resolve " << hostname << ":" << port << ": " << msg); - success = false; - }; - auto success_cb = [&success, &hostname, &port](const struct addrinfo* addr) - { - INFO("Successfully resolved " << hostname << ":" << port << ": " << addr_to_string(addr)); - success = true; - }; + const auto error_cb = [&success](const std::string& hostname) + { + return [&success, hostname](const char *msg) + { + INFO("Failed to resolve " << hostname << ":" << msg); + success = false; + }; + }; + const auto success_cb = [&success](const std::string& hostname) + { + return [&success, hostname](const struct addrinfo *addr) + { + INFO("Successfully resolved " << hostname << ": " << addr_to_string(addr)); + success = true; + }; + }; hostname = "example.com"; resolver.resolve(hostname, port, - success_cb, error_cb); + success_cb(hostname), error_cb(hostname)); + hostname = "poez.io"; + resolver2.resolve(hostname, port, + success_cb(hostname), error_cb(hostname)); + hostname = "louiz.org"; + resolver3.resolve(hostname, port, + success_cb(hostname), error_cb(hostname)); loop(); CHECK(success); hostname = "this.should.fail.because.it.is..misformatted"; resolver.resolve(hostname, port, - success_cb, error_cb); + success_cb(hostname), error_cb(hostname)); loop(); CHECK(!success); hostname = "this.should.fail.because.it.is.does.not.exist.invalid"; resolver.resolve(hostname, port, - success_cb, error_cb); + success_cb(hostname), error_cb(hostname)); loop(); CHECK(!success); hostname = "localhost"; resolver.resolve(hostname, port, - success_cb, error_cb); + success_cb(hostname), error_cb(hostname)); loop(); CHECK(success); -- cgit v1.2.3