]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
New command for manipulating Observation's limits
authorFranciszek Gorski <fagorski9@gmail.com>
Fri, 5 Jul 2019 15:18:50 +0000 (17:18 +0200)
committerRazvan Becheriu <razvan@isc.org>
Mon, 15 Jul 2019 12:47:46 +0000 (15:47 +0300)
src/lib/stats/tests/stats_mgr_unittest.cc

index ab759c818d74f9ee5efa2dfb7f9db0718f8fe6a2..d19a69da5349fa741e578d28d581c2adc1f95a5b 100644 (file)
@@ -846,4 +846,132 @@ TEST_F(StatsMgrTest, commandSetMaxSampleCountNegative) {
               rsp->str());
 }
 
+// This test checks whether statistic-setMaxSampleAge command really set
+// max_sample_age limit correctly.
+TEST_F(StatsMgrTest, commandSetMaxSampleAge) {
+    StatsMgr::instance().setValue("alpha", static_cast<int64_t>(1234));
+
+    ElementPtr params = Element::createMap();
+    params->set("name", Element::create("alpha"));
+    params->set("hours", Element::create(0));
+    params->set("minutes", Element::create(0));
+    params->set("seconds", Element::create(1));
+    params->set("milliseconds", Element::create(0));
+
+    ConstElementPtr rsp =
+        StatsMgr::instance().statisticSetMaxSampleAgeHandler("statistic-setMaxSampleAge", params);
+    int status_code;
+    ASSERT_NO_THROW(parseAnswer(status_code, rsp));
+    EXPECT_EQ(CONTROL_RESULT_SUCCESS, status_code);
+
+    // Now check if time limit work
+    for (uint32_t i = 0; i < 10; ++i) {
+        if (i == 5) {
+            sleep(1); // wait one second to force exceeding the time limit
+        }
+        StatsMgr::instance().setValue("alpha", static_cast<int64_t>(i));
+    }
+
+    // It should be equal
+    EXPECT_EQ(StatsMgr::instance().getSize("alpha"), 5);
+}
+
+// Test checks if statistic-setMaxSampleAge is able to handle:
+// - a request without parameters
+// - a request without at least one of duration parameters
+// - a request with missing statistic name
+// - a request for non-existing statistic.
+TEST_F(StatsMgrTest, commandSetMaxSampleAgeNegative) {
+
+    // Case 1: a request without parameters
+    ConstElementPtr rsp =
+        StatsMgr::instance().statisticSetMaxSampleAgeHandler("statistic-setMaxSampleAge", ElementPtr());
+    int status_code;
+    ASSERT_NO_THROW(parseAnswer(status_code, rsp));
+    EXPECT_EQ(status_code, CONTROL_RESULT_ERROR);
+
+    // Case 2: a request without at least one of duration parameters
+    ElementPtr params = Element::createMap();
+    params->set("seconds", Element::create(2));
+    params->set("milliseconds", Element::create(3));
+    rsp = StatsMgr::instance().statisticSetMaxSampleAgeHandler("statistic-setMaxSampleAge", params);
+    ASSERT_NO_THROW(parseAnswer(status_code, rsp));
+    EXPECT_EQ(status_code, CONTROL_RESULT_ERROR);
+
+    // Case 3: a request with missing statistic name
+    params = Element::createMap();
+    params->set("hours", Element::create(0));
+    params->set("minutes", Element::create(1));
+    params->set("seconds", Element::create(2));
+    params->set("milliseconds", Element::create(3));
+    rsp = StatsMgr::instance().statisticSetMaxSampleAgeHandler("statistic-setMaxSampleAge", params);
+    ASSERT_NO_THROW(parseAnswer(status_code, rsp));
+    EXPECT_EQ(status_code, CONTROL_RESULT_ERROR);
+
+    // Case 4: a request for non-existing statistic
+    params->set("name", Element::create("alpha"));
+    rsp = StatsMgr::instance().statisticSetMaxSampleAgeHandler("statistic-setMaxSampleAge", params);
+    EXPECT_EQ("{ \"result\": 1, \"text\": \"No 'alpha' statistic found\" }",
+              rsp->str());
+}
+
+// This test checks whether statistic-setMaxSampleCount command really set
+// max_sample_count limit correctly.
+TEST_F(StatsMgrTest, commandSetMaxSampleCount) {
+    StatsMgr::instance().setValue("alpha", static_cast<int64_t>(1234));
+
+    ElementPtr params = Element::createMap();
+    params->set("name", Element::create("alpha"));
+    params->set("max_samples", Element::create(15));
+
+    ConstElementPtr rsp =
+        StatsMgr::instance().statisticSetMaxSampleCountHandler("statistic-setMaxSampleCount", params);
+    int status_code;
+    ASSERT_NO_THROW(parseAnswer(status_code, rsp));
+    EXPECT_EQ(CONTROL_RESULT_SUCCESS, status_code);
+
+    // Now check if time limit work
+    for (uint32_t i = 0; i < 15; ++i) {
+        StatsMgr::instance().setValue("alpha", static_cast<int64_t>(i));
+    }
+
+    // It should be equal
+    EXPECT_EQ(StatsMgr::instance().getSize("alpha"), 15);
+}
+
+// Test checks if statistic-setMaxSampleAge is able to handle:
+// - a request without parameters
+// - a request without max_samples parameter
+// - a request with missing statistic name
+// - a request for non-existing statistic.
+TEST_F(StatsMgrTest, commandSetMaxSampleCountNegative) {
+
+    // Case 1: a request without parameters
+    ConstElementPtr rsp =
+        StatsMgr::instance().statisticSetMaxSampleCountHandler("statistic-setMaxSampleCount", ElementPtr());
+    int status_code;
+    ASSERT_NO_THROW(parseAnswer(status_code, rsp));
+    EXPECT_EQ(status_code, CONTROL_RESULT_ERROR);
+
+    // Case 2: a request without max_samples parameter
+    ElementPtr params = Element::createMap();
+    params->set("name", Element::create("beta"));
+    rsp = StatsMgr::instance().statisticSetMaxSampleCountHandler("statistic-setMaxSampleCount", params);
+    ASSERT_NO_THROW(parseAnswer(status_code, rsp));
+    EXPECT_EQ(status_code, CONTROL_RESULT_ERROR);
+
+    // Case 3: a request with missing statistic name
+    params = Element::createMap();
+    params->set("max_samples", Element::create(10));
+    rsp = StatsMgr::instance().statisticSetMaxSampleCountHandler("statistic-setMaxSampleCount", params);
+    ASSERT_NO_THROW(parseAnswer(status_code, rsp));
+    EXPECT_EQ(status_code, CONTROL_RESULT_ERROR);
+
+    // Case 4: a request for non-existing statistic
+    params->set("name", Element::create("alpha"));
+    rsp = StatsMgr::instance().statisticSetMaxSampleCountHandler("statistic-setMaxSampleCount", params);
+    EXPECT_EQ("{ \"result\": 1, \"text\": \"No 'alpha' statistic found\" }",
+              rsp->str());
+}
+
 };