From f5f56e1a1c4d9e9496fcb9d81131066a964ccd23 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 13 Apr 2024 14:15:43 +0200 Subject: Adding upstream version 2.4.1. Signed-off-by: Daniel Baumann --- src/lib/dns/tests/rdata_dnskey_unittest.cc | 200 +++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 src/lib/dns/tests/rdata_dnskey_unittest.cc (limited to 'src/lib/dns/tests/rdata_dnskey_unittest.cc') diff --git a/src/lib/dns/tests/rdata_dnskey_unittest.cc b/src/lib/dns/tests/rdata_dnskey_unittest.cc new file mode 100644 index 0000000..6f0866d --- /dev/null +++ b/src/lib/dns/tests/rdata_dnskey_unittest.cc @@ -0,0 +1,200 @@ +// Copyright (C) 2010-2015 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 + +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +using namespace std; +using namespace isc; +using namespace isc::dns; +using namespace isc::util; +using namespace isc::dns::rdata; +using isc::UnitTestUtil; +using isc::util::unittests::matchWireData; + +namespace { +class Rdata_DNSKEY_Test : public RdataTest { +protected: + Rdata_DNSKEY_Test() : + dnskey_txt("257 3 5 BEAAAAOhHQDBrhQbtphgq2wQUpEQ5t4DtUHxoMV" + "Fu2hWLDMvoOMRXjGrhhCeFvAZih7yJHf8ZGfW6hd38hXG/x" + "ylYCO6Krpbdojwx8YMXLA5/kA+u50WIL8ZR1R6KTbsYVMf/" + "Qx5RiNbPClw+vT+U8eXEJmO20jIS1ULgqy347cBB1zMnnz/" + "4LJpA0da9CbKj3A254T515sNIMcwsB8/2+2E63/zZrQzBkj" + "0BrN/9Bexjpiks3jRhZatEsXn3dTy47R09Uix5WcJt+xzqZ" + "7+ysyLKOOedS39Z7SDmsn2eA0FKtQpwA6LXeG2w+jxmw3oA" + "8lVUgEf/rzeC/bByBNsO70aEFTd"), + dnskey_txt2("257 3 5 YmluZDEwLmlzYy5vcmc="), + rdata_dnskey(dnskey_txt), + rdata_dnskey2(dnskey_txt2) + {} + + void checkFromText_None(const string& rdata_str) { + checkFromText( + rdata_str, rdata_dnskey2, false, false); + } + + void checkFromText_InvalidText(const string& rdata_str) { + checkFromText( + rdata_str, rdata_dnskey2, true, true); + } + + void checkFromText_InvalidLength(const string& rdata_str) { + checkFromText( + rdata_str, rdata_dnskey2, true, true); + } + + void checkFromText_BadValue(const string& rdata_str) { + checkFromText( + rdata_str, rdata_dnskey2, true, true); + } + + void checkFromText_LexerError(const string& rdata_str) { + checkFromText + ( + rdata_str, rdata_dnskey2, true, true); + } + + void checkFromText_BadString(const string& rdata_str) { + checkFromText + ( + rdata_str, rdata_dnskey2, true, false); + } + + const string dnskey_txt; + const string dnskey_txt2; + const generic::DNSKEY rdata_dnskey; + const generic::DNSKEY rdata_dnskey2; +}; + +TEST_F(Rdata_DNSKEY_Test, fromText) { + EXPECT_EQ(dnskey_txt, rdata_dnskey.toText()); + + // Space in key data is OK + checkFromText_None("257 3 5 YmluZDEw LmlzYy5vcmc="); + + // Delimited number in key data is OK + checkFromText_None("257 3 5 YmluZDEwLmlzYy 5 vcmc="); + + // Missing keydata is OK + EXPECT_NO_THROW(const generic::DNSKEY rdata_dnskey3("257 3 5")); + + // Key data too short for RSA/MD5 algorithm is OK when + // constructing. But getTag() on this object would throw (see + // .getTag tests). + EXPECT_NO_THROW(const generic::DNSKEY rdata_dnskey4("1 1 1 YQ==")); + + // Flags field out of range + checkFromText_InvalidText("65536 3 5 YmluZDEwLmlzYy5vcmc="); + + // Protocol field out of range + checkFromText_InvalidText("257 256 5 YmluZDEwLmlzYy5vcmc="); + + // Algorithm field out of range + checkFromText_InvalidText("257 3 256 YmluZDEwLmlzYy5vcmc="); + + // Missing algorithm field + checkFromText_LexerError("257 3 YmluZDEwLmlzYy5vcmc="); + + // Invalid key data field (not Base64) + checkFromText_BadValue("257 3 5 BAAAAAAAAAAAD"); + + // String instead of number + checkFromText_LexerError("foo 3 5 YmluZDEwLmlzYy5vcmc="); + checkFromText_LexerError("257 foo 5 YmluZDEwLmlzYy5vcmc="); + checkFromText_LexerError("257 3 foo YmluZDEwLmlzYy5vcmc="); + + // Trailing garbage. This should cause only the string constructor + // to fail, but the lexer constructor must be able to continue + // parsing from it. + checkFromText_BadString("257 3 5 YmluZDEwLmlzYy5vcmc= ; comment\n" + "257 3 4 YmluZDEwLmlzYy5vcmc="); + + // Unmatched parenthesis should cause a lexer error + checkFromText_LexerError("257 3 5 )YmluZDEwLmlzYy5vcmc="); +} + +TEST_F(Rdata_DNSKEY_Test, assign) { + generic::DNSKEY rdata_dnskey2("257 3 5 YQ=="); + rdata_dnskey2 = rdata_dnskey; + EXPECT_EQ(0, rdata_dnskey.compare(rdata_dnskey2)); +} + +TEST_F(Rdata_DNSKEY_Test, createFromLexer) { + EXPECT_EQ(0, rdata_dnskey.compare( + *test::createRdataUsingLexer(RRType::DNSKEY(), RRClass::IN(), + dnskey_txt))); +} + +TEST_F(Rdata_DNSKEY_Test, toWireRenderer) { + renderer.skip(2); + rdata_dnskey.toWire(renderer); + + vector data; + UnitTestUtil::readWireData("rdata_dnskey_fromWire.wire", data); + matchWireData(&data[2], data.size() - 2, + static_cast(renderer.getData()) + 2, + renderer.getLength() - 2); +} + +TEST_F(Rdata_DNSKEY_Test, toWireBuffer) { + rdata_dnskey.toWire(obuffer); + + vector data; + UnitTestUtil::readWireData("rdata_dnskey_fromWire.wire", data); + matchWireData(&data[2], data.size() - 2, + obuffer.getData(), obuffer.getLength()); +} + +TEST_F(Rdata_DNSKEY_Test, createFromWire) { + EXPECT_EQ(0, rdata_dnskey.compare( + *rdataFactoryFromFile(RRType("DNSKEY"), RRClass("IN"), + "rdata_dnskey_fromWire.wire"))); + + // Missing keydata is OK + const generic::DNSKEY rdata_dnskey_missing_keydata("257 3 5"); + EXPECT_EQ(0, rdata_dnskey_missing_keydata.compare( + *rdataFactoryFromFile(RRType("DNSKEY"), RRClass("IN"), + "rdata_dnskey_empty_keydata_fromWire.wire"))); +} + +TEST_F(Rdata_DNSKEY_Test, getTag) { + EXPECT_EQ(12892, rdata_dnskey.getTag()); + + // Short keydata with algorithm RSA/MD5 must throw. + const generic::DNSKEY rdata_dnskey_short_keydata1("1 1 1 YQ=="); + EXPECT_THROW(rdata_dnskey_short_keydata1.getTag(), isc::OutOfRange); + + // Short keydata with algorithm not RSA/MD5 must not throw. + const generic::DNSKEY rdata_dnskey_short_keydata2("257 3 5 YQ=="); + EXPECT_NO_THROW(rdata_dnskey_short_keydata2.getTag()); +} + +TEST_F(Rdata_DNSKEY_Test, getAlgorithm) { + EXPECT_EQ(5, rdata_dnskey.getAlgorithm()); +} + +TEST_F(Rdata_DNSKEY_Test, getFlags) { + EXPECT_EQ(257, rdata_dnskey.getFlags()); +} + +} -- cgit v1.2.3