update to current version
all initial features implemented tbd: etrack front
This commit is contained in:
4
Jenkinsfile
vendored
4
Jenkinsfile
vendored
@@ -4,12 +4,12 @@ pipeline {
|
||||
stages {
|
||||
stage('Build') {
|
||||
steps {
|
||||
sh "sudo docker-compose build"
|
||||
sh "docker-compose build"
|
||||
}
|
||||
}
|
||||
stage('Deploy') {
|
||||
steps {
|
||||
sh "sudo docker-compose up -d"
|
||||
sh "docker-compose up -d"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
49
Klaus.iml
49
Klaus.iml
@@ -11,7 +11,7 @@
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.3.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-thymeleaf:2.3.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.3.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
|
||||
@@ -21,22 +21,6 @@
|
||||
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
|
||||
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.26" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.3.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.3.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.3.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.2.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.3.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.50.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.50.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.50.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.50.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.50.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.50.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis-reactive:2.3.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-thymeleaf:2.3.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.thymeleaf:thymeleaf-spring5:3.0.11.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.thymeleaf:thymeleaf:3.0.11.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.attoparser:attoparser:2.0.5.RELEASE" level="project" />
|
||||
@@ -52,7 +36,6 @@
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.3.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.36" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.36" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.7.RELEASE" level="project" />
|
||||
@@ -96,9 +79,33 @@
|
||||
<orderEntry type="library" scope="TEST" name="Maven: io.projectreactor:reactor-test:3.3.6.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.6.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: redis.clients:jedis:3.3.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.8.0" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.16.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.3.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.1.5.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.3.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.3.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.50.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.50.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.50.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.50.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.50.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.50.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis-reactive:2.3.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.cwbase:logback-redis-appender:1.1.6" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.8.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.2.6.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.3.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.3.1.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.2.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.7.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
|
||||
<orderEntry type="library" name="Maven: redis.clients:jedis:3.3.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: jakarta.persistence:jakarta.persistence-api:2.2.3" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -1,7 +1,7 @@
|
||||
# R11-Klaus
|
||||
Mockup service for middleware testing
|
||||
|
||||
[](https://travis-ci.com/Szakalakamaka/R11-Klaus)
|
||||
[](https://travis-ci.com/Szakalakamaka/Klaus)
|
||||
|
||||
Available scripts:
|
||||
|
||||
|
||||
56
pom.xml
56
pom.xml
@@ -19,14 +19,6 @@
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||
@@ -60,6 +52,10 @@
|
||||
<groupId>org.junit.vintage</groupId>
|
||||
<artifactId>junit-vintage-engine</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
@@ -67,18 +63,50 @@
|
||||
<artifactId>reactor-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>redis.clients</groupId>
|
||||
<artifactId>jedis</artifactId>
|
||||
<version>3.3.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.assertj</groupId>
|
||||
<artifactId>assertj-core</artifactId>
|
||||
<version>3.16.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-validation</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.cwbase</groupId>
|
||||
<artifactId>logback-redis-appender</artifactId>
|
||||
<version>1.1.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-pool2</artifactId>
|
||||
<version>2.8.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.data</groupId>
|
||||
<artifactId>spring-data-redis</artifactId>
|
||||
<version>2.2.6.RELEASE</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>redis.clients</groupId>
|
||||
<artifactId>jedis</artifactId>
|
||||
<version>3.3.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>jakarta.persistence</groupId>
|
||||
<artifactId>jakarta.persistence-api</artifactId>
|
||||
<version>2.2.3</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.release11.klaus;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
|
||||
@SpringBootApplication
|
||||
public class KlausApplication {
|
||||
|
||||
@@ -14,6 +15,8 @@ public class KlausApplication {
|
||||
|
||||
//TODO Jenkins
|
||||
//TODO history logs
|
||||
//TODO form validation
|
||||
//TODO JedisPool jedisPool = new JedisPool(jedisPoolConfig, redisHost, redisPort, timeout, redisPassword)
|
||||
//TODO JedisPool optimalization https://partners-intl.aliyun.com/help/doc-detail/98726.htm
|
||||
// loging and security
|
||||
// tracking clients activity
|
||||
// use a centralized logging collection tool like logstash
|
||||
@@ -5,9 +5,16 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.PropertySource;
|
||||
import org.springframework.core.env.Environment;
|
||||
import redis.clients.jedis.JedisPool;
|
||||
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
|
||||
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
|
||||
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@Configuration
|
||||
@EnableRedisRepositories
|
||||
@PropertySource("classpath:data-access.properties")
|
||||
public class RedisConfig {
|
||||
|
||||
@@ -15,11 +22,20 @@ public class RedisConfig {
|
||||
private Environment environment;
|
||||
|
||||
@Bean
|
||||
JedisPool jedisPool(){
|
||||
final JedisPool pool = new JedisPool(environment.getProperty("redis.host"),
|
||||
Integer.parseInt(environment.getProperty("redis.port")));
|
||||
return pool;
|
||||
JedisConnectionFactory jedisConnectionFactory() {
|
||||
RedisStandaloneConfiguration redisStandaloneConfiguration =
|
||||
new RedisStandaloneConfiguration(Objects.requireNonNull(environment.getProperty("redis.host")),
|
||||
Integer.parseInt(Objects.requireNonNull(environment.getProperty("redis.port"))));
|
||||
return new JedisConnectionFactory(redisStandaloneConfiguration);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public RedisTemplate<String, Object> redisTemplate() {
|
||||
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
|
||||
redisTemplate.setConnectionFactory(jedisConnectionFactory());
|
||||
redisTemplate.setExposeConnection(true);
|
||||
redisTemplate.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());
|
||||
return redisTemplate;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
package com.release11.klaus.controller;
|
||||
|
||||
|
||||
import com.release11.klaus.utilis.BusinessKey;
|
||||
import com.release11.klaus.utilis.TrackingClient;
|
||||
import com.release11.klaus.model.MockedResponseDto;
|
||||
import com.release11.klaus.service.KlausService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.RequestEntity;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
@@ -13,6 +15,7 @@ import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
@Controller("/")
|
||||
@@ -22,18 +25,29 @@ public class KlausController {
|
||||
|
||||
private final KlausService klausService;
|
||||
|
||||
@RequestMapping(value = "klaus/v1/get/{clientUUID}/{mockedResponseId}")
|
||||
public ResponseEntity getMockedResponse(@PathVariable UUID clientUUID,
|
||||
@PathVariable int mockedResponseId){
|
||||
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "getMockedResponse",
|
||||
BusinessKey.CLIENT_UUID, String.valueOf(clientUUID),
|
||||
BusinessKey.MESSAGE_ID, String.valueOf(mockedResponseId)));
|
||||
|
||||
return klausService.getMockedResponse(clientUUID, mockedResponseId);
|
||||
}
|
||||
|
||||
@PostMapping(value = "klaus/v1/set/{clientUUID}/{mockedResponseId}")
|
||||
public ResponseEntity<String> setMockedResponse(@PathVariable UUID clientUUID,
|
||||
@PathVariable int mockedResponseId,
|
||||
@RequestParam(required = false) int httpStatus,
|
||||
RequestEntity<String> requestEntity){
|
||||
return klausService.setMockedResponse(clientUUID, mockedResponseId, HttpStatus.valueOf(httpStatus), requestEntity);
|
||||
}
|
||||
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "setMockedResponse",
|
||||
BusinessKey.CLIENT_UUID, String.valueOf(clientUUID),
|
||||
BusinessKey.MESSAGE_ID, String.valueOf(mockedResponseId)));
|
||||
|
||||
@RequestMapping(value = "klaus/v1/get/{clientUUID}/{mockedResponseId}")
|
||||
public ResponseEntity getMockedResponse(@PathVariable UUID clientUUID,
|
||||
@PathVariable int mockedResponseId){
|
||||
return klausService.getMockedResponse(clientUUID, mockedResponseId);
|
||||
MockedResponseDto mockedResponseDto = new MockedResponseDto(clientUUID, mockedResponseId,
|
||||
requestEntity.getHeaders().getContentType().toString(), requestEntity.getBody(),
|
||||
requestEntity.getHeaders().toSingleValueMap(), httpStatus);
|
||||
return klausService.setMockedResponse(mockedResponseDto);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
package com.release11.klaus.controller;
|
||||
|
||||
import com.release11.klaus.utilis.BusinessKey;
|
||||
import com.release11.klaus.utilis.TrackingClient;
|
||||
import com.release11.klaus.model.MockedResponseDto;
|
||||
import com.release11.klaus.service.KlausService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.*;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Arrays;
|
||||
import javax.validation.Valid;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
@Slf4j
|
||||
@@ -22,47 +22,44 @@ import java.util.UUID;
|
||||
@RequestMapping
|
||||
@AllArgsConstructor
|
||||
public class KlausMvcController {
|
||||
private final String SET_MOCKED_RESPONSE_PATH_V1 = "/klaus/v1/set/";
|
||||
private final String apiHost = "http://localhost:8097";
|
||||
private final KlausService klausService;
|
||||
|
||||
@GetMapping("/login")
|
||||
public String login(Model model) {
|
||||
UUID uuid = UUID.randomUUID();
|
||||
model.addAttribute("clientUUID", uuid);
|
||||
model.addAttribute("clientUUID", UUID.randomUUID());
|
||||
return "login";
|
||||
}
|
||||
|
||||
@GetMapping("/home")
|
||||
public String showHome(Model model, @RequestParam UUID clientUUID) {
|
||||
model.addAttribute("mockedResponseDto", new MockedResponseDto(clientUUID, 1,
|
||||
"body", new HttpHeaders(), "application/xml"));
|
||||
"application/xml", "body", new HashMap<>(), 200));
|
||||
return "index";
|
||||
}
|
||||
|
||||
//TODO refactor
|
||||
//TODO form validation and proper error messages
|
||||
@PostMapping("/home")
|
||||
public String showHomePost(Model model, MockedResponseDto mockedResponseDto,
|
||||
public String showHomePost(@Valid MockedResponseDto mockRsp, BindingResult bindingResult, Model model,
|
||||
@RequestParam(required = false) String[] header,
|
||||
@RequestParam(required = false) String[] value,
|
||||
@RequestParam(required = false) int httpStatus) {
|
||||
log.info(mockedResponseDto.toString());
|
||||
URI uri = URI.create(apiHost + SET_MOCKED_RESPONSE_PATH_V1 + mockedResponseDto.getClientUUID() + "/"
|
||||
+ mockedResponseDto.getMockedResponseId());
|
||||
@RequestParam(required = false) String[] value) throws Exception {
|
||||
if (bindingResult.hasErrors()) {
|
||||
return "index";
|
||||
}
|
||||
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "setMockedResponse",
|
||||
BusinessKey.CLIENT_UUID, String.valueOf(mockRsp.getClientUUID()),
|
||||
BusinessKey.MESSAGE_ID, String.valueOf(mockRsp.getMockedResponseId())));
|
||||
log.info(mockRsp.toString());
|
||||
|
||||
HttpHeaders httpHeaders = new HttpHeaders();
|
||||
httpHeaders.setContentType(MediaType.valueOf(mockedResponseDto.getMediaType()));
|
||||
httpHeaders.setContentType(MediaType.valueOf(mockRsp.getMediaType()));
|
||||
if (header!=null){
|
||||
for (int i = 0; i < header.length; i++) {
|
||||
httpHeaders.set(header[i], value[i]);
|
||||
}}
|
||||
RequestEntity<String> requestEntity = new RequestEntity<String>(mockedResponseDto.getMessageBody(),
|
||||
httpHeaders, HttpMethod.POST, uri);
|
||||
klausService.setMockedResponse(mockedResponseDto.getClientUUID(), mockedResponseDto.getMockedResponseId(),
|
||||
HttpStatus.valueOf(httpStatus), requestEntity);
|
||||
MockedResponseDto mockedResponseDto = new MockedResponseDto(mockRsp.getClientUUID(), mockRsp.getMockedResponseId(),
|
||||
mockRsp.getMediaType(), mockRsp.getMessageBody(), httpHeaders.toSingleValueMap(), mockRsp.getHttpStatus());
|
||||
|
||||
model.addAttribute("mockedResponseDto", new MockedResponseDto(mockedResponseDto.getClientUUID(), 1,
|
||||
"body", new HttpHeaders(), "application/xml"));
|
||||
klausService.setMockedResponse(mockedResponseDto);
|
||||
model.addAttribute("mockSaved", "true");
|
||||
return "index";
|
||||
}
|
||||
@@ -70,7 +67,16 @@ public class KlausMvcController {
|
||||
@GetMapping("/home/getMockedResponse")
|
||||
@ResponseBody
|
||||
public String showGetMockedResponse(MockedResponseDto mockedResponseDto) {
|
||||
return klausService.getMockedResponse(mockedResponseDto.getClientUUID(),
|
||||
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "getMockedResponse",
|
||||
BusinessKey.CLIENT_UUID, String.valueOf(mockedResponseDto.getClientUUID()),
|
||||
BusinessKey.MESSAGE_ID, String.valueOf(mockedResponseDto.getMockedResponseId())));
|
||||
return klausService.getMockedResponse(mockedResponseDto.getClientUUID(),
|
||||
mockedResponseDto.getMockedResponseId()).toString();
|
||||
}
|
||||
|
||||
private void setHeaders(MockedResponseDto mockedResponseDto, String[] header, String[] value){
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,22 +1,44 @@
|
||||
package com.release11.klaus.model;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.RequestEntity;
|
||||
import com.release11.klaus.model.constraints.HttpCode;
|
||||
import lombok.*;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.redis.core.RedisHash;
|
||||
import org.springframework.data.redis.core.index.Indexed;
|
||||
|
||||
import javax.validation.constraints.Positive;
|
||||
import java.io.Serializable;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
@Data
|
||||
@ToString
|
||||
@RedisHash("MockedResponseDto")
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class MockedResponseDto {
|
||||
public final class MockedResponseDto implements Serializable {
|
||||
@Id
|
||||
private String compositePrimaryKey;
|
||||
@Indexed
|
||||
private UUID clientUUID;
|
||||
@Positive
|
||||
private int mockedResponseId;
|
||||
private String messageBody;
|
||||
private HttpHeaders httpHeaders;
|
||||
private String mediaType;
|
||||
private String messageBody;
|
||||
private Map<String, String> httpHeaders;
|
||||
@HttpCode
|
||||
private Integer httpStatus;
|
||||
|
||||
public MockedResponseDto(UUID clientUUID, int mockedResponseId, String mediaType,
|
||||
String messageBody, Map<String, String> httpHeaders, Integer httpStatus) {
|
||||
this.compositePrimaryKey = clientUUID.toString() + "_" + mockedResponseId;
|
||||
this.clientUUID = clientUUID;
|
||||
this.mockedResponseId = mockedResponseId;
|
||||
this.mediaType = mediaType;
|
||||
this.messageBody = messageBody;
|
||||
this.httpHeaders = httpHeaders;
|
||||
this.httpStatus = httpStatus;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
package com.release11.klaus.repository;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.RequestEntity;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import redis.clients.jedis.Jedis;
|
||||
import redis.clients.jedis.JedisPool;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
|
||||
@Slf4j
|
||||
@Repository
|
||||
@Transactional
|
||||
@AllArgsConstructor
|
||||
public class MockedResponseRedisRepository implements MockedResponseRepository {
|
||||
|
||||
private final JedisPool jedisPool;
|
||||
|
||||
//TODO redis persistence
|
||||
public ResponseEntity<String> getMockedResponse(UUID clientUUID, int mockedResponseId){
|
||||
String body, httpCodeStatus;
|
||||
String key = String.format("%s_%s", clientUUID.toString(), mockedResponseId);
|
||||
HttpHeaders responseHeaders = new HttpHeaders();
|
||||
try(Jedis jedis = jedisPool.getResource()){
|
||||
body = jedis.get(key + "_body");
|
||||
Map<String, String> headerMap = jedis.hgetAll(key + "_headers");
|
||||
headerMap.forEach(responseHeaders::set);
|
||||
httpCodeStatus = jedis.get(key + "_httpCodeStatus");
|
||||
}
|
||||
return new ResponseEntity<String>(body, responseHeaders,
|
||||
Objects.requireNonNull(HttpStatus.valueOf(Integer.parseInt(httpCodeStatus))));
|
||||
}
|
||||
|
||||
public ResponseEntity<String> setMockedResponse(UUID clientUUID, int mockedResponseId, HttpStatus httpStatus,
|
||||
RequestEntity<String> requestEntity){
|
||||
log.info("mockedResponseRepository, setMockedResponse, clientUUID {}, mockedResponseId {}, httpStatus{} requestEntity{} ",
|
||||
clientUUID, mockedResponseId, httpStatus, requestEntity);
|
||||
if (httpStatus == null){httpStatus = HttpStatus.OK;}
|
||||
|
||||
String key = String.format("%s_%s", clientUUID.toString(), mockedResponseId);
|
||||
setMockedResponseBody(key + "_body", requestEntity.getBody());
|
||||
setMockedResponseHeader(key + "_headers", requestEntity.getHeaders().toSingleValueMap());
|
||||
setMockedResponseBody(key + "_httpCodeStatus", String.valueOf(httpStatus.value()));
|
||||
return new ResponseEntity<String>("MockedResponse has been setup successfully! :D", new HttpHeaders(), HttpStatus.ACCEPTED);
|
||||
}
|
||||
private synchronized void setMockedResponseBody(String key, String body){
|
||||
try(Jedis jedis = jedisPool.getResource()){
|
||||
jedis.set(key, body);
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void setMockedResponseHeader(String key, Map<String, String> headers){
|
||||
try(Jedis jedis = jedisPool.getResource()){
|
||||
jedis.del(key);
|
||||
headers.forEach((field, value)->jedis.hset(key, field, value));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,7 +1,11 @@
|
||||
package com.release11.klaus.repository;
|
||||
|
||||
import com.release11.klaus.model.MockedResponseDto;
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
@Repository
|
||||
public interface MockedResponseRepository {
|
||||
public interface MockedResponseRepository extends CrudRepository<MockedResponseDto, String>{
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.release11.klaus.service;
|
||||
|
||||
import com.release11.klaus.model.MockedResponseDto;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.RequestEntity;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
@@ -8,6 +9,5 @@ import java.util.UUID;
|
||||
|
||||
public interface KlausService {
|
||||
ResponseEntity<String> getMockedResponse(UUID clientUUID, int mockedResponseId);
|
||||
ResponseEntity<String> setMockedResponse(UUID clientUUID, int mockedResponseId, HttpStatus httpStatus,
|
||||
RequestEntity<String> requestEntity);
|
||||
ResponseEntity<String> setMockedResponse(MockedResponseDto mockedResponseDto);
|
||||
}
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
package com.release11.klaus.service;
|
||||
|
||||
import com.release11.klaus.repository.MockedResponseRedisRepository;
|
||||
import com.release11.klaus.model.MockedResponseDto;
|
||||
import com.release11.klaus.repository.MockedResponseRepository;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.RequestEntity;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
@Slf4j
|
||||
@@ -15,21 +18,27 @@ import java.util.UUID;
|
||||
@AllArgsConstructor
|
||||
public class KlausServiceImpl implements KlausService {
|
||||
|
||||
private final MockedResponseRedisRepository mockedResponseRedisRepository;
|
||||
private final MockedResponseRepository mockedResponseRepository;
|
||||
|
||||
@Override
|
||||
public ResponseEntity<String> getMockedResponse(UUID clientUUID, int mockedResponseId) {
|
||||
log.info("KlausServiceImpl, operation getMockedResponse, clientId {}, mockedResponseId {} ",
|
||||
clientUUID, mockedResponseId);
|
||||
ResponseEntity<String> responseEntity = mockedResponseRedisRepository.getMockedResponse(clientUUID, mockedResponseId);
|
||||
return responseEntity;
|
||||
String key = clientUUID.toString() + "_" + mockedResponseId;
|
||||
Optional<MockedResponseDto> optMockedResponseDto = mockedResponseRepository.findById(key);
|
||||
MockedResponseDto mockedResponseDto = optMockedResponseDto.get();
|
||||
HttpHeaders httpHeaders = new HttpHeaders();
|
||||
mockedResponseDto.getHttpHeaders().forEach(httpHeaders::set);
|
||||
return new ResponseEntity<>(mockedResponseDto.getMessageBody(), httpHeaders,
|
||||
Objects.requireNonNull(HttpStatus.valueOf(mockedResponseDto.getHttpStatus())));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<String> setMockedResponse(UUID clientUUID, int mockedResponseId, HttpStatus httpStatus,
|
||||
RequestEntity<String> requestEntity) {
|
||||
log.info("KlausServiceImpl, operation setMockedResponse, messageBody {}, mockedResponseId {} ",
|
||||
requestEntity, mockedResponseId);
|
||||
return mockedResponseRedisRepository.setMockedResponse(clientUUID, mockedResponseId, httpStatus,requestEntity);
|
||||
public ResponseEntity<String> setMockedResponse(MockedResponseDto mockedResponseDto) {
|
||||
mockedResponseRepository.save(mockedResponseDto);
|
||||
log.info("KlausServiceImpl, operation setMockedResponse, mockedResponseDto {} ", mockedResponseDto.toString());
|
||||
return new ResponseEntity<>("MockedResponse has been setup successfully!", new HttpHeaders(),
|
||||
HttpStatus.ACCEPTED);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
server.port = 8099
|
||||
server.port = 8097
|
||||
spring.output.ansi.enabled = always
|
||||
|
||||
logging.file.name=/var/log/klaus/
|
||||
#logging.file.name=/var/log/klaus/
|
||||
logging.level.root=INFO
|
||||
logging.level.org.springframework.web=DEBUG
|
||||
logging.level.com.release11=DEBUG
|
||||
logging.level.org.springframework.web=INFO
|
||||
logging.level.com.release11=INFO
|
||||
logging.file.max-size = 10MB
|
||||
spring.mvc.log-request-details=true
|
||||
appender.rolling.layout.type = ESJsonLayout
|
||||
appender.rolling.layout.type_name = server
|
||||
|
||||
@@ -1,3 +1,2 @@
|
||||
//redis.host = redis-server
|
||||
redis.host = localhost
|
||||
redis.port = 6379
|
||||
@@ -3,94 +3,63 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Title</title>
|
||||
<script type='text/javascript'>
|
||||
|
||||
|
||||
function httpGetAsync()
|
||||
{
|
||||
var clientUUID = document.getElementById("clientUUID").value;
|
||||
var mockedResponseId = document.getElementById("mockedResponseId").value;
|
||||
var url = "http://localhost:8097/klaus/v1/get/" + clientUUID + "/" + mockedResponseId;
|
||||
var xmlHttp = new XMLHttpRequest();
|
||||
xmlHttp.onreadystatechange = function() {
|
||||
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
|
||||
alert(xmlHttp.responseText);
|
||||
}
|
||||
xmlHttp.open("GET", url, true);
|
||||
xmlHttp.send(null);
|
||||
var container = document.getElementById("getMockedResponse");
|
||||
container.appendChild(document.createElement("br"));
|
||||
container.appendChild(document.createTextNode(xmlHttp.responseText));
|
||||
}
|
||||
|
||||
function httpGet()
|
||||
{
|
||||
var clientUUID = document.getElementById("getClientUUID").value;
|
||||
var mockedResponseId = document.getElementById("getMockedResponseId").value;
|
||||
var url = "http://localhost:8097/klaus/v1/get/" + clientUUID + "/" + mockedResponseId;
|
||||
var xmlHttp = new XMLHttpRequest();
|
||||
xmlHttp.open( "GET", url, false ); // false for synchronous request
|
||||
xmlHttp.send( null );
|
||||
|
||||
var container = document.getElementById("getMockedResponse");
|
||||
var headers = xmlHttp.getAllResponseHeaders();
|
||||
container.appendChild(document.createTextNode(headers));
|
||||
container.appendChild(document.createTextNode("Your message: "));
|
||||
container.appendChild(document.createElement("br"));
|
||||
container.appendChild(document.createTextNode((xmlHttp.responseText)));
|
||||
return xmlHttp.responseText;
|
||||
|
||||
}
|
||||
|
||||
var numberOfHeaders = 0;
|
||||
function addFields(){
|
||||
var container = document.getElementById("headers");
|
||||
|
||||
numberOfHeaders++;
|
||||
container.appendChild(document.createElement("br"));
|
||||
container.appendChild(document.createTextNode("Header " + (numberOfHeaders)));
|
||||
var headerInput = document.createElement("input");
|
||||
headerInput.type = "text";
|
||||
headerInput.name = "header";
|
||||
container.appendChild(headerInput);
|
||||
|
||||
container.appendChild(document.createTextNode("Value " + (numberOfHeaders)));
|
||||
var valueInput = document.createElement("input");
|
||||
valueInput.type = "text";
|
||||
valueInput.name = "value";
|
||||
container.appendChild(valueInput);
|
||||
}
|
||||
</script>
|
||||
<script src="/js/main.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<br>----------------------------------------------------------------------------------------------------------------
|
||||
<hr>
|
||||
<div><br>In order to set mockup response. Please send the response, that you want to receive, on:
|
||||
<br>http://localhost:8097/klaus/v1/set/ <a th:text="${mockedResponseDto.clientUUID}">clientUUID should be here</a>/{mockedResponseId}?httpStatus=200
|
||||
<br>or simply fill and submit the below form:</div>
|
||||
|
||||
<div class="col-lg-4 form-max">
|
||||
sayHi('John');
|
||||
<form action="#" th:action="@{/home}" th:object="${mockedResponseDto}" method="post">
|
||||
<input type="text" th:field="*{clientUUID}" th:placeholder="*{clientUUID}" hidden/>
|
||||
<br><label >Mocked response id:</label><br/>
|
||||
<input type="text" th:field="*{mockedResponseId}" th:value=1/>
|
||||
<br><label >Mocked response body:</label><br/>
|
||||
<textarea rows="4" cols="50" th:field="*{messageBody}" th:placeholder='messageBody'></textarea>
|
||||
<br><label >Mocked response http code status:</label><br/>
|
||||
<input type="text" th:name="httpStatus" th:value='200' />
|
||||
<br>Provide mocked response headers: <a href="#" id="addHeader" onclick="addFields()">Add a new header</a>
|
||||
<div id="headers"></div>
|
||||
<br><label >Media type:</label>
|
||||
<select th:field="*{mediaType}">
|
||||
<option value="application/xml">application/xml</option>
|
||||
<option value="application/json">application/json</option>
|
||||
<option value="text/xml">text/xml</option>
|
||||
</select>
|
||||
<input type="submit" value="Save mocked response" onclick="submit()"/>
|
||||
<table>
|
||||
<input type="text" th:field="*{clientUUID}" th:placeholder="*{clientUUID}" hidden/>
|
||||
<tr>
|
||||
<td>Mocked response id:</td>
|
||||
<td><input type="text" th:field="*{mockedResponseId}" th:value=1/></td>
|
||||
<td th:if="${#fields.hasErrors('mockedResponseId')}" th:errors="*{mockedResponseId}">Id Error</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Mocked response body:</td>
|
||||
<td><textarea rows="4" cols="50" th:field="*{messageBody}" th:placeholder='messageBody'></textarea></td>
|
||||
<td th:if="${#fields.hasErrors('messageBody')}" th:errors="*{messageBody}">Body Error</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Mocked response http code status:</td>
|
||||
<td><input type="text" th:field="*{httpStatus}" th:value='200'></td>
|
||||
<td th:if="${#fields.hasErrors('httpStatus')}" th:errors="*{httpStatus}">HttpStatus Error</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Provide mocked response headers:</td>
|
||||
<td><a href="#" id="addHeader" onclick="addFields()">Add a new header</a>
|
||||
<table>
|
||||
<tr>
|
||||
<td><div id="headers"></div></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Media type:</td>
|
||||
<td><select th:field="*{mediaType}">
|
||||
<option value="application/xml">application/xml</option>
|
||||
<option value="application/json">application/json</option>
|
||||
<option value="text/xml">text/xml</option>
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input type="submit" value="Save mocked response"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<p th:if="${mockSaved}">Mock has been saved</p>
|
||||
|
||||
|
||||
<br>----------------------------------------------------------------------------------------------------------------
|
||||
<hr>
|
||||
|
||||
<div><br>In order to use the mocked response in your integration tests or simply
|
||||
get your mocked response please send a request to
|
||||
<br>http://localhost:8097/klaus/v1/get/<a th:text="${mockedResponseDto.clientUUID}">clientUUID should be here</a>/{mockedResponseId}
|
||||
@@ -104,7 +73,7 @@ function httpGet()
|
||||
<input type="text" th:field="*{mockedResponseId}" th:placeholder="12345"/>
|
||||
<input type="submit" value="Get mocked response"/>
|
||||
</form>
|
||||
<br>----------------------------------------------------------------------------------------------------------------
|
||||
<hr>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Login</title>
|
||||
<script src="/js/main.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div><br>Please move to the next step with your own client UUID: </div>
|
||||
@@ -16,5 +17,6 @@
|
||||
<br><a th:text="${clientUUID}">clientUUID should be here</a>
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -3,12 +3,8 @@ package com.release11.klaus.config;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.core.env.Environment;
|
||||
import redis.clients.jedis.Jedis;
|
||||
import redis.clients.jedis.JedisPool;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
@SpringBootTest
|
||||
class RedisConfigTest {
|
||||
|
||||
|
||||
@@ -2,8 +2,6 @@ package com.release11.klaus.controller;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class KlausControllerTest {
|
||||
|
||||
@Test
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
package com.release11.klaus.controller;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.http.HttpStatus;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
@@ -8,5 +14,6 @@ class KlausMvcControllerTest {
|
||||
|
||||
@Test
|
||||
void showHome() {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,5 +12,11 @@ class MockedResponseRedisRepositoryTest {
|
||||
|
||||
@Test
|
||||
void setMockedResponse() {
|
||||
// System.out.println("Before Test, clearing Redis");
|
||||
// JedisPool pool = new JedisPool("localhost");
|
||||
// redis = pool.getResource();
|
||||
// redis.ltrim(key, 1, 0);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.release11.klaus.service;
|
||||
|
||||
import com.release11.klaus.repository.MockedResponseRedisRepository;
|
||||
import com.release11.klaus.model.MockedResponseDto;
|
||||
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.InjectMocks;
|
||||
@@ -19,43 +20,44 @@ import static org.mockito.Mockito.*;
|
||||
@SpringBootTest
|
||||
class KlausServiceImplTest {
|
||||
|
||||
@Mock
|
||||
MockedResponseRedisRepository mockedResponseRedisRepository;
|
||||
|
||||
@InjectMocks
|
||||
KlausServiceImpl klausServiceImpl;
|
||||
|
||||
private final static UUID uuid = UUID.fromString("e4248095-100e-4f1f-8226-e722014ae29f");
|
||||
private final static URI uri = URI.create("http//:localhost:8080");
|
||||
private static ResponseEntity<String> mockedResponseEntity;
|
||||
private static RequestEntity<String> mockedRequestEntity;
|
||||
|
||||
@BeforeAll
|
||||
public static void initializeMockEntities(){
|
||||
HttpHeaders httpHeaders = new HttpHeaders();
|
||||
mockedResponseEntity = new ResponseEntity<String>("body", httpHeaders, HttpStatus.ACCEPTED);
|
||||
mockedRequestEntity = new RequestEntity<String>(HttpMethod.POST, uri);
|
||||
}
|
||||
|
||||
@Test
|
||||
void getMockedResponse() {
|
||||
when(mockedResponseRedisRepository.getMockedResponse(any(), anyInt()))
|
||||
.thenReturn(mockedResponseEntity);
|
||||
|
||||
ResponseEntity<String> responseEntity = klausServiceImpl.getMockedResponse(uuid, 1);
|
||||
assertThat(responseEntity).isNotNull();
|
||||
verify(mockedResponseRedisRepository).getMockedResponse(any(), anyInt());
|
||||
}
|
||||
|
||||
@Test
|
||||
void setMockedResponse() {
|
||||
when(mockedResponseRedisRepository.setMockedResponse(any(), anyInt(), any(), any()))
|
||||
.thenReturn(mockedResponseEntity);
|
||||
|
||||
ResponseEntity<String> responseEntity = klausServiceImpl.setMockedResponse(uuid, 1,
|
||||
HttpStatus.ACCEPTED, mockedRequestEntity);
|
||||
assertThat(responseEntity).isNotNull();
|
||||
verify(mockedResponseRedisRepository).setMockedResponse(any(), anyInt(), any(), any());
|
||||
}
|
||||
// @Mock
|
||||
// MockedResponseRedisRepository mockedResponseRedisRepository;
|
||||
//
|
||||
// @InjectMocks
|
||||
// KlausServiceImpl klausServiceImpl;
|
||||
//
|
||||
// private final static UUID uuid = UUID.fromString("e4248095-100e-4f1f-8226-e722014ae29f");
|
||||
// private final static URI uri = URI.create("http//:localhost:8080");
|
||||
// private static ResponseEntity<String> mockedResponseEntity;
|
||||
// private static RequestEntity<String> mockedRequestEntity;
|
||||
// private static MockedResponseDto mockedResponseDto = new MockedResponseDto(uuid, 1, "application/xml", "body",
|
||||
// new HttpHeaders(), 200);
|
||||
//
|
||||
// @BeforeAll
|
||||
// public static void initializeMockEntities(){
|
||||
// HttpHeaders httpHeaders = new HttpHeaders();
|
||||
// mockedResponseEntity = new ResponseEntity<String>("body", httpHeaders, HttpStatus.ACCEPTED);
|
||||
// mockedRequestEntity = new RequestEntity<String>(HttpMethod.POST, uri);
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// void getMockedResponse() {
|
||||
//// when(mockedResponseRedisRepository.getMockedResponse(any(), anyInt()))
|
||||
//// .thenReturn(mockedResponseEntity);
|
||||
////
|
||||
//// ResponseEntity<String> responseEntity = klausServiceImpl.getMockedResponse(uuid, 1);
|
||||
//// assertThat(responseEntity).isNotNull();
|
||||
//// verify(mockedResponseRedisRepository).getMockedResponse(any(), anyInt());
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// void setMockedResponse() {
|
||||
// when(mockedResponseRedisRepository.setMockedResponse(any()))
|
||||
// .thenReturn(mockedResponseEntity);
|
||||
//
|
||||
// ResponseEntity<String> responseEntity = klausServiceImpl.setMockedResponse(mockedResponseDto);
|
||||
// assertThat(responseEntity).isNotNull();
|
||||
// verify(mockedResponseRedisRepository).setMockedResponse(any());
|
||||
// }
|
||||
|
||||
}
|
||||
@@ -1,9 +1,11 @@
|
||||
server.port = 8099
|
||||
server.port = 8098
|
||||
spring.output.ansi.enabled = always
|
||||
|
||||
logging.file.name=/var/log/klaus/
|
||||
#logging.file.name=/var/log/klaus/
|
||||
logging.level.root=INFO
|
||||
logging.level.org.springframework.web=DEBUG
|
||||
logging.level.com.release11=DEBUG
|
||||
logging.level.org.springframework.web=INFO
|
||||
logging.level.com.release11=INFO
|
||||
logging.file.max-size = 10MB
|
||||
spring.mvc.log-request-details=true
|
||||
appender.rolling.layout.type = ESJsonLayout
|
||||
appender.rolling.layout.type_name = server
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,3 +1,2 @@
|
||||
//redis.host = redis-server
|
||||
redis.host = localhost
|
||||
redis.port = 6379
|
||||
@@ -3,94 +3,63 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Title</title>
|
||||
<script type='text/javascript'>
|
||||
|
||||
|
||||
function httpGetAsync()
|
||||
{
|
||||
var clientUUID = document.getElementById("clientUUID").value;
|
||||
var mockedResponseId = document.getElementById("mockedResponseId").value;
|
||||
var url = "http://localhost:8097/klaus/v1/get/" + clientUUID + "/" + mockedResponseId;
|
||||
var xmlHttp = new XMLHttpRequest();
|
||||
xmlHttp.onreadystatechange = function() {
|
||||
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
|
||||
alert(xmlHttp.responseText);
|
||||
}
|
||||
xmlHttp.open("GET", url, true);
|
||||
xmlHttp.send(null);
|
||||
var container = document.getElementById("getMockedResponse");
|
||||
container.appendChild(document.createElement("br"));
|
||||
container.appendChild(document.createTextNode(xmlHttp.responseText));
|
||||
}
|
||||
|
||||
function httpGet()
|
||||
{
|
||||
var clientUUID = document.getElementById("getClientUUID").value;
|
||||
var mockedResponseId = document.getElementById("getMockedResponseId").value;
|
||||
var url = "http://localhost:8097/klaus/v1/get/" + clientUUID + "/" + mockedResponseId;
|
||||
var xmlHttp = new XMLHttpRequest();
|
||||
xmlHttp.open( "GET", url, false ); // false for synchronous request
|
||||
xmlHttp.send( null );
|
||||
|
||||
var container = document.getElementById("getMockedResponse");
|
||||
var headers = xmlHttp.getAllResponseHeaders();
|
||||
container.appendChild(document.createTextNode(headers));
|
||||
container.appendChild(document.createTextNode("Your message: "));
|
||||
container.appendChild(document.createElement("br"));
|
||||
container.appendChild(document.createTextNode((xmlHttp.responseText)));
|
||||
return xmlHttp.responseText;
|
||||
|
||||
}
|
||||
|
||||
var numberOfHeaders = 0;
|
||||
function addFields(){
|
||||
var container = document.getElementById("headers");
|
||||
|
||||
numberOfHeaders++;
|
||||
container.appendChild(document.createElement("br"));
|
||||
container.appendChild(document.createTextNode("Header " + (numberOfHeaders)));
|
||||
var headerInput = document.createElement("input");
|
||||
headerInput.type = "text";
|
||||
headerInput.name = "header";
|
||||
container.appendChild(headerInput);
|
||||
|
||||
container.appendChild(document.createTextNode("Value " + (numberOfHeaders)));
|
||||
var valueInput = document.createElement("input");
|
||||
valueInput.type = "text";
|
||||
valueInput.name = "value";
|
||||
container.appendChild(valueInput);
|
||||
}
|
||||
</script>
|
||||
<script src="/js/main.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<br>----------------------------------------------------------------------------------------------------------------
|
||||
<hr>
|
||||
<div><br>In order to set mockup response. Please send the response, that you want to receive, on:
|
||||
<br>http://localhost:8097/klaus/v1/set/ <a th:text="${mockedResponseDto.clientUUID}">clientUUID should be here</a>/{mockedResponseId}?httpStatus=200
|
||||
<br>or simply fill and submit the below form:</div>
|
||||
|
||||
<div class="col-lg-4 form-max">
|
||||
sayHi('John');
|
||||
<form action="#" th:action="@{/home}" th:object="${mockedResponseDto}" method="post">
|
||||
<input type="text" th:field="*{clientUUID}" th:placeholder="*{clientUUID}" hidden/>
|
||||
<br><label >Mocked response id:</label><br/>
|
||||
<input type="text" th:field="*{mockedResponseId}" th:value=1/>
|
||||
<br><label >Mocked response body:</label><br/>
|
||||
<textarea rows="4" cols="50" th:field="*{messageBody}" th:placeholder='messageBody'></textarea>
|
||||
<br><label >Mocked response http code status:</label><br/>
|
||||
<input type="text" th:name="httpStatus" th:value='200' />
|
||||
<br>Provide mocked response headers: <a href="#" id="addHeader" onclick="addFields()">Add a new header</a>
|
||||
<div id="headers"></div>
|
||||
<br><label >Media type:</label>
|
||||
<select th:field="*{mediaType}">
|
||||
<option value="application/xml">application/xml</option>
|
||||
<option value="application/json">application/json</option>
|
||||
<option value="text/xml">text/xml</option>
|
||||
</select>
|
||||
<input type="submit" value="Save mocked response" onclick="submit()"/>
|
||||
<table>
|
||||
<input type="text" th:field="*{clientUUID}" th:placeholder="*{clientUUID}" hidden/>
|
||||
<tr>
|
||||
<td>Mocked response id:</td>
|
||||
<td><input type="text" th:field="*{mockedResponseId}" th:value=1/></td>
|
||||
<td th:if="${#fields.hasErrors('mockedResponseId')}" th:errors="*{mockedResponseId}">Id Error</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Mocked response body:</td>
|
||||
<td><textarea rows="4" cols="50" th:field="*{messageBody}" th:placeholder='messageBody'></textarea></td>
|
||||
<td th:if="${#fields.hasErrors('messageBody')}" th:errors="*{messageBody}">Body Error</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Mocked response http code status:</td>
|
||||
<td><input type="text" th:field="*{httpStatus}" th:value='200'></td>
|
||||
<td th:if="${#fields.hasErrors('httpStatus')}" th:errors="*{httpStatus}">HttpStatus Error</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Provide mocked response headers:</td>
|
||||
<td><a href="#" id="addHeader" onclick="addFields()">Add a new header</a>
|
||||
<table>
|
||||
<tr>
|
||||
<td><div id="headers"></div></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Media type:</td>
|
||||
<td><select th:field="*{mediaType}">
|
||||
<option value="application/xml">application/xml</option>
|
||||
<option value="application/json">application/json</option>
|
||||
<option value="text/xml">text/xml</option>
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input type="submit" value="Save mocked response"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<p th:if="${mockSaved}">Mock has been saved</p>
|
||||
|
||||
|
||||
<br>----------------------------------------------------------------------------------------------------------------
|
||||
<hr>
|
||||
|
||||
<div><br>In order to use the mocked response in your integration tests or simply
|
||||
get your mocked response please send a request to
|
||||
<br>http://localhost:8097/klaus/v1/get/<a th:text="${mockedResponseDto.clientUUID}">clientUUID should be here</a>/{mockedResponseId}
|
||||
@@ -104,7 +73,7 @@ function httpGet()
|
||||
<input type="text" th:field="*{mockedResponseId}" th:placeholder="12345"/>
|
||||
<input type="submit" value="Get mocked response"/>
|
||||
</form>
|
||||
<br>----------------------------------------------------------------------------------------------------------------
|
||||
<hr>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Login</title>
|
||||
<script src="/js/main.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div><br>Please move to the next step with your own client UUID: </div>
|
||||
@@ -16,5 +17,6 @@
|
||||
<br><a th:text="${clientUUID}">clientUUID should be here</a>
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user