Skip to content

Commit 436e2a8

Browse files
committed
added functional-tests
1 parent b09977f commit 436e2a8

File tree

19 files changed

+318
-779
lines changed

19 files changed

+318
-779
lines changed

functional-tests/pom.xml

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
6+
<groupId>com.hantsylabs.sample.springmicroservice</groupId>
7+
<artifactId>ftest</artifactId>
8+
<version>0.0.1-SNAPSHOT</version>
9+
<packaging>jar</packaging>
10+
11+
<name>ftest</name>
12+
<description>Functional tests for Spring Microservice Demo</description>
13+
14+
<parent>
15+
<groupId>org.springframework.boot</groupId>
16+
<artifactId>spring-boot-starter-parent</artifactId>
17+
<version>2.0.0.M1</version>
18+
<relativePath/> <!-- lookup parent from repository -->
19+
</parent>
20+
21+
<properties>
22+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23+
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
24+
<java.version>1.8</java.version>
25+
<docker.image.prefix>hantsylab</docker.image.prefix>
26+
</properties>
27+
28+
<dependencies>
29+
<!--Lombok-->
30+
<dependency>
31+
<groupId>org.projectlombok</groupId>
32+
<artifactId>lombok</artifactId>
33+
</dependency>
34+
35+
<dependency>
36+
<groupId>org.hibernate</groupId>
37+
<artifactId>hibernate-validator</artifactId>
38+
</dependency>
39+
40+
<dependency>
41+
<groupId>com.fasterxml.jackson.module</groupId>
42+
<artifactId>jackson-module-parameter-names</artifactId>
43+
</dependency>
44+
45+
<dependency>
46+
<groupId>com.fasterxml.jackson.datatype</groupId>
47+
<artifactId>jackson-datatype-jdk8</artifactId>
48+
</dependency>
49+
50+
<dependency>
51+
<groupId>com.fasterxml.jackson.datatype</groupId>
52+
<artifactId>jackson-datatype-jsr310</artifactId>
53+
</dependency>
54+
55+
<dependency>
56+
<groupId>org.springframework.boot</groupId>
57+
<artifactId>spring-boot-devtools</artifactId>
58+
<scope>runtime</scope>
59+
</dependency>
60+
61+
<dependency>
62+
<groupId>org.springframework.boot</groupId>
63+
<artifactId>spring-boot-starter-test</artifactId>
64+
<scope>test</scope>
65+
</dependency>
66+
67+
<dependency>
68+
<groupId>org.springframework.security</groupId>
69+
<artifactId>spring-security-test</artifactId>
70+
<scope>test</scope>
71+
</dependency>
72+
73+
</dependencies>
74+
75+
<repositories>
76+
<repository>
77+
<id>spring-snapshots</id>
78+
<name>Spring Snapshots</name>
79+
<url>https://repo.spring.io/snapshot</url>
80+
<snapshots>
81+
<enabled>true</enabled>
82+
</snapshots>
83+
</repository>
84+
<repository>
85+
<id>spring-milestones</id>
86+
<name>Spring Milestones</name>
87+
<url>https://repo.spring.io/milestone</url>
88+
<snapshots>
89+
<enabled>false</enabled>
90+
</snapshots>
91+
</repository>
92+
</repositories>
93+
94+
<pluginRepositories>
95+
<pluginRepository>
96+
<id>spring-snapshots</id>
97+
<name>Spring Snapshots</name>
98+
<url>https://repo.spring.io/snapshot</url>
99+
<snapshots>
100+
<enabled>true</enabled>
101+
</snapshots>
102+
</pluginRepository>
103+
<pluginRepository>
104+
<id>spring-milestones</id>
105+
<name>Spring Milestones</name>
106+
<url>https://repo.spring.io/milestone</url>
107+
<snapshots>
108+
<enabled>false</enabled>
109+
</snapshots>
110+
</pluginRepository>
111+
</pluginRepositories>
112+
113+
114+
</project>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* To change this license header, choose License Headers in Project Properties.
3+
* To change this template file, choose Tools | Templates
4+
* and open the template in the editor.
5+
*/
6+
package com.hantsylabs.sample.springmicroservice.test;
7+
8+
import java.io.Serializable;
9+
import lombok.Builder;
10+
import lombok.Data;
11+
12+
/**
13+
*
14+
* @author hantsy
15+
*/
16+
@Data
17+
@Builder
18+
public class AuthenticationRequest implements Serializable{
19+
private String username;
20+
private String password;
21+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.hantsylabs.sample.springmicroservice.test;
2+
3+
import java.io.Serializable;
4+
import javax.validation.constraints.NotNull;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Builder;
7+
import lombok.Data;
8+
import lombok.NoArgsConstructor;
9+
import org.hibernate.validator.constraints.NotEmpty;
10+
11+
/**
12+
*
13+
* @author Hantsy Bai<[email protected]>
14+
*
15+
*/
16+
@Data
17+
@Builder
18+
@NoArgsConstructor
19+
@AllArgsConstructor
20+
public class CommentForm implements Serializable {
21+
/**
22+
*
23+
*/
24+
private static final long serialVersionUID = 1L;
25+
26+
@NotNull
27+
@NotEmpty
28+
private String content;
29+
30+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.hantsylabs.sample.springmicroservice.test;
2+
3+
import java.io.Serializable;
4+
import javax.validation.constraints.NotNull;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Builder;
7+
import lombok.Data;
8+
import lombok.NoArgsConstructor;
9+
import org.hibernate.validator.constraints.NotEmpty;
10+
11+
/**
12+
*
13+
* @author Hantsy Bai<[email protected]>
14+
*
15+
*/
16+
@Data
17+
@Builder
18+
@NoArgsConstructor
19+
@AllArgsConstructor
20+
public class PostForm implements Serializable {
21+
22+
/**
23+
*
24+
*/
25+
private static final long serialVersionUID = 1L;
26+
27+
@NotNull
28+
@NotEmpty
29+
private String title;
30+
31+
@NotNull
32+
@NotEmpty
33+
private String content;
34+
35+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
server:
2+
port: 8002
3+
4+
spring:
5+
redis:
6+
host: ${REDIS_HOST:localhost}
7+
cache:
8+
type: redis
9+
10+
session:
11+
store-type: redis
12+
13+
messages:
14+
basename: messages
15+
16+
datasource:
17+
dataSourceClassName: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
18+
url: ${POSTDB_URL:jdbc:mysql://localhost:3307/postdb}
19+
username: user
20+
password: password
21+
cachePrepStmts: true
22+
prepStmtCacheSize: 250
23+
prepStmtCacheSqlLimit: 2048
24+
useServerPrepStmts: true
25+
26+
jpa:
27+
database-platform: org.hibernate.dialect.MySQL5Dialect
28+
database: MYSQL
29+
openInView: false
30+
show_sql: false
31+
generate-ddl: true
32+
hibernate:
33+
ddl-auto: create-drop
34+
naming-strategy: org.hibernate.cfg.EJB3NamingStrategy
35+
properties:
36+
hibernate.cache.use_second_level_cache: true
37+
hibernate.cache.use_query_cache: false
38+
hibernate.generate_statistics: true
39+
hibernate.cache.region.factory_class: org.hibernate.cache.internal.NoCachingRegionFactory
40+
41+
data:
42+
jpa:
43+
repositories.enabled: true
44+
45+
security:
46+
sessions: ALWAYS
47+
48+
logging:
49+
level:
50+
org.springframework.web: INFO
51+
org.springframework.security: DEBUG
52+
com.hantsylabs: DEBUG
53+
file: app.log
54+
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.hantsylabs.sample.springmicroservice.post;
2+
3+
import com.hantsylabs.sample.springmicroservice.test.AuthenticationRequest;
4+
import com.hantsylabs.sample.springmicroservice.test.PostForm;
5+
import lombok.extern.slf4j.Slf4j;
6+
import static org.junit.Assert.assertEquals;
7+
import static org.junit.Assert.assertNotNull;
8+
import org.junit.Test;
9+
import org.springframework.boot.test.autoconfigure.web.client.RestClientTest;
10+
import org.springframework.boot.test.web.client.TestRestTemplate;
11+
import org.springframework.http.HttpEntity;
12+
import org.springframework.http.HttpHeaders;
13+
import org.springframework.http.HttpMethod;
14+
import org.springframework.http.HttpStatus;
15+
import org.springframework.http.MediaType;
16+
import org.springframework.http.ResponseEntity;
17+
18+
@RestClientTest
19+
@Slf4j
20+
public class FunctionalTests {
21+
22+
private int port = 80;
23+
24+
private final String AUTH_URL = "http://localhost/api/auth-service/auth";
25+
private final String POST_URL = "http://localhost/api/post-service/posts";
26+
27+
private TestRestTemplate template = new TestRestTemplate();
28+
29+
@Test
30+
public void getAllPosts() {
31+
ResponseEntity<String> response = template.getForEntity(POST_URL, String.class);
32+
assertEquals(HttpStatus.OK, response.getStatusCode());
33+
}
34+
35+
@Test
36+
public void createPostWithoutAuthentication() {
37+
ResponseEntity<Void> response = template.postForEntity(POST_URL, PostForm.builder().title("my title").content("my content of my title").build(), Void.class);
38+
assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode());
39+
}
40+
41+
@Test
42+
public void createPostWithAuthentication() {
43+
44+
//signin with user/test123
45+
ResponseEntity<String> authResponse = template.postForEntity(AUTH_URL + "/signin", AuthenticationRequest.builder().username("user").password("test123").build(), String.class);
46+
assertEquals(HttpStatus.OK, authResponse.getStatusCode());
47+
assertNotNull(authResponse.getHeaders().getFirst("X-Auth-Token"));
48+
log.debug("\nsignin response:\n {}", authResponse.getBody());
49+
50+
//create a new post
51+
HttpHeaders headers = new HttpHeaders();
52+
headers.add("X-Auth-Token", authResponse.getHeaders().getFirst("X-Auth-Token"));
53+
headers.add("Content-Type", MediaType.APPLICATION_JSON_UTF8_VALUE);
54+
55+
ResponseEntity<Void> response = template.exchange(POST_URL,
56+
HttpMethod.POST,
57+
new HttpEntity<>(PostForm.builder().title("my title").content("my content of my title").build(), headers),
58+
Void.class
59+
);
60+
61+
assertEquals(HttpStatus.CREATED, response.getStatusCode());
62+
}
63+
64+
}

auth-service/mvnw renamed to mvnw

File renamed without changes.
File renamed without changes.
-46.5 KB
Binary file not shown.

post-service/.mvn/wrapper/maven-wrapper.properties

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)