|
| 1 | +#include "cares_wrap.h" |
| 2 | + |
| 3 | +#include "gtest/gtest.h" |
| 4 | +#include "node.h" |
| 5 | +#include "node_test_fixture.h" |
| 6 | +#include "v8.h" |
| 7 | + |
| 8 | +#include <winsock2.h> |
| 9 | + |
| 10 | +class CaresWrapTest : public EnvironmentTestFixture {}; |
| 11 | + |
| 12 | +TEST_F(CaresWrapTest, FreshChannelChecksServersBeforeFirstQuery) { |
| 13 | + v8::HandleScope handle_scope(isolate_); |
| 14 | + const Argv argv; |
| 15 | + Env env{handle_scope, argv}; |
| 16 | + |
| 17 | + v8::Local<v8::FunctionTemplate> templ = |
| 18 | + node::BaseObject::MakeLazilyInitializedJSTemplate(*env); |
| 19 | + v8::Local<v8::Object> object = templ->GetFunction(env.context()) |
| 20 | + .ToLocalChecked() |
| 21 | + ->NewInstance(env.context()) |
| 22 | + .ToLocalChecked(); |
| 23 | + |
| 24 | + node::cares_wrap::ChannelWrap channel(*env, object, -1, 4, 0); |
| 25 | + |
| 26 | + ares_addr_port_node server{}; |
| 27 | + server.family = AF_INET; |
| 28 | + server.addr.addr4.s_addr = htonl(INADDR_LOOPBACK); |
| 29 | + server.tcp_port = 12345; |
| 30 | + server.udp_port = 12345; |
| 31 | + |
| 32 | + ASSERT_EQ(ares_set_servers_ports(channel.cares_channel(), &server), |
| 33 | + ARES_SUCCESS); |
| 34 | + channel.set_is_servers_default(true); |
| 35 | + |
| 36 | + channel.EnsureServers(); |
| 37 | + |
| 38 | + ares_addr_port_node* current = nullptr; |
| 39 | + ares_get_servers_ports(channel.cares_channel(), ¤t); |
| 40 | + ASSERT_NE(current, nullptr); |
| 41 | + |
| 42 | + const bool still_using_test_loopback = |
| 43 | + current->next == nullptr && current->family == AF_INET && |
| 44 | + current->addr.addr4.s_addr == htonl(INADDR_LOOPBACK) && |
| 45 | + current->tcp_port == 12345 && current->udp_port == 12345; |
| 46 | + |
| 47 | + ares_free_data(current); |
| 48 | + |
| 49 | + EXPECT_FALSE(still_using_test_loopback); |
| 50 | +} |
0 commit comments