Browse Source

[5260] Properly handle EWOULDBLOCK and EAGAIN in Http unit tests.

Marcin Siodelski 8 years ago
parent
commit
d4cf144a76
1 changed files with 28 additions and 10 deletions
  1. 28 10
      src/lib/http/tests/listener_unittests.cc

+ 28 - 10
src/lib/http/tests/listener_unittests.cc

@@ -168,10 +168,21 @@ public:
                            [this, request](const boost::system::error_code& ec,
                                            std::size_t bytes_transferred) mutable {
             if (ec) {
-                ADD_FAILURE() << "error occurred while connecting: "
-                              << ec.message();
-                io_service_.stop();
-                return;
+                if (ec.value() == boost::asio::error::operation_aborted) {
+                    return;
+
+                } else if ((ec.value() == boost::asio::error::try_again) ||
+                           (ec.value() == boost::asio::error::would_block)) {
+                    // If we should try again make sure there is no garbage in the
+                    // bytes_transferred.
+                    bytes_transferred = 0;
+
+                } else {
+                    ADD_FAILURE() << "error occurred while connecting: "
+                                  << ec.message();
+                    io_service_.stop();
+                    return;
+                }
             }
 
             // Remove the part of the request which has been sent.
@@ -199,14 +210,21 @@ public:
                                        std::size_t bytes_transferred) {
             if (ec) {
                 // IO service stopped so simply return.
-                if (ec == boost::asio::error::operation_aborted) {
+                if (ec.value() == boost::asio::error::operation_aborted) {
                     return;
-                }
 
-                // Error occurred, bail...
-                ADD_FAILURE() << "error occurred while receiving HTTP"
-                    " response from the server: " << ec.message();
-                io_service_.stop();
+                } else if ((ec.value() == boost::asio::error::try_again) ||
+                           (ec.value() == boost::asio::error::would_block)) {
+                    // If we should try again, make sure that there is no garbage
+                    // in the bytes_transferred.
+                    bytes_transferred = 0;
+
+                } else {
+                    // Error occurred, bail...
+                    ADD_FAILURE() << "error occurred while receiving HTTP"
+                        " response from the server: " << ec.message();
+                    io_service_.stop();
+                }
             }
 
             if (bytes_transferred > 0) {