18
18
19
19
import java .nio .charset .StandardCharsets ;
20
20
21
+ import org .jspecify .annotations .Nullable ;
21
22
import org .junit .jupiter .api .Test ;
22
23
import reactor .core .publisher .Mono ;
23
24
24
25
import org .springframework .core .io .buffer .DataBuffer ;
25
26
import org .springframework .core .io .buffer .DefaultDataBufferFactory ;
27
+ import org .springframework .http .server .reactive .SslInfo ;
26
28
import org .springframework .web .server .ServerWebExchange ;
27
29
import org .springframework .web .server .WebFilter ;
28
30
import org .springframework .web .server .WebFilterChain ;
32
34
33
35
/**
34
36
* Tests for {@link AbstractMockServerSpec}.
35
- *
36
37
* @author Rossen Stoyanchev
37
38
*/
38
39
public class MockServerSpecTests {
@@ -43,30 +44,31 @@ public class MockServerSpecTests {
43
44
@ Test
44
45
public void applyFiltersAfterConfigurerAdded () {
45
46
46
- this .serverSpec .webFilter (new TestWebFilter ("A" ));
47
-
48
- this .serverSpec .apply (new MockServerConfigurer () {
47
+ MockServerConfigurer configurer = new MockServerConfigurer () {
49
48
50
49
@ Override
51
50
public void afterConfigureAdded (WebTestClient .MockServerSpec <?> spec ) {
52
51
spec .webFilter (new TestWebFilter ("B" ));
53
52
}
54
- }) ;
53
+ };
55
54
56
- this .serverSpec .build ().get ().uri ("/" )
55
+ this .serverSpec
56
+ .webFilter (new TestWebFilter ("A" ))
57
+ .apply (configurer )
58
+ .build ()
59
+ .get ().uri ("/" )
57
60
.exchange ()
58
61
.expectBody (String .class )
59
- .consumeWith (result -> assertThat (
60
- result .getResponseBody ()).contains ("test-attribute=:A:B" ));
62
+ .consumeWith (result -> {
63
+ String body = result .getResponseBody ();
64
+ assertThat (body ).contains ("test-attribute=:A:B" );
65
+ });
61
66
}
62
67
63
68
@ Test
64
69
public void applyFiltersBeforeServerCreated () {
65
70
66
- this .serverSpec .webFilter (new TestWebFilter ("App-A" ));
67
- this .serverSpec .webFilter (new TestWebFilter ("App-B" ));
68
-
69
- this .serverSpec .apply (new MockServerConfigurer () {
71
+ MockServerConfigurer configurer = new MockServerConfigurer () {
70
72
71
73
@ Override
72
74
public void beforeServerCreated (WebHttpHandlerBuilder builder ) {
@@ -75,21 +77,41 @@ public void beforeServerCreated(WebHttpHandlerBuilder builder) {
75
77
filters .add (1 , new TestWebFilter ("Fwk-B" ));
76
78
});
77
79
}
78
- });
79
-
80
- this .serverSpec .build ().get ().uri ("/" )
81
- .exchange ()
80
+ };
81
+
82
+ this .serverSpec
83
+ .webFilter (new TestWebFilter ("App-A" ))
84
+ .webFilter (new TestWebFilter ("App-B" ))
85
+ .apply (configurer )
86
+ .build ()
87
+ .get ().uri ("/" ).exchange ()
82
88
.expectBody (String .class )
83
- .consumeWith (result -> assertThat (
84
- result .getResponseBody ()).contains ("test-attribute=:Fwk-A:Fwk-B:App-A:App-B" ));
89
+ .consumeWith (result -> {
90
+ String body = result .getResponseBody ();
91
+ assertThat (body ).contains ("test-attribute=:Fwk-A:Fwk-B:App-A:App-B" );
92
+ });
93
+ }
94
+
95
+ @ Test
96
+ void sslInfo () {
97
+ SslInfo info = SslInfo .from ("123" );
98
+ this .serverSpec .sslInfo (info ).build ().get ().uri ("/" ).exchange ().expectStatus ().isOk ();
99
+ assertThat (this .serverSpec .getSavedSslInfo ()).isSameAs (info );
85
100
}
86
101
87
102
88
103
private static class TestMockServerSpec extends AbstractMockServerSpec <TestMockServerSpec > {
89
104
105
+ private @ Nullable SslInfo savedSslInfo ;
106
+
107
+ public @ Nullable SslInfo getSavedSslInfo () {
108
+ return this .savedSslInfo ;
109
+ }
110
+
90
111
@ Override
91
112
protected WebHttpHandlerBuilder initHttpHandlerBuilder () {
92
113
return WebHttpHandlerBuilder .webHandler (exchange -> {
114
+ this .savedSslInfo = exchange .getRequest ().getSslInfo ();
93
115
DefaultDataBufferFactory factory = DefaultDataBufferFactory .sharedInstance ;
94
116
String text = exchange .getAttributes ().toString ();
95
117
DataBuffer buffer = factory .wrap (text .getBytes (StandardCharsets .UTF_8 ));
@@ -98,13 +120,8 @@ protected WebHttpHandlerBuilder initHttpHandlerBuilder() {
98
120
}
99
121
}
100
122
101
- private static class TestWebFilter implements WebFilter {
102
-
103
- private final String name ;
104
123
105
- TestWebFilter (String name ) {
106
- this .name = name ;
107
- }
124
+ private record TestWebFilter (String name ) implements WebFilter {
108
125
109
126
@ Override
110
127
public Mono <Void > filter (ServerWebExchange exchange , WebFilterChain chain ) {
0 commit comments