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

Unified Diff: chrome/test/chromedriver/devtools_client_impl_unittest.cc

Issue 12321057: [chromedriver] Implement reconnection to DevTools. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix some nits and add one unit test. Created 7 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: chrome/test/chromedriver/devtools_client_impl_unittest.cc
diff --git a/chrome/test/chromedriver/devtools_client_impl_unittest.cc b/chrome/test/chromedriver/devtools_client_impl_unittest.cc
index d8b9d3826eb33cac0b7a9745e30d87fde0b35bdf..2a54720dfd382fdafd3d78857ca17e9b5077c9ca 100644
--- a/chrome/test/chromedriver/devtools_client_impl_unittest.cc
+++ b/chrome/test/chromedriver/devtools_client_impl_unittest.cc
@@ -21,6 +21,10 @@
namespace {
+Status CloserFunc() {
+ return Status(kOk);
+}
+
class MockSyncWebSocket : public SyncWebSocket {
public:
MockSyncWebSocket() : connected_(false), id_(-1), queued_messages_(1) {}
@@ -84,7 +88,7 @@ scoped_ptr<SyncWebSocket> CreateMockSyncWebSocket() {
TEST(DevToolsClientImpl, SendCommand) {
SyncWebSocketFactory factory =
base::Bind(&CreateMockSyncWebSocket<MockSyncWebSocket>);
- DevToolsClientImpl client(factory, "http://url");
+ DevToolsClientImpl client(factory, "http://url", base::Bind(&CloserFunc));
base::DictionaryValue params;
params.SetInteger("param", 1);
ASSERT_EQ(kOk, client.SendCommand("method", params).code());
@@ -93,7 +97,7 @@ TEST(DevToolsClientImpl, SendCommand) {
TEST(DevToolsClientImpl, SendCommandAndGetResult) {
SyncWebSocketFactory factory =
base::Bind(&CreateMockSyncWebSocket<MockSyncWebSocket>);
- DevToolsClientImpl client(factory, "http://url");
+ DevToolsClientImpl client(factory, "http://url", base::Bind(&CloserFunc));
base::DictionaryValue params;
params.SetInteger("param", 1);
scoped_ptr<base::DictionaryValue> result;
@@ -135,7 +139,7 @@ class MockSyncWebSocket2 : public SyncWebSocket {
TEST(DevToolsClientImpl, SendCommandConnectFails) {
SyncWebSocketFactory factory =
base::Bind(&CreateMockSyncWebSocket<MockSyncWebSocket2>);
- DevToolsClientImpl client(factory, "http://url");
+ DevToolsClientImpl client(factory, "http://url", base::Bind(&CloserFunc));
base::DictionaryValue params;
ASSERT_TRUE(client.SendCommand("method", params).IsError());
}
@@ -170,7 +174,7 @@ class MockSyncWebSocket3 : public SyncWebSocket {
TEST(DevToolsClientImpl, SendCommandSendFails) {
SyncWebSocketFactory factory =
base::Bind(&CreateMockSyncWebSocket<MockSyncWebSocket3>);
- DevToolsClientImpl client(factory, "http://url");
+ DevToolsClientImpl client(factory, "http://url", base::Bind(&CloserFunc));
base::DictionaryValue params;
ASSERT_TRUE(client.SendCommand("method", params).IsError());
}
@@ -204,7 +208,7 @@ class MockSyncWebSocket4 : public SyncWebSocket {
TEST(DevToolsClientImpl, SendCommandReceiveNextMessageFails) {
SyncWebSocketFactory factory =
base::Bind(&CreateMockSyncWebSocket<MockSyncWebSocket4>);
- DevToolsClientImpl client(factory, "http://url");
+ DevToolsClientImpl client(factory, "http://url", base::Bind(&CloserFunc));
base::DictionaryValue params;
ASSERT_TRUE(client.SendCommand("method", params).IsError());
}
@@ -396,8 +400,8 @@ bool AlwaysTrue() {
TEST(DevToolsClientImpl, SendCommandOnlyConnectsOnce) {
SyncWebSocketFactory factory =
base::Bind(&CreateMockSyncWebSocket<FakeSyncWebSocket>);
- DevToolsClientImpl client(factory, "http://url", base::Bind(
- &ReturnCommand));
+ DevToolsClientImpl client(factory, "http://url", base::Bind(&CloserFunc),
+ base::Bind(&ReturnCommand));
base::DictionaryValue params;
ASSERT_TRUE(client.SendCommand("method", params).IsOk());
ASSERT_TRUE(client.SendCommand("method", params).IsOk());
@@ -406,8 +410,8 @@ TEST(DevToolsClientImpl, SendCommandOnlyConnectsOnce) {
TEST(DevToolsClientImpl, SendCommandBadResponse) {
SyncWebSocketFactory factory =
base::Bind(&CreateMockSyncWebSocket<FakeSyncWebSocket>);
- DevToolsClientImpl client(factory, "http://url", base::Bind(
- &ReturnBadResponse));
+ DevToolsClientImpl client(factory, "http://url", base::Bind(&CloserFunc),
+ base::Bind(&ReturnBadResponse));
base::DictionaryValue params;
ASSERT_TRUE(client.SendCommand("method", params).IsError());
}
@@ -415,8 +419,8 @@ TEST(DevToolsClientImpl, SendCommandBadResponse) {
TEST(DevToolsClientImpl, SendCommandBadId) {
SyncWebSocketFactory factory =
base::Bind(&CreateMockSyncWebSocket<FakeSyncWebSocket>);
- DevToolsClientImpl client(factory, "http://url", base::Bind(
- &ReturnCommandBadId));
+ DevToolsClientImpl client(factory, "http://url", base::Bind(&CloserFunc),
+ base::Bind(&ReturnCommandBadId));
base::DictionaryValue params;
ASSERT_TRUE(client.SendCommand("method", params).IsError());
}
@@ -424,8 +428,8 @@ TEST(DevToolsClientImpl, SendCommandBadId) {
TEST(DevToolsClientImpl, SendCommandResponseError) {
SyncWebSocketFactory factory =
base::Bind(&CreateMockSyncWebSocket<FakeSyncWebSocket>);
- DevToolsClientImpl client(factory, "http://url", base::Bind(
- &ReturnCommandError));
+ DevToolsClientImpl client(factory, "http://url", base::Bind(&CloserFunc),
+ base::Bind(&ReturnCommandError));
base::DictionaryValue params;
ASSERT_TRUE(client.SendCommand("method", params).IsError());
}
@@ -435,8 +439,8 @@ TEST(DevToolsClientImpl, SendCommandEventBeforeResponse) {
base::Bind(&CreateMockSyncWebSocket<FakeSyncWebSocket>);
MockListener listener;
bool first = true;
- DevToolsClientImpl client(factory, "http://url", base::Bind(
- &ReturnEventThenResponse, &first));
+ DevToolsClientImpl client(factory, "http://url", base::Bind(&CloserFunc),
+ base::Bind(&ReturnEventThenResponse, &first));
client.AddListener(&listener);
base::DictionaryValue params;
scoped_ptr<base::DictionaryValue> result;
@@ -526,8 +530,8 @@ TEST(DevToolsClientImpl, HandleEventsUntil) {
MockListener listener;
SyncWebSocketFactory factory =
base::Bind(&CreateMockSyncWebSocket<MockSyncWebSocket>);
- DevToolsClientImpl client(factory, "http://url", base::Bind(
- &ReturnEvent));
+ DevToolsClientImpl client(factory, "http://url", base::Bind(&CloserFunc),
+ base::Bind(&ReturnEvent));
client.AddListener(&listener);
Status status = client.HandleEventsUntil(base::Bind(&AlwaysTrue));
ASSERT_EQ(kOk, status.code());
@@ -536,8 +540,8 @@ TEST(DevToolsClientImpl, HandleEventsUntil) {
TEST(DevToolsClientImpl, WaitForNextEventCommand) {
SyncWebSocketFactory factory =
base::Bind(&CreateMockSyncWebSocket<MockSyncWebSocket>);
- DevToolsClientImpl client(factory, "http://url", base::Bind(
- &ReturnCommand));
+ DevToolsClientImpl client(factory, "http://url", base::Bind(&CloserFunc),
+ base::Bind(&ReturnCommand));
Status status = client.HandleEventsUntil(base::Bind(&AlwaysTrue));
ASSERT_EQ(kUnknownError, status.code());
}
@@ -545,8 +549,8 @@ TEST(DevToolsClientImpl, WaitForNextEventCommand) {
TEST(DevToolsClientImpl, WaitForNextEventError) {
SyncWebSocketFactory factory =
base::Bind(&CreateMockSyncWebSocket<MockSyncWebSocket>);
- DevToolsClientImpl client(factory, "http://url", base::Bind(
- &ReturnError));
+ DevToolsClientImpl client(factory, "http://url", base::Bind(&CloserFunc),
+ base::Bind(&ReturnError));
Status status = client.HandleEventsUntil(base::Bind(&AlwaysTrue));
ASSERT_EQ(kUnknownError, status.code());
}
@@ -555,7 +559,7 @@ TEST(DevToolsClientImpl, NestedCommandsWithOutOfOrderResults) {
SyncWebSocketFactory factory =
base::Bind(&CreateMockSyncWebSocket<MockSyncWebSocket>);
int recurse_count = 0;
- DevToolsClientImpl client(factory, "http://url");
+ DevToolsClientImpl client(factory, "http://url", base::Bind(&CloserFunc));
client.SetParserFuncForTesting(
base::Bind(&ReturnOutOfOrderResponses, &recurse_count, &client));
base::DictionaryValue params;
@@ -669,7 +673,7 @@ class OnConnectedSyncWebSocket : public SyncWebSocket {
TEST(DevToolsClientImpl, ProcessOnConnectedBeforeOnEvent) {
SyncWebSocketFactory factory =
base::Bind(&CreateMockSyncWebSocket<OnConnectedSyncWebSocket>);
- DevToolsClientImpl client(factory, "http://url");
+ DevToolsClientImpl client(factory, "http://url", base::Bind(&CloserFunc));
OnConnectedListener listener1("DOM.getDocument", &client);
OnConnectedListener listener2("Runtime.enable", &client);
OnConnectedListener listener3("Page.enable", &client);
@@ -679,3 +683,42 @@ TEST(DevToolsClientImpl, ProcessOnConnectedBeforeOnEvent) {
listener2.VerifyCalled();
listener3.VerifyCalled();
}
+
+namespace {
+
+class DisconnectedSyncWebSocket : public MockSyncWebSocket {
+ public:
+ DisconnectedSyncWebSocket() : command_count_(0) {}
+ virtual ~DisconnectedSyncWebSocket() {}
+
+ virtual bool Send(const std::string& message) OVERRIDE {
+ command_count_++;
+ if (command_count_ == 2)
+ return false;
+ return MockSyncWebSocket::Send(message);
+ }
+
+ private:
+ int command_count_;
+};
+
+Status CheckCloserFuncCalled(bool* is_called) {
+ *is_called = true;
+ return Status(kOk);
+}
+
+} // namespace
+
+TEST(DevToolsClientImpl, Reconnect) {
+ SyncWebSocketFactory factory =
+ base::Bind(&CreateMockSyncWebSocket<DisconnectedSyncWebSocket>);
+ bool is_called = false;
+ DevToolsClientImpl client(factory, "http://url",
+ base::Bind(&CheckCloserFuncCalled, &is_called));
+ base::DictionaryValue params;
+ params.SetInteger("param", 1);
+ EXPECT_EQ(kOk, client.SendCommand("method", params).code());
+ EXPECT_FALSE(is_called);
+ EXPECT_EQ(kOk, client.SendCommand("method", params).code());
+ EXPECT_TRUE(is_called);
+}

Powered by Google App Engine
This is Rietveld 408576698