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

Unified Diff: handler/win/registration_server_test.cc

Issue 1301853002: win: Crash handler server (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: oops Created 5 years, 3 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
« no previous file with comments | « handler/win/registration_server.cc ('k') | handler/win/registration_test_base.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: handler/win/registration_server_test.cc
diff --git a/handler/win/registration_server_test.cc b/handler/win/registration_server_test.cc
deleted file mode 100644
index dddfcf43292c853c24a958e3f02f31ab53208f5e..0000000000000000000000000000000000000000
--- a/handler/win/registration_server_test.cc
+++ /dev/null
@@ -1,271 +0,0 @@
-// Copyright 2015 The Crashpad Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "handler/win/registration_server.h"
-
-#include <windows.h>
-
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/strings/string16.h"
-#include "client/crashpad_info.h"
-#include "client/registration_protocol_win.h"
-#include "gtest/gtest.h"
-#include "handler/win/registration_test_base.h"
-#include "util/thread/thread.h"
-#include "util/win/address_types.h"
-#include "util/win/scoped_handle.h"
-
-namespace crashpad {
-namespace test {
-namespace {
-
-// Runs the RegistrationServer on a background thread.
-class RunServerThread : public Thread {
- public:
- // Instantiates a thread which will invoke server->Run(pipe_name, delegate).
- RunServerThread(RegistrationServer* server,
- const base::string16& pipe_name,
- RegistrationServer::Delegate* delegate)
- : server_(server), pipe_name_(pipe_name), delegate_(delegate) {}
- ~RunServerThread() override {}
-
- private:
- // Thread:
- void ThreadMain() override { server_->Run(pipe_name_, delegate_); }
-
- RegistrationServer* server_;
- base::string16 pipe_name_;
- RegistrationServer::Delegate* delegate_;
-
- DISALLOW_COPY_AND_ASSIGN(RunServerThread);
-};
-
-class RegistrationServerTest : public RegistrationTestBase {
- public:
- RegistrationServerTest()
- : server_(), server_thread_(&server_, pipe_name(), &delegate()) {}
-
- RegistrationServer& server() { return server_; }
- Thread& server_thread() { return server_thread_; }
-
- private:
- RegistrationServer server_;
- RunServerThread server_thread_;
-
- DISALLOW_COPY_AND_ASSIGN(RegistrationServerTest);
-};
-
-// During destruction, ensures that the server is stopped and the background
-// thread joined.
-class ScopedStopServerAndJoinThread {
- public:
- explicit ScopedStopServerAndJoinThread(RegistrationServer* server,
- Thread* thread)
- : server_(server), thread_(thread) {}
- ~ScopedStopServerAndJoinThread() {
- server_->Stop();
- thread_->Join();
- }
-
- private:
- RegistrationServer* server_;
- Thread* thread_;
- DISALLOW_COPY_AND_ASSIGN(ScopedStopServerAndJoinThread);
-};
-
-TEST_F(RegistrationServerTest, Instantiate) {
-}
-
-TEST_F(RegistrationServerTest, StartAndStop) {
- server_thread().Start();
- ScopedStopServerAndJoinThread scoped_stop_server_and_join_thread(
- &server(), &server_thread());
- ASSERT_NO_FATAL_FAILURE(delegate().WaitForStart());
-}
-
-TEST_F(RegistrationServerTest, StopWhileConnected) {
- ScopedFileHANDLE connection;
- {
- server_thread().Start();
- ScopedStopServerAndJoinThread scoped_stop_server_and_join_thread(
- &server(), &server_thread());
- ASSERT_NO_FATAL_FAILURE(delegate().WaitForStart());
- connection = Connect();
- ASSERT_TRUE(connection.is_valid());
- // Leaving this scope causes the server to be stopped, while the connection
- // is still open.
- }
-}
-
-TEST_F(RegistrationServerTest, Register) {
- RegistrationRequest request = {0};
- RegistrationResponse response = {0};
- CrashpadInfo crashpad_info;
- request.client_process_id = GetCurrentProcessId();
- request.crashpad_info_address =
- reinterpret_cast<WinVMAddress>(&crashpad_info);
-
- server_thread().Start();
- ScopedStopServerAndJoinThread scoped_stop_server_and_join_thread(
- &server(), &server_thread());
-
- ASSERT_NO_FATAL_FAILURE(delegate().WaitForStart());
-
- ASSERT_TRUE(SendRequest(Connect(), &request, sizeof(request), &response));
-
- ASSERT_EQ(1, delegate().registered_processes().size());
- VerifyRegistration(*delegate().registered_processes()[0], request, response);
-}
-
-TEST_F(RegistrationServerTest, ForgedClientId) {
- // Skip this test on pre-Vista as the forged PID detection is not supported
- // there.
- OSVERSIONINFO vi = {0};
- vi.dwOSVersionInfoSize = sizeof(vi);
- GetVersionEx(&vi);
- if (vi.dwMajorVersion < 6)
- return;
-
- RegistrationRequest request = {0};
- RegistrationResponse response = {0};
- CrashpadInfo crashpad_info;
- // Note that we forge the PID here.
- request.client_process_id = GetCurrentProcessId() + 1;
- request.crashpad_info_address =
- reinterpret_cast<WinVMAddress>(&crashpad_info);
-
- server_thread().Start();
- ScopedStopServerAndJoinThread scoped_stop_server_and_join_thread(
- &server(), &server_thread());
-
- ASSERT_NO_FATAL_FAILURE(delegate().WaitForStart());
-
- ASSERT_FALSE(SendRequest(Connect(), &request, sizeof(request), &response));
- ASSERT_EQ(0, delegate().registered_processes().size());
-
- // Correct the PID and verify that this was the only reason we failed.
- request.client_process_id = GetCurrentProcessId();
- ASSERT_TRUE(SendRequest(Connect(), &request, sizeof(request), &response));
- ASSERT_EQ(1, delegate().registered_processes().size());
- VerifyRegistration(*delegate().registered_processes()[0], request, response);
-}
-
-TEST_F(RegistrationServerTest, RegisterClientFails) {
- RegistrationRequest request = {0};
- RegistrationResponse response = {0};
- CrashpadInfo crashpad_info;
- request.client_process_id = GetCurrentProcessId();
- request.crashpad_info_address =
- reinterpret_cast<WinVMAddress>(&crashpad_info);
-
- server_thread().Start();
- ScopedStopServerAndJoinThread scoped_stop_server_and_join_thread(
- &server(), &server_thread());
-
- ASSERT_NO_FATAL_FAILURE(delegate().WaitForStart());
-
- // Simulate some failures
- delegate().set_fail_mode(true);
- for (int i = 0; i < 10; ++i) {
- ASSERT_FALSE(SendRequest(Connect(), &request, sizeof(request), &response));
- ASSERT_EQ(0, delegate().registered_processes().size());
- }
-
- // Now verify that a valid response may still be processed.
- delegate().set_fail_mode(false);
- ASSERT_TRUE(SendRequest(Connect(), &request, sizeof(request), &response));
-
- ASSERT_EQ(1, delegate().registered_processes().size());
- VerifyRegistration(*delegate().registered_processes()[0], request, response);
-}
-
-TEST_F(RegistrationServerTest, BadRequests) {
- server_thread().Start();
- ScopedStopServerAndJoinThread scoped_stop_server_and_join_thread(
- &server(), &server_thread());
- ASSERT_NO_FATAL_FAILURE(delegate().WaitForStart());
-
- RegistrationRequest request = {0};
- RegistrationResponse response = {0};
- CrashpadInfo crashpad_info;
- request.client_process_id = GetCurrentProcessId();
- request.crashpad_info_address =
- reinterpret_cast<WinVMAddress>(&crashpad_info);
-
- // Concatenate a valid request with a single byte of garbage.
- std::vector<char> extra_long;
- extra_long.insert(extra_long.begin(),
- reinterpret_cast<char*>(&request),
- reinterpret_cast<char*>(&request) + sizeof(request));
- extra_long.push_back('x');
-
- for (int i = 0; i < 10; ++i) {
- ASSERT_FALSE(SendRequest(Connect(), "a", 1, &response));
- ASSERT_FALSE(SendRequest(
- Connect(), extra_long.data(), extra_long.size(), &response));
- ASSERT_TRUE(Connect().is_valid());
- }
-
- // Now verify that a valid response may still be processed.
-
- ASSERT_TRUE(SendRequest(Connect(), &request, sizeof(request), &response));
-
- ASSERT_EQ(1, delegate().registered_processes().size());
- VerifyRegistration(*delegate().registered_processes()[0], request, response);
-}
-
-TEST_F(RegistrationServerTest, OverlappingRequests) {
- server_thread().Start();
- ScopedStopServerAndJoinThread scoped_stop_server_and_join_thread(
- &server(), &server_thread());
- ASSERT_NO_FATAL_FAILURE(delegate().WaitForStart());
-
- RegistrationRequest request = {0};
- RegistrationResponse response_1 = {0};
- RegistrationResponse response_2 = {0};
- RegistrationResponse response_3 = {0};
- CrashpadInfo crashpad_info;
- request.client_process_id = GetCurrentProcessId();
- request.crashpad_info_address =
- reinterpret_cast<WinVMAddress>(&crashpad_info);
-
- ScopedFileHANDLE connection_1 = Connect();
- ASSERT_TRUE(connection_1.is_valid());
- ScopedFileHANDLE connection_2 = Connect();
- ASSERT_TRUE(connection_2.is_valid());
- ScopedFileHANDLE connection_3 = Connect();
- ASSERT_TRUE(connection_3.is_valid());
-
- ASSERT_FALSE(SendRequest(connection_1.Pass(), "a", 1, &response_1));
-
- ASSERT_TRUE(
- SendRequest(connection_2.Pass(), &request, sizeof(request), &response_2));
-
- ASSERT_TRUE(Connect().is_valid());
-
- ASSERT_TRUE(
- SendRequest(connection_3.Pass(), &request, sizeof(request), &response_3));
-
- ASSERT_EQ(2, delegate().registered_processes().size());
- VerifyRegistration(
- *delegate().registered_processes()[0], request, response_2);
- VerifyRegistration(
- *delegate().registered_processes()[1], request, response_3);
-}
-
-} // namespace
-} // namespace test
-} // namespace crashpad
« no previous file with comments | « handler/win/registration_server.cc ('k') | handler/win/registration_test_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698