Skip to content

Integrating Spring boot 3 property refactor into SBM #238

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 47 commits into from
Jul 19, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
692fb1d
wip
fabapp2 Jul 13, 2022
46a186a
wip
fabapp2 Jul 13, 2022
71f5e5f
Added integration test for SpringBoot migration 2.7 -> 3.0
ashakirin Jul 13, 2022
632c38e
Assert if version is of right number
sanagaraj-pivotal Jul 13, 2022
df43ab8
assert artifactId and groupID
sanagaraj-pivotal Jul 13, 2022
542aa5a
Failing test
sanagaraj-pivotal Jul 13, 2022
53a351f
Fixed micrometer package test
ashakirin Jul 13, 2022
17f9f26
Added SAML property update test
ashakirin Jul 13, 2022
a879380
passing test
sanagaraj-pivotal Jul 13, 2022
1fa3d75
Added ConstructorBinding test
ashakirin Jul 14, 2022
69ea54f
Fix erroneous description message
sanagaraj-pivotal Jul 14, 2022
fc28d23
passing test constructor binding
sanagaraj-pivotal Jul 14, 2022
707a462
Failing test
sanagaraj-pivotal Jul 14, 2022
1a6c33d
Fixed SAML properties test
ashakirin Jul 14, 2022
42a1fe0
Starting SpringBoot 3.0 migration property integration test
ashakirin Jul 14, 2022
a17ce0d
wip
fabapp2 Jul 13, 2022
2962293
wip
fabapp2 Jul 13, 2022
a10846e
Added integration test for SpringBoot migration 2.7 -> 3.0
ashakirin Jul 13, 2022
e0ee2f0
Assert if version is of right number
sanagaraj-pivotal Jul 13, 2022
d608502
assert artifactId and groupID
sanagaraj-pivotal Jul 13, 2022
4beb9d2
Failing test
sanagaraj-pivotal Jul 13, 2022
9855eb7
Fixed micrometer package test
ashakirin Jul 13, 2022
0c53d4a
Added SAML property update test
ashakirin Jul 13, 2022
465b2f1
passing test
sanagaraj-pivotal Jul 13, 2022
5b8f5d9
Added ConstructorBinding test
ashakirin Jul 14, 2022
b367fed
Fix erroneous description message
sanagaraj-pivotal Jul 14, 2022
6c882d0
passing test constructor binding
sanagaraj-pivotal Jul 14, 2022
dfc33e9
Failing test
sanagaraj-pivotal Jul 14, 2022
94ab443
Fixed SAML properties test
ashakirin Jul 14, 2022
370c007
Starting SpringBoot 3.0 migration property integration test
ashakirin Jul 14, 2022
2d324fa
Merge remote-tracking branch 'origin/intergating-boot-3-upgrade' into…
ashakirin Jul 14, 2022
6a4422c
Starting SpringBoot 3.0 migration property integration testStarting S…
ashakirin Jul 14, 2022
564b148
Fixes in SpringBoot 3.0 migration
ashakirin Jul 14, 2022
239c132
Added test for migrated properties
ashakirin Jul 15, 2022
ebc9d86
Failing test
sanagaraj-pivotal Jul 15, 2022
d9e165d
Meaningful description
sanagaraj-pivotal Jul 15, 2022
9d0c9b4
Failing test
sanagaraj-pivotal Jul 15, 2022
b575942
Added test for migrated properties
ashakirin Jul 15, 2022
f05d98b
Fixed test for migrated properties
ashakirin Jul 18, 2022
bbf88f3
Merge branch 'main' into intergating-boot-3-upgrade
sanagaraj-pivotal Jul 18, 2022
4c9bb18
RemoveConstructorBindingAnnotation has been deleted because it alread…
sanagaraj-pivotal Jul 19, 2022
27195ca
Removing Sping Rest bucks entirely
sanagaraj-pivotal Jul 19, 2022
0a1dc4d
Fixing test for saml properties
sanagaraj-pivotal Jul 19, 2022
fcccf1b
Fixing test for saml yaml
sanagaraj-pivotal Jul 19, 2022
2381155
Address review comment: remove refresh modal
sanagaraj-pivotal Jul 19, 2022
0cce794
Removing long list of rewrite recipes
sanagaraj-pivotal Jul 19, 2022
4ddc583
Merge branch 'main' into intergating-boot-3-upgrade
sanagaraj-pivotal Jul 19, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
package org.springframework.sbm;

import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.Test;
import org.openrewrite.maven.MavenParser;
import org.openrewrite.xml.tree.Xml;

import java.nio.file.Path;

import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;

public class BootUpgrade_27_30_IntegrationTest extends IntegrationTestBaseClass {

@Override
protected String getTestSubDir() {
return "boot-migration-27-30";
}

@Test
void migrateSimpleApplication() {
intializeTestProject();

scanProject();

applyRecipe("boot-2.7-3.0-dependency-version-update");

verifyParentPomVersion();
verifyMicrometerPackageUpdate();
verifyYamlConfigurationUpdate();
verifyPropertyConfigurationUpdate();
verifyConstructorBindingRemoval();
}

private void verifyConstructorBindingRemoval() {
String constructorBindingConfigClass = loadJavaFile("org.springboot.example.upgrade", "ConstructorBindingConfig");
assertThat(constructorBindingConfigClass).isEqualTo("package org.springboot.example.upgrade;\n" +
"\n" +
"import org.springframework.boot.context.properties.ConfigurationProperties;\n" +
"\n" +
"@ConfigurationProperties(prefix = \"mail\")\n" +
"public class ConstructorBindingConfig {\n" +
" private String hostName;\n" +
"\n" +
" public ConstructorBindingConfig(String hostName) {\n" +
" this.hostName = hostName;\n" +
" }\n" +
"}" +
"\n");
}

private void verifyMicrometerPackageUpdate() {
String micrometerClass = loadFile(Path.of("src/main/java/org/springboot/example/upgrade/MicrometerConfig.java"));
assertThat(micrometerClass).isEqualTo(
"package org.springboot.example.upgrade;\n" +
"\n" +
"import io.micrometer.binder.MeterBinder;\n" +
"\n" +
"public class MicroMeterConfig {\n" +
"\n" +
" private MeterBinder k;\n" +
"}\n");
}

private void verifyYamlConfigurationUpdate() {
String micrometerClass = loadFile(Path.of("src/main/resources/application.yaml"));
assertThat(micrometerClass).isEqualTo(
"spring:\n" +
" elasticsearch:\n" +
" connection-timeout: '1'\n" +
" password: testpassword\n" +
" socket-timeout: '2'\n" +
" restclient.sniffer.delay-after-failure: '3'\n" +
" restclient.sniffer.interval: '4'\n" +
" username: username\n" +
" security:\n" +
" saml2:\n" +
" relyingparty:\n" +
" registration:\n" +
" idpone:\n" +
" assertingparty:\n" +
" verification:\n" +
" credentials:\n" +
" certificate-location: classpath:saml/idpone.crt\n" +
" entity-id: https://idpone.com\n" +
" sso-url: https://idpone.com\n" +
" elasticsearch.connection-timeout: '1000'\n" +
" elasticsearch.webclient.max-in-memory-size: '122'\n" +
" elasticsearch.password: abc\n" +
" elasticsearch.socket-timeout: '100'\n" +
" elasticsearch.username: testUser\n" +
" sql.init.data-locations: testdata\n" +
" sql.init.password: password\n" +
" sql.init.username: username-data\n" +
" sql.init.mode: mode1\n" +
" sql.init.platform: pls\n" +
" sql.init.schema-locations: table1\n" +
" sql.init.password: password2\n" +
" sql.init.username: username-schema\n" +
" sql.init.separator: k\n" +
" sql.init.encoding: UTF-8\n" +
"server.reactive.session.cookie.same-site: 'true'" +
"\n");
}


private void verifyPropertyConfigurationUpdate() {

String applicationProperties = loadFile(Path.of("src/main/resources/application.properties"));
assertThat(applicationProperties).isEqualTo(
"spring.elasticsearch.connection-timeout=1000\n" +
"spring.elasticsearch.webclient.max-in-memory-size=122\n" +
"spring.elasticsearch.password=abc\n" +
"spring.elasticsearch.socket-timeout=100\n" +
"spring.elasticsearch.username=testUser\n" +
"\n" +
"spring.sql.init.data-locations=testdata\n" +
"spring.sql.init.password=password\n" +
"spring.sql.init.username=username\n" +
"spring.sql.init.mode=mode1\n" +
"spring.sql.init.platform=pls\n" +
"spring.sql.init.schema-locations=table1\n" +
"spring.sql.init.password=password2\n" +
"spring.sql.init.username=username2\n" +
"spring.sql.init.separator=k\n" +
"spring.sql.init.encoding=UTF-8\n" +
"\n" +
"spring.elasticsearch.connection-timeout=1\n" +
"spring.elasticsearch.password=testpassword\n" +
"spring.elasticsearch.socket-timeout=2\n" +
"spring.elasticsearch.restclient.sniffer.delay-after-failure=3\n" +
"spring.elasticsearch.restclient.sniffer.interval=4\n" +
"spring.elasticsearch.username=username\n" +
"\n" +
"spring.security.saml2.relyingparty.registration.idpone.assertingparty.entity-id=https://idpone.com\n" +
"spring.security.saml2.relyingparty.registration.idpone.assertingparty.sso-url=https://idpone.com\n" +
"spring.security.saml2.relyingparty.registration.idpone.assertingparty.verification.credentials.certificate-location=classpath:saml/idpone.crt\n" +
"\n" +
"server.reactive.session.cookie.same-site=true\n");
}

private void verifyParentPomVersion() {
String pomContent = loadFile(Path.of("pom.xml"));

Xml.Document mavenAsXMLDocument = parsePom(pomContent);

Xml.Tag parentTag =mavenAsXMLDocument
.getRoot()
.getChildren("parent").get(0);

String version = parentTag.getChildValue("version").get();

String groupId = parentTag.getChildValue("groupId").get();
String artifactId = parentTag.getChildValue("artifactId").get();

assertThat(version).isEqualTo("3.0.0-M3");
assertThat(groupId).isEqualTo("org.springframework.boot");
assertThat(artifactId).isEqualTo("spring-boot-starter-parent");
}

@NotNull
private Xml.Document parsePom(String pomContent) {
MavenParser mavenParser = new MavenParser.Builder().build();
return mavenParser.parse(pomContent).get(0);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>boot-upgrade-27_30</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>boot-upgrade-27_30</name>
<description>boot-upgrade-27_30</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<repositories>
<repository>
<id>spring-snapshot</id>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
<repository>
<id>spring-milestone</id>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<!-- <repository>-->
<!-- <id>spring-milestone</id>-->
<!-- <url>https://repo.spring.io/milestone</url>-->
<!-- <snapshots>-->
<!-- <enabled>false</enabled>-->
<!-- </snapshots>-->
<!-- </repository>-->
<repository>
<id>spring-release</id>
<url>https://repo.spring.io/release</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.springboot.example.upgrade;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class BootUpgrade2730Application {

public static void main(String[] args) {
SpringApplication.run(BootUpgrade2730Application.class, args);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.springboot.example.upgrade;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.ConstructorBinding;

@ConfigurationProperties(prefix = "mail")
@ConstructorBinding
public class ConstructorBindingConfig {
private String hostName;

public ConstructorBindingConfig(String hostName) {
this.hostName = hostName;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.springboot.example.upgrade;

import io.micrometer.core.instrument.binder.MeterBinder;

public class MicroMeterConfig {

private MeterBinder k;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
management.endpoint.jolokia.config="abc"
management.endpoint.jolokia.enabled=true
management.metrics.graphql.autotime.percentiles=100
management.metrics.graphql.autotime.percentiles-histogram=20

spring.activemq.broker-url=http://google.com
spring.activemq.close-timeout=13
spring.activemq.in-memory=true
spring.activemq.non-blocking-redelivery=true
spring.activemq.password=password
spring.activemq.send-timeout=11
spring.activemq.user=user
spring.activemq.packages.trust-all=true
spring.activemq.packages.trusted=true
spring.activemq.pool.block-if-full=true
spring.activemq.pool.block-if-full-timeout=true
spring.activemq.pool.enabled=true
spring.activemq.pool.idle-timeout=12
spring.activemq.pool.max-connections=200
spring.activemq.pool.max-sessions-per-connection=300
spring.activemq.pool.time-between-expiration-check=22
spring.activemq.pool.use-anonymous-producers=true

spring.artemis.pool.block-if-full=true
spring.artemis.pool.block-if-full-timeout=true
spring.artemis.pool.enabled=true
spring.artemis.pool.idle-timeout=1
spring.artemis.pool.max-connections=100
spring.artemis.pool.max-sessions-per-connection=10
spring.artemis.pool.time-between-expiration-check=10
spring.artemis.pool.use-anonymous-producers=true

spring.cache.infinispan.config="config2"
spring.cache.ehcache.config="config1"

spring.config.use-legacy-processing=false

spring.data.elasticsearch.client.reactive.connection-timeout=1000
spring.data.elasticsearch.client.reactive.max-in-memory-size=122
spring.data.elasticsearch.client.reactive.password=abc
spring.data.elasticsearch.client.reactive.socket-timeout=100
spring.data.elasticsearch.client.reactive.username=testUser
spring.data.elasticsearch.client.reactive.use-ssl=false

spring.datasource.data=testdata
spring.datasource.data-password=password
spring.datasource.data-username=username
spring.datasource.initialization-mode=mode1
spring.datasource.platform=pls
spring.datasource.schema=table1
spring.datasource.schema-password=password2
spring.datasource.schema-username=username2
spring.datasource.separator=k
spring.datasource.sql-script-encoding=UTF-8

spring.elasticsearch.rest.connection-timeout=1
spring.elasticsearch.rest.password=testpassword
spring.elasticsearch.rest.read-timeout=2
spring.elasticsearch.rest.sniffer.delay-after-failure=3
spring.elasticsearch.rest.sniffer.interval=4
spring.elasticsearch.rest.username=username

spring.graphql.websocket.path=/path
spring.graphql.websocket.connection-init-timeout=2
spring.graphql.schema.printer.enabled=false
spring.graphql.schema.locations=abc
spring.graphql.schema.introspection.enabled=true
spring.graphql.schema.file-extensions=.txt
spring.graphql.path=null
spring.graphql.graphiql.path=/path2
spring.graphql.graphiql.enabled=false
spring.graphql.cors.max-age=22
spring.graphql.cors.exposed-headers=fd
spring.graphql.cors.allowed-origins=*
spring.graphql.cors.allowed-origin-patterns=*
spring.graphql.cors.allowed-methods=POST
spring.graphql.cors.allowed-headers=hello
spring.graphql.cors.allow-credentials=true

spring.h2.console.enabled=true
spring.h2.console.path="/tmp"
spring.h2.console.settings.trace=true
spring.h2.console.settings.web-admin-password="password"
spring.h2.console.settings.web-allow-others=true

spring.jersey.type=type1
spring.jersey.init=true
spring.jersey.servlet.load-on-startup=true
spring.jersey.application-path="/path"
spring.jersey.filter.order="desc"

spring.jta.transaction-manager-id=1
spring.jta.log-dir=/tmp
spring.jta.atomikos.properties.transaction-manager-unique-name=name1
spring.jta.atomikos.properties.serial-jta-transactions=transaction
spring.jta.atomikos.properties.recovery.retry-interval=2
spring.jta.atomikos.properties.recovery.max-retries=3
spring.jta.atomikos.properties.recovery.forget-orphaned-log-entries-delay=4
spring.jta.atomikos.properties.recovery.delay=5
spring.jta.atomikos.properties.max-timeout=6
spring.jta.atomikos.properties.max-actives=7
spring.jta.atomikos.properties.log-base-name=/tmp1
spring.jta.atomikos.properties.log-base-dir=/tmp2
spring.jta.atomikos.properties.force-shutdown-on-vm-exit=true
spring.jta.atomikos.properties.enable-logging=false
spring.jta.atomikos.properties.default-max-wait-time-on-shutdown=8
spring.jta.atomikos.properties.default-jta-timeout=9
spring.jta.atomikos.properties.checkpoint-interval=10
spring.jta.atomikos.properties.allow-sub-transactions=true

spring.security.saml2.relyingparty.registration.idpone.identityprovider.entity-id=https://idpone.com
spring.security.saml2.relyingparty.registration.idpone.identityprovider.sso-url=https://idpone.com
spring.security.saml2.relyingparty.registration.idpone.identityprovider.verification.credentials.certificate-location=classpath:saml/idpone.crt

spring.webflux.session.cookie.same-site=true
Loading