From 8109db569b65bd2132379e9d0c7e39ed93469b58 Mon Sep 17 00:00:00 2001 From: Mona Mohamadinia Date: Sun, 1 Dec 2019 23:17:25 +0330 Subject: [PATCH 1/2] Added the sample codes --- .../baeldung/hook/ShutdownHookUnitTest.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 core-java-modules/core-java-jvm/src/test/java/com/baeldung/hook/ShutdownHookUnitTest.java diff --git a/core-java-modules/core-java-jvm/src/test/java/com/baeldung/hook/ShutdownHookUnitTest.java b/core-java-modules/core-java-jvm/src/test/java/com/baeldung/hook/ShutdownHookUnitTest.java new file mode 100644 index 0000000000..0059cb1faa --- /dev/null +++ b/core-java-modules/core-java-jvm/src/test/java/com/baeldung/hook/ShutdownHookUnitTest.java @@ -0,0 +1,47 @@ +package com.baeldung.hook; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +public class ShutdownHookUnitTest { + + @Test + public void givenAHook_WhenShutsDown_ThenHookShouldBeExecuted() { + Thread printingHook = new Thread(() -> System.out.println("In the middle of a shutdown")); + Runtime.getRuntime().addShutdownHook(printingHook); + } + + @Test + public void addingAHook_WhenThreadAlreadyStarted_ThenThrowsAnException() { + Thread longRunningHook = new Thread(() -> { + try { + Thread.sleep(300); + } catch (InterruptedException ignored) {} + }); + longRunningHook.start(); + + assertThatThrownBy(() -> Runtime.getRuntime().addShutdownHook(longRunningHook)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("Hook already running"); + } + + @Test + public void addingAHook_WhenAlreadyExists_ThenAnExceptionWouldBeThrown() { + Thread unfortunateHook = new Thread(() -> {}); + Runtime.getRuntime().addShutdownHook(unfortunateHook); + + assertThatThrownBy(() -> Runtime.getRuntime().addShutdownHook(unfortunateHook)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("Hook previously registered"); + } + + @Test + public void removeAHook_WhenItIsAlreadyRegistered_ThenWouldDeRegisterTheHook() { + Thread willNotRun = new Thread(() -> System.out.println("Won't run!")); + Runtime.getRuntime().addShutdownHook(willNotRun); + + assertThat(Runtime.getRuntime().removeShutdownHook(willNotRun)).isTrue(); + } +} From 22572ee072d26a04820a26e15c921567c73cbc50 Mon Sep 17 00:00:00 2001 From: Mona Mohamadinia Date: Sat, 7 Dec 2019 22:32:13 +0330 Subject: [PATCH 2/2] Refactoring to a better package name --- .../baeldung/{hook => shutdownhook}/ShutdownHookUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename core-java-modules/core-java-jvm/src/test/java/com/baeldung/{hook => shutdownhook}/ShutdownHookUnitTest.java (97%) diff --git a/core-java-modules/core-java-jvm/src/test/java/com/baeldung/hook/ShutdownHookUnitTest.java b/core-java-modules/core-java-jvm/src/test/java/com/baeldung/shutdownhook/ShutdownHookUnitTest.java similarity index 97% rename from core-java-modules/core-java-jvm/src/test/java/com/baeldung/hook/ShutdownHookUnitTest.java rename to core-java-modules/core-java-jvm/src/test/java/com/baeldung/shutdownhook/ShutdownHookUnitTest.java index 0059cb1faa..0f97a2eb09 100644 --- a/core-java-modules/core-java-jvm/src/test/java/com/baeldung/hook/ShutdownHookUnitTest.java +++ b/core-java-modules/core-java-jvm/src/test/java/com/baeldung/shutdownhook/ShutdownHookUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.hook; +package com.baeldung.shutdownhook; import org.junit.Test;