Browse Source

[trac678] Cleanups

* Wrapped long lines, whitespace fixes
* Some spelling
* Test port in the private range
Michal 'vorner' Vaner 14 years ago
parent
commit
da6a8d0c07
2 changed files with 362 additions and 338 deletions
  1. 1 1
      ChangeLog
  2. 361 337
      src/lib/asiolink/tests/dns_server_unittest.cc

+ 1 - 1
ChangeLog

@@ -1,4 +1,4 @@
-	194.  [default] feng
+  194.  [default]   feng
 	Refactor the stop interface for tcp and udp servers which
 	will still running after stop, and add unittest for it.
 

+ 361 - 337
src/lib/asiolink/tests/dns_server_unittest.cc

@@ -36,7 +36,7 @@
 /// The general work flow for dns server, is that wait for user
 /// query, once get one query, we will check the data is valid or
 /// not, if it passed, we will try to loop up the question, then
-/// composite the answer and finally send it back to user. The server
+/// compose the answer and finally send it back to user. The server
 /// may be stopped at any point during this porcess, so the test strategy
 /// is that we define 5 stop point and stop the server at these
 /// 5 points, to check whether stop is successful
@@ -64,407 +64,431 @@
 using namespace asiolink;
 using namespace asio;
 namespace {
-    static const std::string server_ip = "127.0.0.1";
-    const int server_port = 5553;
-    static const std::string query_message("BIND10 is awesome");//message client send to
-                                                                //udp server, which is
-                                                                //invalid dns package
-                                                                //just for simple testing
-
-    // \brief provide capacity to derived class the ability
-    // to stop DNSServer at certern point
-    class ServerStopper {
-        public:
-            ServerStopper(DNSServer* server_to_stop = NULL) :
-                server_to_stop_(server_to_stop),
-                stop_server_after_process_(false)
-            {
-            }
+static const std::string server_ip = "127.0.0.1";
+const int server_port = 5553;
+static const std::string query_message("BIND10 is awesome");//message client send to
+                                                            //udp server, which is
+                                                            //invalid dns package
+                                                            //just for simple testing
+
+// \brief provide capacity to derived class the ability
+// to stop DNSServer at certern point
+class ServerStopper {
+    public:
+        ServerStopper(DNSServer* server_to_stop = NULL) :
+            server_to_stop_(server_to_stop),
+            stop_server_after_process_(false)
+        {
+        }
 
-            virtual ~ServerStopper(){}
+        virtual ~ServerStopper(){}
 
-            void setServerToStop(DNSServer* server) { server_to_stop_ = server;}
-            void willStopServerAfterProcess() { stop_server_after_process_ = true;}
-            void willResumeServerAfterProcess() { stop_server_after_process_ = false;}
+        void setServerToStop(DNSServer* server) { server_to_stop_ = server; }
+        void willStopServerAfterProcess() {
+            stop_server_after_process_ = true;
+        }
+        void willResumeServerAfterProcess() {
+            stop_server_after_process_ = false;
+        }
 
-            void process() const {
-                if (server_to_stop_ && stop_server_after_process_) {
-                    server_to_stop_->stop();
-                }
+        void process() const {
+            if (server_to_stop_ && stop_server_after_process_) {
+                server_to_stop_->stop();
             }
+        }
 
-        private:
-            DNSServer* server_to_stop_;
-            bool stop_server_after_process_;
-    };
+    private:
+        DNSServer* server_to_stop_;
+        bool stop_server_after_process_;
+};
 
-    // \brief no check logic at all,just provide a checkpoint to stop the server
-    class DummyChecker : public SimpleCallback, public ServerStopper {
-        public:
-            DummyChecker() : ServerStopper(){
-            }
+// \brief no check logic at all,just provide a checkpoint to stop the server
+class DummyChecker : public SimpleCallback, public ServerStopper {
+    public:
+        DummyChecker() : ServerStopper(){
+        }
 
-            bool isMessageExpected() const { return true;}
+        bool isMessageExpected() const { return true;}
 
-            virtual void operator()(const IOMessage&) const {
-                process();
-            }
-    };
-
-    // \brief no lookup logic at all,just provide a checkpoint to stop the server
-    class DummyLookup : public DNSLookup, public ServerStopper{
-        public:
-            DummyLookup() : ServerStopper(){}
-            void operator()(const IOMessage& io_message,
-                    isc::dns::MessagePtr message,
-                    isc::dns::MessagePtr answer_message,
-                    isc::dns::OutputBufferPtr buffer,
-                    DNSServer* server) const
-            {
-                process();
-                server->resume(true);
-            }
-    };
-
-    // \brief copy the data received from user to the answer part
-    //  provide checkpoint to stop server
-    class SimpleAnswer : public DNSAnswer, public ServerStopper {
-        public:
-            SimpleAnswer() : ServerStopper() {}
-            void operator()(const IOMessage& message,
-                    isc::dns::MessagePtr query_message,
-                    isc::dns::MessagePtr answer_message,
-                    isc::dns::OutputBufferPtr buffer) const
-            {
-                //copy what we get from user
-                buffer->writeData(message.getData(), message.getDataSize());
-                process();
-            }
+        virtual void operator()(const IOMessage&) const {
+            process();
+        }
+};
+
+// \brief no lookup logic at all,just provide a checkpoint to stop the server
+class DummyLookup : public DNSLookup, public ServerStopper{
+    public:
+        DummyLookup() : ServerStopper(){}
+        void operator()(const IOMessage& io_message,
+                isc::dns::MessagePtr message,
+                isc::dns::MessagePtr answer_message,
+                isc::dns::OutputBufferPtr buffer,
+                DNSServer* server) const
+        {
+            process();
+            server->resume(true);
+        }
+};
+
+// \brief copy the data received from user to the answer part
+//  provide checkpoint to stop server
+class SimpleAnswer : public DNSAnswer, public ServerStopper {
+    public:
+        SimpleAnswer() : ServerStopper() {}
+        void operator()(const IOMessage& message,
+                isc::dns::MessagePtr query_message,
+                isc::dns::MessagePtr answer_message,
+                isc::dns::OutputBufferPtr buffer) const
+        {
+            //copy what we get from user
+            buffer->writeData(message.getData(), message.getDataSize());
+            process();
+        }
 
-    };
+};
 
 
 
-    // \brief simple client, send one string to server and wait for response
-    //  in case, server stopped and client cann't get response, there is a timer wait
-    //  for specified seconds (the value is just a estimate since server process logic is quite
-    //  simple, and all the intercommunication is local) then cancel the waiting.
-    class SimpleClient : public ServerStopper
+// \brief simple client, send one string to server and wait for response
+//  in case, server stopped and client cann't get response, there is a timer wait
+//  for specified seconds (the value is just a estimate since server process logic is quite
+//  simple, and all the intercommunication is local) then cancel the waiting.
+class SimpleClient : public ServerStopper
+{
+    public:
+    static const size_t MAX_DATA_LEN = 256;
+    SimpleClient(asio::io_service& service,
+                 unsigned int wait_server_time_out) :
+        ServerStopper()
     {
-        public:
-        static const size_t MAX_DATA_LEN = 256;
-        SimpleClient(asio::io_service& service, unsigned int wait_server_time_out) 
-        : ServerStopper()
-        {
-            wait_for_response_timer_.reset(new deadline_timer(service));
-            received_data_ = new char[MAX_DATA_LEN];
-            wait_server_time_out_ = wait_server_time_out;
-        }
-
-        virtual ~SimpleClient() {
-            delete [] received_data_;
-        }
+        wait_for_response_timer_.reset(new deadline_timer(service));
+        received_data_ = new char[MAX_DATA_LEN];
+        wait_server_time_out_ = wait_server_time_out;
+    }
 
-        void setGetFeedbackCallback(boost::function<void()>& func) {
-            get_response_call_back_ = func;
-        }
+    virtual ~SimpleClient() {
+        delete [] received_data_;
+    }
 
-        virtual void sendDataThenWaitForFeedback(const std::string& data)  = 0;
-        virtual std::string getReceivedData() const = 0;
+    void setGetFeedbackCallback(boost::function<void()>& func) {
+        get_response_call_back_ = func;
+    }
 
-        void startTimer() {
-            wait_for_response_timer_->cancel();
-            wait_for_response_timer_->expires_from_now(boost::posix_time::seconds(wait_server_time_out_));
-            wait_for_response_timer_->async_wait(boost::bind(&SimpleClient::stopWaitingforResponse, this));
-        }
+    virtual void sendDataThenWaitForFeedback(const std::string& data)  = 0;
+    virtual std::string getReceivedData() const = 0;
+
+    void startTimer() {
+        wait_for_response_timer_->cancel();
+        wait_for_response_timer_->
+            expires_from_now(boost::posix_time::
+                             seconds(wait_server_time_out_));
+        wait_for_response_timer_->
+            async_wait(boost::bind(&SimpleClient::stopWaitingforResponse,
+                                   this));
+    }
 
-        void getResponseCallBack(const asio::error_code& error, size_t received_bytes) {
-            wait_for_response_timer_->cancel();
-            if (!error)
-                received_data_len_ = received_bytes;
-            if (!get_response_call_back_.empty()) {
-                get_response_call_back_();
-            }
-            process();
+    void getResponseCallBack(const asio::error_code& error, size_t
+                             received_bytes)
+    {
+        wait_for_response_timer_->cancel();
+        if (!error)
+            received_data_len_ = received_bytes;
+        if (!get_response_call_back_.empty()) {
+            get_response_call_back_();
         }
+        process();
+    }
 
 
-        protected:
-        virtual void stopWaitingforResponse() = 0;
+    protected:
+    virtual void stopWaitingforResponse() = 0;
 
-        boost::shared_ptr<deadline_timer> wait_for_response_timer_;
-        char* received_data_;
-        size_t received_data_len_;
-        boost::function<void()> get_response_call_back_;
-        unsigned int wait_server_time_out_;
-    };
+    boost::shared_ptr<deadline_timer> wait_for_response_timer_;
+    char* received_data_;
+    size_t received_data_len_;
+    boost::function<void()> get_response_call_back_;
+    unsigned int wait_server_time_out_;
+};
 
 
 
-    class UDPClient : public SimpleClient
+class UDPClient : public SimpleClient
+{
+    public:
+    static const unsigned int server_time_out = 3;  // after 3 seconds without feedback
+                                                    // client will stop wait
+    UDPClient(asio::io_service& service, const ip::udp::endpoint& server) :
+        SimpleClient(service, server_time_out)
     {
-        public:
-        static const unsigned int server_time_out = 3;  // after 3 seconds without feedback
-                                                        // client will stop wait
-        UDPClient(asio::io_service& service, const ip::udp::endpoint& server) 
-            : SimpleClient(service, server_time_out) 
-        {
-            server_ = server;
-            socket_.reset(new ip::udp::socket(service));
-            socket_->open(ip::udp::v4());
-        }
+        server_ = server;
+        socket_.reset(new ip::udp::socket(service));
+        socket_->open(ip::udp::v4());
+    }
 
 
-        void sendDataThenWaitForFeedback(const std::string& data) {
-            received_data_len_ = 0;
-            socket_->send_to(buffer(data.c_str(), data.size() + 1), server_);
-            socket_->async_receive_from(buffer(received_data_, MAX_DATA_LEN), received_from_,
-                    boost::bind(&SimpleClient::getResponseCallBack, this, _1, _2));
-            startTimer();
-        }
+    void sendDataThenWaitForFeedback(const std::string& data) {
+        received_data_len_ = 0;
+        socket_->send_to(buffer(data.c_str(), data.size() + 1), server_);
+        socket_->async_receive_from(buffer(received_data_, MAX_DATA_LEN),
+                                    received_from_,
+                                    boost::bind(&SimpleClient::
+                                                getResponseCallBack, this, _1,
+                                                _2));
+        startTimer();
+    }
 
-        virtual std::string getReceivedData() const {
-            if (received_data_len_ == 0)
-                return std::string("");
-            else
-                return std::string(received_data_);
-        }
+    virtual std::string getReceivedData() const {
+        if (received_data_len_ == 0)
+            return std::string("");
+        else
+            return std::string(received_data_);
+    }
 
 
-        private:
-        void stopWaitingforResponse() {
-            socket_->close();
-        }
+    private:
+    void stopWaitingforResponse() {
+        socket_->close();
+    }
 
-        boost::shared_ptr<ip::udp::socket> socket_;
-        ip::udp::endpoint server_;
-        ip::udp::endpoint received_from_;
-    };
+    boost::shared_ptr<ip::udp::socket> socket_;
+    ip::udp::endpoint server_;
+    ip::udp::endpoint received_from_;
+};
 
 
-    class TCPClient : public SimpleClient
+class TCPClient : public SimpleClient
+{
+    public:
+    static const unsigned int server_time_out = 5; // after 10 seconds without feedback
+                                                    // client will stop wait, this includes
+                                                    // connect, send message and recevice message
+    TCPClient(asio::io_service& service, const ip::tcp::endpoint& server)
+        : SimpleClient(service, server_time_out)
     {
-        public:
-        static const unsigned int server_time_out = 5; // after 10 seconds without feedback
-                                                        // client will stop wait, this includes
-                                                        // connect, send message and recevice message
-        TCPClient(asio::io_service& service, const ip::tcp::endpoint& server)
-            : SimpleClient(service, server_time_out)
-        {
-            server_ = server;
-            socket_.reset(new ip::tcp::socket(service));
-            socket_->open(ip::tcp::v4());
-        }
+        server_ = server;
+        socket_.reset(new ip::tcp::socket(service));
+        socket_->open(ip::tcp::v4());
+    }
 
 
-        virtual void sendDataThenWaitForFeedback(const std::string &data) {
-            received_data_len_ = 0;
-            data_to_send_ = data;
-            data_to_send_len_ = data.size() + 1;
-            socket_->async_connect(server_,boost::bind(&TCPClient::connectHandler,this, _1));
-            startTimer();
-        }
+    virtual void sendDataThenWaitForFeedback(const std::string &data) {
+        received_data_len_ = 0;
+        data_to_send_ = data;
+        data_to_send_len_ = data.size() + 1;
+        socket_->async_connect(server_, boost::bind(&TCPClient::connectHandler,
+                                                    this, _1));
+        startTimer();
+    }
 
-        virtual std::string getReceivedData() const {
-            if (received_data_len_ == 0)
-                return std::string("");
-            else
-                // the first two bytes is data length
-                return std::string(received_data_ + 2);
-        }
+    virtual std::string getReceivedData() const {
+        if (received_data_len_ == 0)
+            return std::string("");
+        else
+            // the first two bytes is data length
+            return std::string(received_data_ + 2);
+    }
 
-        private:
-        void stopWaitingforResponse() {
-            socket_->close();
-        }
+    private:
+    void stopWaitingforResponse() {
+        socket_->close();
+    }
 
-        void connectHandler(const asio::error_code& error) {
-            if (!error) {
-                data_to_send_len_ = htons(data_to_send_len_);
-                socket_->async_send(buffer(&data_to_send_len_, 2),
-                        boost::bind(&TCPClient::sendMessageBodyHandler, this, _1, _2));
-            }
+    void connectHandler(const asio::error_code& error) {
+        if (!error) {
+            data_to_send_len_ = htons(data_to_send_len_);
+            socket_->async_send(buffer(&data_to_send_len_, 2),
+                                boost::bind(&TCPClient::sendMessageBodyHandler,
+                                            this, _1, _2));
         }
+    }
 
-        void sendMessageBodyHandler(const asio::error_code& error, size_t send_bytes) {
-            if (!error && send_bytes == 2) {
-                socket_->async_send(buffer(data_to_send_.c_str(), data_to_send_.size() + 1),
-                        boost::bind(&TCPClient::finishSendHandler, this, _1, _2));
-            }
+    void sendMessageBodyHandler(const asio::error_code& error,
+                                size_t send_bytes)
+    {
+        if (!error && send_bytes == 2) {
+            socket_->async_send(buffer(data_to_send_.c_str(),
+                                       data_to_send_.size() + 1),
+                    boost::bind(&TCPClient::finishSendHandler, this, _1, _2));
         }
+    }
 
-        void finishSendHandler(const asio::error_code& error, size_t send_bytes) {
-            if (!error && send_bytes == data_to_send_.size() + 1) {
-                socket_->async_receive(buffer(received_data_, MAX_DATA_LEN),
-                       boost::bind(&SimpleClient::getResponseCallBack, this, _1, _2));
-            } 
+    void finishSendHandler(const asio::error_code& error, size_t send_bytes) {
+        if (!error && send_bytes == data_to_send_.size() + 1) {
+            socket_->async_receive(buffer(received_data_, MAX_DATA_LEN),
+                   boost::bind(&SimpleClient::getResponseCallBack, this, _1,
+                               _2));
         }
+    }
 
-        boost::shared_ptr<ip::tcp::socket> socket_;
-        ip::tcp::endpoint server_;
-        std::string data_to_send_;
-        uint16_t data_to_send_len_;
-    };
-
-
-
-    // \brief provide the context which including two client and
-    // two server, udp client will only communicate with udp server, same for tcp client
-    class DNSServerTest : public::testing::Test {
-        protected:
-            DNSServerTest() {
-                ip::address server_address = ip::address::from_string(server_ip);
-                checker_ = new DummyChecker();
-                lookup_ = new DummyLookup();
-                answer_ = new SimpleAnswer();
-                udp_server_ = new UDPServer(service_, server_address, server_port, checker_, lookup_, answer_);
-                udp_client_ = new UDPClient(service_, ip::udp::endpoint(server_address, server_port));
-                tcp_server_ = new TCPServer(service_, server_address, server_port, checker_, lookup_, answer_);
-                tcp_client_ = new TCPClient(service_, ip::tcp::endpoint(server_address, server_port));
-           }
-
-
-            ~DNSServerTest() {
-                delete checker_;
-                delete lookup_;
-                delete answer_;
-                delete udp_server_;
-                delete udp_client_;
-                delete tcp_server_;
-                delete tcp_client_;
-            }
+    boost::shared_ptr<ip::tcp::socket> socket_;
+    ip::tcp::endpoint server_;
+    std::string data_to_send_;
+    uint16_t data_to_send_len_;
+};
+
+
+
+// \brief provide the context which including two client and
+// two server, udp client will only communicate with udp server, same for tcp client
+class DNSServerTest : public::testing::Test {
+    protected:
+        DNSServerTest() {
+            ip::address server_address = ip::address::from_string(server_ip);
+            checker_ = new DummyChecker();
+            lookup_ = new DummyLookup();
+            answer_ = new SimpleAnswer();
+            udp_server_ = new UDPServer(service_, server_address, server_port,
+                                        checker_, lookup_, answer_);
+            udp_client_ = new UDPClient(service_,
+                                        ip::udp::endpoint(server_address,
+                                                          server_port));
+            tcp_server_ = new TCPServer(service_, server_address, server_port,
+                                        checker_, lookup_, answer_);
+            tcp_client_ = new TCPClient(service_,
+                                        ip::tcp::endpoint(server_address,
+                                                          server_port));
+       }
+
+
+        ~DNSServerTest() {
+            delete checker_;
+            delete lookup_;
+            delete answer_;
+            delete udp_server_;
+            delete udp_client_;
+            delete tcp_server_;
+            delete tcp_client_;
+        }
 
-            void prepareTestDNSServer(DNSServer* server) {
-                checker_->setServerToStop(server);
-                lookup_->setServerToStop(server);
-                answer_->setServerToStop(server);
-                udp_client_->setServerToStop(server);
-                tcp_client_->setServerToStop(server);
-            }
+        void prepareTestDNSServer(DNSServer* server) {
+            checker_->setServerToStop(server);
+            lookup_->setServerToStop(server);
+            answer_->setServerToStop(server);
+            udp_client_->setServerToStop(server);
+            tcp_client_->setServerToStop(server);
+        }
 
-            void testStopServerByStopper(DNSServer* server, SimpleClient* client, ServerStopper* stopper) {
-                prepareTestDNSServer(server);
-                stopper->willStopServerAfterProcess();
-                (*server)();
-                client->sendDataThenWaitForFeedback(query_message);
-                service_.run();
-            }
+        void testStopServerByStopper(DNSServer* server, SimpleClient* client,
+                                     ServerStopper* stopper)
+        {
+            prepareTestDNSServer(server);
+            stopper->willStopServerAfterProcess();
+            (*server)();
+            client->sendDataThenWaitForFeedback(query_message);
+            service_.run();
+        }
 
-            DummyChecker* checker_;
-            DummyLookup*  lookup_;
-            SimpleAnswer* answer_;
-            UDPServer*    udp_server_;
-            UDPClient*    udp_client_;
-            TCPClient*    tcp_client_;
-            TCPServer*    tcp_server_;
-            asio::io_service service_;
-    };
-
-
-    // Test whether server stopped successfully after client get response
-    // client will send query and start to wait for response, once client
-    // get response, udp server will be stopped, the io service won't quit
-    // if udp server doesn't stop successfully.
-    //
-    // \note all the following tests is based on the fact that if the server
-    // doesn't stop successfully, io service run will block forever
-    TEST_F(DNSServerTest, stopUDPServerAfterOneQuery) {
-        testStopServerByStopper(udp_server_, udp_client_, udp_client_);
-        EXPECT_EQ(query_message, udp_client_->getReceivedData());
-    }
+        DummyChecker* checker_;
+        DummyLookup*  lookup_;
+        SimpleAnswer* answer_;
+        UDPServer*    udp_server_;
+        UDPClient*    udp_client_;
+        TCPClient*    tcp_client_;
+        TCPServer*    tcp_server_;
+        asio::io_service service_;
+};
+
+
+// Test whether server stopped successfully after client get response
+// client will send query and start to wait for response, once client
+// get response, udp server will be stopped, the io service won't quit
+// if udp server doesn't stop successfully.
+//
+// \note all the following tests is based on the fact that if the server
+// doesn't stop successfully, io service run will block forever
+TEST_F(DNSServerTest, stopUDPServerAfterOneQuery) {
+    testStopServerByStopper(udp_server_, udp_client_, udp_client_);
+    EXPECT_EQ(query_message, udp_client_->getReceivedData());
+}
 
-    // Test whether udp server stopped successfully before server start to serve
-    TEST_F(DNSServerTest, stopUDPServerBeforeItStartServing) {
-        udp_server_->stop();
-        testStopServerByStopper(udp_server_, udp_client_, udp_client_);
-        EXPECT_EQ(std::string(""), udp_client_->getReceivedData());
-    }
+// Test whether udp server stopped successfully before server start to serve
+TEST_F(DNSServerTest, stopUDPServerBeforeItStartServing) {
+    udp_server_->stop();
+    testStopServerByStopper(udp_server_, udp_client_, udp_client_);
+    EXPECT_EQ(std::string(""), udp_client_->getReceivedData());
+}
 
 
-    // Test whether udp server stopped successfully during message check
-    TEST_F(DNSServerTest, stopUDPServerDuringMessageCheck) {
-        testStopServerByStopper(udp_server_, udp_client_, checker_);
-        EXPECT_EQ(std::string(""), udp_client_->getReceivedData());
-    }
+// Test whether udp server stopped successfully during message check
+TEST_F(DNSServerTest, stopUDPServerDuringMessageCheck) {
+    testStopServerByStopper(udp_server_, udp_client_, checker_);
+    EXPECT_EQ(std::string(""), udp_client_->getReceivedData());
+}
 
-    // Test whether udp server stopped successfully during query lookup 
-    TEST_F(DNSServerTest, stopUDPServerDuringQueryLookup) {
-        testStopServerByStopper(udp_server_, udp_client_, lookup_);
-        EXPECT_EQ(std::string(""), udp_client_->getReceivedData());
-    }
+// Test whether udp server stopped successfully during query lookup
+TEST_F(DNSServerTest, stopUDPServerDuringQueryLookup) {
+    testStopServerByStopper(udp_server_, udp_client_, lookup_);
+    EXPECT_EQ(std::string(""), udp_client_->getReceivedData());
+}
 
-    // Test whether udp server stopped successfully during composite answer
-    TEST_F(DNSServerTest, stopUDPServerDuringPrepareAnswer) {
-        testStopServerByStopper(udp_server_, udp_client_, answer_);
-        EXPECT_EQ(std::string(""), udp_client_->getReceivedData());
-    }
+// Test whether udp server stopped successfully during composing answer
+TEST_F(DNSServerTest, stopUDPServerDuringPrepareAnswer) {
+    testStopServerByStopper(udp_server_, udp_client_, answer_);
+    EXPECT_EQ(std::string(""), udp_client_->getReceivedData());
+}
 
-    static void stopServerManyTimes(DNSServer *server, unsigned int times) {
-        for (int i = 0; i < times; ++i) {
-            server->stop();
-        }
+static void stopServerManyTimes(DNSServer *server, unsigned int times) {
+    for (int i = 0; i < times; ++i) {
+        server->stop();
     }
+}
 
-    // Test whether udp server stop interface can be invoked several times without
-    // throw any exception
-    TEST_F(DNSServerTest, stopUDPServeMoreThanOnce) {
-        try {
-            boost::function<void()> stop_server_3_times
-                = boost::bind(stopServerManyTimes, udp_server_, 3);
-            udp_client_->setGetFeedbackCallback(stop_server_3_times);
-            testStopServerByStopper(udp_server_, udp_client_, udp_client_);
-            EXPECT_EQ(query_message, udp_client_->getReceivedData());
-        } catch (...) {
-            ASSERT_TRUE(false);
-        }
-    }
+// Test whether udp server stop interface can be invoked several times without
+// throw any exception
+TEST_F(DNSServerTest, stopUDPServeMoreThanOnce) {
+    ASSERT_NO_THROW({
+        boost::function<void()> stop_server_3_times
+            = boost::bind(stopServerManyTimes, udp_server_, 3);
+        udp_client_->setGetFeedbackCallback(stop_server_3_times);
+        testStopServerByStopper(udp_server_, udp_client_, udp_client_);
+        EXPECT_EQ(query_message, udp_client_->getReceivedData());
+    });
+}
 
 
-    TEST_F(DNSServerTest, stopTCPServerAfterOneQuery) {
-        testStopServerByStopper(tcp_server_, tcp_client_, tcp_client_);
-        EXPECT_EQ(query_message, tcp_client_->getReceivedData());
-    }
+TEST_F(DNSServerTest, stopTCPServerAfterOneQuery) {
+    testStopServerByStopper(tcp_server_, tcp_client_, tcp_client_);
+    EXPECT_EQ(query_message, tcp_client_->getReceivedData());
+}
 
 
-    // Test whether tcp server stopped successfully before server start to serve
-    TEST_F(DNSServerTest, stopTCPServerBeforeItStartServing) {
-        tcp_server_->stop();
-        testStopServerByStopper(tcp_server_, tcp_client_, tcp_client_);
-        EXPECT_EQ(std::string(""), tcp_client_->getReceivedData());
-    }
+// Test whether tcp server stopped successfully before server start to serve
+TEST_F(DNSServerTest, stopTCPServerBeforeItStartServing) {
+    tcp_server_->stop();
+    testStopServerByStopper(tcp_server_, tcp_client_, tcp_client_);
+    EXPECT_EQ(std::string(""), tcp_client_->getReceivedData());
+}
 
 
-    // Test whether tcp server stopped successfully during message check
-    TEST_F(DNSServerTest, stopTCPServerDuringMessageCheck) {
-        testStopServerByStopper(tcp_server_, tcp_client_, checker_);
-        EXPECT_EQ(std::string(""), tcp_client_->getReceivedData());
-    }
+// Test whether tcp server stopped successfully during message check
+TEST_F(DNSServerTest, stopTCPServerDuringMessageCheck) {
+    testStopServerByStopper(tcp_server_, tcp_client_, checker_);
+    EXPECT_EQ(std::string(""), tcp_client_->getReceivedData());
+}
 
-    // Test whether tcp server stopped successfully during query lookup 
-    TEST_F(DNSServerTest, stopTCPServerDuringQueryLookup) {
-        testStopServerByStopper(tcp_server_, tcp_client_, lookup_);
-        EXPECT_EQ(std::string(""), tcp_client_->getReceivedData());
-    }
+// Test whether tcp server stopped successfully during query lookup
+TEST_F(DNSServerTest, stopTCPServerDuringQueryLookup) {
+    testStopServerByStopper(tcp_server_, tcp_client_, lookup_);
+    EXPECT_EQ(std::string(""), tcp_client_->getReceivedData());
+}
 
-    // Test whether tcp server stopped successfully during composite answer
-    TEST_F(DNSServerTest, stopTCPServerDuringPrepareAnswer) {
-        testStopServerByStopper(tcp_server_, tcp_client_, answer_);
-        EXPECT_EQ(std::string(""), tcp_client_->getReceivedData());
-    }
+// Test whether tcp server stopped successfully during composing answer
+TEST_F(DNSServerTest, stopTCPServerDuringPrepareAnswer) {
+    testStopServerByStopper(tcp_server_, tcp_client_, answer_);
+    EXPECT_EQ(std::string(""), tcp_client_->getReceivedData());
+}
 
 
-    // Test whether tcp server stop interface can be invoked several times without
-    // throw any exception
-    TEST_F(DNSServerTest, stopTCPServeMoreThanOnce) {
-        try {
-            boost::function<void()> stop_server_3_times
-                = boost::bind(stopServerManyTimes, tcp_server_, 3);
-            tcp_client_->setGetFeedbackCallback(stop_server_3_times);
-            testStopServerByStopper(tcp_server_, tcp_client_, tcp_client_);
-            EXPECT_EQ(query_message, tcp_client_->getReceivedData());
-        } catch (...) {
-            ASSERT_TRUE(false);
-        }
-    }
+// Test whether tcp server stop interface can be invoked several times without
+// throw any exception
+TEST_F(DNSServerTest, stopTCPServeMoreThanOnce) {
+    ASSERT_NO_THROW({
+        boost::function<void()> stop_server_3_times
+            = boost::bind(stopServerManyTimes, tcp_server_, 3);
+        tcp_client_->setGetFeedbackCallback(stop_server_3_times);
+        testStopServerByStopper(tcp_server_, tcp_client_, tcp_client_);
+        EXPECT_EQ(query_message, tcp_client_->getReceivedData());
+    });
+}
 
 }