Skip to content

Commit

Permalink
Issue #8088 Add STOP.EXIT System property to configure ShutdownMonito…
Browse files Browse the repository at this point in the history
…r.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.
  • Loading branch information
janbartel committed Jun 8, 2022
1 parent 8de5515 commit d725855
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 2 deletions.
Expand Up @@ -30,6 +30,7 @@
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;
Expand Down Expand Up @@ -87,7 +88,7 @@ public static boolean isRegistered(LifeCycle lifeCycle)
private final String host;
private int port;
private String key;
private boolean exitVm;
private boolean exitVm = true;
private boolean alive;

/**
Expand All @@ -104,7 +105,8 @@ private 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)
Expand Down Expand Up @@ -305,6 +307,8 @@ private ServerSocket listen()
// 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);
}
}

Expand Down
Expand Up @@ -27,6 +27,7 @@
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;

Expand Down Expand Up @@ -132,6 +133,81 @@ public void testStartStopDifferentPortDifferentKey() throws Exception
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
{
Expand Down

0 comments on commit d725855

Please sign in to comment.