From: Tomek Mrugalski Date: Tue, 30 Oct 2012 16:02:11 +0000 (+0100) Subject: [2414] getLease6(duid, iaid, subnet_id) implemented in memfile backend X-Git-Tag: trac2487_base~1^2~31^2~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fdcffb798707a238b43f24a7dcc725acc4a4c962;p=thirdparty%2Fkea.git [2414] getLease6(duid, iaid, subnet_id) implemented in memfile backend --- diff --git a/src/lib/dhcp/tests/lease_mgr_unittest.cc b/src/lib/dhcp/tests/lease_mgr_unittest.cc index e46bd09386..348fd9ff07 100644 --- a/src/lib/dhcp/tests/lease_mgr_unittest.cc +++ b/src/lib/dhcp/tests/lease_mgr_unittest.cc @@ -99,6 +99,27 @@ TEST_F(LeaseMgrTest, addGetDelete) { EXPECT_EQ(x->t1_, 50); EXPECT_EQ(x->t2_, 80); + // Test getLease6(duid, iaid, subnet_id) - positive case + Lease6Ptr y = leaseMgr->getLease6(*duid, iaid, subnet_id); + ASSERT_TRUE(y); + EXPECT_TRUE(*y->duid_ == *duid); + EXPECT_EQ(y->iaid_, iaid); + EXPECT_EQ(y->addr_.toText(), addr.toText()); + + // Test getLease6(duid, iaid, subnet_id) - wrong iaid + uint32_t invalid_iaid = 9; // no such iaid + y = leaseMgr->getLease6(*duid, invalid_iaid, subnet_id); + EXPECT_FALSE(y); + + uint32_t invalid_subnet_id = 999; + y = leaseMgr->getLease6(*duid, iaid, invalid_subnet_id); + EXPECT_FALSE(y); + + // truncated duid + DuidPtr invalid_duid(new DUID(llt, sizeof(llt) - 1)); + y = leaseMgr->getLease6(*invalid_duid, iaid, subnet_id); + EXPECT_FALSE(y); + // should return false - there's no such address EXPECT_FALSE(leaseMgr->deleteLease6(IOAddress("2001:db8:1::789"))); diff --git a/src/lib/dhcp/tests/memfile_lease_mgr.cc b/src/lib/dhcp/tests/memfile_lease_mgr.cc index 195fd8bb97..adef722043 100644 --- a/src/lib/dhcp/tests/memfile_lease_mgr.cc +++ b/src/lib/dhcp/tests/memfile_lease_mgr.cc @@ -78,9 +78,16 @@ Lease6Collection Memfile_LeaseMgr::getLease6(const DUID& , uint32_t ) const { return (Lease6Collection()); } -Lease6Ptr Memfile_LeaseMgr::getLease6(const DUID&, uint32_t, - SubnetID) const { - +Lease6Ptr Memfile_LeaseMgr::getLease6(const DUID& duid, uint32_t iaid, + SubnetID subnet_id) const { + /// @todo: Slow, naive implementation. Write it using additional indexes + for (Lease6Storage::iterator l = storage6_.begin(); l != storage6_.end(); ++l) { + if ( (*((*l)->duid_) == duid) && + ( (*l)->iaid_ == iaid) && + ( (*l)->subnet_id_ == subnet_id)) { + return (*l); + } + } return (Lease6Ptr()); }