Skip to content

Commit

Permalink
Add UT to cover loading properties from file
Browse files Browse the repository at this point in the history
  • Loading branch information
jerryshao committed May 29, 2023
1 parent dc23f36 commit 01266cd
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 7 deletions.
7 changes: 5 additions & 2 deletions core/src/main/java/com/datastrato/graviton/Config.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.datastrato.graviton;

import com.datastrato.graviton.config.ConfigEntry;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Maps;
import java.io.File;
import java.io.IOException;
Expand Down Expand Up @@ -95,11 +96,13 @@ private void loadFromMap(Map<String, String> map) {
});
}

private void loadFromProperties(Properties properties) {
@VisibleForTesting
void loadFromProperties(Properties properties) {
loadFromMap(Maps.fromProperties(properties));
}

private Properties loadPropertiesFromFile(File file) throws IOException {
@VisibleForTesting
Properties loadPropertiesFromFile(File file) throws IOException {
Properties properties = new Properties();
try (InputStream in = Files.newInputStream(file.toPath())) {
properties.load(in);
Expand Down
49 changes: 44 additions & 5 deletions core/src/test/java/com/datastrato/graviton/TestConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

import com.datastrato.graviton.config.ConfigBuilder;
import com.datastrato.graviton.config.ConfigEntry;
import java.io.File;
import java.io.FileOutputStream;
import java.nio.file.Files;
import java.util.NoSuchElementException;
import java.util.Optional;
import java.util.Properties;
Expand All @@ -22,22 +25,21 @@ public DummyConfig() {
}
}

private final Properties props = System.getProperties();
private final Properties props = new Properties();

@BeforeEach
public void setUp() {
props.setProperty("test", "test");
props.setProperty("graviton.test.test-string", "test-string");
props.setProperty("graviton.test.test-int", " 1 ");
props.setProperty("graviton.test.test-boolean", "true");

props.forEach((k, v) -> System.setProperty((String) k, (String) v));
}

@AfterEach
public void tearDown() {
props.remove("test");
props.remove("graviton.test.test-string");
props.remove("graviton.test.test-int");
props.remove("graviton.test.test-boolean");
props.forEach((k, v) -> System.clearProperty((String) k));
}

@Test
Expand All @@ -64,6 +66,43 @@ public void testLoadProperties() {
Assertions.assertEquals(Optional.of(1), intValue);
}

@Test
public void testLoadFormFile() throws Exception {
FileOutputStream fos = null;
try {
File propsFile = Files.createTempFile("tmp_test", ".properties").toFile();
fos = new FileOutputStream(propsFile);
props.store(fos, "test");

ConfigEntry<String> stringConf =
new ConfigBuilder("test").stringConf().createWithDefault("test-default");
ConfigEntry<Integer> intConf = new ConfigBuilder("graviton.test.test-int").intConf();
ConfigEntry<Boolean> booleanConf =
new ConfigBuilder("graviton.test.test-boolean").booleanConf();

// Do not load default system properties, loading from file.
DummyConfig config = new DummyConfig(false);
config.loadFromProperties(config.loadPropertiesFromFile(propsFile));

// Config "stringConf" will not load into Config, so it will return the value from the file
String value = config.get(stringConf);
Assertions.assertEquals("test-default", value);

// Config "intConf" will load into Config, so it will return the value from the file
Integer intValue = config.get(intConf);
Assertions.assertEquals(1, intValue);

// Config "booleanConf" will load into Config, so it will return the value from the file
Boolean booleanValue = config.get(booleanConf);
Assertions.assertEquals(true, booleanValue);
} finally {
if (fos != null) {
fos.close();
fos = null;
}
}
}

@Test
public void testGetAndSet() {
ConfigEntry<Optional<Integer>> intConf =
Expand Down

0 comments on commit 01266cd

Please sign in to comment.