15 changed files with 786 additions and 55 deletions
@ -0,0 +1,62 @@
@@ -0,0 +1,62 @@
|
||||
/* |
||||
* Copyright 2012-2015 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.autoconfigure; |
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.beans.factory.annotation.Value; |
||||
import org.springframework.boot.actuate.info.EnvironmentInfoProvider; |
||||
import org.springframework.boot.actuate.info.InfoProvider; |
||||
import org.springframework.boot.actuate.info.ScmGitPropertiesInfoProvider; |
||||
import org.springframework.boot.autoconfigure.AutoConfigureBefore; |
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.Configuration; |
||||
import org.springframework.core.env.ConfigurableEnvironment; |
||||
import org.springframework.core.env.StandardEnvironment; |
||||
import org.springframework.core.io.Resource; |
||||
|
||||
/** |
||||
* {@link EnableAutoConfiguration Auto-configuration} for standard {@link InfoProvider}s. |
||||
* |
||||
* @author Meang Akira Tanaka |
||||
* @since 1.3.0 |
||||
*/ |
||||
@Configuration |
||||
@AutoConfigureBefore({ EndpointAutoConfiguration.class }) |
||||
public class InfoProviderAutoConfiguration { |
||||
|
||||
@Autowired |
||||
private final ConfigurableEnvironment environment = new StandardEnvironment(); |
||||
|
||||
@Value("${spring.git.properties:classpath:git.properties}") |
||||
private Resource gitProperties; |
||||
|
||||
@Bean |
||||
@ConditionalOnMissingBean(name = "environmentInfoProvider") |
||||
public InfoProvider environmentInfoProvider() throws Exception { |
||||
return new EnvironmentInfoProvider(environment); |
||||
} |
||||
|
||||
@Bean |
||||
@ConditionalOnMissingBean(name = "scmInfoProvider") |
||||
public InfoProvider scmInfoProvider() throws Exception { |
||||
return new ScmGitPropertiesInfoProvider(gitProperties); |
||||
} |
||||
|
||||
|
||||
} |
||||
@ -0,0 +1,61 @@
@@ -0,0 +1,61 @@
|
||||
/* |
||||
* Copyright 2012-2015 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.springframework.boot.actuate.info; |
||||
|
||||
import java.util.LinkedHashMap; |
||||
import java.util.Map; |
||||
|
||||
import org.springframework.boot.bind.PropertiesConfigurationFactory; |
||||
import org.springframework.core.env.ConfigurableEnvironment; |
||||
|
||||
/** |
||||
* A {@link InfoProvider} that provides all environment entries prefixed with info |
||||
* |
||||
* See something |
||||
* |
||||
* @author Meang Akira Tanaka |
||||
* @since 1.3.0 |
||||
*/ |
||||
public class EnvironmentInfoProvider implements InfoProvider { |
||||
|
||||
private final ConfigurableEnvironment environment; |
||||
private final Map<String, Object> infoMap; |
||||
private final Info info; |
||||
|
||||
public EnvironmentInfoProvider(ConfigurableEnvironment environment) throws Exception { |
||||
this.environment = environment; |
||||
infoMap = extractInfoFromEnvironment(); |
||||
this.info = new Info(infoMap); |
||||
} |
||||
|
||||
@Override |
||||
public String name() { |
||||
return "environment"; |
||||
} |
||||
|
||||
@Override |
||||
public Info provide() { |
||||
return info; |
||||
} |
||||
|
||||
private Map<String, Object> extractInfoFromEnvironment() throws Exception { |
||||
PropertiesConfigurationFactory<Map<String, Object>> factory = new PropertiesConfigurationFactory<Map<String, Object>>( |
||||
new LinkedHashMap<String, Object>()); |
||||
factory.setTargetName("info"); |
||||
factory.setPropertySources(this.environment.getPropertySources()); |
||||
return factory.getObject(); |
||||
} |
||||
} |
||||
@ -0,0 +1,84 @@
@@ -0,0 +1,84 @@
|
||||
/* |
||||
* Copyright 2012-2015 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.info; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
import com.fasterxml.jackson.annotation.JsonAnyGetter; |
||||
import com.fasterxml.jackson.annotation.JsonInclude; |
||||
import com.fasterxml.jackson.annotation.JsonInclude.Include; |
||||
|
||||
/** |
||||
* Carries information from a specific info provider |
||||
* |
||||
* @see org.springframework.boot.actuate.endpoint.InfoEndpoint |
||||
* |
||||
* @author Meang Akira Tanaka |
||||
* @since 1.3.0 |
||||
*/ |
||||
@JsonInclude(Include.NON_EMPTY) |
||||
public final class Info { |
||||
|
||||
private final Map<String, Object> details = new HashMap<String, Object>(); |
||||
|
||||
public Info() { |
||||
} |
||||
|
||||
public Info(Map<String, Object> details) { |
||||
this.details.putAll(details); |
||||
} |
||||
|
||||
/** |
||||
* @return the details of the info or an empty map. |
||||
*/ |
||||
@JsonAnyGetter |
||||
public Map<String, Object> getDetails() { |
||||
return this.details; |
||||
} |
||||
|
||||
public void put(String infoId, Object value) { |
||||
this.details.put(infoId, value); |
||||
} |
||||
|
||||
@SuppressWarnings("unchecked") |
||||
public <T> T get(String infoId) { |
||||
return (T) this.details.get(infoId); |
||||
} |
||||
|
||||
@Override |
||||
public boolean equals(Object obj) { |
||||
if (obj == this) { |
||||
return true; |
||||
} |
||||
if (obj != null && obj instanceof Info) { |
||||
Info other = (Info) obj; |
||||
return this.details.equals(other.details); |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
@Override |
||||
public int hashCode() { |
||||
return this.details.hashCode(); |
||||
} |
||||
|
||||
@Override |
||||
public String toString() { |
||||
return getDetails().toString(); |
||||
} |
||||
} |
||||
@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
|
||||
package org.springframework.boot.actuate.info; |
||||
|
||||
/** |
||||
* information provider for the info endpoint |
||||
* |
||||
* @author Meang Akira Tanaka |
||||
*/ |
||||
public interface InfoProvider { |
||||
|
||||
String name(); |
||||
|
||||
/** |
||||
* @return a collection of information |
||||
*/ |
||||
Info provide(); |
||||
|
||||
} |
||||
@ -0,0 +1,105 @@
@@ -0,0 +1,105 @@
|
||||
package org.springframework.boot.actuate.info; |
||||
|
||||
import java.util.Properties; |
||||
|
||||
import org.springframework.boot.bind.PropertiesConfigurationFactory; |
||||
import org.springframework.core.io.Resource; |
||||
import org.springframework.core.io.support.PropertiesLoaderUtils; |
||||
|
||||
/** |
||||
* A {@link InfoProvider} that provides git information extracted from the git.properties file generated by the maven plugin |
||||
* pl.project13.maven:git-commit-id-plugin. |
||||
* |
||||
* @author Meang Akira Tanaka |
||||
* @since 1.3.0 |
||||
*/ |
||||
public class ScmGitPropertiesInfoProvider implements InfoProvider { |
||||
|
||||
private final Resource gitPropertiesResource; |
||||
private final GitInfo gitInfo; |
||||
|
||||
public ScmGitPropertiesInfoProvider(Resource gitPropertiesResource) throws Exception { |
||||
this.gitPropertiesResource = gitPropertiesResource; |
||||
gitInfo = extractGitInfo(); |
||||
} |
||||
|
||||
@Override |
||||
public String name() { |
||||
return "git"; |
||||
} |
||||
|
||||
@Override |
||||
public Info provide() { |
||||
if(gitInfo == null) { |
||||
return null; |
||||
} |
||||
|
||||
Info result = new Info(); |
||||
|
||||
result.put("branch", gitInfo.getBranch()); |
||||
result.put("commit", gitInfo.getCommit()); |
||||
|
||||
return result; |
||||
} |
||||
|
||||
|
||||
private GitInfo extractGitInfo() throws Exception { |
||||
PropertiesConfigurationFactory<GitInfo> factory = new PropertiesConfigurationFactory<GitInfo>( |
||||
new GitInfo()); |
||||
factory.setTargetName("git"); |
||||
Properties properties = new Properties(); |
||||
if (this.gitPropertiesResource.exists()) { |
||||
properties = PropertiesLoaderUtils.loadProperties(this.gitPropertiesResource); |
||||
} else { |
||||
return null; |
||||
} |
||||
factory.setProperties(properties); |
||||
return factory.getObject(); |
||||
} |
||||
|
||||
|
||||
public static class GitInfo { |
||||
|
||||
private String branch; |
||||
|
||||
private final Commit commit = new Commit(); |
||||
|
||||
public String getBranch() { |
||||
return this.branch; |
||||
} |
||||
|
||||
public void setBranch(String branch) { |
||||
this.branch = branch; |
||||
} |
||||
|
||||
public Commit getCommit() { |
||||
return this.commit; |
||||
} |
||||
|
||||
public static class Commit { |
||||
|
||||
private String id; |
||||
|
||||
private String time; |
||||
|
||||
public String getId() { |
||||
return this.id == null ? "" |
||||
: (this.id.length() > 7 ? this.id.substring(0, 7) : this.id); |
||||
} |
||||
|
||||
public void setId(String id) { |
||||
this.id = id; |
||||
} |
||||
|
||||
public String getTime() { |
||||
return this.time; |
||||
} |
||||
|
||||
public void setTime(String time) { |
||||
this.time = time; |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
} |
||||
@ -0,0 +1,115 @@
@@ -0,0 +1,115 @@
|
||||
package org.springframework.boot.actuate.endpoint.mvc; |
||||
|
||||
import static org.hamcrest.Matchers.containsString; |
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; |
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; |
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; |
||||
|
||||
import java.util.Map; |
||||
|
||||
import org.elasticsearch.common.collect.Maps; |
||||
import org.junit.Before; |
||||
import org.junit.Test; |
||||
import org.junit.runner.RunWith; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration; |
||||
import org.springframework.boot.actuate.autoconfigure.ManagementServerPropertiesAutoConfiguration; |
||||
import org.springframework.boot.actuate.endpoint.InfoEndpoint; |
||||
import org.springframework.boot.actuate.endpoint.mvc.InfoMvcEndpointTests.TestConfiguration; |
||||
import org.springframework.boot.actuate.info.Info; |
||||
import org.springframework.boot.actuate.info.InfoProvider; |
||||
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration; |
||||
import org.springframework.boot.test.SpringApplicationConfiguration; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.Configuration; |
||||
import org.springframework.context.annotation.Import; |
||||
import org.springframework.test.context.TestPropertySource; |
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; |
||||
import org.springframework.test.context.web.WebAppConfiguration; |
||||
import org.springframework.test.web.servlet.MockMvc; |
||||
import org.springframework.test.web.servlet.setup.MockMvcBuilders; |
||||
import org.springframework.web.context.WebApplicationContext; |
||||
|
||||
/** |
||||
* Tests for {@link InfoMvcEndpointTests} |
||||
* |
||||
* @author Meang Akira Tanaka |
||||
*/ |
||||
@RunWith(SpringJUnit4ClassRunner.class) |
||||
@SpringApplicationConfiguration(classes = { TestConfiguration.class }) |
||||
@WebAppConfiguration |
||||
@TestPropertySource(properties = {"info.app.name=MyService"}) |
||||
public class InfoMvcEndpointTests { |
||||
@Autowired |
||||
private WebApplicationContext context; |
||||
|
||||
private MockMvc mvc; |
||||
|
||||
@Before |
||||
public void setUp() { |
||||
|
||||
this.context.getBean(InfoEndpoint.class).setEnabled(true); |
||||
this.mvc = MockMvcBuilders.webAppContextSetup(this.context).build(); |
||||
} |
||||
|
||||
@Test |
||||
public void home() throws Exception { |
||||
this.mvc.perform(get("/info")).andExpect(status().isOk()) |
||||
.andExpect(content().string(containsString("\"beanName2\":{\"key22\":\"value22\",\"key21\":\"value21\"},\"beanName1\":{\"key12\":\"value12\",\"key11\":\"value11\"}"))); |
||||
} |
||||
|
||||
@Import({ JacksonAutoConfiguration.class, |
||||
HttpMessageConvertersAutoConfiguration.class, |
||||
EndpointWebMvcAutoConfiguration.class, |
||||
WebMvcAutoConfiguration.class, |
||||
ManagementServerPropertiesAutoConfiguration.class }) |
||||
@Configuration |
||||
public static class TestConfiguration { |
||||
|
||||
private Map<String, InfoProvider> infoProviders = Maps.newHashMap(); |
||||
|
||||
public TestConfiguration() { |
||||
InfoProvider infoProvider1 = new InfoProvider() { |
||||
|
||||
@Override |
||||
public Info provide() { |
||||
Info result = new Info(); |
||||
result.put("key11", "value11"); |
||||
result.put("key12", "value12"); |
||||
return result; |
||||
} |
||||
|
||||
@Override |
||||
public String name() { |
||||
return "beanName1"; |
||||
} |
||||
}; |
||||
infoProviders.put("beanName1", infoProvider1); |
||||
|
||||
InfoProvider infoProvider2 = new InfoProvider() { |
||||
|
||||
@Override |
||||
public Info provide() { |
||||
Info result = new Info(); |
||||
result.put("key21", "value21"); |
||||
result.put("key22", "value22"); |
||||
return result; |
||||
} |
||||
|
||||
@Override |
||||
public String name() { |
||||
return "beanName2"; |
||||
} |
||||
}; |
||||
infoProviders.put("beanName2", infoProvider2); |
||||
} |
||||
|
||||
@Bean |
||||
public InfoEndpoint endpoint() { |
||||
return new InfoEndpoint(infoProviders); |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,75 @@
@@ -0,0 +1,75 @@
|
||||
package org.springframework.boot.actuate.endpoint.mvc; |
||||
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; |
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
import org.elasticsearch.common.collect.Maps; |
||||
import org.junit.Before; |
||||
import org.junit.Test; |
||||
import org.junit.runner.RunWith; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration; |
||||
import org.springframework.boot.actuate.autoconfigure.ManagementServerPropertiesAutoConfiguration; |
||||
import org.springframework.boot.actuate.endpoint.InfoEndpoint; |
||||
import org.springframework.boot.actuate.endpoint.mvc.InfoMvcEndpointWithoutAnyInfoProvidersTests.TestConfiguration; |
||||
import org.springframework.boot.actuate.info.InfoProvider; |
||||
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration; |
||||
import org.springframework.boot.test.SpringApplicationConfiguration; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.Configuration; |
||||
import org.springframework.context.annotation.Import; |
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; |
||||
import org.springframework.test.context.web.WebAppConfiguration; |
||||
import org.springframework.test.web.servlet.MockMvc; |
||||
import org.springframework.test.web.servlet.setup.MockMvcBuilders; |
||||
import org.springframework.web.context.WebApplicationContext; |
||||
|
||||
/** |
||||
* Tests for {@link InfoMvcEndpointWithoutAnyInfoProvidersTests} |
||||
* |
||||
* @author Meang Akira Tanaka |
||||
*/ |
||||
@RunWith(SpringJUnit4ClassRunner.class) |
||||
@SpringApplicationConfiguration(classes = { TestConfiguration.class }) |
||||
@WebAppConfiguration |
||||
public class InfoMvcEndpointWithoutAnyInfoProvidersTests { |
||||
@Autowired |
||||
private WebApplicationContext context; |
||||
|
||||
private MockMvc mvc; |
||||
|
||||
@Before |
||||
public void setUp() { |
||||
|
||||
this.context.getBean(InfoEndpoint.class).setEnabled(true); |
||||
this.mvc = MockMvcBuilders.webAppContextSetup(this.context).build(); |
||||
} |
||||
|
||||
@Test |
||||
public void home() throws Exception { |
||||
this.mvc.perform(get("/info")).andExpect(status().isOk()); |
||||
} |
||||
|
||||
@Import({ JacksonAutoConfiguration.class, |
||||
HttpMessageConvertersAutoConfiguration.class, |
||||
EndpointWebMvcAutoConfiguration.class, |
||||
WebMvcAutoConfiguration.class, |
||||
ManagementServerPropertiesAutoConfiguration.class }) |
||||
@Configuration |
||||
public static class TestConfiguration { |
||||
|
||||
private Map<String, InfoProvider> infoProviders = Maps.newHashMap(); |
||||
|
||||
@Bean |
||||
public InfoEndpoint endpoint() { |
||||
return new InfoEndpoint(infoProviders); |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,64 @@
@@ -0,0 +1,64 @@
|
||||
package org.springframework.boot.actuate.info; |
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat; |
||||
import static org.hamcrest.Matchers.equalTo; |
||||
import static org.hamcrest.Matchers.is; |
||||
|
||||
import java.util.Properties; |
||||
|
||||
import org.junit.Test; |
||||
import org.springframework.core.env.PropertiesPropertySource; |
||||
import org.springframework.core.env.PropertySource; |
||||
import org.springframework.core.env.StandardEnvironment; |
||||
|
||||
public class EnvironmentInfoProviderTest { |
||||
|
||||
@Test |
||||
public void provide_HasTwoRelevantEntries_ShowOnlyRelevantEntries() throws Exception { |
||||
String expectedAppName = "my app name"; |
||||
String expectedLanguage = "da-DK"; |
||||
|
||||
Properties properties = new Properties(); |
||||
properties.setProperty("info.app", expectedAppName); |
||||
properties.setProperty("info.lang", expectedLanguage); |
||||
properties.setProperty("logging.path", "notExpected"); |
||||
|
||||
PropertySource<?> propertySource = new PropertiesPropertySource("mysettings", properties); |
||||
|
||||
StandardEnvironment environment = new StandardEnvironment(); |
||||
environment.getPropertySources().addLast(propertySource); |
||||
|
||||
EnvironmentInfoProvider environmentInfoProvider = new EnvironmentInfoProvider(environment); |
||||
|
||||
Info actual = environmentInfoProvider.provide(); |
||||
assertThat(actual.getDetails().size(), is(equalTo(2))); |
||||
assertThat((String) actual.get("app"), is(equalTo(expectedAppName))); |
||||
assertThat((String) actual.get("lang"), is(equalTo(expectedLanguage))); |
||||
} |
||||
|
||||
@Test |
||||
public void provide_HasNoRelevantEntries_NoEntries() throws Exception { |
||||
Properties properties = new Properties(); |
||||
properties.setProperty("logging.path", "notExpected"); |
||||
|
||||
PropertySource<?> propertySource = new PropertiesPropertySource("mysettings", properties); |
||||
|
||||
StandardEnvironment environment = new StandardEnvironment(); |
||||
environment.getPropertySources().addLast(propertySource); |
||||
|
||||
EnvironmentInfoProvider environmentInfoProvider = new EnvironmentInfoProvider(environment); |
||||
|
||||
Info actual = environmentInfoProvider.provide(); |
||||
assertThat(actual.getDetails().size(), is(equalTo(0))); |
||||
} |
||||
|
||||
|
||||
@Test |
||||
public void provide_HasNoEntries_NoEntries() throws Exception { |
||||
EnvironmentInfoProvider environmentInfoProvider = new EnvironmentInfoProvider(new StandardEnvironment()); |
||||
|
||||
Info actual = environmentInfoProvider.provide(); |
||||
assertThat(actual.getDetails().size(), is(equalTo(0))); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,98 @@
@@ -0,0 +1,98 @@
|
||||
package org.springframework.boot.actuate.info; |
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat; |
||||
import static org.hamcrest.Matchers.equalTo; |
||||
import static org.hamcrest.Matchers.is; |
||||
import static org.hamcrest.Matchers.not; |
||||
import static org.hamcrest.Matchers.nullValue; |
||||
import static org.mockito.Mockito.mock; |
||||
import static org.mockito.Mockito.when; |
||||
|
||||
import org.junit.Test; |
||||
import org.springframework.boot.actuate.info.ScmGitPropertiesInfoProvider.GitInfo.Commit; |
||||
import org.springframework.core.io.ByteArrayResource; |
||||
import org.springframework.core.io.Resource; |
||||
|
||||
public class ScmGitPropertiesInfoProviderTest { |
||||
|
||||
|
||||
@Test |
||||
public void provide_HasBadFormatButExists_EmptyInfoReturned() throws Exception { |
||||
Resource resource = new ByteArrayResource("GARBAGE".getBytes()); |
||||
ScmGitPropertiesInfoProvider scmGitPropertiesInfoProvider = new ScmGitPropertiesInfoProvider(resource); |
||||
|
||||
Info actual = scmGitPropertiesInfoProvider.provide(); |
||||
assertThat(actual, is(not(nullValue()))); |
||||
assertThat((String) actual.get("branch"), is(nullValue())); |
||||
Commit actualCommit = (Commit) actual.get("commit"); |
||||
assertThat(actualCommit, is(not(nullValue()))); |
||||
assertThat(actualCommit.getId(), is(equalTo(""))); |
||||
assertThat(actualCommit.getTime(), is(nullValue())); |
||||
} |
||||
|
||||
@Test |
||||
public void provide_HasValidFormat_ExpectedDataReturned() throws Exception { |
||||
String gitProperties = "git.commit.id.abbrev=e02a4f3\r\n" |
||||
+ "git.commit.user.email=dsyer@vmware.com\r\n" |
||||
+ "git.commit.message.full=Update Spring\r\n" |
||||
+ "git.commit.id=e02a4f3b6f452cdbf6dd311f1362679eb4c31ced\r\n" |
||||
+ "git.commit.message.short=Update Spring\r\n" |
||||
+ "git.commit.user.name=Dave Syer\r\n" |
||||
+ "git.build.user.name=Dave Syer\r\n" |
||||
+ "git.build.user.email=dsyer@vmware.com\r\n" |
||||
+ "git.branch=develop\r\n" |
||||
+ "git.commit.time=2013-04-24T08\\:42\\:13+0100\r\n" |
||||
+ "git.build.time=2013-05-23T09\\:26\\:42+0100\r\n"; |
||||
|
||||
Resource resource = new ByteArrayResource(gitProperties.getBytes()); |
||||
ScmGitPropertiesInfoProvider scmGitPropertiesInfoProvider = new ScmGitPropertiesInfoProvider(resource); |
||||
|
||||
Info actual = scmGitPropertiesInfoProvider.provide(); |
||||
assertThat(actual, is(not(nullValue()))); |
||||
assertThat((String) actual.get("branch"), is(equalTo("develop"))); |
||||
Commit actualCommit = (Commit) actual.get("commit"); |
||||
assertThat(actualCommit, is(not(nullValue()))); |
||||
assertThat(actualCommit.getId(), is(equalTo("e02a4f3"))); |
||||
assertThat(actualCommit.getTime(), is(equalTo("2013-04-24T08:42:13+0100"))); |
||||
} |
||||
|
||||
|
||||
@Test |
||||
public void provide_HasValidFormatButMissingCommitTime_ExpectedDataReturnedWithoutCommitTime() throws Exception { |
||||
String gitProperties = "git.commit.id.abbrev=e02a4f3\r\n" |
||||
+ "git.commit.user.email=dsyer@vmware.com\r\n" |
||||
+ "git.commit.message.full=Update Spring\r\n" |
||||
+ "git.commit.id=e02a4f3b6f452cdbf6dd311f1362679eb4c31ced\r\n" |
||||
+ "git.commit.message.short=Update Spring\r\n" |
||||
+ "git.commit.user.name=Dave Syer\r\n" |
||||
+ "git.build.user.name=Dave Syer\r\n" |
||||
+ "git.build.user.email=dsyer@vmware.com\r\n" |
||||
+ "git.branch=develop\r\n" |
||||
+ "git.build.time=2013-05-23T09\\:26\\:42+0100\r\n"; |
||||
|
||||
Resource resource = new ByteArrayResource(gitProperties.getBytes()); |
||||
ScmGitPropertiesInfoProvider scmGitPropertiesInfoProvider = new ScmGitPropertiesInfoProvider(resource); |
||||
|
||||
Info actual = scmGitPropertiesInfoProvider.provide(); |
||||
assertThat(actual, is(not(nullValue()))); |
||||
assertThat((String) actual.get("branch"), is(equalTo("develop"))); |
||||
Commit actualCommit = (Commit) actual.get("commit"); |
||||
assertThat(actualCommit, is(not(nullValue()))); |
||||
assertThat(actualCommit.getId(), is(equalTo("e02a4f3"))); |
||||
assertThat(actualCommit.getTime(), is(nullValue())); |
||||
} |
||||
|
||||
|
||||
@Test |
||||
public void provide_DoesNotExists_NullReturned() throws Exception { |
||||
|
||||
Resource resource = mock(Resource.class); |
||||
when(resource.exists()) |
||||
.thenReturn(false); |
||||
ScmGitPropertiesInfoProvider scmGitPropertiesInfoProvider = new ScmGitPropertiesInfoProvider(resource); |
||||
|
||||
Info actual = scmGitPropertiesInfoProvider.provide(); |
||||
assertThat(actual, is(nullValue())); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
|
||||
package sample.actuator; |
||||
|
||||
import org.springframework.boot.actuate.info.Info; |
||||
import org.springframework.boot.actuate.info.InfoProvider; |
||||
import org.springframework.stereotype.Component; |
||||
|
||||
@Component |
||||
public class ExampleInfoProvider implements InfoProvider { |
||||
|
||||
@Override |
||||
public Info provide() { |
||||
Info result = new Info(); |
||||
result.put("somekey", "somevalue"); |
||||
return result; |
||||
} |
||||
|
||||
@Override |
||||
public String name() { |
||||
return "example"; |
||||
} |
||||
} |
||||
Loading…
Reference in new issue