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

Side by Side Diff: snapshot/win/pe_image_annotations_reader_test.cc

Issue 1164453003: Refactor multiprocess test code to allow multiple child processes to be launched. (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@multiprocess_test
Patch Set: Review comment. 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 unified diff | Download patch
« no previous file with comments | « no previous file | snapshot/win/process_reader_win_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Crashpad Authors. All rights reserved. 1 // Copyright 2015 The Crashpad Authors. All rights reserved.
2 // 2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with 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 5 // You may obtain a copy of the License at
6 // 6 //
7 // http://www.apache.org/licenses/LICENSE-2.0 7 // http://www.apache.org/licenses/LICENSE-2.0
8 // 8 //
9 // Unless required by applicable law or agreed to in writing, software 9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, 10 // distributed under the License is distributed on an "AS IS" BASIS,
(...skipping 18 matching lines...) Expand all
29 #include "snapshot/win/pe_image_reader.h" 29 #include "snapshot/win/pe_image_reader.h"
30 #include "snapshot/win/process_reader_win.h" 30 #include "snapshot/win/process_reader_win.h"
31 #include "test/win/win_multiprocess.h" 31 #include "test/win/win_multiprocess.h"
32 #include "util/file/file_io.h" 32 #include "util/file/file_io.h"
33 #include "util/win/process_info.h" 33 #include "util/win/process_info.h"
34 34
35 namespace crashpad { 35 namespace crashpad {
36 namespace test { 36 namespace test {
37 namespace { 37 namespace {
38 38
39 enum TestType {
40 // Don't crash, just test the CrashpadInfo interface.
41 kDontCrash = 0,
42
43 // The child process should crash by __debugbreak().
44 kCrashDebugBreak,
45 };
46
47 template <TestType Type>
39 class TestPEImageAnnotationsReader final : public WinMultiprocess { 48 class TestPEImageAnnotationsReader final : public WinMultiprocess {
40 public: 49 public:
41 enum TestType { 50 TestPEImageAnnotationsReader() {}
42 // Don't crash, just test the CrashpadInfo interface.
43 kDontCrash = 0,
44
45 // The child process should crash by __debugbreak().
46 kCrashDebugBreak,
47 };
48
49 explicit TestPEImageAnnotationsReader(TestType test_type)
50 : WinMultiprocess(), test_type_(test_type) {}
51
52 ~TestPEImageAnnotationsReader() {} 51 ~TestPEImageAnnotationsReader() {}
53 52
54 private: 53 private:
55 // WinMultiprocess: 54 // WinMultiprocess:
56 55
57 void WinMultiprocessParent() override { 56 void WinMultiprocessParent() override {
58 ProcessReaderWin process_reader; 57 ProcessReaderWin process_reader;
59 ASSERT_TRUE(process_reader.Initialize(ChildProcess())); 58 ASSERT_TRUE(process_reader.Initialize(ChildProcess()));
60 59
61 // Wait for the child process to indicate that it's done setting up its 60 // Wait for the child process to indicate that it's done setting up its
(...skipping 18 matching lines...) Expand all
80 module_annotations_simple_map.end()); 79 module_annotations_simple_map.end());
81 } 80 }
82 81
83 EXPECT_GE(all_annotations_simple_map.size(), 5u); 82 EXPECT_GE(all_annotations_simple_map.size(), 5u);
84 EXPECT_EQ("crash", all_annotations_simple_map["#TEST# pad"]); 83 EXPECT_EQ("crash", all_annotations_simple_map["#TEST# pad"]);
85 EXPECT_EQ("value", all_annotations_simple_map["#TEST# key"]); 84 EXPECT_EQ("value", all_annotations_simple_map["#TEST# key"]);
86 EXPECT_EQ("y", all_annotations_simple_map["#TEST# x"]); 85 EXPECT_EQ("y", all_annotations_simple_map["#TEST# x"]);
87 EXPECT_EQ("shorter", all_annotations_simple_map["#TEST# longer"]); 86 EXPECT_EQ("shorter", all_annotations_simple_map["#TEST# longer"]);
88 EXPECT_EQ("", all_annotations_simple_map["#TEST# empty_value"]); 87 EXPECT_EQ("", all_annotations_simple_map["#TEST# empty_value"]);
89 88
90 if (test_type_ == kCrashDebugBreak) 89 if (Type == kCrashDebugBreak)
91 SetExpectedChildExitCode(STATUS_BREAKPOINT); 90 SetExpectedChildExitCode(STATUS_BREAKPOINT);
92 91
93 // Tell the child process to continue. 92 // Tell the child process to continue.
94 CheckedWriteFile(WritePipeHandle(), &c, sizeof(c)); 93 CheckedWriteFile(WritePipeHandle(), &c, sizeof(c));
95 } 94 }
96 95
97 void WinMultiprocessChild() override { 96 void WinMultiprocessChild() override {
98 CrashpadInfo* crashpad_info = CrashpadInfo::GetCrashpadInfo(); 97 CrashpadInfo* crashpad_info = CrashpadInfo::GetCrashpadInfo();
99 98
100 // This is "leaked" to crashpad_info. 99 // This is "leaked" to crashpad_info.
101 SimpleStringDictionary* simple_annotations = new SimpleStringDictionary(); 100 SimpleStringDictionary* simple_annotations = new SimpleStringDictionary();
102 simple_annotations->SetKeyValue("#TEST# pad", "break"); 101 simple_annotations->SetKeyValue("#TEST# pad", "break");
103 simple_annotations->SetKeyValue("#TEST# key", "value"); 102 simple_annotations->SetKeyValue("#TEST# key", "value");
104 simple_annotations->SetKeyValue("#TEST# pad", "crash"); 103 simple_annotations->SetKeyValue("#TEST# pad", "crash");
105 simple_annotations->SetKeyValue("#TEST# x", "y"); 104 simple_annotations->SetKeyValue("#TEST# x", "y");
106 simple_annotations->SetKeyValue("#TEST# longer", "shorter"); 105 simple_annotations->SetKeyValue("#TEST# longer", "shorter");
107 simple_annotations->SetKeyValue("#TEST# empty_value", ""); 106 simple_annotations->SetKeyValue("#TEST# empty_value", "");
108 107
109 crashpad_info->set_simple_annotations(simple_annotations); 108 crashpad_info->set_simple_annotations(simple_annotations);
110 109
111 // Tell the parent that the environment has been set up. 110 // Tell the parent that the environment has been set up.
112 char c = '\0'; 111 char c = '\0';
113 CheckedWriteFile(WritePipeHandle(), &c, sizeof(c)); 112 CheckedWriteFile(WritePipeHandle(), &c, sizeof(c));
114 113
115 // Wait for the parent to indicate that it's safe to continue/crash. 114 // Wait for the parent to indicate that it's safe to continue/crash.
116 CheckedReadFile(ReadPipeHandle(), &c, sizeof(c)); 115 CheckedReadFile(ReadPipeHandle(), &c, sizeof(c));
117 116
118 switch (test_type_) { 117 switch (Type) {
119 case kDontCrash: 118 case kDontCrash:
120 break; 119 break;
121 120
122 case kCrashDebugBreak: 121 case kCrashDebugBreak:
123 __debugbreak(); 122 __debugbreak();
124 break; 123 break;
125 } 124 }
126 } 125 }
127 126
128 TestType test_type_;
129
130 DISALLOW_COPY_AND_ASSIGN(TestPEImageAnnotationsReader); 127 DISALLOW_COPY_AND_ASSIGN(TestPEImageAnnotationsReader);
131 }; 128 };
132 129
133 TEST(PEImageAnnotationsReader, DontCrash) { 130 TEST(PEImageAnnotationsReader, DontCrash) {
134 TestPEImageAnnotationsReader test_pe_image_annotations_reader( 131 WinMultiprocess::Run<TestPEImageAnnotationsReader<kDontCrash>>();
135 TestPEImageAnnotationsReader::kDontCrash);
136 test_pe_image_annotations_reader.Run();
137 } 132 }
138 133
139 TEST(PEImageAnnotationsReader, CrashDebugBreak) { 134 TEST(PEImageAnnotationsReader, CrashDebugBreak) {
140 TestPEImageAnnotationsReader test_pe_image_annotations_reader( 135 WinMultiprocess::Run<TestPEImageAnnotationsReader<kCrashDebugBreak>>();
141 TestPEImageAnnotationsReader::kCrashDebugBreak);
142 test_pe_image_annotations_reader.Run();
143 } 136 }
144 137
145 } // namespace 138 } // namespace
146 } // namespace test 139 } // namespace test
147 } // namespace crashpad 140 } // namespace crashpad
OLDNEW
« no previous file with comments | « no previous file | snapshot/win/process_reader_win_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698