Skip to content

Commit

Permalink
add coverage
Browse files Browse the repository at this point in the history
Signed-off-by: Greg Greenway <ggreenway@apple.com>
  • Loading branch information
ggreenway committed Apr 25, 2024
1 parent 93f21e6 commit b8a812b
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 4 deletions.
Expand Up @@ -48,10 +48,8 @@ quic::QuicSocketAddress parseSocketAddress(const envoy::config::core::v3::Socket
envoy::config::core::v3::Address outer;
*outer.mutable_socket_address() = addr;
auto envoy_addr = Network::Utility::protobufAddressToAddress(outer);
if (envoy_addr == nullptr) {
ProtoExceptionUtil::throwProtoValidationException(
absl::StrCat("bad ", version_str, " server preferred address: ", addr), message);
}
ASSERT(envoy_addr != nullptr,
"Network::Utility::protobufAddressToAddress throws on failure so this can't be nullptr");
if (envoy_addr->ip() == nullptr || envoy_addr->ip()->version() != version) {
ProtoExceptionUtil::throwProtoValidationException(
absl::StrCat("wrong address type for ", version_str, " server preferred address: ", addr),
Expand Down
24 changes: 24 additions & 0 deletions test/extensions/quic/server_preferred_address/BUILD
@@ -0,0 +1,24 @@
load(
"//bazel:envoy_build_system.bzl",
"envoy_cc_test_library",
"envoy_package",
)
load(
"//test/extensions:extensions_build_system.bzl",
"envoy_extension_cc_test",
)

licenses(["notice"]) # Apache 2

envoy_package()

envoy_extension_cc_test(
name = "fixed_server_preferred_address_test",
srcs = ["fixed_server_preferred_address_test.cc"],
extension_names = ["envoy.quic.server_preferred_address.fixed"],
tags = ["nofips"],
deps = [
"//source/extensions/quic/server_preferred_address:fixed_server_preferred_address_config_lib",
"//test/mocks/protobuf:protobuf_mocks",
],
)
@@ -0,0 +1,75 @@
#include "source/extensions/quic/server_preferred_address/fixed_server_preferred_address_config.h"

#include "source/common/network/utility.h"
#include "test/test_common/utility.h"
#include "test/mocks/protobuf/mocks.h"

#include "gmock/gmock.h"
#include "gtest/gtest.h"

namespace Envoy {
namespace Quic {

class FixedServerPreferredAddressConfigTest : public ::testing::Test {
public:
FixedServerPreferredAddressConfigFactory factory_;
testing::NiceMock<ProtobufMessage::MockValidationVisitor> visitor_;
};

TEST_F(FixedServerPreferredAddressConfigTest, Validation) {
{
// Bad address_and_port.
envoy::extensions::quic::server_preferred_address::v3::FixedServerPreferredAddressConfig cfg;
cfg.mutable_ipv4_address_and_port()->set_address("not an address");
cfg.mutable_ipv4_address_and_port()->set_port_value(1);
EXPECT_THROW_WITH_REGEX(factory_.createServerPreferredAddressConfig(cfg, visitor_, {}),
EnvoyException, ".*malformed IP address: not an address.*");
}
{
// Bad address.
envoy::extensions::quic::server_preferred_address::v3::FixedServerPreferredAddressConfig cfg;
cfg.set_ipv4_address("not an address");
EXPECT_THROW_WITH_REGEX(factory_.createServerPreferredAddressConfig(cfg, visitor_, {}),
EnvoyException, ".*bad v4 server preferred address: not an address.*");
}
{
// v6 address in v4 field.
envoy::extensions::quic::server_preferred_address::v3::FixedServerPreferredAddressConfig cfg;
cfg.mutable_ipv4_address_and_port()->set_address("::1");
cfg.mutable_ipv4_address_and_port()->set_port_value(1);
EXPECT_THROW_WITH_REGEX(factory_.createServerPreferredAddressConfig(cfg, visitor_, {}),
EnvoyException,
".*wrong address type for v4 server preferred address.*");
}
{
// v4 address in v6 field.
envoy::extensions::quic::server_preferred_address::v3::FixedServerPreferredAddressConfig cfg;
cfg.mutable_ipv6_address_and_port()->set_address("127.0.0.1");
cfg.mutable_ipv6_address_and_port()->set_port_value(1);
EXPECT_THROW_WITH_REGEX(factory_.createServerPreferredAddressConfig(cfg, visitor_, {}),
EnvoyException,
".*wrong address type for v6 server preferred address.*");
}
}

TEST_F(FixedServerPreferredAddressConfigTest, AddressGetsCombinedWithPort) {
envoy::extensions::quic::server_preferred_address::v3::FixedServerPreferredAddressConfig cfg;
cfg.set_ipv4_address("1.2.3.4");
auto obj = factory_.createServerPreferredAddressConfig(cfg, visitor_, {});
auto addresses = obj->getServerPreferredAddresses(
Network::Utility::parseInternetAddressNoThrow("127.0.0.1", 1234));
EXPECT_EQ(addresses.ipv4_.ToString(), "1.2.3.4:1234");
}

TEST_F(FixedServerPreferredAddressConfigTest, AddressAndPortIgnoresPort) {
envoy::extensions::quic::server_preferred_address::v3::FixedServerPreferredAddressConfig cfg;
cfg.mutable_ipv4_address_and_port()->set_address("1.2.3.4");
cfg.mutable_ipv4_address_and_port()->set_port_value(5);
auto obj = factory_.createServerPreferredAddressConfig(cfg, visitor_, {});
auto addresses = obj->getServerPreferredAddresses(
Network::Utility::parseInternetAddressNoThrow("127.0.0.1", 1234));
EXPECT_EQ(addresses.ipv4_.ToString(), "1.2.3.4:5");
}

} // namespace Quic
} // namespace Envoy

0 comments on commit b8a812b

Please sign in to comment.