diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/java/org/springframework/boot/launchscript/AbstractLaunchScriptIT.java b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/java/org/springframework/boot/launchscript/AbstractLaunchScriptIT.java new file mode 100644 index 00000000000..41f02619b3f --- /dev/null +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/java/org/springframework/boot/launchscript/AbstractLaunchScriptIT.java @@ -0,0 +1,114 @@ +/* + * Copyright 2012-2020 the original author or authors. + * + * 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 + * + * https://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. + */ + +package org.springframework.boot.launchscript; + +import java.io.File; +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; + +import org.assertj.core.api.Condition; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.output.ToStringConsumer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import org.testcontainers.utility.MountableFile; + +import org.springframework.boot.ansi.AnsiColor; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.Matchers.containsString; + +/** + * Abstract base class for testing the launch script. + * + * @author Alexey Vinogradov + */ +abstract class AbstractLaunchScriptIT { + + protected static final char ESC = 27; + + static List parameters() { + List parameters = new ArrayList<>(); + for (File os : new File("src/test/resources/conf").listFiles()) { + for (File version : os.listFiles()) { + parameters.add(new Object[] { os.getName(), version.getName() }); + } + } + return parameters; + } + + protected Condition coloredString(AnsiColor color, String string) { + String colorString = ESC + "[0;" + color + "m" + string + ESC + "[0m"; + return new Condition() { + + @Override + public boolean matches(String value) { + return containsString(colorString).matches(value); + } + + }; + } + + protected void doLaunch(String os, String version, String script) throws Exception { + assertThat(doTest(os, version, script)).contains("Launched"); + } + + protected String doTest(String os, String version, String script) throws Exception { + ToStringConsumer consumer = new ToStringConsumer().withRemoveAnsiCodes(false); + try (LaunchScriptTestContainer container = new LaunchScriptTestContainer(os, version, script)) { + container.withLogConsumer(consumer); + container.start(); + while (container.isRunning()) { + Thread.sleep(100); + } + } + return consumer.toUtf8String(); + } + + private static final class LaunchScriptTestContainer extends GenericContainer { + + private LaunchScriptTestContainer(String os, String version, String testScript) { + super(new ImageFromDockerfile("spring-boot-launch-script/" + os.toLowerCase() + "-" + version) + .withFileFromFile("Dockerfile", + new File("src/test/resources/conf/" + os + "/" + version + "/Dockerfile")) + .withFileFromFile("spring-boot-launch-script-tests.jar", findApplication()) + .withFileFromFile("test-functions.sh", new File("src/test/resources/scripts/test-functions.sh")) + .withFileFromFile("jar/test-functions.sh", + new File("src/test/resources/scripts/jar/test-functions.sh")) + .withFileFromFile("init.d/test-functions.sh", + new File("src/test/resources/scripts/init.d/test-functions.sh"))); + withCopyFileToContainer(MountableFile.forHostPath("src/test/resources/scripts/" + testScript), + "/" + testScript); + withCommand("/bin/bash", "-c", "chmod +x " + testScript + " && ./" + testScript); + withStartupTimeout(Duration.ofMinutes(10)); + } + + private static File findApplication() { + File targetDir = new File("target"); + for (File file : targetDir.listFiles()) { + if (file.getName().startsWith("spring-boot-launch-script-tests") && file.getName().endsWith(".jar") + && !file.getName().endsWith("-sources.jar")) { + return file; + } + } + throw new IllegalStateException( + "Could not find test application in target directory. Have you built it (mvn package)?"); + } + + } + +} diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/java/org/springframework/boot/launchscript/ShellLaunchScriptIT.java b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/java/org/springframework/boot/launchscript/ShellLaunchScriptIT.java new file mode 100644 index 00000000000..01265fdc735 --- /dev/null +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/java/org/springframework/boot/launchscript/ShellLaunchScriptIT.java @@ -0,0 +1,66 @@ +/* + * Copyright 2012-2020 the original author or authors. + * + * 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 + * + * https://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. + */ + +package org.springframework.boot.launchscript; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration tests of Spring Boot's launch script with launching via shell. + * + * @author Alexey Vinogradov + */ +class ShellLaunchScriptIT extends AbstractLaunchScriptIT { + + @ParameterizedTest(name = "{0} {1}") + @MethodSource("parameters") + void basicLaunch(String os, String version) throws Exception { + doLaunch(os, version, "jar/basic-launch.sh"); + } + + @ParameterizedTest(name = "{0} {1}") + @MethodSource("parameters") + void launchWithDebugEnv(String os, String version) throws Exception { + final String output = doTest(os, version, "jar/launch-with-debug.sh"); + assertThat(output).contains("++ pwd"); + } + + @ParameterizedTest(name = "{0} {1}") + @MethodSource("parameters") + void launchWithDifferentJarFileEnv(String os, String version) throws Exception { + final String output = doTest(os, version, "jar/launch-with-jarfile.sh"); + assertThat(output).contains("app-another.jar"); + assertThat(output).doesNotContain("spring-boot-launch-script-tests.jar"); + } + + @ParameterizedTest(name = "{0} {1}") + @MethodSource("parameters") + void launchWithDifferentAppName(String os, String version) throws Exception { + final String output = doTest(os, version, "jar/launch-with-app-name.sh"); + assertThat(output).contains("All tests are passed."); + } + + @ParameterizedTest(name = "{0} {1}") + @MethodSource("parameters") + void launchInInitdDir(String os, String version) throws Exception { + final String output = doTest(os, version, "jar/launch-in-init.d-dir.sh"); + assertThat(output).contains("Usage: ./some_app {start|stop|force-stop|restart|force-reload|status|run}"); + } + +} diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIT.java b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIT.java index a4014dcb470..82c209b92f3 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIT.java +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIT.java @@ -16,25 +16,15 @@ package org.springframework.boot.launchscript; -import java.io.File; -import java.time.Duration; -import java.util.ArrayList; -import java.util.List; import java.util.regex.Pattern; -import org.assertj.core.api.Condition; import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.output.ToStringConsumer; -import org.testcontainers.images.builder.ImageFromDockerfile; -import org.testcontainers.utility.MountableFile; import org.springframework.boot.ansi.AnsiColor; import static org.assertj.core.api.Assertions.assertThat; -import static org.hamcrest.Matchers.containsString; /** * Integration tests for Spring Boot's launch script on OSs that use SysVinit. @@ -42,14 +32,12 @@ import static org.hamcrest.Matchers.containsString; * @author Andy Wilkinson * @author Ali Shahbour */ -class SysVinitLaunchScriptIT { - - private static final char ESC = 27; +class SysVinitLaunchScriptIT extends AbstractLaunchScriptIT { @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void statusWhenStopped(String os, String version) throws Exception { - String output = doTest(os, version, "status-when-stopped.sh"); + String output = doTest(os, version, "init.d/status-when-stopped.sh"); assertThat(output).contains("Status: 3"); assertThat(output).has(coloredString(AnsiColor.RED, "Not running")); } @@ -57,7 +45,7 @@ class SysVinitLaunchScriptIT { @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void statusWhenStarted(String os, String version) throws Exception { - String output = doTest(os, version, "status-when-started.sh"); + String output = doTest(os, version, "init.d/status-when-started.sh"); assertThat(output).contains("Status: 0"); assertThat(output).has(coloredString(AnsiColor.GREEN, "Started [" + extractPid(output) + "]")); } @@ -65,7 +53,7 @@ class SysVinitLaunchScriptIT { @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void statusWhenKilled(String os, String version) throws Exception { - String output = doTest(os, version, "status-when-killed.sh"); + String output = doTest(os, version, "init.d/status-when-killed.sh"); assertThat(output).contains("Status: 1"); assertThat(output) .has(coloredString(AnsiColor.RED, "Not running (process " + extractPid(output) + " not found)")); @@ -74,7 +62,7 @@ class SysVinitLaunchScriptIT { @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void stopWhenStopped(String os, String version) throws Exception { - String output = doTest(os, version, "stop-when-stopped.sh"); + String output = doTest(os, version, "init.d/stop-when-stopped.sh"); assertThat(output).contains("Status: 0"); assertThat(output).has(coloredString(AnsiColor.YELLOW, "Not running (pidfile not found)")); } @@ -82,7 +70,7 @@ class SysVinitLaunchScriptIT { @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void forceStopWhenStopped(String os, String version) throws Exception { - String output = doTest(os, version, "force-stop-when-stopped.sh"); + String output = doTest(os, version, "init.d/force-stop-when-stopped.sh"); assertThat(output).contains("Status: 0"); assertThat(output).has(coloredString(AnsiColor.YELLOW, "Not running (pidfile not found)")); } @@ -90,7 +78,7 @@ class SysVinitLaunchScriptIT { @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void startWhenStarted(String os, String version) throws Exception { - String output = doTest(os, version, "start-when-started.sh"); + String output = doTest(os, version, "init.d/start-when-started.sh"); assertThat(output).contains("Status: 0"); assertThat(output).has(coloredString(AnsiColor.YELLOW, "Already running [" + extractPid(output) + "]")); } @@ -98,7 +86,7 @@ class SysVinitLaunchScriptIT { @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void restartWhenStopped(String os, String version) throws Exception { - String output = doTest(os, version, "restart-when-stopped.sh"); + String output = doTest(os, version, "init.d/restart-when-stopped.sh"); assertThat(output).contains("Status: 0"); assertThat(output).has(coloredString(AnsiColor.YELLOW, "Not running (pidfile not found)")); assertThat(output).has(coloredString(AnsiColor.GREEN, "Started [" + extractPid(output) + "]")); @@ -107,7 +95,7 @@ class SysVinitLaunchScriptIT { @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void restartWhenStarted(String os, String version) throws Exception { - String output = doTest(os, version, "restart-when-started.sh"); + String output = doTest(os, version, "init.d/restart-when-started.sh"); assertThat(output).contains("Status: 0"); assertThat(output).has(coloredString(AnsiColor.GREEN, "Started [" + extract("PID1", output) + "]")); assertThat(output).has(coloredString(AnsiColor.GREEN, "Stopped [" + extract("PID1", output) + "]")); @@ -117,7 +105,7 @@ class SysVinitLaunchScriptIT { @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void startWhenStopped(String os, String version) throws Exception { - String output = doTest(os, version, "start-when-stopped.sh"); + String output = doTest(os, version, "init.d/start-when-stopped.sh"); assertThat(output).contains("Status: 0"); assertThat(output).has(coloredString(AnsiColor.GREEN, "Started [" + extractPid(output) + "]")); } @@ -125,14 +113,14 @@ class SysVinitLaunchScriptIT { @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void basicLaunch(String os, String version) throws Exception { - String output = doTest(os, version, "basic-launch.sh"); + String output = doTest(os, version, "init.d/basic-launch.sh"); assertThat(output).doesNotContain("PID_FOLDER"); } @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void launchWithMissingLogFolderGeneratesAWarning(String os, String version) throws Exception { - String output = doTest(os, version, "launch-with-missing-log-folder.sh"); + String output = doTest(os, version, "init.d/launch-with-missing-log-folder.sh"); assertThat(output).has( coloredString(AnsiColor.YELLOW, "LOG_FOLDER /does/not/exist does not exist. Falling back to /tmp")); } @@ -140,7 +128,7 @@ class SysVinitLaunchScriptIT { @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void launchWithMissingPidFolderGeneratesAWarning(String os, String version) throws Exception { - String output = doTest(os, version, "launch-with-missing-pid-folder.sh"); + String output = doTest(os, version, "init.d/launch-with-missing-pid-folder.sh"); assertThat(output).has( coloredString(AnsiColor.YELLOW, "PID_FOLDER /does/not/exist does not exist. Falling back to /tmp")); } @@ -148,43 +136,43 @@ class SysVinitLaunchScriptIT { @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void launchWithSingleCommandLineArgument(String os, String version) throws Exception { - doLaunch(os, version, "launch-with-single-command-line-argument.sh"); + doLaunch(os, version, "init.d/launch-with-single-command-line-argument.sh"); } @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void launchWithMultipleCommandLineArguments(String os, String version) throws Exception { - doLaunch(os, version, "launch-with-multiple-command-line-arguments.sh"); + doLaunch(os, version, "init.d/launch-with-multiple-command-line-arguments.sh"); } @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void launchWithSingleRunArg(String os, String version) throws Exception { - doLaunch(os, version, "launch-with-single-run-arg.sh"); + doLaunch(os, version, "init.d/launch-with-single-run-arg.sh"); } @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void launchWithMultipleRunArgs(String os, String version) throws Exception { - doLaunch(os, version, "launch-with-multiple-run-args.sh"); + doLaunch(os, version, "init.d/launch-with-multiple-run-args.sh"); } @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void launchWithSingleJavaOpt(String os, String version) throws Exception { - doLaunch(os, version, "launch-with-single-java-opt.sh"); + doLaunch(os, version, "init.d/launch-with-single-java-opt.sh"); } @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void launchWithDoubleLinkSingleJavaOpt(String os, String version) throws Exception { - doLaunch(os, version, "launch-with-double-link-single-java-opt.sh"); + doLaunch(os, version, "init.d/launch-with-double-link-single-java-opt.sh"); } @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void launchWithMultipleJavaOpts(String os, String version) throws Exception { - doLaunch(os, version, "launch-with-multiple-java-opts.sh"); + doLaunch(os, version, "init.d/launch-with-multiple-java-opts.sh"); } @ParameterizedTest(name = "{0} {1}") @@ -192,13 +180,13 @@ class SysVinitLaunchScriptIT { void launchWithUseOfStartStopDaemonDisabled(String os, String version) throws Exception { // CentOS doesn't have start-stop-daemon Assumptions.assumeFalse(os.equals("CentOS")); - doLaunch(os, version, "launch-with-use-of-start-stop-daemon-disabled.sh"); + doLaunch(os, version, "init.d/launch-with-use-of-start-stop-daemon-disabled.sh"); } @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void launchWithRelativePidFolder(String os, String version) throws Exception { - String output = doTest(os, version, "launch-with-relative-pid-folder.sh"); + String output = doTest(os, version, "init.d/launch-with-relative-pid-folder.sh"); assertThat(output).has(coloredString(AnsiColor.GREEN, "Started [" + extractPid(output) + "]")); assertThat(output).has(coloredString(AnsiColor.GREEN, "Running [" + extractPid(output) + "]")); assertThat(output).has(coloredString(AnsiColor.GREEN, "Stopped [" + extractPid(output) + "]")); @@ -207,56 +195,56 @@ class SysVinitLaunchScriptIT { @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void pidFolderOwnership(String os, String version) throws Exception { - String output = doTest(os, version, "pid-folder-ownership.sh"); + String output = doTest(os, version, "init.d/pid-folder-ownership.sh"); assertThat(output).contains("phil root"); } @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void pidFileOwnership(String os, String version) throws Exception { - String output = doTest(os, version, "pid-file-ownership.sh"); + String output = doTest(os, version, "init.d/pid-file-ownership.sh"); assertThat(output).contains("phil root"); } @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void logFileOwnership(String os, String version) throws Exception { - String output = doTest(os, version, "log-file-ownership.sh"); + String output = doTest(os, version, "init.d/log-file-ownership.sh"); assertThat(output).contains("phil root"); } @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void logFileOwnershipIsChangedWhenCreated(String os, String version) throws Exception { - String output = doTest(os, version, "log-file-ownership-is-changed-when-created.sh"); + String output = doTest(os, version, "init.d/log-file-ownership-is-changed-when-created.sh"); assertThat(output).contains("andy root"); } @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void logFileOwnershipIsUnchangedWhenExists(String os, String version) throws Exception { - String output = doTest(os, version, "log-file-ownership-is-unchanged-when-exists.sh"); + String output = doTest(os, version, "init.d/log-file-ownership-is-unchanged-when-exists.sh"); assertThat(output).contains("root root"); } @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void launchWithRelativeLogFolder(String os, String version) throws Exception { - String output = doTest(os, version, "launch-with-relative-log-folder.sh"); + String output = doTest(os, version, "init.d/launch-with-relative-log-folder.sh"); assertThat(output).contains("Log written"); } @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void launchWithRunAsUser(String os, String version) throws Exception { - String output = doTest(os, version, "launch-with-run-as-user.sh"); + String output = doTest(os, version, "init.d/launch-with-run-as-user.sh"); assertThat(output).contains("wagner root"); } @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void whenRunAsUserDoesNotExistLaunchFailsWithInvalidArgument(String os, String version) throws Exception { - String output = doTest(os, version, "launch-with-run-as-invalid-user.sh"); + String output = doTest(os, version, "init.d/launch-with-run-as-invalid-user.sh"); assertThat(output).contains("Status: 2"); assertThat(output).has(coloredString(AnsiColor.RED, "Cannot run as 'johndoe': no such user")); } @@ -264,7 +252,7 @@ class SysVinitLaunchScriptIT { @ParameterizedTest(name = "{0} {1}") @MethodSource("parameters") void whenJarOwnerAndRunAsUserAreBothSpecifiedRunAsUserTakesPrecedence(String os, String version) throws Exception { - String output = doTest(os, version, "launch-with-run-as-user-preferred-to-jar-owner.sh"); + String output = doTest(os, version, "init.d/launch-with-run-as-user-preferred-to-jar-owner.sh"); assertThat(output).contains("wagner root"); } @@ -272,49 +260,11 @@ class SysVinitLaunchScriptIT { @MethodSource("parameters") void whenLaunchedUsingNonRootUserWithRunAsUserSpecifiedLaunchFailsWithInsufficientPrivilege(String os, String version) throws Exception { - String output = doTest(os, version, "launch-with-run-as-user-root-required.sh"); + String output = doTest(os, version, "init.d/launch-with-run-as-user-root-required.sh"); assertThat(output).contains("Status: 4"); assertThat(output).has(coloredString(AnsiColor.RED, "Cannot run as 'wagner': current user is not root")); } - static List parameters() { - List parameters = new ArrayList<>(); - for (File os : new File("src/test/resources/conf").listFiles()) { - for (File version : os.listFiles()) { - parameters.add(new Object[] { os.getName(), version.getName() }); - } - } - return parameters; - } - - private void doLaunch(String os, String version, String script) throws Exception { - assertThat(doTest(os, version, script)).contains("Launched"); - } - - private String doTest(String os, String version, String script) throws Exception { - ToStringConsumer consumer = new ToStringConsumer().withRemoveAnsiCodes(false); - try (LaunchScriptTestContainer container = new LaunchScriptTestContainer(os, version, script)) { - container.withLogConsumer(consumer); - container.start(); - while (container.isRunning()) { - Thread.sleep(100); - } - } - return consumer.toUtf8String(); - } - - private Condition coloredString(AnsiColor color, String string) { - String colorString = ESC + "[0;" + color + "m" + string + ESC + "[0m"; - return new Condition() { - - @Override - public boolean matches(String value) { - return containsString(colorString).matches(value); - } - - }; - } - private String extractPid(String output) { return extract("PID", output); } @@ -328,32 +278,4 @@ class SysVinitLaunchScriptIT { throw new IllegalArgumentException("Failed to extract " + label + " from output: " + output); } - private static final class LaunchScriptTestContainer extends GenericContainer { - - private LaunchScriptTestContainer(String os, String version, String testScript) { - super(new ImageFromDockerfile("spring-boot-launch-script/" + os.toLowerCase() + "-" + version) - .withFileFromFile("Dockerfile", - new File("src/test/resources/conf/" + os + "/" + version + "/Dockerfile")) - .withFileFromFile("spring-boot-launch-script-tests.jar", findApplication()) - .withFileFromFile("test-functions.sh", new File("src/test/resources/scripts/test-functions.sh"))); - withCopyFileToContainer(MountableFile.forHostPath("src/test/resources/scripts/" + testScript), - "/" + testScript); - withCommand("/bin/bash", "-c", "chmod +x " + testScript + " && ./" + testScript); - withStartupTimeout(Duration.ofMinutes(10)); - } - - private static File findApplication() { - File targetDir = new File("target"); - for (File file : targetDir.listFiles()) { - if (file.getName().startsWith("spring-boot-launch-script-tests") && file.getName().endsWith(".jar") - && !file.getName().endsWith("-sources.jar")) { - return file; - } - } - throw new IllegalStateException( - "Could not find test application in target directory. Have you built it (mvn package)?"); - } - - } - } diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/CentOS/6.9-a23bced6/Dockerfile b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/CentOS/6.9-a23bced6/Dockerfile index 70513764d0f..8a93884e95d 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/CentOS/6.9-a23bced6/Dockerfile +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/CentOS/6.9-a23bced6/Dockerfile @@ -8,4 +8,6 @@ RUN yum install -y wget && \ yum --nogpg localinstall -y jdk.rpm && \ rm -f jdk.rpm ADD spring-boot-launch-script-tests.jar /spring-boot-launch-script-tests.jar -ADD test-functions.sh /test-functions.sh \ No newline at end of file +ADD test-functions.sh /test-functions.sh +ADD init.d/test-functions.sh /init.d/test-functions.sh +ADD jar/test-functions.sh /jar/test-functions.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/Ubuntu/trusty-20160914/Dockerfile b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/Ubuntu/trusty-20160914/Dockerfile index cf95d7cacfa..f33c6f30f6f 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/Ubuntu/trusty-20160914/Dockerfile +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/Ubuntu/trusty-20160914/Dockerfile @@ -7,4 +7,6 @@ RUN apt-get update && \ ENV JAVA_HOME /opt/openjdk ENV PATH $JAVA_HOME/bin:$PATH ADD spring-boot-launch-script-tests.jar /spring-boot-launch-script-tests.jar -ADD test-functions.sh /test-functions.sh \ No newline at end of file +ADD test-functions.sh /test-functions.sh +ADD init.d/test-functions.sh /init.d/test-functions.sh +ADD jar/test-functions.sh /jar/test-functions.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/Ubuntu/xenial-20160914/Dockerfile b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/Ubuntu/xenial-20160914/Dockerfile index d1a37468b5a..167d142a561 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/Ubuntu/xenial-20160914/Dockerfile +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/conf/Ubuntu/xenial-20160914/Dockerfile @@ -7,4 +7,6 @@ RUN apt-get update && \ ENV JAVA_HOME /opt/openjdk ENV PATH $JAVA_HOME/bin:$PATH ADD spring-boot-launch-script-tests.jar /spring-boot-launch-script-tests.jar -ADD test-functions.sh /test-functions.sh \ No newline at end of file +ADD test-functions.sh /test-functions.sh +ADD init.d/test-functions.sh /init.d/test-functions.sh +ADD jar/test-functions.sh /jar/test-functions.sh diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/basic-launch.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/basic-launch.sh similarity index 74% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/basic-launch.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/basic-launch.sh index 44f44a856c6..2a0501d43c3 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/basic-launch.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/basic-launch.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service start_service await_app diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/force-stop-when-stopped.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/force-stop-when-stopped.sh similarity index 70% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/force-stop-when-stopped.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/force-stop-when-stopped.sh index 465b5553296..9a90ebd55eb 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/force-stop-when-stopped.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/force-stop-when-stopped.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service force_stop_service echo "Status: $?" diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-double-link-single-java-opt.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-double-link-single-java-opt.sh similarity index 85% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-double-link-single-java-opt.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-double-link-single-java-opt.sh index 6895c0d0613..13ee6cbc012 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-double-link-single-java-opt.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-double-link-single-java-opt.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_double_link_service echo 'JAVA_OPTS=-Dserver.port=8081' > /test-service/spring-boot-app.conf start_service diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-missing-log-folder.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-missing-log-folder.sh similarity index 83% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-missing-log-folder.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-missing-log-folder.sh index 1f3aed38443..25962027a6c 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-missing-log-folder.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-missing-log-folder.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service echo 'LOG_FOLDER=/does/not/exist' > /test-service/spring-boot-app.conf start_service diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-missing-pid-folder.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-missing-pid-folder.sh similarity index 83% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-missing-pid-folder.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-missing-pid-folder.sh index 83430bea62f..5ee6d5d2b5f 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-missing-pid-folder.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-missing-pid-folder.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service echo 'PID_FOLDER=/does/not/exist' > /test-service/spring-boot-app.conf start_service diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-multiple-command-line-arguments.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-multiple-command-line-arguments.sh similarity index 84% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-multiple-command-line-arguments.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-multiple-command-line-arguments.sh index 7503458301f..97011d797f3 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-multiple-command-line-arguments.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-multiple-command-line-arguments.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service start_service --server.port=8081 --server.servlet.context-path=/test await_app http://127.0.0.1:8081/test/ diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-multiple-java-opts.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-multiple-java-opts.sh similarity index 87% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-multiple-java-opts.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-multiple-java-opts.sh index 387ad47dad0..9cfc9a0ccb8 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-multiple-java-opts.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-multiple-java-opts.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service echo 'JAVA_OPTS="-Dserver.port=8081 -Dserver.servlet.context-path=/test"' > /test-service/spring-boot-app.conf start_service diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-multiple-run-args.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-multiple-run-args.sh similarity index 87% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-multiple-run-args.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-multiple-run-args.sh index 76b4c476795..c9942a9953e 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-multiple-run-args.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-multiple-run-args.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service echo 'RUN_ARGS="--server.port=8081 --server.servlet.context-path=/test"' > /test-service/spring-boot-app.conf start_service diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-relative-log-folder.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-relative-log-folder.sh similarity index 87% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-relative-log-folder.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-relative-log-folder.sh index da1f7b11c10..44567b41c15 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-relative-log-folder.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-relative-log-folder.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh mkdir ./pid install_service echo 'LOG_FOLDER=log' > /test-service/spring-boot-app.conf diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-relative-pid-folder.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-relative-pid-folder.sh similarity index 89% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-relative-pid-folder.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-relative-pid-folder.sh index a46d67b8a2a..d129bc2bf7b 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-relative-pid-folder.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-relative-pid-folder.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service mkdir /test-service/pid echo 'PID_FOLDER=pid' > /test-service/spring-boot-app.conf diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-invalid-user.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-run-as-invalid-user.sh similarity index 80% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-invalid-user.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-run-as-invalid-user.sh index f6384046dcd..0e9cda7990e 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-invalid-user.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-run-as-invalid-user.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service echo 'RUN_AS_USER=johndoe' > /test-service/spring-boot-app.conf diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-user-preferred-to-jar-owner.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-run-as-user-preferred-to-jar-owner.sh similarity index 87% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-user-preferred-to-jar-owner.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-run-as-user-preferred-to-jar-owner.sh index 730b8197bb9..09beabddda4 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-user-preferred-to-jar-owner.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-run-as-user-preferred-to-jar-owner.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service useradd wagner diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-user-root-required.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-run-as-user-root-required.sh similarity index 88% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-user-root-required.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-run-as-user-root-required.sh index 3cd83374e22..82ecfa697e9 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-user-root-required.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-run-as-user-root-required.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service useradd wagner diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-user.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-run-as-user.sh similarity index 84% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-user.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-run-as-user.sh index 6be8eee0f0c..23d95545d58 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-run-as-user.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-run-as-user.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service useradd wagner diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-single-command-line-argument.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-single-command-line-argument.sh similarity index 80% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-single-command-line-argument.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-single-command-line-argument.sh index 2adb76da3fc..b3270056308 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-single-command-line-argument.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-single-command-line-argument.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service start_service --server.port=8081 await_app http://127.0.0.1:8081/ diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-single-java-opt.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-single-java-opt.sh similarity index 85% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-single-java-opt.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-single-java-opt.sh index a0445b8224b..16940da02de 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-single-java-opt.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-single-java-opt.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service echo 'JAVA_OPTS=-Dserver.port=8081' > /test-service/spring-boot-app.conf start_service diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-single-run-arg.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-single-run-arg.sh similarity index 85% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-single-run-arg.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-single-run-arg.sh index 0d61c5d1544..2b8297c85c6 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-single-run-arg.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-single-run-arg.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service echo 'RUN_ARGS=--server.port=8081' > /test-service/spring-boot-app.conf start_service diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-use-of-start-stop-daemon-disabled.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-use-of-start-stop-daemon-disabled.sh similarity index 85% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-use-of-start-stop-daemon-disabled.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-use-of-start-stop-daemon-disabled.sh index 2f2bd3dfadc..e4d7f7c18ae 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/launch-with-use-of-start-stop-daemon-disabled.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/launch-with-use-of-start-stop-daemon-disabled.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh chmod -x $(type -p start-stop-daemon) install_service echo 'USE_START_STOP_DAEMON=false' > /test-service/spring-boot-app.conf diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/log-file-ownership-is-changed-when-created.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/log-file-ownership-is-changed-when-created.sh similarity index 88% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/log-file-ownership-is-changed-when-created.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/log-file-ownership-is-changed-when-created.sh index 5cc9eb46fc6..41ce4a61870 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/log-file-ownership-is-changed-when-created.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/log-file-ownership-is-changed-when-created.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service echo 'LOG_FOLDER=log' > /test-service/spring-boot-app.conf mkdir -p /test-service/log diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/log-file-ownership-is-unchanged-when-exists.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/log-file-ownership-is-unchanged-when-exists.sh similarity index 91% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/log-file-ownership-is-unchanged-when-exists.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/log-file-ownership-is-unchanged-when-exists.sh index 685e1e6100f..e80d725cb18 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/log-file-ownership-is-unchanged-when-exists.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/log-file-ownership-is-unchanged-when-exists.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service echo 'LOG_FOLDER=log' > /test-service/spring-boot-app.conf mkdir -p /test-service/log diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/log-file-ownership.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/log-file-ownership.sh similarity index 90% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/log-file-ownership.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/log-file-ownership.sh index 919c33e3809..4a127e10a56 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/log-file-ownership.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/log-file-ownership.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service chmod o+w /var/log diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/pid-file-ownership.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/pid-file-ownership.sh similarity index 89% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/pid-file-ownership.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/pid-file-ownership.sh index 891bb935fa4..ec201d076b0 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/pid-file-ownership.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/pid-file-ownership.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service useradd phil diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/pid-folder-ownership.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/pid-folder-ownership.sh similarity index 88% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/pid-folder-ownership.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/pid-folder-ownership.sh index c6b7d19c093..eadc51f779b 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/pid-folder-ownership.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/pid-folder-ownership.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service chmod o+w /var/run diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/restart-when-started.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/restart-when-started.sh similarity index 86% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/restart-when-started.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/restart-when-started.sh index 017b4c18e84..becd1041a1c 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/restart-when-started.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/restart-when-started.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service start_service echo "PID1: $(cat /var/run/spring-boot-app/spring-boot-app.pid)" diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/restart-when-stopped.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/restart-when-stopped.sh similarity index 80% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/restart-when-stopped.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/restart-when-stopped.sh index 95fd91c3b44..9cbc8f5cfa1 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/restart-when-stopped.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/restart-when-stopped.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service restart_service echo "Status: $?" diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/start-when-started.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/start-when-started.sh similarity index 81% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/start-when-started.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/start-when-started.sh index fd9e4f2f6b8..e2366afffe7 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/start-when-started.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/start-when-started.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service start_service echo "PID: $(cat /var/run/spring-boot-app/spring-boot-app.pid)" diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/start-when-stopped.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/start-when-stopped.sh similarity index 80% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/start-when-stopped.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/start-when-stopped.sh index 427fff4406a..41467953514 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/start-when-stopped.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/start-when-stopped.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service start_service echo "Status: $?" diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/status-when-killed.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/status-when-killed.sh similarity index 83% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/status-when-killed.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/status-when-killed.sh index 4a9c5f6fe12..36b4ae77d63 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/status-when-killed.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/status-when-killed.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service start_service pid=$(cat /var/run/spring-boot-app/spring-boot-app.pid) diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/status-when-started.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/status-when-started.sh similarity index 81% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/status-when-started.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/status-when-started.sh index 89c1ccc1fb5..f378483d237 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/status-when-started.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/status-when-started.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service start_service status_service diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/status-when-stopped.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/status-when-stopped.sh similarity index 69% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/status-when-stopped.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/status-when-stopped.sh index 24ca2253444..0cf73566422 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/status-when-stopped.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/status-when-stopped.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service status_service echo "Status: $?" diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/stop-when-stopped.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/stop-when-stopped.sh similarity index 68% rename from spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/stop-when-stopped.sh rename to spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/stop-when-stopped.sh index b74faddbafd..90437663eb2 100755 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/stop-when-stopped.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/stop-when-stopped.sh @@ -1,4 +1,5 @@ source ./test-functions.sh +source ./init.d/test-functions.sh install_service stop_service echo "Status: $?" diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/test-functions.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/test-functions.sh new file mode 100644 index 00000000000..122bbf3512b --- /dev/null +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/init.d/test-functions.sh @@ -0,0 +1,36 @@ +source ../test-functions.sh + +install_service() { + mkdir /test-service + mv /spring-boot-launch-script-tests.jar /test-service/spring-boot-app.jar + chmod +x /test-service/spring-boot-app.jar + ln -s /test-service/spring-boot-app.jar /etc/init.d/spring-boot-app +} + +install_double_link_service() { + mkdir /test-service + mv /spring-boot-launch-script-tests.jar /test-service/ + chmod +x /test-service/spring-boot-launch-script-tests.jar + ln -s /test-service/spring-boot-launch-script-tests.jar /test-service/spring-boot-app.jar + ln -s /test-service/spring-boot-app.jar /etc/init.d/spring-boot-app +} + +start_service() { + service spring-boot-app start $@ +} + +restart_service() { + service spring-boot-app restart +} + +status_service() { + service spring-boot-app status +} + +stop_service() { + service spring-boot-app stop +} + +force_stop_service() { + service spring-boot-app force-stop +} \ No newline at end of file diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/basic-launch.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/basic-launch.sh new file mode 100644 index 00000000000..d49ce450d2d --- /dev/null +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/basic-launch.sh @@ -0,0 +1,4 @@ +source ./test-functions.sh +source ./jar/test-functions.sh +launch_jar & await_app +curl -s http://127.0.0.1:8080/ diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/launch-in-init.d-dir.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/launch-in-init.d-dir.sh new file mode 100644 index 00000000000..9a4d7a231e0 --- /dev/null +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/launch-in-init.d-dir.sh @@ -0,0 +1,5 @@ +source ./test-functions.sh +source ./jar/test-functions.sh +cd "init.d" || exit 1 +ln -s ../spring-boot-launch-script-tests.jar some_app +./some_app diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/launch-with-app-name.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/launch-with-app-name.sh new file mode 100644 index 00000000000..d0c3d849c99 --- /dev/null +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/launch-with-app-name.sh @@ -0,0 +1,27 @@ +source ./test-functions.sh +source ./jar/test-functions.sh +export APP_NAME="my-new-app" +export MODE=service +./spring-boot-launch-script-tests.jar start +TEST_LOG_FILE="/var/log/$APP_NAME.log" +if [[ (! (-e "$TEST_LOG_FILE")) || (! (-f "$TEST_LOG_FILE")) ]]; then + echo Log file "$TEST_LOG_FILE" doesn\'t exists. + exit 2 +else + echo Test for a log file is passed. +fi +TEST_PID_FOLDER="/var/run/$APP_NAME" +if [[ (! (-e "$TEST_PID_FOLDER")) || (! (-d "$TEST_PID_FOLDER")) ]]; then + echo PID folder "$TEST_PID_FOLDER" doesn\'t exists. + exit 2 +else + echo Test for a PID folder is passed. +fi +TEST_PID_FILE="$TEST_PID_FOLDER/$APP_NAME.pid" +if [[ (! (-e "$TEST_PID_FILE")) || (! (-f "$TEST_PID_FILE"))]]; then + echo PID file "$TEST_PID_FILE" doesn\'t exists. + exit 2 +else + echo Test for a PID file is passed. +fi +echo All tests are passed. diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/launch-with-debug.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/launch-with-debug.sh new file mode 100644 index 00000000000..c4fc45d04cd --- /dev/null +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/launch-with-debug.sh @@ -0,0 +1,5 @@ +export DEBUG=true +source ./test-functions.sh +source ./jar/test-functions.sh +launch_jar & await_app +curl -s http://127.0.0.1:8080/ diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/launch-with-jarfile.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/launch-with-jarfile.sh new file mode 100644 index 00000000000..105c0a44864 --- /dev/null +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/launch-with-jarfile.sh @@ -0,0 +1,6 @@ +source ./test-functions.sh +source ./jar/test-functions.sh +cp spring-boot-launch-script-tests.jar app-another.jar +export JARFILE=app-another.jar +launch_jar & await_app +curl -s http://127.0.0.1:8080/ diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/test-functions.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/test-functions.sh new file mode 100644 index 00000000000..a10049ef434 --- /dev/null +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/jar/test-functions.sh @@ -0,0 +1,3 @@ +launch_jar() { + ./spring-boot-launch-script-tests.jar +} diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/test-functions.sh b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/test-functions.sh index 903713b888e..c9fc2efa198 100644 --- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/test-functions.sh +++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/scripts/test-functions.sh @@ -1,38 +1,3 @@ -install_service() { - mkdir /test-service - mv /spring-boot-launch-script-tests.jar /test-service/spring-boot-app.jar - chmod +x /test-service/spring-boot-app.jar - ln -s /test-service/spring-boot-app.jar /etc/init.d/spring-boot-app -} - -install_double_link_service() { - mkdir /test-service - mv /spring-boot-launch-script-tests.jar /test-service/ - chmod +x /test-service/spring-boot-launch-script-tests.jar - ln -s /test-service/spring-boot-launch-script-tests.jar /test-service/spring-boot-app.jar - ln -s /test-service/spring-boot-app.jar /etc/init.d/spring-boot-app -} - -start_service() { - service spring-boot-app start $@ -} - -restart_service() { - service spring-boot-app restart -} - -status_service() { - service spring-boot-app status -} - -stop_service() { - service spring-boot-app stop -} - -force_stop_service() { - service spring-boot-app force-stop -} - await_app() { if [ -z $1 ] then