package org.embulk.config;
import org.junit.Rule;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import com.google.inject.Inject;
import org.embulk.spi.Exec;
import org.embulk.EmbulkTestRuntime;
public class TestConfigSource
{
@Rule
public EmbulkTestRuntime runtime = new EmbulkTestRuntime();
private ConfigSource config;
@Before
public void setup() throws Exception
{
config = Exec.newConfigSource();
}
private static interface TypeFields
extends Task
{
@Config("boolean")
public boolean getBoolean();
@Config("double")
public double getDouble();
@Config("int")
public int getInt();
@Config("long")
public long getLong();
@Config("string")
public String getString();
}
@Test
public void testSetGet()
{
config.set("boolean", true);
config.set("int", 3);
config.set("double", 0.2);
config.set("long", Long.MAX_VALUE);
config.set("string", "sf");
assertEquals(true, (boolean) config.get(boolean.class, "boolean"));
assertEquals(3, (int) config.get(int.class, "int"));
assertEquals(0.2, (double) config.get(double.class, "double"), 0.001);
assertEquals(Long.MAX_VALUE, (long) config.get(long.class, "long"));
assertEquals("sf", config.get(String.class, "string"));
}
@Test
public void testLoadConfig()
{
config.set("boolean", true);
config.set("int", 3);
config.set("double", 0.2);
config.set("long", Long.MAX_VALUE);
config.set("string", "sf");
TypeFields task = config.loadConfig(TypeFields.class);
assertEquals(true, task.getBoolean());
assertEquals(3, task.getInt());
assertEquals(0.2, task.getDouble(), 0.001);
assertEquals(Long.MAX_VALUE, task.getLong());
assertEquals("sf", task.getString());
}
private static interface ValidateFields
extends Task
{
@Config("valid")
public String getValid();
}
@Test
public void testValidatePasses()
{
config.set("valid", "data");
ValidateFields task = config.loadConfig(ValidateFields.class);
task.validate();
assertEquals("data", task.getValid());
}
@Test(expected = ConfigException.class)
public void testDefaultValueValidateFails()
{
ValidateFields task = config.loadConfig(ValidateFields.class);
task.validate();
}
// TODO test Min, Max, and other validations
private static interface SimpleFields
extends Task
{
@Config("type")
public String getType();
}
@Test
public void testFromJson()
{
String json = "{\"type\":\"test\"}";
// TODO
}
}