Commit a8dfa35d authored by Marcin Siodelski's avatar Marcin Siodelski
Browse files

[3036] Test creating on-wire data from an option with empty domain name.

parent ef9de155
......@@ -437,11 +437,14 @@ Option6ClientFqdn::toText(int indent) {
uint16_t
Option6ClientFqdn::len() {
// If domain name is partial, the NULL terminating character
// is not included and the option length have to be adjusted.
uint16_t domain_name_length = impl_->domain_name_type_ == FULL ?
impl_->domain_name_->getLength() : impl_->domain_name_->getLength() - 1;
uint16_t domain_name_length = 0;
if (impl_->domain_name_) {
// If domain name is partial, the NULL terminating character
// is not included and the option. Length has to be adjusted.
domain_name_length = impl_->domain_name_type_ == FULL ?
impl_->domain_name_->getLength() :
impl_->domain_name_->getLength() - 1;
}
return (getHeaderLen() + FLAG_FIELD_LEN + domain_name_length);
}
......
......@@ -622,6 +622,34 @@ TEST(Option6ClientFqdnTest, packPartial) {
EXPECT_EQ(0, memcmp(ref_data, buf.getData(), buf.getLength()));
}
// This test verifies that it is possible to encode the option which carries
// empty domain-name in the wire format.
TEST(Option6ClientFqdnTest, packEmpty) {
// Create option instance. Check that constructor doesn't throw.
const uint8_t flags = Option6ClientFqdn::FLAG_S;
boost::scoped_ptr<Option6ClientFqdn> option;
ASSERT_NO_THROW(
option.reset(new Option6ClientFqdn(flags))
);
ASSERT_TRUE(option);
// Prepare on-wire format of the option.
isc::util::OutputBuffer buf(5);
ASSERT_NO_THROW(option->pack(buf));
// Prepare reference data.
const uint8_t ref_data[] = {
0, 39, 0, 1, // header
Option6ClientFqdn::FLAG_S // flags
};
size_t ref_data_size = sizeof(ref_data) / sizeof(ref_data[0]);
// Check if the buffer has the same length as the reference data,
// so as they can be compared directly.
ASSERT_EQ(ref_data_size, buf.getLength());
EXPECT_EQ(0, memcmp(ref_data, buf.getData(), buf.getLength()));
}
// This test verifies that on-wire option data holding fully qualified domain
// name is parsed correctly.
TEST(Option6ClientFqdnTest, unpack) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment