Issue #8088 Add STOP.EXIT System property to configure ShutdownMonitor.exitVm (#8133)

* Issue #8088 Add STOP.EXIT System property to configure ShutdownMonitor.exitVm (#8089)

* Issue #8088 Add STOP.EXIT System property to configure ShutdownMonitor.exitVM

* Ensure missing STOP.EXIT doesn't override default exitVm=true

* Disable another test

* Disable test that might not work, depending on test execution order.
This commit is contained in:
Jan Bartel 2022-06-09 08:06:55 +10:00 committed by GitHub
parent 8de55150fe
commit d725855194
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 82 additions and 2 deletions

View File

@ -30,6 +30,7 @@ import java.util.Set;
import java.util.function.Predicate;
import org.eclipse.jetty.util.IO;
import org.eclipse.jetty.util.StringUtil;
import org.eclipse.jetty.util.component.Destroyable;
import org.eclipse.jetty.util.component.LifeCycle;
import org.eclipse.jetty.util.thread.AutoLock;
@ -87,7 +88,7 @@ public class ShutdownMonitor
private final String host;
private int port;
private String key;
private boolean exitVm;
private boolean exitVm = true;
private boolean alive;
/**
@ -104,7 +105,8 @@ public class ShutdownMonitor
this.host = System.getProperty("STOP.HOST", "127.0.0.1");
this.port = Integer.getInteger("STOP.PORT", -1);
this.key = System.getProperty("STOP.KEY", null);
this.exitVm = true;
//only change the default exitVm setting if STOP.EXIT is explicitly set
this.exitVm = Boolean.valueOf(System.getProperty("STOP.EXIT", "true"));
}
private void addLifeCycles(LifeCycle... lifeCycles)
@ -305,6 +307,8 @@ public class ShutdownMonitor
// establish the port and key that are in use
debug("STOP.PORT=%d", port);
debug("STOP.KEY=%s", key);
//also show if we're exiting the jvm or not
debug("STOP.EXIT=%b", exitVm);
}
}

View File

@ -27,6 +27,7 @@ import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
@ -132,6 +133,81 @@ public class ShutdownMonitorTest
assertTrue(!monitor.isAlive());
}
/*
* Disable these config tests because ShutdownMonitor is a
* static singleton that cannot be unset, and thus would
* need each of these methods executed it its own jvm -
* current surefire settings only fork for a single test
* class.
*
* Undisable to test individually as needed.
*/
@Disabled
@Test
public void testNoExitSystemProperty() throws Exception
{
System.setProperty("STOP.EXIT", "false");
ShutdownMonitor monitor = ShutdownMonitor.getInstance();
monitor.setPort(0);
assertFalse(monitor.isExitVm());
monitor.start();
try (CloseableServer server = new CloseableServer())
{
server.setStopAtShutdown(true);
server.start();
//shouldn't be registered for shutdown on jvm
assertTrue(ShutdownThread.isRegistered(server));
assertTrue(ShutdownMonitor.isRegistered(server));
String key = monitor.getKey();
int port = monitor.getPort();
stop("stop", port, key, true);
monitor.await();
assertTrue(!monitor.isAlive());
assertTrue(server.stopped);
assertTrue(!server.destroyed);
assertTrue(!ShutdownThread.isRegistered(server));
assertTrue(!ShutdownMonitor.isRegistered(server));
}
}
@Disabled
@Test
public void testExitVmDefault() throws Exception
{
//Test that the default is to exit
ShutdownMonitor monitor = ShutdownMonitor.getInstance();
monitor.setPort(0);
assertTrue(monitor.isExitVm());
}
@Disabled
@Test
public void testExitVmTrue() throws Exception
{
//Test setting exit true
System.setProperty("STOP.EXIT", "true");
ShutdownMonitor monitor = ShutdownMonitor.getInstance();
monitor.setPort(0);
assertTrue(monitor.isExitVm());
}
@Disabled
@Test
public void testExitVmFalse() throws Exception
{
//Test setting exit false
System.setProperty("STOP.EXIT", "false");
ShutdownMonitor monitor = ShutdownMonitor.getInstance();
monitor.setPort(0);
assertFalse(monitor.isExitVm());
}
@Disabled
@Test
public void testForceStopCommand() throws Exception
{