summaryrefslogtreecommitdiffstats
path: root/src/lib/yang/tests/translator_class_unittests.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/yang/tests/translator_class_unittests.cc')
-rw-r--r--src/lib/yang/tests/translator_class_unittests.cc125
1 files changed, 125 insertions, 0 deletions
diff --git a/src/lib/yang/tests/translator_class_unittests.cc b/src/lib/yang/tests/translator_class_unittests.cc
new file mode 100644
index 0000000..3dcb518
--- /dev/null
+++ b/src/lib/yang/tests/translator_class_unittests.cc
@@ -0,0 +1,125 @@
+// Copyright (C) 2018-2021 Internet Systems Consortium, Inc. ("ISC")
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#include <config.h>
+
+#include <yang/translator_class.h>
+#include <yang/yang_models.h>
+#include <yang/tests/sysrepo_setup.h>
+
+#include <gtest/gtest.h>
+#include <sstream>
+
+using namespace std;
+using namespace isc;
+using namespace isc::data;
+using namespace isc::yang;
+using namespace isc::yang::test;
+using namespace sysrepo;
+
+namespace {
+
+/// @brief Translator name.
+extern char const client_classes[] = "client classes";
+
+/// @brief Test fixture class for @ref TranslatorClasses.
+class TranslatorClassesTestv4 :
+ public GenericTranslatorTest<client_classes, TranslatorClasses> {
+public:
+
+ /// Constructor.
+ TranslatorClassesTestv4() {
+ model_ = KEA_DHCP4_SERVER;
+ }
+};
+class TranslatorClassesTestv6 :
+ public GenericTranslatorTest<client_classes, TranslatorClasses> {
+public:
+
+ /// Constructor.
+ TranslatorClassesTestv6() {
+ model_ = KEA_DHCP6_SERVER;
+ }
+};
+
+// This test verifies that an empty client class list can be properly
+// translated from YANG to JSON.
+TEST_F(TranslatorClassesTestv4, getEmpty) {
+ // Get the client class list and check if it is empty.
+ const string& xpath = "/kea-dhcp4-server:config";
+ ConstElementPtr classes;
+ EXPECT_NO_THROW(classes = t_obj_->getClasses(xpath));
+ EXPECT_FALSE(classes);
+}
+
+// This test verifies that one client class can be properly translated
+// from YANG to JSON.
+TEST_F(TranslatorClassesTestv6, get) {
+ // Create the client class.
+ const string& xpath = "/kea-dhcp6-server:config";
+ const string& xclass = xpath + "/client-class[name='foo']";
+ const string& xtest = xclass + "/test";
+ S_Val v_test(new Val("not member('ALL')", SR_STRING_T));
+ EXPECT_NO_THROW(sess_->set_item(xtest.c_str(), v_test));
+
+ // Get the client class.
+ ConstElementPtr cclass;
+ EXPECT_NO_THROW(cclass = t_obj_->getClass(xclass));
+ ASSERT_TRUE(cclass);
+ ElementPtr expected = Element::createMap();
+ expected->set("name", Element::create(string("foo")));
+ expected->set("test", Element::create(string("not member('ALL')")));
+ EXPECT_TRUE(expected->equals(*cclass));
+
+ // Get the client class list and check if the client class is in it.
+ ConstElementPtr classes;
+ EXPECT_NO_THROW(classes = t_obj_->getClasses(xpath));
+ ASSERT_TRUE(classes);
+ ASSERT_EQ(Element::list, classes->getType());
+ ASSERT_EQ(1, classes->size());
+ EXPECT_TRUE(cclass->equals(*classes->get(0)));
+}
+
+// This test verifies that an empty client class list can be properly
+// translated from JSON to YANG.
+TEST_F(TranslatorClassesTestv4, setEmpty) {
+ // Set empty list.
+ const string& xpath = "/kea-dhcp4-server:config";
+ ConstElementPtr classes = Element::createList();
+ EXPECT_NO_THROW(t_obj_->setClasses(xpath, classes));
+
+ // Get it back.
+ classes.reset();
+ EXPECT_NO_THROW(classes = t_obj_->getClasses(xpath));
+ EXPECT_FALSE(classes);
+}
+
+// This test verifies that one client class can be properly translated
+// from JSON to YANG.
+TEST_F(TranslatorClassesTestv6, set) {
+ // Set one client class.
+ const string& xpath = "/kea-dhcp6-server:config";
+ ElementPtr classes = Element::createList();
+ ElementPtr cclass = Element::createMap();
+ cclass->set("name", Element::create(string("foo")));
+ cclass->set("test", Element::create(string("''==''")));
+ cclass->set("only-if-required", Element::create(false));
+ classes->add(cclass);
+ EXPECT_NO_THROW(t_obj_->setClasses(xpath, classes));
+
+ // Get it back.
+ ConstElementPtr got;
+ EXPECT_NO_THROW(got = t_obj_->getClasses(xpath));
+ ASSERT_TRUE(got);
+ ASSERT_EQ(Element::list, got->getType());
+ ASSERT_EQ(1, got->size());
+ EXPECT_TRUE(cclass->equals(*got->get(0)));
+
+ // Check it validates.
+ EXPECT_NO_THROW(sess_->validate());
+}
+
+} // namespace