blob: 17e44cf20fd6e2276c259526ebd40e7798b05a48 [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.tuweni.config;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.Arrays;
import java.util.List;
import org.junit.jupiter.api.Test;
class PropertyValidatorTest {
@Test
void combinedValidatorEvaluatesBoth() {
PropertyValidator<Integer> combined =
PropertyValidator.combine(PropertyValidator.isPresent(), PropertyValidator.inRange(1, 5));
assertTrue(combined.validate("foo", null, 2).isEmpty());
List<ConfigurationError> whenNull = combined.validate("foo", null, null);
assertEquals(1, whenNull.size());
assertTrue(whenNull.get(0).getMessage().contains("is missing"));
List<ConfigurationError> whenOutOfRange = combined.validate("foo", null, 10);
assertEquals(1, whenOutOfRange.size());
assertTrue(whenOutOfRange.get(0).getMessage().contains("is outside range"));
}
@Test
void validatesAllElementsInList() {
PropertyValidator<List<Integer>> allInList = PropertyValidator.allInList(PropertyValidator.inRange(1, 5));
assertTrue(allInList.validate("foo", null, Arrays.asList(1, 2, 3, 4)).isEmpty());
List<ConfigurationError> oneError = allInList.validate("foo", null, Arrays.asList(1, 10, 3, 4));
assertEquals(1, oneError.size());
assertTrue(oneError.get(0).getMessage().contains("is outside range"));
List<ConfigurationError> twoErrors = allInList.validate("foo", null, Arrays.asList(1, 10, 30, 4));
assertEquals(2, twoErrors.size());
assertTrue(twoErrors.get(0).getMessage().contains("is outside range"));
assertTrue(twoErrors.get(1).getMessage().contains("is outside range"));
}
@Test
void validatesURLs() {
PropertyValidator<String> urlValidator = PropertyValidator.isURL();
assertTrue(urlValidator.validate("foo", null, "http://127.0.0.1:5678/bar").isEmpty());
List<ConfigurationError> errors = urlValidator.validate("foo", null, "abcdefg");
assertEquals(1, errors.size());
assertTrue(errors.get(0).getMessage().contains("not a valid URL"));
}
@Test
void validatesInSet() {
PropertyValidator<String> inSetValidator = PropertyValidator.anyOf("one", "two", "three ");
assertTrue(inSetValidator.validate("foo", null, "one").isEmpty());
assertTrue(inSetValidator.validate("foo", null, "two").isEmpty());
assertTrue(inSetValidator.validate("foo", null, "three ").isEmpty());
assertEquals(1, inSetValidator.validate("foo", null, "three").size());
List<ConfigurationError> errors = inSetValidator.validate("foo", null, "foobar");
assertEquals(1, errors.size());
assertEquals("Value of property 'foo' should be \"one\", \"two\", or \"three \"", errors.get(0).getMessage());
}
@Test
void validatesInSetIgnoreCase() {
PropertyValidator<String> inSetValidator = PropertyValidator.anyOfIgnoreCase("one", "two", "three ");
assertTrue(inSetValidator.validate("foo", null, "OnE").isEmpty());
assertTrue(inSetValidator.validate("foo", null, "TWo").isEmpty());
assertTrue(inSetValidator.validate("foo", null, "THree ").isEmpty());
assertEquals(1, inSetValidator.validate("foo", null, "three").size());
List<ConfigurationError> errors = inSetValidator.validate("foo", null, "foobar");
assertEquals(1, errors.size());
assertEquals("Value of property 'foo' should be \"one\", \"two\", or \"three \"", errors.get(0).getMessage());
}
}