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

Unified Diff: remoting/host/gnubby_auth_handler_posix_unittest.cc

Issue 1234003002: Fix GnubbyAuthHandlerPosix to handle requests correctly. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@allowIo
Patch Set: Created 5 years, 5 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: remoting/host/gnubby_auth_handler_posix_unittest.cc
diff --git a/remoting/host/gnubby_auth_handler_posix_unittest.cc b/remoting/host/gnubby_auth_handler_posix_unittest.cc
index 9c32a015eb94dde90b55960233ba9f3f5dc20a1a..e55ca9a0b74b8f95465b4a83bda0533534ac2a07 100644
--- a/remoting/host/gnubby_auth_handler_posix_unittest.cc
+++ b/remoting/host/gnubby_auth_handler_posix_unittest.cc
@@ -48,7 +48,7 @@ const unsigned char kRequestData[] = {
class TestClientStub : public protocol::ClientStub {
public:
- TestClientStub() {}
+ TestClientStub() : loop_(new base::RunLoop) {}
~TestClientStub() override {}
// protocol::ClientStub implementation.
@@ -59,7 +59,7 @@ class TestClientStub : public protocol::ClientStub {
void DeliverHostMessage(const protocol::ExtensionMessage& message) override {
message_ = message;
- loop_.Quit();
+ loop_->Quit();
}
// protocol::ClipboardStub implementation.
@@ -68,7 +68,10 @@ class TestClientStub : public protocol::ClientStub {
// protocol::CursorShapeStub implementation.
void SetCursorShape(const protocol::CursorShapeInfo& cursor_shape) override {}
- void WaitForDeliverHostMessage() { loop_.Run(); }
+ void WaitForDeliverHostMessage() {
+ loop_->Run();
+ loop_.reset(new base::RunLoop);
+ }
void CheckHostDataMessage(int id, const std::string& data) {
std::string connection_id = base::StringPrintf("\"connectionId\":%d", id);
@@ -83,7 +86,7 @@ class TestClientStub : public protocol::ClientStub {
private:
protocol::ExtensionMessage message_;
- base::RunLoop loop_;
+ scoped_ptr<base::RunLoop> loop_;
DISALLOW_COPY_AND_ASSIGN(TestClientStub);
};
@@ -98,6 +101,41 @@ class GnubbyAuthHandlerPosixTest : public testing::Test {
auth_handler_->SetGnubbySocketName(socket_path_);
}
+ void WriteRequestData(net::UnixDomainClientSocket* client_socket) {
+ int request_len = sizeof(kRequestData);
+ scoped_refptr<net::DrainableIOBuffer> request_buffer(
+ new net::DrainableIOBuffer(
+ new net::WrappedIOBuffer(
+ reinterpret_cast<const char*>(kRequestData)),
+ request_len));
+ net::TestCompletionCallback write_callback;
+ int bytes_written = 0;
+ while (bytes_written < request_len) {
+ int write_result = client_socket->Write(request_buffer.get(),
+ request_buffer->BytesRemaining(),
+ write_callback.callback());
+ write_result = write_callback.GetResult(write_result);
+ ASSERT_GT(write_result, 0);
+ bytes_written += write_result;
+ ASSERT_LE(bytes_written, request_len);
+ request_buffer->DidConsume(write_result);
+ }
+ ASSERT_EQ(request_len, bytes_written);
+ }
+
+ void WaitForAndVerifyHostMessage() {
+ client_stub_.WaitForDeliverHostMessage();
+ base::ListValue expected_data;
+ // Skip first four bytes.
+ for (size_t i = 4; i < sizeof(kRequestData); ++i) {
+ expected_data.AppendInteger(kRequestData[i]);
+ }
+
+ std::string expected_data_json;
+ base::JSONWriter::Write(expected_data, &expected_data_json);
+ client_stub_.CheckHostDataMessage(1, expected_data_json);
+ }
+
protected:
// Object under test.
scoped_ptr<GnubbyAuthHandlerPosix> auth_handler_posix_;
@@ -119,45 +157,48 @@ TEST_F(GnubbyAuthHandlerPosixTest, HostDataMessageDelivered) {
client_stub_.CheckHostDataMessage(42, "[116,101,115,116,95,109,115,103]");
}
-TEST_F(GnubbyAuthHandlerPosixTest, DidReadAndClose) {
- std::string message_json = "{\"type\":\"control\",\"option\":\"auth-v1\"}";
-
+TEST_F(GnubbyAuthHandlerPosixTest, NotClosedAfterRequest) {
ASSERT_EQ(0u, auth_handler_posix_->GetActiveSocketsMapSizeForTest());
+
+ const char message_json[] = "{\"type\":\"control\",\"option\":\"auth-v1\"}";
auth_handler_->DeliverClientMessage(message_json);
+
net::UnixDomainClientSocket client_socket(socket_path_.value(), false);
net::TestCompletionCallback connect_callback;
+
int rv = client_socket.Connect(connect_callback.callback());
ASSERT_EQ(net::OK, connect_callback.GetResult(rv));
- int request_len = sizeof(kRequestData);
- scoped_refptr<net::DrainableIOBuffer> request_buffer(
- new net::DrainableIOBuffer(
- new net::WrappedIOBuffer(reinterpret_cast<const char*>(kRequestData)),
- request_len));
- net::TestCompletionCallback write_callback;
- int bytes_written = 0;
- while (bytes_written < request_len) {
- int write_result = client_socket.Write(request_buffer.get(),
- request_buffer->BytesRemaining(),
- write_callback.callback());
- write_result = write_callback.GetResult(write_result);
- ASSERT_GT(write_result, 0);
- bytes_written += write_result;
- ASSERT_LE(bytes_written, request_len);
- request_buffer->DidConsume(write_result);
- }
- ASSERT_EQ(request_len, bytes_written);
- client_stub_.WaitForDeliverHostMessage();
- base::ListValue expected_data;
- // Skip first four bytes.
- for (size_t i = 4; i < sizeof(kRequestData); ++i) {
- expected_data.AppendInteger(kRequestData[i]);
- }
+ // Write the request and verify the response.
+ WriteRequestData(&client_socket);
+ WaitForAndVerifyHostMessage();
- std::string expected_data_json;
- base::JSONWriter::Write(expected_data, &expected_data_json);
- client_stub_.CheckHostDataMessage(1, expected_data_json);
+ // Verify that completing a request/response cycle didn't close the socket.
+ ASSERT_EQ(1u, auth_handler_posix_->GetActiveSocketsMapSizeForTest());
+}
+
+TEST_F(GnubbyAuthHandlerPosixTest, HandleTwoRequests) {
ASSERT_EQ(0u, auth_handler_posix_->GetActiveSocketsMapSizeForTest());
+
+ const char message_json[] = "{\"type\":\"control\",\"option\":\"auth-v1\"}";
+ auth_handler_->DeliverClientMessage(message_json);
+
+ net::UnixDomainClientSocket client_socket(socket_path_.value(), false);
+ net::TestCompletionCallback connect_callback;
+
+ int rv = client_socket.Connect(connect_callback.callback());
+ ASSERT_EQ(net::OK, connect_callback.GetResult(rv));
+
+ // Write the request and verify the response.
+ WriteRequestData(&client_socket);
+ WaitForAndVerifyHostMessage();
+
+ // Repeat the request/response cycle.
+ WriteRequestData(&client_socket);
+ WaitForAndVerifyHostMessage();
+
+ // Verify that completing two request/response cycles didn't close the socket.
+ ASSERT_EQ(1u, auth_handler_posix_->GetActiveSocketsMapSizeForTest());
}
TEST_F(GnubbyAuthHandlerPosixTest, DidReadTimeout) {

Powered by Google App Engine
This is Rietveld 408576698