Fixes possible infinite loop
Fixes edge case of an infinite loop in decrypting properties in a hierarchy of application contexts. fixes gh-178
This commit is contained in:
committed by
Spencer Gibb
parent
d2ab1c6de9
commit
4e0d2e520f
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2013-2014 the original author or authors.
|
||||
* Copyright 2013-2017 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.
|
||||
@@ -15,26 +15,30 @@
|
||||
*/
|
||||
package org.springframework.cloud.bootstrap.encrypt;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.core.env.MapPropertySource;
|
||||
import org.springframework.core.env.MutablePropertySources;
|
||||
import org.springframework.core.env.PropertySource;
|
||||
import org.springframework.security.crypto.encrypt.Encryptors;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.springframework.boot.test.util.EnvironmentTestUtils.addEnvironment;
|
||||
import static org.springframework.cloud.bootstrap.encrypt.EnvironmentDecryptApplicationInitializer.DECRYPTED_PROPERTY_SOURCE_NAME;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*
|
||||
* @author Biju Kunjummen
|
||||
*/
|
||||
public class EnvironmentDecryptApplicationInitializerTests {
|
||||
|
||||
@@ -115,4 +119,23 @@ public class EnvironmentDecryptApplicationInitializerTests {
|
||||
assertThat("decrypted property source had wrong size", decrypted.getSource().size(), is(4));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecryptNonStandardParent() {
|
||||
ConfigurableApplicationContext ctx = new AnnotationConfigApplicationContext();
|
||||
EnvironmentDecryptApplicationInitializer initializer =
|
||||
new EnvironmentDecryptApplicationInitializer(Encryptors.noOpText());
|
||||
|
||||
addEnvironment(ctx, "key:{cipher}value");
|
||||
|
||||
|
||||
ApplicationContext ctxParent = mock(ApplicationContext.class);
|
||||
when(ctxParent.getEnvironment()).thenReturn(mock(Environment.class));
|
||||
|
||||
ctx.setParent(ctxParent);
|
||||
|
||||
initializer.initialize(ctx);
|
||||
|
||||
assertEquals("value", ctx.getEnvironment().getProperty("key"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user