summaryrefslogtreecommitdiffstats
path: root/net/socket/tcp_pinger_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'net/socket/tcp_pinger_unittest.cc')
-rw-r--r--net/socket/tcp_pinger_unittest.cc93
1 files changed, 93 insertions, 0 deletions
diff --git a/net/socket/tcp_pinger_unittest.cc b/net/socket/tcp_pinger_unittest.cc
new file mode 100644
index 0000000..1d94ddd
--- /dev/null
+++ b/net/socket/tcp_pinger_unittest.cc
@@ -0,0 +1,93 @@
+// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/ref_counted.h"
+#include "base/trace_event.h"
+#include "net/base/address_list.h"
+#include "net/base/host_resolver.h"
+#include "net/base/listen_socket.h"
+#include "net/base/net_errors.h"
+#include "net/base/winsock_init.h"
+#include "net/socket/tcp_client_socket.h"
+#include "net/socket/tcp_pinger.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/platform_test.h"
+
+class TCPPingerTest
+ : public PlatformTest, public ListenSocket::ListenSocketDelegate {
+ public:
+ TCPPingerTest() {
+ }
+
+ // Implement ListenSocketDelegate methods
+ virtual void DidAccept(ListenSocket* server, ListenSocket* connection) {
+ // This callback doesn't seem to happen
+ // right away, so this handler may not be called at all
+ // during connect-only tests.
+ LOG(INFO) << "TCPPinger accepted connection";
+ connected_sock_ = connection;
+ }
+ virtual void DidRead(ListenSocket*, const std::string& s) {
+ // Not really needed yet, as TCPPinger doesn't support Read
+ connected_sock_->Send(std::string("HTTP/1.1 404 Not Found"), true);
+ connected_sock_ = NULL;
+ }
+ virtual void DidClose(ListenSocket* sock) {}
+
+ // Testcase hooks
+ virtual void SetUp();
+
+ protected:
+ int listen_port_;
+ scoped_refptr<ListenSocket> listen_sock_;
+
+ private:
+ scoped_refptr<ListenSocket> connected_sock_;
+};
+
+void TCPPingerTest::SetUp() {
+ PlatformTest::SetUp();
+
+ // Find a free port to listen on
+ // Range of ports to listen on. Shouldn't need to try many.
+ static const int kMinPort = 10100;
+ static const int kMaxPort = 10200;
+#if defined(OS_WIN)
+ net::EnsureWinsockInit();
+#endif
+ for (listen_port_ = kMinPort; listen_port_ < kMaxPort; listen_port_++) {
+ listen_sock_ = ListenSocket::Listen("127.0.0.1", listen_port_, this);
+ if (listen_sock_.get()) break;
+ }
+ ASSERT_TRUE(listen_sock_.get() != NULL);
+}
+
+TEST_F(TCPPingerTest, Ping) {
+ net::AddressList addr;
+ net::HostResolver resolver;
+
+ net::HostResolver::RequestInfo info("localhost", listen_port_);
+ int rv = resolver.Resolve(info, &addr, NULL, NULL);
+ EXPECT_EQ(rv, net::OK);
+
+ net::TCPPinger pinger(addr);
+ rv = pinger.Ping();
+ EXPECT_EQ(rv, net::OK);
+}
+
+TEST_F(TCPPingerTest, PingFail) {
+ net::AddressList addr;
+ net::HostResolver resolver;
+
+ // "Kill" "server"
+ listen_sock_ = NULL;
+
+ net::HostResolver::RequestInfo info("localhost", listen_port_);
+ int rv = resolver.Resolve(info, &addr, NULL, NULL);
+ EXPECT_EQ(rv, net::OK);
+
+ net::TCPPinger pinger(addr);
+ rv = pinger.Ping(base::TimeDelta::FromMilliseconds(100), 1);
+ EXPECT_NE(rv, net::OK);
+}