mirror of https://github.com/grpc/grpc.git
The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
https://grpc.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
3.9 KiB
138 lines
3.9 KiB
1 year ago
|
//
|
||
|
//
|
||
|
// Copyright 2023 gRPC authors.
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
// you may not use this file except in compliance with the License.
|
||
|
// You may obtain a copy of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
// See the License for the specific language governing permissions and
|
||
|
// limitations under the License.
|
||
|
//
|
||
|
//
|
||
|
|
||
|
#include "gtest/gtest.h"
|
||
|
|
||
|
#include <grpcpp/grpcpp.h>
|
||
|
|
||
|
#include "src/core/lib/gpr/tmpfile.h"
|
||
|
#include "src/core/lib/gprpp/env.h"
|
||
1 year ago
|
#include "src/cpp/ext/csm/metadata_exchange.h"
|
||
1 year ago
|
#include "test/core/util/test_config.h"
|
||
|
|
||
|
namespace grpc {
|
||
|
namespace testing {
|
||
|
namespace {
|
||
|
|
||
|
class TestScenario {
|
||
|
public:
|
||
|
enum class XdsBootstrapSource : std::uint8_t { kFromFile, kFromConfig };
|
||
|
|
||
|
explicit TestScenario(XdsBootstrapSource bootstrap_source)
|
||
|
: bootstrap_source_(bootstrap_source) {}
|
||
|
|
||
|
static std::string Name(const ::testing::TestParamInfo<TestScenario>& info) {
|
||
|
switch (info.param.bootstrap_source_) {
|
||
|
case TestScenario::XdsBootstrapSource::kFromFile:
|
||
|
return "BootstrapFromFile";
|
||
|
case TestScenario::XdsBootstrapSource::kFromConfig:
|
||
|
return "BootstrapFromConfig";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
XdsBootstrapSource bootstrap_source() const { return bootstrap_source_; }
|
||
|
|
||
|
private:
|
||
|
XdsBootstrapSource bootstrap_source_;
|
||
|
};
|
||
|
|
||
|
class MeshIdTest : public ::testing::TestWithParam<TestScenario> {
|
||
|
protected:
|
||
|
void SetBootstrap(const char* bootstrap) {
|
||
|
switch (GetParam().bootstrap_source()) {
|
||
|
case TestScenario::XdsBootstrapSource::kFromFile: {
|
||
|
ASSERT_EQ(bootstrap_file_name_, nullptr);
|
||
|
FILE* bootstrap_file =
|
||
|
gpr_tmpfile("gcp_observability_config", &bootstrap_file_name_);
|
||
|
fputs(bootstrap, bootstrap_file);
|
||
|
fclose(bootstrap_file);
|
||
|
grpc_core::SetEnv("GRPC_XDS_BOOTSTRAP", bootstrap_file_name_);
|
||
|
break;
|
||
|
}
|
||
|
case TestScenario::XdsBootstrapSource::kFromConfig:
|
||
|
grpc_core::SetEnv("GRPC_XDS_BOOTSTRAP_CONFIG", bootstrap);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
~MeshIdTest() override {
|
||
|
grpc_core::UnsetEnv("GRPC_GCP_OBSERVABILITY_CONFIG");
|
||
|
grpc_core::UnsetEnv("GRPC_XDS_BOOTSTRAP");
|
||
|
if (bootstrap_file_name_ != nullptr) {
|
||
|
remove(bootstrap_file_name_);
|
||
|
gpr_free(bootstrap_file_name_);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
char* bootstrap_file_name_ = nullptr;
|
||
|
};
|
||
|
|
||
|
TEST_P(MeshIdTest, Empty) {
|
||
|
SetBootstrap("");
|
||
|
EXPECT_EQ(grpc::internal::GetMeshId(), "unknown");
|
||
|
}
|
||
|
|
||
|
TEST_P(MeshIdTest, NothingSet) {
|
||
|
EXPECT_EQ(grpc::internal::GetMeshId(), "unknown");
|
||
|
}
|
||
|
|
||
|
TEST_P(MeshIdTest, BadJson) {
|
||
|
SetBootstrap("{");
|
||
|
EXPECT_EQ(grpc::internal::GetMeshId(), "unknown");
|
||
|
}
|
||
|
|
||
|
TEST_P(MeshIdTest, UnexpectedMeshIdFormatType1) {
|
||
|
SetBootstrap(
|
||
|
"{\"node\": {\"id\": "
|
||
|
"\"abcdef\"}}");
|
||
|
EXPECT_EQ(grpc::internal::GetMeshId(), "unknown");
|
||
|
}
|
||
|
|
||
|
TEST_P(MeshIdTest, UnexpectedMeshIdFormatType2) {
|
||
|
SetBootstrap(
|
||
|
"{\"node\": {\"id\": "
|
||
|
"\"projects/1234567890/networks/mesh-id/nodes/"
|
||
|
"01234567-89ab-4def-8123-456789abcdef\"}}");
|
||
|
EXPECT_EQ(grpc::internal::GetMeshId(), "unknown");
|
||
|
}
|
||
|
|
||
|
TEST_P(MeshIdTest, Basic) {
|
||
|
SetBootstrap(
|
||
|
"{\"node\": {\"id\": "
|
||
|
"\"projects/1234567890/networks/mesh:mesh-id/nodes/"
|
||
|
"01234567-89ab-4def-8123-456789abcdef\"}}");
|
||
|
EXPECT_EQ(grpc::internal::GetMeshId(), "mesh-id");
|
||
|
}
|
||
|
|
||
|
INSTANTIATE_TEST_SUITE_P(
|
||
|
MeshId, MeshIdTest,
|
||
|
::testing::Values(
|
||
|
TestScenario(TestScenario::XdsBootstrapSource::kFromFile),
|
||
|
TestScenario(TestScenario::XdsBootstrapSource::kFromConfig)),
|
||
|
&TestScenario::Name);
|
||
|
|
||
|
} // namespace
|
||
|
} // namespace testing
|
||
|
} // namespace grpc
|
||
|
|
||
|
int main(int argc, char** argv) {
|
||
|
grpc::testing::TestEnvironment env(&argc, argv);
|
||
|
::testing::InitGoogleTest(&argc, argv);
|
||
|
return RUN_ALL_TESTS();
|
||
|
}
|