From c4e7fa2125acfed9db46a229e3469d637b260c16 Mon Sep 17 00:00:00 2001 From: sandro30 Date: Mon, 22 Feb 2021 15:45:52 -0500 Subject: [PATCH 1/6] Add initial configuration Rsocket entrypoint --- gradle.properties | 2 +- .../java/co/com/bancolombia/Constants.java | 2 +- .../EntryPointRsocketResponder.java | 22 +++++++++ .../entrypoints/ModuleFactoryEntryPoint.java | 4 +- .../rsocket-responder/build.gradle.mustache | 6 +++ .../rsocket-responder/definition.json | 10 ++++ .../rsocket-responder.java.mustache | 46 +++++++++++++++++++ 7 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 src/main/java/co/com/bancolombia/factory/entrypoints/EntryPointRsocketResponder.java create mode 100644 src/main/resources/entry-point/rsocket-responder/build.gradle.mustache create mode 100644 src/main/resources/entry-point/rsocket-responder/definition.json create mode 100644 src/main/resources/entry-point/rsocket-responder/rsocket-responder.java.mustache diff --git a/gradle.properties b/gradle.properties index f34f4dfa..046c344c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ package=co.com.bancolombia -systemProp.version=1.8.2 +systemProp.version=1.8.3 diff --git a/src/main/java/co/com/bancolombia/Constants.java b/src/main/java/co/com/bancolombia/Constants.java index a1a31ead..f25aba4d 100644 --- a/src/main/java/co/com/bancolombia/Constants.java +++ b/src/main/java/co/com/bancolombia/Constants.java @@ -14,7 +14,7 @@ public class Constants { public static final String SECRETS_VERSION = "2.1.0"; public static final String RCOMMONS_ASYNC_COMMONS_STARTER_VERSION = "0.4.7"; public static final String RCOMMONS_OBJECT_MAPPER_VERSION = "0.1.0"; - public static final String PLUGIN_VERSION = "1.8.2"; + public static final String PLUGIN_VERSION = "1.8.3"; public static final String UNDERTOW_VERSION = "2.3.8.RELEASE"; public static final String JETTY_VERSION = "2.3.8.RELEASE"; public static final String TOMCAT_EXCLUSION = "compile.exclude group: \"org.springframework.boot\", module:\"spring-boot-starter-tomcat\""; diff --git a/src/main/java/co/com/bancolombia/factory/entrypoints/EntryPointRsocketResponder.java b/src/main/java/co/com/bancolombia/factory/entrypoints/EntryPointRsocketResponder.java new file mode 100644 index 00000000..108e60e0 --- /dev/null +++ b/src/main/java/co/com/bancolombia/factory/entrypoints/EntryPointRsocketResponder.java @@ -0,0 +1,22 @@ +package co.com.bancolombia.factory.entrypoints; + +import co.com.bancolombia.exceptions.CleanException; +import co.com.bancolombia.factory.ModuleBuilder; +import co.com.bancolombia.factory.ModuleFactory; + +import java.io.IOException; + +public class EntryPointRsocketResponder implements ModuleFactory { + + @Override + public void buildModule(ModuleBuilder builder) throws IOException, CleanException { + builder.loadPackage(); + builder.appendToSettings("rsocket-responder", "infrastructure/entry-points"); + builder.appendToProperties("spring.rsocket.server") + .put("port", 7000); + builder.appendDependencyToModule("app-service", + "implementation project(':rsocket-responder')"); + builder.setupFromTemplate("entry-point/rsocket-responder"); + } + +} diff --git a/src/main/java/co/com/bancolombia/factory/entrypoints/ModuleFactoryEntryPoint.java b/src/main/java/co/com/bancolombia/factory/entrypoints/ModuleFactoryEntryPoint.java index 5b6dfb95..f0f28e2f 100644 --- a/src/main/java/co/com/bancolombia/factory/entrypoints/ModuleFactoryEntryPoint.java +++ b/src/main/java/co/com/bancolombia/factory/entrypoints/ModuleFactoryEntryPoint.java @@ -13,12 +13,14 @@ public static ModuleFactory getEntryPointFactory(EntryPointType type) throws Inv return new EntryPointRestWebflux(); case GENERIC: return new EntryPointGeneric(); + case RSOCKET: + return new EntryPointRsocketResponder(); default: throw new InvalidTaskOptionException("Entry Point type invalid"); } } public enum EntryPointType { - RESTMVC, WEBFLUX, GENERIC + RESTMVC, WEBFLUX, GENERIC, RSOCKET } } diff --git a/src/main/resources/entry-point/rsocket-responder/build.gradle.mustache b/src/main/resources/entry-point/rsocket-responder/build.gradle.mustache new file mode 100644 index 00000000..25fcd608 --- /dev/null +++ b/src/main/resources/entry-point/rsocket-responder/build.gradle.mustache @@ -0,0 +1,6 @@ +dependencies { + implementation project(':model') + implementation project(':usecase') + implementation 'org.springframework:spring-context' + implementation 'org.springframework.boot:spring-boot-starter-rsocket' +} diff --git a/src/main/resources/entry-point/rsocket-responder/definition.json b/src/main/resources/entry-point/rsocket-responder/definition.json new file mode 100644 index 00000000..a8ca2171 --- /dev/null +++ b/src/main/resources/entry-point/rsocket-responder/definition.json @@ -0,0 +1,10 @@ +{ + "folders": [ + "infrastructure/entry-points/rsocket-responder/src/main/java/{{packagePath}}/controller", + "infrastructure/entry-points/rsocket-responder/src/test/java/{{packagePath}}/controller" + ], + "files": { + "entry-point/rsocket-responder/build.gradle.mustache": "infrastructure/entry-points/rsocket-responder/build.gradle", + "entry-point/rsocket-responder/rsocket-responder.java.mustache": "infrastructure/entry-points/rsocket-responder/src/main/java/{{packagePath}}/controller/RsocketController.java" + } +} diff --git a/src/main/resources/entry-point/rsocket-responder/rsocket-responder.java.mustache b/src/main/resources/entry-point/rsocket-responder/rsocket-responder.java.mustache new file mode 100644 index 00000000..beadb821 --- /dev/null +++ b/src/main/resources/entry-point/rsocket-responder/rsocket-responder.java.mustache @@ -0,0 +1,46 @@ +package {{package}}.controller; + +{{#lombok}} + import lombok.RequiredArgsConstructor; +{{/lombok}} +import org.springframework.messaging.handler.annotation.MessageMapping; +import org.springframework.stereotype.Controller; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +@Controller +{{#lombok}} + @RequiredArgsConstructor +{{/lombok}} +public class RsocketController { + +// private final MyUseCase useCase; + + // interaction model Request/Response + @MessageMapping(value = "route.request.response") + public Mono addBlog(Object objRequest/* change for object request */) { + // return useCase.doAction(); + return Mono.empty(); + } + + // interaction model Request/Stream + @MessageMapping(value = "route.request.stream") + public Flux getAllBlog() { + // return useCase.doAction(); + return Flux.empty(); + } + + // interaction model Fire-and-Forget + @MessageMapping(value = "route.fire.forget") + public void addBlogFireAndForget(Object objRequest/* change for object request */) { + // return useCase.doAction(objRequest); + } + + // interaction model Channel + @MessageMapping(value = "route.channel") + public Flux testChannel(Flux objRequest) { + // return useCase.doAction(objRequest); + return Flux.empty(); + } + +} \ No newline at end of file From ed5cc4c3a86559e4bfab583cb10c78a949739319 Mon Sep 17 00:00:00 2001 From: sandro30 Date: Tue, 23 Feb 2021 09:47:05 -0500 Subject: [PATCH 2/6] Add initial configuration driven adapter Rsocket --- .../DrivenAdapterRsocketRequester.java | 19 ++++++ .../adapters/ModuleFactoryDrivenAdapter.java | 4 +- .../rsocket-requester/build.gradle.mustache | 6 ++ .../config/requester-config.java.mustache | 27 ++++++++ .../rsocket-requester/definition.json | 11 ++++ .../rsocket-requester.java.mustache | 64 +++++++++++++++++++ .../rsocket-responder.java.mustache | 22 +++++-- .../task/GenerateDrivenAdapterTaskTest.java | 13 ++++ .../task/GenerateEntryPointTaskTest.java | 12 ++++ 9 files changed, 170 insertions(+), 8 deletions(-) create mode 100644 src/main/java/co/com/bancolombia/factory/adapters/DrivenAdapterRsocketRequester.java create mode 100644 src/main/resources/driven-adapter/rsocket-requester/build.gradle.mustache create mode 100644 src/main/resources/driven-adapter/rsocket-requester/config/requester-config.java.mustache create mode 100644 src/main/resources/driven-adapter/rsocket-requester/definition.json create mode 100644 src/main/resources/driven-adapter/rsocket-requester/rsocket-requester.java.mustache diff --git a/src/main/java/co/com/bancolombia/factory/adapters/DrivenAdapterRsocketRequester.java b/src/main/java/co/com/bancolombia/factory/adapters/DrivenAdapterRsocketRequester.java new file mode 100644 index 00000000..d685aa0b --- /dev/null +++ b/src/main/java/co/com/bancolombia/factory/adapters/DrivenAdapterRsocketRequester.java @@ -0,0 +1,19 @@ +package co.com.bancolombia.factory.adapters; + +import co.com.bancolombia.exceptions.CleanException; +import co.com.bancolombia.factory.ModuleBuilder; +import co.com.bancolombia.factory.ModuleFactory; + +import java.io.IOException; + +public class DrivenAdapterRsocketRequester implements ModuleFactory { + + @Override + public void buildModule(ModuleBuilder builder) throws IOException, CleanException { + builder.loadPackage(); + builder.appendToSettings("rsocket-requester", "infrastructure/driven-adapters"); + builder.appendDependencyToModule("app-service", + "implementation project(':rsocket-requester')"); + builder.setupFromTemplate("driven-adapter/rsocket-requester"); + } +} diff --git a/src/main/java/co/com/bancolombia/factory/adapters/ModuleFactoryDrivenAdapter.java b/src/main/java/co/com/bancolombia/factory/adapters/ModuleFactoryDrivenAdapter.java index 94f78abd..61c94458 100644 --- a/src/main/java/co/com/bancolombia/factory/adapters/ModuleFactoryDrivenAdapter.java +++ b/src/main/java/co/com/bancolombia/factory/adapters/ModuleFactoryDrivenAdapter.java @@ -19,12 +19,14 @@ public static ModuleFactory getDrivenAdapterFactory(DrivenAdapterType type) thro return new DrivenAdapterRestConsumer(); case REDIS: return new DrivenAdapterRedis(); + case RSOCKET: + return new DrivenAdapterRsocketRequester(); default: throw new InvalidTaskOptionException("Driven Adapter type invalid"); } } public enum DrivenAdapterType { - JPA, MONGODB, ASYNCEVENTBUS, GENERIC, RESTCONSUMER, REDIS + JPA, MONGODB, ASYNCEVENTBUS, GENERIC, RESTCONSUMER, REDIS, RSOCKET } } diff --git a/src/main/resources/driven-adapter/rsocket-requester/build.gradle.mustache b/src/main/resources/driven-adapter/rsocket-requester/build.gradle.mustache new file mode 100644 index 00000000..72c8dd09 --- /dev/null +++ b/src/main/resources/driven-adapter/rsocket-requester/build.gradle.mustache @@ -0,0 +1,6 @@ +dependencies { + implementation project(':model') + implementation project(':usecase') + implementation 'org.springframework:spring-context' + compile 'org.springframework.boot:spring-boot-starter-rsocket' +} \ No newline at end of file diff --git a/src/main/resources/driven-adapter/rsocket-requester/config/requester-config.java.mustache b/src/main/resources/driven-adapter/rsocket-requester/config/requester-config.java.mustache new file mode 100644 index 00000000..c7fe24a1 --- /dev/null +++ b/src/main/resources/driven-adapter/rsocket-requester/config/requester-config.java.mustache @@ -0,0 +1,27 @@ +package {{package}}.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; +import org.springframework.http.codec.cbor.Jackson2CborDecoder; +import org.springframework.http.codec.cbor.Jackson2CborEncoder; +import org.springframework.messaging.rsocket.RSocketRequester; +import org.springframework.messaging.rsocket.RSocketStrategies; + +@Configuration +public class RequesterConfig { + + @Bean + public RSocketRequester rSocketRequester(RSocketStrategies rSocketStrategies) { + RSocketStrategies strategies = RSocketStrategies.builder() + .encoders(encoders -> encoders.add(new Jackson2CborEncoder())) + .decoders(decoders -> decoders.add(new Jackson2CborDecoder())) + .build(); + return RSocketRequester.builder() + .rsocketStrategies(strategies) + .dataMimeType(MediaType.APPLICATION_CBOR) + .connectTcp("localhost",7000) // server IP or DNS, and port + .block(); + } + +} diff --git a/src/main/resources/driven-adapter/rsocket-requester/definition.json b/src/main/resources/driven-adapter/rsocket-requester/definition.json new file mode 100644 index 00000000..faab4019 --- /dev/null +++ b/src/main/resources/driven-adapter/rsocket-requester/definition.json @@ -0,0 +1,11 @@ +{ + "folders": [ + "infrastructure/driven-adapters/rsocket-requester/src/main/java/{{packagePath}}/service", + "infrastructure/driven-adapters/rsocket-requester/src/test/java/{{packagePath}}/service" + ], + "files": { + "driven-adapter/rsocket-requester/config/requester-config.java.mustache": "applications/app-service/src/main/java/{{packagePath}}/config/RequesterConfig.java", + "driven-adapter/rsocket-requester/build.gradle.mustache": "infrastructure/driven-adapters/rsocket-requester/build.gradle", + "driven-adapter/rsocket-requester/rsocket-requester.java.mustache": "infrastructure/driven-adapters/rsocket-requester/src/main/java/{{packagePath}}/service/RsocketAdapter.java" + } +} diff --git a/src/main/resources/driven-adapter/rsocket-requester/rsocket-requester.java.mustache b/src/main/resources/driven-adapter/rsocket-requester/rsocket-requester.java.mustache new file mode 100644 index 00000000..7f65621d --- /dev/null +++ b/src/main/resources/driven-adapter/rsocket-requester/rsocket-requester.java.mustache @@ -0,0 +1,64 @@ +package {{package}}.service; + +{{#lombok}} +import lombok.RequiredArgsConstructor; +{{/lombok}} +import org.springframework.stereotype.Service; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; +import org.springframework.messaging.rsocket.RSocketRequester; + +@Service +{{#lombok}} +@RequiredArgsConstructor +{{/lombok}} +public class RsocketAdapter // implements Gateway from domain +{ + {{#lombok}} + private final RSocketRequester rSocketRequester; + {{/lombok}} + + {{^lombok}} + private final RSocketRequester rSocketRequester; + + public BlogRequester(RSocketRequester rSocketRequester) { + this.rSocketRequester = rSocketRequester; + } + {{/lombok}} + + // interaction model Request/Response + public Mono callRouteRequest(Object objRequest/* change for object request */) { + return this.rSocketRequester + .route("route.request.response") + .data(objRequest) + .retrieveMono(Object.class) + .log(); + } + + // interaction model Fire-and-Forget + public void callRouteFireForget(Object objRequest/* change for object request */) { + this.rSocketRequester + .route("route.fire.forget") + .data(objRequest) + .send() + .log() + .subscribe(); + } + + // interaction model Request/Stream + public Flux callRouteRequestStream() { + return this.rSocketRequester + .route("route.request.stream") + .retrieveFlux(Object.class) + .log(); + } + + // interaction model Channel + public Flux callRouteChannel(Flux objRequest) { + return this.rSocketRequester + .route("route.channel") + .data(objRequest) + .retrieveFlux(Object.class) + .log(); + } +} \ No newline at end of file diff --git a/src/main/resources/entry-point/rsocket-responder/rsocket-responder.java.mustache b/src/main/resources/entry-point/rsocket-responder/rsocket-responder.java.mustache index beadb821..a3871880 100644 --- a/src/main/resources/entry-point/rsocket-responder/rsocket-responder.java.mustache +++ b/src/main/resources/entry-point/rsocket-responder/rsocket-responder.java.mustache @@ -1,7 +1,7 @@ package {{package}}.controller; {{#lombok}} - import lombok.RequiredArgsConstructor; +import lombok.RequiredArgsConstructor; {{/lombok}} import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.stereotype.Controller; @@ -10,35 +10,43 @@ import reactor.core.publisher.Mono; @Controller {{#lombok}} - @RequiredArgsConstructor +@RequiredArgsConstructor {{/lombok}} public class RsocketController { -// private final MyUseCase useCase; +{{#lombok}} + // private final MyUseCase useCase; +{{/lombok}} +{{^lombok}} + /*private MyUseCase useCase; + public BlogController(MyUseCase useCase) { + this.useCase = useCase; + }*/ +{{/lombok}} // interaction model Request/Response @MessageMapping(value = "route.request.response") - public Mono addBlog(Object objRequest/* change for object request */) { + public Mono getRequestResponse(Object objRequest/* change for object request */) { // return useCase.doAction(); return Mono.empty(); } // interaction model Request/Stream @MessageMapping(value = "route.request.stream") - public Flux getAllBlog() { + public Flux getRequestStream() { // return useCase.doAction(); return Flux.empty(); } // interaction model Fire-and-Forget @MessageMapping(value = "route.fire.forget") - public void addBlogFireAndForget(Object objRequest/* change for object request */) { + public void getRequetsFireForget(Object objRequest/* change for object request */) { // return useCase.doAction(objRequest); } // interaction model Channel @MessageMapping(value = "route.channel") - public Flux testChannel(Flux objRequest) { + public Flux getChannel(Flux objRequest) { // return useCase.doAction(objRequest); return Flux.empty(); } diff --git a/src/test/java/co/com/bancolombia/task/GenerateDrivenAdapterTaskTest.java b/src/test/java/co/com/bancolombia/task/GenerateDrivenAdapterTaskTest.java index cb524366..32ce653c 100644 --- a/src/test/java/co/com/bancolombia/task/GenerateDrivenAdapterTaskTest.java +++ b/src/test/java/co/com/bancolombia/task/GenerateDrivenAdapterTaskTest.java @@ -100,6 +100,19 @@ public void generateRestConsumer() throws IOException, CleanException { assertTrue(new File("build/unitTest/applications/app-service/src/main/java/co/com/bancolombia/config/RestConsumerConfig.java").exists()); } + @Test + public void generateRsocketRequester() throws IOException, CleanException { + // Arrange + task.setType(ModuleFactoryDrivenAdapter.DrivenAdapterType.RSOCKET); + // Act + task.generateDrivenAdapterTask(); + // Assert + assertTrue(new File("build/unitTest/infrastructure/driven-adapters/rsocket-requester/build.gradle").exists()); + assertTrue(new File("build/unitTest/applications/app-service/src/main/java/co/com/bancolombia/config/RequesterConfig.java").exists()); + assertTrue(new File("build/unitTest/infrastructure/driven-adapters/rsocket-requester/src/main/java/co/com/bancolombia/service/RsocketAdapter.java").exists()); + assertTrue(new File("build/unitTest/infrastructure/driven-adapters/rsocket-requester/src/test/java/co/com/bancolombia/service").exists()); + } + @Test public void generateDrivenAdapterJPARepository() throws IOException, CleanException { // Arrange diff --git a/src/test/java/co/com/bancolombia/task/GenerateEntryPointTaskTest.java b/src/test/java/co/com/bancolombia/task/GenerateEntryPointTaskTest.java index 2f5e288b..e7225ec9 100644 --- a/src/test/java/co/com/bancolombia/task/GenerateEntryPointTaskTest.java +++ b/src/test/java/co/com/bancolombia/task/GenerateEntryPointTaskTest.java @@ -106,6 +106,18 @@ public void generateEntryPointGeneric() throws IOException, CleanException { assertTrue(new File("build/unitTest/infrastructure/entry-points/my-entry-point/src/test/java/co/com/bancolombia/myentrypoint").exists()); } + @Test + public void generateEntryPointRsocketResponder() throws IOException, CleanException { + // Arrange + task.setType(ModuleFactoryEntryPoint.EntryPointType.RSOCKET); + // Act + task.generateEntryPointTask(); + // Assert + assertTrue(new File("build/unitTest/infrastructure/entry-points/rsocket-responder/build.gradle").exists()); + assertTrue(new File("build/unitTest/infrastructure/entry-points/rsocket-responder/src/main/java/co/com/bancolombia/controller/RsocketController.java").exists()); + assertTrue(new File("build/unitTest/infrastructure/entry-points/rsocket-responder/src/test/java/co/com/bancolombia/controller").exists()); + } + @Test public void generateEntryPointApiRestWithDefaultServer() throws IOException, CleanException { // Arrange From f35e62d2e347379ede2d19c418f27510c0cdd86c Mon Sep 17 00:00:00 2001 From: sandro30 Date: Wed, 24 Feb 2021 10:55:35 -0500 Subject: [PATCH 3/6] Add funtional testings --- README.md | 2 +- gradle.properties | 2 +- .../PluginCleanFunctionalTest.java | 31 +++++++++++++++++++ .../java/co/com/bancolombia/Constants.java | 2 +- .../config/requester-config.java.mustache | 3 +- .../rsocket-requester.java.mustache | 7 ++--- .../rsocket-responder.java.mustache | 4 ++- 7 files changed, 41 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 54a3e51c..032e93d3 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ To use the plugin you need Gradle version 5.6 or later, to start add the followi ```groovy plugins { - id "co.com.bancolombia.cleanArchitecture" version "1.8.2" + id "co.com.bancolombia.cleanArchitecture" version "1.8.4" } ``` diff --git a/gradle.properties b/gradle.properties index 046c344c..13c8be71 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ package=co.com.bancolombia -systemProp.version=1.8.3 +systemProp.version=1.8.4 diff --git a/src/functionalTest/java/co/com/bancolombia/PluginCleanFunctionalTest.java b/src/functionalTest/java/co/com/bancolombia/PluginCleanFunctionalTest.java index 27b8be31..2b5feca9 100644 --- a/src/functionalTest/java/co/com/bancolombia/PluginCleanFunctionalTest.java +++ b/src/functionalTest/java/co/com/bancolombia/PluginCleanFunctionalTest.java @@ -259,6 +259,37 @@ public void canRunTaskGenerateDrivenAdapterRestConsumerCaseWithParameters() { assertEquals(result.task(":" + task).getOutcome(), TaskOutcome.SUCCESS); } + @Test + public void canRunTaskGenerateDrivenAdapterRsocketRequesterCase() { + canRunTaskGenerateStructureWithOutParameters(); + String task = "generateDrivenAdapter"; + String valueDrivenAdapter = "rsocket"; + + runner.withArguments(task, "--type=" + valueDrivenAdapter); + runner.withProjectDir(projectDir); + BuildResult result = runner.build(); + assertTrue(new File("build/functionalTest/infrastructure/driven-adapters/rsocket-requester/build.gradle").exists()); + assertTrue(new File("build/functionalTest/applications/app-service/src/main/java/co/com/bancolombia/config/RequesterConfig.java").exists()); + assertTrue(new File("build/functionalTest/infrastructure/driven-adapters/rsocket-requester/src/main/java/co/com/bancolombia/service/RsocketAdapter.java").exists()); + assertTrue(new File("build/functionalTest/infrastructure/driven-adapters/rsocket-requester/src/test/java/co/com/bancolombia/service").exists()); + assertEquals(result.task(":" + task).getOutcome(), TaskOutcome.SUCCESS); + } + + @Test + public void canRunTaskGenerateEntryPointrRsocketResponderCase() { + canRunTaskGenerateStructureWithOutParameters(); + String task = "generateEntryPoint"; + String valueDrivenAdapter = "rsocket"; + + runner.withArguments(task, "--type=" + valueDrivenAdapter); + runner.withProjectDir(projectDir); + BuildResult result = runner.build(); + assertTrue(new File("build/functionalTest/infrastructure/entry-points/rsocket-responder/build.gradle").exists()); + assertTrue(new File("build/functionalTest/infrastructure/entry-points/rsocket-responder/src/main/java/co/com/bancolombia/controller/RsocketController.java").exists()); + assertTrue(new File("build/functionalTest/infrastructure/entry-points/rsocket-responder/src/test/java/co/com/bancolombia/controller").exists()); + assertEquals(result.task(":" + task).getOutcome(), TaskOutcome.SUCCESS); + } + @Test public void canRunTaskGenerateEntryPointCaseWithParameters() { canRunTaskGenerateStructureWithOutParameters(); diff --git a/src/main/java/co/com/bancolombia/Constants.java b/src/main/java/co/com/bancolombia/Constants.java index f25aba4d..30cd63f9 100644 --- a/src/main/java/co/com/bancolombia/Constants.java +++ b/src/main/java/co/com/bancolombia/Constants.java @@ -14,7 +14,7 @@ public class Constants { public static final String SECRETS_VERSION = "2.1.0"; public static final String RCOMMONS_ASYNC_COMMONS_STARTER_VERSION = "0.4.7"; public static final String RCOMMONS_OBJECT_MAPPER_VERSION = "0.1.0"; - public static final String PLUGIN_VERSION = "1.8.3"; + public static final String PLUGIN_VERSION = "1.8.4"; public static final String UNDERTOW_VERSION = "2.3.8.RELEASE"; public static final String JETTY_VERSION = "2.3.8.RELEASE"; public static final String TOMCAT_EXCLUSION = "compile.exclude group: \"org.springframework.boot\", module:\"spring-boot-starter-tomcat\""; diff --git a/src/main/resources/driven-adapter/rsocket-requester/config/requester-config.java.mustache b/src/main/resources/driven-adapter/rsocket-requester/config/requester-config.java.mustache index c7fe24a1..2e2e95bc 100644 --- a/src/main/resources/driven-adapter/rsocket-requester/config/requester-config.java.mustache +++ b/src/main/resources/driven-adapter/rsocket-requester/config/requester-config.java.mustache @@ -20,8 +20,7 @@ public class RequesterConfig { return RSocketRequester.builder() .rsocketStrategies(strategies) .dataMimeType(MediaType.APPLICATION_CBOR) - .connectTcp("localhost",7000) // server IP or DNS, and port - .block(); + .tcp("localhost",7000); // server IP or DNS, and port } } diff --git a/src/main/resources/driven-adapter/rsocket-requester/rsocket-requester.java.mustache b/src/main/resources/driven-adapter/rsocket-requester/rsocket-requester.java.mustache index 7f65621d..9ffc6ca4 100644 --- a/src/main/resources/driven-adapter/rsocket-requester/rsocket-requester.java.mustache +++ b/src/main/resources/driven-adapter/rsocket-requester/rsocket-requester.java.mustache @@ -36,13 +36,12 @@ public class RsocketAdapter // implements Gateway from domain } // interaction model Fire-and-Forget - public void callRouteFireForget(Object objRequest/* change for object request */) { - this.rSocketRequester + public Mono callRouteFireForget(Object objRequest/* change for object request */) { + return this.rSocketRequester .route("route.fire.forget") .data(objRequest) .send() - .log() - .subscribe(); + .log(); } // interaction model Request/Stream diff --git a/src/main/resources/entry-point/rsocket-responder/rsocket-responder.java.mustache b/src/main/resources/entry-point/rsocket-responder/rsocket-responder.java.mustache index a3871880..5042dd07 100644 --- a/src/main/resources/entry-point/rsocket-responder/rsocket-responder.java.mustache +++ b/src/main/resources/entry-point/rsocket-responder/rsocket-responder.java.mustache @@ -24,6 +24,7 @@ public class RsocketController { this.useCase = useCase; }*/ {{/lombok}} + // interaction model Request/Response @MessageMapping(value = "route.request.response") public Mono getRequestResponse(Object objRequest/* change for object request */) { @@ -40,8 +41,9 @@ public class RsocketController { // interaction model Fire-and-Forget @MessageMapping(value = "route.fire.forget") - public void getRequetsFireForget(Object objRequest/* change for object request */) { + public Mono getRequetsFireForget(Object objRequest/* change for object request */) { // return useCase.doAction(objRequest); + return Mono.empty(); } // interaction model Channel From ae7baf4aa6ee6463b82b70e298983bea4af96a56 Mon Sep 17 00:00:00 2001 From: sandro30 Date: Wed, 24 Feb 2021 15:35:14 -0500 Subject: [PATCH 4/6] Add finish functional test and reactive project conditions --- .../bancolombia/PluginCleanFunctionalTest.java | 4 ++-- .../DrivenAdapterRsocketRequester.java | 14 ++++++++++---- .../EntryPointRsocketResponder.java | 18 ++++++++++++------ 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/functionalTest/java/co/com/bancolombia/PluginCleanFunctionalTest.java b/src/functionalTest/java/co/com/bancolombia/PluginCleanFunctionalTest.java index 2b5feca9..db10eb37 100644 --- a/src/functionalTest/java/co/com/bancolombia/PluginCleanFunctionalTest.java +++ b/src/functionalTest/java/co/com/bancolombia/PluginCleanFunctionalTest.java @@ -261,7 +261,7 @@ public void canRunTaskGenerateDrivenAdapterRestConsumerCaseWithParameters() { @Test public void canRunTaskGenerateDrivenAdapterRsocketRequesterCase() { - canRunTaskGenerateStructureWithOutParameters(); + canRunTaskGenerateStructureReactiveProject(); String task = "generateDrivenAdapter"; String valueDrivenAdapter = "rsocket"; @@ -277,7 +277,7 @@ public void canRunTaskGenerateDrivenAdapterRsocketRequesterCase() { @Test public void canRunTaskGenerateEntryPointrRsocketResponderCase() { - canRunTaskGenerateStructureWithOutParameters(); + canRunTaskGenerateStructureReactiveProject(); String task = "generateEntryPoint"; String valueDrivenAdapter = "rsocket"; diff --git a/src/main/java/co/com/bancolombia/factory/adapters/DrivenAdapterRsocketRequester.java b/src/main/java/co/com/bancolombia/factory/adapters/DrivenAdapterRsocketRequester.java index d685aa0b..a6303090 100644 --- a/src/main/java/co/com/bancolombia/factory/adapters/DrivenAdapterRsocketRequester.java +++ b/src/main/java/co/com/bancolombia/factory/adapters/DrivenAdapterRsocketRequester.java @@ -1,6 +1,7 @@ package co.com.bancolombia.factory.adapters; import co.com.bancolombia.exceptions.CleanException; +import co.com.bancolombia.exceptions.InvalidTaskOptionException; import co.com.bancolombia.factory.ModuleBuilder; import co.com.bancolombia.factory.ModuleFactory; @@ -11,9 +12,14 @@ public class DrivenAdapterRsocketRequester implements ModuleFactory { @Override public void buildModule(ModuleBuilder builder) throws IOException, CleanException { builder.loadPackage(); - builder.appendToSettings("rsocket-requester", "infrastructure/driven-adapters"); - builder.appendDependencyToModule("app-service", - "implementation project(':rsocket-requester')"); - builder.setupFromTemplate("driven-adapter/rsocket-requester"); + if (builder.isReactive()) { + builder.appendToSettings("rsocket-requester", "infrastructure/driven-adapters"); + builder.appendDependencyToModule("app-service", + "implementation project(':rsocket-requester')"); + builder.setupFromTemplate("driven-adapter/rsocket-requester"); + } else { + throw new InvalidTaskOptionException("Rsocket requester Driven Adapter is only available in reactive projects"); + } + } } diff --git a/src/main/java/co/com/bancolombia/factory/entrypoints/EntryPointRsocketResponder.java b/src/main/java/co/com/bancolombia/factory/entrypoints/EntryPointRsocketResponder.java index 108e60e0..3dcf01fb 100644 --- a/src/main/java/co/com/bancolombia/factory/entrypoints/EntryPointRsocketResponder.java +++ b/src/main/java/co/com/bancolombia/factory/entrypoints/EntryPointRsocketResponder.java @@ -1,6 +1,7 @@ package co.com.bancolombia.factory.entrypoints; import co.com.bancolombia.exceptions.CleanException; +import co.com.bancolombia.exceptions.InvalidTaskOptionException; import co.com.bancolombia.factory.ModuleBuilder; import co.com.bancolombia.factory.ModuleFactory; @@ -11,12 +12,17 @@ public class EntryPointRsocketResponder implements ModuleFactory { @Override public void buildModule(ModuleBuilder builder) throws IOException, CleanException { builder.loadPackage(); - builder.appendToSettings("rsocket-responder", "infrastructure/entry-points"); - builder.appendToProperties("spring.rsocket.server") - .put("port", 7000); - builder.appendDependencyToModule("app-service", - "implementation project(':rsocket-responder')"); - builder.setupFromTemplate("entry-point/rsocket-responder"); + if (builder.isReactive()) { + builder.appendToSettings("rsocket-responder", "infrastructure/entry-points"); + builder.appendToProperties("spring.rsocket.server") + .put("port", 7000); + builder.appendDependencyToModule("app-service", + "implementation project(':rsocket-responder')"); + builder.setupFromTemplate("entry-point/rsocket-responder"); + } else { + throw new InvalidTaskOptionException("Rsocket responder Entry Point is only available in reactive projects"); + } + } } From c7a903e2e7dd3eaf8c06d7242891cbe567398d1a Mon Sep 17 00:00:00 2001 From: sandro30 Date: Wed, 24 Feb 2021 16:00:39 -0500 Subject: [PATCH 5/6] Add refactoring in tests --- README.md | 2 +- gradle.properties | 2 +- src/main/java/co/com/bancolombia/Constants.java | 2 +- .../task/GenerateDrivenAdapterTaskTest.java | 1 + .../bancolombia/task/GenerateEntryPointTaskTest.java | 11 ++++++++++- 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 36eadcb3..ce30afc2 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ To use the plugin you need Gradle version 5.6 or later, to start add the followi ```groovy plugins { - id "co.com.bancolombia.cleanArchitecture" version "1.8.4" + id "co.com.bancolombia.cleanArchitecture" version "1.8.5" } ``` diff --git a/gradle.properties b/gradle.properties index 683ba411..d46c43b1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ package=co.com.bancolombia -systemProp.version=1.8.4 \ No newline at end of file +systemProp.version=1.8.5 \ No newline at end of file diff --git a/src/main/java/co/com/bancolombia/Constants.java b/src/main/java/co/com/bancolombia/Constants.java index e57ff320..1e2a2c4a 100644 --- a/src/main/java/co/com/bancolombia/Constants.java +++ b/src/main/java/co/com/bancolombia/Constants.java @@ -16,7 +16,7 @@ public class Constants { public static final String SECRETS_VERSION = "2.1.0"; public static final String RCOMMONS_ASYNC_COMMONS_STARTER_VERSION = "0.4.7"; public static final String RCOMMONS_OBJECT_MAPPER_VERSION = "0.1.0"; - public static final String PLUGIN_VERSION = "1.8.4"; + public static final String PLUGIN_VERSION = "1.8.5"; public static final String TOMCAT_EXCLUSION = "compile.exclude group: \"org.springframework.boot\", module:\"spring-boot-starter-tomcat\""; public enum BooleanOption { diff --git a/src/test/java/co/com/bancolombia/task/GenerateDrivenAdapterTaskTest.java b/src/test/java/co/com/bancolombia/task/GenerateDrivenAdapterTaskTest.java index 0bd4fc92..20608c46 100644 --- a/src/test/java/co/com/bancolombia/task/GenerateDrivenAdapterTaskTest.java +++ b/src/test/java/co/com/bancolombia/task/GenerateDrivenAdapterTaskTest.java @@ -103,6 +103,7 @@ public void generateRestConsumer() throws IOException, CleanException { @Test public void generateRsocketRequester() throws IOException, CleanException { // Arrange + setup(GenerateStructureTask.ProjectType.REACTIVE); task.setType(ModuleFactoryDrivenAdapter.DrivenAdapterType.RSOCKET); // Act task.generateDrivenAdapterTask(); diff --git a/src/test/java/co/com/bancolombia/task/GenerateEntryPointTaskTest.java b/src/test/java/co/com/bancolombia/task/GenerateEntryPointTaskTest.java index e7225ec9..a3acad38 100644 --- a/src/test/java/co/com/bancolombia/task/GenerateEntryPointTaskTest.java +++ b/src/test/java/co/com/bancolombia/task/GenerateEntryPointTaskTest.java @@ -27,11 +27,16 @@ public class GenerateEntryPointTaskTest { private GenerateEntryPointTask task; @Before - public void setup() throws IOException, CleanException { + public void init() throws IOException, CleanException { + setup(GenerateStructureTask.ProjectType.IMPERATIVE); + } + + public void setup(GenerateStructureTask.ProjectType type) throws IOException, CleanException { Project project = ProjectBuilder.builder().withProjectDir(new File("build/unitTest")).build(); deleteStructure(project.getProjectDir().toPath()); project.getTasks().create("ca", GenerateStructureTask.class); GenerateStructureTask caTask = (GenerateStructureTask) project.getTasks().getByName("ca"); + caTask.setType(type); caTask.generateStructureTask(); ProjectBuilder.builder() @@ -109,6 +114,7 @@ public void generateEntryPointGeneric() throws IOException, CleanException { @Test public void generateEntryPointRsocketResponder() throws IOException, CleanException { // Arrange + setup(GenerateStructureTask.ProjectType.REACTIVE); task.setType(ModuleFactoryEntryPoint.EntryPointType.RSOCKET); // Act task.generateEntryPointTask(); @@ -185,6 +191,7 @@ public void generateEntryPointApiRestWithTomcatServer() throws IOException, Clea @Test public void generateEntryPointReactiveWebWithoutRouterFunctions() throws IOException, CleanException { // Arrange + setup(GenerateStructureTask.ProjectType.REACTIVE); task.setType(ModuleFactoryEntryPoint.EntryPointType.WEBFLUX); task.setRouter(Constants.BooleanOption.FALSE); // Act @@ -199,6 +206,7 @@ public void generateEntryPointReactiveWebWithoutRouterFunctions() throws IOExcep @Test public void generateEntryPointReactiveWebWithRouterFunctions() throws IOException, CleanException { // Arrange + setup(GenerateStructureTask.ProjectType.REACTIVE); task.setType(ModuleFactoryEntryPoint.EntryPointType.WEBFLUX); task.setRouter(Constants.BooleanOption.TRUE); @@ -213,6 +221,7 @@ public void generateEntryPointReactiveWebWithRouterFunctions() throws IOExceptio @Test public void generateEntryPointReactiveWebWithDefaultOptionFunctions() throws IOException, CleanException { // Arrange + setup(GenerateStructureTask.ProjectType.REACTIVE); task.setType(ModuleFactoryEntryPoint.EntryPointType.WEBFLUX); // Act From 7d092dc5cf28fedb02e7b9b06af9ea893e24bcfc Mon Sep 17 00:00:00 2001 From: sandro30 Date: Wed, 24 Feb 2021 17:31:56 -0500 Subject: [PATCH 6/6] Fix improvements and corrections in the code --- .../rsocket-requester/rsocket-requester.java.mustache | 7 ++----- .../rsocket-responder/rsocket-responder.java.mustache | 5 +---- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/main/resources/driven-adapter/rsocket-requester/rsocket-requester.java.mustache b/src/main/resources/driven-adapter/rsocket-requester/rsocket-requester.java.mustache index 9ffc6ca4..01f55e25 100644 --- a/src/main/resources/driven-adapter/rsocket-requester/rsocket-requester.java.mustache +++ b/src/main/resources/driven-adapter/rsocket-requester/rsocket-requester.java.mustache @@ -14,14 +14,11 @@ import org.springframework.messaging.rsocket.RSocketRequester; {{/lombok}} public class RsocketAdapter // implements Gateway from domain { - {{#lombok}} - private final RSocketRequester rSocketRequester; - {{/lombok}} - {{^lombok}} private final RSocketRequester rSocketRequester; + {{^lombok}} - public BlogRequester(RSocketRequester rSocketRequester) { + public RsocketAdapter(RSocketRequester rSocketRequester) { this.rSocketRequester = rSocketRequester; } {{/lombok}} diff --git a/src/main/resources/entry-point/rsocket-responder/rsocket-responder.java.mustache b/src/main/resources/entry-point/rsocket-responder/rsocket-responder.java.mustache index 5042dd07..459acaf8 100644 --- a/src/main/resources/entry-point/rsocket-responder/rsocket-responder.java.mustache +++ b/src/main/resources/entry-point/rsocket-responder/rsocket-responder.java.mustache @@ -14,13 +14,10 @@ import reactor.core.publisher.Mono; {{/lombok}} public class RsocketController { -{{#lombok}} // private final MyUseCase useCase; -{{/lombok}} {{^lombok}} - /*private MyUseCase useCase; - public BlogController(MyUseCase useCase) { + /*public RsocketController(MyUseCase useCase) { this.useCase = useCase; }*/ {{/lombok}}