/
FilterReplaceRequestSpec.groovy
87 lines (74 loc) · 2.63 KB
/
FilterReplaceRequestSpec.groovy
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
package io.micronaut.http.server.netty.filters
import io.micronaut.context.ApplicationContext
import io.micronaut.context.annotation.Requires
import io.micronaut.http.HttpRequest
import io.micronaut.http.MutableHttpResponse
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Filter
import io.micronaut.http.annotation.Get
import io.micronaut.http.client.HttpClient
import io.micronaut.http.filter.HttpServerFilter
import io.micronaut.http.filter.ServerFilterChain
import io.micronaut.runtime.server.EmbeddedServer
import org.reactivestreams.Publisher
import spock.lang.Specification
class FilterReplaceRequestSpec extends Specification {
def 'test replaced http request is handled by next filter'() {
given:
def ctx = ApplicationContext.run(['spec.name': 'FilterReplaceRequestSpec'])
def server = ctx.getBean(EmbeddedServer)
server.start()
def client = ctx.createBean(HttpClient, server.URI)
def filter1 = ctx.getBean(Filter1)
def filter2 = ctx.getBean(Filter2)
when:
def resp = client.toBlocking().exchange("/initial", String)
then:
resp.body() == "initial"
filter1.filteredRequest.path == "/initial"
filter2.filteredRequest.path == "/filter1"
cleanup:
server.stop()
client.stop()
}
@Filter(Filter.MATCH_ALL_PATTERN)
@Requires(property = 'spec.name', value = 'FilterReplaceRequestSpec')
static class Filter1 implements HttpServerFilter {
HttpRequest<?> filteredRequest = null
@Override
int getOrder() {
1
}
@Override
Publisher<MutableHttpResponse<?>> doFilter(HttpRequest<?> request, ServerFilterChain chain) {
filteredRequest = request
return chain.proceed(HttpRequest.GET("/filter1"))
}
}
@Filter(Filter.MATCH_ALL_PATTERN)
@Requires(property = 'spec.name', value = 'FilterReplaceRequestSpec')
static class Filter2 implements HttpServerFilter {
HttpRequest<?> filteredRequest = null
@Override
int getOrder() {
2
}
@Override
Publisher<MutableHttpResponse<?>> doFilter(HttpRequest<?> request, ServerFilterChain chain) {
filteredRequest = request
return chain.proceed(HttpRequest.GET("/filter2"))
}
}
@Controller
@Requires(property = 'spec.name', value = 'FilterReplaceRequestSpec')
static class Ctrl {
@Get("/filter2")
def filter2() {
return "filter2"
}
@Get("/initial")
def initial() {
return "initial"
}
}
}