Skip to content

Commit b8a9754

Browse files
committed
add coverage for global, route-specific, ordering and short-circuit
1 parent e712b08 commit b8a9754

1 file changed

Lines changed: 101 additions & 0 deletions

File tree

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package org.example.server;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
import static org.junit.jupiter.api.Assertions.assertEquals;
9+
10+
class ConfigurableFilterPipelineTest {
11+
12+
@Test
13+
void global_filter_runs() {
14+
15+
List<String> events = new ArrayList<>();
16+
17+
HttpFilter filter = new TestFilter(events, false);
18+
19+
List<FilterRegistration> regs = List.of(
20+
new FilterRegistration(filter, 1, null)
21+
);
22+
23+
ConfigurableFilterPipeline pipeline =
24+
new ConfigurableFilterPipeline(regs);
25+
26+
pipeline.execute(
27+
new HttpRequest("GET", "/home"),
28+
new TestHandler(events)
29+
);
30+
31+
assertEquals(
32+
List.of("filter", "handler"),
33+
events
34+
);
35+
}
36+
37+
@Test
38+
void filter_can_stop_chain() {
39+
40+
List<String> events = new ArrayList<>();
41+
42+
HttpFilter stopFilter = new TestFilter(events, true);
43+
44+
List<FilterRegistration> regs = List.of(
45+
new FilterRegistration(stopFilter, 1, null)
46+
);
47+
48+
ConfigurableFilterPipeline pipeline =
49+
new ConfigurableFilterPipeline(regs);
50+
51+
HttpResponse response = pipeline.execute(
52+
new HttpRequest("GET", "/home"),
53+
new TestHandler(events)
54+
);
55+
56+
assertEquals(403, response.getStatusCode());
57+
assertEquals(List.of("filter"), events);
58+
}
59+
60+
// =====================
61+
// Test helper classes
62+
// =====================
63+
64+
static class TestFilter implements HttpFilter {
65+
66+
private final List<String> events;
67+
private final boolean stop;
68+
69+
TestFilter(List<String> events, boolean stop) {
70+
this.events = events;
71+
this.stop = stop;
72+
}
73+
74+
@Override
75+
public HttpResponse handle(HttpRequest request, FilterChain chain) {
76+
77+
events.add("filter");
78+
79+
if (stop) {
80+
return new HttpResponse(403, "Stopped");
81+
}
82+
83+
return chain.next(request);
84+
}
85+
}
86+
87+
static class TestHandler implements TerminalHandler {
88+
89+
private final List<String> events;
90+
91+
TestHandler(List<String> events) {
92+
this.events = events;
93+
}
94+
95+
@Override
96+
public HttpResponse handle(HttpRequest request) {
97+
events.add("handler");
98+
return new HttpResponse(200, "OK");
99+
}
100+
}
101+
}

0 commit comments

Comments
 (0)