| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import <Foundation/Foundation.h> | 5 #import <Foundation/Foundation.h> |
| 6 #include <asl.h> | 6 #include <asl.h> |
| 7 #include <libgen.h> | 7 #include <libgen.h> |
| 8 #include <stdarg.h> | 8 #include <stdarg.h> |
| 9 #include <stdio.h> | 9 #include <stdio.h> |
| 10 | 10 |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 // messages from launchd that refer to the simulated app's PID. Limit query | 284 // messages from launchd that refer to the simulated app's PID. Limit query |
| 285 // to messages in the last minute since PIDs are cyclical. | 285 // to messages in the last minute since PIDs are cyclical. |
| 286 aslmsg query = asl_new(ASL_TYPE_QUERY); | 286 aslmsg query = asl_new(ASL_TYPE_QUERY); |
| 287 asl_set_query(query, ASL_KEY_SENDER, "launchd", | 287 asl_set_query(query, ASL_KEY_SENDER, "launchd", |
| 288 ASL_QUERY_OP_EQUAL | ASL_QUERY_OP_SUBSTRING); | 288 ASL_QUERY_OP_EQUAL | ASL_QUERY_OP_SUBSTRING); |
| 289 asl_set_query(query, ASL_KEY_REF_PID, | 289 asl_set_query(query, ASL_KEY_REF_PID, |
| 290 [[[session simulatedApplicationPID] stringValue] UTF8String], | 290 [[[session simulatedApplicationPID] stringValue] UTF8String], |
| 291 ASL_QUERY_OP_EQUAL); | 291 ASL_QUERY_OP_EQUAL); |
| 292 asl_set_query(query, ASL_KEY_TIME, "-1m", ASL_QUERY_OP_GREATER_EQUAL); | 292 asl_set_query(query, ASL_KEY_TIME, "-1m", ASL_QUERY_OP_GREATER_EQUAL); |
| 293 | 293 |
| 294 // Log any messages found. | 294 // Log any messages found, and take note of any messages that may indicate the |
| 295 // app crashed or did not exit cleanly. |
| 295 aslresponse response = asl_search(NULL, query); | 296 aslresponse response = asl_search(NULL, query); |
| 296 BOOL entryFound = NO; | 297 BOOL badEntryFound = NO; |
| 297 aslmsg entry; | 298 aslmsg entry; |
| 298 while ((entry = aslresponse_next(response)) != NULL) { | 299 while ((entry = aslresponse_next(response)) != NULL) { |
| 299 entryFound = YES; | 300 const char* message = asl_get(entry, ASL_KEY_MSG); |
| 300 LogWarning(@"Console message: %s", asl_get(entry, ASL_KEY_MSG)); | 301 LogWarning(@"Console message: %s", message); |
| 302 // Some messages are harmless, so don't trigger a failure for them. |
| 303 if (strstr(message, "The following job tried to hijack the service")) |
| 304 continue; |
| 305 badEntryFound = YES; |
| 301 } | 306 } |
| 302 | 307 |
| 303 // launchd only sends messages if the process crashed or exits with a | 308 // If the query returned any nasty-looking results, iossim should exit with |
| 304 // non-zero status, so if the query returned any results iossim should exit | 309 // non-zero status. |
| 305 // with non-zero status. | 310 if (badEntryFound) { |
| 306 if (entryFound) { | |
| 307 LogError(@"Simulated app crashed or exited with non-zero status"); | 311 LogError(@"Simulated app crashed or exited with non-zero status"); |
| 308 exit(kExitAppCrashed); | 312 exit(kExitAppCrashed); |
| 309 } | 313 } |
| 310 exit(kExitSuccess); | 314 exit(kExitSuccess); |
| 311 } | 315 } |
| 312 @end | 316 @end |
| 313 | 317 |
| 314 namespace { | 318 namespace { |
| 315 | 319 |
| 316 // Finds the developer dir via xcode-select or the DEVELOPER_DIR environment | 320 // Finds the developer dir via xcode-select or the DEVELOPER_DIR environment |
| (...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 715 [error localizedDescription], | 719 [error localizedDescription], |
| 716 [error domain], static_cast<long int>([error code])); | 720 [error domain], static_cast<long int>([error code])); |
| 717 } | 721 } |
| 718 | 722 |
| 719 // Note that this code is only executed if the simulator fails to start | 723 // Note that this code is only executed if the simulator fails to start |
| 720 // because once the main run loop is started, only the delegate calling | 724 // because once the main run loop is started, only the delegate calling |
| 721 // exit() will end the program. | 725 // exit() will end the program. |
| 722 [pool drain]; | 726 [pool drain]; |
| 723 return kExitFailure; | 727 return kExitFailure; |
| 724 } | 728 } |
| OLD | NEW |