23
23
24
24
/*
25
25
* @test
26
+ * @bug 8267262
26
27
* @summary Tests for Filter static factory methods
27
28
* @run testng/othervm FilterTest
28
29
*/
47
48
import com .sun .net .httpserver .HttpHandler ;
48
49
import com .sun .net .httpserver .HttpServer ;
49
50
import static java .net .http .HttpClient .Builder .NO_PROXY ;
51
+ import org .testng .annotations .DataProvider ;
50
52
import org .testng .annotations .Test ;
51
53
import org .testng .annotations .BeforeTest ;
52
54
import static org .testng .Assert .*;
53
55
54
56
public class FilterTest {
55
57
56
58
static final Class <NullPointerException > NPE = NullPointerException .class ;
59
+ static final Class <IOException > IOE = IOException .class ;
60
+
57
61
static final InetAddress LOOPBACK_ADDR = InetAddress .getLoopbackAddress ();
58
62
static final boolean ENABLE_LOGGING = true ;
59
63
static final Logger logger = Logger .getLogger ("com.sun.net.httpserver" );
@@ -72,19 +76,56 @@ public void setup() {
72
76
public void testNull () {
73
77
expectThrows (NPE , () -> Filter .beforeHandler (null , e -> e .getResponseHeaders ().set ("X-Foo" , "Bar" )));
74
78
expectThrows (NPE , () -> Filter .beforeHandler ("Some description" , null ));
75
- expectThrows ( NPE , () -> Filter . afterHandler ( null , HttpExchange :: getResponseCode ));
79
+
76
80
expectThrows (NPE , () -> Filter .afterHandler ("Some description" , null ));
81
+ expectThrows (NPE , () -> Filter .afterHandler (null , HttpExchange ::getResponseCode ));
77
82
}
78
83
79
84
@ Test
80
85
public void testDescription () {
81
86
var desc = "Some description" ;
87
+
82
88
var beforeFilter = Filter .beforeHandler (desc , HttpExchange ::getRequestBody );
83
- var afterFilter = Filter .afterHandler (desc , HttpExchange ::getResponseCode );
84
89
assertEquals (desc , beforeFilter .description ());
90
+
91
+ var afterFilter = Filter .afterHandler (desc , HttpExchange ::getResponseCode );
85
92
assertEquals (desc , afterFilter .description ());
86
93
}
87
94
95
+ @ DataProvider
96
+ public static Object [][] throwingFilters () {
97
+ return new Object [][] {
98
+ {Filter .beforeHandler ("before RE" , e -> { throw new RuntimeException (); }), IOE },
99
+ {Filter .beforeHandler ("before AE" , e -> { throw new AssertionError (); }), IOE },
100
+
101
+ {Filter .afterHandler ( "after RE" , e -> { throw new RuntimeException (); }), null },
102
+ {Filter .afterHandler ( "after AE" , e -> { throw new AssertionError (); }), null },
103
+ };
104
+ }
105
+
106
+ @ Test (dataProvider = "throwingFilters" )
107
+ public void testException (Filter filter , Class <Exception > exception )
108
+ throws Exception
109
+ {
110
+ var handler = new EchoHandler ();
111
+ var server = HttpServer .create (new InetSocketAddress (LOOPBACK_ADDR ,0 ), 10 );
112
+ server .createContext ("/" , handler ).getFilters ().add (filter );
113
+ server .start ();
114
+ try {
115
+ var client = HttpClient .newBuilder ().proxy (NO_PROXY ).build ();
116
+ var request = HttpRequest .newBuilder (uri (server , "" )).build ();
117
+ if (exception != null ) {
118
+ expectThrows (exception , () -> client .send (request , HttpResponse .BodyHandlers .ofString ()));
119
+ } else {
120
+ var response = client .send (request , HttpResponse .BodyHandlers .ofString ());
121
+ assertEquals (response .statusCode (), 200 );
122
+ assertEquals (response .body (), "hello world" );
123
+ }
124
+ } finally {
125
+ server .stop (0 );
126
+ }
127
+ }
128
+
88
129
@ Test
89
130
public void testBeforeHandler () throws Exception {
90
131
var handler = new EchoHandler ();
0 commit comments