Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(241)

Side by Side Diff: chrome/test/chromedriver/net/sync_websocket_impl_unittest.cc

Issue 1669453002: [chromedriver] Apply page load timeout to slow cross-process navigations (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: pure virtual Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <string> 5 #include <string>
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/memory/ref_counted.h" 8 #include "base/memory/ref_counted.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
11 #include "base/threading/platform_thread.h" 11 #include "base/threading/platform_thread.h"
12 #include "base/threading/thread.h" 12 #include "base/threading/thread.h"
13 #include "base/time/time.h" 13 #include "base/time/time.h"
14 #include "chrome/test/chromedriver/net/sync_websocket_impl.h" 14 #include "chrome/test/chromedriver/net/sync_websocket_impl.h"
15 #include "chrome/test/chromedriver/net/test_http_server.h" 15 #include "chrome/test/chromedriver/net/test_http_server.h"
16 #include "chrome/test/chromedriver/net/timeout.h"
16 #include "chrome/test/chromedriver/net/url_request_context_getter.h" 17 #include "chrome/test/chromedriver/net/url_request_context_getter.h"
17 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
18 #include "url/gurl.h" 19 #include "url/gurl.h"
19 20
20 namespace { 21 namespace {
21 22
22 class SyncWebSocketImplTest : public testing::Test { 23 class SyncWebSocketImplTest : public testing::Test {
23 protected: 24 protected:
24 SyncWebSocketImplTest() 25 SyncWebSocketImplTest()
25 : client_thread_("ClientThread"), 26 : client_thread_("ClientThread"),
26 long_timeout_(base::TimeDelta::FromMinutes(1)) {} 27 long_timeout_(base::TimeDelta::FromMinutes(1)) {}
27 ~SyncWebSocketImplTest() override {} 28 ~SyncWebSocketImplTest() override {}
28 29
29 void SetUp() override { 30 void SetUp() override {
30 base::Thread::Options options(base::MessageLoop::TYPE_IO, 0); 31 base::Thread::Options options(base::MessageLoop::TYPE_IO, 0);
31 ASSERT_TRUE(client_thread_.StartWithOptions(options)); 32 ASSERT_TRUE(client_thread_.StartWithOptions(options));
32 context_getter_ = new URLRequestContextGetter(client_thread_.task_runner()); 33 context_getter_ = new URLRequestContextGetter(client_thread_.task_runner());
33 ASSERT_TRUE(server_.Start()); 34 ASSERT_TRUE(server_.Start());
34 } 35 }
35 36
36 void TearDown() override { server_.Stop(); } 37 void TearDown() override { server_.Stop(); }
37 38
39 Timeout long_timeout() const { return Timeout(long_timeout_); }
40
38 base::Thread client_thread_; 41 base::Thread client_thread_;
39 TestHttpServer server_; 42 TestHttpServer server_;
40 scoped_refptr<URLRequestContextGetter> context_getter_; 43 scoped_refptr<URLRequestContextGetter> context_getter_;
41 const base::TimeDelta long_timeout_; 44 const base::TimeDelta long_timeout_;
42 }; 45 };
43 46
44 } // namespace 47 } // namespace
45 48
46 TEST_F(SyncWebSocketImplTest, CreateDestroy) { 49 TEST_F(SyncWebSocketImplTest, CreateDestroy) {
47 SyncWebSocketImpl sock(context_getter_.get()); 50 SyncWebSocketImpl sock(context_getter_.get());
48 } 51 }
49 52
50 TEST_F(SyncWebSocketImplTest, Connect) { 53 TEST_F(SyncWebSocketImplTest, Connect) {
51 SyncWebSocketImpl sock(context_getter_.get()); 54 SyncWebSocketImpl sock(context_getter_.get());
52 ASSERT_TRUE(sock.Connect(server_.web_socket_url())); 55 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
53 } 56 }
54 57
55 TEST_F(SyncWebSocketImplTest, ConnectFail) { 58 TEST_F(SyncWebSocketImplTest, ConnectFail) {
56 SyncWebSocketImpl sock(context_getter_.get()); 59 SyncWebSocketImpl sock(context_getter_.get());
57 ASSERT_FALSE(sock.Connect(GURL("ws://127.0.0.1:33333"))); 60 ASSERT_FALSE(sock.Connect(GURL("ws://127.0.0.1:33333")));
58 } 61 }
59 62
60 TEST_F(SyncWebSocketImplTest, SendReceive) { 63 TEST_F(SyncWebSocketImplTest, SendReceive) {
61 SyncWebSocketImpl sock(context_getter_.get()); 64 SyncWebSocketImpl sock(context_getter_.get());
62 ASSERT_TRUE(sock.Connect(server_.web_socket_url())); 65 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
63 ASSERT_TRUE(sock.Send("hi")); 66 ASSERT_TRUE(sock.Send("hi"));
64 std::string message; 67 std::string message;
65 ASSERT_EQ( 68 ASSERT_EQ(
66 SyncWebSocket::kOk, 69 SyncWebSocket::kOk,
67 sock.ReceiveNextMessage(&message, long_timeout_)); 70 sock.ReceiveNextMessage(&message, long_timeout()));
68 ASSERT_STREQ("hi", message.c_str()); 71 ASSERT_STREQ("hi", message.c_str());
69 } 72 }
70 73
71 TEST_F(SyncWebSocketImplTest, SendReceiveTimeout) { 74 TEST_F(SyncWebSocketImplTest, SendReceiveTimeout) {
72 SyncWebSocketImpl sock(context_getter_.get()); 75 SyncWebSocketImpl sock(context_getter_.get());
73 76
74 // The server might reply too quickly so that the response will be received 77 // The server might reply too quickly so that the response will be received
75 // before we call ReceiveNextMessage; we must prevent it. 78 // before we call ReceiveNextMessage; we must prevent it.
76 base::WaitableEvent server_reply_allowed(false, false); 79 base::WaitableEvent server_reply_allowed(false, false);
77 server_.SetMessageCallback(base::Bind( 80 server_.SetMessageCallback(base::Bind(
78 &base::WaitableEvent::Wait, base::Unretained(&server_reply_allowed))); 81 &base::WaitableEvent::Wait, base::Unretained(&server_reply_allowed)));
79 82
80 ASSERT_TRUE(sock.Connect(server_.web_socket_url())); 83 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
81 ASSERT_TRUE(sock.Send("hi")); 84 ASSERT_TRUE(sock.Send("hi"));
82 std::string message; 85 std::string message;
83 ASSERT_EQ( 86 ASSERT_EQ(
84 SyncWebSocket::kTimeout, 87 SyncWebSocket::kTimeout,
85 sock.ReceiveNextMessage( 88 sock.ReceiveNextMessage(
86 &message, base::TimeDelta())); 89 &message, Timeout(base::TimeDelta())));
87 90
88 server_reply_allowed.Signal(); 91 server_reply_allowed.Signal();
89 // Receive the response to avoid possible deletion of the event while the 92 // Receive the response to avoid possible deletion of the event while the
90 // server thread has not yet returned from the call to Wait. 93 // server thread has not yet returned from the call to Wait.
91 EXPECT_EQ(SyncWebSocket::kOk, 94 EXPECT_EQ(SyncWebSocket::kOk,
92 sock.ReceiveNextMessage(&message, long_timeout_)); 95 sock.ReceiveNextMessage(&message, long_timeout()));
93 } 96 }
94 97
95 TEST_F(SyncWebSocketImplTest, SendReceiveLarge) { 98 TEST_F(SyncWebSocketImplTest, SendReceiveLarge) {
96 SyncWebSocketImpl sock(context_getter_.get()); 99 SyncWebSocketImpl sock(context_getter_.get());
97 ASSERT_TRUE(sock.Connect(server_.web_socket_url())); 100 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
98 std::string wrote_message(10 << 20, 'a'); 101 std::string wrote_message(10 << 20, 'a');
99 ASSERT_TRUE(sock.Send(wrote_message)); 102 ASSERT_TRUE(sock.Send(wrote_message));
100 std::string message; 103 std::string message;
101 ASSERT_EQ( 104 ASSERT_EQ(
102 SyncWebSocket::kOk, 105 SyncWebSocket::kOk,
103 sock.ReceiveNextMessage(&message, long_timeout_)); 106 sock.ReceiveNextMessage(&message, long_timeout()));
104 ASSERT_EQ(wrote_message.length(), message.length()); 107 ASSERT_EQ(wrote_message.length(), message.length());
105 ASSERT_EQ(wrote_message, message); 108 ASSERT_EQ(wrote_message, message);
106 } 109 }
107 110
108 TEST_F(SyncWebSocketImplTest, SendReceiveMany) { 111 TEST_F(SyncWebSocketImplTest, SendReceiveMany) {
109 SyncWebSocketImpl sock(context_getter_.get()); 112 SyncWebSocketImpl sock(context_getter_.get());
110 ASSERT_TRUE(sock.Connect(server_.web_socket_url())); 113 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
111 ASSERT_TRUE(sock.Send("1")); 114 ASSERT_TRUE(sock.Send("1"));
112 ASSERT_TRUE(sock.Send("2")); 115 ASSERT_TRUE(sock.Send("2"));
113 std::string message; 116 std::string message;
114 ASSERT_EQ( 117 ASSERT_EQ(
115 SyncWebSocket::kOk, 118 SyncWebSocket::kOk,
116 sock.ReceiveNextMessage(&message, long_timeout_)); 119 sock.ReceiveNextMessage(&message, long_timeout()));
117 ASSERT_STREQ("1", message.c_str()); 120 ASSERT_STREQ("1", message.c_str());
118 ASSERT_TRUE(sock.Send("3")); 121 ASSERT_TRUE(sock.Send("3"));
119 ASSERT_EQ( 122 ASSERT_EQ(
120 SyncWebSocket::kOk, 123 SyncWebSocket::kOk,
121 sock.ReceiveNextMessage(&message, long_timeout_)); 124 sock.ReceiveNextMessage(&message, long_timeout()));
122 ASSERT_STREQ("2", message.c_str()); 125 ASSERT_STREQ("2", message.c_str());
123 ASSERT_EQ( 126 ASSERT_EQ(
124 SyncWebSocket::kOk, 127 SyncWebSocket::kOk,
125 sock.ReceiveNextMessage(&message, long_timeout_)); 128 sock.ReceiveNextMessage(&message, long_timeout()));
126 ASSERT_STREQ("3", message.c_str()); 129 ASSERT_STREQ("3", message.c_str());
127 } 130 }
128 131
129 TEST_F(SyncWebSocketImplTest, CloseOnReceive) { 132 TEST_F(SyncWebSocketImplTest, CloseOnReceive) {
130 server_.SetMessageAction(TestHttpServer::kCloseOnMessage); 133 server_.SetMessageAction(TestHttpServer::kCloseOnMessage);
131 SyncWebSocketImpl sock(context_getter_.get()); 134 SyncWebSocketImpl sock(context_getter_.get());
132 ASSERT_TRUE(sock.Connect(server_.web_socket_url())); 135 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
133 ASSERT_TRUE(sock.Send("1")); 136 ASSERT_TRUE(sock.Send("1"));
134 std::string message; 137 std::string message;
135 ASSERT_EQ( 138 ASSERT_EQ(
136 SyncWebSocket::kDisconnected, 139 SyncWebSocket::kDisconnected,
137 sock.ReceiveNextMessage(&message, long_timeout_)); 140 sock.ReceiveNextMessage(&message, long_timeout()));
138 ASSERT_STREQ("", message.c_str()); 141 ASSERT_STREQ("", message.c_str());
139 } 142 }
140 143
141 TEST_F(SyncWebSocketImplTest, CloseOnSend) { 144 TEST_F(SyncWebSocketImplTest, CloseOnSend) {
142 SyncWebSocketImpl sock(context_getter_.get()); 145 SyncWebSocketImpl sock(context_getter_.get());
143 ASSERT_TRUE(sock.Connect(server_.web_socket_url())); 146 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
144 server_.Stop(); 147 server_.Stop();
145 ASSERT_FALSE(sock.Send("1")); 148 ASSERT_FALSE(sock.Send("1"));
146 } 149 }
147 150
148 TEST_F(SyncWebSocketImplTest, Reconnect) { 151 TEST_F(SyncWebSocketImplTest, Reconnect) {
149 SyncWebSocketImpl sock(context_getter_.get()); 152 SyncWebSocketImpl sock(context_getter_.get());
150 ASSERT_TRUE(sock.Connect(server_.web_socket_url())); 153 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
151 ASSERT_TRUE(sock.Send("1")); 154 ASSERT_TRUE(sock.Send("1"));
152 // Wait for SyncWebSocket to receive the response from the server. 155 // Wait for SyncWebSocket to receive the response from the server.
153 base::TimeTicks deadline = 156 Timeout response_timeout(base::TimeDelta::FromSeconds(20));
154 base::TimeTicks::Now() + base::TimeDelta::FromSeconds(20); 157 while (!response_timeout.IsExpired()) {
155 while (base::TimeTicks::Now() < deadline) {
156 if (sock.IsConnected() && !sock.HasNextMessage()) 158 if (sock.IsConnected() && !sock.HasNextMessage())
157 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10)); 159 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10));
158 else 160 else
159 break; 161 break;
160 } 162 }
161 server_.Stop(); 163 server_.Stop();
162 ASSERT_FALSE(sock.Send("2")); 164 ASSERT_FALSE(sock.Send("2"));
163 ASSERT_FALSE(sock.IsConnected()); 165 ASSERT_FALSE(sock.IsConnected());
164 server_.Start(); 166 server_.Start();
165 ASSERT_TRUE(sock.HasNextMessage()); 167 ASSERT_TRUE(sock.HasNextMessage());
166 ASSERT_TRUE(sock.Connect(server_.web_socket_url())); 168 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
167 ASSERT_FALSE(sock.HasNextMessage()); 169 ASSERT_FALSE(sock.HasNextMessage());
168 ASSERT_TRUE(sock.Send("3")); 170 ASSERT_TRUE(sock.Send("3"));
169 std::string message; 171 std::string message;
170 ASSERT_EQ( 172 ASSERT_EQ(
171 SyncWebSocket::kOk, 173 SyncWebSocket::kOk,
172 sock.ReceiveNextMessage(&message, long_timeout_)); 174 sock.ReceiveNextMessage(&message, long_timeout()));
173 ASSERT_STREQ("3", message.c_str()); 175 ASSERT_STREQ("3", message.c_str());
174 ASSERT_FALSE(sock.HasNextMessage()); 176 ASSERT_FALSE(sock.HasNextMessage());
175 } 177 }
OLDNEW
« no previous file with comments | « chrome/test/chromedriver/net/sync_websocket_impl.cc ('k') | chrome/test/chromedriver/net/timeout.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698