package com.ctrip.framework.apollo.internals; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import java.util.Properties; import java.util.Set; import org.junit.Before; import org.junit.Test; import com.ctrip.framework.apollo.Config; import com.ctrip.framework.apollo.ConfigFile; import com.ctrip.framework.apollo.build.MockInjector; import com.ctrip.framework.apollo.core.enums.ConfigFileFormat; import com.ctrip.framework.apollo.spi.ConfigFactory; import com.ctrip.framework.apollo.spi.ConfigFactoryManager; import com.ctrip.framework.apollo.util.ConfigUtil; /** * @author Jason Song(song_s@ctrip.com) */ public class DefaultConfigManagerTest { private DefaultConfigManager defaultConfigManager; private static String someConfigContent; @Before public void setUp() throws Exception { MockInjector.reset(); MockInjector.setInstance(ConfigFactoryManager.class, new MockConfigFactoryManager()); MockInjector.setInstance(ConfigUtil.class, new ConfigUtil()); defaultConfigManager = new DefaultConfigManager(); someConfigContent = "someContent"; } @Test public void testGetConfig() throws Exception { String someNamespace = "someName"; String anotherNamespace = "anotherName"; String someKey = "someKey"; Config config = defaultConfigManager.getConfig(someNamespace); Config anotherConfig = defaultConfigManager.getConfig(anotherNamespace); assertEquals(someNamespace + ":" + someKey, config.getProperty(someKey, null)); assertEquals(anotherNamespace + ":" + someKey, anotherConfig.getProperty(someKey, null)); } @Test public void testGetConfigMultipleTimesWithSameNamespace() throws Exception { String someNamespace = "someName"; Config config = defaultConfigManager.getConfig(someNamespace); Config anotherConfig = defaultConfigManager.getConfig(someNamespace); assertThat( "Get config multiple times with the same namespace should return the same config instance", config, equalTo(anotherConfig)); } @Test public void testGetConfigFile() throws Exception { String someNamespace = "someName"; ConfigFileFormat someConfigFileFormat = ConfigFileFormat.Properties; ConfigFile configFile = defaultConfigManager.getConfigFile(someNamespace, someConfigFileFormat); assertEquals(someConfigFileFormat, configFile.getConfigFileFormat()); assertEquals(someConfigContent, configFile.getContent()); } @Test public void testGetConfigFileMultipleTimesWithSameNamespace() throws Exception { String someNamespace = "someName"; ConfigFileFormat someConfigFileFormat = ConfigFileFormat.Properties; ConfigFile someConfigFile = defaultConfigManager.getConfigFile(someNamespace, someConfigFileFormat); ConfigFile anotherConfigFile = defaultConfigManager.getConfigFile(someNamespace, someConfigFileFormat); assertThat( "Get config file multiple times with the same namespace should return the same config file instance", someConfigFile, equalTo(anotherConfigFile)); } public static class MockConfigFactoryManager implements ConfigFactoryManager { @Override public ConfigFactory getFactory(String namespace) { return new ConfigFactory() { @Override public Config create(final String namespace) { return new AbstractConfig() { @Override public String getProperty(String key, String defaultValue) { return namespace + ":" + key; } @Override public Set<String> getPropertyNames() { return null; } }; } @Override public ConfigFile createConfigFile(String namespace, final ConfigFileFormat configFileFormat) { ConfigRepository someConfigRepository = mock(ConfigRepository.class); return new AbstractConfigFile(namespace, someConfigRepository) { @Override protected void update(Properties newProperties) { } @Override public String getContent() { return someConfigContent; } @Override public boolean hasContent() { return true; } @Override public ConfigFileFormat getConfigFileFormat() { return configFileFormat; } }; } }; } } }