| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "config/client_config.h" |
| |
| #include <memory> |
| #include <string> |
| #include <utility> |
| |
| #include "./logging.h" |
| #include "config/cobalt_config.pb.h" |
| #include "config/encoding_config.h" |
| #include "config/encodings.pb.h" |
| #include "config/metric_config.h" |
| #include "config/metrics.pb.h" |
| #include "third_party/googletest/googletest/include/gtest/gtest.h" |
| #include "util/crypto_util/base64.h" |
| |
| namespace cobalt { |
| namespace config { |
| |
| namespace { |
| void AddMetric(int customer_id, int project_id, int id, |
| CobaltConfig* cobalt_config) { |
| Metric* metric = cobalt_config->add_metric_configs(); |
| metric->set_customer_id(customer_id); |
| metric->set_project_id(project_id); |
| metric->set_id(id); |
| } |
| |
| void AddMetric(int id, CobaltConfig* cobalt_config) { |
| AddMetric(id, id, id, cobalt_config); |
| } |
| |
| void AddEncodingConfig(int customer_id, int project_id, int id, |
| CobaltConfig* cobalt_config) { |
| EncodingConfig* encoding_config = cobalt_config->add_encoding_configs(); |
| encoding_config->set_customer_id(customer_id); |
| encoding_config->set_project_id(project_id); |
| encoding_config->set_id(id); |
| } |
| |
| void AddEncodingConfig(int id, CobaltConfig* cobalt_config) { |
| AddEncodingConfig(id, id, id, cobalt_config); |
| } |
| |
| } // namespace |
| |
| TEST(ClientConfigTest, ValidateSingleProjectConfig) { |
| CobaltConfig cobalt_config; |
| AddMetric(1, 1, 42, &cobalt_config); |
| AddMetric(1, 1, 43, &cobalt_config); |
| AddEncodingConfig(1, 1, 42, &cobalt_config); |
| AddEncodingConfig(1, 1, 43, &cobalt_config); |
| EXPECT_FALSE(ClientConfig::ValidateSingleProjectConfig( |
| cobalt_config.metric_configs(), 1, 2)); |
| EXPECT_FALSE(ClientConfig::ValidateSingleProjectConfig( |
| cobalt_config.encoding_configs(), 1, 2)); |
| EXPECT_FALSE(ClientConfig::ValidateSingleProjectConfig( |
| cobalt_config.metric_configs(), 2, 1)); |
| EXPECT_FALSE(ClientConfig::ValidateSingleProjectConfig( |
| cobalt_config.encoding_configs(), 2, 1)); |
| EXPECT_FALSE(ClientConfig::ValidateSingleProjectConfig( |
| cobalt_config.metric_configs(), 2, 2)); |
| EXPECT_FALSE(ClientConfig::ValidateSingleProjectConfig( |
| cobalt_config.encoding_configs(), 2, 2)); |
| EXPECT_TRUE(ClientConfig::ValidateSingleProjectConfig( |
| cobalt_config.metric_configs(), 1, 1)); |
| EXPECT_TRUE(ClientConfig::ValidateSingleProjectConfig( |
| cobalt_config.encoding_configs(), 1, 1)); |
| } |
| |
| TEST(ClientConfigTest, CreateFromCobaltProjectConfigBytesValidConfig) { |
| std::string cobalt_config_bytes; |
| CobaltConfig cobalt_config; |
| AddMetric(1, 1, 42, &cobalt_config); |
| AddMetric(1, 1, 43, &cobalt_config); |
| AddEncodingConfig(1, 1, 42, &cobalt_config); |
| AddEncodingConfig(1, 1, 43, &cobalt_config); |
| ASSERT_TRUE(cobalt_config.SerializeToString(&cobalt_config_bytes)); |
| auto client_config_project_id_pair = |
| ClientConfig::CreateFromCobaltProjectConfigBytes(cobalt_config_bytes); |
| auto client_config = std::move(client_config_project_id_pair.first); |
| ASSERT_NE(nullptr, client_config); |
| EXPECT_EQ(1u, client_config_project_id_pair.second); |
| EXPECT_EQ(nullptr, client_config->EncodingConfig(1, 1, 41)); |
| EXPECT_NE(nullptr, client_config->EncodingConfig(1, 1, 42)); |
| EXPECT_NE(nullptr, client_config->EncodingConfig(1, 1, 43)); |
| EXPECT_EQ(nullptr, client_config->Metric(1, 1, 41)); |
| EXPECT_NE(nullptr, client_config->Metric(1, 1, 42)); |
| EXPECT_NE(nullptr, client_config->Metric(1, 1, 43)); |
| } |
| |
| TEST(ClientConfigTest, CreateFromCobaltProjectConfigBytesInvalidConfig) { |
| std::string cobalt_config_bytes; |
| CobaltConfig cobalt_config; |
| AddMetric(1, 1, 42, &cobalt_config); |
| AddMetric(1, 1, 43, &cobalt_config); |
| AddEncodingConfig(1, 2, 42, &cobalt_config); |
| AddEncodingConfig(1, 2, 43, &cobalt_config); |
| ASSERT_TRUE(cobalt_config.SerializeToString(&cobalt_config_bytes)); |
| auto client_config_project_id_pair = |
| ClientConfig::CreateFromCobaltProjectConfigBytes(cobalt_config_bytes); |
| auto client_config = std::move(client_config_project_id_pair.first); |
| ASSERT_EQ(nullptr, client_config); |
| } |
| |
| TEST(ClientConfigTest, CreateFromCobaltConfigBytes) { |
| std::string cobalt_config_bytes; |
| CobaltConfig cobalt_config; |
| AddMetric(42, &cobalt_config); |
| AddMetric(43, &cobalt_config); |
| AddEncodingConfig(42, &cobalt_config); |
| AddEncodingConfig(43, &cobalt_config); |
| ASSERT_TRUE(cobalt_config.SerializeToString(&cobalt_config_bytes)); |
| auto client_config = |
| ClientConfig::CreateFromCobaltConfigBytes(cobalt_config_bytes); |
| ASSERT_NE(nullptr, client_config); |
| EXPECT_EQ(nullptr, client_config->EncodingConfig(41, 41, 41)); |
| EXPECT_NE(nullptr, client_config->EncodingConfig(42, 42, 42)); |
| EXPECT_NE(nullptr, client_config->EncodingConfig(43, 43, 43)); |
| EXPECT_EQ(nullptr, client_config->Metric(41, 41, 41)); |
| EXPECT_NE(nullptr, client_config->Metric(42, 42, 42)); |
| EXPECT_NE(nullptr, client_config->Metric(43, 43, 43)); |
| } |
| |
| TEST(ClientConfigTest, CreateFromCobaltConfigBase64) { |
| std::string cobalt_config_bytes; |
| CobaltConfig cobalt_config; |
| AddMetric(42, &cobalt_config); |
| AddMetric(43, &cobalt_config); |
| AddEncodingConfig(42, &cobalt_config); |
| AddEncodingConfig(43, &cobalt_config); |
| ASSERT_TRUE(cobalt_config.SerializeToString(&cobalt_config_bytes)); |
| std::string cobalt_config_base64; |
| crypto::Base64Encode(cobalt_config_bytes, &cobalt_config_base64); |
| auto client_config = |
| ClientConfig::CreateFromCobaltConfigBase64(cobalt_config_base64); |
| ASSERT_NE(nullptr, client_config); |
| EXPECT_EQ(nullptr, client_config->EncodingConfig(41, 41, 41)); |
| EXPECT_NE(nullptr, client_config->EncodingConfig(42, 42, 42)); |
| EXPECT_NE(nullptr, client_config->EncodingConfig(43, 43, 43)); |
| EXPECT_EQ(nullptr, client_config->Metric(41, 41, 41)); |
| EXPECT_NE(nullptr, client_config->Metric(42, 42, 42)); |
| EXPECT_NE(nullptr, client_config->Metric(43, 43, 43)); |
| } |
| |
| } // namespace config |
| } // namespace cobalt |