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.
137 lines
3.9 KiB
137 lines
3.9 KiB
// |
|
// |
|
// 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/gprpp/env.h" |
|
#include "src/core/util/tmpfile.h" |
|
#include "src/cpp/ext/csm/metadata_exchange.h" |
|
#include "test/core/test_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(); |
|
}
|
|
|