From 82dc2dffbd19ee780fc2983c8b69a7e9f860e41f Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 11 Feb 2021 10:20:30 +0000 Subject: [PATCH] Select specific CLI distribution in CLI's integration tests Previously, CommandLineInvoker would use the first -bin.zip file found in build/distributions. If this directory contained multiple zips from building different versions of Spring Boot, this could result in the tests being run against the wrong version of the CLI. This commit updates CommandLineInvoker look for a specific zip in build/distributions, using the version from gradle.properties to identify it. Closes gh-25179 --- .../infrastructure/CommandLineInvoker.java | 6 +-- .../boot/cli/infrastructure/Versions.java | 44 +++++++++++++++++++ 2 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/infrastructure/Versions.java diff --git a/spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/infrastructure/CommandLineInvoker.java b/spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/infrastructure/CommandLineInvoker.java index c1a2bffa928e..f6b56eb015b3 100644 --- a/spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/infrastructure/CommandLineInvoker.java +++ b/spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/infrastructure/CommandLineInvoker.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2020 the original author or authors. + * Copyright 2012-2021 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. @@ -83,8 +83,8 @@ private Process runCliProcess(String... args) throws IOException { private File findLaunchScript() throws IOException { File unpacked = new File(this.temp, "unpacked-cli"); if (!unpacked.isDirectory()) { - File zip = new File(new BuildOutput(getClass()).getRootLocation(), "distributions") - .listFiles((pathname) -> pathname.getName().endsWith("-bin.zip"))[0]; + File zip = new File(new BuildOutput(getClass()).getRootLocation(), + "distributions/spring-boot-cli-" + Versions.getBootVersion() + "-bin.zip"); try (ZipInputStream input = new ZipInputStream(new FileInputStream(zip))) { ZipEntry entry; while ((entry = input.getNextEntry()) != null) { diff --git a/spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/infrastructure/Versions.java b/spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/infrastructure/Versions.java new file mode 100644 index 000000000000..55669d72c306 --- /dev/null +++ b/spring-boot-project/spring-boot-cli/src/intTest/java/org/springframework/boot/cli/infrastructure/Versions.java @@ -0,0 +1,44 @@ +/* + * Copyright 2012-2021 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.cli.infrastructure; + +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Properties; + +/** + * Provides access to the current Boot version by referring to {@code gradle.properties}. + * + * @author Andy Wilkinson + */ +final class Versions { + + private Versions() { + } + + static String getBootVersion() { + Properties gradleProperties = new Properties(); + try (FileInputStream input = new FileInputStream("../../gradle.properties")) { + gradleProperties.load(input); + return gradleProperties.getProperty("version"); + } + catch (IOException ex) { + throw new RuntimeException(ex); + } + } + +}