16 changed files with 679 additions and 72 deletions
@ -0,0 +1,137 @@
@@ -0,0 +1,137 @@
|
||||
/* |
||||
* Copyright 2014 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 java.util.Map; |
||||
|
||||
import javax.sql.DataSource; |
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.boot.actuate.health.CompositeHealthIndicator; |
||||
import org.springframework.boot.actuate.health.HealthIndicator; |
||||
import org.springframework.boot.actuate.health.MongoHealthIndicator; |
||||
import org.springframework.boot.actuate.health.RedisHealthIndicator; |
||||
import org.springframework.boot.actuate.health.SimpleDataSourceHealthIndicator; |
||||
import org.springframework.boot.actuate.health.VanillaHealthIndicator; |
||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter; |
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; |
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; |
||||
import org.springframework.boot.autoconfigure.jdbc.CommonsDataSourceConfiguration; |
||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; |
||||
import org.springframework.boot.autoconfigure.jdbc.HikariDataSourceConfiguration; |
||||
import org.springframework.boot.autoconfigure.jdbc.TomcatDataSourceConfiguration; |
||||
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.mongo.MongoDataAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.redis.RedisAutoConfiguration; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.Configuration; |
||||
import org.springframework.data.mongodb.core.MongoTemplate; |
||||
import org.springframework.data.redis.connection.RedisConnectionFactory; |
||||
|
||||
/** |
||||
* @author Christian Dupuis |
||||
* @since 1.1.0 |
||||
*/ |
||||
@Configuration |
||||
@AutoConfigureAfter({ DataSourceAutoConfiguration.class, |
||||
EmbeddedDataSourceConfiguration.class, CommonsDataSourceConfiguration.class, |
||||
HikariDataSourceConfiguration.class, TomcatDataSourceConfiguration.class, |
||||
MongoAutoConfiguration.class, MongoDataAutoConfiguration.class, |
||||
RedisAutoConfiguration.class }) |
||||
public class HealthIndicatorAutoConfiguration { |
||||
|
||||
@Bean |
||||
@ConditionalOnMissingBean(HealthIndicator.class) |
||||
public HealthIndicator<?> statusHealthIndicator() { |
||||
return new VanillaHealthIndicator(); |
||||
} |
||||
|
||||
@Configuration |
||||
@ConditionalOnBean(DataSource.class) |
||||
public static class DataSourcesHealthIndicatorConfiguration { |
||||
|
||||
@Autowired(required = false) |
||||
private Map<String, DataSource> dataSources; |
||||
|
||||
@Bean |
||||
@ConditionalOnMissingBean(name = "dbHealthIndicator") |
||||
public HealthIndicator<? extends Object> dbHealthIndicator() { |
||||
if (this.dataSources.size() == 1) { |
||||
return new SimpleDataSourceHealthIndicator(this.dataSources.values().iterator() |
||||
.next()); |
||||
} |
||||
|
||||
CompositeHealthIndicator composite = new CompositeHealthIndicator(); |
||||
for (Map.Entry<String, DataSource> entry : this.dataSources.entrySet()) { |
||||
composite.addHealthIndicator(entry.getKey(), new SimpleDataSourceHealthIndicator( |
||||
entry.getValue())); |
||||
} |
||||
return composite; |
||||
} |
||||
} |
||||
|
||||
@Configuration |
||||
@ConditionalOnBean(MongoTemplate.class) |
||||
public static class MongoHealthIndicatorConfiguration { |
||||
|
||||
@Autowired |
||||
private Map<String, MongoTemplate> mongoTemplates; |
||||
|
||||
@Bean |
||||
@ConditionalOnMissingBean(name = "mongoHealthIndicator") |
||||
public HealthIndicator<?> mongoHealthIndicator() { |
||||
if (this.mongoTemplates.size() == 1) { |
||||
return new MongoHealthIndicator(this.mongoTemplates.values().iterator() |
||||
.next()); |
||||
} |
||||
|
||||
CompositeHealthIndicator composite = new CompositeHealthIndicator(); |
||||
for (Map.Entry<String, MongoTemplate> entry : this.mongoTemplates.entrySet()) { |
||||
composite.addHealthIndicator(entry.getKey(), new MongoHealthIndicator( |
||||
entry.getValue())); |
||||
} |
||||
return composite; |
||||
} |
||||
} |
||||
|
||||
@Configuration |
||||
@ConditionalOnBean(RedisConnectionFactory.class) |
||||
public static class RedisHealthIndicatorConfiguration { |
||||
|
||||
@Autowired |
||||
private Map<String, RedisConnectionFactory> redisConnectionFactories; |
||||
|
||||
@Bean |
||||
@ConditionalOnMissingBean(name = "redisHealthIndicator") |
||||
public HealthIndicator<?> redisHealthIndicator() { |
||||
if (this.redisConnectionFactories.size() == 1) { |
||||
return new RedisHealthIndicator(this.redisConnectionFactories.values() |
||||
.iterator().next()); |
||||
} |
||||
|
||||
CompositeHealthIndicator composite = new CompositeHealthIndicator(); |
||||
for (Map.Entry<String, RedisConnectionFactory> entry : this.redisConnectionFactories |
||||
.entrySet()) { |
||||
composite.addHealthIndicator(entry.getKey(), new RedisHealthIndicator( |
||||
entry.getValue())); |
||||
} |
||||
return composite; |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,57 @@
@@ -0,0 +1,57 @@
|
||||
/* |
||||
* Copyright 2014 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.health; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
import org.springframework.data.mongodb.core.MongoTemplate; |
||||
|
||||
import com.mongodb.CommandResult; |
||||
|
||||
/** |
||||
* Simple implementation of a {@link HealthIndicator} returning status information for |
||||
* Mongo data stores. |
||||
* |
||||
* @author Christian Dupuis |
||||
* @since 1.1.0 |
||||
*/ |
||||
public class MongoHealthIndicator implements HealthIndicator<Map<String, Object>> { |
||||
|
||||
private final MongoTemplate mongoTemplate; |
||||
|
||||
public MongoHealthIndicator(MongoTemplate mongoTemplate) { |
||||
this.mongoTemplate = mongoTemplate; |
||||
} |
||||
|
||||
@Override |
||||
public Map<String, Object> health() { |
||||
Map<String, Object> health = new HashMap<String, Object>(); |
||||
try { |
||||
CommandResult result = this.mongoTemplate |
||||
.executeCommand("{ serverStatus: 1 }"); |
||||
health.put("status", "ok"); |
||||
health.put("version", result.getString("version")); |
||||
} |
||||
catch (Exception ex) { |
||||
health.put("status", "error"); |
||||
health.put("error", ex.getClass().getName() + ": " + ex.getMessage()); |
||||
} |
||||
return health; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,63 @@
@@ -0,0 +1,63 @@
|
||||
/* |
||||
* Copyright 2014 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.health; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
import java.util.Properties; |
||||
|
||||
import org.springframework.data.redis.connection.RedisConnection; |
||||
import org.springframework.data.redis.connection.RedisConnectionFactory; |
||||
import org.springframework.data.redis.core.RedisConnectionUtils; |
||||
|
||||
/** |
||||
* Simple implementation of a {@link HealthIndicator} returning status information for |
||||
* Redis data stores. |
||||
* |
||||
* @author Christian Dupuis |
||||
* @since 1.1.0 |
||||
*/ |
||||
public class RedisHealthIndicator implements HealthIndicator<Map<String, Object>> { |
||||
|
||||
private final RedisConnectionFactory redisConnectionFactory; |
||||
|
||||
public RedisHealthIndicator(RedisConnectionFactory connectionFactory) { |
||||
this.redisConnectionFactory = connectionFactory; |
||||
} |
||||
|
||||
@Override |
||||
public Map<String, Object> health() { |
||||
Map<String, Object> health = new HashMap<String, Object>(); |
||||
|
||||
RedisConnection connection = null; |
||||
try { |
||||
connection = RedisConnectionUtils.getConnection(this.redisConnectionFactory); |
||||
Properties info = connection.info(); |
||||
health.put("status", "ok"); |
||||
health.put("version", info.getProperty("redis_version")); |
||||
} |
||||
catch (Exception ex) { |
||||
health.put("status", "error"); |
||||
health.put("error", ex.getClass().getName() + ": " + ex.getMessage()); |
||||
} |
||||
finally { |
||||
RedisConnectionUtils.releaseConnection(connection, |
||||
this.redisConnectionFactory); |
||||
} |
||||
return health; |
||||
} |
||||
} |
||||
@ -0,0 +1,126 @@
@@ -0,0 +1,126 @@
|
||||
/* |
||||
* Copyright 2014 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 java.util.Map; |
||||
|
||||
import org.junit.After; |
||||
import org.junit.Before; |
||||
import org.junit.Test; |
||||
import org.springframework.boot.actuate.health.HealthIndicator; |
||||
import org.springframework.boot.actuate.health.MongoHealthIndicator; |
||||
import org.springframework.boot.actuate.health.RedisHealthIndicator; |
||||
import org.springframework.boot.actuate.health.SimpleDataSourceHealthIndicator; |
||||
import org.springframework.boot.actuate.health.VanillaHealthIndicator; |
||||
import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; |
||||
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.mongo.MongoDataAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.redis.RedisAutoConfiguration; |
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext; |
||||
|
||||
import static org.junit.Assert.assertEquals; |
||||
|
||||
/** |
||||
* Tests for {@link HealthIndicatorAutoConfiguration}. |
||||
* |
||||
* @author Christian Dupuis |
||||
*/ |
||||
public class HealthIndicatorAutoConfigurationTests { |
||||
|
||||
private AnnotationConfigApplicationContext context; |
||||
|
||||
@Before |
||||
public void setup() { |
||||
this.context = new AnnotationConfigApplicationContext(); |
||||
this.context.register(EndpointAutoConfiguration.class); |
||||
this.context.refresh(); |
||||
} |
||||
|
||||
@After |
||||
public void close() { |
||||
if (this.context != null) { |
||||
this.context.close(); |
||||
} |
||||
} |
||||
|
||||
@SuppressWarnings("rawtypes") |
||||
@Test |
||||
public void defaultHealthIndicator() { |
||||
this.context = new AnnotationConfigApplicationContext(); |
||||
this.context.register(HealthIndicatorAutoConfiguration.class); |
||||
this.context.refresh(); |
||||
Map<String, HealthIndicator> beans = this.context |
||||
.getBeansOfType(HealthIndicator.class); |
||||
assertEquals(1, beans.size()); |
||||
assertEquals(VanillaHealthIndicator.class, beans.values().iterator().next() |
||||
.getClass()); |
||||
} |
||||
|
||||
@SuppressWarnings("rawtypes") |
||||
@Test |
||||
public void redisHealthIndicator() { |
||||
this.context = new AnnotationConfigApplicationContext(); |
||||
this.context.register(RedisAutoConfiguration.class, |
||||
HealthIndicatorAutoConfiguration.class); |
||||
this.context.refresh(); |
||||
Map<String, HealthIndicator> beans = this.context |
||||
.getBeansOfType(HealthIndicator.class); |
||||
assertEquals(1, beans.size()); |
||||
assertEquals(RedisHealthIndicator.class, beans.values().iterator().next() |
||||
.getClass()); |
||||
} |
||||
|
||||
@SuppressWarnings("rawtypes") |
||||
@Test |
||||
public void mongoHealthIndicator() { |
||||
this.context = new AnnotationConfigApplicationContext(); |
||||
this.context.register(MongoAutoConfiguration.class, |
||||
MongoDataAutoConfiguration.class, HealthIndicatorAutoConfiguration.class); |
||||
this.context.refresh(); |
||||
Map<String, HealthIndicator> beans = this.context |
||||
.getBeansOfType(HealthIndicator.class); |
||||
assertEquals(1, beans.size()); |
||||
assertEquals(MongoHealthIndicator.class, beans.values().iterator().next() |
||||
.getClass()); |
||||
} |
||||
|
||||
@SuppressWarnings("rawtypes") |
||||
@Test |
||||
public void combinedHealthIndicator() { |
||||
this.context = new AnnotationConfigApplicationContext(); |
||||
this.context.register(MongoAutoConfiguration.class, RedisAutoConfiguration.class, |
||||
MongoDataAutoConfiguration.class, HealthIndicatorAutoConfiguration.class); |
||||
this.context.refresh(); |
||||
Map<String, HealthIndicator> beans = this.context |
||||
.getBeansOfType(HealthIndicator.class); |
||||
assertEquals(2, beans.size()); |
||||
} |
||||
|
||||
@SuppressWarnings("rawtypes") |
||||
@Test |
||||
public void dataSourceHealthIndicator() { |
||||
this.context = new AnnotationConfigApplicationContext(); |
||||
this.context.register(EmbeddedDataSourceConfiguration.class, |
||||
HealthIndicatorAutoConfiguration.class); |
||||
this.context.refresh(); |
||||
Map<String, HealthIndicator> beans = this.context |
||||
.getBeansOfType(HealthIndicator.class); |
||||
assertEquals(1, beans.size()); |
||||
assertEquals(SimpleDataSourceHealthIndicator.class, beans.values().iterator().next() |
||||
.getClass()); |
||||
} |
||||
} |
||||
@ -0,0 +1,97 @@
@@ -0,0 +1,97 @@
|
||||
/* |
||||
* Copyright 2014 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.health; |
||||
|
||||
import java.util.Map; |
||||
|
||||
import org.junit.After; |
||||
import org.junit.Test; |
||||
import org.mockito.Mockito; |
||||
import org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration; |
||||
import org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.mongo.MongoDataAutoConfiguration; |
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext; |
||||
import org.springframework.data.mongodb.core.MongoTemplate; |
||||
|
||||
import com.mongodb.CommandResult; |
||||
import com.mongodb.MongoException; |
||||
|
||||
import static org.junit.Assert.assertEquals; |
||||
import static org.junit.Assert.assertNotNull; |
||||
import static org.junit.Assert.assertTrue; |
||||
|
||||
/** |
||||
* Tests for {@link MongoHealthIndicator}. |
||||
* |
||||
* @author Christian Dupuis |
||||
*/ |
||||
public class MongoHealthIndicatorTests { |
||||
|
||||
private AnnotationConfigApplicationContext context; |
||||
|
||||
@After |
||||
public void close() { |
||||
if (this.context != null) { |
||||
this.context.close(); |
||||
} |
||||
} |
||||
|
||||
@Test |
||||
public void indicatorExists() { |
||||
this.context = new AnnotationConfigApplicationContext( |
||||
PropertyPlaceholderAutoConfiguration.class, MongoAutoConfiguration.class, |
||||
MongoDataAutoConfiguration.class, EndpointAutoConfiguration.class, |
||||
HealthIndicatorAutoConfiguration.class); |
||||
assertEquals(1, this.context.getBeanNamesForType(MongoTemplate.class).length); |
||||
MongoHealthIndicator healthIndicator = this.context |
||||
.getBean(MongoHealthIndicator.class); |
||||
assertNotNull(healthIndicator); |
||||
} |
||||
|
||||
@Test |
||||
public void mongoIsUp() throws Exception { |
||||
CommandResult commandResult = Mockito.mock(CommandResult.class); |
||||
Mockito.when(commandResult.getString("version")).thenReturn("2.6.4"); |
||||
MongoTemplate mongoTemplate = Mockito.mock(MongoTemplate.class); |
||||
Mockito.when(mongoTemplate.executeCommand("{ serverStatus: 1 }")).thenReturn( |
||||
commandResult); |
||||
MongoHealthIndicator healthIndicator = new MongoHealthIndicator(mongoTemplate); |
||||
|
||||
Map<String, Object> health = healthIndicator.health(); |
||||
assertEquals("ok", health.get("status")); |
||||
assertEquals("2.6.4", health.get("version")); |
||||
|
||||
Mockito.verify(commandResult).getString("version"); |
||||
Mockito.verify(mongoTemplate).executeCommand("{ serverStatus: 1 }"); |
||||
} |
||||
|
||||
@Test |
||||
public void mongoIsDown() throws Exception { |
||||
MongoTemplate mongoTemplate = Mockito.mock(MongoTemplate.class); |
||||
Mockito.when(mongoTemplate.executeCommand("{ serverStatus: 1 }")).thenThrow( |
||||
new MongoException("Connection failed")); |
||||
MongoHealthIndicator healthIndicator = new MongoHealthIndicator(mongoTemplate); |
||||
|
||||
Map<String, Object> health = healthIndicator.health(); |
||||
assertEquals("error", health.get("status")); |
||||
assertTrue(((String) health.get("error")).contains("Connection failed")); |
||||
|
||||
Mockito.verify(mongoTemplate).executeCommand("{ serverStatus: 1 }"); |
||||
} |
||||
} |
||||
@ -0,0 +1,105 @@
@@ -0,0 +1,105 @@
|
||||
/* |
||||
* Copyright 2014 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.health; |
||||
|
||||
import java.util.Map; |
||||
import java.util.Properties; |
||||
|
||||
import org.junit.After; |
||||
import org.junit.Test; |
||||
import org.mockito.Mockito; |
||||
import org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration; |
||||
import org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.redis.RedisAutoConfiguration; |
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext; |
||||
import org.springframework.data.redis.RedisConnectionFailureException; |
||||
import org.springframework.data.redis.connection.RedisConnection; |
||||
import org.springframework.data.redis.connection.RedisConnectionFactory; |
||||
|
||||
import static org.junit.Assert.assertEquals; |
||||
import static org.junit.Assert.assertNotNull; |
||||
import static org.junit.Assert.assertTrue; |
||||
|
||||
/** |
||||
* Tests for {@link RedisHealthIndicator}. |
||||
* |
||||
* @author Christian Dupuis |
||||
*/ |
||||
public class RedisHealthIndicatorTests { |
||||
|
||||
private AnnotationConfigApplicationContext context; |
||||
|
||||
@After |
||||
public void close() { |
||||
if (this.context != null) { |
||||
this.context.close(); |
||||
} |
||||
} |
||||
|
||||
@Test |
||||
public void indicatorExists() { |
||||
this.context = new AnnotationConfigApplicationContext( |
||||
PropertyPlaceholderAutoConfiguration.class, RedisAutoConfiguration.class, |
||||
EndpointAutoConfiguration.class, HealthIndicatorAutoConfiguration.class); |
||||
assertEquals(1, |
||||
this.context.getBeanNamesForType(RedisConnectionFactory.class).length); |
||||
RedisHealthIndicator healthIndicator = this.context |
||||
.getBean(RedisHealthIndicator.class); |
||||
assertNotNull(healthIndicator); |
||||
} |
||||
|
||||
@Test |
||||
public void redisIsUp() throws Exception { |
||||
Properties info = new Properties(); |
||||
info.put("redis_version", "2.8.9"); |
||||
|
||||
RedisConnection redisConnection = Mockito.mock(RedisConnection.class); |
||||
RedisConnectionFactory redisConnectionFactory = Mockito |
||||
.mock(RedisConnectionFactory.class); |
||||
Mockito.when(redisConnectionFactory.getConnection()).thenReturn(redisConnection); |
||||
Mockito.when(redisConnection.info()).thenReturn(info); |
||||
RedisHealthIndicator healthIndicator = new RedisHealthIndicator( |
||||
redisConnectionFactory); |
||||
|
||||
Map<String, Object> health = healthIndicator.health(); |
||||
assertEquals("ok", health.get("status")); |
||||
assertEquals("2.8.9", health.get("version")); |
||||
|
||||
Mockito.verify(redisConnectionFactory).getConnection(); |
||||
Mockito.verify(redisConnection).info(); |
||||
} |
||||
|
||||
@Test |
||||
public void redisIsDown() throws Exception { |
||||
RedisConnection redisConnection = Mockito.mock(RedisConnection.class); |
||||
RedisConnectionFactory redisConnectionFactory = Mockito |
||||
.mock(RedisConnectionFactory.class); |
||||
Mockito.when(redisConnectionFactory.getConnection()).thenReturn(redisConnection); |
||||
Mockito.when(redisConnection.info()).thenThrow( |
||||
new RedisConnectionFailureException("Connection failed")); |
||||
RedisHealthIndicator healthIndicator = new RedisHealthIndicator( |
||||
redisConnectionFactory); |
||||
|
||||
Map<String, Object> health = healthIndicator.health(); |
||||
assertEquals("error", health.get("status")); |
||||
assertTrue(((String) health.get("error")).contains("Connection failed")); |
||||
|
||||
Mockito.verify(redisConnectionFactory).getConnection(); |
||||
Mockito.verify(redisConnection).info(); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue