callout_handle.getArgument("query6", callback_qry_pkt6_);
- Lease6CollectionPtr leases6;
- callout_handle.getArgument("leases6", leases6);
- if (leases6->size() > 0) {
- callback_lease6_ = leases6->at(0);
- }
+ callout_handle.getArgument("leases6", callback_new_leases6_);
- Lease6CollectionPtr deleted_leases6;
- callout_handle.getArgument("deleted_leases6", deleted_leases6);
- if (deleted_leases6->size() > 0) {
- callback_deleted_lease6_ = deleted_leases6->at(0);
- }
+ callout_handle.getArgument("deleted_leases6", callback_deleted_leases6_);
callback_argument_names_ = callout_handle.getArgumentNames();
sort(callback_argument_names_.begin(), callback_argument_names_.end());
callout_handle.getParkingLotHandlePtr()->reference(callback_qry_pkt6_);
callout_handle.setStatus(CalloutHandle::NEXT_STEP_PARK);
- Lease6CollectionPtr leases6;
- callout_handle.getArgument("leases6", leases6);
- if (leases6->size() > 0) {
- callback_lease6_ = leases6->at(0);
- }
+ callout_handle.getArgument("leases6", callback_new_leases6_);
- Lease6CollectionPtr deleted_leases6;
- callout_handle.getArgument("deleted_leases6", deleted_leases6);
- if (deleted_leases6->size() > 0) {
- callback_deleted_lease6_ = deleted_leases6->at(0);
- }
+ callout_handle.getArgument("deleted_leases6", callback_deleted_leases6_);
callback_argument_names_ = callout_handle.getArgumentNames();
sort(callback_argument_names_.begin(), callback_argument_names_.end());
callback_resp_pkt6_.reset();
callback_subnet6_.reset();
callback_lease6_.reset();
- callback_deleted_lease6_.reset();
+ callback_new_leases6_.reset();
+ callback_deleted_leases6_.reset();
callback_ia_na_.reset();
callback_subnet6collection_ = NULL;
callback_argument_names_.clear();
/// Server's response Pkt6 structure returned in the callout
static Pkt6Ptr callback_resp_pkt6_;
- /// Pointer to lease6 structure returned in the leases8_committed callout
+ /// Pointer to lease6 structure returned in the leases6_committed callout
static Lease6Ptr callback_lease6_;
- /// Pointer to lease6 structure returned in the leases8_committed callout
- static Lease6Ptr callback_deleted_lease6_;
+ /// Pointers to lease6 structures returned in the leases6_committed callout
+ static Lease6CollectionPtr callback_new_leases6_;
+ static Lease6CollectionPtr callback_deleted_leases6_;
/// Pointer to IA_NA option being renewed or rebound
static boost::shared_ptr<Option6IA> callback_ia_na_;
const Subnet6Collection* HooksDhcpv6SrvTest::callback_subnet6collection_;
vector<string> HooksDhcpv6SrvTest::callback_argument_names_;
Lease6Ptr HooksDhcpv6SrvTest::callback_lease6_;
-Lease6Ptr HooksDhcpv6SrvTest::callback_deleted_lease6_;
+Lease6CollectionPtr HooksDhcpv6SrvTest::callback_new_leases6_;
+Lease6CollectionPtr HooksDhcpv6SrvTest::callback_deleted_leases6_;
boost::shared_ptr<Option6IA> HooksDhcpv6SrvTest::callback_ia_na_;
bool HooksDhcpv6SrvTest::callback_qry_options_copy_;
bool HooksDhcpv6SrvTest::callback_resp_options_copy_;
TEST_F(HooksDhcpv6SrvTest, leases6CommittedSolicit) {
IfaceMgrTestConfig test_config(true);
+ string config = "{ \"interfaces-config\": {"
+ " \"interfaces\": [ \"*\" ]"
+ "},"
+ "\"preferred-lifetime\": 3000,"
+ "\"rebind-timer\": 2000, "
+ "\"renew-timer\": 1000, "
+ "\"subnet6\": [ { "
+ " \"pools\": [ { \"pool\": \"2001:db8:1::/64\" } ],"
+ " \"subnet\": \"2001:db8:1::/48\", "
+ " \"interface\": \"eth1\" "
+ " } ],"
+ "\"valid-lifetime\": 4000 }";
+
+ Dhcp6Client client;
+ client.setInterface("eth1");
+
+ ASSERT_NO_THROW(configure(config, *client.getServer()));
+
// Install leases6_committed callout
ASSERT_NO_THROW(HooksManager::preCalloutsLibraryHandle().registerCallout(
"leases6_committed", leases6_committed_callout));
-
- Dhcp6Client client;
- client.setInterface("eth1");
ASSERT_NO_THROW(client.doSolicit());
// Make sure that we received a response
TEST_F(HooksDhcpv6SrvTest, leases6CommittedInfRequest) {
IfaceMgrTestConfig test_config(true);
- ASSERT_NO_THROW(HooksManager::preCalloutsLibraryHandle().registerCallout(
- "leases6_committed", leases6_committed_callout));
-
+ string config = "{ \"interfaces-config\": {"
+ " \"interfaces\": [ \"*\" ]"
+ "},"
+ "\"preferred-lifetime\": 3000,"
+ "\"rebind-timer\": 2000, "
+ "\"renew-timer\": 1000, "
+ "\"subnet6\": [ { "
+ " \"pools\": [ { \"pool\": \"2001:db8:1::/64\" } ],"
+ " \"subnet\": \"2001:db8:1::/48\", "
+ " \"interface\": \"eth1\" "
+ " } ],"
+ "\"valid-lifetime\": 4000 }";
Dhcp6Client client;
client.useRelay();
+
+ ASSERT_NO_THROW(configure(config, *client.getServer()));
+
+ ASSERT_NO_THROW(HooksManager::preCalloutsLibraryHandle().registerCallout(
+ "leases6_committed", leases6_committed_callout));
+
ASSERT_NO_THROW(client.doInfRequest());
// Make sure that we received a response
TEST_F(HooksDhcpv6SrvTest, leases6CommittedRequest) {
IfaceMgrTestConfig test_config(true);
- ASSERT_NO_THROW(HooksManager::preCalloutsLibraryHandle().registerCallout(
- "leases6_committed", leases6_committed_callout));
-
+ string config = "{ \"interfaces-config\": {"
+ " \"interfaces\": [ \"*\" ]"
+ "},"
+ "\"preferred-lifetime\": 3000,"
+ "\"rebind-timer\": 2000, "
+ "\"renew-timer\": 1000, "
+ "\"subnet6\": [ { "
+ " \"pools\": [ { \"pool\": \"2001:db8:1::/64\" } ],"
+ " \"subnet\": \"2001:db8:1::/48\", "
+ " \"interface\": \"eth1\" "
+ " } ],"
+ "\"valid-lifetime\": 4000 }";
Dhcp6Client client;
client.setInterface("eth1");
client.requestAddress(0xabca, IOAddress("2001:db8:1::28"));
+
+ ASSERT_NO_THROW(configure(config, *client.getServer()));
+
+ ASSERT_NO_THROW(HooksManager::preCalloutsLibraryHandle().registerCallout(
+ "leases6_committed", leases6_committed_callout));
+
ASSERT_NO_THROW(client.doSARR());
// Make sure that we received a response
EXPECT_TRUE(callback_argument_names_ == expected_argument_names);
// Newly allocated lease should be returned.
- ASSERT_TRUE(callback_lease6_);
- EXPECT_EQ("2001:db8:1::28", callback_lease6_->addr_.toText());
+ ASSERT_TRUE(callback_new_leases6_);
+ ASSERT_EQ(1, callback_new_leases6_->size());
+ Lease6Ptr lease = callback_new_leases6_->at(0);
+ ASSERT_TRUE(lease);
+ EXPECT_EQ("2001:db8:1::28", lease->addr_.toText());
// Deleted lease must not be present, because it is a new allocation.
- EXPECT_FALSE(callback_deleted_lease6_);
+ ASSERT_TRUE(callback_deleted_leases6_);
+ EXPECT_TRUE(callback_deleted_leases6_->empty());
// Pkt passed to a callout must be configured to copy retrieved options.
EXPECT_TRUE(callback_qry_options_copy_);
EXPECT_EQ("leases6_committed", callback_name_);
// Renewed lease should be returned.
- ASSERT_TRUE(callback_lease6_);
- EXPECT_EQ("2001:db8:1::28", callback_lease6_->addr_.toText());
+ ASSERT_TRUE(callback_new_leases6_);
+ ASSERT_EQ(1, callback_new_leases6_->size());
+ lease = callback_new_leases6_->at(0);
+ ASSERT_TRUE(lease);
+ EXPECT_EQ("2001:db8:1::28", lease->addr_.toText());
// Deleted lease must not be present, because it is a new allocation.
- EXPECT_FALSE(callback_deleted_lease6_);
+ ASSERT_TRUE(callback_deleted_leases6_);
+ EXPECT_TRUE(callback_deleted_leases6_->empty());
// Pkt passed to a callout must be configured to copy retrieved options.
EXPECT_TRUE(callback_qry_options_copy_);
// Let's try to renew again but force the client to request a different
// address.
+ client.clearConfig();
+ client.clearRequestedIAs();
client.requestAddress(0xabca, IOAddress("2001:db8:1::29"));
- ASSERT_NO_THROW(client.doRequest());
+ ASSERT_NO_THROW(client.doRenew());
// Make sure that we received a response
ASSERT_TRUE(client.getContext().response_);
// Check that the callback called is indeed the one we installed
EXPECT_EQ("leases6_committed", callback_name_);
+#if 0
// New lease should be returned.
- ASSERT_TRUE(callback_lease6_);
- EXPECT_EQ("2001:db8:1::29", callback_lease6_->addr_.toText());
+ ASSERT_TRUE(callback_new_leases6_);
+ ASSERT_EQ(1, callback_new_leases6_->size());
+ lease = callback_new_leases6_->at(0);
+ ASSERT_TRUE(lease);
+ EXPECT_EQ("2001:db8:1::29", lease->addr_.toText());
// The old lease should have been deleted.
- ASSERT_TRUE(callback_deleted_lease6_);
- EXPECT_EQ("2001:db8:1::28", callback_deleted_lease6_->addr_.toText());
+ ASSERT_TRUE(callback_deleted_leases6_);
+ ASSERT_EQ(1, callback_deleted_leases6_->size());
+ lease = callback_deleted_leases6_->at(0);
+ ASSERT_TRUE(lease);
+ EXPECT_EQ("2001:db8:1::28", lease->addr_.toText());
+#endif
// Pkt passed to a callout must be configured to copy retrieved options.
EXPECT_TRUE(callback_qry_options_copy_);
// Now request an address that can't be allocated. The client should receive
// an error.
+ client.clearConfig();
+ client.clearRequestedIAs();
client.requestAddress(0xabca, IOAddress("4000::2"));
- //// client.ciaddr_ = IOAddress("10.0.0.1");
ASSERT_NO_THROW(client.doRequest());
// Check that the callback called is indeed the one we installed
EXPECT_EQ("leases6_committed", callback_name_);
- EXPECT_FALSE(callback_lease6_);
- EXPECT_FALSE(callback_deleted_lease6_);
+ ASSERT_TRUE(callback_new_leases6_);
+ ////EXPECT_TRUE(callback_new_leases6_->empty());
+ ASSERT_TRUE(callback_deleted_leases6_);
+ EXPECT_TRUE(callback_deleted_leases6_->empty());
}
// This test verifies that it is possible to park a packet as a result of
TEST_F(HooksDhcpv6SrvTest, leases6CommittedParkRequests) {
IfaceMgrTestConfig test_config(true);
+ string config = "{ \"interfaces-config\": {"
+ " \"interfaces\": [ \"*\" ]"
+ "},"
+ "\"preferred-lifetime\": 3000,"
+ "\"rebind-timer\": 2000, "
+ "\"renew-timer\": 1000, "
+ "\"subnet6\": [ { "
+ " \"pools\": [ { \"pool\": \"2001:db8:1::/64\" } ],"
+ " \"subnet\": \"2001:db8:1::/48\", "
+ " \"interface\": \"eth1\" "
+ " } ],"
+ "\"valid-lifetime\": 4000 }";
+
+ // Create first client and perform DORA.
+ Dhcp6Client client1;
+ client1.setInterface("eth1");
+ client1.requestAddress(0xabca, IOAddress("2001:db8:1::28"));
+
+ ASSERT_NO_THROW(configure(config, *client1.getServer()));
+
// This callout uses provided IO service object to post a function
// that unparks the packet. The packet is parked and can be unparked
// by simply calling IOService::poll.
ASSERT_NO_THROW(HooksManager::preCalloutsLibraryHandle().registerCallout(
"leases6_committed", leases6_committed_park_callout));
- // Create first client and perform DORA.
- Dhcp6Client client1;
- client1.setInterface("eth1");
- client1.requestAddress(0xabca, IOAddress("2001:db8:1::28"));
ASSERT_NO_THROW(client1.doSARR());
// We should be offered an address but the REPLY should not arrive
EXPECT_TRUE(callback_argument_names_ == expected_argument_names);
// Newly allocated lease should be passed to the callout.
- ASSERT_TRUE(callback_lease6_);
- EXPECT_EQ("2001:db8:1::28", callback_lease6_->addr_.toText());
+ ASSERT_TRUE(callback_new_leases6_);
+ ASSERT_EQ(1, callback_new_leases6_->size());
+ Lease6Ptr lease = callback_new_leases6_->at(0);
+ ASSERT_TRUE(lease);
+ EXPECT_EQ("2001:db8:1::28", lease->addr_.toText());
// Deleted lease must not be present, because it is a new allocation.
- EXPECT_FALSE(callback_deleted_lease6_);
+ ASSERT_TRUE(callback_deleted_leases6_);
+ EXPECT_TRUE(callback_deleted_leases6_->empty());
// Pkt passed to a callout must be configured to copy retrieved options.
EXPECT_TRUE(callback_qry_options_copy_);
EXPECT_FALSE(checkMarkerFileExists(UNLOAD_MARKER_FILE));
// The dhcp6_srv_configured should have been invoked and the provided
// parameters should be recorded.
+ //// not yet network_state
EXPECT_TRUE(checkMarkerFile(SRV_CONFIG_MARKER_FILE,
- "3io_contextjson_confignetwork_stateserver_config"));
+ "3io_contextjson_configserver_config"));
// Destroy the server, instance which should unload the libraries.
srv.reset();
// The server was destroyed, so the unload() function should now
// include the library number in its marker file.
+ //// not yet network_state
EXPECT_TRUE(checkMarkerFile(LOAD_MARKER_FILE, "3"));
EXPECT_TRUE(checkMarkerFile(UNLOAD_MARKER_FILE, "3"));
EXPECT_TRUE(checkMarkerFile(SRV_CONFIG_MARKER_FILE,
- "3io_contextjson_confignetwork_stateserver_config"));
+ "3io_contextjson_configserver_config"));
}
} // end of anonymous namespace