/*
* Copyright (C) 2015 SoftIndex LLC.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.datakernel.config;
import io.datakernel.eventloop.InetAddressRange;
import org.junit.Test;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.util.List;
import static io.datakernel.config.Config.ROOT;
import static io.datakernel.config.ConfigConverters.*;
import static java.util.Arrays.asList;
import static org.junit.Assert.*;
public class ConfigConvertersTest {
@Test
public void testBooleanConverter() {
String inputString1 = "true";
String inputString2 = "false";
Config config1 = Config.create();
config1.set(inputString1);
Config config2 = Config.create();
config2.set(inputString2);
assertTrue(config1.get(ofBoolean(), ROOT));
assertFalse(config2.get(ofBoolean(), ROOT));
}
@Test
public void testIntegerConverter() {
String inputString1 = "1";
String inputString2 = "-5";
String inputString3 = "100";
Config root = Config.create();
root.set("key1", inputString1);
root.set("key2", inputString2);
root.set("key3", inputString3);
assertEquals(1, (int) root.get(ofInteger(), "key1"));
assertEquals(-5, (int) root.get(ofInteger(), "key2"));
assertEquals(100, (int) root.get(ofInteger(), "key3"));
}
@Test
public void testLongConverter() {
String inputString1 = "1";
String inputString2 = "-5";
String inputString3 = "100";
Config root = Config.create();
root.set("key1", inputString1);
root.set("key2", inputString2);
root.set("key3", inputString3);
assertEquals(1L, (long) root.get(ofLong(), "key1"));
assertEquals(-5L, (long) root.get(ofLong(), "key2"));
assertEquals(100L, (long) root.get(ofLong(), "key3"));
}
@Test
public void testEnumConverter() {
ConfigConverter<Color> enumConverter = ConfigConverters.ofEnum(Color.class);
String inputString1 = "RED";
String inputString2 = "GREEN";
String inputString3 = "BLUE";
Config root = Config.create();
root.set("key1", inputString1);
root.set("key2", inputString2);
root.set("key3", inputString3);
assertEquals(Color.RED, root.get(enumConverter, "key1"));
assertEquals(Color.GREEN, root.get(enumConverter, "key2"));
assertEquals(Color.BLUE, root.get(enumConverter, "key3"));
}
private enum Color {
RED, GREEN, BLUE
}
@Test
public void testStringConverter() {
ConfigConverter<String> stringConverter = ConfigConverters.ofString();
String inputString1 = "data1";
String inputString2 = "data2";
String inputString3 = "data3";
Config root = Config.create();
root.set("key1", inputString1);
root.set("key2", inputString2);
root.set("key3", inputString3);
assertEquals(inputString1, root.get(stringConverter, "key1"));
assertEquals(inputString2, root.get(stringConverter, "key2"));
assertEquals(inputString3, root.get(stringConverter, "key3"));
}
@Test
public void testDoubleConverter() {
ConfigConverter<Double> doubleConverter = ConfigConverters.ofDouble();
String inputString1 = "0.001";
String inputString2 = "1e5";
String inputString3 = "-23.1";
Config root = Config.create();
root.set("key1", inputString1);
root.set("key2", inputString2);
root.set("key3", inputString3);
double acceptableError = 1e-10;
assertEquals(0.001, doubleConverter.get(root.getChild("key1")), acceptableError);
assertEquals(1e5, doubleConverter.get(root.getChild("key2")), acceptableError);
assertEquals(-23.1, doubleConverter.get(root.getChild("key3")), acceptableError);
}
@Test
public void testInetAddressConverter() throws UnknownHostException {
ConfigConverter<InetSocketAddress> inetSocketAddressConverter = ConfigConverters.ofInetSocketAddress();
String inputString1 = "192.168.1.1:80";
String inputString2 = "250.200.100.50:10000";
String inputString3 = "1.0.0.0:65000";
Config root = Config.create();
root.set("key1", inputString1);
root.set("key2", inputString2);
root.set("key3", inputString3);
InetSocketAddress address1 = new InetSocketAddress(InetAddress.getByName("192.168.1.1"), 80);
InetSocketAddress address2 = new InetSocketAddress(InetAddress.getByName("250.200.100.50"), 10000);
InetSocketAddress address3 = new InetSocketAddress(InetAddress.getByName("1.0.0.0"), 65000);
assertEquals(address1, inetSocketAddressConverter.get(root.getChild("key1")));
assertEquals(address2, inetSocketAddressConverter.get(root.getChild("key2")));
assertEquals(address3, inetSocketAddressConverter.get(root.getChild("key3")));
}
@Test
public void testListConverter() {
ConfigConverter<List<Integer>> listConverter = ConfigConverters.ofList(ConfigConverters.ofInteger(), ",");
String inputData = "1, 5, 10 ";
Config root = Config.create();
root.set("key1", inputData);
List<Integer> expected = asList(1, 5, 10);
assertEquals(expected, listConverter.get(root.getChild("key1")));
}
@Test
public void testInetAddressRange() throws Exception {
ConfigConverter<InetAddressRange> rangeConverter = ConfigConverters.ofInetAddressRange();
String inputData = "192.168.0.0/16";
Config root = Config.create();
root.set("key1", inputData);
InetAddressRange expected = InetAddressRange.fromRange(
(Inet4Address) InetAddress.getByName("192.168.0.0"),
(Inet4Address) InetAddress.getByName("192.168.255.255")
);
assertEquals(expected, rangeConverter.get(root.getChild("key1")));
}
}