#include "config.h" #if USE_YAML_CPP #include "gtest_helper_functions.h" #include #include #include #include #include "Poco/DOM/Document.h" #include using namespace DB; TEST(YamlParser, InvalidFile) { ASSERT_THROW(YAMLParser::parse("some-non-existing-file.yaml"), Exception); } TEST(YamlParser, ProcessValuesList) { auto yaml_file = getFileWithContents("values-list.yaml", R"YAML( rules: - apiGroups: [""] resources: - nodes - nodes/proxy - services - endpoints - pods )YAML"); SCOPE_EXIT({ yaml_file->remove(); }); Poco::AutoPtr xml = YAMLParser::parse(yaml_file->path()); auto *p_node = xml->getNodeByPath("/clickhouse"); EXPECT_EQ(xmlNodeAsString(p_node), R"CONFIG( nodes nodes/proxy services endpoints pods )CONFIG"); } TEST(YamlParser, ProcessKeysList) { auto yaml_file = getFileWithContents("keys-list.yaml", R"YAML( operator: access_management: 1 networks: ip: - 10.1.6.168 - ::1 - 127.0.0.1 )YAML"); SCOPE_EXIT({ yaml_file->remove(); }); Poco::AutoPtr xml = YAMLParser::parse(yaml_file->path()); auto *p_node = xml->getNodeByPath("/clickhouse"); EXPECT_EQ(xmlNodeAsString(p_node), R"CONFIG( 1 10.1.6.168 ::1 127.0.0.1 )CONFIG"); } TEST(YamlParser, ProcessListAttributes) { auto yaml_file = getFileWithContents("list_attributes.yaml", R"YAML( seq: - "@attr1": x - k1: val1 k2: val2 "@attr2": y - k3: val3 "@attr3": z )YAML"); SCOPE_EXIT({ yaml_file->remove(); }); Poco::AutoPtr xml = YAMLParser::parse(yaml_file->path()); auto *p_node = xml->getNodeByPath("/clickhouse"); EXPECT_EQ(xmlNodeAsString(p_node), R"CONFIG( val1 val2 val3 )CONFIG"); } TEST(YamlParser, ProcessMapAttributes) { auto yaml_file = getFileWithContents("map_attributes.yaml", R"YAML( map: "@attr1": x k1: val1 k2: val2 "@attr2": y k3: val3 "@attr3": z )YAML"); SCOPE_EXIT({ yaml_file->remove(); }); Poco::AutoPtr xml = YAMLParser::parse(yaml_file->path()); auto *p_node = xml->getNodeByPath("/clickhouse"); EXPECT_EQ(xmlNodeAsString(p_node), R"CONFIG( val1 val2 val3 )CONFIG"); } TEST(YamlParser, ClusterDef) { auto yaml_file = getFileWithContents("cluster_def.yaml", R"YAML( test_cluster: shard: - internal_replication: false replica: - host: 127.0.0.1 port: 9000 - host: 127.0.0.2 port: 9000 - internal_replication: true replica: - host: 127.0.0.3 port: 9000 - host: 127.0.0.4 port: 9000 )YAML"); SCOPE_EXIT({ yaml_file->remove(); }); Poco::AutoPtr xml = YAMLParser::parse(yaml_file->path()); auto *p_node = xml->getNodeByPath("/clickhouse"); EXPECT_EQ(xmlNodeAsString(p_node), R"CONFIG( false 127.0.0.1 9000 127.0.0.2 9000 true 127.0.0.3 9000 127.0.0.4 9000 )CONFIG"); } #endif