У меня есть тест, выполняющийся против моего сервера Spring Config, чтобы проверить, работает ли приложение. Я провел несколько ручных тестов, и все отлично работает с базовым запуском приложения Spring Confg Boot, но я хочу, чтобы модульный тест доказывал это решение и мог тестировать мое хранилище ключей и многое другое.Тест Spring Config с ApplicationContextInitializer - как расшифровать?
Я добавил пользовательскую реализацию ApplicationContextInitializer
для загрузки данных с application-test.yml
при запуске выполнения. Все работает, когда данные не зашифрованы; однако, когда я добавляю зашифрованное свойство, оно не расшифровывает его.
Реализация я использовал:
public class TestYamlFileApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
try {
Resource resource = applicationContext.getResource(CLASSPATH_URI);
YamlPropertySourceLoader sourceLoader = new YamlPropertySourceLoader();
PropertySource<?> testProperties = sourceLoader.load("yamlTestProperties", resource, null);
applicationContext.getEnvironment().getPropertySources().addFirst(testProperties);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
application-test.yml
является:
my:
encrypted:
parameter: '{cipher}AQB8C/1v9J+jPQZG...'
server:
port: 0
spring:
profiles:
active: native
encrypt:
key-store:
location: classpath*:/security/development-test.jks
alias: DevelopmentTest
secret: SomeSecretPassword123
password: SomeStorePassword123
Мой тест помечается @ContextConfiguration (initializers = TestYamlFileApplicationContextInitializer.class)
пнуть его.
Тест запускает базовую проверку с помощью:
@Autowired
Environment env;
@Test
public void testStuff() {
String theProp = env.getProperty("my.encrypted.parameter");
System.err.println(theProp);
}
Выход есть: {cipher}AQB8C/1v9J+jPQZG...
Там нет исключений в списке.
Какой кусок головоломки мне не хватает?
Интересно. Я удивлен, что они не сталкивались с этим при написании собственных тестов в проекте; но мы все пропускаем что-то здесь и там. К сожалению, на самом деле это ответ! Надеемся, что ошибка будет устранена в следующем обновлении. –