Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deprecate Envoy API v2 primitives in configuration for our Envoy filters. #588

Merged
merged 6 commits into from
Dec 8, 2020
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Utility that upgrades HeaderValueOption from v2 to v3.
Signed-off-by: Jakub Sobon <mumak@google.com>
mum4k committed Dec 4, 2020
commit a0cf4ec9e4a3f0c78d6ec70cb8acf058b9ca4902
2 changes: 2 additions & 0 deletions source/server/BUILD
Original file line number Diff line number Diff line change
@@ -37,6 +37,8 @@ envoy_cc_library(
"@envoy//source/common/protobuf:message_validator_lib_with_external_headers",
"@envoy//source/common/protobuf:utility_lib_with_external_headers",
"@envoy//source/common/singleton:const_singleton_with_external_headers",
"@envoy_api//envoy/api/v2/core:pkg_cc_proto",
"@envoy_api//envoy/config/core/v3:pkg_cc_proto",
],
)

17 changes: 17 additions & 0 deletions source/server/configuration.cc
Original file line number Diff line number Diff line change
@@ -2,6 +2,9 @@

#include <string>

#include "envoy/api/v2/core/base.pb.h"
#include "envoy/config/core/v3/base.pb.h"

#include "external/envoy/source/common/protobuf/message_validator_impl.h"
#include "external/envoy/source/common/protobuf/utility.h"

@@ -40,6 +43,20 @@ void applyConfigToResponseHeaders(Envoy::Http::ResponseHeaderMap& response_heade
}
}

envoy::config::core::v3::HeaderValueOption upgradeDeprecatedEnvoyV2HeaderValueOptionToV3(
const envoy::api::v2::core::HeaderValueOption& v2_header_value_option) {
envoy::config::core::v3::HeaderValueOption v3_header_value_option;
if (v2_header_value_option.has_append()) {
*v3_header_value_option.mutable_append() = v2_header_value_option.append();
}
if (v2_header_value_option.has_header()) {
envoy::config::core::v3::HeaderValue* v3_header = v3_header_value_option.mutable_header();
v3_header->set_key(v2_header_value_option.header().key());
v3_header->set_value(v2_header_value_option.header().value());
}
return v3_header_value_option;
}

} // namespace Configuration
} // namespace Server
} // namespace Nighthawk
10 changes: 10 additions & 0 deletions source/server/configuration.h
Original file line number Diff line number Diff line change
@@ -2,6 +2,8 @@

#include <string>

#include "envoy/api/v2/core/base.pb.h"
#include "envoy/config/core/v3/base.pb.h"
#include "envoy/http/header_map.h"

#include "api/server/response_options.pb.h"
@@ -31,6 +33,14 @@ bool mergeJsonConfig(absl::string_view json, nighthawk::server::ResponseOptions&
void applyConfigToResponseHeaders(Envoy::Http::ResponseHeaderMap& response_headers,
const nighthawk::server::ResponseOptions& response_options);

/**
* Upgrades Envoy's HeaderValueOption from the deprecated v2 API version to v3.
*
* @param v2_header_value_option The HeaderValueOption to be upgraded.
*/
envoy::config::core::v3::HeaderValueOption upgradeDeprecatedEnvoyV2HeaderValueOptionToV3(
const envoy::api::v2::core::HeaderValueOption& v2_header_value_option);

} // namespace Configuration
} // namespace Server
} // namespace Nighthawk
11 changes: 11 additions & 0 deletions test/server/BUILD
Original file line number Diff line number Diff line change
@@ -65,3 +65,14 @@ envoy_cc_test(
"@envoy//test/test_common:simulated_time_system_lib",
],
)

envoy_cc_test(
name = "configuration_test",
srcs = ["configuration_test.cc"],
repository = "@envoy",
deps = [
"//source/server:configuration_lib",
"@envoy_api//envoy/api/v2/core:pkg_cc_proto",
"@envoy_api//envoy/config/core/v3:pkg_cc_proto",
],
)
66 changes: 66 additions & 0 deletions test/server/configuration_test.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#include "envoy/api/v2/core/base.pb.h"
#include "envoy/config/core/v3/base.pb.h"

#include "server/configuration.h"

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

namespace Nighthawk {
namespace Server {
namespace Configuration {
namespace {

using ::testing::HasSubstr;

TEST(UpgradeDeprecatedEnvoyV2HeaderValueOptionToV3Test, UpgradesEmptyHeaderValue) {
envoy::api::v2::core::HeaderValueOption v2_header_value_option;
envoy::config::core::v3::HeaderValueOption v3_header_value_option =
upgradeDeprecatedEnvoyV2HeaderValueOptionToV3(v2_header_value_option);

EXPECT_FALSE(v3_header_value_option.has_append());
EXPECT_FALSE(v3_header_value_option.has_header());
}

TEST(UpgradeDeprecatedEnvoyV2HeaderValueOptionToV3Test, UpgradesHeaderValueWithHeaderAndAppendSet) {
envoy::api::v2::core::HeaderValueOption v2_header_value_option;
v2_header_value_option.mutable_append()->set_value(true);
v2_header_value_option.mutable_header()->set_key("key");
v2_header_value_option.mutable_header()->set_value("value");

envoy::config::core::v3::HeaderValueOption v3_header_value_option =
upgradeDeprecatedEnvoyV2HeaderValueOptionToV3(v2_header_value_option);

EXPECT_TRUE(v3_header_value_option.append().value());
EXPECT_EQ(v3_header_value_option.header().key(), "key");
EXPECT_EQ(v3_header_value_option.header().value(), "value");
}

TEST(UpgradeDeprecatedEnvoyV2HeaderValueOptionToV3Test, UpgradesHeaderValueWithHeaderOnly) {
envoy::api::v2::core::HeaderValueOption v2_header_value_option;
v2_header_value_option.mutable_header()->set_key("key");
v2_header_value_option.mutable_header()->set_value("value");

envoy::config::core::v3::HeaderValueOption v3_header_value_option =
upgradeDeprecatedEnvoyV2HeaderValueOptionToV3(v2_header_value_option);

EXPECT_FALSE(v3_header_value_option.has_append());
EXPECT_EQ(v3_header_value_option.header().key(), "key");
EXPECT_EQ(v3_header_value_option.header().value(), "value");
}

TEST(UpgradeDeprecatedEnvoyV2HeaderValueOptionToV3Test, UpgradesHeaderValueWithAppendOnly) {
envoy::api::v2::core::HeaderValueOption v2_header_value_option;
v2_header_value_option.mutable_append()->set_value(true);

envoy::config::core::v3::HeaderValueOption v3_header_value_option =
upgradeDeprecatedEnvoyV2HeaderValueOptionToV3(v2_header_value_option);

EXPECT_TRUE(v3_header_value_option.append().value());
EXPECT_FALSE(v3_header_value_option.has_header());
}

} // namespace
} // namespace Configuration
} // namespace Server
} // namespace Nighthawk