From e76e23b96bd5db03d5fe26b11895334a9af0e9a5 Mon Sep 17 00:00:00 2001 From: currenjin Date: Mon, 23 Dec 2024 22:40:50 +0900 Subject: [PATCH] Feat: Client httpbin module --- wire-mock/build.gradle | 74 +++++++++++-------- wire-mock/clients/client-core/build.gradle | 3 + .../httpbin/adapter/HttpBinFeignClient.java | 12 +++ .../httpbin/config/HttpBinClientConfig.java | 11 +++ .../httpbin/response/AnythingResponse.java | 14 ++++ .../resources/application-httpbin-client.yml | 15 ++++ .../HttpbinClientApplicationTests.java | 11 +++ .../src/test/resources/application.yml | 4 + wire-mock/settings.gradle | 7 +- 9 files changed, 117 insertions(+), 34 deletions(-) create mode 100644 wire-mock/clients/client-httpbin/src/main/java/com/currenjin/httpbin/adapter/HttpBinFeignClient.java create mode 100644 wire-mock/clients/client-httpbin/src/main/java/com/currenjin/httpbin/config/HttpBinClientConfig.java create mode 100644 wire-mock/clients/client-httpbin/src/main/java/com/currenjin/httpbin/response/AnythingResponse.java create mode 100644 wire-mock/clients/client-httpbin/src/main/resources/application-httpbin-client.yml create mode 100644 wire-mock/clients/client-httpbin/src/test/java/com/currenjin/httpbin/HttpbinClientApplicationTests.java create mode 100644 wire-mock/clients/client-httpbin/src/test/resources/application.yml diff --git a/wire-mock/build.gradle b/wire-mock/build.gradle index e928c09..570abd3 100644 --- a/wire-mock/build.gradle +++ b/wire-mock/build.gradle @@ -1,51 +1,65 @@ -plugins { - id 'org.springframework.boot' version '2.7.1' apply false - id 'io.spring.dependency-management' version '1.0.11.RELEASE' apply false - id 'java' +repositories { + mavenCentral() } -allprojects { - group = 'com.currenjin' - version = '0.0.1-SNAPSHOT' - +buildscript { + ext { + javaVersion = "17" + springBootVersion = "2.7.5" + springCloudVersion = "2021.0.5" + } repositories { - mavenCentral() + maven { + url "https://plugins.gradle.org/m2/" + } + } + dependencies { + classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}" + classpath "io.spring.gradle:dependency-management-plugin:0.6.0.RELEASE" + classpath group: "org.sonarsource.scanner.gradle", name: "sonarqube-gradle-plugin", version: "3.3" } } -subprojects { - apply plugin: 'java' - apply plugin: 'org.springframework.boot' - apply plugin: 'io.spring.dependency-management' +def demoProjects = subprojects - project(":clients") +configure(demoProjects) { + apply plugin: "java" + apply plugin: "java-library" + apply plugin: "org.springframework.boot" + apply plugin: "io.spring.dependency-management" - buildscript { - ext { - springBootVersion = '2.7.5' - springCloudVersion = '2021.0.5' - } + repositories { + mavenCentral() } - sourceCompatibility = '17' - dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } } + tasks.named("test") { + useJUnitPlatform() + } + dependencies { - implementation 'org.projectlombok:lombok:1.18.22' - implementation 'org.springframework.boot:spring-boot-starter' + implementation "org.projectlombok:lombok:1.18.22" + implementation "com.fasterxml.jackson.core:jackson-databind" + implementation "com.fasterxml.jackson.core:jackson-core" + implementation "com.fasterxml.jackson.core:jackson-annotations" - annotationProcessor 'org.projectlombok:lombok:1.18.22' - testAnnotationProcessor 'org.projectlombok:lombok:1.18.22' + annotationProcessor "org.projectlombok:lombok:1.18.22" + testAnnotationProcessor "org.projectlombok:lombok:1.18.22" - testImplementation 'org.springframework.boot:spring-boot-starter-test' - } + implementation "org.springframework.boot:spring-boot-starter" + testImplementation "org.springframework.boot:spring-boot-starter-test" - tasks.named('test') { - useJUnitPlatform() + testImplementation(testFixtures(project(":clients:client-core"))) } - - tasks.register('prepareKotlinBuildScriptModel'){} } + +def clientProjects = project(":clients").subprojects - project(":clients:client-core") +configure(clientProjects) { + dependencies { + implementation(project(":clients:client-core")) + } +} \ No newline at end of file diff --git a/wire-mock/clients/client-core/build.gradle b/wire-mock/clients/client-core/build.gradle index 067143c..912390f 100644 --- a/wire-mock/clients/client-core/build.gradle +++ b/wire-mock/clients/client-core/build.gradle @@ -6,4 +6,7 @@ plugins { dependencies { api 'org.springframework.cloud:spring-cloud-starter-openfeign' implementation 'io.github.openfeign:feign-httpclient' + + testFixturesImplementation 'org.springframework.boot:spring-boot-starter-test' + testFixturesImplementation 'org.springframework.cloud:spring-cloud-contract-wiremock' } \ No newline at end of file diff --git a/wire-mock/clients/client-httpbin/src/main/java/com/currenjin/httpbin/adapter/HttpBinFeignClient.java b/wire-mock/clients/client-httpbin/src/main/java/com/currenjin/httpbin/adapter/HttpBinFeignClient.java new file mode 100644 index 0000000..cb01a21 --- /dev/null +++ b/wire-mock/clients/client-httpbin/src/main/java/com/currenjin/httpbin/adapter/HttpBinFeignClient.java @@ -0,0 +1,12 @@ +package com.currenjin.httpbin.adapter; + +import com.currenjin.httpbin.response.AnythingResponse; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +@FeignClient(name = "httpBinClient", url = "${client.httpbin-api.access-url}", decode404 = true) +public interface HttpBinFeignClient { + @GetMapping("/anything/{id}") + AnythingResponse getAnythingById(@PathVariable("id") Long id); +} diff --git a/wire-mock/clients/client-httpbin/src/main/java/com/currenjin/httpbin/config/HttpBinClientConfig.java b/wire-mock/clients/client-httpbin/src/main/java/com/currenjin/httpbin/config/HttpBinClientConfig.java new file mode 100644 index 0000000..06eb081 --- /dev/null +++ b/wire-mock/clients/client-httpbin/src/main/java/com/currenjin/httpbin/config/HttpBinClientConfig.java @@ -0,0 +1,11 @@ +package com.currenjin.httpbin.config; + +import com.currenjin.httpbin.adapter.HttpBinFeignClient; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableFeignClients(basePackageClasses = {HttpBinFeignClient.class}) +public class HttpBinClientConfig { + +} diff --git a/wire-mock/clients/client-httpbin/src/main/java/com/currenjin/httpbin/response/AnythingResponse.java b/wire-mock/clients/client-httpbin/src/main/java/com/currenjin/httpbin/response/AnythingResponse.java new file mode 100644 index 0000000..b5797bd --- /dev/null +++ b/wire-mock/clients/client-httpbin/src/main/java/com/currenjin/httpbin/response/AnythingResponse.java @@ -0,0 +1,14 @@ +package com.currenjin.httpbin.response; + +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +public class AnythingResponse { + private String data; + + public AnythingResponse(String data) { + this.data = data; + } +} diff --git a/wire-mock/clients/client-httpbin/src/main/resources/application-httpbin-client.yml b/wire-mock/clients/client-httpbin/src/main/resources/application-httpbin-client.yml new file mode 100644 index 0000000..960f739 --- /dev/null +++ b/wire-mock/clients/client-httpbin/src/main/resources/application-httpbin-client.yml @@ -0,0 +1,15 @@ +spring: + config: + import: + - classpath:application-client-core.yml + +feign: + client: + config: + httpBinClient: + connectTimeout: 1000 + readTimeout: 3000 + +client: + httpbin-api: + access-url: http://httpbin.org \ No newline at end of file diff --git a/wire-mock/clients/client-httpbin/src/test/java/com/currenjin/httpbin/HttpbinClientApplicationTests.java b/wire-mock/clients/client-httpbin/src/test/java/com/currenjin/httpbin/HttpbinClientApplicationTests.java new file mode 100644 index 0000000..b15fe1f --- /dev/null +++ b/wire-mock/clients/client-httpbin/src/test/java/com/currenjin/httpbin/HttpbinClientApplicationTests.java @@ -0,0 +1,11 @@ +package com.currenjin.httpbin; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class HttpbinClientApplicationTests { + @Test + void contextLoads() { + } +} diff --git a/wire-mock/clients/client-httpbin/src/test/resources/application.yml b/wire-mock/clients/client-httpbin/src/test/resources/application.yml new file mode 100644 index 0000000..4de10de --- /dev/null +++ b/wire-mock/clients/client-httpbin/src/test/resources/application.yml @@ -0,0 +1,4 @@ +spring: + profiles: + active: test + include: httpbin-client \ No newline at end of file diff --git a/wire-mock/settings.gradle b/wire-mock/settings.gradle index 5519c66..ac28a9a 100644 --- a/wire-mock/settings.gradle +++ b/wire-mock/settings.gradle @@ -1,5 +1,4 @@ rootProject.name = 'wire-mock' -include( - 'clients:client-core', - 'applications:internal-api' -) +include 'clients:client-core' +include 'clients:client-httpbin' +include 'applications:internal-api'