test: add some test and fix some bugs

This commit is contained in:
Nick Peng
2023-03-15 23:57:25 +08:00
parent a14d4a0451
commit 2e3e03bfda
9 changed files with 272 additions and 89 deletions

73
test/cases/test-bind.cc Normal file
View File

@@ -0,0 +1,73 @@
#include "client.h"
#include "include/utils.h"
#include "server.h"
#include "gtest/gtest.h"
TEST(Bind, tls)
{
Defer
{
unlink("/tmp/smartdns-cert.pem");
unlink("/tmp/smartdns-key.pem");
};
smartdns::Server server_wrap;
smartdns::Server server;
server.Start(R"""(bind [::]:61053
server-tls 127.0.0.1:60053 -no-check-certificate
log-num 0
log-console yes
log-level debug
cache-persist no)""");
server_wrap.Start(R"""(bind-tls [::]:60053
address /example.com/1.2.3.4
log-num 0
log-console yes
log-level debug
cache-persist no)""");
smartdns::Client client;
ASSERT_TRUE(client.Query("example.com", 61053));
ASSERT_EQ(client.GetAnswerNum(), 1);
EXPECT_EQ(client.GetStatus(), "NOERROR");
EXPECT_EQ(client.GetAnswer()[0].GetData(), "1.2.3.4");
}
TEST(Bind, udp_tcp)
{
smartdns::MockServer server_upstream;
smartdns::MockServer server_upstream2;
smartdns::Server server;
server_upstream.Start("udp://0.0.0.0:61053", [](struct smartdns::ServerRequestContext *request) {
unsigned char addr[4] = {1, 2, 3, 4};
dns_add_A(request->response_packet, DNS_RRS_AN, request->domain.c_str(), 611, addr);
request->response_packet->head.rcode = DNS_RC_NOERROR;
return true;
});
server.Start(R"""(
bind [::]:60053
bind-tcp [::]:60053
server 127.0.0.1:61053
log-num 0
log-console yes
log-level debug
cache-persist no)""");
smartdns::Client client;
ASSERT_TRUE(client.Query("a.com +tcp", 60053));
std::cout << client.GetResult() << std::endl;
ASSERT_EQ(client.GetAnswerNum(), 1);
EXPECT_EQ(client.GetStatus(), "NOERROR");
EXPECT_EQ(client.GetAnswer()[0].GetTTL(), 3);
EXPECT_EQ(client.GetAnswer()[0].GetData(), "1.2.3.4");
ASSERT_TRUE(client.Query("a.com", 60053));
std::cout << client.GetResult() << std::endl;
ASSERT_EQ(client.GetAnswerNum(), 1);
EXPECT_EQ(client.GetStatus(), "NOERROR");
EXPECT_EQ(client.GetAnswer()[0].GetTTL(), 611);
EXPECT_EQ(client.GetAnswer()[0].GetData(), "1.2.3.4");
}

View File

@@ -0,0 +1,80 @@
#include "client.h"
#include "dns.h"
#include "include/utils.h"
#include "server.h"
#include "gtest/gtest.h"
TEST(DiscardBlockIP, first_ping)
{
smartdns::MockServer server_upstream1;
smartdns::MockServer server_upstream2;
smartdns::Server server;
server_upstream1.Start("udp://0.0.0.0:61053", [](struct smartdns::ServerRequestContext *request) {
unsigned char addr[4] = {0, 0, 0, 0};
dns_add_A(request->response_packet, DNS_RRS_AN, request->domain.c_str(), 611, addr);
request->response_packet->head.rcode = DNS_RC_NOERROR;
return true;
});
server_upstream2.Start("udp://0.0.0.0:62053", [](struct smartdns::ServerRequestContext *request) {
unsigned char addr[4] = {1, 2, 3, 4};
usleep(20000);
dns_add_A(request->response_packet, DNS_RRS_AN, request->domain.c_str(), 611, addr);
request->response_packet->head.rcode = DNS_RC_NOERROR;
return true;
});
server.Start(R"""(bind [::]:60053
server 127.0.0.1:61053
server 127.0.0.1:62053
log-num 0
log-console yes
log-level debug
cache-persist no)""");
smartdns::Client client;
ASSERT_TRUE(client.Query("a.com", 60053));
std::cout << client.GetResult() << std::endl;
ASSERT_EQ(client.GetAnswerNum(), 1);
EXPECT_EQ(client.GetStatus(), "NOERROR");
EXPECT_EQ(client.GetAnswer()[0].GetTTL(), 600);
EXPECT_EQ(client.GetAnswer()[0].GetData(), "1.2.3.4");
}
TEST(DiscardBlockIP, first_response)
{
smartdns::MockServer server_upstream1;
smartdns::MockServer server_upstream2;
smartdns::Server server;
server_upstream1.Start("udp://0.0.0.0:61053", [](struct smartdns::ServerRequestContext *request) {
unsigned char addr[4] = {0, 0, 0, 0};
dns_add_A(request->response_packet, DNS_RRS_AN, request->domain.c_str(), 611, addr);
request->response_packet->head.rcode = DNS_RC_NOERROR;
return true;
});
server_upstream2.Start("udp://0.0.0.0:62053", [](struct smartdns::ServerRequestContext *request) {
unsigned char addr[4] = {1, 2, 3, 4};
usleep(20000);
dns_add_A(request->response_packet, DNS_RRS_AN, request->domain.c_str(), 611, addr);
request->response_packet->head.rcode = DNS_RC_NOERROR;
return true;
});
server.Start(R"""(bind [::]:60053
server 127.0.0.1:61053
server 127.0.0.1:62053
log-num 0
log-console yes
log-level debug
response-mode fastest-response
cache-persist no)""");
smartdns::Client client;
ASSERT_TRUE(client.Query("a.com", 60053));
std::cout << client.GetResult() << std::endl;
ASSERT_EQ(client.GetAnswerNum(), 1);
EXPECT_EQ(client.GetStatus(), "NOERROR");
EXPECT_EQ(client.GetAnswer()[0].GetTTL(), 3);
EXPECT_EQ(client.GetAnswer()[0].GetData(), "1.2.3.4");
}

View File

@@ -3,7 +3,7 @@
#include "server.h"
#include "gtest/gtest.h"
TEST(server, mock)
TEST(MockServer, query_fail)
{
smartdns::MockServer server;
smartdns::Client client;

54
test/cases/test-ping.cc Normal file
View File

@@ -0,0 +1,54 @@
#include "client.h"
#include "fast_ping.h"
#include "include/utils.h"
#include "server.h"
#include "gtest/gtest.h"
#include "tlog.h"
class Ping : public ::testing::Test
{
protected:
virtual void SetUp()
{
EXPECT_EQ(fast_ping_init(), 0);
loglevel = tlog_getlevel();
tlog_setlevel(TLOG_DEBUG);
}
virtual void TearDown()
{
fast_ping_exit();
tlog_setlevel(loglevel);
}
private:
tlog_level loglevel;
};
void ping_result_callback(struct ping_host_struct *ping_host, const char *host, FAST_PING_RESULT result,
struct sockaddr *addr, socklen_t addr_len, int seqno, int ttl, struct timeval *tv, int error,
void *userptr)
{
int *count = (int *)userptr;
*count = 1;
}
TEST_F(Ping, DISABLED_icmp)
{
struct ping_host_struct *ping_host;
int count = 0;
ping_host = fast_ping_start(PING_TYPE_ICMP, "127.0.0.1", 1, 1, 200, ping_result_callback, &count);
ASSERT_NE(ping_host, nullptr);
usleep(10000);
fast_ping_stop(ping_host);
EXPECT_EQ(count, 1);
}
TEST_F(Ping, DISABLED_tcp)
{
struct ping_host_struct *ping_host;
int count = 0;
ping_host = fast_ping_start(PING_TYPE_TCP, "127.0.0.1:1", 1, 1, 200, ping_result_callback, &count);
ASSERT_NE(ping_host, nullptr);
usleep(10000);
fast_ping_stop(ping_host);
EXPECT_EQ(count, 1);
}

View File

@@ -1,50 +0,0 @@
#include "client.h"
#include "include/utils.h"
#include "server.h"
#include "gtest/gtest.h"
TEST(server, TLSServer)
{
Defer
{
unlink("/tmp/smartdns-cert.pem");
unlink("/tmp/smartdns-key.pem");
};
smartdns::Server server_wrap;
smartdns::Server server;
server.Start(R"""(bind [::]:61053
server-tls 127.0.0.1:60053 -no-check-certificate
log-num 0
log-console yes
log-level debug
cache-persist no)""");
server_wrap.Start(R"""(bind-tls [::]:60053
address /example.com/1.2.3.4
log-num 0
log-console yes
log-level debug
cache-persist no)""");
smartdns::Client client;
ASSERT_TRUE(client.Query("example.com", 61053));
ASSERT_EQ(client.GetAnswerNum(), 1);
EXPECT_EQ(client.GetStatus(), "NOERROR");
EXPECT_EQ(client.GetAnswer()[0].GetData(), "1.2.3.4");
}
TEST(server, DISABLED_TLSCN)
{
smartdns::Server server;
server.Start(R"""(bind [::]:60053
server tls://1.0.0.1:853
log-num 0
log-console yes
log-level debug
cache-persist no)""");
smartdns::Client client;
ASSERT_TRUE(client.Query("www.example.com", 60053));
EXPECT_EQ(client.GetStatus(), "NOERROR");
}

View File

@@ -110,6 +110,8 @@ Client::Client() {}
bool Client::Query(const std::string &dig_cmds, int port, const std::string &ip)
{
Clear();
std::string cmd = "dig ";
if (port > 0) {
cmd += "-p " + std::to_string(port);
@@ -140,6 +142,7 @@ bool Client::Query(const std::string &dig_cmds, int port, const std::string &ip)
if (ParserResult() == false) {
Clear();
return false;
}
return true;