From: Razvan Becheriu Date: Wed, 24 Jul 2019 05:48:19 +0000 (+0300) Subject: [#729,!434] change order of functions in file X-Git-Tag: Kea-1.7.0~36 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cfd5a7ea4fba31b8ed9a1dcad0094f55d1c2c966;p=thirdparty%2Fkea.git [#729,!434] change order of functions in file --- diff --git a/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc b/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc index 30d00cc791..0c8e3c730a 100644 --- a/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc +++ b/src/bin/dhcp4/tests/ctrl_dhcp4_srv_unittest.cc @@ -452,6 +452,161 @@ TEST_F(CtrlChannelDhcpv4SrvTest, libreload) { EXPECT_TRUE(checkMarkerFile(LOAD_MARKER_FILE, "1212")); } +// This test checks which commands are registered by the DHCPv4 server. +TEST_F(CtrlChannelDhcpv4SrvTest, commandsRegistration) { + + ConstElementPtr list_cmds = createCommand("list-commands"); + ConstElementPtr answer; + + // By default the list should be empty (except the standard list-commands + // supported by the CommandMgr itself) + EXPECT_NO_THROW(answer = CommandMgr::instance().processCommand(list_cmds)); + ASSERT_TRUE(answer); + ASSERT_TRUE(answer->get("arguments")); + EXPECT_EQ("[ \"list-commands\" ]", answer->get("arguments")->str()); + + // Created server should register several additional commands. + ASSERT_NO_THROW( + server_.reset(new NakedControlledDhcpv4Srv()); + ); + + EXPECT_NO_THROW(answer = CommandMgr::instance().processCommand(list_cmds)); + ASSERT_TRUE(answer); + + ASSERT_TRUE(answer->get("arguments")); + std::string command_list = answer->get("arguments")->str(); + + EXPECT_TRUE(command_list.find("\"list-commands\"") != string::npos); + EXPECT_TRUE(command_list.find("\"build-report\"") != string::npos); + EXPECT_TRUE(command_list.find("\"config-get\"") != string::npos); + EXPECT_TRUE(command_list.find("\"config-set\"") != string::npos); + EXPECT_TRUE(command_list.find("\"config-write\"") != string::npos); + EXPECT_TRUE(command_list.find("\"leases-reclaim\"") != string::npos); + EXPECT_TRUE(command_list.find("\"libreload\"") != string::npos); + EXPECT_TRUE(command_list.find("\"server-tag-get\"") != string::npos); + EXPECT_TRUE(command_list.find("\"shutdown\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-get\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-get-all\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-remove\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-remove-all\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-reset\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-reset-all\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-sample-age-set\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-sample-age-set-all\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-sample-count-set\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-sample-count-set-all\"") != string::npos); + EXPECT_TRUE(command_list.find("\"version-get\"") != string::npos); + + // Ok, and now delete the server. It should deregister its commands. + server_.reset(); + + // The list should be (almost) empty again. + EXPECT_NO_THROW(answer = CommandMgr::instance().processCommand(list_cmds)); + ASSERT_TRUE(answer); + ASSERT_TRUE(answer->get("arguments")); + EXPECT_EQ("[ \"list-commands\" ]", answer->get("arguments")->str()); +} + +// Tests that the server properly responds to invalid commands sent +// via ControlChannel +TEST_F(CtrlChannelDhcpv4SrvTest, controlChannelNegative) { + createUnixChannelServer(); + std::string response; + + sendUnixCommand("{ \"command\": \"bogus\" }", response); + EXPECT_EQ("{ \"result\": 2," + " \"text\": \"'bogus' command not supported.\" }", response); + + sendUnixCommand("utter nonsense", response); + EXPECT_EQ("{ \"result\": 1, " + "\"text\": \"invalid first character u\" }", + response); +} + +// Tests that the server properly responds to shtudown command sent +// via ControlChannel +TEST_F(CtrlChannelDhcpv4SrvTest, controlChannelShutdown) { + createUnixChannelServer(); + std::string response; + + sendUnixCommand("{ \"command\": \"shutdown\" }", response); + EXPECT_EQ("{ \"result\": 0, \"text\": \"Shutting down.\" }",response); +} + +// 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 Dhcpv4 statistics. +TEST_F(CtrlChannelDhcpv4SrvTest, 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); + EXPECT_EQ("{ \"arguments\": { }, \"result\": 0 }", 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); +} + // Check that the "config-set" command will replace current configuration TEST_F(CtrlChannelDhcpv4SrvTest, configSet) { createUnixChannelServer(); @@ -626,6 +781,30 @@ TEST_F(CtrlChannelDhcpv4SrvTest, configSet) { CfgMgr::instance().clear(); } +// Tests if the server returns its configuration using config-get. +// Note there are separate tests that verify if toElement() called by the +// config-get handler are actually converting the configuration correctly. +TEST_F(CtrlChannelDhcpv4SrvTest, configGet) { + createUnixChannelServer(); + std::string response; + + sendUnixCommand("{ \"command\": \"config-get\" }", response); + ConstElementPtr rsp; + + // The response should be a valid JSON. + EXPECT_NO_THROW(rsp = Element::fromJSON(response)); + ASSERT_TRUE(rsp); + + int status; + ConstElementPtr cfg = parseAnswer(status, rsp); + EXPECT_EQ(CONTROL_RESULT_SUCCESS, status); + + // Ok, now roughly check if the response seems legit. + ASSERT_TRUE(cfg); + ASSERT_EQ(Element::map, cfg->getType()); + EXPECT_TRUE(cfg->get("Dhcp4")); +} + // Verify that the "config-test" command will do what we expect. TEST_F(CtrlChannelDhcpv4SrvTest, configTest) { createUnixChannelServer(); @@ -771,86 +950,6 @@ TEST_F(CtrlChannelDhcpv4SrvTest, configTest) { // Clean up after the test. CfgMgr::instance().clear(); } -// This test checks which commands are registered by the DHCPv4 server. -TEST_F(CtrlChannelDhcpv4SrvTest, commandsRegistration) { - - ConstElementPtr list_cmds = createCommand("list-commands"); - ConstElementPtr answer; - - // By default the list should be empty (except the standard list-commands - // supported by the CommandMgr itself) - EXPECT_NO_THROW(answer = CommandMgr::instance().processCommand(list_cmds)); - ASSERT_TRUE(answer); - ASSERT_TRUE(answer->get("arguments")); - EXPECT_EQ("[ \"list-commands\" ]", answer->get("arguments")->str()); - - // Created server should register several additional commands. - ASSERT_NO_THROW( - server_.reset(new NakedControlledDhcpv4Srv()); - ); - - EXPECT_NO_THROW(answer = CommandMgr::instance().processCommand(list_cmds)); - ASSERT_TRUE(answer); - - ASSERT_TRUE(answer->get("arguments")); - std::string command_list = answer->get("arguments")->str(); - - EXPECT_TRUE(command_list.find("\"list-commands\"") != string::npos); - EXPECT_TRUE(command_list.find("\"build-report\"") != string::npos); - EXPECT_TRUE(command_list.find("\"config-get\"") != string::npos); - EXPECT_TRUE(command_list.find("\"config-set\"") != string::npos); - EXPECT_TRUE(command_list.find("\"config-write\"") != string::npos); - EXPECT_TRUE(command_list.find("\"leases-reclaim\"") != string::npos); - EXPECT_TRUE(command_list.find("\"libreload\"") != string::npos); - EXPECT_TRUE(command_list.find("\"server-tag-get\"") != string::npos); - EXPECT_TRUE(command_list.find("\"shutdown\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-get\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-get-all\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-remove\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-remove-all\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-reset\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-reset-all\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-sample-age-set\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-sample-age-set-all\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-sample-count-set\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-sample-count-set-all\"") != string::npos); - EXPECT_TRUE(command_list.find("\"version-get\"") != string::npos); - - // Ok, and now delete the server. It should deregister its commands. - server_.reset(); - - // The list should be (almost) empty again. - EXPECT_NO_THROW(answer = CommandMgr::instance().processCommand(list_cmds)); - ASSERT_TRUE(answer); - ASSERT_TRUE(answer->get("arguments")); - EXPECT_EQ("[ \"list-commands\" ]", answer->get("arguments")->str()); -} - -// Tests that the server properly responds to invalid commands sent -// via ControlChannel -TEST_F(CtrlChannelDhcpv4SrvTest, controlChannelNegative) { - createUnixChannelServer(); - std::string response; - - sendUnixCommand("{ \"command\": \"bogus\" }", response); - EXPECT_EQ("{ \"result\": 2," - " \"text\": \"'bogus' command not supported.\" }", response); - - sendUnixCommand("utter nonsense", response); - EXPECT_EQ("{ \"result\": 1, " - "\"text\": \"invalid first character u\" }", - response); -} - -// Tests that the server properly responds to shtudown command sent -// via ControlChannel -TEST_F(CtrlChannelDhcpv4SrvTest, controlChannelShutdown) { - createUnixChannelServer(); - std::string response; - - sendUnixCommand("{ \"command\": \"shutdown\" }", response); - EXPECT_EQ("{ \"result\": 0, \"text\": \"Shutting down.\" }",response); -} // This test verifies that the DHCP server handles version-get commands TEST_F(CtrlChannelDhcpv4SrvTest, getversion) { @@ -870,6 +969,26 @@ TEST_F(CtrlChannelDhcpv4SrvTest, getversion) { EXPECT_TRUE(response.find("GTEST_VERSION") != string::npos); } +// This test verifies that the DHCP server handles server-tag-get command +TEST_F(CtrlChannelDhcpv4SrvTest, serverTagGet) { + createUnixChannelServer(); + + std::string response; + std::string expected; + + // Send the server-tag-get command + sendUnixCommand("{ \"command\": \"server-tag-get\" }", response); + expected = "{ \"arguments\": { \"server-tag\": \"\" }, \"result\": 0 }"; + EXPECT_EQ(expected, response); + + // Set a value to the server tag + CfgMgr::instance().getCurrentCfg()->setServerTag("foobar"); + + // Retry... + sendUnixCommand("{ \"command\": \"server-tag-get\" }", response); + expected = "{ \"arguments\": { \"server-tag\": \"foobar\" }, \"result\": 0 }"; +} + // This test verifies that the DHCP server immediately reclaims expired // leases on leases-reclaim command TEST_F(CtrlChannelDhcpv4SrvTest, controlLeasesReclaim) { @@ -967,80 +1086,6 @@ TEST_F(CtrlChannelDhcpv4SrvTest, controlLeasesReclaimRemove) { EXPECT_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 Dhcpv4 statistics. -TEST_F(CtrlChannelDhcpv4SrvTest, 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); - EXPECT_EQ("{ \"arguments\": { }, \"result\": 0 }", 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(CtrlChannelDhcpv4SrvTest, listCommands) { @@ -1077,30 +1122,6 @@ TEST_F(CtrlChannelDhcpv4SrvTest, listCommands) { checkListCommands(rsp, "statistic-sample-count-set-all"); } -// Tests if the server returns its configuration using config-get. -// Note there are separate tests that verify if toElement() called by the -// config-get handler are actually converting the configuration correctly. -TEST_F(CtrlChannelDhcpv4SrvTest, configGet) { - createUnixChannelServer(); - std::string response; - - sendUnixCommand("{ \"command\": \"config-get\" }", response); - ConstElementPtr rsp; - - // The response should be a valid JSON. - EXPECT_NO_THROW(rsp = Element::fromJSON(response)); - ASSERT_TRUE(rsp); - - int status; - ConstElementPtr cfg = parseAnswer(status, rsp); - EXPECT_EQ(CONTROL_RESULT_SUCCESS, status); - - // Ok, now roughly check if the response seems legit. - ASSERT_TRUE(cfg); - ASSERT_EQ(Element::map, cfg->getType()); - EXPECT_TRUE(cfg->get("Dhcp4")); -} - // Tests if config-write can be called without any parameters. TEST_F(CtrlChannelDhcpv4SrvTest, configWriteNoFilename) { createUnixChannelServer(); diff --git a/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc b/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc index 245c244bdc..0b52993f79 100644 --- a/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc +++ b/src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc @@ -468,6 +468,164 @@ TEST_F(CtrlChannelDhcpv6SrvTest, libreload) { EXPECT_TRUE(checkMarkerFile(LOAD_MARKER_FILE, "1212")); } +typedef std::map ElementMap; + +// This test checks which commands are registered by the DHCPv6 server. +TEST_F(CtrlDhcpv6SrvTest, commandsRegistration) { + + ConstElementPtr list_cmds = createCommand("list-commands"); + ConstElementPtr answer; + + // By default the list should be empty (except the standard list-commands + // supported by the CommandMgr itself) + EXPECT_NO_THROW(answer = CommandMgr::instance().processCommand(list_cmds)); + ASSERT_TRUE(answer); + ASSERT_TRUE(answer->get("arguments")); + EXPECT_EQ("[ \"list-commands\" ]", answer->get("arguments")->str()); + + // Created server should register several additional commands. + boost::scoped_ptr srv; + ASSERT_NO_THROW( + srv.reset(new ControlledDhcpv6Srv(0)); + ); + + EXPECT_NO_THROW(answer = CommandMgr::instance().processCommand(list_cmds)); + ASSERT_TRUE(answer); + + ASSERT_TRUE(answer->get("arguments")); + std::string command_list = answer->get("arguments")->str(); + + EXPECT_TRUE(command_list.find("\"list-commands\"") != string::npos); + EXPECT_TRUE(command_list.find("\"build-report\"") != string::npos); + EXPECT_TRUE(command_list.find("\"config-get\"") != string::npos); + EXPECT_TRUE(command_list.find("\"config-set\"") != string::npos); + EXPECT_TRUE(command_list.find("\"config-write\"") != string::npos); + EXPECT_TRUE(command_list.find("\"leases-reclaim\"") != string::npos); + EXPECT_TRUE(command_list.find("\"libreload\"") != string::npos); + EXPECT_TRUE(command_list.find("\"server-tag-get\"") != string::npos); + EXPECT_TRUE(command_list.find("\"shutdown\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-get\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-get-all\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-remove\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-remove-all\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-reset\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-reset-all\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-sample-age-set\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-sample-age-set-all\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-sample-count-set\"") != string::npos); + EXPECT_TRUE(command_list.find("\"statistic-sample-count-set-all\"") != string::npos); + EXPECT_TRUE(command_list.find("\"version-get\"") != string::npos); + + // Ok, and now delete the server. It should deregister its commands. + srv.reset(); + + // The list should be (almost) empty again. + EXPECT_NO_THROW(answer = CommandMgr::instance().processCommand(list_cmds)); + ASSERT_TRUE(answer); + ASSERT_TRUE(answer->get("arguments")); + EXPECT_EQ("[ \"list-commands\" ]", answer->get("arguments")->str()); +} + +// Tests that the server properly responds to invalid commands sent +// via ControlChannel +TEST_F(CtrlChannelDhcpv6SrvTest, controlChannelNegative) { + createUnixChannelServer(); + std::string response; + + sendUnixCommand("{ \"command\": \"bogus\" }", response); + EXPECT_EQ("{ \"result\": 2," + " \"text\": \"'bogus' command not supported.\" }", response); + + sendUnixCommand("utter nonsense", response); + EXPECT_EQ("{ \"result\": 1, " + "\"text\": \"invalid first character u\" }", + response); +} + +// Tests that the server properly responds to shtudown command sent +// via ControlChannel +TEST_F(CtrlChannelDhcpv6SrvTest, controlChannelShutdown) { + createUnixChannelServer(); + std::string response; + + sendUnixCommand("{ \"command\": \"shutdown\" }", response); + EXPECT_EQ("{ \"result\": 0, \"text\": \"Shutting down.\" }",response); +} + +// 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); + EXPECT_EQ("{ \"arguments\": { }, \"result\": 0 }", 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); +} + // Check that the "config-set" command will replace current configuration TEST_F(CtrlChannelDhcpv6SrvTest, configSet) { createUnixChannelServer(); @@ -643,6 +801,30 @@ TEST_F(CtrlChannelDhcpv6SrvTest, configSet) { CfgMgr::instance().clear(); } +// Tests if the server returns its configuration using config-get. +// Note there are separate tests that verify if toElement() called by the +// get-config handler are actually converting the configuration correctly. +TEST_F(CtrlChannelDhcpv6SrvTest, configGet) { + createUnixChannelServer(); + std::string response; + + sendUnixCommand("{ \"command\": \"config-get\" }", response); + ConstElementPtr rsp; + + // The response should be a valid JSON. + EXPECT_NO_THROW(rsp = Element::fromJSON(response)); + ASSERT_TRUE(rsp); + + int status; + ConstElementPtr cfg = parseAnswer(status, rsp); + EXPECT_EQ(CONTROL_RESULT_SUCCESS, status); + + // Ok, now roughly check if the response seems legit. + ASSERT_TRUE(cfg); + ASSERT_EQ(Element::map, cfg->getType()); + EXPECT_TRUE(cfg->get("Dhcp6")); +} + // Verify that the "config-test" command will do what we expect. TEST_F(CtrlChannelDhcpv6SrvTest, configTest) { createUnixChannelServer(); @@ -790,90 +972,6 @@ TEST_F(CtrlChannelDhcpv6SrvTest, configTest) { CfgMgr::instance().clear(); } -typedef std::map ElementMap; - -// This test checks which commands are registered by the DHCPv6 server. -TEST_F(CtrlDhcpv6SrvTest, commandsRegistration) { - - ConstElementPtr list_cmds = createCommand("list-commands"); - ConstElementPtr answer; - - // By default the list should be empty (except the standard list-commands - // supported by the CommandMgr itself) - EXPECT_NO_THROW(answer = CommandMgr::instance().processCommand(list_cmds)); - ASSERT_TRUE(answer); - ASSERT_TRUE(answer->get("arguments")); - EXPECT_EQ("[ \"list-commands\" ]", answer->get("arguments")->str()); - - // Created server should register several additional commands. - boost::scoped_ptr srv; - ASSERT_NO_THROW( - srv.reset(new ControlledDhcpv6Srv(0)); - ); - - EXPECT_NO_THROW(answer = CommandMgr::instance().processCommand(list_cmds)); - ASSERT_TRUE(answer); - - ASSERT_TRUE(answer->get("arguments")); - std::string command_list = answer->get("arguments")->str(); - - EXPECT_TRUE(command_list.find("\"list-commands\"") != string::npos); - EXPECT_TRUE(command_list.find("\"build-report\"") != string::npos); - EXPECT_TRUE(command_list.find("\"config-get\"") != string::npos); - EXPECT_TRUE(command_list.find("\"config-set\"") != string::npos); - EXPECT_TRUE(command_list.find("\"config-write\"") != string::npos); - EXPECT_TRUE(command_list.find("\"leases-reclaim\"") != string::npos); - EXPECT_TRUE(command_list.find("\"libreload\"") != string::npos); - EXPECT_TRUE(command_list.find("\"server-tag-get\"") != string::npos); - EXPECT_TRUE(command_list.find("\"shutdown\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-get\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-get-all\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-remove\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-remove-all\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-reset\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-reset-all\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-sample-age-set\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-sample-age-set-all\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-sample-count-set\"") != string::npos); - EXPECT_TRUE(command_list.find("\"statistic-sample-count-set-all\"") != string::npos); - EXPECT_TRUE(command_list.find("\"version-get\"") != string::npos); - - // Ok, and now delete the server. It should deregister its commands. - srv.reset(); - - // The list should be (almost) empty again. - EXPECT_NO_THROW(answer = CommandMgr::instance().processCommand(list_cmds)); - ASSERT_TRUE(answer); - ASSERT_TRUE(answer->get("arguments")); - EXPECT_EQ("[ \"list-commands\" ]", answer->get("arguments")->str()); -} - -// Tests that the server properly responds to invalid commands sent -// via ControlChannel -TEST_F(CtrlChannelDhcpv6SrvTest, controlChannelNegative) { - createUnixChannelServer(); - std::string response; - - sendUnixCommand("{ \"command\": \"bogus\" }", response); - EXPECT_EQ("{ \"result\": 2," - " \"text\": \"'bogus' command not supported.\" }", response); - - sendUnixCommand("utter nonsense", response); - EXPECT_EQ("{ \"result\": 1, " - "\"text\": \"invalid first character u\" }", - response); -} - -// Tests that the server properly responds to shtudown command sent -// via ControlChannel -TEST_F(CtrlChannelDhcpv6SrvTest, controlChannelShutdown) { - createUnixChannelServer(); - std::string response; - - sendUnixCommand("{ \"command\": \"shutdown\" }", response); - EXPECT_EQ("{ \"result\": 0, \"text\": \"Shutting down.\" }",response); -} - // This test verifies that the DHCP server handles version-get commands TEST_F(CtrlChannelDhcpv6SrvTest, getversion) { createUnixChannelServer(); @@ -1017,80 +1115,6 @@ TEST_F(CtrlChannelDhcpv6SrvTest, controlLeasesReclaimRemove) { 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); - EXPECT_EQ("{ \"arguments\": { }, \"result\": 0 }", 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, commandsList) { @@ -1127,30 +1151,6 @@ TEST_F(CtrlChannelDhcpv6SrvTest, commandsList) { checkListCommands(rsp, "statistic-sample-count-set-all"); } -// Tests if the server returns its configuration using config-get. -// Note there are separate tests that verify if toElement() called by the -// get-config handler are actually converting the configuration correctly. -TEST_F(CtrlChannelDhcpv6SrvTest, configGet) { - createUnixChannelServer(); - std::string response; - - sendUnixCommand("{ \"command\": \"config-get\" }", response); - ConstElementPtr rsp; - - // The response should be a valid JSON. - EXPECT_NO_THROW(rsp = Element::fromJSON(response)); - ASSERT_TRUE(rsp); - - int status; - ConstElementPtr cfg = parseAnswer(status, rsp); - EXPECT_EQ(CONTROL_RESULT_SUCCESS, status); - - // Ok, now roughly check if the response seems legit. - ASSERT_TRUE(cfg); - ASSERT_EQ(Element::map, cfg->getType()); - EXPECT_TRUE(cfg->get("Dhcp6")); -} - // Tests if config-write can be called without any parameters. TEST_F(CtrlChannelDhcpv6SrvTest, configWriteNoFilename) { createUnixChannelServer();