ozone: evdev: Sync caps lock LED state to evdev
[chromium-blink-merge.git] / chrome / test / chromedriver / net / sync_websocket_impl_unittest.cc
blob28b808a34926e36d6bb19809413ffe93baab42d6
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
3 // found in the LICENSE file.
5 #include <string>
7 #include "base/compiler_specific.h"
8 #include "base/memory/ref_counted.h"
9 #include "base/message_loop/message_loop.h"
10 #include "base/message_loop/message_loop_proxy.h"
11 #include "base/single_thread_task_runner.h"
12 #include "base/threading/platform_thread.h"
13 #include "base/threading/thread.h"
14 #include "base/time/time.h"
15 #include "chrome/test/chromedriver/net/sync_websocket_impl.h"
16 #include "chrome/test/chromedriver/net/test_http_server.h"
17 #include "chrome/test/chromedriver/net/url_request_context_getter.h"
18 #include "testing/gtest/include/gtest/gtest.h"
19 #include "url/gurl.h"
21 namespace {
23 class SyncWebSocketImplTest : public testing::Test {
24 protected:
25 SyncWebSocketImplTest()
26 : client_thread_("ClientThread"),
27 long_timeout_(base::TimeDelta::FromMinutes(1)) {}
28 ~SyncWebSocketImplTest() override {}
30 void SetUp() override {
31 base::Thread::Options options(base::MessageLoop::TYPE_IO, 0);
32 ASSERT_TRUE(client_thread_.StartWithOptions(options));
33 context_getter_ = new URLRequestContextGetter(
34 client_thread_.message_loop_proxy());
35 ASSERT_TRUE(server_.Start());
38 void TearDown() override { server_.Stop(); }
40 base::Thread client_thread_;
41 TestHttpServer server_;
42 scoped_refptr<URLRequestContextGetter> context_getter_;
43 const base::TimeDelta long_timeout_;
46 } // namespace
48 TEST_F(SyncWebSocketImplTest, CreateDestroy) {
49 SyncWebSocketImpl sock(context_getter_.get());
52 TEST_F(SyncWebSocketImplTest, Connect) {
53 SyncWebSocketImpl sock(context_getter_.get());
54 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
57 TEST_F(SyncWebSocketImplTest, ConnectFail) {
58 SyncWebSocketImpl sock(context_getter_.get());
59 ASSERT_FALSE(sock.Connect(GURL("ws://127.0.0.1:33333")));
62 TEST_F(SyncWebSocketImplTest, SendReceive) {
63 SyncWebSocketImpl sock(context_getter_.get());
64 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
65 ASSERT_TRUE(sock.Send("hi"));
66 std::string message;
67 ASSERT_EQ(
68 SyncWebSocket::kOk,
69 sock.ReceiveNextMessage(&message, long_timeout_));
70 ASSERT_STREQ("hi", message.c_str());
73 TEST_F(SyncWebSocketImplTest, SendReceiveTimeout) {
74 SyncWebSocketImpl sock(context_getter_.get());
75 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
76 ASSERT_TRUE(sock.Send("hi"));
77 std::string message;
78 ASSERT_EQ(
79 SyncWebSocket::kTimeout,
80 sock.ReceiveNextMessage(
81 &message, base::TimeDelta()));
84 TEST_F(SyncWebSocketImplTest, SendReceiveLarge) {
85 SyncWebSocketImpl sock(context_getter_.get());
86 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
87 std::string wrote_message(10 << 20, 'a');
88 ASSERT_TRUE(sock.Send(wrote_message));
89 std::string message;
90 ASSERT_EQ(
91 SyncWebSocket::kOk,
92 sock.ReceiveNextMessage(&message, long_timeout_));
93 ASSERT_EQ(wrote_message.length(), message.length());
94 ASSERT_EQ(wrote_message, message);
97 TEST_F(SyncWebSocketImplTest, SendReceiveMany) {
98 SyncWebSocketImpl sock(context_getter_.get());
99 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
100 ASSERT_TRUE(sock.Send("1"));
101 ASSERT_TRUE(sock.Send("2"));
102 std::string message;
103 ASSERT_EQ(
104 SyncWebSocket::kOk,
105 sock.ReceiveNextMessage(&message, long_timeout_));
106 ASSERT_STREQ("1", message.c_str());
107 ASSERT_TRUE(sock.Send("3"));
108 ASSERT_EQ(
109 SyncWebSocket::kOk,
110 sock.ReceiveNextMessage(&message, long_timeout_));
111 ASSERT_STREQ("2", message.c_str());
112 ASSERT_EQ(
113 SyncWebSocket::kOk,
114 sock.ReceiveNextMessage(&message, long_timeout_));
115 ASSERT_STREQ("3", message.c_str());
118 TEST_F(SyncWebSocketImplTest, CloseOnReceive) {
119 server_.SetMessageAction(TestHttpServer::kCloseOnMessage);
120 SyncWebSocketImpl sock(context_getter_.get());
121 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
122 ASSERT_TRUE(sock.Send("1"));
123 std::string message;
124 ASSERT_EQ(
125 SyncWebSocket::kDisconnected,
126 sock.ReceiveNextMessage(&message, long_timeout_));
127 ASSERT_STREQ("", message.c_str());
130 TEST_F(SyncWebSocketImplTest, CloseOnSend) {
131 SyncWebSocketImpl sock(context_getter_.get());
132 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
133 server_.Stop();
134 ASSERT_FALSE(sock.Send("1"));
137 TEST_F(SyncWebSocketImplTest, Reconnect) {
138 SyncWebSocketImpl sock(context_getter_.get());
139 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
140 ASSERT_TRUE(sock.Send("1"));
141 // Wait for SyncWebSocket to receive the response from the server.
142 base::TimeTicks deadline =
143 base::TimeTicks::Now() + base::TimeDelta::FromSeconds(20);
144 while (base::TimeTicks::Now() < deadline) {
145 if (sock.IsConnected() && !sock.HasNextMessage())
146 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10));
147 else
148 break;
150 server_.Stop();
151 ASSERT_FALSE(sock.Send("2"));
152 ASSERT_FALSE(sock.IsConnected());
153 server_.Start();
154 ASSERT_TRUE(sock.HasNextMessage());
155 ASSERT_TRUE(sock.Connect(server_.web_socket_url()));
156 ASSERT_FALSE(sock.HasNextMessage());
157 ASSERT_TRUE(sock.Send("3"));
158 std::string message;
159 ASSERT_EQ(
160 SyncWebSocket::kOk,
161 sock.ReceiveNextMessage(&message, long_timeout_));
162 ASSERT_STREQ("3", message.c_str());
163 ASSERT_FALSE(sock.HasNextMessage());