summaryrefslogtreecommitdiffstats
path: root/src/lib/yang/tests/adaptor_host_unittests.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/yang/tests/adaptor_host_unittests.cc')
-rw-r--r--src/lib/yang/tests/adaptor_host_unittests.cc119
1 files changed, 119 insertions, 0 deletions
diff --git a/src/lib/yang/tests/adaptor_host_unittests.cc b/src/lib/yang/tests/adaptor_host_unittests.cc
new file mode 100644
index 0000000..95eb3a2
--- /dev/null
+++ b/src/lib/yang/tests/adaptor_host_unittests.cc
@@ -0,0 +1,119 @@
+// 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 <testutils/gtest_utils.h>
+#include <yang/adaptor_host.h>
+
+#include <gtest/gtest.h>
+
+using namespace std;
+using namespace isc;
+using namespace isc::data;
+using namespace isc::yang;
+
+namespace {
+
+// Verifies that quoteIdentifier does not touch an identifier which
+// has a type different from flex-d.
+TEST(AdaptorHostTest, notFlexId) {
+ string config = "{\n"
+ " \"hw-address\": \"1a:1b:1c:1d:1e:1f\",\n"
+ " \"ip-address\": \"192.0.2.201\"\n"
+ "}";
+ ElementPtr json;
+ ASSERT_NO_THROW_LOG(json = Element::fromJSON(config));
+ ConstElementPtr copied = copy(json);
+ EXPECT_NO_THROW(AdaptorHost::quoteIdentifier(json));
+ EXPECT_TRUE(copied->equals(*json));
+}
+
+// Verifies that quoteIdentifier does not touch a flex-id identifier
+// without quotes.
+TEST(AdaptorHostTest, noQuote) {
+ string config = "{\n"
+ " \"flex-id\": \"s0mEVaLue\",\n"
+ " \"ip-address\": \"192.0.2.206\"\n"
+ "}";
+ ElementPtr json;
+ ASSERT_NO_THROW_LOG(json = Element::fromJSON(config));
+ ConstElementPtr copied = copy(json);
+ EXPECT_NO_THROW(AdaptorHost::quoteIdentifier(json));
+ EXPECT_TRUE(copied->equals(*json));
+}
+
+// Verifies that quoteIdentifier removes quotes from a flex-id identifier.
+TEST(AdaptorHostTest, quotes) {
+ string config = "{\n"
+ " \"flex-id\": \"'somevalue'\",\n"
+ " \"ip-addresses\": \"2001:db8:1:cafe::2\"\n"
+ "}";
+ ElementPtr json;
+ ASSERT_NO_THROW_LOG(json = Element::fromJSON(config));
+ ConstElementPtr copied = copy(json);
+ EXPECT_NO_THROW(AdaptorHost::quoteIdentifier(json));
+ EXPECT_FALSE(copied->equals(*json));
+ ConstElementPtr id = json->get("flex-id");
+ ASSERT_TRUE(id);
+ ASSERT_EQ(Element::string, id->getType());
+ EXPECT_EQ("73:6f:6d:65:76:61:6c:75:65", id->stringValue());
+}
+
+// Verifies that quoteIdentifier removes quotes from a flex-id identifier
+// but does not interpret a quote in the middle.
+TEST(AdaptorHostTest, extraQuote) {
+ string config = "{\n"
+ " \"flex-id\": \"'some'value'\",\n"
+ " \"ip-addresses\": \"2001:db8:1:cafe::2\"\n"
+ "}";
+ ElementPtr json;
+ ASSERT_NO_THROW_LOG(json = Element::fromJSON(config));
+ ConstElementPtr copied = copy(json);
+ EXPECT_NO_THROW(AdaptorHost::quoteIdentifier(json));
+ EXPECT_FALSE(copied->equals(*json));
+ ConstElementPtr id = json->get("flex-id");
+ ASSERT_TRUE(id);
+ ASSERT_EQ(Element::string, id->getType());
+ EXPECT_EQ("73:6f:6d:65:27:76:61:6c:75:65", id->stringValue());
+}
+
+// Verifies that quoteIdentifier works on not standard characters too.
+TEST(AdaptorHostTest, notStandard) {
+ string config = "{\n"
+ " \"flex-id\": \"'some\\\"value'\",\n"
+ " \"ip-addresses\": \"2001:db8:1:cafe::2\"\n"
+ "}";
+ ElementPtr json;
+ ASSERT_NO_THROW_LOG(json = Element::fromJSON(config));
+ ConstElementPtr copied = copy(json);
+ EXPECT_NO_THROW(AdaptorHost::quoteIdentifier(json));
+ EXPECT_FALSE(copied->equals(*json));
+ ConstElementPtr id = json->get("flex-id");
+ ASSERT_TRUE(id);
+ ASSERT_EQ(Element::string, id->getType());
+ EXPECT_EQ("73:6f:6d:65:22:76:61:6c:75:65", id->stringValue());
+}
+
+// Verifies that quoteIdentifier works on not standard characters too
+// even without quotes.
+TEST(AdaptorHostTest, notQuoted) {
+ string config = "{\n"
+ " \"flex-id\": \"some\\\"value\",\n"
+ " \"ip-addresses\": \"2001:db8:1:cafe::2\"\n"
+ "}";
+ ElementPtr json;
+ ASSERT_NO_THROW_LOG(json = Element::fromJSON(config));
+ ConstElementPtr copied = copy(json);
+ EXPECT_NO_THROW(AdaptorHost::quoteIdentifier(json));
+ EXPECT_FALSE(copied->equals(*json));
+ ConstElementPtr id = json->get("flex-id");
+ ASSERT_TRUE(id);
+ ASSERT_EQ(Element::string, id->getType());
+ EXPECT_EQ("73:6f:6d:65:22:76:61:6c:75:65", id->stringValue());
+}
+
+} // namespace