blob: 4f030ab9438b8460e1617f02a609727b63c8f939 [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 static org.testng.Assert.assertThrows;
import org.testng.annotations.Test;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
public class ValidatorImplsTest {
@Test
public void testPositiveNumberValidator() {
// test default
ValidatorImpls.PositiveNumberValidator defaultValidator = new ValidatorImpls.PositiveNumberValidator();
defaultValidator.validateField("don'tcare", 2);
assertThrows(IllegalArgumentException.class, () -> defaultValidator.validateField("field", 0));
assertThrows(IllegalArgumentException.class, () -> defaultValidator.validateField("field", -20));
// test with valid config
Map<String, Object> config = new HashMap<>();
config.put(ConfigValidationAnnotations.ValidatorParams.INCLUDE_ZERO, true);
ValidatorImpls.PositiveNumberValidator validator = new ValidatorImpls.PositiveNumberValidator(config);
validator.validateField("don'tcare", 2);
validator.validateField("field", 0);
assertThrows(IllegalArgumentException.class, () -> validator.validateField("field", -20));
config.clear();
config.put(ConfigValidationAnnotations.ValidatorParams.INCLUDE_ZERO, false);
ValidatorImpls.PositiveNumberValidator validator1 = new ValidatorImpls.PositiveNumberValidator(config);
validator1.validateField("don'tcare", 2);
assertThrows(IllegalArgumentException.class, () -> validator1.validateField("field", 0));
assertThrows(IllegalArgumentException.class, () -> validator1.validateField("field", -20));
}
@Test
public void testNotNullValidator() {
ValidatorImpls.NotNullValidator validator = new ValidatorImpls.NotNullValidator();
validator.validateField("fieldname", 2);
validator.validateField("fieldname", "Something");
assertThrows(IllegalArgumentException.class, () -> validator.validateField("field", null));
}
@Test
public void testListEntryTypeValidator() {
Map<String, Object> config = new HashMap<>();
config.put(ConfigValidationAnnotations.ValidatorParams.TYPE, String.class);
ValidatorImpls.ListEntryTypeValidator validator = new ValidatorImpls.ListEntryTypeValidator(config);
List<String> goodList = new LinkedList<>();
goodList.add("first");
goodList.add("second");
validator.validateField("fieldname", goodList);
List<Boolean> badList = new LinkedList<>();
badList.add(true);
badList.add(false);
assertThrows(IllegalArgumentException.class, () -> validator.validateField("fieldname", badList));
List<Object> mixedList = new LinkedList<>();
mixedList.add(true);
mixedList.add("false");
assertThrows(IllegalArgumentException.class, () -> validator.validateField("fieldname", mixedList));
}
@Test
public void testMapEntryTypeValidator() {
Map<String, Object> config = new HashMap<>();
config.put(ConfigValidationAnnotations.ValidatorParams.KEY_TYPE, String.class);
config.put(ConfigValidationAnnotations.ValidatorParams.VALUE_TYPE, Integer.class);
ValidatorImpls.MapEntryTypeValidator validator = new ValidatorImpls.MapEntryTypeValidator(config);
Map<String, Integer> goodMap = new HashMap<>();
goodMap.put("first", 1);
goodMap.put("second", 2);
validator.validateField("fieldname", goodMap);
Map<String, Boolean> badKeyMap = new HashMap<>();
badKeyMap.put("first", true);
badKeyMap.put("second", false);
assertThrows(IllegalArgumentException.class, () -> validator.validateField("fieldname", badKeyMap));
Map<Integer, Integer> badValueMap = new HashMap<>();
badValueMap.put(1, 1);
badValueMap.put(2, 2);
assertThrows(IllegalArgumentException.class, () -> validator.validateField("fieldname", badValueMap));
}
@Test
public void testImplementsClassValidator() {
Map<String, Object> config = new HashMap<>();
config.put(ConfigValidationAnnotations.ValidatorParams.IMPLEMENTS_CLASS, SocketAddress.class);
ValidatorImpls.ImplementsClassValidator validator = new ValidatorImpls.ImplementsClassValidator(config);
validator.validateField("fieldname", SocketAddress.class.getName());
validator.validateField("fieldname", InetSocketAddress.class.getName());
assertThrows(IllegalArgumentException.class, () -> validator.validateField("fieldname", String.class.getName()));
}
@Test
public void testImplementsClassesValidator() {
Map<String, Object> config = new HashMap<>();
Class<?> clazzes [] = new Class<?>[] {String.class, Integer.class};
config.put(ConfigValidationAnnotations.ValidatorParams.IMPLEMENTS_CLASSES, clazzes);
ValidatorImpls.ImplementsClassesValidator validator = new ValidatorImpls.ImplementsClassesValidator(config);
validator.validateField("fieldname", String.class.getName());
validator.validateField("fieldname", Integer.class.getName());
assertThrows(IllegalArgumentException.class, () -> validator.validateField("fieldname", Boolean.class.getName()));
}
@Test
public void testStringValidator() {
Map<String, Object> config = new HashMap<>();
String accepted [] = new String[] {"good", "bad", "ugly"};
config.put(ConfigValidationAnnotations.ValidatorParams.ACCEPTED_VALUES, accepted);
ValidatorImpls.StringValidator validator = new ValidatorImpls.StringValidator(config);
validator.validateField("fieldname", "good");
validator.validateField("fieldname", "bad");
validator.validateField("fieldname", "ugly");
assertThrows(IllegalArgumentException.class, () -> validator.validateField("fieldname", "beautiful"));
}
@Test
public void testSimpleTypeValidator() {
Map<String, Object> config = new HashMap<>();
config.put(ConfigValidationAnnotations.ValidatorParams.TYPE, Integer.class);
ValidatorImpls.SimpleTypeValidator validator = new ValidatorImpls.SimpleTypeValidator(config);
validator.validateField("fieldname", 22);
assertThrows(IllegalArgumentException.class, () -> validator.validateField("fieldname", "string"));
}
}