16
16
17
17
package org .springframework .boot .logging .logback ;
18
18
19
+ import java .util .List ;
19
20
import java .util .function .Supplier ;
20
21
21
22
import ch .qos .logback .classic .LoggerContext ;
31
32
32
33
import org .springframework .boot .testsupport .system .CapturedOutput ;
33
34
import org .springframework .boot .testsupport .system .OutputCaptureExtension ;
35
+ import org .springframework .test .util .ReflectionTestUtils ;
34
36
35
37
import static org .assertj .core .api .Assertions .assertThat ;
36
38
import static org .mockito .ArgumentMatchers .any ;
@@ -49,6 +51,15 @@ class SystemStatusListenerTests {
49
51
50
52
private static final String TEST_MESSAGE = "testtesttest" ;
51
53
54
+ private final StatusManager statusManager = mock (StatusManager .class );
55
+
56
+ private final LoggerContext loggerContext = mock (LoggerContext .class );
57
+
58
+ SystemStatusListenerTests () {
59
+ given (this .loggerContext .getStatusManager ()).willReturn (this .statusManager );
60
+ given (this .statusManager .add (any (StatusListener .class ))).willReturn (true );
61
+ }
62
+
52
63
@ Test
53
64
void addStatusWithInfoLevelWhenNoDebugDoesNotPrint (CapturedOutput output ) {
54
65
addStatus (false , () -> new InfoStatus (TEST_MESSAGE , null ));
@@ -91,15 +102,43 @@ void addStatusWithErrorLevelWhenDebugPrintsToSystemOut(CapturedOutput output) {
91
102
assertThat (output .getErr ()).doesNotContain (TEST_MESSAGE );
92
103
}
93
104
105
+ @ Test
106
+ void shouldRetrospectivePrintStatusOnStartAndDebugIsDisabled (CapturedOutput output ) {
107
+ given (this .statusManager .getCopyOfStatusList ()).willReturn (List .of (new ErrorStatus (TEST_MESSAGE , null ),
108
+ new WarnStatus (TEST_MESSAGE , null ), new InfoStatus (TEST_MESSAGE , null )));
109
+ addStatus (false , () -> new InfoStatus (TEST_MESSAGE , null ));
110
+ assertThat (output .getErr ()).contains ("WARN " + TEST_MESSAGE );
111
+ assertThat (output .getErr ()).contains ("ERROR " + TEST_MESSAGE );
112
+ assertThat (output .getErr ()).doesNotContain ("INFO" );
113
+ assertThat (output .getOut ()).isEmpty ();
114
+ }
115
+
116
+ @ Test
117
+ void shouldRetrospectivePrintStatusOnStartAndDebugIsEnabled (CapturedOutput output ) {
118
+ given (this .statusManager .getCopyOfStatusList ()).willReturn (List .of (new ErrorStatus (TEST_MESSAGE , null ),
119
+ new WarnStatus (TEST_MESSAGE , null ), new InfoStatus (TEST_MESSAGE , null )));
120
+ addStatus (true , () -> new InfoStatus (TEST_MESSAGE , null ));
121
+ assertThat (output .getErr ()).isEmpty ();
122
+ assertThat (output .getOut ()).contains ("WARN " + TEST_MESSAGE );
123
+ assertThat (output .getOut ()).contains ("ERROR " + TEST_MESSAGE );
124
+ assertThat (output .getOut ()).contains ("INFO " + TEST_MESSAGE );
125
+ }
126
+
127
+ @ Test
128
+ void shouldNotRetrospectivePrintWhenStatusIsOutdated (CapturedOutput output ) {
129
+ ErrorStatus outdatedStatus = new ErrorStatus (TEST_MESSAGE , null );
130
+ ReflectionTestUtils .setField (outdatedStatus , "timestamp" , System .currentTimeMillis () - 300 );
131
+ given (this .statusManager .getCopyOfStatusList ()).willReturn (List .of (outdatedStatus ));
132
+ addStatus (false , () -> new InfoStatus (TEST_MESSAGE , null ));
133
+ assertThat (output .getOut ()).isEmpty ();
134
+ assertThat (output .getErr ()).isEmpty ();
135
+ }
136
+
94
137
private void addStatus (boolean debug , Supplier <Status > statusFactory ) {
95
- StatusManager statusManager = mock (StatusManager .class );
96
- given (statusManager .add (any (StatusListener .class ))).willReturn (true );
97
- LoggerContext loggerContext = mock (LoggerContext .class );
98
- given (loggerContext .getStatusManager ()).willReturn (statusManager );
99
- SystemStatusListener .addTo (loggerContext , debug );
138
+ SystemStatusListener .addTo (this .loggerContext , debug );
100
139
ArgumentCaptor <StatusListener > listener = ArgumentCaptor .forClass (StatusListener .class );
101
- then (statusManager ).should ().add (listener .capture ());
102
- assertThat (listener .getValue ()).extracting ("context" ).isSameAs (loggerContext );
140
+ then (this . statusManager ).should ().add (listener .capture ());
141
+ assertThat (listener .getValue ()).extracting ("context" ).isSameAs (this . loggerContext );
103
142
listener .getValue ().addStatusEvent (statusFactory .get ());
104
143
}
105
144
0 commit comments