-
Notifications
You must be signed in to change notification settings - Fork 241
Expand file tree
/
Copy pathDemogatewayApplicationTests.java
More file actions
113 lines (95 loc) · 2.9 KB
/
Copy pathDemogatewayApplicationTests.java
File metadata and controls
113 lines (95 loc) · 2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package com.example.demogateway;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.http.HttpStatus;
import org.springframework.test.web.reactive.server.FluxExchangeResult;
import org.springframework.test.web.reactive.server.WebTestClient;
import java.util.Map;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.basicAuthentication;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class DemogatewayApplicationTests {
@LocalServerPort
int port;
private WebTestClient client;
@BeforeEach
public void setup() {
client = WebTestClient.bindToServer().baseUrl("http://localhost:" + port).build();
}
@Test
@SuppressWarnings("unchecked")
public void pathRouteWorks() {
client.get().uri("/get")
.exchange()
.expectStatus().isOk()
.expectBody(Map.class)
.consumeWith(result -> {
assertThat(result.getResponseBody()).isNotEmpty();
});
}
@Test
@SuppressWarnings("unchecked")
public void hostRouteWorks() {
client.get().uri("/headers")
.header("Host", "www.myhost.org")
.exchange()
.expectStatus().isOk()
.expectBody(Map.class)
.consumeWith(result -> {
assertThat(result.getResponseBody()).isNotEmpty();
});
}
@Test
@SuppressWarnings("unchecked")
public void rewriteRouteWorks() {
client.get().uri("/foo/get")
.header("Host", "www.rewrite.org")
.exchange()
.expectStatus().isOk()
.expectBody(Map.class)
.consumeWith(result -> {
assertThat(result.getResponseBody()).isNotEmpty();
});
}
@Test
@SuppressWarnings("unchecked")
public void circuitBreakerRouteWorks() {
client.get().uri("/delay/3")
.header("Host", "www.circuitbreaker.org")
.exchange()
.expectStatus().isEqualTo(HttpStatus.GATEWAY_TIMEOUT);
}
@Test
@SuppressWarnings("unchecked")
public void circuitBreakerFallbackRouteWorks() {
client.get().uri("/delay/3")
.header("Host", "www.circuitbreakerfallback.org")
.exchange()
.expectStatus().isOk()
.expectBody(String.class).isEqualTo("This is a fallback");
}
@Test
public void rateLimiterWorks() {
WebTestClient authClient = client.mutate()
.filter(basicAuthentication("user", "password"))
.build();
boolean wasLimited = false;
for (int i = 0; i < 20; i++) {
FluxExchangeResult<Map> result = authClient.get()
.uri("/anything/1")
.header("Host", "www.limited.org")
.exchange()
.returnResult(Map.class);
if (result.getStatus().equals(HttpStatus.TOO_MANY_REQUESTS)) {
System.out.println("Received result: "+result);
wasLimited = true;
break;
}
}
assertThat(wasLimited)
.as("A HTTP 429 TOO_MANY_REQUESTS was not received")
.isTrue();
}
}