diff --git a/applications/spring-boot-upgrade/src/test/java/org/springframework/sbm/IntegrationTestBaseClass.java b/applications/spring-boot-upgrade/src/test/java/org/springframework/sbm/IntegrationTestBaseClass.java
new file mode 100644
index 000000000..0ec45ed52
--- /dev/null
+++ b/applications/spring-boot-upgrade/src/test/java/org/springframework/sbm/IntegrationTestBaseClass.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2021 - 2022 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.sbm;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.springframework.boot.test.context.SpringBootTest;
+import java.io.IOException;
+import java.nio.file.Path;
+
+@SpringBootTest(properties = {
+ "spring.shell.interactive.enabled=false",
+ "spring.shell.script.enabled=false",
+ "sbm.gitSupportEnabled=false"
+})
+public abstract class IntegrationTestBaseClass {
+
+ /**
+ * Points to the source root directory where example projects are expected.
+ *
+ * See {@link #getTestSubDir()}.
+ */
+ public static final String TESTCODE_DIR = "src/test/resources/testcode/";
+
+ /**
+ * Points to the target root directory where example projects will be copied to.
+ *
+ * See {@link #getTestSubDir()}.
+ */
+ public static final String INTEGRATION_TEST_DIR = "./target/sbm-integration-test/";
+
+ private Path testDir;
+
+ private String output;
+
+
+ @BeforeEach
+ public void beforeEach() throws IOException {
+ testDir = Path.of(INTEGRATION_TEST_DIR).resolve(getTestSubDir());
+ clearTestDir();
+ testDir.resolve(this.getClass().getName());
+ FileUtils.forceMkdir(testDir.toFile());
+ testDir = testDir.toRealPath();
+ }
+
+ /**
+ * Copies example project used for integrationTest.
+ */
+ protected void intializeTestProject() {
+ try {
+ Path s = Path.of(TESTCODE_DIR).resolve(getTestSubDir());
+ FileUtils.copyDirectory(s.toFile(), getTestDir().toFile());
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ protected abstract String getTestSubDir();
+
+ protected Path getTestDir() {
+ return testDir;
+ }
+
+
+ @AfterEach
+ public void afterEach() throws IOException {
+ clearTestDir();
+ }
+
+ private void clearTestDir() throws IOException {
+ if (getTestDir().toFile().exists()) {
+ FileUtils.forceDelete(getTestDir().toFile());
+ }
+ }
+}
diff --git a/applications/spring-boot-upgrade/src/test/java/org/springframework/sbm/ReportTestSingleModule.java b/applications/spring-boot-upgrade/src/test/java/org/springframework/sbm/ReportTestSingleModule.java
new file mode 100644
index 000000000..ba6ea946c
--- /dev/null
+++ b/applications/spring-boot-upgrade/src/test/java/org/springframework/sbm/ReportTestSingleModule.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021 - 2022 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.sbm;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.DefaultApplicationArguments;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class ReportTestSingleModule extends IntegrationTestBaseClass {
+
+ @Autowired
+ private SpringBootMigratorRunner springBootMigratorRunner;
+
+ @Autowired
+ private ReportHolder reportHolder;
+
+ @Override
+ protected String getTestSubDir() {
+ return "boot-migration-27-30";
+ }
+
+
+ @Test
+ public void generatesAllRelevantSection() {
+ intializeTestProject();
+
+ springBootMigratorRunner.run(new DefaultApplicationArguments(getTestDir().toString()));
+
+ assertThat(reportHolder.getReport()).contains("Constructor Binding");
+ assertThat(reportHolder.getReport()).contains("Johnzon Dependency Upgrade");
+ }
+}
diff --git a/applications/spring-boot-upgrade/src/test/resources/test-code/bootify-jaxrs/pom.xml b/applications/spring-boot-upgrade/src/test/resources/test-code/bootify-jaxrs/pom.xml
deleted file mode 100644
index d8cad34b3..000000000
--- a/applications/spring-boot-upgrade/src/test/resources/test-code/bootify-jaxrs/pom.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
- 4.0.0
- org.springframework.sbm.examples
- migrate-jax-rs
- jar
- 0.0.1-SNAPSHOT
-
- UTF-8
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.5.1
-
- 1.8
- 1.8
-
-
-
-
-
-
- org.jboss.spec.javax.ws.rs
- jboss-jaxrs-api_2.1_spec
- 1.0.1.Final
- runtime
-
-
-
diff --git a/applications/spring-boot-upgrade/src/test/resources/test-code/bootify-jaxrs/src/main/java/com/example/jee/app/PersonController.java b/applications/spring-boot-upgrade/src/test/resources/test-code/bootify-jaxrs/src/main/java/com/example/jee/app/PersonController.java
deleted file mode 100644
index 9a62a95d4..000000000
--- a/applications/spring-boot-upgrade/src/test/resources/test-code/bootify-jaxrs/src/main/java/com/example/jee/app/PersonController.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.example.jee.app;
-
-import javax.ws.rs.*;
-import javax.ws.rs.core.MediaType;
-import java.util.stream.Collectors;
-
-@Path("/")
-public class PersonController {
-
- @POST
- @Path("/json/{name}")
- @Produces("application/json")
- @Consumes("application/json")
- public String getHelloWorldJSON(@PathParam("name") String name) throws Exception {
- System.out.println("name: " + name);
- return "{\"Hello\":\"" + name + "\"";
- }
-
- @GET
- @Path("/json")
- @Produces(MediaType.APPLICATION_JSON)
- @Consumes(MediaType.APPLICATION_JSON)
- public String getAllPersons() throws Exception {
- return "{\"message\":\"No person here...\"";
- }
-
-
- @POST
- @Path("/xml/{name}")
- @Produces(MediaType.APPLICATION_XML)
- @Consumes(MediaType.APPLICATION_XML)
- public String getHelloWorldXML(@PathParam("name") String name) throws Exception {
- System.out.println("name: " + name);
- return "Hello "+name+"";
- }
-
-}
diff --git a/applications/spring-boot-upgrade/src/test/resources/testcode/boot-migration-27-30/README.md b/applications/spring-boot-upgrade/src/test/resources/testcode/boot-migration-27-30/README.md
new file mode 100644
index 000000000..500c74c90
--- /dev/null
+++ b/applications/spring-boot-upgrade/src/test/resources/testcode/boot-migration-27-30/README.md
@@ -0,0 +1,8 @@
+**Features used in the current project**
+
+* ehcache in pom is mentioned this helps validate our migration to spring 3 where ehcache classifier has to be used to resolve version.
+* Uses Constructor binding on classes which will be removed when migrating to Spring 3
+* Uses PagingAndSortingRepo interface where CrudRepo has been removed.
+* Uses properties that will be removed/moved on spring 3 migration
+* Uses micrometer packages which are moved to a new structure.
+
diff --git a/applications/spring-boot-upgrade/src/test/resources/testcode/boot-migration-27-30/pom.xml b/applications/spring-boot-upgrade/src/test/resources/testcode/boot-migration-27-30/pom.xml
new file mode 100644
index 000000000..3fb40ebc8
--- /dev/null
+++ b/applications/spring-boot-upgrade/src/test/resources/testcode/boot-migration-27-30/pom.xml
@@ -0,0 +1,107 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.7.1
+
+
+ com.example
+ boot-upgrade-27_30
+ 0.0.1-SNAPSHOT
+ boot-upgrade-27_30
+ boot-upgrade-27_30
+
+ 17
+ 2021.0.4
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.ehcache
+ ehcache
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ com.h2database
+ h2
+ runtime
+
+
+ com.github.tomakehurst
+ wiremock-jre8
+ 2.26.3
+
+
+ io.projectreactor
+ reactor-core
+
+
+ io.reactivex.rxjava3
+ rxjava
+ 3.1.5
+
+
+ org.apache.johnzon
+ johnzon-core
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
+
+ spring-snapshot
+ https://repo.spring.io/snapshot
+
+ false
+
+
+
+ spring-milestone
+ https://repo.spring.io/milestone
+
+ false
+
+
+
+ spring-release
+ https://repo.spring.io/release
+
+ false
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/applications/spring-boot-upgrade/src/test/resources/testcode/boot-migration-27-30/src/main/java/com/hello/GreetingConfig.java b/applications/spring-boot-upgrade/src/test/resources/testcode/boot-migration-27-30/src/main/java/com/hello/GreetingConfig.java
new file mode 100644
index 000000000..67e5aeb24
--- /dev/null
+++ b/applications/spring-boot-upgrade/src/test/resources/testcode/boot-migration-27-30/src/main/java/com/hello/GreetingConfig.java
@@ -0,0 +1,13 @@
+package com.hello;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class GreetingConfig {
+
+ @Bean
+ public String hello() {
+ return "こんにちは";
+ }
+}
diff --git a/applications/spring-boot-upgrade/src/test/resources/testcode/boot-migration-27-30/src/main/java/org/springboot/example/ehcache/EventLogger.java b/applications/spring-boot-upgrade/src/test/resources/testcode/boot-migration-27-30/src/main/java/org/springboot/example/ehcache/EventLogger.java
new file mode 100644
index 000000000..883e58b7f
--- /dev/null
+++ b/applications/spring-boot-upgrade/src/test/resources/testcode/boot-migration-27-30/src/main/java/org/springboot/example/ehcache/EventLogger.java
@@ -0,0 +1,11 @@
+package org.springboot.example.ehcache;
+
+import org.ehcache.event.CacheEvent;
+import org.ehcache.event.CacheEventListener;
+
+public class EventLogger implements CacheEventListener