66package io .jooby .test ;
77
88import static org .junit .jupiter .api .Assertions .assertEquals ;
9- import static org .junit .jupiter .api .Assertions .assertFalse ;
109import static org .junit .jupiter .api .Assertions .assertNotNull ;
1110import static org .junit .jupiter .api .Assertions .assertTrue ;
1211
13- import java .util .concurrent .atomic .AtomicInteger ;
12+ import java .util .Optional ;
13+ import java .util .function .Consumer ;
1414
1515import org .junit .jupiter .api .Test ;
1616import org .slf4j .LoggerFactory ;
@@ -29,66 +29,76 @@ public class Issue1990 {
2929
3030 @ Test
3131 public void withoutContextRelative () {
32- Logger log = (Logger ) LoggerFactory .getLogger (UrlResolverImpl .class );
33- ListAppender <ILoggingEvent > appender = new ListAppender <>();
34- appender .start ();
35- log .addAppender (appender );
36-
37- UrlResolverImpl resolver = new UrlResolverImpl ();
38-
39- assertEquals ("/callback" , resolver .compute ("/callback" , null ));
40- assertFalse (appender .list .isEmpty ());
32+ var event =
33+ withLogback (
34+ new UrlResolverImpl (),
35+ resolver -> {
36+ assertEquals ("/callback" , resolver .compute ("/callback" , null ));
37+ });
38+ assertTrue (event .isPresent ());
4139
42- ILoggingEvent event = appender . list . get (0 );
40+ var e = event . get ();
4341
4442 assertEquals (
4543 "Unable to resolve URL from path '{}' since no web context was provided. This may prevent"
4644 + " some authentication clients to work properly. Consider explicitly specifying an"
4745 + " absolute callback URL or using a custom url resolver." ,
48- event .getMessage ());
46+ e .getMessage ());
4947
50- assertEquals (Level .WARN , event .getLevel ());
51- assertNotNull (event .getArgumentArray ());
52- assertTrue (event .getArgumentArray ().length > 0 );
53- assertEquals ("/callback" , event .getArgumentArray ()[0 ]);
48+ assertEquals (Level .WARN , e .getLevel ());
49+ var args = e .getArgumentArray ();
50+ assertNotNull (args );
51+ assertTrue (args .length > 0 );
52+ assertEquals ("/callback" , args [0 ]);
5453 }
5554
5655 @ Test
5756 public void withoutContextAbsolute () {
58- Logger log = (Logger ) LoggerFactory .getLogger (UrlResolverImpl .class );
59- ListAppender <ILoggingEvent > appender = new ListAppender <>();
60- appender .start ();
61- log .addAppender (appender );
62-
63- UrlResolverImpl resolver = new UrlResolverImpl ();
64-
65- assertEquals ("https://foo/bar" , resolver .compute ("https://foo/bar" , null ));
66- assertEquals ("http://foo/bar" , resolver .compute ("http://foo/bar" , null ));
67- assertEquals ("HTTPS://foo/bar" , resolver .compute ("HTTPS://foo/bar" , null ));
68- assertEquals ("HTTP://foo/bar" , resolver .compute ("HTTP://foo/bar" , null ));
69-
70- assertTrue (appender .list .isEmpty ());
57+ var event =
58+ withLogback (
59+ new UrlResolverImpl (),
60+ resolver -> {
61+ assertEquals ("https://foo/bar" , resolver .compute ("https://foo/bar" , null ));
62+ assertEquals ("http://foo/bar" , resolver .compute ("http://foo/bar" , null ));
63+ assertEquals ("HTTPS://foo/bar" , resolver .compute ("HTTPS://foo/bar" , null ));
64+ assertEquals ("HTTP://foo/bar" , resolver .compute ("HTTP://foo/bar" , null ));
65+ });
66+ assertTrue (event .isEmpty ());
7167 }
7268
7369 @ ServerTest
7470 public void withContext (ServerTestRunner runner ) {
75- AtomicInteger port = new AtomicInteger ();
76-
7771 runner
7872 .define (
7973 app -> {
8074 UrlResolverImpl resolver = new UrlResolverImpl ();
8175 app .get ("/" , ctx -> resolver .compute ("/callback?q=foo" , Pac4jContext .create (ctx )));
82- app .onStarted (() -> port .set (app .getServerOptions ().getPort ()));
8376 })
8477 .ready (
8578 http -> {
86- String portFragment = port .get () == Context .PORT ? "" : ":" + port .get ();
79+ var port = runner .getAllocatedPort ();
80+ String portFragment = port == Context .PORT ? "" : ":" + port ;
8781 http .get (
8882 "/" ,
8983 rsp ->
9084 assertEquals (
9185 "http://localhost" + portFragment + "/callback" , rsp .body ().string ()));
9286 });
9387 }
88+
89+ private Optional <ILoggingEvent > withLogback (
90+ UrlResolverImpl resolver , Consumer <UrlResolverImpl > consumer ) {
91+ var log = (Logger ) LoggerFactory .getLogger (resolver .getClass ());
92+ // MUST RUN ON INFO LEVEL
93+ log .setLevel (Level .INFO );
94+ var appender = new ListAppender <ILoggingEvent >();
95+ try {
96+ appender .start ();
97+ log .addAppender (appender );
98+ consumer .accept (resolver );
99+ return appender .list .stream ().findFirst ();
100+ } finally {
101+ appender .stop ();
102+ }
103+ }
94104}
0 commit comments