-
Notifications
You must be signed in to change notification settings - Fork 241
Expand file tree
/
Copy pathDemogatewayApplicationTests.java
More file actions
131 lines (112 loc) · 3.38 KB
/
Copy pathDemogatewayApplicationTests.java
File metadata and controls
131 lines (112 loc) · 3.38 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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package com.example.demogateway;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.http.HttpStatus;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.reactive.server.FluxExchangeResult;
import org.springframework.test.web.reactive.server.WebTestClient;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.web.reactive.function.client.ExchangeFilterFunctions.basicAuthentication;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class DemogatewayApplicationTests {
@LocalServerPort
int port;
private WebTestClient client;
int staticPort = 8080;
private WebTestClient staticClient;
@Before
public void setup() {
client = WebTestClient.bindToServer().baseUrl("http://localhost:" + port).build();
staticClient = WebTestClient.bindToServer().baseUrl("http://localhost:" + staticPort).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 helloPathRouteWorks() {
staticClient.get().uri("/hello")
.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 hystrixRouteWorks() {
client.get().uri("/delay/3")
.header("Host", "www.hystrix.org")
.exchange()
.expectStatus().isEqualTo(HttpStatus.GATEWAY_TIMEOUT);
}
@Test
@SuppressWarnings("unchecked")
public void hystrixFallbackRouteWorks() {
client.get().uri("/delay/3")
.header("Host", "www.hystrixfallback.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();
}
}