mirror of https://github.com/grpc/grpc.git
parent
ac31fb0f61
commit
942cdff429
7 changed files with 8 additions and 302 deletions
@ -1,137 +0,0 @@ |
|||||||
//
|
|
||||||
//
|
|
||||||
// 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/util/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(); |
|
||||||
} |
|
Loading…
Reference in new issue