[svn] commit: r3575 - /branches/vorner-recursor-timeouts/src/lib/asiolink/tests/udpdns_unittest.cc
BIND 10 source code commits
bind10-changes at lists.isc.org
Sat Nov 20 16:12:35 UTC 2010
Author: vorner
Date: Sat Nov 20 16:12:35 2010
New Revision: 3575
Log:
Comment tests
And make them little bit stricter.
Modified:
branches/vorner-recursor-timeouts/src/lib/asiolink/tests/udpdns_unittest.cc
Modified: branches/vorner-recursor-timeouts/src/lib/asiolink/tests/udpdns_unittest.cc
==============================================================================
--- branches/vorner-recursor-timeouts/src/lib/asiolink/tests/udpdns_unittest.cc (original)
+++ branches/vorner-recursor-timeouts/src/lib/asiolink/tests/udpdns_unittest.cc Sat Nov 20 16:12:35 2010
@@ -32,16 +32,22 @@
// FIXME Shouldn't we send something that is real message?
const char TEST_DATA[] = "TEST DATA";
+// Test fixture for the asiolink::UDPQuery.
class UDPQueryTest : public ::testing::Test,
public asiolink::UDPQuery::Callback
{
public:
+ // Expected result of the callback
asiolink::UDPQuery::Result expected_;
+ // Did the callback run already?
bool run_;
+ // We use an io_service to run the query
io_service service_;
+ // Something to ask
Question question_;
- // To keep a reference so noone calls delete this;
+ // Buffer where the UDPQuery will store response
OutputBufferPtr buffer_;
+ // The query we are testing
asiolink::UDPQuery query_;
UDPQueryTest() :
@@ -52,10 +58,16 @@
TEST_PORT, buffer_, this, 100)
{ }
+ // This is the callback's (), so it can be called.
void operator()(asiolink::UDPQuery::Result result) {
+ // We check the query returns the correct result
EXPECT_EQ(expected_, result);
+ // Check it is called only once
+ EXPECT_FALSE(run_);
+ // And mark the callback was called
run_ = true;
}
+ // A response handler, pretending to be remote DNS server
void respond(udp::endpoint* remote, udp::socket* socket) {
// Some data came, just send something back.
socket->send_to(asio::buffer(TEST_DATA, sizeof TEST_DATA),
@@ -64,17 +76,31 @@
}
};
+/*
+ * Test that when we run the query and stop it after it was run,
+ * it returs "stopped" correctly.
+ *
+ * That is why is stop() posted to the service_ as well instead
+ * of calling it.
+ */
TEST_F(UDPQueryTest, stop) {
expected_ = asiolink::UDPQuery::STOPPED;
+ // Post the query
service_.post(query_);
- // Make sure stop is called after executing () of the query
- // Why doesn't boost::bind support default parameters?
+ // Post query_.stop() (yes, the boost::bind thing is just
+ // query_.stop()).
service_.post(boost::bind(&asiolink::UDPQuery::stop, query_,
asiolink::UDPQuery::STOPPED));
+ // Run both of them
service_.run();
EXPECT_TRUE(run_);
}
+/*
+ * Test that when we queue the query to service_ and call stop()
+ * before it gets executed, it acts sanely as well (eg. has the
+ * same result as running stop() after - calls the callback).
+ */
TEST_F(UDPQueryTest, prematureStop) {
expected_ = asiolink::UDPQuery::STOPPED;
// Stop before it is started
@@ -84,6 +110,9 @@
EXPECT_TRUE(run_);
}
+/*
+ * Test that it will timeout when no answer will arriwe.
+ */
TEST_F(UDPQueryTest, timeout) {
expected_ = asiolink::UDPQuery::TIME_OUT;
service_.post(query_);
@@ -91,6 +120,12 @@
EXPECT_TRUE(run_);
}
+/*
+ * Test that it will succeed when we fake an answer and
+ * stores the same data we send.
+ *
+ * This is done trough a real socket on loopback address.
+ */
TEST_F(UDPQueryTest, receive) {
expected_ = asiolink::UDPQuery::SUCCESS;
udp::socket socket(service_, udp::v4());
More information about the bind10-changes
mailing list