Commit 718372ed authored by Andy Wilkinson's avatar Andy Wilkinson

Merge pull request #14019 from ayudovin

* gh-14019:
  Polish "Fix NPE in FlywayEndpoint when migration.installedOn is null"
  Fix NPE in FlywayEndpoint when migration.installedOn is null
parents 26af0ca7 27f5e465
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
package org.springframework.boot.actuate.flyway; package org.springframework.boot.actuate.flyway;
import java.time.Instant; import java.time.Instant;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -38,6 +39,7 @@ import org.springframework.context.ApplicationContext; ...@@ -38,6 +39,7 @@ import org.springframework.context.ApplicationContext;
* @author Eddú Meléndez * @author Eddú Meléndez
* @author Phillip Webb * @author Phillip Webb
* @author Andy Wilkinson * @author Andy Wilkinson
* @author Artsiom Yudovin
* @since 2.0.0 * @since 2.0.0
*/ */
@Endpoint(id = "flyway") @Endpoint(id = "flyway")
...@@ -164,15 +166,19 @@ public class FlywayEndpoint { ...@@ -164,15 +166,19 @@ public class FlywayEndpoint {
this.script = info.getScript(); this.script = info.getScript();
this.state = info.getState(); this.state = info.getState();
this.installedBy = info.getInstalledBy(); this.installedBy = info.getInstalledBy();
this.installedOn = Instant.ofEpochMilli(info.getInstalledOn().getTime());
this.installedRank = info.getInstalledRank(); this.installedRank = info.getInstalledRank();
this.executionTime = info.getExecutionTime(); this.executionTime = info.getExecutionTime();
this.installedOn = nullSafeToInstant(info.getInstalledOn());
} }
private String nullSafeToString(Object obj) { private String nullSafeToString(Object obj) {
return (obj != null) ? obj.toString() : null; return (obj != null) ? obj.toString() : null;
} }
private Instant nullSafeToInstant(Date date) {
return (date != null) ? Instant.ofEpochMilli(date.getTime()) : null;
}
public MigrationType getType() { public MigrationType getType() {
return this.type; return this.type;
} }
......
...@@ -16,9 +16,13 @@ ...@@ -16,9 +16,13 @@
package org.springframework.boot.actuate.flyway; package org.springframework.boot.actuate.flyway;
import java.util.Map;
import org.junit.Test; import org.junit.Test;
import org.springframework.boot.actuate.flyway.FlywayEndpoint.FlywayDescriptor;
import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration; import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration;
import org.springframework.boot.autoconfigure.flyway.FlywayMigrationStrategy;
import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration;
import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
...@@ -40,9 +44,28 @@ public class FlywayEndpointTests { ...@@ -40,9 +44,28 @@ public class FlywayEndpointTests {
@Test @Test
public void flywayReportIsProduced() { public void flywayReportIsProduced() {
new ApplicationContextRunner().withUserConfiguration(Config.class) new ApplicationContextRunner().withUserConfiguration(Config.class)
.run((context) -> assertThat( .run((context) -> {
context.getBean(FlywayEndpoint.class).flywayBeans().getContexts() Map<String, FlywayDescriptor> flywayBeans = context
.get(context.getId()).getFlywayBeans()).hasSize(1)); .getBean(FlywayEndpoint.class).flywayBeans().getContexts()
.get(context.getId()).getFlywayBeans();
assertThat(flywayBeans).hasSize(1);
assertThat(flywayBeans.values().iterator().next().getMigrations())
.hasSize(3);
});
}
@Test
public void whenFlywayHasBeenBaselinedFlywayReportIsProduced() {
new ApplicationContextRunner()
.withUserConfiguration(BaselinedFlywayConfig.class, Config.class)
.run((context) -> {
Map<String, FlywayDescriptor> flywayBeans = context
.getBean(FlywayEndpoint.class).flywayBeans().getContexts()
.get(context.getId()).getFlywayBeans();
assertThat(flywayBeans).hasSize(1);
assertThat(flywayBeans.values().iterator().next().getMigrations())
.hasSize(3);
});
} }
@Configuration @Configuration
...@@ -56,4 +79,18 @@ public class FlywayEndpointTests { ...@@ -56,4 +79,18 @@ public class FlywayEndpointTests {
} }
@Configuration
public static class BaselinedFlywayConfig {
@Bean
public FlywayMigrationStrategy baseliningMigrationStrategy() {
return (flyway) -> {
flyway.setBaselineVersionAsString("2");
flyway.baseline();
flyway.migrate();
};
}
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment