ladybird/Tests/LibDNS/TestDNSResolver.cpp
Andrew Kaster ffd600a7f5 Meta+RequestServer: Remove local download of ca-certificates
We haven't required a local copy of the ca-certificates since switching
to OpenSSL as the backend for TLS. Remove the script to download the
PEM file, and update the tests to use the system's CA certificates.
2025-07-07 09:10:05 +02:00

104 lines
3.2 KiB
C++

/*
* Copyright (c) 2025, Altomani Gianluca <altomanigianluca@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibCore/Socket.h>
#include <LibDNS/Resolver.h>
#include <LibTLS/TLSv12.h>
#include <LibTest/TestCase.h>
TEST_CASE(test_udp)
{
Core::EventLoop loop;
DNS::Resolver resolver {
[&] -> ErrorOr<DNS::Resolver::SocketResult> {
Core::SocketAddress addr = { IPv4Address::from_string("1.1.1.1"sv).value(), static_cast<u16>(53) };
return DNS::Resolver::SocketResult {
TRY(Core::BufferedSocket<Core::UDPSocket>::create(TRY(Core::UDPSocket::connect(addr)))),
DNS::Resolver::ConnectionMode::UDP,
};
}
};
TRY_OR_FAIL(resolver.when_socket_ready()->await());
resolver.lookup("google.com", DNS::Messages::Class::IN, { DNS::Messages::ResourceType::A, DNS::Messages::ResourceType::AAAA })
->when_resolved([&](auto& result) {
EXPECT(!result->records().is_empty());
loop.quit(0);
})
.when_rejected([&](auto& error) {
outln("Failed to resolve: {}", error);
loop.quit(1);
});
EXPECT_EQ(0, loop.exec());
}
TEST_CASE(test_tcp)
{
Core::EventLoop loop;
DNS::Resolver resolver {
[&] -> ErrorOr<DNS::Resolver::SocketResult> {
Core::SocketAddress addr = { IPv4Address::from_string("1.1.1.1"sv).value(), static_cast<u16>(53) };
auto tcp_socket = TRY(Core::TCPSocket::connect(addr));
TRY(tcp_socket->set_blocking(false));
return DNS::Resolver::SocketResult {
TRY(Core::BufferedSocket<Core::TCPSocket>::create(move(tcp_socket))),
DNS::Resolver::ConnectionMode::TCP,
};
}
};
TRY_OR_FAIL(resolver.when_socket_ready()->await());
resolver.lookup("google.com", DNS::Messages::Class::IN, { DNS::Messages::ResourceType::A, DNS::Messages::ResourceType::AAAA })
->when_resolved([&](auto& result) {
EXPECT(!result->records().is_empty());
loop.quit(0);
})
.when_rejected([&](auto& error) {
outln("Failed to resolve: {}", error);
loop.quit(1);
});
EXPECT_EQ(0, loop.exec());
}
TEST_CASE(test_tls)
{
Core::EventLoop loop;
DNS::Resolver resolver {
[&] -> ErrorOr<DNS::Resolver::SocketResult> {
Core::SocketAddress addr = { IPv4Address::from_string("1.1.1.1"sv).value(), static_cast<u16>(853) };
TLS::Options options = {};
return DNS::Resolver::SocketResult {
MaybeOwned<Core::Socket>(TRY(TLS::TLSv12::connect(addr, "1.1.1.1", move(options)))),
DNS::Resolver::ConnectionMode::TCP,
};
}
};
TRY_OR_FAIL(resolver.when_socket_ready()->await());
resolver.lookup("google.com", DNS::Messages::Class::IN, { DNS::Messages::ResourceType::A, DNS::Messages::ResourceType::AAAA })
->when_resolved([&](auto& result) {
EXPECT(!result->records().is_empty());
loop.quit(0);
})
.when_rejected([&](auto& error) {
outln("Failed to resolve: {}", error);
loop.quit(1);
});
EXPECT_EQ(0, loop.exec());
}