feat(network): allow binding to specific interface (#4481)
This commit is contained in:
parent
1fa7457eab
commit
0aa7e3fd67
13 changed files with 205 additions and 9 deletions
|
|
@ -26,3 +26,115 @@ INSTANTIATE_TEST_SUITE_P(
|
|||
std::make_tuple(std::string(128, 'a'), std::string(63, 'a'))
|
||||
)
|
||||
);
|
||||
|
||||
/**
|
||||
* @brief Test fixture for bind_address tests with setup/teardown
|
||||
*/
|
||||
class BindAddressTest: public ::testing::Test {
|
||||
protected:
|
||||
std::string original_bind_address;
|
||||
|
||||
void SetUp() override {
|
||||
// Save the original bind_address config
|
||||
original_bind_address = config::sunshine.bind_address;
|
||||
}
|
||||
|
||||
void TearDown() override {
|
||||
// Restore the original bind_address config
|
||||
config::sunshine.bind_address = original_bind_address;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Test that get_bind_address returns wildcard when bind_address is not configured
|
||||
*/
|
||||
TEST_F(BindAddressTest, DefaultBehaviorIPv4) {
|
||||
// Clear bind_address to test the default behavior
|
||||
config::sunshine.bind_address = "";
|
||||
|
||||
const auto bind_addr = net::get_bind_address(net::af_e::IPV4);
|
||||
ASSERT_EQ(bind_addr, "0.0.0.0");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Test that get_bind_address returns wildcard when bind_address is not configured (IPv6)
|
||||
*/
|
||||
TEST_F(BindAddressTest, DefaultBehaviorIPv6) {
|
||||
// Clear bind_address to test the default behavior
|
||||
config::sunshine.bind_address = "";
|
||||
|
||||
const auto bind_addr = net::get_bind_address(net::af_e::BOTH);
|
||||
ASSERT_EQ(bind_addr, "::");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Test that get_bind_address returns configured IPv4 address
|
||||
*/
|
||||
TEST_F(BindAddressTest, ConfiguredIPv4Address) {
|
||||
// Set a specific IPv4 address
|
||||
config::sunshine.bind_address = "192.168.1.100";
|
||||
|
||||
const auto bind_addr = net::get_bind_address(net::af_e::IPV4);
|
||||
ASSERT_EQ(bind_addr, "192.168.1.100");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Test that get_bind_address returns configured IPv6 address
|
||||
*/
|
||||
TEST_F(BindAddressTest, ConfiguredIPv6Address) {
|
||||
// Set a specific IPv6 address
|
||||
config::sunshine.bind_address = "::1";
|
||||
|
||||
const auto bind_addr = net::get_bind_address(net::af_e::BOTH);
|
||||
ASSERT_EQ(bind_addr, "::1");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Test that get_bind_address returns configured address regardless of address family
|
||||
*/
|
||||
TEST_F(BindAddressTest, ConfiguredAddressOverridesFamily) {
|
||||
// Set a specific IPv6 address but request IPv4 family
|
||||
// The configured address should still be returned
|
||||
config::sunshine.bind_address = "2001:db8::1";
|
||||
|
||||
const auto bind_addr = net::get_bind_address(net::af_e::IPV4);
|
||||
ASSERT_EQ(bind_addr, "2001:db8::1");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Test with loopback addresses
|
||||
*/
|
||||
TEST_F(BindAddressTest, LoopbackAddresses) {
|
||||
// Test IPv4 loopback
|
||||
config::sunshine.bind_address = "127.0.0.1";
|
||||
const auto bind_addr_v4 = net::get_bind_address(net::af_e::IPV4);
|
||||
ASSERT_EQ(bind_addr_v4, "127.0.0.1");
|
||||
|
||||
// Test IPv6 loopback
|
||||
config::sunshine.bind_address = "::1";
|
||||
const auto bind_addr_v6 = net::get_bind_address(net::af_e::BOTH);
|
||||
ASSERT_EQ(bind_addr_v6, "::1");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Test with link-local addresses
|
||||
*/
|
||||
TEST_F(BindAddressTest, LinkLocalAddresses) {
|
||||
// Test IPv4 link-local
|
||||
config::sunshine.bind_address = "169.254.1.1";
|
||||
const auto bind_addr_v4 = net::get_bind_address(net::af_e::IPV4);
|
||||
ASSERT_EQ(bind_addr_v4, "169.254.1.1");
|
||||
|
||||
// Test IPv6 link-local
|
||||
config::sunshine.bind_address = "fe80::1";
|
||||
const auto bind_addr_v6 = net::get_bind_address(net::af_e::BOTH);
|
||||
ASSERT_EQ(bind_addr_v6, "fe80::1");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Test that af_to_any_address_string still works correctly
|
||||
*/
|
||||
TEST_F(BindAddressTest, WildcardAddressFunction) {
|
||||
ASSERT_EQ(net::af_to_any_address_string(net::af_e::IPV4), "0.0.0.0");
|
||||
ASSERT_EQ(net::af_to_any_address_string(net::af_e::BOTH), "::");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue