From ab21e8a9bf63d70939acaa3f5351e614407ae74e Mon Sep 17 00:00:00 2001 From: sarbesh Date: Thu, 25 Jun 2020 01:13:06 +0530 Subject: [PATCH 01/14] Added Logger and made enterprise Ready --- mock-server/pom.xml | 9 +- .../java/com/mockapi/MockRestController.java | 92 -------------- .../{ => controller}/MockController.java | 4 +- .../controller/MockRestController.java | 46 +++++++ .../java/com/mockapi/dto/MockRequestDTO.java | 6 +- .../java/com/mockapi/entity/MockRequest.java | 6 +- .../java/com/mockapi/service/MockService.java | 11 ++ .../mockapi/service/impl/MockServiceImpl.java | 112 ++++++++++++++++++ 8 files changed, 183 insertions(+), 103 deletions(-) delete mode 100644 mock-server/src/main/java/com/mockapi/MockRestController.java rename mock-server/src/main/java/com/mockapi/{ => controller}/MockController.java (95%) create mode 100644 mock-server/src/main/java/com/mockapi/controller/MockRestController.java create mode 100644 mock-server/src/main/java/com/mockapi/service/MockService.java create mode 100644 mock-server/src/main/java/com/mockapi/service/impl/MockServiceImpl.java diff --git a/mock-server/pom.xml b/mock-server/pom.xml index e63e1e4..1da4df2 100644 --- a/mock-server/pom.xml +++ b/mock-server/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 1.5.6.RELEASE + 2.1.2.RELEASE @@ -69,10 +69,13 @@ org.springframework.boot spring-boot-starter-data-mongodb + - org.springframework.boot - spring-boot-starter-social-facebook + org.slf4j + slf4j-api + 1.7.25 + org.apache.httpcomponents httpcore diff --git a/mock-server/src/main/java/com/mockapi/MockRestController.java b/mock-server/src/main/java/com/mockapi/MockRestController.java deleted file mode 100644 index ac5cad5..0000000 --- a/mock-server/src/main/java/com/mockapi/MockRestController.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.mockapi; - -import org.apache.commons.lang3.StringUtils; -import org.bson.types.ObjectId; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.util.MultiValueMap; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import com.mockapi.dto.HeaderDTO; -import com.mockapi.dto.MockRequestDTO; -import com.mockapi.entity.MockRequest; -import com.mockapi.repository.NoSQLRepository; - -@RestController -public class MockRestController { - - @Autowired - private NoSQLRepository repository; - - @RequestMapping(value = "/mock/{mockId}") - public ResponseEntity mockRequest(@PathVariable String mockId) { - - MockRequest entity = repository.getByMockId(mockId); - MultiValueMap headers = getHeadersFromEntity(entity); - HttpStatus httpStatus = HttpStatus.valueOf(entity.getStatusCode()); - - if (entity.getDelay() > 0){ - try { - Thread.sleep(entity.getDelay()); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - return new ResponseEntity(entity.getBody(), headers, httpStatus); - } - - @RequestMapping(value = "/save", method = RequestMethod.POST) - //@CrossOrigin(origins = "http://localhost:4200") - public ResponseEntity save(@RequestBody MockRequestDTO request) { - - MockRequest entity = getEntityFromDTO(request); - - repository.save(entity); - - String url = new StringBuilder("http://localhost:8080/") - .append("mock/") - .append(entity.getMockId()) - .toString(); - - return new ResponseEntity(url, HttpStatus.OK); - } - - private MultiValueMap getHeadersFromEntity(MockRequest entity) { - MultiValueMap headers = new HttpHeaders(); - - for (HeaderDTO header: entity.getHeaders()){ - headers.add(header.getName(), header.getValue()); - } - - if (StringUtils.isNotEmpty(entity.getContentType())){ - headers.add("Content-Type", entity.getContentType()); - headers.add("Accept-Encoding", entity.getEncoding()); - } - return headers; - } - - private MockRequest getEntityFromDTO(MockRequestDTO request) { - - MockRequest entity = new MockRequest(); - ObjectId id = new ObjectId(); - - entity.setMockId(id.toString()); - entity.setBody(request.getBody()); - entity.setContentType(request.getContentType()); - entity.setEncoding(request.getEncoding()); - entity.setStatusCode(request.getStatusCode()); - entity.setHeaders(request.getHeaders()); - entity.setDelay(request.getDelay()); - - return entity; - } - -} \ No newline at end of file diff --git a/mock-server/src/main/java/com/mockapi/MockController.java b/mock-server/src/main/java/com/mockapi/controller/MockController.java similarity index 95% rename from mock-server/src/main/java/com/mockapi/MockController.java rename to mock-server/src/main/java/com/mockapi/controller/MockController.java index 4eec9d6..6570bd2 100644 --- a/mock-server/src/main/java/com/mockapi/MockController.java +++ b/mock-server/src/main/java/com/mockapi/controller/MockController.java @@ -1,4 +1,4 @@ -package com.mockapi; +package com.mockapi.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -19,6 +19,6 @@ public String home(Model model) { model.addAttribute("mockReq", new MockRequestDTO()); return "welcome"; } - + } \ No newline at end of file diff --git a/mock-server/src/main/java/com/mockapi/controller/MockRestController.java b/mock-server/src/main/java/com/mockapi/controller/MockRestController.java new file mode 100644 index 0000000..ad558ad --- /dev/null +++ b/mock-server/src/main/java/com/mockapi/controller/MockRestController.java @@ -0,0 +1,46 @@ +package com.mockapi.controller; + +import com.mockapi.service.MockService; +import org.apache.commons.lang3.StringUtils; +import org.bson.types.ObjectId; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.util.MultiValueMap; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.mockapi.dto.HeaderDTO; +import com.mockapi.dto.MockRequestDTO; +import com.mockapi.entity.MockRequest; +import com.mockapi.repository.NoSQLRepository; + +@RestController +public class MockRestController { + + @Autowired + private MockService mockService; + + public static final Logger LOGGER = LoggerFactory.getLogger(MockRestController.class); + + @RequestMapping(value = "/mock/{mockId}") + public ResponseEntity mockRequest(@PathVariable String mockId) { + LOGGER.info("Received Request at mock endpoint /mock/{}", mockId); + return mockService.getMockRequest(mockId); + } + + @RequestMapping(value = "/save", method = RequestMethod.POST) + //@CrossOrigin(origins = "http://localhost:4200") + public ResponseEntity save(@RequestBody MockRequestDTO request) { + LOGGER.info("Got mock {} to be saved to DB", request); + return mockService.saveMockRequest(request); + } + +} \ No newline at end of file diff --git a/mock-server/src/main/java/com/mockapi/dto/MockRequestDTO.java b/mock-server/src/main/java/com/mockapi/dto/MockRequestDTO.java index 4b33af6..0e04855 100644 --- a/mock-server/src/main/java/com/mockapi/dto/MockRequestDTO.java +++ b/mock-server/src/main/java/com/mockapi/dto/MockRequestDTO.java @@ -9,7 +9,7 @@ public class MockRequestDTO { private int statusCode; private String contentType; private String encoding; - private String body; + private Object body; private List headers; private int delay; @@ -45,11 +45,11 @@ public void setEncoding(String encoding) { this.encoding = encoding; } - public String getBody() { + public Object getBody() { return body; } - public void setBody(String body) { + public void setBody(Object body) { this.body = body; } diff --git a/mock-server/src/main/java/com/mockapi/entity/MockRequest.java b/mock-server/src/main/java/com/mockapi/entity/MockRequest.java index 3a8f2be..890bbd4 100644 --- a/mock-server/src/main/java/com/mockapi/entity/MockRequest.java +++ b/mock-server/src/main/java/com/mockapi/entity/MockRequest.java @@ -15,7 +15,7 @@ public class MockRequest { private int statusCode; private String contentType; private String encoding; - private String body; + private Object body; private List headers; private int delay; @@ -43,10 +43,10 @@ public String getEncoding() { public void setEncoding(String encoding) { this.encoding = encoding; } - public String getBody() { + public Object getBody() { return body; } - public void setBody(String body) { + public void setBody(Object body) { this.body = body; } public List getHeaders() { diff --git a/mock-server/src/main/java/com/mockapi/service/MockService.java b/mock-server/src/main/java/com/mockapi/service/MockService.java new file mode 100644 index 0000000..7da528e --- /dev/null +++ b/mock-server/src/main/java/com/mockapi/service/MockService.java @@ -0,0 +1,11 @@ +package com.mockapi.service; + +import com.mockapi.dto.MockRequestDTO; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +@Service +public interface MockService { + public ResponseEntity getMockRequest(String mockId); + public ResponseEntity saveMockRequest(MockRequestDTO request); +} diff --git a/mock-server/src/main/java/com/mockapi/service/impl/MockServiceImpl.java b/mock-server/src/main/java/com/mockapi/service/impl/MockServiceImpl.java new file mode 100644 index 0000000..db5f770 --- /dev/null +++ b/mock-server/src/main/java/com/mockapi/service/impl/MockServiceImpl.java @@ -0,0 +1,112 @@ +package com.mockapi.service.impl; + +import com.mockapi.dto.HeaderDTO; +import com.mockapi.dto.MockRequestDTO; +import com.mockapi.entity.MockRequest; +import com.mockapi.repository.NoSQLRepository; +import com.mockapi.service.MockService; +import org.apache.commons.lang3.StringUtils; +import org.bson.types.ObjectId; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +@Service +public class MockServiceImpl implements MockService { + + public static final Logger LOGGER = LoggerFactory.getLogger(MockServiceImpl.class); + + @Autowired + private NoSQLRepository repository; + + @Autowired + Environment environment; + + @Override + public ResponseEntity getMockRequest(String mockId) { + MockRequest entity = repository.getByMockId(mockId); + if (entity != null) { + LOGGER.debug("Got entity {} for mockID {} ", entity.toString(), mockId); + MultiValueMap headers = getHeadersFromEntity(entity); + HttpStatus httpStatus = HttpStatus.valueOf(entity.getStatusCode()); + LOGGER.debug("Entering Delay period of {}", entity.getDelay()); + if (entity.getDelay() > 0){ + try { + Thread.sleep(entity.getDelay()); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + return new ResponseEntity(entity.getBody(), headers, httpStatus); + } else { + LOGGER.error("No mock Response found for {}", mockId); + return new ResponseEntity(HttpStatus.NOT_FOUND); + } + } + + private MultiValueMap getHeadersFromEntity(MockRequest entity) { + MultiValueMap headers = new LinkedMultiValueMap<>(); + + for (HeaderDTO header: entity.getHeaders()){ + headers.add(header.getName(), header.getValue()); + } + + if (StringUtils.isNotEmpty(entity.getContentType())){ + headers.add("Content-Type", entity.getContentType()); + headers.add("Accept-Encoding", entity.getEncoding()); + } + LOGGER.debug("Headers length {} for entity {}",headers.size(),entity.getMockId()); + return headers; + } + + @Override + public ResponseEntity saveMockRequest(MockRequestDTO request) { + MockRequest entity = getEntityFromDTO(request); + + LOGGER.debug("Saving entity {}", entity.toString()); + repository.save(entity); + + String url = null; + try { + url = "http://" + InetAddress.getLocalHost().getHostName() + ":" + environment.getProperty("server.port") + + "mock/" + + entity.getMockId(); + } catch (UnknownHostException e) { + LOGGER.error("Unable to resolve current hostname "); + e.printStackTrace(); + } + + return new ResponseEntity(url, HttpStatus.OK); + } + + private MockRequest getEntityFromDTO(MockRequestDTO request) { + + MockRequest entity = new MockRequest(); + + if (request.getMockId() == null) { + LOGGER.debug("No mockID passed in request body, generating mockID"); + ObjectId id = new ObjectId(); + LOGGER.info("Generated MockId: {}", id.toString()); + entity.setMockId(id.toString()); + } else entity.setMockId(request.getMockId()); + + entity.setBody(request.getBody()); + entity.setContentType(request.getContentType()); + entity.setEncoding(request.getEncoding()); + entity.setStatusCode(request.getStatusCode()); + entity.setHeaders(request.getHeaders()); + entity.setDelay(request.getDelay()); + + return entity; + } +} From f68a3dfcb6eb602ae82d2fad107ec84eb2d8b9f2 Mon Sep 17 00:00:00 2001 From: sarbesh Date: Fri, 26 Jun 2020 00:40:23 +0530 Subject: [PATCH 02/14] Added MockRequest --- .../mockapi/controller/MockController.java | 9 +- .../controller/MockRestController.java | 74 +++++--- .../main/java/com/mockapi/dto/HeaderDTO.java | 8 + ...ckRequestDTO.java => MockResponseDTO.java} | 4 +- .../main/java/com/mockapi/dto/RequestDTO.java | 116 ++++++++++++ .../java/com/mockapi/entity/MockRequest.java | 170 ++++++++++++------ .../java/com/mockapi/entity/MockResponse.java | 77 ++++++++ ...itory.java => NoSQLRequestRepository.java} | 8 +- .../repository/NoSQLResponseRepository.java | 10 ++ .../java/com/mockapi/service/MockService.java | 12 +- .../mockapi/service/impl/MockServiceImpl.java | 138 +++++++++----- .../java/com/mockapi/utils/ServiceUtils.java | 99 ++++++++++ .../src/main/resources/application.properties | 3 +- 13 files changed, 585 insertions(+), 143 deletions(-) rename mock-server/src/main/java/com/mockapi/dto/{MockRequestDTO.java => MockResponseDTO.java} (89%) create mode 100644 mock-server/src/main/java/com/mockapi/dto/RequestDTO.java create mode 100644 mock-server/src/main/java/com/mockapi/entity/MockResponse.java rename mock-server/src/main/java/com/mockapi/repository/{NoSQLRepository.java => NoSQLRequestRepository.java} (51%) create mode 100644 mock-server/src/main/java/com/mockapi/repository/NoSQLResponseRepository.java create mode 100644 mock-server/src/main/java/com/mockapi/utils/ServiceUtils.java diff --git a/mock-server/src/main/java/com/mockapi/controller/MockController.java b/mock-server/src/main/java/com/mockapi/controller/MockController.java index 6570bd2..e0daa5b 100644 --- a/mock-server/src/main/java/com/mockapi/controller/MockController.java +++ b/mock-server/src/main/java/com/mockapi/controller/MockController.java @@ -2,21 +2,16 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import com.mockapi.dto.MockRequestDTO; +import com.mockapi.dto.MockResponseDTO; @Controller public class MockController { @RequestMapping(value = "/welcome") public String home(Model model) { - model.addAttribute("mockReq", new MockRequestDTO()); + model.addAttribute("mockReq", new MockResponseDTO()); return "welcome"; } diff --git a/mock-server/src/main/java/com/mockapi/controller/MockRestController.java b/mock-server/src/main/java/com/mockapi/controller/MockRestController.java index ad558ad..a3f7cbc 100644 --- a/mock-server/src/main/java/com/mockapi/controller/MockRestController.java +++ b/mock-server/src/main/java/com/mockapi/controller/MockRestController.java @@ -1,28 +1,16 @@ package com.mockapi.controller; +import com.mockapi.dto.MockResponseDTO; +import com.mockapi.dto.RequestDTO; import com.mockapi.service.MockService; -import org.apache.commons.lang3.StringUtils; -import org.bson.types.ObjectId; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.util.MultiValueMap; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import com.mockapi.dto.HeaderDTO; -import com.mockapi.dto.MockRequestDTO; -import com.mockapi.entity.MockRequest; -import com.mockapi.repository.NoSQLRepository; +import org.springframework.web.bind.annotation.*; @RestController +@RequestMapping("/api") public class MockRestController { @Autowired @@ -30,17 +18,59 @@ public class MockRestController { public static final Logger LOGGER = LoggerFactory.getLogger(MockRestController.class); - @RequestMapping(value = "/mock/{mockId}") - public ResponseEntity mockRequest(@PathVariable String mockId) { + @GetMapping(value = "/mock/{mockId}") + public ResponseEntity mockRequestGet(@PathVariable String mockId) { LOGGER.info("Received Request at mock endpoint /mock/{}", mockId); - return mockService.getMockRequest(mockId); + return mockService.getMockResponse(mockId); } - @RequestMapping(value = "/save", method = RequestMethod.POST) + @PostMapping(value = "/mock/{mockId}") + public ResponseEntity mockRequestPost(@PathVariable String mockId, @RequestBody Object o) { + + LOGGER.info("Received Request at mock endpoint /mock/{}", mockId); + return mockService.getMockResponse(mockId); + } + + @PostMapping(value = "/save/response") + //@CrossOrigin(origins = "http://localhost:4200") + public ResponseEntity saveMock(@RequestBody MockResponseDTO request) { + LOGGER.info("Got mock {} to be saved to DB", request); + return mockService.saveMockResponse(request); + } + + @PostMapping(value = "/delete/response") + //@CrossOrigin(origins = "http://localhost:4200") + public ResponseEntity deleteMock(@RequestBody MockResponseDTO request) { + LOGGER.info("Got mock {} to be deleted from DB", request); + return mockService.deleteMockResponse(request); + } + + @PostMapping(value = "/test") + public ResponseEntity test(@RequestBody RequestDTO requestDTO){ + LOGGER.info("testing endpoint: {}/{}", requestDTO.getHostName(), requestDTO.getEndpoint()); + return mockService.testDTOEndpoint(requestDTO); + } + + @PostMapping(value = "/save/request") //@CrossOrigin(origins = "http://localhost:4200") - public ResponseEntity save(@RequestBody MockRequestDTO request) { + public ResponseEntity saveMockRequest(@RequestBody RequestDTO request) { LOGGER.info("Got mock {} to be saved to DB", request); - return mockService.saveMockRequest(request); + return mockService.saveMockRequest(request); + } + + @PostMapping(value = "/delete/request") + //@CrossOrigin(origins = "http://localhost:4200") + public ResponseEntity deleteMock(@RequestBody RequestDTO request) { + LOGGER.info("Got mock {} to be deleted from DB", request); + return mockService.deleteMockRequest(request); + } + + @GetMapping(value = "/test/{mockId}") + public ResponseEntity testMockId(@PathVariable String mockId){ + LOGGER.info("testing mockID {} ", mockId); + return mockService.testRequestMockId(mockId); } + + } \ No newline at end of file diff --git a/mock-server/src/main/java/com/mockapi/dto/HeaderDTO.java b/mock-server/src/main/java/com/mockapi/dto/HeaderDTO.java index acebf88..c6e3e66 100644 --- a/mock-server/src/main/java/com/mockapi/dto/HeaderDTO.java +++ b/mock-server/src/main/java/com/mockapi/dto/HeaderDTO.java @@ -21,4 +21,12 @@ public void setValue(String value) { public String toString() { return "HeaderDTO [name=" + name + ", value=" + value + "]"; } + + public HeaderDTO(String name, String value) { + this.name = name; + this.value = value; + } + + public HeaderDTO() { + } } diff --git a/mock-server/src/main/java/com/mockapi/dto/MockRequestDTO.java b/mock-server/src/main/java/com/mockapi/dto/MockResponseDTO.java similarity index 89% rename from mock-server/src/main/java/com/mockapi/dto/MockRequestDTO.java rename to mock-server/src/main/java/com/mockapi/dto/MockResponseDTO.java index 0e04855..0077167 100644 --- a/mock-server/src/main/java/com/mockapi/dto/MockRequestDTO.java +++ b/mock-server/src/main/java/com/mockapi/dto/MockResponseDTO.java @@ -2,7 +2,7 @@ import java.util.List; -public class MockRequestDTO { +public class MockResponseDTO { private String mockId; @@ -71,7 +71,7 @@ public void setDelay(int delay) { @Override public String toString() { - return "MockRequestDTO [mockId=" + mockId + ", statusCode=" + statusCode + ", contentType=" + contentType + return "MockResponseDTO [mockId=" + mockId + ", statusCode=" + statusCode + ", contentType=" + contentType + ", encoding=" + encoding + ", body=" + body + ", headers=" + headers + "]"; } diff --git a/mock-server/src/main/java/com/mockapi/dto/RequestDTO.java b/mock-server/src/main/java/com/mockapi/dto/RequestDTO.java new file mode 100644 index 0000000..7a1f457 --- /dev/null +++ b/mock-server/src/main/java/com/mockapi/dto/RequestDTO.java @@ -0,0 +1,116 @@ +package com.mockapi.dto; + +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; + +import java.util.List; + +public class RequestDTO { + + private String mockID; + private String hostName; + private String endpoint; + private String schema; + private String httpMethod; + private String contentType; + private String encoding; + private Object body; + private List headers; + private String accept; + + public String getMockID() { + return mockID; + } + + public void setMockID(String mockID) { + this.mockID = mockID; + } + + public String getAccept() { + return accept; + } + + public void setAccept(String accept) { + this.accept = accept; + } + + public String getHostName() { + return hostName; + } + + public void setHostName(String hostName) { + this.hostName = hostName; + } + + public String getEndpoint() { + return endpoint; + } + + public void setEndpoint(String endpoint) { + this.endpoint = endpoint; + } + + public String getSchema() { + return schema; + } + + public void setSchema(String schema) { + this.schema = schema; + } + + public String getHttpMethod() { + return httpMethod; + } + + public void setHttpMethod(String httpMethod) { + this.httpMethod = httpMethod; + } + + public String getContentType() { + return contentType; + } + + public void setContentType(String contentType) { + this.contentType = contentType; + } + + public String getEncoding() { + return encoding; + } + + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + public Object getBody() { + return body; + } + + public void setBody(Object body) { + this.body = body; + } + + public List getHeaders() { + return headers; + } + + public void setHeaders(List headers) { + this.headers = headers; + } + + @Override + public String toString() { + return "RequestDTO{" + + "mockID='" + mockID + '\'' + + ", hostName='" + hostName + '\'' + + ", endpoint='" + endpoint + '\'' + + ", schema='" + schema + '\'' + + ", httpMethod='" + httpMethod + '\'' + + ", contentType='" + contentType + '\'' + + ", encoding='" + encoding + '\'' + + ", body=" + body + + ", headers=" + headers + + ", accept='" + accept + '\'' + + '}'; + } +} diff --git a/mock-server/src/main/java/com/mockapi/entity/MockRequest.java b/mock-server/src/main/java/com/mockapi/entity/MockRequest.java index 890bbd4..ac6e32a 100644 --- a/mock-server/src/main/java/com/mockapi/entity/MockRequest.java +++ b/mock-server/src/main/java/com/mockapi/entity/MockRequest.java @@ -1,64 +1,118 @@ package com.mockapi.entity; -import java.util.List; -import java.util.Map; - +import com.mockapi.dto.HeaderDTO; import org.springframework.data.annotation.Id; +import org.springframework.http.HttpMethod; -import com.mockapi.dto.HeaderDTO; +import java.util.List; public class MockRequest { - - @Id - private String mockId; - - private int statusCode; - private String contentType; - private String encoding; - private Object body; - private List headers; - private int delay; - - public String getMockId() { - return mockId; - } - public void setMockId(String mockId) { - this.mockId = mockId; - } - public int getStatusCode() { - return statusCode; - } - public void setStatusCode(int statusCode) { - this.statusCode = statusCode; - } - public String getContentType() { - return contentType; - } - public void setContentType(String contentType) { - this.contentType = contentType; - } - public String getEncoding() { - return encoding; - } - public void setEncoding(String encoding) { - this.encoding = encoding; - } - public Object getBody() { - return body; - } - public void setBody(Object body) { - this.body = body; - } - public List getHeaders() { - return headers; - } - public void setHeaders(List headers) { - this.headers = headers; - } - public int getDelay() { - return delay; - } - public void setDelay(int delay) { - this.delay = delay; - } -} \ No newline at end of file + @Id + private String mockID; + private String hostName; + private String endpoint; + private String schema; + private String httpMethod; +// private String contentType; +// private String encoding; + private Object body; + private List headers; +// private String accept; + + public String getMockID() { + return mockID; + } + + public void setMockID(String mockID) { + this.mockID = mockID; + } + + public String getHostName() { + return hostName; + } + + public void setHostName(String hostName) { + this.hostName = hostName; + } + + public String getEndpoint() { + return endpoint; + } + + public void setEndpoint(String endpoint) { + this.endpoint = endpoint; + } + + public String getSchema() { + return schema; + } + + public void setSchema(String schema) { + this.schema = schema; + } + + public String getHttpMethod() { + return httpMethod; + } + + public void setHttpMethod(String httpMethod) { + this.httpMethod = httpMethod; + } + +// public String getContentType() { +// return contentType; +// } +// +// public void setContentType(String contentType) { +// this.contentType = contentType; +// } +// +// public String getEncoding() { +// return encoding; +// } +// +// public void setEncoding(String encoding) { +// this.encoding = encoding; +// } + + public Object getBody() { + return body; + } + + public void setBody(Object body) { + this.body = body; + } + + public List getHeaders() { + return headers; + } + + public void setHeaders(List headers) { + this.headers = headers; + } + +// public String getAccept() { +// return accept; +// } +// +// public void setAccept(String accept) { +// this.accept = accept; +// } + + @Override + public String toString() { + return "MockRequest{" + + "mockID='" + mockID + '\'' + + ", hostName='" + hostName + '\'' + + ", endpoint='" + endpoint + '\'' + + ", schema='" + schema + '\'' + + ", httpMethod=" + httpMethod + +// ", contentType='" + contentType + '\'' + +// ", encoding='" + encoding + '\'' + + ", body=" + body + + ", headers=" + headers + +// ", accept='" + accept + '\'' + + '}'; + } + +} diff --git a/mock-server/src/main/java/com/mockapi/entity/MockResponse.java b/mock-server/src/main/java/com/mockapi/entity/MockResponse.java new file mode 100644 index 0000000..0efcaa5 --- /dev/null +++ b/mock-server/src/main/java/com/mockapi/entity/MockResponse.java @@ -0,0 +1,77 @@ +package com.mockapi.entity; + +import java.util.List; +import java.util.Map; + +import org.springframework.data.annotation.Id; + +import com.mockapi.dto.HeaderDTO; + +public class MockResponse { + + @Id + private String mockId; + + private int statusCode; + private String contentType; + private String encoding; + private Object body; + private List headers; + private int delay; + + public String getMockId() { + return mockId; + } + public void setMockId(String mockId) { + this.mockId = mockId; + } + public int getStatusCode() { + return statusCode; + } + public void setStatusCode(int statusCode) { + this.statusCode = statusCode; + } + public String getContentType() { + return contentType; + } + public void setContentType(String contentType) { + this.contentType = contentType; + } + public String getEncoding() { + return encoding; + } + public void setEncoding(String encoding) { + this.encoding = encoding; + } + public Object getBody() { + return body; + } + public void setBody(Object body) { + this.body = body; + } + public List getHeaders() { + return headers; + } + public void setHeaders(List headers) { + this.headers = headers; + } + public int getDelay() { + return delay; + } + public void setDelay(int delay) { + this.delay = delay; + } + + @Override + public String toString() { + return "MockResponse{" + + "mockId='" + mockId + '\'' + + ", statusCode=" + statusCode + + ", contentType='" + contentType + '\'' + + ", encoding='" + encoding + '\'' + + ", body=" + body + + ", headers=" + headers + + ", delay=" + delay + + '}'; + } +} \ No newline at end of file diff --git a/mock-server/src/main/java/com/mockapi/repository/NoSQLRepository.java b/mock-server/src/main/java/com/mockapi/repository/NoSQLRequestRepository.java similarity index 51% rename from mock-server/src/main/java/com/mockapi/repository/NoSQLRepository.java rename to mock-server/src/main/java/com/mockapi/repository/NoSQLRequestRepository.java index c583d91..3daa8de 100644 --- a/mock-server/src/main/java/com/mockapi/repository/NoSQLRepository.java +++ b/mock-server/src/main/java/com/mockapi/repository/NoSQLRequestRepository.java @@ -1,11 +1,9 @@ package com.mockapi.repository; -import org.springframework.data.mongodb.repository.MongoRepository; - import com.mockapi.entity.MockRequest; +import org.springframework.data.mongodb.repository.MongoRepository; -public interface NoSQLRepository extends MongoRepository { - - public MockRequest getByMockId(String mockId); +public interface NoSQLRequestRepository extends MongoRepository { + public MockRequest getByMockID(String mockId); } diff --git a/mock-server/src/main/java/com/mockapi/repository/NoSQLResponseRepository.java b/mock-server/src/main/java/com/mockapi/repository/NoSQLResponseRepository.java new file mode 100644 index 0000000..04cb220 --- /dev/null +++ b/mock-server/src/main/java/com/mockapi/repository/NoSQLResponseRepository.java @@ -0,0 +1,10 @@ +package com.mockapi.repository; + +import com.mockapi.entity.MockResponse; +import org.springframework.data.mongodb.repository.MongoRepository; + +public interface NoSQLResponseRepository extends MongoRepository { + + public MockResponse getByMockId(String mockId); + +} diff --git a/mock-server/src/main/java/com/mockapi/service/MockService.java b/mock-server/src/main/java/com/mockapi/service/MockService.java index 7da528e..80d4a74 100644 --- a/mock-server/src/main/java/com/mockapi/service/MockService.java +++ b/mock-server/src/main/java/com/mockapi/service/MockService.java @@ -1,11 +1,17 @@ package com.mockapi.service; -import com.mockapi.dto.MockRequestDTO; +import com.mockapi.dto.MockResponseDTO; +import com.mockapi.dto.RequestDTO; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; @Service public interface MockService { - public ResponseEntity getMockRequest(String mockId); - public ResponseEntity saveMockRequest(MockRequestDTO request); + public ResponseEntity getMockResponse(String mockId); + public ResponseEntity saveMockResponse(MockResponseDTO request); + public ResponseEntity deleteMockResponse(MockResponseDTO request); + public ResponseEntity testDTOEndpoint(RequestDTO request); + public ResponseEntity testRequestMockId(String mockId); + public ResponseEntity deleteMockRequest(RequestDTO request); + public ResponseEntity saveMockRequest(RequestDTO requestDTO); } diff --git a/mock-server/src/main/java/com/mockapi/service/impl/MockServiceImpl.java b/mock-server/src/main/java/com/mockapi/service/impl/MockServiceImpl.java index db5f770..571e3b5 100644 --- a/mock-server/src/main/java/com/mockapi/service/impl/MockServiceImpl.java +++ b/mock-server/src/main/java/com/mockapi/service/impl/MockServiceImpl.java @@ -1,24 +1,29 @@ package com.mockapi.service.impl; -import com.mockapi.dto.HeaderDTO; -import com.mockapi.dto.MockRequestDTO; +import com.mockapi.dto.MockResponseDTO; +import com.mockapi.dto.RequestDTO; import com.mockapi.entity.MockRequest; -import com.mockapi.repository.NoSQLRepository; +import com.mockapi.entity.MockResponse; +import com.mockapi.repository.NoSQLRequestRepository; +import com.mockapi.repository.NoSQLResponseRepository; import com.mockapi.service.MockService; +import com.mockapi.utils.ServiceUtils; import org.apache.commons.lang3.StringUtils; -import org.bson.types.ObjectId; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; -import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; +import org.springframework.http.RequestEntity; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; import java.net.InetAddress; +import java.net.URI; import java.net.UnknownHostException; @Service @@ -27,17 +32,29 @@ public class MockServiceImpl implements MockService { public static final Logger LOGGER = LoggerFactory.getLogger(MockServiceImpl.class); @Autowired - private NoSQLRepository repository; + private NoSQLResponseRepository responseRepository; @Autowired - Environment environment; + private NoSQLRequestRepository requestRepository; - @Override - public ResponseEntity getMockRequest(String mockId) { - MockRequest entity = repository.getByMockId(mockId); + @Autowired + private Environment environment; + + @Autowired + private RestTemplate restTemplate; + + @Autowired + private ServiceUtils serviceUtils; + + public MockServiceImpl(ServiceUtils serviceUtils) { + this.serviceUtils = serviceUtils; + } + + public ResponseEntity getMockResponse(String mockId) { + MockResponse entity = responseRepository.getByMockId(mockId); if (entity != null) { LOGGER.debug("Got entity {} for mockID {} ", entity.toString(), mockId); - MultiValueMap headers = getHeadersFromEntity(entity); + MultiValueMap headers = serviceUtils.getHeadersFromEntity(entity); HttpStatus httpStatus = HttpStatus.valueOf(entity.getStatusCode()); LOGGER.debug("Entering Delay period of {}", entity.getDelay()); if (entity.getDelay() > 0){ @@ -54,59 +71,90 @@ public ResponseEntity getMockRequest(String mockId) { } } - private MultiValueMap getHeadersFromEntity(MockRequest entity) { - MultiValueMap headers = new LinkedMultiValueMap<>(); + public ResponseEntity saveMockResponse(MockResponseDTO request) { + MockResponse entity = serviceUtils.getResponseEntityFromDTO(request); - for (HeaderDTO header: entity.getHeaders()){ - headers.add(header.getName(), header.getValue()); + LOGGER.debug("Saving entity {}", entity.toString()); + responseRepository.save(entity); + + String url = null; + try { + url = "http://" + InetAddress.getLocalHost().getHostName() + ":" + environment.getProperty("server.port") + + "/mock/" + + entity.getMockId(); + } catch (UnknownHostException e) { + LOGGER.error("Unable to resolve current hostname "); + e.printStackTrace(); } - if (StringUtils.isNotEmpty(entity.getContentType())){ - headers.add("Content-Type", entity.getContentType()); - headers.add("Accept-Encoding", entity.getEncoding()); + return new ResponseEntity(url, HttpStatus.OK); + } + + public ResponseEntity deleteMockResponse(MockResponseDTO request) { + try { + MockResponse entity = responseRepository.getByMockId(request.getMockId()); + LOGGER.debug("Got entity to be deleted: {}", entity.toString()); + LOGGER.info("Deleting {}",entity.getMockId()); + responseRepository.delete(entity); + return new ResponseEntity<>( + "{\"message\":\"Deletion Successful \" }", HttpStatus.OK); + } catch (Exception e){ + LOGGER.error("Error occured while deleting: {}", request.getMockId()); + return new ResponseEntity<>( + "{\"message\":\"Failed to delete" +request.getMockId()+" \" }", HttpStatus.NO_CONTENT); } - LOGGER.debug("Headers length {} for entity {}",headers.size(),entity.getMockId()); - return headers; } - @Override - public ResponseEntity saveMockRequest(MockRequestDTO request) { - MockRequest entity = getEntityFromDTO(request); + public ResponseEntity testEndpoint(MockRequest request) { + URI uri = serviceUtils.generateUri(request.getHostName(), request.getEndpoint(), request.getSchema()); + MultiValueMap headers = new LinkedMultiValueMap<>(); + request.getHeaders().forEach(headerDTO -> { + headers.add(headerDTO.getName(),headerDTO.getValue()); + }); + RequestEntity requestEntity; + requestEntity = new RequestEntity<>(request.getBody(),headers, HttpMethod.resolve(request.getHttpMethod()),uri); + return restTemplate.exchange(requestEntity, Object.class); + } + + public ResponseEntity testDTOEndpoint(RequestDTO requestDTO){ + MockRequest mockRequestFromDTO = serviceUtils.getMockRequestFromDTO(requestDTO); + return testEndpoint(mockRequestFromDTO); + } + public ResponseEntity saveMockRequest(RequestDTO requestDTO){ + MockRequest entity = serviceUtils.getMockRequestFromDTO(requestDTO); LOGGER.debug("Saving entity {}", entity.toString()); - repository.save(entity); + requestRepository.save(entity); String url = null; try { url = "http://" + InetAddress.getLocalHost().getHostName() + ":" + environment.getProperty("server.port") + - "mock/" + - entity.getMockId(); + "/mock/" + + entity.getMockID(); } catch (UnknownHostException e) { LOGGER.error("Unable to resolve current hostname "); e.printStackTrace(); } - return new ResponseEntity(url, HttpStatus.OK); } - private MockRequest getEntityFromDTO(MockRequestDTO request) { - - MockRequest entity = new MockRequest(); - - if (request.getMockId() == null) { - LOGGER.debug("No mockID passed in request body, generating mockID"); - ObjectId id = new ObjectId(); - LOGGER.info("Generated MockId: {}", id.toString()); - entity.setMockId(id.toString()); - } else entity.setMockId(request.getMockId()); - - entity.setBody(request.getBody()); - entity.setContentType(request.getContentType()); - entity.setEncoding(request.getEncoding()); - entity.setStatusCode(request.getStatusCode()); - entity.setHeaders(request.getHeaders()); - entity.setDelay(request.getDelay()); + public ResponseEntity deleteMockRequest(RequestDTO request) { + try { + MockRequest entity = requestRepository.getByMockID(request.getMockID()); + LOGGER.debug("Got entity to be deleted: {}", entity.toString()); + LOGGER.info("Deleting {}",entity.getMockID()); + requestRepository.delete(entity); + return new ResponseEntity<>( + "{\"message\":\"Deletion Successful \" }", HttpStatus.OK); + } catch (Exception e){ + LOGGER.error("Error occured while deleting: {}", request.getMockID()); + return new ResponseEntity<>( + "{\"message\":\"Failed to delete" +request.getMockID()+" \" }", HttpStatus.NO_CONTENT); + } + } - return entity; + public ResponseEntity testRequestMockId(String mockId){ + MockRequest entity = requestRepository.getByMockID(mockId); + return testEndpoint(entity); } } diff --git a/mock-server/src/main/java/com/mockapi/utils/ServiceUtils.java b/mock-server/src/main/java/com/mockapi/utils/ServiceUtils.java new file mode 100644 index 0000000..2194091 --- /dev/null +++ b/mock-server/src/main/java/com/mockapi/utils/ServiceUtils.java @@ -0,0 +1,99 @@ +package com.mockapi.utils; + +import com.mockapi.dto.HeaderDTO; +import com.mockapi.dto.MockResponseDTO; +import com.mockapi.dto.RequestDTO; +import com.mockapi.entity.MockRequest; +import com.mockapi.entity.MockResponse; +import org.apache.commons.lang3.StringUtils; +import org.bson.types.ObjectId; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponents; +import org.springframework.web.util.UriComponentsBuilder; + +import java.net.URI; +import java.util.List; + +@Component +public class ServiceUtils { + + public static final Logger LOGGER = LoggerFactory.getLogger(ServiceUtils.class); + + public MockResponse getResponseEntityFromDTO(MockResponseDTO request) { + + MockResponse entity = new MockResponse(); + + if (request.getMockId() == null) { + LOGGER.debug("No mockID passed in request body, generating mockID"); + ObjectId id = new ObjectId(); + LOGGER.info("Generated MockId: {}", id.toString()); + entity.setMockId(id.toString()); + } else entity.setMockId(request.getMockId()); + + entity.setBody(request.getBody()); + entity.setContentType(request.getContentType()); + entity.setEncoding(request.getEncoding()); + entity.setStatusCode(request.getStatusCode()); + entity.setHeaders(request.getHeaders()); + entity.setDelay(request.getDelay()); + + return entity; + } + + public MultiValueMap getHeadersFromEntity(MockResponse entity) { + MultiValueMap headers = new LinkedMultiValueMap<>(); + + for (HeaderDTO header: entity.getHeaders()){ + headers.add(header.getName(), header.getValue()); + } + + if (StringUtils.isNotEmpty(entity.getContentType())){ + headers.add("Content-Type", entity.getContentType()); + } + if (StringUtils.isNotEmpty(entity.getEncoding())){ + headers.add("Accept-Encoding", entity.getEncoding()); + } + LOGGER.debug("Headers length {} for entity {}",headers.size(),entity.getMockId()); + return headers; + } + + public URI generateUri(String hostname, String endPoint, String schema){ + UriComponents uriComponents = UriComponentsBuilder.newInstance() + .scheme(schema).host(hostname).path(endPoint).build(); + return uriComponents.toUri(); + } + + public MockRequest getMockRequestFromDTO(RequestDTO requestDTO){ + MockRequest mockRequest = new MockRequest(); + mockRequest.setBody(requestDTO.getBody()); + List headerDTOList = requestDTO.getHeaders(); + if (StringUtils.isNotEmpty(requestDTO.getEncoding())){ + headerDTOList.add(new HeaderDTO("Accept-Encoding", requestDTO.getEncoding())); + } + if (StringUtils.isNotEmpty(requestDTO.getContentType())){ + headerDTOList.add(new HeaderDTO("Content-Type", requestDTO.getContentType())); + } + if (StringUtils.isNotEmpty(requestDTO.getAccept())){ + headerDTOList.add(new HeaderDTO("Accept", requestDTO.getAccept())); + } + mockRequest.setEndpoint(requestDTO.getEndpoint()); + mockRequest.setHostName(requestDTO.getHostName()); + mockRequest.setHeaders(headerDTOList); + mockRequest.setSchema(requestDTO.getSchema()); + mockRequest.setMockID(requestDTO.getMockID()); + mockRequest.setHttpMethod(requestDTO.getHttpMethod()); + return mockRequest; + } + + @Bean + public RestTemplate getRestTemplate() { + return new RestTemplate(); + } + +} diff --git a/mock-server/src/main/resources/application.properties b/mock-server/src/main/resources/application.properties index a775892..a2f96aa 100644 --- a/mock-server/src/main/resources/application.properties +++ b/mock-server/src/main/resources/application.properties @@ -1,3 +1,4 @@ spring.mvc.view.prefix=/WEB-INF/view/ spring.mvc.view.suffix=.jsp -spring.data.mongodb.uri=mongodb://mongodbuser:mongodb@my-cluster-shard-00-00-wcfui.mongodb.net:27017,my-cluster-shard-00-01-wcfui.mongodb.net:27017,my-cluster-shard-00-02-wcfui.mongodb.net:27017/test?ssl=true&replicaSet=my-cluster-shard-0&authSource=admin&retryWrites=true&w=majority \ No newline at end of file +spring.data.mongodb.uri=mongodb+srv://:@/?retryWrites=true&w=majority +#mongodb-host=cluster0-xj0wf.gcp.mongodb.net \ No newline at end of file From 244e36018548cca2fce021f45fb0aa487a4afefc Mon Sep 17 00:00:00 2001 From: Sarbesh Kumar Sarkar Date: Fri, 26 Jun 2020 00:48:44 +0530 Subject: [PATCH 03/14] Updated README Added features --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6b16b00..c60f7e5 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,11 @@ - Spring boot application to mock API requests quickly. - All mock requests are persisted in MongoDB. - Can be used to mock SOAP and REST APIs +- Can mock request to be sent to any service. +- Mock response to any request from other service. +- Test Service as a whole with endpoints by mocking request and response for a service. Installation Notes: 1. Install MongoDB 2. Run the app using spring boot or create an uber jar to deploy -Screenshot -![Screenshot](https://github.com/kunwardeeps/mock-server/raw/master/mock-server/src/images/screenshot.png) From dcce6132af9c9ac9fdc71a1d27833a3a1bdcd2f7 Mon Sep 17 00:00:00 2001 From: sarbesh Date: Fri, 26 Jun 2020 01:03:59 +0530 Subject: [PATCH 04/14] changed return URI --- .../main/java/com/mockapi/service/impl/MockServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mock-server/src/main/java/com/mockapi/service/impl/MockServiceImpl.java b/mock-server/src/main/java/com/mockapi/service/impl/MockServiceImpl.java index 571e3b5..b4f0d65 100644 --- a/mock-server/src/main/java/com/mockapi/service/impl/MockServiceImpl.java +++ b/mock-server/src/main/java/com/mockapi/service/impl/MockServiceImpl.java @@ -80,7 +80,7 @@ public ResponseEntity saveMockResponse(MockResponseDTO request) { String url = null; try { url = "http://" + InetAddress.getLocalHost().getHostName() + ":" + environment.getProperty("server.port") + - "/mock/" + + "/api/mock/" + entity.getMockId(); } catch (UnknownHostException e) { LOGGER.error("Unable to resolve current hostname "); @@ -129,7 +129,7 @@ public ResponseEntity saveMockRequest(RequestDTO requestDTO){ String url = null; try { url = "http://" + InetAddress.getLocalHost().getHostName() + ":" + environment.getProperty("server.port") + - "/mock/" + + "/api/mock/" + entity.getMockID(); } catch (UnknownHostException e) { LOGGER.error("Unable to resolve current hostname "); From ab6e69041d998737d10d57faf089e90ef688b877 Mon Sep 17 00:00:00 2001 From: sarbesh Date: Sun, 28 Jun 2020 11:26:47 +0530 Subject: [PATCH 05/14] fixed hostname:port --- mock-server/pom.xml | 68 ++++++--- .../mockapi/controller/MockController.java | 20 ++- .../java/com/mockapi/utils/ServiceUtils.java | 12 +- .../src/main/resources/templates/error.html | 17 +++ .../src/main/resources/templates/index.html | 28 ++++ .../src/main/webapp/WEB-INF/view/welcome.jsp | 78 ----------- mock-server/src/main/webapp/WEB-INF/web.xml | 7 - .../src/main/webapp/scripts/mock-js.js | 131 ------------------ 8 files changed, 121 insertions(+), 240 deletions(-) create mode 100644 mock-server/src/main/resources/templates/error.html create mode 100644 mock-server/src/main/resources/templates/index.html delete mode 100644 mock-server/src/main/webapp/WEB-INF/view/welcome.jsp delete mode 100644 mock-server/src/main/webapp/WEB-INF/web.xml delete mode 100644 mock-server/src/main/webapp/scripts/mock-js.js diff --git a/mock-server/pom.xml b/mock-server/pom.xml index 1da4df2..1ac42ff 100644 --- a/mock-server/pom.xml +++ b/mock-server/pom.xml @@ -1,20 +1,20 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.example - demo + com.mockapi + mock-server 0.0.1-SNAPSHOT jar - demo - Demo project for Spring Boot + mock-server + Mocking server developed with Spring Boot org.springframework.boot spring-boot-starter-parent - 2.1.2.RELEASE + 2.3.1.RELEASE @@ -35,12 +35,20 @@ spring-boot-starter-test test + + org.springframework.boot + spring-boot-starter-actuator + org.springframework.boot spring-boot-starter-web + + org.springframework.boot + spring-boot-starter-web-services + @@ -48,33 +56,58 @@ commons-lang3 3.6 - - - org.apache.tomcat.embed - tomcat-embed-jasper - provided - - + + + + + + + + + + - javax.servlet - jstl - provided + org.springframework.boot + spring-boot-starter-thymeleaf org.springframework.data spring-data-commons + + + + org.springframework.boot spring-boot-starter-data-mongodb + + + org.springframework.boot + spring-boot-starter-webflux + org.slf4j slf4j-api 1.7.25 + + org.springframework.boot + spring-boot-starter-hateoas + + + org.springframework.data + spring-data-rest-hal-browser + + + org.springframework.boot + spring-boot-devtools + runtime + true + org.apache.httpcomponents @@ -87,6 +120,9 @@ org.springframework.boot spring-boot-maven-plugin + + true + diff --git a/mock-server/src/main/java/com/mockapi/controller/MockController.java b/mock-server/src/main/java/com/mockapi/controller/MockController.java index e0daa5b..996b62e 100644 --- a/mock-server/src/main/java/com/mockapi/controller/MockController.java +++ b/mock-server/src/main/java/com/mockapi/controller/MockController.java @@ -1,19 +1,27 @@ package com.mockapi.controller; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import com.mockapi.dto.MockResponseDTO; @Controller public class MockController { - - @RequestMapping(value = "/welcome") - public String home(Model model) { - model.addAttribute("mockReq", new MockResponseDTO()); - return "welcome"; - } + public static final Logger LOGGER = LoggerFactory.getLogger(MockController.class); + + @Value("${spring.application.name}") + String appName; + + @GetMapping("/") + public String homePage(Model model) { + model.addAttribute("appName", appName); + return "index"; + } } \ No newline at end of file diff --git a/mock-server/src/main/java/com/mockapi/utils/ServiceUtils.java b/mock-server/src/main/java/com/mockapi/utils/ServiceUtils.java index 2194091..d2f0199 100644 --- a/mock-server/src/main/java/com/mockapi/utils/ServiceUtils.java +++ b/mock-server/src/main/java/com/mockapi/utils/ServiceUtils.java @@ -18,6 +18,7 @@ import org.springframework.web.util.UriComponentsBuilder; import java.net.URI; +import java.nio.file.Path; import java.util.List; @Component @@ -64,8 +65,15 @@ public MultiValueMap getHeadersFromEntity(MockResponse entity) { } public URI generateUri(String hostname, String endPoint, String schema){ - UriComponents uriComponents = UriComponentsBuilder.newInstance() - .scheme(schema).host(hostname).path(endPoint).build(); + UriComponents uriComponents; + if(StringUtils.contains(hostname,":")){ + String[] hostnamePort = hostname.split(":"); + uriComponents = UriComponentsBuilder.newInstance() + .scheme(schema).host(hostnamePort[0]).port(hostnamePort[1]).path(endPoint).build(); + } else { + uriComponents = UriComponentsBuilder.newInstance() + .scheme(schema).host(hostname).path(endPoint).build(); + } return uriComponents.toUri(); } diff --git a/mock-server/src/main/resources/templates/error.html b/mock-server/src/main/resources/templates/error.html new file mode 100644 index 0000000..53e8b6a --- /dev/null +++ b/mock-server/src/main/resources/templates/error.html @@ -0,0 +1,17 @@ + +Error Occurred + + + + + + + + +

Error Occurred!

+[status] + error + +

message

+ + \ No newline at end of file diff --git a/mock-server/src/main/resources/templates/index.html b/mock-server/src/main/resources/templates/index.html new file mode 100644 index 0000000..a85b656 --- /dev/null +++ b/mock-server/src/main/resources/templates/index.html @@ -0,0 +1,28 @@ + + + + + + MockServer + + + + + + + + + + +
+
+

+ +

+
+
+ + + \ No newline at end of file diff --git a/mock-server/src/main/webapp/WEB-INF/view/welcome.jsp b/mock-server/src/main/webapp/WEB-INF/view/welcome.jsp deleted file mode 100644 index 8aa6420..0000000 --- a/mock-server/src/main/webapp/WEB-INF/view/welcome.jsp +++ /dev/null @@ -1,78 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" - pageEncoding="UTF-8"%> - - - - - - - - - - - -
-
-
-

Welcome to Mock-Server!

- - - -
-
- - -
-
- - -
-
- -
- -
-
- - -
-
- - -
-
- -
- - -
- : - - -
- -
- - - - -
- - - - - - - -
-
- - \ No newline at end of file diff --git a/mock-server/src/main/webapp/WEB-INF/web.xml b/mock-server/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 9f88c1f..0000000 --- a/mock-server/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - Archetype Created Web Application - diff --git a/mock-server/src/main/webapp/scripts/mock-js.js b/mock-server/src/main/webapp/scripts/mock-js.js deleted file mode 100644 index 2e786c3..0000000 --- a/mock-server/src/main/webapp/scripts/mock-js.js +++ /dev/null @@ -1,131 +0,0 @@ -$(document).ready(function() { - var codes = [{key:"200 OK",val:200}, - {key:"201",val:201}, - {key:"404 Not Found",val:400}]; - var ctypes = ["application/json","application/xml","text/json","text/xml"]; - var encodings = ["UTF-8","UTF-16"]; - - var option = ''; - for (var i = 0; i < codes.length; i++){ - option += ''; - } - $('#statusCodes').append(option); - - option = ''; - for (var i = 0; i < ctypes.length; i++){ - option += ''; - } - $('#ctypes').append(option); - - option = ''; - for (var i = 0; i < encodings.length; i++){ - option += ''; - } - $('#encodings').append(option); - - var wrapper = $(".headersTemplate"); //Fields wrapper - var i = 0; - $(".addButton").click(function(){ - i++; - $(wrapper).append('

:
'); //add input box - }); - $(wrapper).on("click",".removeButton", function(){ //user click on remove text - $(this).parent('div').remove(); - }); - - (function($){ - $.fn.serializeObject = function(){ - - var self = this, - json = {}, - push_counters = {}, - patterns = { - "validate": /^[a-zA-Z][a-zA-Z0-9_]*(?:\[(?:\d*|[a-zA-Z0-9_]+)\])*$/, - "key": /[a-zA-Z0-9_]+|(?=\[\])/g, - "push": /^$/, - "fixed": /^\d+$/, - "named": /^[a-zA-Z0-9_]+$/ - }; - - - this.build = function(base, key, value){ - base[key] = value; - return base; - }; - - this.push_counter = function(key){ - if(push_counters[key] === undefined){ - push_counters[key] = 0; - } - return push_counters[key]++; - }; - - $.each($(this).serializeArray(), function(){ - - // skip invalid keys - if(!patterns.validate.test(this.name)){ - return; - } - - var k, - keys = this.name.match(patterns.key), - merge = this.value, - reverse_key = this.name; - - while((k = keys.pop()) !== undefined){ - - // adjust reverse_key - reverse_key = reverse_key.replace(new RegExp("\\[" + k + "\\]$"), ''); - - // push - if(k.match(patterns.push)){ - merge = self.build([], self.push_counter(reverse_key), merge); - } - - // fixed - else if(k.match(patterns.fixed)){ - merge = self.build([], k, merge); - } - - // named - else if(k.match(patterns.named)){ - merge = self.build({}, k, merge); - } - } - - json = $.extend(true, json, merge); - }); - - return json; - }; - })(jQuery); - - $("#mockForm").submit(function(e) { - e.preventDefault(); - - var request = JSON.stringify($(this).serializeObject()); - - console.log(request); - - $.ajax({ - url: '/save', - type: 'POST', - contentType: "application/json", - data: request, - success: function(data) { - console.log('data: ' + data); - if(data != ""){ - $("#result").removeClass("hidden"); - $(".panel-body").replaceWith(''); - } - else { - $("#errorResult").removeClass("hidden"); - } - }, - error : function(e) { - alert("Error!"); - console.log("ERROR: ", e); - } - }); - }); -}); \ No newline at end of file From 7c2d96023c4d95f2cc7a2ba742909e37f7fb575d Mon Sep 17 00:00:00 2001 From: Kunwardeep Singh Date: Fri, 25 Sep 2020 23:11:18 -0500 Subject: [PATCH 06/14] revert Readme --- README.md | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index dd0ecab..6b16b00 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,11 @@ # Mock-server -Create and use custom responses. No need to wait for the backend! - -## What is it? - Spring boot application to mock API requests quickly. -- Integrated UI makes designing mock requests easier. - All mock requests are persisted in MongoDB. -- Can be used to mock both REST and SOAP APIs. +- Can be used to mock SOAP and REST APIs -## Installation notes for creating your own server +Installation Notes: 1. Install MongoDB -1. Run the app using spring boot or create an uber jar to deploy - -## Usage -1. Design your API response, customize headers and status -1. Add network delay, if needed -1. Hit submit, your mock link http://localhost:8080/mock/{mockUUID} is ready +2. Run the app using spring boot or create an uber jar to deploy -## Screenshot +Screenshot ![Screenshot](https://github.com/kunwardeeps/mock-server/raw/master/mock-server/src/images/screenshot.png) From ac7df69c43e0bc264ab585cff4f593a8de9d4073 Mon Sep 17 00:00:00 2001 From: sarbesh Date: Wed, 30 Sep 2020 23:43:23 +0530 Subject: [PATCH 07/14] Init to Reactive --- .gitignore | 94 +++++++++++++++++++ mock-server/pom.xml | 19 +--- .../mockapi/controller/MockController.java | 3 - .../controller/MockRestController.java | 12 +-- .../controller/MockRestControllerV2.java | 89 ++++++++++++++++++ .../main/java/com/mockapi/dto/RequestDTO.java | 3 - .../java/com/mockapi/entity/MockRequest.java | 31 ------ .../java/com/mockapi/entity/MockResponse.java | 3 +- .../repository/NoSQLRequestRepository.java | 7 +- .../repository/NoSQLResponseRepository.java | 9 +- .../mockapi/service/MockResponseService.java | 10 ++ .../java/com/mockapi/service/MockService.java | 14 +-- .../service/impl/MockResponseServiceImpl.java | 50 ++++++++++ .../mockapi/service/impl/MockServiceImpl.java | 48 +++++----- .../java/com/mockapi/utils/ServiceUtils.java | 3 +- .../src/main/resources/application.properties | 4 - .../src/main/resources/application.yml | 15 +++ 17 files changed, 309 insertions(+), 105 deletions(-) create mode 100644 .gitignore create mode 100644 mock-server/src/main/java/com/mockapi/controller/MockRestControllerV2.java create mode 100644 mock-server/src/main/java/com/mockapi/service/MockResponseService.java create mode 100644 mock-server/src/main/java/com/mockapi/service/impl/MockResponseServiceImpl.java delete mode 100644 mock-server/src/main/resources/application.properties create mode 100644 mock-server/src/main/resources/application.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f0c9538 --- /dev/null +++ b/.gitignore @@ -0,0 +1,94 @@ +# Default ignored files +/shelf/ +/workspace.xml +.idea + +/target/ +/target/classes/application.properties +/target/classes/ + +#########from online +############################## +## Java +############################## +.mtj.tmp/ +*.class +*.jar +*.war +*.ear +*.nar +hs_err_pid* + +############################## +## Maven +############################## +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +pom.xml.bak +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar + +############################## +## Gradle +############################## +bin/ +build/ +.gradle +.gradletasknamecache +gradle-app.setting +!gradle-wrapper.jar + +############################## +## IntelliJ +############################## +out/ +.idea/ +.idea_modules/ +*.iml +*.ipr +*.iws + +############################## +## Eclipse +############################## +.settings/ +bin/ +tmp/ +.metadata +.classpath +.project +*.tmp +*.bak +*.swp +*~.nib +local.properties +.loadpath +.factorypath + +############################## +## NetBeans +############################## +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +nbactions.xml +nb-configuration.xml + +############################## +## Visual Studio Code +############################## +.vscode/ +.code-workspace + +############################## +## OS X +############################## +.DS_Store \ No newline at end of file diff --git a/mock-server/pom.xml b/mock-server/pom.xml index 1ac42ff..9dbf8f0 100644 --- a/mock-server/pom.xml +++ b/mock-server/pom.xml @@ -57,15 +57,6 @@ 3.6
- - - - - - - - - org.springframework.boot spring-boot-starter-thymeleaf @@ -75,14 +66,14 @@ org.springframework.data spring-data-commons - - - - org.springframework.boot - spring-boot-starter-data-mongodb + spring-boot-starter-data-mongodb-reactive + + + + org.springframework.boot diff --git a/mock-server/src/main/java/com/mockapi/controller/MockController.java b/mock-server/src/main/java/com/mockapi/controller/MockController.java index 996b62e..b71f655 100644 --- a/mock-server/src/main/java/com/mockapi/controller/MockController.java +++ b/mock-server/src/main/java/com/mockapi/controller/MockController.java @@ -6,9 +6,6 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; - -import com.mockapi.dto.MockResponseDTO; @Controller public class MockController { diff --git a/mock-server/src/main/java/com/mockapi/controller/MockRestController.java b/mock-server/src/main/java/com/mockapi/controller/MockRestController.java index a3f7cbc..24add3b 100644 --- a/mock-server/src/main/java/com/mockapi/controller/MockRestController.java +++ b/mock-server/src/main/java/com/mockapi/controller/MockRestController.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.*; @RestController +@CrossOrigin @RequestMapping("/api") public class MockRestController { @@ -18,17 +19,10 @@ public class MockRestController { public static final Logger LOGGER = LoggerFactory.getLogger(MockRestController.class); - @GetMapping(value = "/mock/{mockId}") + @RequestMapping(value = "/mock/{mockId}", method = {RequestMethod.GET, RequestMethod.POST}) public ResponseEntity mockRequestGet(@PathVariable String mockId) { LOGGER.info("Received Request at mock endpoint /mock/{}", mockId); - return mockService.getMockResponse(mockId); - } - - @PostMapping(value = "/mock/{mockId}") - public ResponseEntity mockRequestPost(@PathVariable String mockId, @RequestBody Object o) { - - LOGGER.info("Received Request at mock endpoint /mock/{}", mockId); - return mockService.getMockResponse(mockId); + return mockService.testMockResponse(mockId); } @PostMapping(value = "/save/response") diff --git a/mock-server/src/main/java/com/mockapi/controller/MockRestControllerV2.java b/mock-server/src/main/java/com/mockapi/controller/MockRestControllerV2.java new file mode 100644 index 0000000..87fa219 --- /dev/null +++ b/mock-server/src/main/java/com/mockapi/controller/MockRestControllerV2.java @@ -0,0 +1,89 @@ +package com.mockapi.controller; + +import com.mockapi.dto.MockResponseDTO; +import com.mockapi.entity.MockResponse; +import com.mockapi.repository.NoSQLResponseRepository; +import com.mockapi.service.MockResponseService; +import com.mockapi.utils.ServiceUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +@RestController +@CrossOrigin +@RequestMapping("/api/v2/response") +public class MockRestControllerV2 { + + @Autowired + private MockResponseService mockResponseService; + + @Autowired + private NoSQLResponseRepository responseRepository; + + @Autowired + private ServiceUtils serviceUtils; + + public static final Logger LOGGER = LoggerFactory.getLogger(MockRestControllerV2.class); + + @GetMapping + public Flux getResponses(){ + LOGGER.info("Getting all responses from DB"); + return responseRepository.findAll(); + } + + @GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE) + public Flux getResponsesStream(){ + LOGGER.info("Getting all responses from DB"); + return responseRepository.findAll(); + } + + @GetMapping("/{mockId}") + public Mono> getResponseById(@PathVariable String mockId){ + LOGGER.info("Fetching {} from DB",mockId); + return responseRepository.findById(mockId) + .map(ResponseEntity::ok) + .defaultIfEmpty(ResponseEntity.notFound().build()); + } + + @DeleteMapping("/{mockId}") + public Mono> deleteResponseById(@PathVariable String mockId){ + LOGGER.info("Deleting {} from DB",mockId); + return responseRepository.findById(mockId) + .flatMap(mockResponseFromDb -> responseRepository.delete(mockResponseFromDb) + .then(Mono.just(new ResponseEntity("{\"message\":\"Deleted\"}",HttpStatus.OK)))) + .defaultIfEmpty(ResponseEntity.notFound().build()); + } + + @PostMapping + public Mono> create(@RequestBody MockResponseDTO responseDTO){ + MockResponse mockResponse = serviceUtils.getResponseEntityFromDTO(responseDTO); + LOGGER.info("saving {} to DB", mockResponse); + return responseRepository.save(mockResponse) + .map(ResponseEntity::ok) + .defaultIfEmpty(ResponseEntity.unprocessableEntity().build()); + } + + @PutMapping("/{mockId}") + public Mono updateStudent(@PathVariable String mockId, @RequestBody MockResponseDTO responseDTO){ + MockResponse mockResponse = serviceUtils.getResponseEntityFromDTO(responseDTO); + return responseRepository.findById(mockId) + .flatMap(selectedResponseFromDB ->{ + selectedResponseFromDB=mockResponse; + return responseRepository.save(selectedResponseFromDB); + }) + .map(ResponseEntity::ok) + .defaultIfEmpty(new ResponseEntity<>(HttpStatus.NOT_FOUND)); + } + + @RequestMapping(value = "/test/{mockId}", method = {RequestMethod.GET, RequestMethod.POST}) + public Mono> mockRequestTest(@PathVariable String mockId) { + LOGGER.info("Received Request at mock endpoint /mock/{}", mockId); + return mockResponseService.testMockResponse(mockId); + } +} diff --git a/mock-server/src/main/java/com/mockapi/dto/RequestDTO.java b/mock-server/src/main/java/com/mockapi/dto/RequestDTO.java index 7a1f457..c6a5eee 100644 --- a/mock-server/src/main/java/com/mockapi/dto/RequestDTO.java +++ b/mock-server/src/main/java/com/mockapi/dto/RequestDTO.java @@ -1,8 +1,5 @@ package com.mockapi.dto; -import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; - import java.util.List; public class RequestDTO { diff --git a/mock-server/src/main/java/com/mockapi/entity/MockRequest.java b/mock-server/src/main/java/com/mockapi/entity/MockRequest.java index ac6e32a..34f597b 100644 --- a/mock-server/src/main/java/com/mockapi/entity/MockRequest.java +++ b/mock-server/src/main/java/com/mockapi/entity/MockRequest.java @@ -2,7 +2,6 @@ import com.mockapi.dto.HeaderDTO; import org.springframework.data.annotation.Id; -import org.springframework.http.HttpMethod; import java.util.List; @@ -13,11 +12,8 @@ public class MockRequest { private String endpoint; private String schema; private String httpMethod; -// private String contentType; -// private String encoding; private Object body; private List headers; -// private String accept; public String getMockID() { return mockID; @@ -59,22 +55,6 @@ public void setHttpMethod(String httpMethod) { this.httpMethod = httpMethod; } -// public String getContentType() { -// return contentType; -// } -// -// public void setContentType(String contentType) { -// this.contentType = contentType; -// } -// -// public String getEncoding() { -// return encoding; -// } -// -// public void setEncoding(String encoding) { -// this.encoding = encoding; -// } - public Object getBody() { return body; } @@ -91,14 +71,6 @@ public void setHeaders(List headers) { this.headers = headers; } -// public String getAccept() { -// return accept; -// } -// -// public void setAccept(String accept) { -// this.accept = accept; -// } - @Override public String toString() { return "MockRequest{" + @@ -107,11 +79,8 @@ public String toString() { ", endpoint='" + endpoint + '\'' + ", schema='" + schema + '\'' + ", httpMethod=" + httpMethod + -// ", contentType='" + contentType + '\'' + -// ", encoding='" + encoding + '\'' + ", body=" + body + ", headers=" + headers + -// ", accept='" + accept + '\'' + '}'; } diff --git a/mock-server/src/main/java/com/mockapi/entity/MockResponse.java b/mock-server/src/main/java/com/mockapi/entity/MockResponse.java index 0efcaa5..6f50992 100644 --- a/mock-server/src/main/java/com/mockapi/entity/MockResponse.java +++ b/mock-server/src/main/java/com/mockapi/entity/MockResponse.java @@ -1,7 +1,6 @@ package com.mockapi.entity; import java.util.List; -import java.util.Map; import org.springframework.data.annotation.Id; @@ -64,7 +63,7 @@ public void setDelay(int delay) { @Override public String toString() { - return "MockResponse{" + + return "MockResponseService{" + "mockId='" + mockId + '\'' + ", statusCode=" + statusCode + ", contentType='" + contentType + '\'' + diff --git a/mock-server/src/main/java/com/mockapi/repository/NoSQLRequestRepository.java b/mock-server/src/main/java/com/mockapi/repository/NoSQLRequestRepository.java index 3daa8de..95265b6 100644 --- a/mock-server/src/main/java/com/mockapi/repository/NoSQLRequestRepository.java +++ b/mock-server/src/main/java/com/mockapi/repository/NoSQLRequestRepository.java @@ -1,9 +1,10 @@ package com.mockapi.repository; import com.mockapi.entity.MockRequest; -import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.mongodb.repository.ReactiveMongoRepository; +import reactor.core.publisher.Mono; -public interface NoSQLRequestRepository extends MongoRepository { +public interface NoSQLRequestRepository extends ReactiveMongoRepository { - public MockRequest getByMockID(String mockId); + Mono getByMockID(String mockId); } diff --git a/mock-server/src/main/java/com/mockapi/repository/NoSQLResponseRepository.java b/mock-server/src/main/java/com/mockapi/repository/NoSQLResponseRepository.java index 04cb220..78f979a 100644 --- a/mock-server/src/main/java/com/mockapi/repository/NoSQLResponseRepository.java +++ b/mock-server/src/main/java/com/mockapi/repository/NoSQLResponseRepository.java @@ -1,10 +1,11 @@ package com.mockapi.repository; import com.mockapi.entity.MockResponse; -import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.mongodb.repository.ReactiveMongoRepository; +import reactor.core.publisher.Mono; -public interface NoSQLResponseRepository extends MongoRepository { - - public MockResponse getByMockId(String mockId); +public interface NoSQLResponseRepository extends ReactiveMongoRepository { + + Mono getByMockId(String mockId); } diff --git a/mock-server/src/main/java/com/mockapi/service/MockResponseService.java b/mock-server/src/main/java/com/mockapi/service/MockResponseService.java new file mode 100644 index 0000000..7ea346c --- /dev/null +++ b/mock-server/src/main/java/com/mockapi/service/MockResponseService.java @@ -0,0 +1,10 @@ +package com.mockapi.service; + +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import reactor.core.publisher.Mono; + +@Service +public interface MockResponseService { + Mono> testMockResponse(String mockId); +} diff --git a/mock-server/src/main/java/com/mockapi/service/MockService.java b/mock-server/src/main/java/com/mockapi/service/MockService.java index 80d4a74..791e734 100644 --- a/mock-server/src/main/java/com/mockapi/service/MockService.java +++ b/mock-server/src/main/java/com/mockapi/service/MockService.java @@ -7,11 +7,11 @@ @Service public interface MockService { - public ResponseEntity getMockResponse(String mockId); - public ResponseEntity saveMockResponse(MockResponseDTO request); - public ResponseEntity deleteMockResponse(MockResponseDTO request); - public ResponseEntity testDTOEndpoint(RequestDTO request); - public ResponseEntity testRequestMockId(String mockId); - public ResponseEntity deleteMockRequest(RequestDTO request); - public ResponseEntity saveMockRequest(RequestDTO requestDTO); + ResponseEntity testMockResponse(String mockId); + ResponseEntity saveMockResponse(MockResponseDTO request); + ResponseEntity deleteMockResponse(MockResponseDTO request); + ResponseEntity testDTOEndpoint(RequestDTO request); + ResponseEntity testRequestMockId(String mockId); + ResponseEntity deleteMockRequest(RequestDTO request); + ResponseEntity saveMockRequest(RequestDTO requestDTO); } diff --git a/mock-server/src/main/java/com/mockapi/service/impl/MockResponseServiceImpl.java b/mock-server/src/main/java/com/mockapi/service/impl/MockResponseServiceImpl.java new file mode 100644 index 0000000..77c73d9 --- /dev/null +++ b/mock-server/src/main/java/com/mockapi/service/impl/MockResponseServiceImpl.java @@ -0,0 +1,50 @@ +package com.mockapi.service.impl; + +import com.mockapi.repository.NoSQLResponseRepository; +import com.mockapi.service.MockResponseService; +import com.mockapi.utils.ServiceUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.util.MultiValueMap; +import reactor.core.publisher.Mono; + +@Service +public class MockResponseServiceImpl implements MockResponseService { + + public static final Logger LOGGER = LoggerFactory.getLogger(MockResponseServiceImpl.class); + + @Autowired + private NoSQLResponseRepository responseRepository; + + @Autowired + private ServiceUtils serviceUtils; + + public MockResponseServiceImpl(ServiceUtils serviceUtils) { + this.serviceUtils = serviceUtils; + } + + @Override + public Mono> testMockResponse(String mockId) { + return responseRepository.getByMockId(mockId) + .flatMap(mockResponse -> { + LOGGER.debug("Got entity {} for mockID {} ", mockResponse, mockId); + MultiValueMap headers = serviceUtils.getHeadersFromEntity(mockResponse); + HttpStatus httpStatus = HttpStatus.valueOf(mockResponse.getStatusCode()); + LOGGER.debug("Entering Delay period of {}", mockResponse.getDelay()); + if (mockResponse.getDelay() > 0){ + try { + Thread.sleep(mockResponse.getDelay()); + } catch (InterruptedException e) { + LOGGER.error("Thread Interrupted {}", Thread.currentThread()); + Thread.currentThread().interrupt(); + } + } + return Mono.justOrEmpty(new ResponseEntity<>(mockResponse.getBody(), headers, httpStatus)); + }) + .defaultIfEmpty(new ResponseEntity<>(HttpStatus.NOT_FOUND)); + } +} diff --git a/mock-server/src/main/java/com/mockapi/service/impl/MockServiceImpl.java b/mock-server/src/main/java/com/mockapi/service/impl/MockServiceImpl.java index b4f0d65..2b509a0 100644 --- a/mock-server/src/main/java/com/mockapi/service/impl/MockServiceImpl.java +++ b/mock-server/src/main/java/com/mockapi/service/impl/MockServiceImpl.java @@ -8,7 +8,6 @@ import com.mockapi.repository.NoSQLResponseRepository; import com.mockapi.service.MockService; import com.mockapi.utils.ServiceUtils; -import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -50,10 +49,11 @@ public MockServiceImpl(ServiceUtils serviceUtils) { this.serviceUtils = serviceUtils; } - public ResponseEntity getMockResponse(String mockId) { - MockResponse entity = responseRepository.getByMockId(mockId); + public ResponseEntity testMockResponse(String mockId) { + MockResponse entity = responseRepository.getByMockId(mockId).block(); if (entity != null) { - LOGGER.debug("Got entity {} for mockID {} ", entity.toString(), mockId); + LOGGER.debug("Test Entity from DB : {}",entity); + LOGGER.debug("Got entity {} for mockID {} ", entity, mockId); MultiValueMap headers = serviceUtils.getHeadersFromEntity(entity); HttpStatus httpStatus = HttpStatus.valueOf(entity.getStatusCode()); LOGGER.debug("Entering Delay period of {}", entity.getDelay()); @@ -61,21 +61,22 @@ public ResponseEntity getMockResponse(String mockId) { try { Thread.sleep(entity.getDelay()); } catch (InterruptedException e) { - e.printStackTrace(); + LOGGER.error("Thread Interrupted {}", Thread.currentThread()); + Thread.currentThread().interrupt(); } } - return new ResponseEntity(entity.getBody(), headers, httpStatus); + return new ResponseEntity<>(entity.getBody(), headers, httpStatus); } else { LOGGER.error("No mock Response found for {}", mockId); - return new ResponseEntity(HttpStatus.NOT_FOUND); + return new ResponseEntity<>(HttpStatus.NOT_FOUND); } } public ResponseEntity saveMockResponse(MockResponseDTO request) { MockResponse entity = serviceUtils.getResponseEntityFromDTO(request); - LOGGER.debug("Saving entity {}", entity.toString()); - responseRepository.save(entity); + LOGGER.debug("Saving entity {}", entity); + responseRepository.save(entity).block(); String url = null; try { @@ -87,15 +88,16 @@ public ResponseEntity saveMockResponse(MockResponseDTO request) { e.printStackTrace(); } - return new ResponseEntity(url, HttpStatus.OK); + return new ResponseEntity<>(url, HttpStatus.OK); } public ResponseEntity deleteMockResponse(MockResponseDTO request) { try { - MockResponse entity = responseRepository.getByMockId(request.getMockId()); - LOGGER.debug("Got entity to be deleted: {}", entity.toString()); + MockResponse entity = responseRepository.getByMockId(request.getMockId()).block(); + assert entity != null; + LOGGER.debug("Got entity to be deleted: {}", entity); LOGGER.info("Deleting {}",entity.getMockId()); - responseRepository.delete(entity); + responseRepository.delete(entity).block(); return new ResponseEntity<>( "{\"message\":\"Deletion Successful \" }", HttpStatus.OK); } catch (Exception e){ @@ -108,9 +110,7 @@ public ResponseEntity deleteMockResponse(MockResponseDTO request) { public ResponseEntity testEndpoint(MockRequest request) { URI uri = serviceUtils.generateUri(request.getHostName(), request.getEndpoint(), request.getSchema()); MultiValueMap headers = new LinkedMultiValueMap<>(); - request.getHeaders().forEach(headerDTO -> { - headers.add(headerDTO.getName(),headerDTO.getValue()); - }); + request.getHeaders().forEach(headerDTO -> headers.add(headerDTO.getName(),headerDTO.getValue())); RequestEntity requestEntity; requestEntity = new RequestEntity<>(request.getBody(),headers, HttpMethod.resolve(request.getHttpMethod()),uri); return restTemplate.exchange(requestEntity, Object.class); @@ -123,8 +123,8 @@ public ResponseEntity testDTOEndpoint(RequestDTO requestDTO){ public ResponseEntity saveMockRequest(RequestDTO requestDTO){ MockRequest entity = serviceUtils.getMockRequestFromDTO(requestDTO); - LOGGER.debug("Saving entity {}", entity.toString()); - requestRepository.save(entity); + LOGGER.debug("Saving entity {}", entity); + requestRepository.save(entity).block(); String url = null; try { @@ -135,15 +135,16 @@ public ResponseEntity saveMockRequest(RequestDTO requestDTO){ LOGGER.error("Unable to resolve current hostname "); e.printStackTrace(); } - return new ResponseEntity(url, HttpStatus.OK); + return new ResponseEntity<>(url, HttpStatus.OK); } public ResponseEntity deleteMockRequest(RequestDTO request) { try { - MockRequest entity = requestRepository.getByMockID(request.getMockID()); - LOGGER.debug("Got entity to be deleted: {}", entity.toString()); + MockRequest entity = requestRepository.getByMockID(request.getMockID()).block(); + assert entity != null; + LOGGER.debug("Got entity to be deleted: {}", entity); LOGGER.info("Deleting {}",entity.getMockID()); - requestRepository.delete(entity); + requestRepository.delete(entity).block(); return new ResponseEntity<>( "{\"message\":\"Deletion Successful \" }", HttpStatus.OK); } catch (Exception e){ @@ -154,7 +155,8 @@ public ResponseEntity deleteMockRequest(RequestDTO request) { } public ResponseEntity testRequestMockId(String mockId){ - MockRequest entity = requestRepository.getByMockID(mockId); + MockRequest entity = requestRepository.getByMockID(mockId).block(); + assert entity != null; return testEndpoint(entity); } } diff --git a/mock-server/src/main/java/com/mockapi/utils/ServiceUtils.java b/mock-server/src/main/java/com/mockapi/utils/ServiceUtils.java index d2f0199..8a05374 100644 --- a/mock-server/src/main/java/com/mockapi/utils/ServiceUtils.java +++ b/mock-server/src/main/java/com/mockapi/utils/ServiceUtils.java @@ -18,7 +18,6 @@ import org.springframework.web.util.UriComponentsBuilder; import java.net.URI; -import java.nio.file.Path; import java.util.List; @Component @@ -33,7 +32,7 @@ public MockResponse getResponseEntityFromDTO(MockResponseDTO request) { if (request.getMockId() == null) { LOGGER.debug("No mockID passed in request body, generating mockID"); ObjectId id = new ObjectId(); - LOGGER.info("Generated MockId: {}", id.toString()); + LOGGER.info("Generated MockId: {}", id); entity.setMockId(id.toString()); } else entity.setMockId(request.getMockId()); diff --git a/mock-server/src/main/resources/application.properties b/mock-server/src/main/resources/application.properties deleted file mode 100644 index a2f96aa..0000000 --- a/mock-server/src/main/resources/application.properties +++ /dev/null @@ -1,4 +0,0 @@ -spring.mvc.view.prefix=/WEB-INF/view/ -spring.mvc.view.suffix=.jsp -spring.data.mongodb.uri=mongodb+srv://:@/?retryWrites=true&w=majority -#mongodb-host=cluster0-xj0wf.gcp.mongodb.net \ No newline at end of file diff --git a/mock-server/src/main/resources/application.yml b/mock-server/src/main/resources/application.yml new file mode 100644 index 0000000..9ffb7ed --- /dev/null +++ b/mock-server/src/main/resources/application.yml @@ -0,0 +1,15 @@ +logging: + level: + com: + mockapi: TRACE + web: INFO +spring: + application: + name: MockServer + data: + mongodb: + uri: mongodb://localhost:27017/mockDB + mvc: + view: + prefix: /WEB-INF/view/ + suffix: .jsp From bc27df75f167ccc42e5325b1bdb9190396cc0224 Mon Sep 17 00:00:00 2001 From: sarbesh Date: Sat, 3 Oct 2020 18:32:23 +0530 Subject: [PATCH 08/14] Added UI --- mock-server/pom.xml | 6 +- .../controller/MockRestController.java | 1 - .../src/main/resources/application.yml | 8 +- .../src/main/resources/static/css/mock.css | 3 + .../main/resources/static/images/favicon.ico | Bin 0 -> 948 bytes .../src/main/resources/static/js/mock-js.js | 137 ++++++++++++++++++ .../src/main/resources/templates/index.html | 67 ++++++++- 7 files changed, 209 insertions(+), 13 deletions(-) create mode 100644 mock-server/src/main/resources/static/css/mock.css create mode 100644 mock-server/src/main/resources/static/images/favicon.ico create mode 100644 mock-server/src/main/resources/static/js/mock-js.js diff --git a/mock-server/pom.xml b/mock-server/pom.xml index 9dbf8f0..6111112 100644 --- a/mock-server/pom.xml +++ b/mock-server/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 2.3.1.RELEASE + RELEASE @@ -54,7 +54,7 @@ org.apache.commons commons-lang3 - 3.6 + RELEASE @@ -83,7 +83,7 @@ org.slf4j slf4j-api - 1.7.25 + 1.7.30 org.springframework.boot diff --git a/mock-server/src/main/java/com/mockapi/controller/MockRestController.java b/mock-server/src/main/java/com/mockapi/controller/MockRestController.java index 24add3b..77356e3 100644 --- a/mock-server/src/main/java/com/mockapi/controller/MockRestController.java +++ b/mock-server/src/main/java/com/mockapi/controller/MockRestController.java @@ -10,7 +10,6 @@ import org.springframework.web.bind.annotation.*; @RestController -@CrossOrigin @RequestMapping("/api") public class MockRestController { diff --git a/mock-server/src/main/resources/application.yml b/mock-server/src/main/resources/application.yml index 9ffb7ed..4c7ec8b 100644 --- a/mock-server/src/main/resources/application.yml +++ b/mock-server/src/main/resources/application.yml @@ -1,15 +1,11 @@ logging: level: com: - mockapi: TRACE + mockapi: INFO web: INFO spring: application: name: MockServer data: mongodb: - uri: mongodb://localhost:27017/mockDB - mvc: - view: - prefix: /WEB-INF/view/ - suffix: .jsp + uri: ${MONGO_DB_CONNECTION} diff --git a/mock-server/src/main/resources/static/css/mock.css b/mock-server/src/main/resources/static/css/mock.css new file mode 100644 index 0000000..b5164fc --- /dev/null +++ b/mock-server/src/main/resources/static/css/mock.css @@ -0,0 +1,3 @@ +.hidden{ + display: none; +} \ No newline at end of file diff --git a/mock-server/src/main/resources/static/images/favicon.ico b/mock-server/src/main/resources/static/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..997406ad22c29aae95893fb3d666c30258a09537 GIT binary patch literal 948 zcmV;l155mgP)CBYU7IjCFmI-B}4sMJt3^s9NVg!P0 z6hDQy(L`XWMkB@zOLgN$4KYz;j0zZxq9KKdpZE#5@k0crP^5f9KO};h)ZDQ%ybhht z%t9#h|nu0K(bJ ztIkhEr!*UyrZWQ1k2+YkGqDi8Z<|mIN&$kzpKl{cNP=OQzXHz>vn+c)F)zO|Bou>E z2|-d_=qY#Y+yOu1a}XI?cU}%04)zz%anD(XZC{#~WreV!a$7k2Ug`?&CUEc0EtrkZ zL49MB)h!_K{H(*l_93D5tO0;BUnvYlo+;yss%n^&qjt6fZOa+}+FDO(~2>G z2dx@=JZ?DHP^;b7*Y1as5^uphBsh*s*z&MBd?e@I>-9kU>63PjP&^#5YTOb&x^6Cf z?674rmSHB5Fk!{Gv7rv!?qX#ei_L(XtwVqLX3L}$MI|kJ*w(rhx~tc&L&xP#?cQow zX_|gx$wMr3pRZIIr_;;O|8fAjd;1`nOeu5K(pCu7>^3E&D2OBBq?sYa(%S?GwG&_0-s%_v$L@R!5H_fc)lOb9ZoOO#p`Nn`KU z3LTTBtjwo`7(HA6 z7gmO$yTR!5L>Bsg!X8616{JUngg_@&85%>W=mChTR;x4`P=?PJ~oPuy5 zU-L`C@_!34D21{fD~Y8NVnR3t;aqZI3fIhmgmx}$oc-dKDC6Ap$Gy>a!`A*x2L1v0 WcZ@i?LyX}70000' + codes[i].key + ''; + } + $('#statusCodes').append(option); + + option = ''; + for (var i = 0; i < ctypes.length; i++){ + option += ''; + } + $('#ctypes').append(option); + + option = ''; + for (var i = 0; i < encodings.length; i++){ + option += ''; + } + $('#encodings').append(option); + + var wrapper = $(".headersTemplate"); //Fields wrapper + var i = 0; + $(".addButton").click(function(){ + i++; + $(wrapper).append('

:
'); //add input box + }); + $(wrapper).on("click",".removeButton", function(){ //user click on remove text + $(this).parent('div').remove(); + }); + + (function($){ + $.fn.serializeObject = function(){ + + var self = this, + json = {}, + push_counters = {}, + patterns = { + "validate": /^[a-zA-Z][a-zA-Z0-9_]*(?:\[(?:\d*|[a-zA-Z0-9_]+)\])*$/, + "key": /[a-zA-Z0-9_]+|(?=\[\])/g, + "push": /^$/, + "fixed": /^\d+$/, + "named": /^[a-zA-Z0-9_]+$/ + }; + + + this.build = function(base, key, value){ + base[key] = value; + return base; + }; + + this.push_counter = function(key){ + if(push_counters[key] === undefined){ + push_counters[key] = 0; + } + return push_counters[key]++; + }; + + $.each($(this).serializeArray(), function(){ + + // skip invalid keys + if(!patterns.validate.test(this.name)){ + return; + } + + var k, + keys = this.name.match(patterns.key), + merge = this.value, + reverse_key = this.name; + + while((k = keys.pop()) !== undefined){ + + // adjust reverse_key + reverse_key = reverse_key.replace(new RegExp("\\[" + k + "\\]$"), ''); + + // push + if(k.match(patterns.push)){ + merge = self.build([], self.push_counter(reverse_key), merge); + } + + // fixed + else if(k.match(patterns.fixed)){ + merge = self.build([], k, merge); + } + + // named + else if(k.match(patterns.named)){ + merge = self.build({}, k, merge); + } + } + + json = $.extend(true, json, merge); + }); + + return json; + }; + })(jQuery); + + $("#mockForm").submit(function(e) { + e.preventDefault(); + + var request = JSON.stringify($(this).serializeObject()); + + console.log(request); + + $.ajax({ + url: '/api/save/response', + type: 'POST', + contentType: "application/json", + data: request, + success: function(data) { + console.log('data: ' + data); + if(data != ""){ + $("#result").removeClass("hidden"); + $(".panel-body").replaceWith(''); + } + else { + $("#errorResult").removeClass("hidden"); + } + }, + error : function(e) { + alert("Error!"); + console.log("ERROR: ", e); + } + }); + }); +}); \ No newline at end of file diff --git a/mock-server/src/main/resources/templates/index.html b/mock-server/src/main/resources/templates/index.html index a85b656..a43f5a4 100644 --- a/mock-server/src/main/resources/templates/index.html +++ b/mock-server/src/main/resources/templates/index.html @@ -6,15 +6,16 @@ MockServer - + - + +
@@ -22,6 +23,66 @@

+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+ : + + +
+ +
+ + + + +
+ + + + + + + +
+
From 5a09fe750aee32d294872662d1582073aa0ac613 Mon Sep 17 00:00:00 2001 From: sarbesh Date: Sat, 3 Oct 2020 21:59:05 +0530 Subject: [PATCH 09/14] Updated README.md --- README.md | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index c60f7e5..7836753 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,40 @@ # Mock-server +Create and use custom responses. No need to wait for the backend! + +**Description** : Create mock response to test your backend or downstream REST calls for any service. +It can be used to integration with any service without calling actul service. + + - Spring boot application to mock API requests quickly. -- All mock requests are persisted in MongoDB. -- Can be used to mock SOAP and REST APIs +- All mock response are persisted in MongoDB. +- Can be used to mock REST APIs - Can mock request to be sent to any service. - Mock response to any request from other service. - Test Service as a whole with endpoints by mocking request and response for a service. +- Uses ReactiveMongo for db connection. + + - **Technology stack** : Standalone Springboot appliation providing RESTful service written in JAVA 8 with Maven as Build tool. + + +## Screenshot +![Screenshot](https://github.com/kunwardeeps/mock-server/raw/master/mock-server/src/images/screenshot.png) + +## Dependencies +1. Language: Java 8 +2. Database: MongoDb +3. Framework: SpringBoot +4. Build tool: Maven + +## Installation Notes: +1. Install MongoDB or use any cloud service for mongodb. +2. Run the app using spring boot or create an jar to deploy. + +## Configuration: +1. Configure mongoDb instance/uri in application.yml + +## Usage +1. Design your API response, customize headers and status +2. Add network delay, if needed +3. Hit submit, your mock link http://localhost:8080/mock/{mockUUID} is ready -Installation Notes: -1. Install MongoDB -2. Run the app using spring boot or create an uber jar to deploy From 91a0d07c92718842872612084c812d3334708271 Mon Sep 17 00:00:00 2001 From: sarbesh Date: Sat, 3 Oct 2020 22:04:28 +0530 Subject: [PATCH 10/14] Updated README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7836753..94db086 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ It can be used to integration with any service without calling actul service. - Test Service as a whole with endpoints by mocking request and response for a service. - Uses ReactiveMongo for db connection. - - **Technology stack** : Standalone Springboot appliation providing RESTful service written in JAVA 8 with Maven as Build tool. + - **Technology stack** : Standalone Springboot appliation providing RESTful service written in JAVA 8 with Maven as Build tool and MongoDB as Database. ## Screenshot From 78b2a8ee94127b4a5c3f8eb47ab83cf345212f89 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 19 Oct 2020 16:59:43 +0000 Subject: [PATCH 11/14] Create Dependabot config file --- .github/dependabot.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..731ac4f --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +version: 2 +updates: +- package-ecosystem: maven + directory: "/mock-server" + schedule: + interval: daily + time: "23:30" + open-pull-requests-limit: 10 From 0e617ecabe37b580308f37fcbea9dccdac7fc1d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Mar 2021 23:04:15 +0000 Subject: [PATCH 12/14] Bump commons-lang3 from RELEASE to 3.12.0 in /mock-server Bumps commons-lang3 from RELEASE to 3.12.0. Signed-off-by: dependabot[bot] --- mock-server/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mock-server/pom.xml b/mock-server/pom.xml index 6111112..8a28d36 100644 --- a/mock-server/pom.xml +++ b/mock-server/pom.xml @@ -54,7 +54,7 @@ org.apache.commons commons-lang3 - RELEASE + 3.12.0 From 4300aefb01d58965be50cc11738aa9541bd22341 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Jul 2021 23:02:51 +0000 Subject: [PATCH 13/14] Bump slf4j-api from 1.7.30 to 1.7.32 in /mock-server Bumps [slf4j-api](https://github.com/qos-ch/slf4j) from 1.7.30 to 1.7.32. - [Release notes](https://github.com/qos-ch/slf4j/releases) - [Commits](https://github.com/qos-ch/slf4j/commits) --- updated-dependencies: - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- mock-server/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mock-server/pom.xml b/mock-server/pom.xml index 6111112..07c2a67 100644 --- a/mock-server/pom.xml +++ b/mock-server/pom.xml @@ -83,7 +83,7 @@ org.slf4j slf4j-api - 1.7.30 + 1.7.32 org.springframework.boot From a5460706bbc5be1821497fff0291e2354f91f8b4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Aug 2021 23:02:41 +0000 Subject: [PATCH 14/14] Bump spring-boot-starter-parent from RELEASE to 2.5.4 in /mock-server Bumps [spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from RELEASE to 2.5.4. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/commits/v2.5.4) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- mock-server/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mock-server/pom.xml b/mock-server/pom.xml index 6111112..96e1999 100644 --- a/mock-server/pom.xml +++ b/mock-server/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - RELEASE + 2.5.4