BIND 10 trac2535, updated. 8960a571bc2db7129d4ce8861f83808fb71dc81c [2535] Unify test code
BIND 10 source code commits
bind10-changes at lists.isc.org
Mon Dec 24 04:08:09 UTC 2012
The branch, trac2535 has been updated
via 8960a571bc2db7129d4ce8861f83808fb71dc81c (commit)
via 3ff7531f6be864ca6965a60ef1e2744e945a3569 (commit)
via 376b3b0760c5198dbf5ccf740c666ed9c9acaf45 (commit)
from 27e7210b344cea5c7098bf233481d5f2bf7cac97 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 8960a571bc2db7129d4ce8861f83808fb71dc81c
Author: Mukund Sivaraman <muks at isc.org>
Date: Mon Dec 24 09:37:45 2012 +0530
[2535] Unify test code
commit 3ff7531f6be864ca6965a60ef1e2744e945a3569
Author: Mukund Sivaraman <muks at isc.org>
Date: Mon Dec 24 09:00:09 2012 +0530
[2535] Rename function to stringToCharString()
commit 376b3b0760c5198dbf5ccf740c666ed9c9acaf45
Author: Mukund Sivaraman <muks at isc.org>
Date: Fri Dec 21 23:08:55 2012 +0530
[2535] Add a datasrc test for escaping txt-like rdata
-----------------------------------------------------------------------
Summary of changes:
src/lib/datasrc/tests/database_unittest.cc | 12 +++
src/lib/dns/rdata/generic/detail/char_string.cc | 4 +-
src/lib/dns/rdata/generic/detail/char_string.h | 4 +-
src/lib/dns/rdata/generic/detail/txt_like.h | 2 +-
src/lib/dns/tests/rdata_char_string_unittest.cc | 109 ++++++++---------------
5 files changed, 56 insertions(+), 75 deletions(-)
-----------------------------------------------------------------------
diff --git a/src/lib/datasrc/tests/database_unittest.cc b/src/lib/datasrc/tests/database_unittest.cc
index 174da04..bb39571 100644
--- a/src/lib/datasrc/tests/database_unittest.cc
+++ b/src/lib/datasrc/tests/database_unittest.cc
@@ -226,6 +226,9 @@ const char* const TEST_RECORDS[][5] = {
{"invalidrdata2.example.org.", "A", "3600", "", "192.0.2.1"},
{"invalidrdata2.example.org.", "RRSIG", "3600", "", "Nonsense"},
+ // TXT-like rdata that should be escaped
+ {"escapetxt.example.org.", "TXT", "3600", "", "Hello~World\\;\\\""},
+
{NULL, NULL, NULL, NULL, NULL},
};
@@ -2003,6 +2006,15 @@ TYPED_TEST(DatabaseClientTest, find) {
this->expected_rdatas_.clear();
this->expected_sig_rdatas_.clear();
+ this->expected_rdatas_.push_back("Hello~World\\;\\\"");
+ doFindTest(*finder, isc::dns::Name("escapetxt.example.org."),
+ isc::dns::RRType::TXT(), isc::dns::RRType::TXT(),
+ this->rrttl_,
+ ZoneFinder::SUCCESS,
+ this->expected_rdatas_, this->expected_sig_rdatas_);
+
+ this->expected_rdatas_.clear();
+ this->expected_sig_rdatas_.clear();
this->expected_rdatas_.push_back("192.0.2.1");
this->expected_rdatas_.push_back("192.0.2.2");
doFindTest(*finder, isc::dns::Name("ttldiff2.example.org."),
diff --git a/src/lib/dns/rdata/generic/detail/char_string.cc b/src/lib/dns/rdata/generic/detail/char_string.cc
index dcee08a..e2857b3 100644
--- a/src/lib/dns/rdata/generic/detail/char_string.cc
+++ b/src/lib/dns/rdata/generic/detail/char_string.cc
@@ -57,8 +57,8 @@ decimalToNumber(const char* s, const char* s_end) {
}
void
-strToCharString(const MasterToken::StringRegion& str_region,
- CharString& result)
+stringToCharString(const MasterToken::StringRegion& str_region,
+ CharString& result)
{
// make a space for the 1-byte length field; filled in at the end
result.push_back(0);
diff --git a/src/lib/dns/rdata/generic/detail/char_string.h b/src/lib/dns/rdata/generic/detail/char_string.h
index b369f40..4a146db 100644
--- a/src/lib/dns/rdata/generic/detail/char_string.h
+++ b/src/lib/dns/rdata/generic/detail/char_string.h
@@ -49,8 +49,8 @@ typedef std::vector<uint8_t> CharString;
/// \brief str_region A string that represents a character-string.
/// \brief result A placeholder vector where the resulting data are to be
/// stored. Expected to be empty, but it's not checked.
-void strToCharString(const MasterToken::StringRegion& str_region,
- CharString& result);
+void stringToCharString(const MasterToken::StringRegion& str_region,
+ CharString& result);
/// \brief Convert a CharString into a textual DNS character-string.
///
diff --git a/src/lib/dns/rdata/generic/detail/txt_like.h b/src/lib/dns/rdata/generic/detail/txt_like.h
index 12673ae..b48d109 100644
--- a/src/lib/dns/rdata/generic/detail/txt_like.h
+++ b/src/lib/dns/rdata/generic/detail/txt_like.h
@@ -119,7 +119,7 @@ private:
break;
}
string_list_.push_back(std::vector<uint8_t>());
- strToCharString(token.getStringRegion(), string_list_.back());
+ stringToCharString(token.getStringRegion(), string_list_.back());
}
// Let upper layer handle eol/eof.
diff --git a/src/lib/dns/tests/rdata_char_string_unittest.cc b/src/lib/dns/tests/rdata_char_string_unittest.cc
index 7526391..44bc979 100644
--- a/src/lib/dns/tests/rdata_char_string_unittest.cc
+++ b/src/lib/dns/tests/rdata_char_string_unittest.cc
@@ -25,7 +25,7 @@
using namespace isc::dns;
using namespace isc::dns::rdata;
using isc::dns::rdata::generic::detail::CharString;
-using isc::dns::rdata::generic::detail::strToCharString;
+using isc::dns::rdata::generic::detail::stringToCharString;
using isc::dns::rdata::generic::detail::charStringToString;
using isc::util::unittests::matchWireData;
@@ -61,19 +61,19 @@ createStringRegion(const std::string& str) {
TEST_F(CharStringTest, normalConversion) {
uint8_t tmp[3]; // placeholder for expected sequence
- strToCharString(str_region, chstr);
+ stringToCharString(str_region, chstr);
matchWireData(test_charstr, sizeof(test_charstr), &chstr[0], chstr.size());
// Empty string
chstr.clear();
- strToCharString(createStringRegion(""), chstr);
+ stringToCharString(createStringRegion(""), chstr);
tmp[0] = 0;
matchWireData(tmp, 1, &chstr[0], chstr.size());
// Possible largest char string
chstr.clear();
std::string long_str(255, 'x');
- strToCharString(createStringRegion(long_str), chstr);
+ stringToCharString(createStringRegion(long_str), chstr);
std::vector<uint8_t> expected;
expected.push_back(255); // len of char string
expected.insert(expected.end(), long_str.begin(), long_str.end());
@@ -84,32 +84,32 @@ TEST_F(CharStringTest, normalConversion) {
chstr.clear();
long_str.at(254) = '\\'; // replace the last 'x' with '\'
long_str.append("120"); // 'x' = 120
- strToCharString(createStringRegion(long_str), chstr);
+ stringToCharString(createStringRegion(long_str), chstr);
matchWireData(&expected[0], expected.size(), &chstr[0], chstr.size());
// Escaped '\'
chstr.clear();
tmp[0] = 1;
tmp[1] = '\\';
- strToCharString(createStringRegion("\\\\"), chstr);
+ stringToCharString(createStringRegion("\\\\"), chstr);
matchWireData(tmp, 2, &chstr[0], chstr.size());
// Boundary values for \DDD
chstr.clear();
tmp[0] = 1;
tmp[1] = 0;
- strToCharString(createStringRegion("\\000"), chstr);
+ stringToCharString(createStringRegion("\\000"), chstr);
matchWireData(tmp, 2, &chstr[0], chstr.size());
chstr.clear();
- strToCharString(createStringRegion("\\255"), chstr);
+ stringToCharString(createStringRegion("\\255"), chstr);
tmp[0] = 1;
tmp[1] = 255;
matchWireData(tmp, 2, &chstr[0], chstr.size());
// Another digit follows DDD; it shouldn't cause confusion
chstr.clear();
- strToCharString(createStringRegion("\\2550"), chstr);
+ stringToCharString(createStringRegion("\\2550"), chstr);
tmp[0] = 2; // string len is now 2
tmp[2] = '0';
matchWireData(tmp, 3, &chstr[0], chstr.size());
@@ -117,13 +117,13 @@ TEST_F(CharStringTest, normalConversion) {
TEST_F(CharStringTest, badConversion) {
// string cannot exceed 255 bytes
- EXPECT_THROW(strToCharString(createStringRegion(std::string(256, 'a')),
- chstr),
+ EXPECT_THROW(stringToCharString(createStringRegion(std::string(256, 'a')),
+ chstr),
CharStringTooLong);
// input string ending with (non escaped) '\'
chstr.clear();
- EXPECT_THROW(strToCharString(createStringRegion("foo\\"), chstr),
+ EXPECT_THROW(stringToCharString(createStringRegion("foo\\"), chstr),
InvalidRdataText);
}
@@ -131,75 +131,44 @@ TEST_F(CharStringTest, badDDD) {
// Check various type of bad form of \DDD
// Not a number
- EXPECT_THROW(strToCharString(createStringRegion("\\1a2"), chstr),
+ EXPECT_THROW(stringToCharString(createStringRegion("\\1a2"), chstr),
InvalidRdataText);
- EXPECT_THROW(strToCharString(createStringRegion("\\12a"), chstr),
+ EXPECT_THROW(stringToCharString(createStringRegion("\\12a"), chstr),
InvalidRdataText);
// Not in the range of uint8_t
- EXPECT_THROW(strToCharString(createStringRegion("\\256"), chstr),
+ EXPECT_THROW(stringToCharString(createStringRegion("\\256"), chstr),
InvalidRdataText);
// Short buffer
- EXPECT_THROW(strToCharString(createStringRegion("\\42"), chstr),
+ EXPECT_THROW(stringToCharString(createStringRegion("\\42"), chstr),
InvalidRdataText);
}
+const struct TestData {
+ const char *data;
+ const char *expected;
+} conversion_data[] = {
+ {"Test\"Test", "Test\\\"Test"},
+ {"Test;Test", "Test\\;Test"},
+ {"Test\\Test", "Test\\\\Test"},
+ {"Test\x1fTest", "Test\\031Test"},
+ {"Test ~ Test", "Test ~ Test"},
+ {"Test\x7fTest", "Test\\127Test"},
+ {NULL, NULL}
+};
+
TEST_F(CharStringTest, charStringToString) {
- const uint8_t double_quotes_buf[] = {
- sizeof("Test\"Test\"") - 1,
- 'T', 'e', 's', 't', '"', 'T', 'e', 's', 't', '"'
- };
- const CharString double_quotes
- (double_quotes_buf, double_quotes_buf + sizeof(double_quotes_buf));
- EXPECT_EQ("Test\\\"Test\\\"",
- charStringToString(double_quotes));
-
- const uint8_t semicolon_buf[] = {
- sizeof("Test;Test") - 1,
- 'T', 'e', 's', 't', ';', 'T', 'e', 's', 't'
- };
- const CharString semicolon
- (semicolon_buf, semicolon_buf + sizeof(semicolon_buf));
- EXPECT_EQ("Test\\;Test",
- charStringToString(semicolon));
-
- const uint8_t backslash_buf[] = {
- sizeof("Test\\Test") - 1,
- 'T', 'e', 's', 't', '\\', 'T', 'e', 's', 't'
- };
- const CharString backslash
- (backslash_buf, backslash_buf + sizeof(backslash_buf));
- EXPECT_EQ("Test\\\\Test",
- charStringToString(backslash));
-
- const uint8_t before_x20_buf[] = {
- sizeof("Test\x1fTest") - 1,
- 'T', 'e', 's', 't', 0x1f, 'T', 'e', 's', 't'
- };
- const CharString before_x20
- (before_x20_buf, before_x20_buf + sizeof(before_x20_buf));
- EXPECT_EQ("Test\\031Test",
- charStringToString(before_x20));
-
- const uint8_t from_x20_to_x7e_buf[] = {
- sizeof("Test ~ Test") - 1,
- 'T', 'e', 's', 't', ' ', '~', ' ', 'T', 'e', 's', 't'
- };
- const CharString from_x20_to_x7e
- (from_x20_to_x7e_buf,
- from_x20_to_x7e_buf + sizeof(from_x20_to_x7e_buf));
- EXPECT_EQ("Test ~ Test",
- charStringToString(from_x20_to_x7e));
-
- const uint8_t after_0x7e_buf[] = {
- sizeof("Test\x7fTest") - 1,
- 'T', 'e', 's', 't', 0x7f, 'T', 'e', 's', 't'
- };
- const CharString after_0x7e
- (after_0x7e_buf, after_0x7e_buf + sizeof(after_0x7e_buf));
- EXPECT_EQ("Test\\127Test",
- charStringToString(after_0x7e));
+ for (const TestData* cur = conversion_data; cur->data != NULL; ++cur) {
+ uint8_t idata[32];
+ size_t length = std::strlen(cur->data);
+ // length (1 byte) + string (length bytes)
+ assert(sizeof(idata) > length);
+ idata[0] = static_cast<uint8_t>(length);
+ std::memcpy(idata + 1, cur->data, length);
+ const CharString test_data(idata, idata + length + 1);
+ EXPECT_EQ(cur->expected, charStringToString(test_data));
+ }
}
} // unnamed namespace
More information about the bind10-changes
mailing list