From: Razvan Becheriu Date: Mon, 12 Oct 2020 10:43:49 +0000 (+0300) Subject: [#1405] fixed unittests X-Git-Tag: Kea-1.9.2~144 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c2a25a85ebdfe837a5d5eff0249714825a6152b3;p=thirdparty%2Fkea.git [#1405] fixed unittests --- diff --git a/src/lib/dhcpsrv/parsers/reservation_modes_parser.cc b/src/lib/dhcpsrv/parsers/reservation_modes_parser.cc index 978412d7a6..cf14ff407f 100644 --- a/src/lib/dhcpsrv/parsers/reservation_modes_parser.cc +++ b/src/lib/dhcpsrv/parsers/reservation_modes_parser.cc @@ -28,28 +28,32 @@ HostReservationModesParser::parse(const ConstElementPtr& control_elem) { ConstElementPtr elem; uint8_t flags = 0; - elem = control_elem->get("global"); - if (elem) { - bool value = elem->boolValue(); - if (value) { - flags |= Network::HR_GLOBAL; + try { + elem = control_elem->get("global"); + if (elem) { + bool value = elem->boolValue(); + if (value) { + flags |= Network::HR_GLOBAL; + } } - } - elem = control_elem->get("in-subnet"); - if (elem) { - bool value = elem->boolValue(); - if (value) { - flags |= Network::HR_IN_SUBNET; + elem = control_elem->get("in-subnet"); + if (elem) { + bool value = elem->boolValue(); + if (value) { + flags |= Network::HR_IN_SUBNET; + } } - } - elem = control_elem->get("out-of-pool"); - if (elem) { - bool value = elem->boolValue(); - if (value) { - flags |= Network::HR_OUT_OF_POOL; + elem = control_elem->get("out-of-pool"); + if (elem) { + bool value = elem->boolValue(); + if (value) { + flags |= Network::HR_OUT_OF_POOL; + } } + } catch (const Exception& ex) { + isc_throw(DhcpConfigError, "error parsing element: " << ex.what()); } return (static_cast(flags)); diff --git a/src/lib/dhcpsrv/tests/reservation_modes_parser_unittest.cc b/src/lib/dhcpsrv/tests/reservation_modes_parser_unittest.cc index 7800067aa1..d72a556f94 100644 --- a/src/lib/dhcpsrv/tests/reservation_modes_parser_unittest.cc +++ b/src/lib/dhcpsrv/tests/reservation_modes_parser_unittest.cc @@ -51,39 +51,127 @@ TEST_F(HostReservationModesParserTest, validContent) { struct Scenario { std::string description_; std::string json_; + uint8_t expected_result_; }; std::vector scenarios = { { - "queue disabled", + "reservation modes disabled", "{ \n" - " \"enable-queue\": false \n" - "} \n" + " \"global\": false, \n" + " \"in-subnet\": false, \n" + " \"out-of-pool\": false \n" + "} \n", + Network::HR_DISABLED }, { - "queue disabled, arbitrary content allowed", + "reservation modes global enabled", "{ \n" - " \"enable-queue\": false, \n" - " \"foo\": \"bogus\", \n" - " \"random-int\" : 1234 \n" - "} \n" + " \"global\": true, \n" + " \"in-subnet\": false, \n" + " \"out-of-pool\": false \n" + "} \n", + Network::HR_GLOBAL }, { - "queue enabled, with queue-type", + "reservation modes in-subnet enabled", "{ \n" - " \"enable-queue\": true, \n" - " \"queue-type\": \"some-type\" \n" - "} \n" + " \"global\": false, \n" + " \"in-subnet\": true, \n" + " \"out-of-pool\": false \n" + "} \n", + Network::HR_IN_SUBNET }, { - "queue enabled with queue-type and arbitrary content", + "reservation modes global and in-subnet enabled", "{ \n" - " \"enable-queue\": true, \n" - " \"queue-type\": \"some-type\", \n" - " \"foo\": \"bogus\", \n" - " \"random-int\" : 1234 \n" - "} \n" - } + " \"global\": true, \n" + " \"in-subnet\": true, \n" + " \"out-of-pool\": false \n" + "} \n", + Network::HR_GLOBAL|Network::HR_IN_SUBNET + }, + { + "reservation modes out-of-pool enabled", + "{ \n" + " \"global\": false, \n" + " \"in-subnet\": false, \n" + " \"out-of-pool\": true \n" + "} \n", + Network::HR_OUT_OF_POOL + }, + { + "reservation modes global and out-of-pool enabled", + "{ \n" + " \"global\": true, \n" + " \"in-subnet\": false, \n" + " \"out-of-pool\": true \n" + "} \n", + Network::HR_GLOBAL|Network::HR_OUT_OF_POOL + }, + { + "reservation modes in-subnet and out-of-pool enabled", + "{ \n" + " \"global\": false, \n" + " \"in-subnet\": true, \n" + " \"out-of-pool\": true \n" + "} \n", + Network::HR_IN_SUBNET|Network::HR_OUT_OF_POOL + }, + { + "reservation modes global, in-subnet and out-of-pool enabled", + "{ \n" + " \"global\": true, \n" + " \"in-subnet\": true, \n" + " \"out-of-pool\": true \n" + "} \n", + Network::HR_GLOBAL|Network::HR_IN_SUBNET|Network::HR_OUT_OF_POOL + }, + { + "only global", + "{ \n" + " \"global\": true \n" + "} \n", + Network::HR_GLOBAL + }, + { + "only in-subnet", + "{ \n" + " \"in-subnet\": true \n" + "} \n", + Network::HR_IN_SUBNET + }, + { + "only out-of-pool", + "{ \n" + " \"out-of-pool\": true \n" + "} \n", + Network::HR_OUT_OF_POOL + }, + { + "only global and in-subnet", + "{ \n" + " \"global\": true, \n" + " \"in-subnet\": true \n" + "} \n", + Network::HR_GLOBAL|Network::HR_IN_SUBNET + }, + { + "only global and out-of-pool", + "{ \n" + " \"global\": true, \n" + " \"out-of-pool\": true \n" + "} \n", + Network::HR_GLOBAL|Network::HR_OUT_OF_POOL + }, + { + "only in-subnet and out-of-pool", + "{ \n" + " \"in-subnet\": true, \n" + " \"out-of-pool\": true \n" + "} \n", + Network::HR_IN_SUBNET|Network::HR_OUT_OF_POOL + }, }; // Iterate over the valid scenarios and verify they succeed. @@ -105,7 +193,7 @@ TEST_F(HostReservationModesParserTest, validContent) { } // Verify the resultant reservation-modes. - ASSERT_TRUE(reservation_modes); + ASSERT_EQ(scenario.expected_result_, reservation_modes); } } } @@ -120,28 +208,21 @@ TEST_F(HostReservationModesParserTest, invalidContent) { std::vector scenarios = { { - "enable-queue missing", - "{ \n" - " \"enable-type\": \"some-type\" \n" - "} \n" - }, - { - "enable-queue not boolean", + "global not boolean", "{ \n" - " \"enable-queue\": \"always\" \n" + " \"global\": \"always\" \n" "} \n" }, { - "queue enabled, type missing", + "in-subnet not boolean", "{ \n" - " \"enable-queue\": true \n" + " \"in-subnet\": \"always\" \n" "} \n" }, { - "queue enabled, type not a string", + "out-of-pool not boolean", "{ \n" - " \"enable-queue\": true, \n" - " \"queue-type\": 7777 \n" + " \"out-of-pool\": \"always\" \n" "} \n" } };