return;
}
+ // Initializing all observations with zero value
+ isc::stats::StatsMgr::instance().setValue("pkt4-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt4-discover-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt4-offer-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt4-request-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt4-ack-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt4-nak-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt4-release-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt4-decline-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt4-inform-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt4-unknown-received",
+ static_cast<int64_t>(0));
+
+ isc::stats::StatsMgr::instance().setValue("pkt4-sent",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt4-offer-sent",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt4-ack-sent",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt4-nak-sent",
+ static_cast<int64_t>(0));
+
+ isc::stats::StatsMgr::instance().setValue("pkt4-parse-failed",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt4-receive-drop",
+ static_cast<int64_t>(0));
+
+ isc::stats::StatsMgr::instance().setValue("reclaimed-leases",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("declined-addresses",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("reclaimed-declined-addresses",
+ static_cast<int64_t>(0));
shutdown_ = false;
}
#include <hooks/hooks_manager.h>
#include <log/logger_support.h>
#include <stats/stats_mgr.h>
+#include <util/boost_time_utils.h>
#include <testutils/io_utils.h>
#include <testutils/unix_control_client.h>
#include <testutils/sandbox.h>
// Check statistic-get-all
sendUnixCommand("{ \"command\" : \"statistic-get-all\", "
" \"arguments\": {}}", response);
- EXPECT_EQ("{ \"arguments\": { }, \"result\": 0 }", response);
+
+ // preparing the schema which check if all statistics are set to zero
+ std::string stats_get_all = "{ \"arguments\": { "
+ "\"declined-addresses\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("declined-addresses")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt4-ack-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt4-ack-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt4-ack-sent\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt4-ack-sent")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt4-decline-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt4-decline-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt4-discover-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt4-discover-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt4-inform-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt4-inform-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt4-nak-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt4-nak-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt4-nak-sent\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt4-nak-sent")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt4-offer-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt4-offer-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt4-offer-sent\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt4-offer-sent")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt4-parse-failed\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt4-parse-failed")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt4-receive-drop\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt4-receive-drop")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt4-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt4-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt4-release-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt4-release-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt4-request-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt4-request-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt4-sent\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt4-sent")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt4-unknown-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt4-unknown-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"reclaimed-declined-addresses\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("reclaimed-declined-addresses")
+ ->getInteger().second) + "\" ] ], "
+ "\"reclaimed-leases\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("reclaimed-leases")
+ ->getInteger().second) + "\" ] ] }, "
+ "\"result\": 0 }";
+
+ EXPECT_EQ(stats_get_all, response);
// Check statistic-reset
sendUnixCommand("{ \"command\" : \"statistic-reset\", "
LOG_ERROR(dhcp6_logger, DHCP6_SRV_CONSTRUCT_ERROR).arg(e.what());
return;
}
-
+ // Initializing all observations with zero value
+ isc::stats::StatsMgr::instance().setValue("pkt6-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt6-solicit-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt6-advertise-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt6-request-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt6-reply-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt6-renew-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt6-rebind-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt6-release-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt6-decline-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt6-infrequest-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt6-dhcpv4-query-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt6-dhcpv4-response-received",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt6-unknown-received",
+ static_cast<int64_t>(0));
+
+ isc::stats::StatsMgr::instance().setValue("pkt6-sent",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt6-advertise-sent",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt6-reply-sent",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt6-dhcpv4-response-sent",
+ static_cast<int64_t>(0));
+
+ isc::stats::StatsMgr::instance().setValue("pkt6-parse-failed",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("pkt6-receive-drop",
+ static_cast<int64_t>(0));
+
+ isc::stats::StatsMgr::instance().setValue("reclaimed-leases",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("declined-addresses",
+ static_cast<int64_t>(0));
+ isc::stats::StatsMgr::instance().setValue("reclaimed-declined-addresses",
+ static_cast<int64_t>(0));
// All done, so can proceed
shutdown_ = false;
}
#include <testutils/io_utils.h>
#include <testutils/unix_control_client.h>
#include <testutils/sandbox.h>
+#include <util/boost_time_utils.h>
#include "marker_file.h"
#include "test_libraries.h"
ASSERT_FALSE(lease1);
}
+// Tests that the server properly responds to statistics commands. Note this
+// is really only intended to verify that the appropriate Statistics handler
+// is called based on the command. It is not intended to be an exhaustive
+// test of Dhcpv6 statistics.
+TEST_F(CtrlChannelDhcpv6SrvTest, controlChannelStats) {
+ createUnixChannelServer();
+ std::string response;
+
+ // Check statistic-get
+ sendUnixCommand("{ \"command\" : \"statistic-get\", "
+ " \"arguments\": {"
+ " \"name\":\"bogus\" }}", response);
+ EXPECT_EQ("{ \"arguments\": { }, \"result\": 0 }", response);
+
+ // Check statistic-get-all
+ sendUnixCommand("{ \"command\" : \"statistic-get-all\", "
+ " \"arguments\": {}}", response);
+
+ // preparing the schema which check if all statistics are set to zero
+ std::string stats_get_all = "{ \"arguments\": { "
+ "\"declined-addresses\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("declined-addresses")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-advertise-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-advertise-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-advertise-sent\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-advertise-sent")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-decline-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-decline-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-dhcpv4-query-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-dhcpv4-query-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-dhcpv4-response-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-dhcpv4-response-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-dhcpv4-response-sent\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-dhcpv4-response-sent")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-infrequest-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-infrequest-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-parse-failed\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-parse-failed")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-rebind-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-rebind-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-receive-drop\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-receive-drop")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-release-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-release-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-renew-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-renew-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-reply-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-reply-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-reply-sent\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-reply-sent")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-request-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-request-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-sent\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-sent")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-solicit-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-solicit-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"pkt6-unknown-received\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("pkt6-unknown-received")
+ ->getInteger().second) + "\" ] ], "
+ "\"reclaimed-declined-addresses\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("reclaimed-declined-addresses")
+ ->getInteger().second) + "\" ] ], "
+ "\"reclaimed-leases\": [ [ 0, \"" + isc::util::ptimeToText(StatsMgr::instance().getObservation("reclaimed-leases")
+ ->getInteger().second) + "\" ] ] }, "
+ "\"result\": 0 }";
+
+ EXPECT_EQ(stats_get_all, response);
+
+ // Check statistic-reset
+ sendUnixCommand("{ \"command\" : \"statistic-reset\", "
+ " \"arguments\": {"
+ " \"name\":\"bogus\" }}", response);
+ EXPECT_EQ("{ \"result\": 1, \"text\": \"No 'bogus' statistic found\" }",
+ response);
+
+ // Check statistic-reset-all
+ sendUnixCommand("{ \"command\" : \"statistic-reset-all\", "
+ " \"arguments\": {}}", response);
+ EXPECT_EQ("{ \"result\": 0, \"text\": "
+ "\"All statistics reset to neutral values.\" }", response);
+
+ // Check statistic-remove
+ sendUnixCommand("{ \"command\" : \"statistic-remove\", "
+ " \"arguments\": {"
+ " \"name\":\"bogus\" }}", response);
+ EXPECT_EQ("{ \"result\": 1, \"text\": \"No 'bogus' statistic found\" }",
+ response);
+
+ // Check statistic-remove-all
+ sendUnixCommand("{ \"command\" : \"statistic-remove-all\", "
+ " \"arguments\": {}}", response);
+ EXPECT_EQ("{ \"result\": 0, \"text\": \"All statistics removed.\" }",
+ response);
+
+ // Check statistic-sample-age-set
+ sendUnixCommand("{ \"command\" : \"statistic-sample-age-set\", "
+ " \"arguments\": {"
+ " \"name\":\"bogus\", \"duration\": 1245 }}", response);
+ EXPECT_EQ("{ \"result\": 1, \"text\": \"No 'bogus' statistic found\" }",
+ response);
+
+ // Check statistic-sample-age-set-all
+ sendUnixCommand("{ \"command\" : \"statistic-sample-age-set-all\", "
+ " \"arguments\": {"
+ " \"duration\": 1245 }}", response);
+ EXPECT_EQ("{ \"result\": 0, \"text\": \"All statistics duration limit are set.\" }",
+ response);
+
+ // Check statistic-sample-count-set
+ sendUnixCommand("{ \"command\" : \"statistic-sample-count-set\", "
+ " \"arguments\": {"
+ " \"name\":\"bogus\", \"max-samples\": 100 }}", response);
+ EXPECT_EQ("{ \"result\": 1, \"text\": \"No 'bogus' statistic found\" }",
+ response);
+
+ // Check statistic-sample-count-set-all
+ sendUnixCommand("{ \"command\" : \"statistic-sample-count-set-all\", "
+ " \"arguments\": {"
+ " \"max-samples\": 100 }}", response);
+ EXPECT_EQ("{ \"result\": 0, \"text\": \"All statistics count limit are set.\" }",
+ response);
+}
+
// Tests that the server properly responds to shtudown command sent
// via ControlChannel
TEST_F(CtrlChannelDhcpv6SrvTest, listCommands) {
// And pretend it's packet is only 3 bytes long.
pkt->data_.resize(3);
- // Check that those statistics are not set before the test
+ // Check that those statistics are set before the test.
+ // All should be present because we initialize
+ // all of them in server constructor. This piece of code is mainly reffered
+ // to previous situation when Kea used lazy initialization of statistics.
ObservationPtr pkt6_rcvd = mgr.getObservation("pkt6-received");
ObservationPtr parse_fail = mgr.getObservation("pkt6-parse-failed");
ObservationPtr recv_drop = mgr.getObservation("pkt6-receive-drop");
- EXPECT_FALSE(pkt6_rcvd);
- EXPECT_FALSE(parse_fail);
- EXPECT_FALSE(recv_drop);
+ EXPECT_TRUE(pkt6_rcvd);
+ EXPECT_TRUE(parse_fail);
+ EXPECT_TRUE(recv_drop);
// Simulate that we have received that traffic
srv.fakeReceive(pkt);
// And pretend it's packet of a different type
pkt->data_[0] = pkt_type;
- // Check that those statistics are not set before the test
+ // Check that those statistics are set before the test.
+ // All should be present because we initialize
+ // all of them in server constructor. This piece of code is mainly reffered
+ // to previous situation when Kea used lazy initialization of statistics.
ObservationPtr pkt6_rcvd = mgr.getObservation("pkt6-received");
ObservationPtr tested_stat = mgr.getObservation(stat_name);
- EXPECT_FALSE(pkt6_rcvd);
- EXPECT_FALSE(tested_stat);
+ EXPECT_TRUE(pkt6_rcvd);
+ EXPECT_TRUE(tested_stat);
// Simulate that we have received that traffic
srv.fakeReceive(pkt);
getCfgSubnets6()->getAll();
ASSERT_EQ(1, subnets->size());
- // Ok, let's check the statistics. None should be present.
+ // Ok, let's check the statistics. All should be present because we initialize
+ // all of them in server constructor. This piece of code is mainly reffered
+ // to previous situation when Kea used lazy initialization of statistics.
using namespace isc::stats;
StatsMgr& mgr = StatsMgr::instance();
ObservationPtr pkt6_rcvd = mgr.getObservation("pkt6-received");
ObservationPtr pkt6_infreq_rcvd = mgr.getObservation("pkt6-infrequest-received");
ObservationPtr pkt6_reply_sent = mgr.getObservation("pkt6-reply-sent");
ObservationPtr pkt6_sent = mgr.getObservation("pkt6-sent");
- EXPECT_FALSE(pkt6_rcvd);
- EXPECT_FALSE(pkt6_infreq_rcvd);
- EXPECT_FALSE(pkt6_reply_sent);
- EXPECT_FALSE(pkt6_sent);
+ EXPECT_TRUE(pkt6_rcvd);
+ EXPECT_TRUE(pkt6_infreq_rcvd);
+ EXPECT_TRUE(pkt6_reply_sent);
+ EXPECT_TRUE(pkt6_sent);
// Perform 2-way exchange (Inf-request/reply)
client.requestOption(D6O_NAME_SERVERS);
getCfgSubnets6()->getAll();
ASSERT_EQ(2, subnets->size());
- // Ok, let's check the statistics. None should be present.
+ // Ok, let's check the statistics. All should be present because we initialize
+ // all of them in server constructor. This piece of code is mainly reffered
+ // to previous situation when Kea used lazy initialization of statistics.
using namespace isc::stats;
StatsMgr& mgr = StatsMgr::instance();
ObservationPtr pkt6_rcvd = mgr.getObservation("pkt6-received");
ObservationPtr pkt6_request_rcvd = mgr.getObservation("pkt6-request-received");
ObservationPtr pkt6_reply_sent = mgr.getObservation("pkt6-reply-sent");
ObservationPtr pkt6_sent = mgr.getObservation("pkt6-sent");
- EXPECT_FALSE(pkt6_rcvd);
- EXPECT_FALSE(pkt6_solicit_rcvd);
- EXPECT_FALSE(pkt6_adv_sent);
- EXPECT_FALSE(pkt6_request_rcvd);
- EXPECT_FALSE(pkt6_reply_sent);
- EXPECT_FALSE(pkt6_sent);
+ EXPECT_TRUE(pkt6_rcvd);
+ EXPECT_TRUE(pkt6_solicit_rcvd);
+ EXPECT_TRUE(pkt6_adv_sent);
+ EXPECT_TRUE(pkt6_request_rcvd);
+ EXPECT_TRUE(pkt6_reply_sent);
+ EXPECT_TRUE(pkt6_sent);
// Perform 4-way exchange.
ASSERT_NO_THROW(client.doSARR());