package org.springframework.cloud.client.serviceregistry;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import org.hamcrest.Matchers;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.boot.test.util.EnvironmentTestUtils;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
import static org.assertj.core.api.Assertions.assertThat;
/**
* @author Spencer Gibb
*/
public class AutoServiceRegistrationAutoConfigurationTests {
@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void hasAutoServiceRegistration() {
try(AnnotationConfigApplicationContext context = setup(HasAutoServiceRegistrationConfiguration.class)) {
AutoServiceRegistration autoServiceRegistration = context.getBean(AutoServiceRegistration.class);
assertThat(autoServiceRegistration).isNotNull();
}
}
@Test
public void noAutoServiceRegistrationAndFailFast() {
this.exception.expect(BeanCreationException.class);
this.exception.expectMessage(Matchers.containsString("no AutoServiceRegistration"));
try(AnnotationConfigApplicationContext context = setup("spring.cloud.service-registry.auto-registration.failFast=true")) {
assertNoBean(context);
}
}
@Test
public void noAutoServiceRegistrationAndFailFastFalse() {
try(AnnotationConfigApplicationContext context = setup()) {
assertNoBean(context);
}
}
private void assertNoBean(AnnotationConfigApplicationContext context) {
Map<String, AutoServiceRegistration> beans = context.getBeansOfType(AutoServiceRegistration.class);
assertThat(beans).isEmpty();
}
@Configuration
static class HasAutoServiceRegistrationConfiguration {
@Bean
public AutoServiceRegistration autoServiceRegistration() {
return new AutoServiceRegistration() {};
}
}
private AnnotationConfigApplicationContext setup(Class... classes) {
return setup(null, classes);
}
private AnnotationConfigApplicationContext setup(String property, Class... classes) {
ArrayList<Class> list = new ArrayList<>();
list.add(AutoServiceRegistrationConfiguration.class);
list.add(AutoServiceRegistrationAutoConfiguration.class);
list.addAll(Arrays.asList(classes));
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.register(list.toArray(new Class[0]));
if (StringUtils.hasText(property)) {
EnvironmentTestUtils.addEnvironment(context, property);
}
context.refresh();
return context;
}
}