Skip to content

Commit f6dc32e

Browse files
Add tests for response-phase and global-vs-route ordering
1 parent fcdcadb commit f6dc32e

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

src/test/java/org/example/server/ConfigurableFilterPipelineTest.java

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,69 @@ void route_stop_filter_prevents_handler_but_global_runs() {
195195
assertEquals(List.of("g1", "rStop"), events);
196196
}
197197

198+
@Test
199+
void response_phase_can_be_done_with_try_finally_in_filters_reverse_order() {
200+
List<String> events = new ArrayList<>();
201+
202+
HttpFilter f1 = (req, chain) -> {
203+
events.add("f1:enter");
204+
try {
205+
return chain.next(req);
206+
} finally {
207+
events.add("f1:exit");
208+
}
209+
};
210+
211+
HttpFilter f2 = (req, chain) -> {
212+
events.add("f2:enter");
213+
try {
214+
return chain.next(req);
215+
} finally {
216+
events.add("f2:exit");
217+
}
218+
};
219+
220+
List<FilterRegistration> regs = List.of(
221+
new FilterRegistration(f1, 10, null),
222+
new FilterRegistration(f2, 20, null)
223+
);
224+
225+
ConfigurableFilterPipeline pipeline =
226+
new ConfigurableFilterPipeline(regs);
227+
228+
pipeline.execute(new HttpRequest("GET", "/home"), request -> {
229+
events.add("handler");
230+
return new HttpResponse(200, "OK");
231+
});
232+
233+
assertEquals(
234+
List.of("f1:enter", "f2:enter", "handler", "f2:exit", "f1:exit"),
235+
events
236+
);
237+
}
238+
239+
@Test
240+
void global_filters_run_before_route_filters_even_if_route_has_lower_order() {
241+
List<String> events = new ArrayList<>();
242+
243+
HttpFilter global100 = new TestFilter("g100", events, false);
244+
HttpFilter route0 = new TestFilter("r0", events, false);
245+
246+
List<FilterRegistration> regs = List.of(
247+
new FilterRegistration(global100, 100, null),
248+
new FilterRegistration(route0, 0, List.of("/api/*"))
249+
);
250+
251+
ConfigurableFilterPipeline pipeline =
252+
new ConfigurableFilterPipeline(regs);
253+
254+
pipeline.execute(
255+
new HttpRequest("GET", "/api/users"),
256+
new TestHandler(events)
257+
);
258+
259+
assertEquals(List.of("g100", "r0", "handler"), events);
260+
}
198261

199262
static class TestFilter implements HttpFilter {
200263

0 commit comments

Comments
 (0)