|
24 | 24 | import java.util.Set;
|
25 | 25 | import java.util.concurrent.atomic.AtomicInteger;
|
26 | 26 | import java.util.concurrent.atomic.AtomicReference;
|
| 27 | +import java.util.function.Supplier; |
27 | 28 |
|
28 | 29 | import javax.annotation.PostConstruct;
|
29 | 30 |
|
|
100 | 101 | import org.springframework.core.io.DefaultResourceLoader;
|
101 | 102 | import org.springframework.core.io.Resource;
|
102 | 103 | import org.springframework.core.io.ResourceLoader;
|
| 104 | +import org.springframework.core.metrics.ApplicationStartup; |
| 105 | +import org.springframework.core.metrics.StartupStep; |
103 | 106 | import org.springframework.http.server.reactive.HttpHandler;
|
104 | 107 | import org.springframework.test.context.support.TestPropertySourceUtils;
|
105 | 108 | import org.springframework.util.StringUtils;
|
|
111 | 114 | import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
112 | 115 | import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
|
113 | 116 | import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
|
| 117 | +import static org.mockito.ArgumentMatchers.any; |
| 118 | +import static org.mockito.ArgumentMatchers.anyString; |
114 | 119 | import static org.mockito.ArgumentMatchers.argThat;
|
115 | 120 | import static org.mockito.ArgumentMatchers.isA;
|
| 121 | +import static org.mockito.BDDMockito.given; |
116 | 122 | import static org.mockito.BDDMockito.willThrow;
|
117 | 123 | import static org.mockito.Mockito.atLeastOnce;
|
118 | 124 | import static org.mockito.Mockito.mock;
|
@@ -679,13 +685,11 @@ void runnersAreCalledAfterStartedIsLoggedAndBeforeApplicationReadyEventIsPublish
|
679 | 685 | application.addListeners(eventListener);
|
680 | 686 | this.context = application.run();
|
681 | 687 | InOrder applicationRunnerOrder = Mockito.inOrder(eventListener, applicationRunner);
|
682 |
| - applicationRunnerOrder.verify(applicationRunner).run(ArgumentMatchers.any(ApplicationArguments.class)); |
683 |
| - applicationRunnerOrder.verify(eventListener) |
684 |
| - .onApplicationEvent(ArgumentMatchers.any(ApplicationReadyEvent.class)); |
| 688 | + applicationRunnerOrder.verify(applicationRunner).run(any(ApplicationArguments.class)); |
| 689 | + applicationRunnerOrder.verify(eventListener).onApplicationEvent(any(ApplicationReadyEvent.class)); |
685 | 690 | InOrder commandLineRunnerOrder = Mockito.inOrder(eventListener, commandLineRunner);
|
686 | 691 | commandLineRunnerOrder.verify(commandLineRunner).run();
|
687 |
| - commandLineRunnerOrder.verify(eventListener) |
688 |
| - .onApplicationEvent(ArgumentMatchers.any(ApplicationReadyEvent.class)); |
| 692 | + commandLineRunnerOrder.verify(eventListener).onApplicationEvent(any(ApplicationReadyEvent.class)); |
689 | 693 | }
|
690 | 694 |
|
691 | 695 | @Test
|
@@ -1149,6 +1153,28 @@ void lazyInitializationIgnoresLazyInitializationExcludeFilteredBeans() {
|
1149 | 1153 | .getBean(AtomicInteger.class)).hasValue(1);
|
1150 | 1154 | }
|
1151 | 1155 |
|
| 1156 | + @Test |
| 1157 | + void customApplicationStartupPublishStartupSteps() { |
| 1158 | + ApplicationStartup applicationStartup = mock(ApplicationStartup.class); |
| 1159 | + StartupStep startupStep = mock(StartupStep.class); |
| 1160 | + given(applicationStartup.start(anyString())).willReturn(startupStep); |
| 1161 | + given(startupStep.tag(anyString(), anyString())).willReturn(startupStep); |
| 1162 | + given(startupStep.tag(anyString(), ArgumentMatchers.<Supplier<String>>any())).willReturn(startupStep); |
| 1163 | + |
| 1164 | + SpringApplication application = new SpringApplication(ExampleConfig.class); |
| 1165 | + application.setWebApplicationType(WebApplicationType.NONE); |
| 1166 | + application.setApplicationStartup(applicationStartup); |
| 1167 | + this.context = application.run(); |
| 1168 | + |
| 1169 | + assertThat(this.context.getBean(ApplicationStartup.class)).isEqualTo(applicationStartup); |
| 1170 | + verify(applicationStartup).start("spring.boot.application.starting"); |
| 1171 | + verify(applicationStartup).start("spring.boot.application.environment-prepared"); |
| 1172 | + verify(applicationStartup).start("spring.boot.application.context-prepared"); |
| 1173 | + verify(applicationStartup).start("spring.boot.application.context-loaded"); |
| 1174 | + verify(applicationStartup).start("spring.boot.application.started"); |
| 1175 | + verify(applicationStartup).start("spring.boot.application.running"); |
| 1176 | + } |
| 1177 | + |
1152 | 1178 | private <S extends AvailabilityState> ArgumentMatcher<ApplicationEvent> isAvailabilityChangeEventWithState(
|
1153 | 1179 | S state) {
|
1154 | 1180 | return (argument) -> (argument instanceof AvailabilityChangeEvent<?>)
|
|
0 commit comments