From 5c19cd579b4532db73d73d49c48df8feb2fd6ca1 Mon Sep 17 00:00:00 2001 From: dimon Date: Fri, 12 Apr 2024 16:41:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BF=D0=B5=D1=80=D0=B2=D1=8B=D0=B9=20=D0=BC?= =?UTF-8?q?=D0=B8=D0=BA=D1=80=D0=BE=D1=81=D0=B5=D1=80=D0=B2=D0=B8=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + microservice-back-commons/pom.xml | 24 +++ .../back/commons/ActionMethods.java | 38 ++++ .../back/commons/RestService.java | 36 ++++ .../buildNumber.properties | 3 + microservice-back-minus/pom.xml | 187 ++++++++++++++++++ .../java/ru/microservice/back/minus/Main.java | 23 +++ .../back/minus/RestMinusService.java | 22 +++ .../back/minus/RestMinusServiceTest.java | 75 +++++++ pom.xml | 15 ++ 10 files changed, 426 insertions(+) create mode 100644 .gitignore create mode 100644 microservice-back-commons/pom.xml create mode 100644 microservice-back-commons/src/main/java/ru/microservice/back/commons/ActionMethods.java create mode 100644 microservice-back-commons/src/main/java/ru/microservice/back/commons/RestService.java create mode 100644 microservice-back-minus/buildNumber.properties create mode 100644 microservice-back-minus/pom.xml create mode 100644 microservice-back-minus/src/main/java/ru/microservice/back/minus/Main.java create mode 100644 microservice-back-minus/src/main/java/ru/microservice/back/minus/RestMinusService.java create mode 100644 microservice-back-minus/src/test/java/ru/microservice/back/minus/RestMinusServiceTest.java create mode 100644 pom.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fe8fb74 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/microservice-back-commons/target/ +/microservice-back-minus/target/ +/microservice-back-minus/nbproject/ diff --git a/microservice-back-commons/pom.xml b/microservice-back-commons/pom.xml new file mode 100644 index 0000000..6ae936e --- /dev/null +++ b/microservice-back-commons/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + ru.microservice + microservice-back-commons + 1.0 + jar + + + 17 + 17 + + + + + + org.springframework + spring-web + 6.1.4 + jar + + + \ No newline at end of file diff --git a/microservice-back-commons/src/main/java/ru/microservice/back/commons/ActionMethods.java b/microservice-back-commons/src/main/java/ru/microservice/back/commons/ActionMethods.java new file mode 100644 index 0000000..4a5f88b --- /dev/null +++ b/microservice-back-commons/src/main/java/ru/microservice/back/commons/ActionMethods.java @@ -0,0 +1,38 @@ +package ru.microservice.back.commons; + +/** + * Типичные действия, ожидаемые от наших микросервисов + */ +public interface ActionMethods { + + /** + * Метод проверки доступности + * + * @return возвращает "pong" в ответ + */ + String ping(); + + /** + * Метод расчёта значения + * + * @param argument1 аргумент для расчётов №1 + * @param argument2 аргумент для расчётов №2 + * + * @return результат расчётов в ответ + */ + double calculate(double argument1, double argument2); + + /** + * Возвращает текущее количество обработанных запросов + * + * @return текущее количество обработанных запросов + */ + int request_amount(); + + /** + * Обнуление статистики по количеству обработанных запросов + * + * @return текущее количество обработанных запросов + */ + int reset_amount(); +} diff --git a/microservice-back-commons/src/main/java/ru/microservice/back/commons/RestService.java b/microservice-back-commons/src/main/java/ru/microservice/back/commons/RestService.java new file mode 100644 index 0000000..86e9040 --- /dev/null +++ b/microservice-back-commons/src/main/java/ru/microservice/back/commons/RestService.java @@ -0,0 +1,36 @@ +package ru.microservice.back.commons; + +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * Типовой REST сервис + */ +public abstract class RestService implements ActionMethods { + + private int requestAmount = 0; + + @GetMapping("/ping") + @Override + public @ResponseBody String ping() { + return "pong"; + } + + @GetMapping("/request_amount") + @Override + public @ResponseBody int request_amount() { + return requestAmount; + } + + @DeleteMapping("/reset_amount") + @Override + public @ResponseBody int reset_amount() { + requestAmount = 0; + return requestAmount; + } + + protected void incrementRequestAmount() { + requestAmount++; + } +} diff --git a/microservice-back-minus/buildNumber.properties b/microservice-back-minus/buildNumber.properties new file mode 100644 index 0000000..22b99f3 --- /dev/null +++ b/microservice-back-minus/buildNumber.properties @@ -0,0 +1,3 @@ +#maven.buildNumber.plugin properties file +#Fri Apr 12 00:08:04 MSK 2024 +buildNumber=1 diff --git a/microservice-back-minus/pom.xml b/microservice-back-minus/pom.xml new file mode 100644 index 0000000..b50b4f8 --- /dev/null +++ b/microservice-back-minus/pom.xml @@ -0,0 +1,187 @@ + + + 4.0.0 + + + org.springframework.boot + spring-boot-starter-parent + 3.2.3 + + + + ru.microservice + microservice-back-minus + 1.0 + jar + + + UTF-8 + 17 + 17 + ru.microservice.back.minus.Main + + + + + + ru.microservice + microservice-back-commons + 1.0 + + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + org.springframework.boot + spring-boot-test + 3.2.4 + test + jar + + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + jar + + + org.springframework.boot + spring-boot-starter-test + test + 3.1.5 + + + junit + junit + 4.13.2 + test + jar + + + org.assertj + assertj-core + 3.24.2 + test + + + + + ${project.artifactId}-${project.version}-${buildNumber} + + + + org.springframework.boot + spring-boot-maven-plugin + + ${start-class} + + + + io.fabric8 + docker-maven-plugin + 0.44.0 + + tcp://my.docker.host:2375 + my.docker.host:5000 + + + + ${project.artifactId} + microservices/back-minus:${project.version}-${buildNumber} + + + ${project.version}-${buildNumber} + + openjdk:17.0.2-jdk-slim-buster + + artifact-with-dependencies + + + java -jar /maven/${project.build.finalName}.jar + + + + linux/amd64 + + + + + + + + build + pre-integration-test + + build + + + + start + pre-integration-test + + start + + + + stop + post-integration-test + + stop + + + + repository-push + install + + push + + + + + + org.codehaus.mojo + buildnumber-maven-plugin + 1.4 + + + buildnumber + validate + + create + + + + + {0,number} + + buildNumber + + false + false + unknownbuild + + + + + + + scm:svn:http://127.0.0.1/dummy + scm:svn:https://127.0.0.1/dummy + HEAD + http://127.0.0.1/dummy + + \ No newline at end of file diff --git a/microservice-back-minus/src/main/java/ru/microservice/back/minus/Main.java b/microservice-back-minus/src/main/java/ru/microservice/back/minus/Main.java new file mode 100644 index 0000000..145b5f9 --- /dev/null +++ b/microservice-back-minus/src/main/java/ru/microservice/back/minus/Main.java @@ -0,0 +1,23 @@ +package ru.microservice.back.minus; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan +@EnableAutoConfiguration +public class Main extends SpringBootServletInitializer { + + public static void main(String[] args) { + SpringApplication.run(Main.class, args); + } + + @Override + public SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(Main.class); + } +} diff --git a/microservice-back-minus/src/main/java/ru/microservice/back/minus/RestMinusService.java b/microservice-back-minus/src/main/java/ru/microservice/back/minus/RestMinusService.java new file mode 100644 index 0000000..c09d8b6 --- /dev/null +++ b/microservice-back-minus/src/main/java/ru/microservice/back/minus/RestMinusService.java @@ -0,0 +1,22 @@ +package ru.microservice.back.minus; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.ResponseBody; +import ru.microservice.back.commons.ActionMethods; +import ru.microservice.back.commons.RestService; + +/** + * REST сервис для расчёта разницы значений + */ +@Controller +public class RestMinusService extends RestService implements ActionMethods { + + @GetMapping("/calculate/{argument1}/{argument2}") + @Override + public @ResponseBody double calculate(@PathVariable double argument1, @PathVariable double argument2) { + incrementRequestAmount(); + return argument1 - argument2; + } +} diff --git a/microservice-back-minus/src/test/java/ru/microservice/back/minus/RestMinusServiceTest.java b/microservice-back-minus/src/test/java/ru/microservice/back/minus/RestMinusServiceTest.java new file mode 100644 index 0000000..4790395 --- /dev/null +++ b/microservice-back-minus/src/test/java/ru/microservice/back/minus/RestMinusServiceTest.java @@ -0,0 +1,75 @@ +package ru.microservice.back.minus; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.context.ContextConfiguration; + +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = Main.class) +@WebMvcTest(Main.class) +public class RestMinusServiceTest { + + @Autowired + private MockMvc mvc; + + @Test + public void testPing() throws Exception { + assertThat( + mvc.perform(get("/ping")) + //.andDo(print()) + .andExpect(status().isOk()) + .andReturn() + .getResponse() + .getContentAsString() + ).isEqualTo("pong"); + } + + @Test + public void testAmount_0() throws Exception { + mvc.perform(delete("/reset_amount")); + + assertThat( + mvc.perform(get("/request_amount")) + //.andDo(print()) + .andExpect(status().isOk()) + .andReturn() + .getResponse() + .getContentAsString() + ).isEqualTo("0"); + } + + @Test + public void testAmount_1() throws Exception { + mvc.perform(delete("/reset_amount")); + mvc.perform(get("/calculate/0.0/0.0")); + + assertThat( + mvc.perform(get("/request_amount")) + //.andDo(print()) + .andExpect(status().isOk()) + .andReturn() + .getResponse() + .getContentAsString() + ).isEqualTo("1"); + } + + @Test + public void testCalc() throws Exception { + assertThat( + mvc.perform(get("/calculate/5.5/2.1")) + //.andDo(print()) + .andExpect(status().isOk()) + .andReturn() + .getResponse() + .getContentAsString() + ).isEqualTo("3.4"); + } +} diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..be51df2 --- /dev/null +++ b/pom.xml @@ -0,0 +1,15 @@ + + + 4.0.0 + ru.test + microservices + 1.0 + pom + + microservice-back-commons + microservice-back-minus + + + UTF-8 + +