Home / Class/ BuildInfoIntegrationTests Class — spring-boot Architecture

BuildInfoIntegrationTests Class — spring-boot Architecture

Architecture documentation for the BuildInfoIntegrationTests class in BuildInfoIntegrationTests.java from the spring-boot codebase.

Entity Profile

Source Code

build-plugin/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildInfoIntegrationTests.java lines 41–221

@ExtendWith(MavenBuildExtension.class)
class BuildInfoIntegrationTests {

	@TestTemplate
	void buildInfoPropertiesAreGenerated(MavenBuild mavenBuild) {
		mavenBuild.project("build-info")
			.execute(buildInfo((buildInfo) -> assertThat(buildInfo).hasBuildGroup("org.springframework.boot.maven.it")
				.hasBuildArtifact("build-info")
				.hasBuildName("Generate build info")
				.hasBuildVersion("0.0.1.BUILD-SNAPSHOT")
				.containsBuildTime()));
	}

	@TestTemplate
	void generatedBuildInfoIncludesAdditionalProperties(MavenBuild mavenBuild) {
		mavenBuild.project("build-info-additional-properties")
			.execute(buildInfo((buildInfo) -> assertThat(buildInfo).hasBuildGroup("org.springframework.boot.maven.it")
				.hasBuildArtifact("build-info-additional-properties")
				.hasBuildName("Generate build info with additional properties")
				.hasBuildVersion("0.0.1.BUILD-SNAPSHOT")
				.containsBuildTime()
				.containsEntry("build.foo", "bar")
				.containsEntry("build.encoding", "UTF-8")
				.containsEntry("build.java.source", "1.8")));
	}

	@TestTemplate
	void generatedBuildInfoUsesCustomBuildTime(MavenBuild mavenBuild) {
		mavenBuild.project("build-info-custom-build-time")
			.execute(buildInfo((buildInfo) -> assertThat(buildInfo).hasBuildGroup("org.springframework.boot.maven.it")
				.hasBuildArtifact("build-info-custom-build-time")
				.hasBuildName("Generate build info with custom build time")
				.hasBuildVersion("0.0.1.BUILD-SNAPSHOT")
				.hasBuildTime("2019-07-08T08:00:00Z")));
	}

	@TestTemplate
	void generatedBuildInfoReproducible(MavenBuild mavenBuild) {
		mavenBuild.project("build-info-reproducible")
			.execute(buildInfo((buildInfo) -> assertThat(buildInfo).hasBuildGroup("org.springframework.boot.maven.it")
				.hasBuildArtifact("build-reproducible")
				.hasBuildName("Generate build info with build time from project.build.outputTimestamp")
				.hasBuildVersion("0.0.1.BUILD-SNAPSHOT")
				.hasBuildTime("2021-04-21T11:22:33Z")));
	}

	@TestTemplate
	void generatedBuildInfoReproducibleEpochSeconds(MavenBuild mavenBuild) {
		mavenBuild.project("build-info-reproducible-epoch-seconds")
			.execute(buildInfo((buildInfo) -> assertThat(buildInfo).hasBuildGroup("org.springframework.boot.maven.it")
				.hasBuildArtifact("build-reproducible-epoch-seconds")
				.hasBuildName("Generate build info with build time from project.build.outputTimestamp")
				.hasBuildVersion("0.0.1.BUILD-SNAPSHOT")
				.hasBuildTime(Instant.ofEpochSecond(1619004153).toString())));
	}

	@TestTemplate
	void buildInfoPropertiesAreGeneratedToCustomOutputLocation(MavenBuild mavenBuild) {
		mavenBuild.project("build-info-custom-file")
			.execute(buildInfo("target/build.info",
					(buildInfo) -> assertThat(buildInfo).hasBuildGroup("org.springframework.boot.maven.it")
						.hasBuildArtifact("build-info-custom-file")
						.hasBuildName("Generate custom build info")
						.hasBuildVersion("0.0.1.BUILD-SNAPSHOT")
						.containsBuildTime()));
	}

	@TestTemplate
	void whenBuildTimeIsDisabledIfDoesNotAppearInGeneratedBuildInfo(MavenBuild mavenBuild) {
		mavenBuild.project("build-info-disable-build-time")
			.execute(buildInfo((buildInfo) -> assertThat(buildInfo).hasBuildGroup("org.springframework.boot.maven.it")
				.hasBuildArtifact("build-info-disable-build-time")
				.hasBuildName("Generate build info with disabled build time")
				.hasBuildVersion("0.0.1.BUILD-SNAPSHOT")
				.doesNotContainBuildTime()));
	}

	@TestTemplate
	void whenBuildTimeIsExcludedIfDoesNotAppearInGeneratedBuildInfo(MavenBuild mavenBuild) {
		mavenBuild.project("build-info-exclude-build-time")
			.execute(buildInfo((buildInfo) -> assertThat(buildInfo).hasBuildGroup("org.springframework.boot.maven.it")
				.hasBuildArtifact("build-info-exclude-build-time")
				.hasBuildName("Generate build info with excluded build time")
				.hasBuildVersion("0.0.1.BUILD-SNAPSHOT")
				.doesNotContainBuildTime()));
	}

	@TestTemplate
	void whenBuildPropertiesAreExcludedTheyDoNotAppearInGeneratedBuildInfo(MavenBuild mavenBuild) {
		mavenBuild.project("build-info-exclude-build-properties")
			.execute(buildInfo((buildInfo) -> assertThat(buildInfo).doesNotContainBuildGroup()
				.doesNotContainBuildArtifact()
				.doesNotContainBuildName()
				.doesNotContainBuildVersion()
				.containsBuildTime()));
	}

	private ProjectCallback buildInfo(Consumer<AssertProvider<BuildInfoAssert>> buildInfo) {
		return buildInfo("target/classes/META-INF/build-info.properties", buildInfo);
	}

	private ProjectCallback buildInfo(String location, Consumer<AssertProvider<BuildInfoAssert>> buildInfo) {
		return (project) -> buildInfo.accept((buildInfo(project, location)));
	}

	private AssertProvider<BuildInfoAssert> buildInfo(File project, String buildInfo) {
		return new AssertProvider<>() {

			@Override
			@Deprecated(since = "2.3.0", forRemoval = false)
			public BuildInfoAssert assertThat() {
				return new BuildInfoAssert(new File(project, buildInfo));
			}

		};
	}

	private static final class BuildInfoAssert extends AbstractMapAssert<BuildInfoAssert, Properties, Object, Object> {

		private BuildInfoAssert(File actual) {
			super(loadProperties(actual), BuildInfoAssert.class);
		}

		private static Properties loadProperties(File file) {
			try (FileReader reader = new FileReader(file)) {
				Properties properties = new Properties();
				properties.load(reader);
				return properties;
			}
			catch (IOException ex) {
				throw new RuntimeException(ex);
			}
		}

		BuildInfoAssert hasBuildGroup(String expected) {
			return containsEntry("build.group", expected);
		}

		BuildInfoAssert doesNotContainBuildGroup() {
			return doesNotContainKey("build.group");
		}

		BuildInfoAssert hasBuildArtifact(String expected) {
			return containsEntry("build.artifact", expected);
		}

		BuildInfoAssert doesNotContainBuildArtifact() {
			return doesNotContainKey("build.artifact");
		}

		BuildInfoAssert hasBuildName(String expected) {
			return containsEntry("build.name", expected);
		}

		BuildInfoAssert doesNotContainBuildName() {
			return doesNotContainKey("build.name");
		}

		BuildInfoAssert hasBuildVersion(String expected) {
			return containsEntry("build.version", expected);
		}

		BuildInfoAssert doesNotContainBuildVersion() {
			return doesNotContainKey("build.version");
		}

		BuildInfoAssert containsBuildTime() {
			return containsKey("build.time");
		}

		BuildInfoAssert doesNotContainBuildTime() {
			return doesNotContainKey("build.time");
		}

		BuildInfoAssert hasBuildTime(String expected) {
			return containsEntry("build.time", expected);
		}

	}

}

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free