BIND 10 trac2231, updated. 53e77f34ca655fc29320bba05a12a98355c365fb [2231] Simplify the duration measurements with boost::posix_time.
BIND 10 source code commits
bind10-changes at lists.isc.org
Thu Sep 13 07:10:52 UTC 2012
The branch, trac2231 has been updated
via 53e77f34ca655fc29320bba05a12a98355c365fb (commit)
from faf0803218384ff5b61ade0bc13e842dcd384ffd (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 53e77f34ca655fc29320bba05a12a98355c365fb
Author: Marcin Siodelski <marcin at isc.org>
Date: Thu Sep 13 09:10:30 2012 +0200
[2231] Simplify the duration measurements with boost::posix_time.
-----------------------------------------------------------------------
Summary of changes:
src/lib/dhcp/tests/iface_mgr_unittest.cc | 90 ++++++++++++++----------------
1 file changed, 41 insertions(+), 49 deletions(-)
-----------------------------------------------------------------------
diff --git a/src/lib/dhcp/tests/iface_mgr_unittest.cc b/src/lib/dhcp/tests/iface_mgr_unittest.cc
index 13d471a..adcba31 100644
--- a/src/lib/dhcp/tests/iface_mgr_unittest.cc
+++ b/src/lib/dhcp/tests/iface_mgr_unittest.cc
@@ -218,6 +218,7 @@ TEST_F(IfaceMgrTest, getIface) {
}
TEST_F(IfaceMgrTest, receiveTimeout6) {
+ using namespace boost::posix_time;
std::cout << "Testing DHCPv6 packet reception timeouts."
<< " Test will block for a few seconds when waiting"
<< " for timeout to occur." << std::endl;
@@ -233,45 +234,40 @@ TEST_F(IfaceMgrTest, receiveTimeout6) {
ASSERT_GT(socket1, 0);
// Time when call to IfaceMgr::receive6() started.
- timeval start_time;
+ ptime start_time;
// Time when call to IfaceMgr::receive6() ended.
- timeval stop_time;
+ ptime stop_time;
+ // Time duration between start_time and stop_time.
+ time_duration duration;
// Remember when we call receive6().
- memset(&start_time, 0, sizeof(start_time));
- memset(&stop_time, 0, sizeof(start_time));
- gettimeofday(&start_time, NULL);
+ start_time = microsec_clock::universal_time();
// Call receive with timeout of 1s + 400000us = 1.4s.
Pkt6Ptr pkt;
ASSERT_NO_THROW(pkt = ifacemgr->receive6(1, 400000));
// Remember when call to receive6() ended.
- gettimeofday(&stop_time, NULL);
+ stop_time = microsec_clock::universal_time();
// We did not send a packet to lo interface so we expect that
// nothing has been received and timeout has been reached.
ASSERT_FALSE(pkt);
// Calculate duration of call to receive6().
- stop_time.tv_sec -= start_time.tv_sec;
- stop_time.tv_usec -= start_time.tv_usec;
- // Duration should be equal or greater or equal timeout specified
- // for the receive6() call.
- EXPECT_EQ(1, stop_time.tv_sec);
- EXPECT_GE(stop_time.tv_usec, 400000);
+ duration = stop_time - start_time;
+ // We stop the clock when the call completes so it does not
+ // precisely reflect the receive timeout. However the
+ // uncertainity should be low enough to expect that measured
+ // value is in the range <1.4; 2).
+ EXPECT_GE(duration.total_microseconds(), 1400000);
+ EXPECT_LT(duration.total_seconds(), 2);
// Test timeout shorter than 1s.
- memset(&start_time, 0, sizeof(start_time));
- memset(&stop_time, 0, sizeof(start_time));
- gettimeofday(&start_time, NULL);
+ start_time = microsec_clock::universal_time();
ASSERT_NO_THROW(pkt = ifacemgr->receive6(0, 500000));
- gettimeofday(&stop_time, NULL);
+ stop_time = microsec_clock::universal_time();
ASSERT_FALSE(pkt);
- stop_time.tv_sec -= start_time.tv_sec;
- stop_time.tv_usec -= start_time.tv_usec;
- // Even though the way we measure duration of receive6() may result in
- // durations slightly longer than timeout it is safe to assume that
- // measured value will not exceed 1s when timeout is 0.5s.
- // If it exceeds, this is an error and should be investigated.
- EXPECT_EQ(0, stop_time.tv_sec);
- EXPECT_GE(stop_time.tv_usec, 500000);
+ duration = stop_time - start_time;
+ // Check if measured duration is within <0.5s; 1s).
+ EXPECT_GE(duration.total_microseconds(), 500000);
+ EXPECT_LT(duration.total_seconds(), 1);
// Test with invalid fractional timeout values.
EXPECT_THROW(ifacemgr->receive6(0, 1000000), isc::BadValue);
@@ -279,6 +275,7 @@ TEST_F(IfaceMgrTest, receiveTimeout6) {
}
TEST_F(IfaceMgrTest, receiveTimeout4) {
+ using namespace boost::posix_time;
std::cout << "Testing DHCPv6 packet reception timeouts."
<< " Test will block for a few seconds when waiting"
<< " for timeout to occur." << std::endl;
@@ -294,45 +291,40 @@ TEST_F(IfaceMgrTest, receiveTimeout4) {
ASSERT_GT(socket1, 0);
// Time when call to IfaceMgr::receive4() started.
- timeval start_time;
+ ptime start_time;
// Time when call to IfaceMgr::receive4() ended.
- timeval stop_time;
+ ptime stop_time;
+ // Time duration between start_time and stop_time.
+ time_duration duration;
+ Pkt4Ptr pkt;
// Remember when we call receive4().
- memset(&start_time, 0, sizeof(start_time));
- memset(&stop_time, 0, sizeof(start_time));
- gettimeofday(&start_time, NULL);
+ start_time = microsec_clock::universal_time();
// Call receive with timeout of 2s + 300000us = 2.3s.
- Pkt4Ptr pkt;
ASSERT_NO_THROW(pkt = ifacemgr->receive4(2, 300000));
// Remember when call to receive4() ended.
- gettimeofday(&stop_time, NULL);
+ stop_time = microsec_clock::universal_time();
// We did not send a packet to lo interface so we expect that
// nothing has been received and timeout has been reached.
ASSERT_FALSE(pkt);
// Calculate duration of call to receive4().
- stop_time.tv_sec -= start_time.tv_sec;
- stop_time.tv_usec -= start_time.tv_usec;
- // Duration should be equal or greater than timeout specified
- // for the receive4() call.
- EXPECT_EQ(2, stop_time.tv_sec);
- EXPECT_GE(stop_time.tv_usec, 300000);
+ duration = stop_time - start_time;
+ // We stop the clock when the call completes so it does not
+ // precisely reflect the receive timeout. However the
+ // uncertainity should be low enough to expect that measured
+ // value is in the range <2.3s; 3s).
+ EXPECT_GE(duration.total_microseconds(), 2300000);
+ EXPECT_LT(duration.total_seconds(), 3);
// Test timeout shorter than 1s.
- memset(&start_time, 0, sizeof(start_time));
- memset(&stop_time, 0, sizeof(start_time));
- gettimeofday(&start_time, NULL);
+ start_time = microsec_clock::universal_time();
ASSERT_NO_THROW(pkt = ifacemgr->receive4(0, 400000));
- gettimeofday(&stop_time, NULL);
+ stop_time = microsec_clock::universal_time();
ASSERT_FALSE(pkt);
- stop_time.tv_sec -= start_time.tv_sec;
- stop_time.tv_usec -= start_time.tv_usec;
- // Even though the way we measure duration of receive4() may result
- // in durations slightly longer than timeout it is safe to assume
- // that measured value will not exceed 1s when timeout is only 0.4s.
- // If it exceeds, this is an error and should be investigated.
- EXPECT_EQ(0, stop_time.tv_sec);
- EXPECT_GE(stop_time.tv_usec, 400000);
+ duration = stop_time - start_time;
+ // Check if measured duration is within <0.4s; 1s).
+ EXPECT_GE(duration.total_microseconds(), 400000);
+ EXPECT_LT(duration.total_seconds(), 1);
// Test with invalid fractional timeout values.
EXPECT_THROW(ifacemgr->receive6(0, 1000000), isc::BadValue);
More information about the bind10-changes
mailing list