|
@@ -80,7 +80,7 @@ public:
|
|
|
static const char* DUID_FILE = "server-id-test.txt";
|
|
|
|
|
|
// test fixture for any tests requiring blank/empty configuration
|
|
|
-// serves as base class for additional tests
|
|
|
+// serves as base class for additional tests
|
|
|
class NakedDhcpv6SrvTest : public ::testing::Test {
|
|
|
public:
|
|
|
|
|
@@ -146,12 +146,12 @@ public:
|
|
|
|
|
|
// Checks if server response is a NAK
|
|
|
void checkNakResponse(const Pkt6Ptr& rsp, uint8_t expected_message_type,
|
|
|
- uint32_t expected_transid,
|
|
|
+ uint32_t expected_transid,
|
|
|
uint16_t expected_status_code) {
|
|
|
// Check if we get response at all
|
|
|
checkResponse(rsp, expected_message_type, expected_transid);
|
|
|
|
|
|
- // Check that IA_NA was returned
|
|
|
+ // Check that IA_NA was returned
|
|
|
OptionPtr option_ia_na = rsp->getOption(D6O_IA_NA);
|
|
|
ASSERT_TRUE(option_ia_na);
|
|
|
|
|
@@ -237,7 +237,7 @@ public:
|
|
|
ConstElementPtr comment_;
|
|
|
};
|
|
|
|
|
|
-// Provides suport for tests against a preconfigured subnet6
|
|
|
+// Provides suport for tests against a preconfigured subnet6
|
|
|
// extends upon NakedDhcp6SrvTest
|
|
|
class Dhcpv6SrvTest : public NakedDhcpv6SrvTest {
|
|
|
public:
|
|
@@ -264,7 +264,7 @@ public:
|
|
|
ADD_FAILURE() << "IA_NA option not present in response";
|
|
|
return (boost::shared_ptr<Option6IAAddr>());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
boost::shared_ptr<Option6IA> ia = boost::dynamic_pointer_cast<Option6IA>(tmp);
|
|
|
if (!ia) {
|
|
|
ADD_FAILURE() << "IA_NA cannot convert option ptr to Option6";
|
|
@@ -274,7 +274,7 @@ public:
|
|
|
EXPECT_EQ(expected_iaid, ia->getIAID());
|
|
|
EXPECT_EQ(expected_t1, ia->getT1());
|
|
|
EXPECT_EQ(expected_t2, ia->getT2());
|
|
|
-
|
|
|
+
|
|
|
tmp = ia->getOption(D6O_IAADDR);
|
|
|
boost::shared_ptr<Option6IAAddr> addr = boost::dynamic_pointer_cast<Option6IAAddr>(tmp);
|
|
|
return (addr);
|
|
@@ -330,10 +330,10 @@ public:
|
|
|
};
|
|
|
|
|
|
// This test verifies that incoming SOLICIT can be handled properly when
|
|
|
-// there are no subnets configured.
|
|
|
+// there are no subnets configured.
|
|
|
//
|
|
|
-// This test sends a SOLICIT and the expected response
|
|
|
-// is an ADVERTISE with STATUS_NoAddrsAvail and no address provided in the
|
|
|
+// This test sends a SOLICIT and the expected response
|
|
|
+// is an ADVERTISE with STATUS_NoAddrsAvail and no address provided in the
|
|
|
// response
|
|
|
TEST_F(NakedDhcpv6SrvTest, SolicitNoSubnet) {
|
|
|
NakedDhcpv6Srv srv(0);
|
|
@@ -352,10 +352,10 @@ TEST_F(NakedDhcpv6SrvTest, SolicitNoSubnet) {
|
|
|
}
|
|
|
|
|
|
// This test verifies that incoming REQUEST can be handled properly when
|
|
|
-// there are no subnets configured.
|
|
|
+// there are no subnets configured.
|
|
|
//
|
|
|
-// This test sends a REQUEST and the expected response
|
|
|
-// is an REPLY with STATUS_NoAddrsAvail and no address provided in the
|
|
|
+// This test sends a REQUEST and the expected response
|
|
|
+// is an REPLY with STATUS_NoAddrsAvail and no address provided in the
|
|
|
// response
|
|
|
TEST_F(NakedDhcpv6SrvTest, RequestNoSubnet) {
|
|
|
NakedDhcpv6Srv srv(0);
|
|
@@ -386,8 +386,8 @@ TEST_F(NakedDhcpv6SrvTest, RequestNoSubnet) {
|
|
|
// This test verifies that incoming RENEW can be handled properly, even when
|
|
|
// no subnets are configured.
|
|
|
//
|
|
|
-// This test sends a RENEW and the expected response
|
|
|
-// is an REPLY with STATUS_NoBinding and no address provided in the
|
|
|
+// This test sends a RENEW and the expected response
|
|
|
+// is an REPLY with STATUS_NoBinding and no address provided in the
|
|
|
// response
|
|
|
TEST_F(NakedDhcpv6SrvTest, RenewNoSubnet) {
|
|
|
NakedDhcpv6Srv srv(0);
|
|
@@ -421,8 +421,8 @@ TEST_F(NakedDhcpv6SrvTest, RenewNoSubnet) {
|
|
|
// This test verifies that incoming RELEASE can be handled properly, even when
|
|
|
// no subnets are configured.
|
|
|
//
|
|
|
-// This test sends a RELEASE and the expected response
|
|
|
-// is an REPLY with STATUS_NoBinding and no address provided in the
|
|
|
+// This test sends a RELEASE and the expected response
|
|
|
+// is an REPLY with STATUS_NoBinding and no address provided in the
|
|
|
// response
|
|
|
TEST_F(NakedDhcpv6SrvTest, ReleaseNoSubnet) {
|
|
|
NakedDhcpv6Srv srv(0);
|
|
@@ -951,6 +951,8 @@ TEST_F(Dhcpv6SrvTest, RequestBasic) {
|
|
|
TEST_F(Dhcpv6SrvTest, ManyRequests) {
|
|
|
NakedDhcpv6Srv srv(0);
|
|
|
|
|
|
+ ASSERT_TRUE(subnet_);
|
|
|
+
|
|
|
Pkt6Ptr req1 = Pkt6Ptr(new Pkt6(DHCPV6_REQUEST, 1234));
|
|
|
Pkt6Ptr req2 = Pkt6Ptr(new Pkt6(DHCPV6_REQUEST, 2345));
|
|
|
Pkt6Ptr req3 = Pkt6Ptr(new Pkt6(DHCPV6_REQUEST, 3456));
|
|
@@ -995,6 +997,10 @@ TEST_F(Dhcpv6SrvTest, ManyRequests) {
|
|
|
boost::shared_ptr<Option6IAAddr> addr3 = checkIA_NA(reply3, 3, subnet_->getT1(),
|
|
|
subnet_->getT2());
|
|
|
|
|
|
+ ASSERT_TRUE(addr1);
|
|
|
+ ASSERT_TRUE(addr2);
|
|
|
+ ASSERT_TRUE(addr3);
|
|
|
+
|
|
|
// Check that the assigned address is indeed from the configured pool
|
|
|
checkIAAddr(addr1, addr1->getAddress(), subnet_->getPreferred(), subnet_->getValid());
|
|
|
checkIAAddr(addr2, addr2->getAddress(), subnet_->getPreferred(), subnet_->getValid());
|
|
@@ -1083,6 +1089,8 @@ TEST_F(Dhcpv6SrvTest, RenewBasic) {
|
|
|
boost::shared_ptr<Option6IAAddr> addr_opt = checkIA_NA(reply, 234, subnet_->getT1(),
|
|
|
subnet_->getT2());
|
|
|
|
|
|
+ ASSERT_TRUE(addr_opt);
|
|
|
+
|
|
|
// Check that we've got the address we requested
|
|
|
checkIAAddr(addr_opt, addr, subnet_->getPreferred(), subnet_->getValid());
|
|
|
|
|
@@ -1649,7 +1657,7 @@ TEST_F(Dhcpv6SrvTest, selectSubnetRelayLinkaddr) {
|
|
|
CfgMgr::instance().addSubnet6(subnet2);
|
|
|
CfgMgr::instance().addSubnet6(subnet3);
|
|
|
|
|
|
- // source of the packet should have no meaning. Selection is based
|
|
|
+ // Source of the packet should have no meaning. Selection is based
|
|
|
// on linkaddr field in the relay
|
|
|
pkt->setRemoteAddr(IOAddress("2001:db8:1::baca"));
|
|
|
selected = srv.selectSubnet(pkt);
|