diff options
Diffstat (limited to 'test/987-stack-trace-dumping/src/Main.java')
-rw-r--r-- | test/987-stack-trace-dumping/src/Main.java | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/test/987-stack-trace-dumping/src/Main.java b/test/987-stack-trace-dumping/src/Main.java new file mode 100644 index 0000000000..d1e8a1b56b --- /dev/null +++ b/test/987-stack-trace-dumping/src/Main.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.File; + +public class Main { + public static void main(String[] args) throws Exception { + if (args.length != 3) { + throw new AssertionError("Unexpected number of args: " + args.length); + } + + if (!"--stack-trace-dir".equals(args[1])) { + throw new AssertionError("Unexpected argument in position 1: " + args[1]); + } + + // Send ourselves signal 3, which forces stack traces to be written to disk. + android.system.Os.kill(android.system.Os.getpid(), 3); + + File[] files = null; + final String stackTraceDir = args[2]; + for (int i = 0; i < 5; ++i) { + // Give the signal handler some time to run and dump traces - up to a maximum + // of 5 seconds. This is a kludge, but it's hard to do this without using things + // like inotify / WatchService and the like. + Thread.sleep(1000); + + files = (new File(stackTraceDir)).listFiles(); + if (files != null && files.length == 1) { + break; + } + } + + + if (files == null) { + throw new AssertionError("Gave up waiting for traces: " + java.util.Arrays.toString(files)); + } + + final String fileName = files[0].getName(); + if (!fileName.startsWith("anr-pid")) { + throw new AssertionError("Unexpected prefix: " + fileName); + } + + if (!fileName.contains(String.valueOf(android.system.Os.getpid()))) { + throw new AssertionError("File name does not contain process PID: " + fileName); + } + } +} |