OLD | NEW |
| (Empty) |
1 // Copyright 2015 The Crashpad Authors. All rights reserved. | |
2 // | |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | |
4 // you may not use this file except in compliance with the License. | |
5 // You may obtain a copy of the License at | |
6 // | |
7 // http://www.apache.org/licenses/LICENSE-2.0 | |
8 // | |
9 // Unless required by applicable law or agreed to in writing, software | |
10 // distributed under the License is distributed on an "AS IS" BASIS, | |
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
12 // See the License for the specific language governing permissions and | |
13 // limitations under the License. | |
14 | |
15 #include <windows.h> | |
16 | |
17 #include "base/basictypes.h" | |
18 #include "base/strings/string16.h" | |
19 #include "client/registration_protocol_win.h" | |
20 #include "gtest/gtest.h" | |
21 #include "handler/win/registration_server.h" | |
22 #include "util/stdlib/pointer_container.h" | |
23 #include "util/win/address_types.h" | |
24 #include "util/win/scoped_handle.h" | |
25 | |
26 namespace crashpad { | |
27 namespace test { | |
28 | |
29 class RegistrationTestBase : public testing::Test { | |
30 public: | |
31 // Simulates a registrar to collect requests from and feed responses to the | |
32 // RegistrationServer. | |
33 class MockDelegate : public RegistrationServer::Delegate { | |
34 public: | |
35 // Records a single simulated client registration. | |
36 struct Entry { | |
37 Entry(ScopedKernelHANDLE client_process, | |
38 WinVMAddress crashpad_info_address, | |
39 uint32_t fake_request_dump_event, | |
40 uint32_t fake_dump_complete_event); | |
41 | |
42 ScopedKernelHANDLE client_process; | |
43 WinVMAddress crashpad_info_address; | |
44 uint32_t fake_request_dump_event; | |
45 uint32_t fake_dump_complete_event; | |
46 }; | |
47 | |
48 MockDelegate(); | |
49 ~MockDelegate() override; | |
50 | |
51 // Blocks until RegistrationServer::Delegate::OnStarted is invoked. | |
52 void WaitForStart(); | |
53 | |
54 // RegistrationServer::Delegate: | |
55 void OnStarted() override; | |
56 | |
57 bool RegisterClient(ScopedKernelHANDLE client_process, | |
58 WinVMAddress crashpad_info_address, | |
59 HANDLE* request_dump_event, | |
60 HANDLE* dump_complete_event) override; | |
61 | |
62 // Provides access to the registered process data. | |
63 const std::vector<Entry*> registered_processes() { | |
64 return registered_processes_; | |
65 } | |
66 | |
67 // If true, causes RegisterClient to simulate registration failure. | |
68 void set_fail_mode(bool fail) { fail_ = fail; } | |
69 | |
70 private: | |
71 ScopedKernelHANDLE started_event_; | |
72 PointerVector<Entry> registered_processes_; | |
73 uint32_t next_fake_handle_; | |
74 bool fail_; | |
75 | |
76 DISALLOW_COPY_AND_ASSIGN(MockDelegate); | |
77 }; | |
78 | |
79 RegistrationTestBase(); | |
80 ~RegistrationTestBase() override; | |
81 | |
82 MockDelegate& delegate() { return delegate_; } | |
83 base::string16 pipe_name() { return pipe_name_; } | |
84 | |
85 // Returns a pipe handle connected to the RegistrationServer. | |
86 ScopedFileHANDLE Connect(); | |
87 | |
88 // Sends the provided request and receives a response via the provided pipe. | |
89 bool SendRequest(ScopedFileHANDLE pipe, | |
90 const void* request_buffer, | |
91 size_t request_size, | |
92 RegistrationResponse* response); | |
93 | |
94 bool WriteRequest(HANDLE pipe, | |
95 const void* request_buffer, | |
96 size_t request_size); | |
97 | |
98 bool ReadResponse(HANDLE pipe, RegistrationResponse* response); | |
99 | |
100 // Verifies that the request and response match what was received and sent by | |
101 // the MockDelegate. | |
102 void VerifyRegistration(const MockDelegate::Entry& registered_process, | |
103 const RegistrationRequest& request, | |
104 const RegistrationResponse& response); | |
105 | |
106 private: | |
107 base::string16 pipe_name_; | |
108 MockDelegate delegate_; | |
109 | |
110 DISALLOW_COPY_AND_ASSIGN(RegistrationTestBase); | |
111 }; | |
112 | |
113 } // namespace test | |
114 } // namespace crashpad | |
OLD | NEW |