From e946ef1e792455927089c076f9337e20ff301406 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Fri, 17 Jan 2020 16:36:55 -0500 Subject: [PATCH 1/4] Adds boot 2.3 compatiblity --- .../SpringBootVersionVerifier.java | 25 +++++++++++++++++++ .../SpringBootDependencyTests.java | 2 +- spring-cloud-loadbalancer/pom.xml | 4 +++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/spring-cloud-commons/src/main/java/org/springframework/cloud/configuration/SpringBootVersionVerifier.java b/spring-cloud-commons/src/main/java/org/springframework/cloud/configuration/SpringBootVersionVerifier.java index 69f64a12..861b2540 100644 --- a/spring-cloud-commons/src/main/java/org/springframework/cloud/configuration/SpringBootVersionVerifier.java +++ b/spring-cloud-commons/src/main/java/org/springframework/cloud/configuration/SpringBootVersionVerifier.java @@ -40,6 +40,7 @@ class SpringBootVersionVerifier implements CompatibilityVerifier { this.put("2.0", is2_0()); this.put("2.1", is2_1()); this.put("2.2", is2_2()); + this.put("2.3", is2_3()); } }; @@ -162,6 +163,30 @@ class SpringBootVersionVerifier implements CompatibilityVerifier { }; } + CompatibilityPredicate is2_3() { + return new CompatibilityPredicate() { + + @Override + public String toString() { + return "Predicate for Boot 2.3"; + } + + @Override + public boolean isCompatible() { + try { + // since 2.3 + Class.forName( + "org.springframework.boot.context.propertie.BoundConfigurationProperties"); + return true; + } + catch (ClassNotFoundException e) { + return false; + } + + } + }; + } + private String errorDescription() { String versionFromManifest = getVersionFromManifest(); if (StringUtils.hasText(versionFromManifest)) { diff --git a/spring-cloud-commons/src/test/java/org/springframework/cloud/configuration/SpringBootDependencyTests.java b/spring-cloud-commons/src/test/java/org/springframework/cloud/configuration/SpringBootDependencyTests.java index ecad2c70..dbcadab9 100644 --- a/spring-cloud-commons/src/test/java/org/springframework/cloud/configuration/SpringBootDependencyTests.java +++ b/spring-cloud-commons/src/test/java/org/springframework/cloud/configuration/SpringBootDependencyTests.java @@ -144,7 +144,7 @@ public class SpringBootDependencyTests { @Test public void should_match_against_current_manifest() { - List acceptedVersions = Collections.singletonList("2.2"); + List acceptedVersions = Collections.singletonList("2.3"); SpringBootVersionVerifier versionVerifier = new SpringBootVersionVerifier( acceptedVersions); versionVerifier.ACCEPTED_VERSIONS.clear(); diff --git a/spring-cloud-loadbalancer/pom.xml b/spring-cloud-loadbalancer/pom.xml index 1a7268d8..d30b32f0 100644 --- a/spring-cloud-loadbalancer/pom.xml +++ b/spring-cloud-loadbalancer/pom.xml @@ -22,6 +22,10 @@ org.springframework.cloud spring-cloud-context + + org.springframework.boot + spring-boot-starter-validation + org.springframework.boot spring-boot-starter-actuator From 41208021edf76e533b42ee85fb0cc2b31aa08243 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Wed, 18 Mar 2020 16:55:30 -0400 Subject: [PATCH 2/4] Bumps to build 2.2.4.BUILD-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4a6e1c5a..7230f1f9 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ org.springframework.cloud spring-cloud-build - 2.2.3.RELEASE + 2.2.4.BUILD-SNAPSHOT From d679add0555fdceba2eb6cb8d0516698dc06134e Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Wed, 18 Mar 2020 17:30:13 -0400 Subject: [PATCH 3/4] Updates compatible versions to 2.2.x and 2.3.x see https://github.com/spring-cloud/spring-cloud-build/issues/153 --- .../cloud/configuration/CompatibilityVerifierProperties.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud-commons/src/main/java/org/springframework/cloud/configuration/CompatibilityVerifierProperties.java b/spring-cloud-commons/src/main/java/org/springframework/cloud/configuration/CompatibilityVerifierProperties.java index b7930c52..def40fd7 100644 --- a/spring-cloud-commons/src/main/java/org/springframework/cloud/configuration/CompatibilityVerifierProperties.java +++ b/spring-cloud-commons/src/main/java/org/springframework/cloud/configuration/CompatibilityVerifierProperties.java @@ -16,7 +16,7 @@ package org.springframework.cloud.configuration; -import java.util.Collections; +import java.util.Arrays; import java.util.List; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -37,7 +37,7 @@ public class CompatibilityVerifierProperties { * the patch version if you don't want to specify a concrete value. Example: * {@code 3.4.x} */ - private List compatibleBootVersions = Collections.singletonList("2.1.x"); + private List compatibleBootVersions = Arrays.asList("2.2.x", "2.3.x"); public boolean isEnabled() { return this.enabled; From 7dd88a6e7fb885292f87252e9b07c6f3e003af17 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Wed, 18 Mar 2020 17:31:29 -0400 Subject: [PATCH 4/4] Verifies current boot version is in CompatibilityVerifierProperties. Also fixes support for wildcard 2.2.x beyond boot 2.1.x fixes gh-715 --- .../SpringBootVersionVerifier.java | 13 ++++++----- ...ibilityVerifierAutoConfigurationTests.java | 22 +++++++++++++++++++ .../SpringBootDependencyTests.java | 7 +++++- 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/spring-cloud-commons/src/main/java/org/springframework/cloud/configuration/SpringBootVersionVerifier.java b/spring-cloud-commons/src/main/java/org/springframework/cloud/configuration/SpringBootVersionVerifier.java index 861b2540..eb196561 100644 --- a/spring-cloud-commons/src/main/java/org/springframework/cloud/configuration/SpringBootVersionVerifier.java +++ b/spring-cloud-commons/src/main/java/org/springframework/cloud/configuration/SpringBootVersionVerifier.java @@ -87,7 +87,8 @@ class SpringBootVersionVerifier implements CompatibilityVerifier { if (log.isDebugEnabled()) { log.debug("Version found in Boot manifest [" + version + "]"); } - return StringUtils.hasText(version) && version.startsWith(s); + return StringUtils.hasText(version) + && version.startsWith(stripWildCardFromVersion(s)); } String getVersionFromManifest() { @@ -216,7 +217,7 @@ class SpringBootVersionVerifier implements CompatibilityVerifier { else { // 2.0, 2.1 CompatibilityPredicate predicate = this.ACCEPTED_VERSIONS - .get(acceptedVersionWithoutX(acceptedVersion)); + .get(stripWildCardFromVersion(acceptedVersion)); if (predicate != null && predicate.isCompatible()) { if (log.isDebugEnabled()) { log.debug("Predicate [" + predicate + "] was matched"); @@ -228,11 +229,11 @@ class SpringBootVersionVerifier implements CompatibilityVerifier { return false; } - private String acceptedVersionWithoutX(String acceptedVersion) { - if (acceptedVersion.endsWith(".x")) { - return acceptedVersion.substring(0, acceptedVersion.indexOf(".x")); + static String stripWildCardFromVersion(String version) { + if (version.endsWith(".x")) { + return version.substring(0, version.indexOf(".x")); } - return acceptedVersion; + return version; } } diff --git a/spring-cloud-commons/src/test/java/org/springframework/cloud/configuration/CompatibilityVerifierAutoConfigurationTests.java b/spring-cloud-commons/src/test/java/org/springframework/cloud/configuration/CompatibilityVerifierAutoConfigurationTests.java index ad3b110f..6789d262 100644 --- a/spring-cloud-commons/src/test/java/org/springframework/cloud/configuration/CompatibilityVerifierAutoConfigurationTests.java +++ b/spring-cloud-commons/src/test/java/org/springframework/cloud/configuration/CompatibilityVerifierAutoConfigurationTests.java @@ -20,13 +20,17 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringBootVersion; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.fail; import static org.assertj.core.api.BDDAssertions.then; +import static org.springframework.cloud.configuration.SpringBootVersionVerifier.stripWildCardFromVersion; /** * @author Marcin Grzejszczak @@ -38,11 +42,29 @@ public class CompatibilityVerifierAutoConfigurationTests { @Autowired MyCompatibilityVerifier myMismatchVerifier; + @Autowired + CompatibilityVerifierProperties verifierProperties; + @Test public void contextLoads() { then(this.myMismatchVerifier.called).isTrue(); } + @Test + public void verifierPropertiesContainsCurrentBootVersion() { + String version = SpringBootVersion.getVersion(); + assertThat(version).isNotBlank(); + + for (String compatibleVersion : verifierProperties.getCompatibleBootVersions()) { + if (version.startsWith(stripWildCardFromVersion(compatibleVersion))) { + // success we found the current boot version in our list of compatible + // versions. + return; + } + } + fail(version + " not found in " + verifierProperties.getCompatibleBootVersions()); + } + @Configuration(proxyBeanMethods = false) @EnableAutoConfiguration static class TestConfiguration { diff --git a/spring-cloud-commons/src/test/java/org/springframework/cloud/configuration/SpringBootDependencyTests.java b/spring-cloud-commons/src/test/java/org/springframework/cloud/configuration/SpringBootDependencyTests.java index dbcadab9..0127b8ec 100644 --- a/spring-cloud-commons/src/test/java/org/springframework/cloud/configuration/SpringBootDependencyTests.java +++ b/spring-cloud-commons/src/test/java/org/springframework/cloud/configuration/SpringBootDependencyTests.java @@ -144,7 +144,12 @@ public class SpringBootDependencyTests { @Test public void should_match_against_current_manifest() { - List acceptedVersions = Collections.singletonList("2.3"); + verifyCurrentVersionFromManifest("2.3"); + verifyCurrentVersionFromManifest("2.3.x"); + } + + private void verifyCurrentVersionFromManifest(String version) { + List acceptedVersions = Collections.singletonList(version); SpringBootVersionVerifier versionVerifier = new SpringBootVersionVerifier( acceptedVersions); versionVerifier.ACCEPTED_VERSIONS.clear();