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

Side by Side Diff: util/mach/exc_server_variants_test.cc

Issue 1049023003: Add ExcServerCopyState() (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: Address review feedback Created 5 years, 8 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 | « util/mach/exc_server_variants.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Crashpad Authors. All rights reserved. 1 // Copyright 2014 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 1014 matching lines...) Expand 10 before | Expand all | Expand 10 after
1025 EXPECT_EQ(nullptr, old_state); 1025 EXPECT_EQ(nullptr, old_state);
1026 EXPECT_EQ(0u, *new_state_count); 1026 EXPECT_EQ(0u, *new_state_count);
1027 EXPECT_EQ(nullptr, new_state); 1027 EXPECT_EQ(nullptr, new_state);
1028 } 1028 }
1029 1029
1030 EXPECT_EQ(implicit_cast<mach_msg_trailer_type_t>(MACH_MSG_TRAILER_FORMAT_0), 1030 EXPECT_EQ(implicit_cast<mach_msg_trailer_type_t>(MACH_MSG_TRAILER_FORMAT_0),
1031 trailer->msgh_trailer_type); 1031 trailer->msgh_trailer_type);
1032 EXPECT_EQ(REQUESTED_TRAILER_SIZE(kMachMessageOptions), 1032 EXPECT_EQ(REQUESTED_TRAILER_SIZE(kMachMessageOptions),
1033 trailer->msgh_trailer_size); 1033 trailer->msgh_trailer_size);
1034 1034
1035 ExcServerCopyState(
1036 behavior, old_state, old_state_count, new_state, new_state_count);
1037
1035 return ExcServerSuccessfulReturnValue(behavior, false); 1038 return ExcServerSuccessfulReturnValue(behavior, false);
1036 } 1039 }
1037 1040
1038 private: 1041 private:
1039 // MachMultiprocess: 1042 // MachMultiprocess:
1040 1043
1041 void MachMultiprocessParent() override { 1044 void MachMultiprocessParent() override {
1042 UniversalMachExcServer universal_mach_exc_server(this); 1045 UniversalMachExcServer universal_mach_exc_server(this);
1043 1046
1044 kern_return_t kr = 1047 kern_return_t kr =
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
1268 index, 1271 index,
1269 test_data.behavior, 1272 test_data.behavior,
1270 test_data.set_thread_state ? "true" : "false")); 1273 test_data.set_thread_state ? "true" : "false"));
1271 1274
1272 EXPECT_EQ(test_data.kr, 1275 EXPECT_EQ(test_data.kr,
1273 ExcServerSuccessfulReturnValue(test_data.behavior, 1276 ExcServerSuccessfulReturnValue(test_data.behavior,
1274 test_data.set_thread_state)); 1277 test_data.set_thread_state));
1275 } 1278 }
1276 } 1279 }
1277 1280
1281 TEST(ExcServerVariants, ExcServerCopyState) {
1282 const natural_t old_state[] = {1, 2, 3, 4, 5};
1283 natural_t new_state[10] = {};
1284
1285 const mach_msg_type_number_t old_state_count = arraysize(old_state);
1286 mach_msg_type_number_t new_state_count = arraysize(new_state);
1287
1288 // EXCEPTION_DEFAULT (with or without MACH_EXCEPTION_CODES) is not
1289 // state-carrying. new_state and new_state_count should be untouched.
1290 ExcServerCopyState(EXCEPTION_DEFAULT,
1291 old_state,
1292 old_state_count,
1293 new_state,
1294 &new_state_count);
1295 EXPECT_EQ(arraysize(new_state), new_state_count);
1296 for (size_t i = 0; i < arraysize(new_state); ++i) {
1297 EXPECT_EQ(0u, new_state[i]) << "i " << i;
1298 }
1299
1300 ExcServerCopyState(MACH_EXCEPTION_CODES | EXCEPTION_DEFAULT,
1301 old_state,
1302 old_state_count,
1303 new_state,
1304 &new_state_count);
1305 EXPECT_EQ(arraysize(new_state), new_state_count);
1306 for (size_t i = 0; i < arraysize(new_state); ++i) {
1307 EXPECT_EQ(0u, new_state[i]) << "i " << i;
1308 }
1309
1310 // This is a state-carrying exception where old_state_count is small.
1311 mach_msg_type_number_t copy_limit = 2;
1312 ExcServerCopyState(
1313 EXCEPTION_STATE, old_state, copy_limit, new_state, &new_state_count);
1314 EXPECT_EQ(copy_limit, new_state_count);
1315 for (size_t i = 0; i < copy_limit; ++i) {
1316 EXPECT_EQ(old_state[i], new_state[i]) << "i " << i;
1317 }
1318 for (size_t i = copy_limit; i < arraysize(new_state); ++i) {
1319 EXPECT_EQ(0u, new_state[i]) << "i " << i;
1320 }
1321
1322 // This is a state-carrying exception where new_state_count is small.
1323 copy_limit = 3;
1324 new_state_count = copy_limit;
1325 ExcServerCopyState(EXCEPTION_STATE_IDENTITY,
1326 old_state,
1327 old_state_count,
1328 new_state,
1329 &new_state_count);
1330 EXPECT_EQ(copy_limit, new_state_count);
1331 for (size_t i = 0; i < copy_limit; ++i) {
1332 EXPECT_EQ(old_state[i], new_state[i]) << "i " << i;
1333 }
1334 for (size_t i = copy_limit; i < arraysize(new_state); ++i) {
1335 EXPECT_EQ(0u, new_state[i]) << "i " << i;
1336 }
1337
1338 // This is a state-carrying exception where all of old_state is copied to
1339 // new_state, which is large enough to receive it and then some.
1340 new_state_count = arraysize(new_state);
1341 ExcServerCopyState(MACH_EXCEPTION_CODES | EXCEPTION_STATE_IDENTITY,
1342 old_state,
1343 old_state_count,
1344 new_state,
1345 &new_state_count);
1346 EXPECT_EQ(old_state_count, new_state_count);
1347 for (size_t i = 0; i < arraysize(old_state); ++i) {
1348 EXPECT_EQ(old_state[i], new_state[i]) << "i " << i;
1349 }
1350 for (size_t i = arraysize(old_state); i < arraysize(new_state); ++i) {
1351 EXPECT_EQ(0u, new_state[i]) << "i " << i;
1352 }
1353 }
1354
1278 } // namespace 1355 } // namespace
1279 } // namespace test 1356 } // namespace test
1280 } // namespace crashpad 1357 } // namespace crashpad
OLDNEW
« no previous file with comments | « util/mach/exc_server_variants.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698