package me.dinowernli.grpc.polyglot.config; import java.nio.file.Paths; import java.util.Optional; import com.google.common.collect.ImmutableList; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import polyglot.ConfigProto.Configuration; import polyglot.ConfigProto.ConfigurationSet; import polyglot.ConfigProto.OutputConfiguration.Destination; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.when; /** Unit tests for {@link ConfigurationLoader}. */ public class ConfigurationLoaderTest { @Rule public TemporaryFolder tempDirectory = new TemporaryFolder(); @Rule public MockitoRule mockitoJunitRule = MockitoJUnit.rule(); @Mock private CommandLineArgs mockOverrides; private String storedHomeProperty; @Before public void setUp() { storedHomeProperty = System.getProperty("user.home"); System.setProperty("user.home", tempDirectory.getRoot().getAbsolutePath()); } @After public void tearDown() { System.setProperty("user.home", storedHomeProperty); } @Test public void loadsDefaultConfig() { Configuration defaultConfig = ConfigurationLoader.forDefaultConfigSet().getDefaultConfiguration(); assertThat(defaultConfig).isEqualTo(Configuration.getDefaultInstance()); assertThat(defaultConfig.getCallConfig().getUseTls()).isFalse(); assertThat(defaultConfig.getOutputConfig().getDestination()).isEqualTo(Destination.STDOUT); } @Test(expected = IllegalStateException.class) public void throwsIfAskedToLoadNamedFromDefaultSet() { ConfigurationLoader.forDefaultConfigSet().getNamedConfiguration("asdf"); } @Test(expected = IllegalArgumentException.class) public void throwsIfNamedConfigMissing() { ConfigurationLoader.forConfigSet(ConfigurationSet.getDefaultInstance()) .getNamedConfiguration("asfd"); } @Test public void loadsNamedConfig() { ConfigurationLoader loader = ConfigurationLoader.forConfigSet(ConfigurationSet.newBuilder() .addConfigurations(namedConfig("foo")) .addConfigurations(namedConfig("bar")) .build()); assertThat(loader.getNamedConfiguration("foo").getName()).isEqualTo("foo"); } @Test public void appliesOverrides() { when(mockOverrides.useTls()).thenReturn(Optional.of(true)); when(mockOverrides.outputFilePath()).thenReturn(Optional.of(Paths.get("asdf"))); when(mockOverrides.additionalProtocIncludes()).thenReturn(ImmutableList.of(Paths.get("."))); when(mockOverrides.protoDiscoveryRoot()).thenReturn(Optional.of(Paths.get("."))); when(mockOverrides.getRpcDeadlineMs()).thenReturn(Optional.of(25)); when(mockOverrides.tlsCaCertPath()).thenReturn(Optional.of(Paths.get("asdf"))); Configuration config = ConfigurationLoader .forDefaultConfigSet() .withOverrides(mockOverrides) .getDefaultConfiguration(); assertThat(config.getCallConfig().getUseTls()).isTrue(); assertThat(config.getOutputConfig().getDestination()).isEqualTo(Destination.FILE); assertThat(config.getCallConfig().getDeadlineMs()).isEqualTo(25); assertThat(config.getCallConfig().getTlsCaCertPath()).isNotEmpty(); } private static Configuration namedConfig(String name) { return Configuration.newBuilder() .setName(name) .build(); } }