changeset 1247:bc6354c5d6ce

Add two integration tests to verify forceful shutdown works.
author shade
date Thu, 25 Jun 2015 21:20:47 +0300
parents 9440a466ee8c
children d79c787a80c0
files jmh-core-it/src/test/java/org/openjdk/jmh/it/errors/ForkedStuckShutdownHookTest.java jmh-core-it/src/test/java/org/openjdk/jmh/it/errors/ForkedStuckThreadTest.java
diffstat 2 files changed, 154 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jmh-core-it/src/test/java/org/openjdk/jmh/it/errors/ForkedStuckShutdownHookTest.java	Thu Jun 25 21:20:47 2015 +0300
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package org.openjdk.jmh.it.errors;
+
+import junit.framework.Assert;
+import org.junit.Test;
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.it.Fixtures;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.util.FileUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.concurrent.TimeUnit;
+
+@Measurement(iterations = 1, time = 10, timeUnit = TimeUnit.MILLISECONDS)
+@Warmup(iterations = 1, time = 10, timeUnit = TimeUnit.MILLISECONDS)
+@State(Scope.Benchmark)
+public class ForkedStuckShutdownHookTest {
+
+    @Setup
+    public void setup() {
+        Runtime.getRuntime().addShutdownHook(
+                new Thread() {
+                    @Override
+                    public void run() {
+                        try {
+                            TimeUnit.DAYS.sleep(1);
+                        } catch (InterruptedException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                }
+        );
+    }
+
+    @Benchmark
+    public void bench() throws InterruptedException {
+        Fixtures.work();
+    }
+
+    @Test
+    public void test() throws RunnerException, IOException {
+        File output = FileUtils.tempFile("output");
+
+        Shared.doRun(Fixtures.getTestMask(this.getClass()), true, output);
+
+        Collection<String> lines = FileUtils.readAllLines(output);
+        Shared.print(lines);
+
+        Assert.assertTrue(Shared.contains(lines, "expired, forcing forked VM to exit"));
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jmh-core-it/src/test/java/org/openjdk/jmh/it/errors/ForkedStuckThreadTest.java	Thu Jun 25 21:20:47 2015 +0300
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package org.openjdk.jmh.it.errors;
+
+import junit.framework.Assert;
+import org.junit.Test;
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.it.Fixtures;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.util.FileUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.concurrent.TimeUnit;
+
+@Measurement(iterations = 1, time = 10, timeUnit = TimeUnit.MILLISECONDS)
+@Warmup(iterations = 1, time = 10, timeUnit = TimeUnit.MILLISECONDS)
+@State(Scope.Benchmark)
+public class ForkedStuckThreadTest {
+
+    @Setup
+    public void setup() {
+        Thread t = new Thread(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    TimeUnit.DAYS.sleep(1);
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+            }
+        });
+        t.setDaemon(false);
+        t.start();
+    }
+
+    @Benchmark
+    public void bench() throws InterruptedException {
+        Fixtures.work();
+    }
+
+    @Test
+    public void test() throws RunnerException, IOException {
+        File output = FileUtils.tempFile("output");
+
+        Shared.doRun(Fixtures.getTestMask(this.getClass()), true, output);
+
+        Collection<String> lines = FileUtils.readAllLines(output);
+        Shared.print(lines);
+
+        Assert.assertTrue(Shared.contains(lines, "expired, forcing forked VM to exit"));
+    }
+
+}