blob: 085ddb64a852d563ca37d5819957d3a64a38cdaf [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.pulsar.config.validation;
import org.testng.annotations.Test;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.expectThrows;
public class ConfigValidationTest {
private final List<String> testStringList = Arrays.asList(new String[]{"foo", "bar"});
private final List<Integer> testIntegerList = Arrays.asList(new Integer[]{0, 1});
private final Map testStringIntegerMap = new HashMap<String, Integer>() {
{
put("one", 1);
put("two", 2);
}
};
private final Map testStringStringMap = new HashMap<String, String>() {
{
put("one", "one");
put("two", "two");
}
};
private final String topic = "persistent://public/default/topic";
public static class TestValidator extends Validator {
@Override
public void validateField(String name, Object o) {
if (o instanceof String) {
String value = (String)o;
if (!value.startsWith("ABCDE")) {
throw new IllegalArgumentException(String.format("Field %s does not start with ABCDE", name));
}
} else {
throw new IllegalArgumentException(String.format("Field %s is not a string", name));
}
}
}
class TestConfig {
@ConfigValidationAnnotations.NotNull
public String stringValue;
@ConfigValidationAnnotations.PositiveNumber
public Integer positiveNumber;
@ConfigValidationAnnotations.List(type = Integer.class)
public List integerList;
@ConfigValidationAnnotations.Map(keyType = String.class, valueType = Integer.class)
public Map stringIntegerMap;
@ConfigValidationAnnotations.StringList
public List stringList;
@ConfigValidationAnnotations.CustomType(validatorClass = TestValidator.class)
public String customString;
}
@Test
public void testGoodConfig() {
TestConfig testConfig = createGoodConfig();
ConfigValidation.validateConfig(testConfig);
}
@Test
public void testNotNull() {
TestConfig testConfig = createGoodConfig();
testConfig.stringValue = null;
Exception e = expectThrows(IllegalArgumentException.class, () -> ConfigValidation.validateConfig(testConfig));
assertTrue(e.getMessage().contains("stringValue"));
}
@Test
public void testPositiveNumber() {
TestConfig testConfig = createGoodConfig();
testConfig.positiveNumber = -2;
Exception e = expectThrows(IllegalArgumentException.class, () -> ConfigValidation.validateConfig(testConfig));
assertTrue(e.getMessage().contains("positiveNumber"));
}
@Test
public void testListEntry() {
TestConfig testConfig = createGoodConfig();
testConfig.integerList = testStringList;
Exception e = expectThrows(IllegalArgumentException.class, () -> ConfigValidation.validateConfig(testConfig));
assertTrue(e.getMessage().contains("integerList"));
}
@Test
public void testMapEntry() {
TestConfig testConfig = createGoodConfig();
testConfig.stringIntegerMap = testStringStringMap;
Exception e = expectThrows(IllegalArgumentException.class, () -> ConfigValidation.validateConfig(testConfig));
assertTrue(e.getMessage().contains("stringIntegerMap"));
}
@Test
public void testStringList() {
TestConfig testConfig = createGoodConfig();
testConfig.stringList = testIntegerList;
Exception e = expectThrows(IllegalArgumentException.class, () -> ConfigValidation.validateConfig(testConfig));
assertTrue(e.getMessage().contains("stringList"));
}
@Test
public void testCustomString() {
TestConfig testConfig = createGoodConfig();
testConfig.customString = "http://google.com";
Exception e = expectThrows(IllegalArgumentException.class, () -> ConfigValidation.validateConfig(testConfig));
assertTrue(e.getMessage().contains("customString"));
}
private TestConfig createGoodConfig() {
TestConfig testConfig = new TestConfig();
testConfig.stringValue = "string";
testConfig.positiveNumber = 20;
testConfig.integerList = testIntegerList;
testConfig.stringIntegerMap = testStringIntegerMap;
testConfig.stringList = testStringList;
testConfig.customString = "ABCDEabcde";
return testConfig;
}
}