|
|
|
@ -311,8 +311,9 @@ private: |
|
|
|
|
// Test fixture that uses a mock DNS server.
|
|
|
|
|
class MockChannelOptsTest : public LibraryTest { |
|
|
|
|
public: |
|
|
|
|
MockChannelOptsTest(int count, int family, bool force_tcp, bool honor_sysconfig, |
|
|
|
|
struct ares_options *givenopts, int optmask); |
|
|
|
|
MockChannelOptsTest(int count, int family, bool force_tcp, |
|
|
|
|
bool honor_sysconfig, struct ares_options *givenopts, |
|
|
|
|
int optmask); |
|
|
|
|
~MockChannelOptsTest(); |
|
|
|
|
|
|
|
|
|
// Process all pending work on ares-owned and mock-server-owned file
|
|
|
|
@ -341,7 +342,8 @@ class MockChannelTest |
|
|
|
|
public ::testing::WithParamInterface<std::pair<int, bool>> { |
|
|
|
|
public: |
|
|
|
|
MockChannelTest() |
|
|
|
|
: MockChannelOptsTest(1, GetParam().first, GetParam().second, false, nullptr, 0) |
|
|
|
|
: MockChannelOptsTest(1, GetParam().first, GetParam().second, false, |
|
|
|
|
nullptr, 0) |
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
@ -349,7 +351,8 @@ public: |
|
|
|
|
class MockUDPChannelTest : public MockChannelOptsTest, |
|
|
|
|
public ::testing::WithParamInterface<int> { |
|
|
|
|
public: |
|
|
|
|
MockUDPChannelTest() : MockChannelOptsTest(1, GetParam(), false, false, nullptr, 0) |
|
|
|
|
MockUDPChannelTest() |
|
|
|
|
: MockChannelOptsTest(1, GetParam(), false, false, nullptr, 0) |
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
@ -357,7 +360,8 @@ public: |
|
|
|
|
class MockTCPChannelTest : public MockChannelOptsTest, |
|
|
|
|
public ::testing::WithParamInterface<int> { |
|
|
|
|
public: |
|
|
|
|
MockTCPChannelTest() : MockChannelOptsTest(1, GetParam(), true, false, nullptr, 0) |
|
|
|
|
MockTCPChannelTest() |
|
|
|
|
: MockChannelOptsTest(1, GetParam(), true, false, nullptr, 0) |
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
@ -764,49 +768,52 @@ int RunInContainer(ContainerFilesystem *fs, const std::string &hostname, |
|
|
|
|
} \
|
|
|
|
|
int ICLASS_NAME(casename, testname)::InnerTestBody() |
|
|
|
|
|
|
|
|
|
#define CONTAINED_TEST_P(test_suite_name, test_name, hostname, domainname, files) \ |
|
|
|
|
class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \
|
|
|
|
|
: public test_suite_name { \
|
|
|
|
|
public: \
|
|
|
|
|
GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \
|
|
|
|
|
int InnerTestBody(); \
|
|
|
|
|
void TestBody() \
|
|
|
|
|
{ \
|
|
|
|
|
ContainerFilesystem chroot(files, ".."); \
|
|
|
|
|
VoidToIntFn fn = \
|
|
|
|
|
[this](void) -> int { \
|
|
|
|
|
ares_reinit(this->channel_); \
|
|
|
|
|
ares_sleep_time(100); \
|
|
|
|
|
return this->InnerTestBody(); \
|
|
|
|
|
}; \
|
|
|
|
|
EXPECT_EQ(0, RunInContainer(&chroot, hostname, domainname, fn)); \
|
|
|
|
|
} \
|
|
|
|
|
\
|
|
|
|
|
private: \
|
|
|
|
|
static int AddToRegistry() { \
|
|
|
|
|
::testing::UnitTest::GetInstance() \
|
|
|
|
|
->parameterized_test_registry() \
|
|
|
|
|
.GetTestSuitePatternHolder<test_suite_name>( \
|
|
|
|
|
GTEST_STRINGIFY_(test_suite_name), \
|
|
|
|
|
::testing::internal::CodeLocation(__FILE__, __LINE__)) \
|
|
|
|
|
->AddTestPattern( \
|
|
|
|
|
GTEST_STRINGIFY_(test_suite_name), GTEST_STRINGIFY_(test_name), \
|
|
|
|
|
new ::testing::internal::TestMetaFactory<GTEST_TEST_CLASS_NAME_( \
|
|
|
|
|
test_suite_name, test_name)>(), \
|
|
|
|
|
::testing::internal::CodeLocation(__FILE__, __LINE__)); \
|
|
|
|
|
return 0; \
|
|
|
|
|
} \
|
|
|
|
|
static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \
|
|
|
|
|
GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \
|
|
|
|
|
(const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) &) = delete; \
|
|
|
|
|
GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) & operator=( \
|
|
|
|
|
const GTEST_TEST_CLASS_NAME_(test_suite_name, \
|
|
|
|
|
test_name) &) = delete; /* NOLINT */ \
|
|
|
|
|
}; \
|
|
|
|
|
int GTEST_TEST_CLASS_NAME_(test_suite_name, \
|
|
|
|
|
test_name)::gtest_registering_dummy_ = \
|
|
|
|
|
GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \
|
|
|
|
|
int GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::InnerTestBody() |
|
|
|
|
# define CONTAINED_TEST_P(test_suite_name, test_name, hostname, domainname, \ |
|
|
|
|
files) \
|
|
|
|
|
class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \
|
|
|
|
|
: public test_suite_name { \
|
|
|
|
|
public: \
|
|
|
|
|
GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() \
|
|
|
|
|
{ \
|
|
|
|
|
} \
|
|
|
|
|
int InnerTestBody(); \
|
|
|
|
|
void TestBody() \
|
|
|
|
|
{ \
|
|
|
|
|
ContainerFilesystem chroot(files, ".."); \
|
|
|
|
|
VoidToIntFn fn = [this](void) -> int { \
|
|
|
|
|
ares_reinit(this->channel_); \
|
|
|
|
|
ares_sleep_time(100); \
|
|
|
|
|
return this->InnerTestBody(); \
|
|
|
|
|
}; \
|
|
|
|
|
EXPECT_EQ(0, RunInContainer(&chroot, hostname, domainname, fn)); \
|
|
|
|
|
} \
|
|
|
|
|
\
|
|
|
|
|
private: \
|
|
|
|
|
static int AddToRegistry() \
|
|
|
|
|
{ \
|
|
|
|
|
::testing::UnitTest::GetInstance() \
|
|
|
|
|
->parameterized_test_registry() \
|
|
|
|
|
.GetTestSuitePatternHolder<test_suite_name>( \
|
|
|
|
|
GTEST_STRINGIFY_(test_suite_name), \
|
|
|
|
|
::testing::internal::CodeLocation(__FILE__, __LINE__)) \
|
|
|
|
|
->AddTestPattern( \
|
|
|
|
|
GTEST_STRINGIFY_(test_suite_name), GTEST_STRINGIFY_(test_name), \
|
|
|
|
|
new ::testing::internal::TestMetaFactory<GTEST_TEST_CLASS_NAME_( \
|
|
|
|
|
test_suite_name, test_name)>(), \
|
|
|
|
|
::testing::internal::CodeLocation(__FILE__, __LINE__)); \
|
|
|
|
|
return 0; \
|
|
|
|
|
} \
|
|
|
|
|
static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \
|
|
|
|
|
GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \
|
|
|
|
|
(const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) &) = delete; \
|
|
|
|
|
GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) &operator=( \
|
|
|
|
|
const GTEST_TEST_CLASS_NAME_(test_suite_name, \
|
|
|
|
|
test_name) &) = delete; /* NOLINT */ \
|
|
|
|
|
}; \
|
|
|
|
|
int GTEST_TEST_CLASS_NAME_(test_suite_name, \
|
|
|
|
|
test_name)::gtest_registering_dummy_ = \
|
|
|
|
|
GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \
|
|
|
|
|
int GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::InnerTestBody() |
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|