package com.ctrip.framework.apollo.internals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; import java.util.Properties; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import com.ctrip.framework.apollo.core.ConfigConsts; import com.ctrip.framework.apollo.core.enums.ConfigFileFormat; /** * @author Jason Song(song_s@ctrip.com) */ @RunWith(MockitoJUnitRunner.class) public class JsonConfigFileTest { private String someNamespace; @Mock private ConfigRepository configRepository; @Before public void setUp() throws Exception { someNamespace = "someName"; } @Test public void testWhenHasContent() throws Exception { Properties someProperties = new Properties(); String key = ConfigConsts.CONFIG_FILE_CONTENT_KEY; String someValue = "someValue"; someProperties.setProperty(key, someValue); when(configRepository.getConfig()).thenReturn(someProperties); JsonConfigFile configFile = new JsonConfigFile(someNamespace, configRepository); assertEquals(ConfigFileFormat.JSON, configFile.getConfigFileFormat()); assertEquals(someNamespace, configFile.getNamespace()); assertTrue(configFile.hasContent()); assertEquals(someValue, configFile.getContent()); } @Test public void testWhenHasNoContent() throws Exception { when(configRepository.getConfig()).thenReturn(null); JsonConfigFile configFile = new JsonConfigFile(someNamespace, configRepository); assertFalse(configFile.hasContent()); assertNull(configFile.getContent()); } @Test public void testWhenConfigRepositoryHasError() throws Exception { when(configRepository.getConfig()).thenThrow(new RuntimeException("someError")); JsonConfigFile configFile = new JsonConfigFile(someNamespace, configRepository); assertFalse(configFile.hasContent()); assertNull(configFile.getContent()); } @Test public void testOnRepositoryChange() throws Exception { Properties someProperties = new Properties(); String key = ConfigConsts.CONFIG_FILE_CONTENT_KEY; String someValue = "someValue"; String anotherValue = "anotherValue"; someProperties.setProperty(key, someValue); when(configRepository.getConfig()).thenReturn(someProperties); JsonConfigFile configFile = new JsonConfigFile(someNamespace, configRepository); assertEquals(someValue, configFile.getContent()); Properties anotherProperties = new Properties(); anotherProperties.setProperty(key, anotherValue); configFile.onRepositoryChange(someNamespace, anotherProperties); assertEquals(anotherValue, configFile.getContent()); } @Test public void testWhenConfigRepositoryHasErrorAndThenRecovered() throws Exception { Properties someProperties = new Properties(); String key = ConfigConsts.CONFIG_FILE_CONTENT_KEY; String someValue = "someValue"; someProperties.setProperty(key, someValue); when(configRepository.getConfig()).thenThrow(new RuntimeException("someError")); JsonConfigFile configFile = new JsonConfigFile(someNamespace, configRepository); assertFalse(configFile.hasContent()); assertNull(configFile.getContent()); configFile.onRepositoryChange(someNamespace, someProperties); assertTrue(configFile.hasContent()); assertEquals(someValue, configFile.getContent()); } }