Only add `darwin_log_cmd` lit shell test feature when the log can be queried.
authorDan Liew <dan@su-root.co.uk>
Fri, 27 Mar 2020 01:17:53 +0000 (18:17 -0700)
committerDan Liew <dan@su-root.co.uk>
Fri, 27 Mar 2020 18:24:50 +0000 (11:24 -0700)
Summary:
Follow up fix to 445b810fbd4. The `log show` command only works for
privileged users so run a quick test of the command during lit config to
see if the command works and only add the `darwin_log_cmd` feature if
this is the case.

Unfortunately this means the `asan/TestCases/Darwin/duplicate_os_log_reports.cpp`
test and any other tests in the future that use this feature won't run
for unprivileged users which is likely the case in CI.

rdar://problem/55986279

Reviewers: kubamracek, yln, dcoughlin

Subscribers: Charusso, #sanitizers, llvm-commits

Tags: #sanitizers

Differential Revision: https://reviews.llvm.org/D76899

compiler-rt/test/lit.common.cfg.py

index d7def93..f0618df 100644 (file)
@@ -534,7 +534,16 @@ if config.host_os == 'Darwin':
   config.default_sanitizer_opts += ['abort_on_error=0']
   config.default_sanitizer_opts += ['log_to_syslog=0']
   if lit.util.which('log'):
-    config.available_features.add('darwin_log_cmd')
+    # Querying the log can only done by a privileged user so
+    # so check if we can query the log.
+    exit_code = -1
+    with open('/dev/null', 'r') as f:
+      # Run a `log show` command the should finish fairly quickly and produce very little output.
+      exit_code = subprocess.call(['log', 'show', '--last', '1m', '--predicate', '1 == 0'], stdout=f, stderr=f)
+    if exit_code == 0:
+      config.available_features.add('darwin_log_cmd')
+    else:
+      lit_config.warning('log command found but cannot queried')
   else:
     lit_config.warning('log command not found. Some tests will be skipped.')
 elif config.android: