From 57515d9162b126179c82e3c4044ab60713d38994 Mon Sep 17 00:00:00 2001 From: Qian Sun Date: Fri, 17 Feb 2017 15:43:52 -0800 Subject: [PATCH 1/3] Add unit test for quota config. --- .../endpoints/src/api_manager/config_test.cc | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/contrib/endpoints/src/api_manager/config_test.cc b/contrib/endpoints/src/api_manager/config_test.cc index ace0d2afc49..dd1a3df72c2 100644 --- a/contrib/endpoints/src/api_manager/config_test.cc +++ b/contrib/endpoints/src/api_manager/config_test.cc @@ -870,6 +870,86 @@ TEST(Config, TestCorsDisabled) { ASSERT_EQ(nullptr, method1); } +TEST(Config, TestInvalidMetricRules) { + MockApiManagerEnvironmentWithLog env; + static const char config_text[] = R"( +name: "Service.Name" +quota { + metric_rules { + selector: "GetShelves" + metric_costs { + key: "test.googleapis.com/operation/read_book" + value: 100 + } + } +} +)"; + + std::unique_ptr config = Config::Create(&env, config_text, ""); + EXPECT_EQ(nullptr, config); +} + +TEST(Config, TestMetricRules) { + MockApiManagerEnvironmentWithLog env; + static const char config_text[] = R"( +name: "Service.Name" +http { + rules { + selector: "DeleteShelf" + delete: "/shelves" + } + rules { + selector: "GetShelves" + get: "/shelves" + } +} +quota { + metric_rules { + selector: "GetShelves" + metric_costs { + key: "test.googleapis.com/operation/get_shelves" + value: 100 + } + metric_costs { + key: "test.googleapis.com/operation/request" + value: 10 + } + } + metric_rules { + selector: "DeleteShelf" + metric_costs { + key: "test.googleapis.com/operation/delete_shelves" + value: 200 + } + } +} +)"; + + std::unique_ptr config = Config::Create(&env, config_text, ""); + ASSERT_TRUE(config); + + auto method1 = config->GetMethodInfo("GET", "/shelves"); + ASSERT_NE(nullptr, method1); + + auto metric_cost_vector = method1->metric_cost_vector(); + ASSERT_EQ(2, metric_cost_vector.size()); + ASSERT_EQ("test.googleapis.com/operation/request", + metric_cost_vector[0].first); + ASSERT_EQ(10, metric_cost_vector[0].second); + ASSERT_EQ("test.googleapis.com/operation/get_shelves", + metric_cost_vector[1].first); + ASSERT_EQ(100, metric_cost_vector[1].second); + + auto method2 = config->GetMethodInfo("DELETE", "/shelves"); + ASSERT_NE(nullptr, method1); + + metric_cost_vector = method2->metric_cost_vector(); + ASSERT_EQ(1, metric_cost_vector.size()); + ASSERT_EQ("test.googleapis.com/operation/delete_shelves", + metric_cost_vector[0].first); + ASSERT_EQ(200, metric_cost_vector[0].second); +} + } // namespace } // namespace api_manager From 9a2b2f0354887ac1b2409abc1077c3a8ef5a3316 Mon Sep 17 00:00:00 2001 From: Qian Sun Date: Fri, 17 Feb 2017 17:22:31 -0800 Subject: [PATCH 2/3] Add comments. --- contrib/endpoints/src/api_manager/config_test.cc | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/contrib/endpoints/src/api_manager/config_test.cc b/contrib/endpoints/src/api_manager/config_test.cc index dd1a3df72c2..790c8a14b8c 100644 --- a/contrib/endpoints/src/api_manager/config_test.cc +++ b/contrib/endpoints/src/api_manager/config_test.cc @@ -872,6 +872,7 @@ TEST(Config, TestCorsDisabled) { TEST(Config, TestInvalidMetricRules) { MockApiManagerEnvironmentWithLog env; + // There is no http.rule or api.method to match the selector. static const char config_text[] = R"( name: "Service.Name" quota { @@ -910,10 +911,6 @@ quota { key: "test.googleapis.com/operation/get_shelves" value: 100 } - metric_costs { - key: "test.googleapis.com/operation/request" - value: 10 - } } metric_rules { selector: "DeleteShelf" @@ -932,13 +929,10 @@ quota { ASSERT_NE(nullptr, method1); auto metric_cost_vector = method1->metric_cost_vector(); - ASSERT_EQ(2, metric_cost_vector.size()); - ASSERT_EQ("test.googleapis.com/operation/request", - metric_cost_vector[0].first); - ASSERT_EQ(10, metric_cost_vector[0].second); + ASSERT_EQ(1, metric_cost_vector.size()); ASSERT_EQ("test.googleapis.com/operation/get_shelves", - metric_cost_vector[1].first); - ASSERT_EQ(100, metric_cost_vector[1].second); + metric_cost_vector[0].first); + ASSERT_EQ(100, metric_cost_vector[0].second); auto method2 = config->GetMethodInfo("DELETE", "/shelves"); ASSERT_NE(nullptr, method1); From d4b8a0a1ebd20c31e5c8fd123ca6bb79b77c8160 Mon Sep 17 00:00:00 2001 From: Qian Sun Date: Mon, 20 Feb 2017 10:02:00 -0800 Subject: [PATCH 3/3] Update test specifics. --- .../endpoints/src/api_manager/config_test.cc | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/contrib/endpoints/src/api_manager/config_test.cc b/contrib/endpoints/src/api_manager/config_test.cc index 790c8a14b8c..b133df42226 100644 --- a/contrib/endpoints/src/api_manager/config_test.cc +++ b/contrib/endpoints/src/api_manager/config_test.cc @@ -911,6 +911,10 @@ quota { key: "test.googleapis.com/operation/get_shelves" value: 100 } + metric_costs { + key: "test.googleapis.com/operation/request" + value: 10 + } } metric_rules { selector: "DeleteShelf" @@ -925,16 +929,22 @@ quota { std::unique_ptr config = Config::Create(&env, config_text, ""); ASSERT_TRUE(config); - auto method1 = config->GetMethodInfo("GET", "/shelves"); + const MethodInfo *method1 = config->GetMethodInfo("GET", "/shelves"); ASSERT_NE(nullptr, method1); - auto metric_cost_vector = method1->metric_cost_vector(); - ASSERT_EQ(1, metric_cost_vector.size()); + std::vector> metric_cost_vector = + method1->metric_cost_vector(); + std::sort(metric_cost_vector.begin(), metric_cost_vector.end()); + ASSERT_EQ(2, metric_cost_vector.size()); ASSERT_EQ("test.googleapis.com/operation/get_shelves", metric_cost_vector[0].first); ASSERT_EQ(100, metric_cost_vector[0].second); - auto method2 = config->GetMethodInfo("DELETE", "/shelves"); + ASSERT_EQ("test.googleapis.com/operation/request", + metric_cost_vector[1].first); + ASSERT_EQ(10, metric_cost_vector[1].second); + + const MethodInfo *method2 = config->GetMethodInfo("DELETE", "/shelves"); ASSERT_NE(nullptr, method1); metric_cost_vector = method2->metric_cost_vector();