Skip to content

Commit aa9ed39

Browse files
authored
Merge pull request apolloconfig#1039 from nobodyiam/config-injection-inheritance
add config injection with inheritance test
2 parents 86a5a65 + 360abba commit aa9ed39

File tree

1 file changed

+115
-1
lines changed

1 file changed

+115
-1
lines changed

apollo-client/src/test/java/com/ctrip/framework/apollo/spring/JavaConfigAnnotationTest.java

Lines changed: 115 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,22 @@ public void testApolloConfigWithWrongFieldType() throws Exception {
5454
getBean(TestApolloConfigBean2.class, AppConfig2.class);
5555
}
5656

57+
@Test
58+
public void testApolloConfigWithInheritance() throws Exception {
59+
Config applicationConfig = mock(Config.class);
60+
Config fxApolloConfig = mock(Config.class);
61+
62+
mockConfig(ConfigConsts.NAMESPACE_APPLICATION, applicationConfig);
63+
mockConfig(FX_APOLLO_NAMESPACE, fxApolloConfig);
64+
65+
TestApolloChildConfigBean bean = getBean(TestApolloChildConfigBean.class, AppConfig6.class);
66+
67+
assertEquals(applicationConfig, bean.getConfig());
68+
assertEquals(applicationConfig, bean.getAnotherConfig());
69+
assertEquals(fxApolloConfig, bean.getYetAnotherConfig());
70+
assertEquals(applicationConfig, bean.getSomeConfig());
71+
}
72+
5773
@Test
5874
public void testApolloConfigChangeListener() throws Exception {
5975
Config applicationConfig = mock(Config.class);
@@ -127,6 +143,63 @@ public void testApolloConfigChangeListenerWithWrongParamCount() throws Exception
127143
getBean(TestApolloConfigChangeListenerBean3.class, AppConfig5.class);
128144
}
129145

146+
@Test
147+
public void testApolloConfigChangeListenerWithInheritance() throws Exception {
148+
Config applicationConfig = mock(Config.class);
149+
Config fxApolloConfig = mock(Config.class);
150+
151+
mockConfig(ConfigConsts.NAMESPACE_APPLICATION, applicationConfig);
152+
mockConfig(FX_APOLLO_NAMESPACE, fxApolloConfig);
153+
154+
final List<ConfigChangeListener> applicationListeners = Lists.newArrayList();
155+
final List<ConfigChangeListener> fxApolloListeners = Lists.newArrayList();
156+
157+
doAnswer(new Answer() {
158+
@Override
159+
public Object answer(InvocationOnMock invocation) throws Throwable {
160+
applicationListeners.add(invocation.getArgumentAt(0, ConfigChangeListener.class));
161+
162+
return Void.class;
163+
}
164+
}).when(applicationConfig).addChangeListener(any(ConfigChangeListener.class));
165+
166+
doAnswer(new Answer() {
167+
@Override
168+
public Object answer(InvocationOnMock invocation) throws Throwable {
169+
fxApolloListeners.add(invocation.getArgumentAt(0, ConfigChangeListener.class));
170+
171+
return Void.class;
172+
}
173+
}).when(fxApolloConfig).addChangeListener(any(ConfigChangeListener.class));
174+
175+
ConfigChangeEvent someEvent = mock(ConfigChangeEvent.class);
176+
ConfigChangeEvent anotherEvent = mock(ConfigChangeEvent.class);
177+
178+
TestApolloChildConfigChangeListener bean = getBean(TestApolloChildConfigChangeListener.class, AppConfig7.class);
179+
180+
//PropertySourcesProcessor add listeners to listen config changed of all namespace
181+
assertEquals(5, applicationListeners.size());
182+
assertEquals(1, fxApolloListeners.size());
183+
184+
for (ConfigChangeListener listener : applicationListeners) {
185+
listener.onChange(someEvent);
186+
}
187+
188+
assertEquals(someEvent, bean.getChangeEvent1());
189+
assertEquals(someEvent, bean.getChangeEvent2());
190+
assertEquals(someEvent, bean.getChangeEvent3());
191+
assertEquals(someEvent, bean.getSomeChangeEvent());
192+
193+
for (ConfigChangeListener listener : fxApolloListeners) {
194+
listener.onChange(anotherEvent);
195+
}
196+
197+
assertEquals(someEvent, bean.getChangeEvent1());
198+
assertEquals(someEvent, bean.getChangeEvent2());
199+
assertEquals(anotherEvent, bean.getChangeEvent3());
200+
assertEquals(someEvent, bean.getSomeChangeEvent());
201+
}
202+
130203
private <T> T getBean(Class<T> beanClass, Class<?>... annotatedClasses) {
131204
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(annotatedClasses);
132205

@@ -178,6 +251,24 @@ public TestApolloConfigChangeListenerBean3 bean() {
178251
}
179252
}
180253

254+
@Configuration
255+
@EnableApolloConfig
256+
static class AppConfig6 {
257+
@Bean
258+
public TestApolloChildConfigBean bean() {
259+
return new TestApolloChildConfigBean();
260+
}
261+
}
262+
263+
@Configuration
264+
@EnableApolloConfig
265+
static class AppConfig7 {
266+
@Bean
267+
public TestApolloChildConfigChangeListener bean() {
268+
return new TestApolloChildConfigChangeListener();
269+
}
270+
}
271+
181272
static class TestApolloConfigBean1 {
182273
@ApolloConfig
183274
private Config config;
@@ -199,11 +290,21 @@ public Config getYetAnotherConfig() {
199290
}
200291
}
201292

202-
public static class TestApolloConfigBean2 {
293+
static class TestApolloConfigBean2 {
203294
@ApolloConfig
204295
private String config;
205296
}
206297

298+
static class TestApolloChildConfigBean extends TestApolloConfigBean1 {
299+
300+
@ApolloConfig
301+
private Config someConfig;
302+
303+
public Config getSomeConfig() {
304+
return someConfig;
305+
}
306+
}
307+
207308
static class TestApolloConfigChangeListenerBean1 {
208309
private ConfigChangeEvent changeEvent1;
209310
private ConfigChangeEvent changeEvent2;
@@ -251,4 +352,17 @@ private void onChange(ConfigChangeEvent event, String someParam) {
251352
}
252353
}
253354

355+
static class TestApolloChildConfigChangeListener extends TestApolloConfigChangeListenerBean1 {
356+
357+
private ConfigChangeEvent someChangeEvent;
358+
359+
@ApolloConfigChangeListener
360+
private void someOnChange(ConfigChangeEvent changeEvent) {
361+
this.someChangeEvent = changeEvent;
362+
}
363+
364+
public ConfigChangeEvent getSomeChangeEvent() {
365+
return someChangeEvent;
366+
}
367+
}
254368
}

0 commit comments

Comments
 (0)