[svn] commit: r502 - /branches/jinmei-dnsrdata/src/lib/dns/cpp/name_unittest.cc
BIND 10 source code commits
bind10-changes at lists.isc.org
Thu Jan 21 19:27:57 UTC 2010
Author: jinmei
Date: Thu Jan 21 19:27:57 2010
New Revision: 502
Log:
added test cases for name.at().
Modified:
branches/jinmei-dnsrdata/src/lib/dns/cpp/name_unittest.cc
Modified: branches/jinmei-dnsrdata/src/lib/dns/cpp/name_unittest.cc
==============================================================================
--- branches/jinmei-dnsrdata/src/lib/dns/cpp/name_unittest.cc (original)
+++ branches/jinmei-dnsrdata/src/lib/dns/cpp/name_unittest.cc Thu Jan 21 19:27:57 2010
@@ -28,19 +28,16 @@
#include <gtest/gtest.h>
-using isc::UnitTestUtil;
-using isc::dns::InputBuffer;
-using isc::dns::OutputBuffer;
-using isc::dns::Name;
-using isc::dns::MessageRenderer;
-using isc::dns::NameComparisonResult;
+using namespace std;
+using namespace isc;
+using namespace isc::dns;
//
// XXX: these are defined as class static constants, but some compilers
// seemingly cannot find the symbols when used in the EXPECT_xxx macros.
//
-const size_t isc::dns::Name::MAX_WIRE;
-const size_t isc::dns::Name::MAX_LABELS;
+const size_t Name::MAX_WIRE;
+const size_t Name::MAX_LABELS;
namespace {
class NameTest : public ::testing::Test {
@@ -73,7 +70,7 @@
NameTest::nameFactoryFromWire(const char* datafile, size_t position,
bool downcase)
{
- std::vector<unsigned char> data;
+ vector<unsigned char> data;
UnitTestUtil::readWireData(datafile, data);
InputBuffer buffer(&data[0], data.size());
@@ -85,17 +82,17 @@
Name
NameTest::nameFactoryLowerCase()
{
- std::string lowercase_namestr;
+ string lowercase_namestr;
lowercase_namestr.reserve(Name::MAX_WIRE);
unsigned int ch = 0;
unsigned int labelcount = 0;
do {
if (ch < 'A' || ch > 'Z') {
- std::ostringstream ss;
- ss.setf(std::ios_base::right, std::ios_base::adjustfield);
+ ostringstream ss;
+ ss.setf(ios_base::right, ios_base::adjustfield);
ss.width(3);
- ss << std::setfill('0') << ch;
+ ss << setfill('0') << ch;
lowercase_namestr += '\\' + ss.str();
if (++labelcount == Name::MAX_LABELLEN) {
@@ -125,7 +122,7 @@
TEST_F(NameTest, fromText)
{
- std::vector<std::string> strnames;
+ vector<string> strnames;
strnames.push_back("www.example.com");
strnames.push_back("www.example.com."); // with a trailing dot
strnames.push_back("wWw.exAmpLe.com"); // mixed cases
@@ -133,7 +130,7 @@
// decimal representation for "WWW"
strnames.push_back("\\087\\087\\087.example.com");
- std::vector<std::string>::const_iterator it;
+ vector<string>::const_iterator it;
for (it = strnames.begin(); it != strnames.end(); ++it) {
EXPECT_PRED_FORMAT2(UnitTestUtil::matchName, example_name, Name(*it));
}
@@ -148,32 +145,32 @@
// Tests for bogus names. These should trigger an exception.
//
// empty label cannot be followed by another label
- EXPECT_THROW(Name(".a"), isc::dns::EmptyLabel);
+ EXPECT_THROW(Name(".a"), EmptyLabel);
// duplicate period
- EXPECT_THROW(Name("a.."), isc::dns::EmptyLabel);
+ EXPECT_THROW(Name("a.."), EmptyLabel);
// label length must be < 64
EXPECT_THROW(Name("012345678901234567890123456789"
"012345678901234567890123456789"
- "0123"), isc::dns::TooLongLabel);
+ "0123"), TooLongLabel);
// now-unsupported bitstring labels
- EXPECT_THROW(Name("\\[b11010000011101]"), isc::dns::BadLabelType);
+ EXPECT_THROW(Name("\\[b11010000011101]"), BadLabelType);
// label length must be < 64
EXPECT_THROW(Name("012345678901234567890123456789"
"012345678901234567890123456789"
- "012\\x"), isc::dns::TooLongLabel);
+ "012\\x"), TooLongLabel);
// but okay as long as resulting len < 64 even if the original string is
// "too long"
EXPECT_NO_THROW(Name("012345678901234567890123456789"
"012345678901234567890123456789"
"01\\x"));
// incomplete \DDD pattern (exactly 3 D's must appear)
- EXPECT_THROW(Name("\\12abc"), isc::dns::BadEscape);
+ EXPECT_THROW(Name("\\12abc"), BadEscape);
// \DDD must not exceed 255
- EXPECT_THROW(Name("\\256"), isc::dns::BadEscape);
+ EXPECT_THROW(Name("\\256"), BadEscape);
// Same tests for \111 as for \\x above
EXPECT_THROW(Name("012345678901234567890123456789"
"012345678901234567890123456789"
- "012\\111"), isc::dns::TooLongLabel);
+ "012\\111"), TooLongLabel);
EXPECT_NO_THROW(Name("012345678901234567890123456789"
"012345678901234567890123456789"
"01\\111"));
@@ -183,7 +180,7 @@
"123456789.123456789.123456789.123456789.123456789."
"123456789.123456789.123456789.123456789.123456789."
"123456789.123456789.123456789.123456789.123456789."
- "1234"), isc::dns::TooLongName);
+ "1234"), TooLongName);
// This is a possible longest name and should be accepted
EXPECT_NO_THROW(Name("123456789.123456789.123456789.123456789.123456789."
"123456789.123456789.123456789.123456789.123456789."
@@ -192,7 +189,7 @@
"123456789.123456789.123456789.123456789.123456789."
"123"));
// \DDD must consist of 3 digits.
- EXPECT_THROW(Name("\\12"), isc::dns::IncompleteName);
+ EXPECT_THROW(Name("\\12"), IncompleteName);
// a name with the max number of labels. should be constructed without
// an error, and its length should be the max value.
@@ -217,26 +214,26 @@
Name("vix.com"));
// bogus label character (looks like a local compression pointer)
EXPECT_THROW(nameFactoryFromWire("testdata/name_fromWire2", 25),
- isc::dns::BadLabelType);
+ BadLabelType);
// a bad compression pointer (too big)
EXPECT_THROW(nameFactoryFromWire("testdata/name_fromWire3_1", 25),
- isc::dns::BadPointer);
+ BadPointer);
// forward reference
EXPECT_THROW(nameFactoryFromWire("testdata/name_fromWire3_2", 25),
- isc::dns::BadPointer);
+ BadPointer);
// invalid name length
EXPECT_THROW(nameFactoryFromWire("testdata/name_fromWire4", 550),
- isc::dns::TooLongName);
+ TooLongName);
// skip test for from Wire5. It's for disabling decompression, but our
// implementation always allows it.
// bad pointer (too big)
EXPECT_THROW(nameFactoryFromWire("testdata/name_fromWire6", 25),
- isc::dns::BadPointer);
+ BadPointer);
// input ends unexpectedly
EXPECT_THROW(nameFactoryFromWire("testdata/name_fromWire7", 25),
- isc::dns::IncompleteName);
+ IncompleteName);
// many hops of compression but valid. should succeed.
EXPECT_PRED_FORMAT2(UnitTestUtil::matchName,
nameFactoryFromWire("testdata/name_fromWire8", 383),
@@ -250,7 +247,7 @@
EXPECT_EQ(Name::MAX_WIRE,
nameFactoryFromWire("testdata/name_fromWire9", 0).getLength());
EXPECT_THROW(nameFactoryFromWire("testdata/name_fromWire10", 0).getLength(),
- isc::dns::TooLongName);
+ TooLongName);
// A name with possible maximum number of labels; awkward but valid
EXPECT_EQ(nameFactoryFromWire("testdata/name_fromWire11",
@@ -259,7 +256,7 @@
// Wire format including an invalid label length
EXPECT_THROW(nameFactoryFromWire("testdata/name_fromWire12", 0),
- isc::dns::BadLabelType);
+ BadLabelType);
// converting upper-case letters to down-case
EXPECT_EQ("vix.com.", nameFactoryFromWire("testdata/name_fromWire1",
@@ -288,13 +285,13 @@
// escaped while the others are intact. note that the conversion is
// implementation specific; for example, it's not invalid to escape a
// "normal" character such as 'a' with regard to the standard.
- std::string all_printable("!\\\"#\\$%&'\\(\\)*+,-\\./0123456789:\\;<=>?\\@"
+ string all_printable("!\\\"#\\$%&'\\(\\)*+,-\\./0123456789:\\;<=>?\\@"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"[\\\\]^_.`abcdefghijklmnopqrstuvwxyz{|}~.");
EXPECT_EQ(all_printable,
nameFactoryFromWire("testdata/name_fromWire13", 0).toText());
- std::string all_nonprintable(
+ string all_nonprintable(
"\\000\\001\\002\\003\\004\\005\\006\\007\\008\\009"
"\\010\\011\\012\\013\\014\\015\\016\\017\\018\\019"
"\\020\\021\\022\\023\\024\\025\\026\\027\\028\\029"
@@ -319,10 +316,10 @@
TEST_F(NameTest, toWireBuffer)
{
- std::vector<unsigned char> data;
+ vector<unsigned char> data;
OutputBuffer buffer(0);
- UnitTestUtil::readWireData(std::string("01610376697803636f6d00"), data);
+ UnitTestUtil::readWireData(string("01610376697803636f6d00"), data);
Name("a.vix.com.").toWire(buffer);
EXPECT_EQ(true, buffer.getLength() == data.size() &&
memcmp(buffer.getData(), &data[0], data.size()) == 0);
@@ -334,11 +331,11 @@
//
TEST_F(NameTest, toWireRenderer)
{
- std::vector<unsigned char> data;
+ vector<unsigned char> data;
OutputBuffer buffer(0);
MessageRenderer renderer(buffer);
- UnitTestUtil::readWireData(std::string("01610376697803636f6d00"), data);
+ UnitTestUtil::readWireData(string("01610376697803636f6d00"), data);
Name("a.vix.com.").toWire(renderer);
EXPECT_EQ(true, buffer.getLength() == data.size() &&
memcmp(buffer.getData(), &data[0], data.size()) == 0);
@@ -370,7 +367,7 @@
TEST_F(NameTest, compare)
{
- std::vector<CompareParameters> params;
+ vector<CompareParameters> params;
params.push_back(CompareParameters(Name("c.d"), Name("a.b.c.d"),
NameComparisonResult::SUPERDOMAIN,
-1, 3));
@@ -386,7 +383,7 @@
NameComparisonResult::EQUAL,
0, 5));
- std::vector<CompareParameters>::const_iterator it;
+ vector<CompareParameters>::const_iterator it;
for (it = params.begin(); it != params.end(); ++it) {
NameComparisonResult result = (*it).name1.compare((*it).name2);
EXPECT_EQ((*it).reln, result.getRelation());
@@ -438,7 +435,7 @@
Name n2("123456789.123456789.123456789.123456789.123456789."
"123456789.123456789.123456789.123456789.123456789."
"1234.");
- EXPECT_THROW(n1.concatenate(n2), isc::dns::TooLongName);
+ EXPECT_THROW(n1.concatenate(n2), TooLongName);
}
TEST_F(NameTest, split)
@@ -454,8 +451,8 @@
EXPECT_PRED_FORMAT2(UnitTestUtil::matchName, example_name.split(3, 1),
Name("."));
// invalid range: an exception should be thrown.
- EXPECT_THROW(example_name.split(1, 0), isc::dns::OutOfRange);
- EXPECT_THROW(example_name.split(2, 3), isc::dns::OutOfRange);
+ EXPECT_THROW(example_name.split(1, 0), OutOfRange);
+ EXPECT_THROW(example_name.split(2, 3), OutOfRange);
}
TEST_F(NameTest, downcase)
@@ -471,6 +468,24 @@
}
+TEST_F(NameTest, at)
+{
+ // Confirm at() produces the exact sequence of wire-format name data
+ vector<uint8_t> data;
+
+ for (size_t i = 0; i < example_name.getLength(); i++) {
+ data.push_back(example_name.at(i));
+ }
+
+ example_name.toWire(buffer_expected);
+ EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData,
+ &data[0], data.size(),
+ buffer_expected.getData(), buffer_expected.getLength());
+
+ // Out-of-range access: should trigger an exception.
+ EXPECT_THROW(example_name.at(example_name.getLength()), OutOfRange);
+}
+
//
// The following set of tests confirm the result of <=, <, >=, >
// The test logic is simple, and all tests are just straightforward variations
@@ -530,7 +545,7 @@
// test operator<<. We simply confirm it appends the result of toText().
TEST_F(NameTest, LeftShiftOperator)
{
- std::ostringstream oss;
+ ostringstream oss;
oss << example_name;
EXPECT_EQ(example_name.toText(), oss.str());
}
More information about the bind10-changes
mailing list