2 * Copyright © 2016-2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 * Modifications Copyright (c) 2019 Samsung
20 package org.onap.config;
22 import static java.util.stream.Collectors.toList;
23 import static org.junit.Assert.assertArrayEquals;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNull;
26 import static org.junit.Assert.assertNotNull;
27 import static org.junit.Assert.assertTrue;
28 import static org.junit.Assert.assertFalse;
31 import java.io.IOException;
32 import java.lang.reflect.Array;
33 import java.lang.reflect.Field;
34 import java.nio.file.Path;
35 import java.nio.file.Paths;
36 import java.util.ArrayDeque;
37 import java.util.ArrayList;
38 import java.util.Arrays;
39 import java.util.Collection;
40 import java.util.Collections;
41 import java.util.Deque;
42 import java.util.HashMap;
43 import java.util.HashSet;
44 import java.util.List;
46 import java.util.Queue;
48 import java.util.SortedSet;
49 import java.util.TreeSet;
50 import java.util.concurrent.BlockingQueue;
51 import java.util.concurrent.ConcurrentLinkedQueue;
52 import java.util.concurrent.LinkedBlockingQueue;
53 import java.util.concurrent.LinkedTransferQueue;
54 import java.util.concurrent.TransferQueue;
55 import java.util.stream.Collectors;
56 import java.util.stream.IntStream;
57 import java.util.stream.Stream;
59 import org.apache.commons.configuration2.BaseConfiguration;
60 import org.apache.commons.configuration2.CompositeConfiguration;
61 import org.apache.commons.configuration2.Configuration;
62 import org.apache.commons.configuration2.PropertiesConfiguration;
63 import org.junit.Test;
64 import org.onap.config.util.TestUtil;
65 import org.onap.config.api.Hint;
66 import org.onap.config.impl.ConfigurationRepository;
68 public class ConfigurationUtilsTest {
70 public static final String TMP_DIR_PREFIX = "sdc-testing-";
71 private static final String TEST_NAME_SPACE = "testNameSpaceOne";
72 private static final String TEST_COMPOSITE_NAMESPACE = "testCOmpositeConfig";
75 public void testCommaList() {
76 List<?> list = Arrays.asList("1", "2", 3);
77 String commaSeparatedList = ConfigurationUtils.getCommaSeparatedList(list);
78 list.forEach(o -> assertTrue(commaSeparatedList.contains(o.toString())));
82 public void testCommaListWithNullAndEmptyStrings() {
83 List<String> list = Arrays.asList(null, "", " ");
84 String commaSeparatedList = ConfigurationUtils.getCommaSeparatedList(list);
85 assertTrue(commaSeparatedList.isEmpty());
89 public void testGetArrayClassFunction() {
90 assertEquals(String[].class, ConfigurationUtils.getArrayClass(String.class));
91 assertNull(ConfigurationUtils.getArrayClass(ConfigurationUtilsTest.class));
95 public void testGetCollectionGenericType() throws NoSuchFieldException {
98 public Map<String, String> testParameterizedTypeField;
100 Field field = DummyClass.class.getField("testParameterizedTypeField");
101 assertEquals(String.class, ConfigurationUtils.getCollectionGenericType(field));
105 public void testCastingArray() {
107 final Class<?>[] primitiveType = new Class[]{boolean.class, byte.class,
108 double.class, float.class, int.class, long.class, short.class};
110 for (Class<?> clazz : primitiveType) {
111 Class<?> expectedResultClass = Array.newInstance(clazz, 0).getClass();
112 List<?> defaultCollection = IntStream.range(0, arraySize).mapToObj(i ->
113 ConfigurationUtils.getDefaultFor(clazz)).collect(toList());
115 Object resultArray = ConfigurationUtils.getPrimitiveArray(defaultCollection, clazz);
117 assertNotNull(resultArray);
118 assertFalse(ConfigurationUtils.isZeroLengthArray(expectedResultClass, resultArray));
119 assertNotNull(expectedResultClass.cast(resultArray));
123 @Test(expected = IllegalArgumentException.class)
124 public void testGetCompatibleCollection() {
125 final Map<Class<?>, Class<?>> testClasses = Stream.of(new Class<?>[][]{
126 {BlockingQueue.class, LinkedBlockingQueue.class},
127 {TransferQueue.class, LinkedTransferQueue.class},
128 {Deque.class, ArrayDeque.class},
129 {Queue.class, ConcurrentLinkedQueue.class},
130 {SortedSet.class, TreeSet.class},
131 {Set.class, HashSet.class},
132 {List.class, ArrayList.class}
133 }).collect(Collectors.toMap(data -> data[0], data -> data[1]));
135 testClasses.forEach((entryClass, expResultClass) -> {
136 Class<?> resultClass = ConfigurationUtils.getCompatibleCollectionForAbstractDef(entryClass).getClass();
137 assertEquals(expResultClass, resultClass);
141 ConfigurationUtils.getCompatibleCollectionForAbstractDef(Collection.class);
146 public void testGetPrimitivesArrayZeroLength() {
147 assertArrayEquals(new int[0], (int[]) ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), int.class));
148 assertArrayEquals(new byte[0], (byte[]) ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), byte.class));
149 assertArrayEquals(new short[0], (short[]) ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), short.class));
150 assertArrayEquals(new long[0], (long[]) ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), long.class));
151 assertArrayEquals(new double[0], (double[]) ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), double.class), 0);
152 assertArrayEquals(new float[0], (float[]) ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), float.class), 0);
153 assertArrayEquals(new boolean[0], (boolean[]) ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), boolean.class));
154 assertArrayEquals(new char[0], (char[]) ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), char.class));
155 assertNull(ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), Integer.class));
159 public void testGetWrappersArrayZeroLength() {
160 assertArrayEquals(new Integer[0], (Integer[]) ConfigurationUtils.getWrappersArray(Collections.emptyList(), Integer.class));
161 assertArrayEquals(new Byte[0], (Byte[]) ConfigurationUtils.getWrappersArray(Collections.emptyList(), Byte.class));
162 assertArrayEquals(new Short[0], (Short[]) ConfigurationUtils.getWrappersArray(Collections.emptyList(), Short.class));
163 assertArrayEquals(new Long[0], (Long[]) ConfigurationUtils.getWrappersArray(Collections.emptyList(), Long.class));
164 assertArrayEquals(new Double[0], (Double[]) ConfigurationUtils.getWrappersArray(Collections.emptyList(), Double.class));
165 assertArrayEquals(new Float[0], (Float[]) ConfigurationUtils.getWrappersArray(Collections.emptyList(), Float.class));
166 assertArrayEquals(new Boolean[0], (Boolean[]) ConfigurationUtils.getWrappersArray(Collections.emptyList(), Boolean.class));
167 assertArrayEquals(new Character[0], (Character[]) ConfigurationUtils.getWrappersArray(Collections.emptyList(), Character.class));
168 assertNull(ConfigurationUtils.getWrappersArray(Collections.emptyList(), boolean.class));
172 public void testPrimitivesArrayNonZeroLength() {
173 List<Integer> list = new ArrayList<>();
179 assertArrayEquals(new int[]{1, 2, 3, 4, 5}, (int[]) ConfigurationUtils.getPrimitiveArray(list, int.class));
183 public void testWrappersArrayNonZeroLength() {
184 List<Integer> list = new ArrayList<>();
190 assertArrayEquals(new Integer[]{1, 2, 3, 4, 5}, (Integer[]) ConfigurationUtils.getWrappersArray(list, Integer.class));
194 public void testGetAllFilesRecursiveIncludeAll() throws IOException {
195 Path tmpRoot = TestUtil.createTestDirsStructure(TMP_DIR_PREFIX);
196 Collection<File> allFiles = ConfigurationUtils.getAllFiles(tmpRoot.toFile(), true, false);
197 assertEquals(7, allFiles.size());
198 TestUtil.deleteTestDirsStrucuture(tmpRoot);
202 public void testGetAllFilesRecursiveIncludeDirsOnly() throws IOException {
203 Path tmpRoot = TestUtil.createTestDirsStructure(TMP_DIR_PREFIX);
204 Collection<File> allFiles = ConfigurationUtils.getAllFiles(tmpRoot.toFile(), true, true);
205 assertEquals(3, allFiles.size());
206 TestUtil.deleteTestDirsStrucuture(tmpRoot);
210 public void testGetAllFilesNonRecursiveIncludeAll() throws IOException {
211 Path tmpRoot = TestUtil.createTestDirsStructure(TMP_DIR_PREFIX);
212 Collection<File> allFiles = ConfigurationUtils.getAllFiles(tmpRoot.toFile(), false, false);
213 assertEquals(2, allFiles.size());
214 TestUtil.deleteTestDirsStrucuture(tmpRoot);
218 public void testGetAllFilesNonRecursiveIncludeDirsOnly() throws IOException {
219 Path tmpRoot = TestUtil.createTestDirsStructure(TMP_DIR_PREFIX);
220 Collection<File> allFiles = ConfigurationUtils.getAllFiles(tmpRoot.toFile(), false, true);
221 assertEquals(1, allFiles.size());
222 TestUtil.deleteTestDirsStrucuture(tmpRoot);
226 public void testGetAllFilesEmptyDir() throws IOException {
227 Path tmpRoot = TestUtil.createEmptyTmpDir(TMP_DIR_PREFIX);
228 Collection<File> allFiles = ConfigurationUtils.getAllFiles(tmpRoot.toFile(), true, true);
229 assertEquals(0, allFiles.size());
230 TestUtil.deleteTestDirsStrucuture(tmpRoot);
234 public void testGetAllFilesNonExistentDir() throws IOException {
235 Path nonExistentDir = Paths.get("/tmp/nonexistentdir");
236 Collection<File> allFiles = ConfigurationUtils.getAllFiles(nonExistentDir.toFile(), false, true);
237 assertEquals(0, allFiles.size());
241 public void testGetConfigPropertyBaseConfig() throws Exception {
242 ConfigurationRepository repo = populateTestBaseConfig();
243 Configuration config = repo.getConfigurationFor(Constants.DEFAULT_TENANT, TEST_NAME_SPACE);
244 assertEquals(TEST_NAME_SPACE, ConfigurationUtils.getProperty(config, Constants.NAMESPACE_KEY, Hint.DEFAULT.value()));
248 public void testGetCompositeConfigPropertyDefaultHints() throws Exception {
249 ConfigurationRepository repo = populateTestCompositeConfig();
250 Configuration config = repo.getConfigurationFor(Constants.DEFAULT_TENANT, TEST_COMPOSITE_NAMESPACE);
251 assertEquals(TEST_NAME_SPACE, ConfigurationUtils.getProperty(config, Constants.NAMESPACE_KEY, Hint.DEFAULT.value()));
255 public void testGetCompositeConfigPropertyNodeSpecificHints() throws Exception {
256 ConfigurationRepository repo = populateTestCompositeConfig();
257 Configuration config = repo.getConfigurationFor(Constants.DEFAULT_TENANT, TEST_COMPOSITE_NAMESPACE);
258 assertEquals(TEST_NAME_SPACE, ConfigurationUtils.getProperty(config, Constants.NAMESPACE_KEY, Hint.NODE_SPECIFIC.value()));
262 public void testIsAMap() {
263 assertTrue(ConfigurationUtils.isAMap(HashMap.class));
264 assertFalse(ConfigurationUtils.isAMap(ArrayList.class));
268 public void testIsACollection() {
269 assertTrue(ConfigurationUtils.isACollection(ArrayList.class));
270 assertFalse(ConfigurationUtils.isACollection(HashMap.class));
274 public void testIsAPrimitiveOrWrapper() {
275 assertTrue(ConfigurationUtils.isAPrimitiveOrWrapper(int.class));
276 assertTrue(ConfigurationUtils.isAPrimitiveOrWrapper(Integer.class));
277 assertFalse(ConfigurationUtils.isAPrimitiveOrWrapper(HashMap.class));
281 public void testIsAPrimitivesArray() {
282 assertTrue(ConfigurationUtils.isAPrimitivesArray(int[].class));
283 assertFalse(ConfigurationUtils.isAPrimitivesArray(Integer[].class));
284 assertFalse(ConfigurationUtils.isAPrimitivesArray(HashMap[].class));
288 public void testIsAWrapperArray() {
289 assertTrue(ConfigurationUtils.isAWrappersArray(Integer[].class));
290 assertFalse(ConfigurationUtils.isAWrappersArray(int[].class));
291 assertFalse(ConfigurationUtils.isAWrappersArray(HashMap[].class));
295 public void testIsAPrimitivesOrWrapperArray() {
296 assertTrue(ConfigurationUtils.isAPrimitivesOrWrappersArray(int[].class));
297 assertTrue(ConfigurationUtils.isAPrimitivesOrWrappersArray(Integer[].class));
298 assertFalse(ConfigurationUtils.isAPrimitivesOrWrappersArray(HashMap[].class));
301 private ConfigurationRepository populateTestBaseConfig() {
302 BaseConfiguration inputConfig = new PropertiesConfiguration();
303 inputConfig.setProperty(Constants.NAMESPACE_KEY, TEST_NAME_SPACE);
304 ConfigurationRepository repo = ConfigurationRepository.lookup();
306 repo.populateConfiguration(
307 Constants.DEFAULT_TENANT + Constants.KEY_ELEMENTS_DELIMITER + TEST_NAME_SPACE, inputConfig);
312 private ConfigurationRepository populateTestCompositeConfig() {
313 CompositeConfiguration inputCompositeConfig = new CompositeConfiguration();
314 Configuration inputConfig1 = new BaseConfiguration();
315 Configuration inputConfig2 = new BaseConfiguration();
316 inputConfig1.setProperty(Constants.NAMESPACE_KEY, TEST_NAME_SPACE);
317 inputCompositeConfig.addConfiguration(inputConfig1);
318 inputCompositeConfig.addConfigurationFirst(inputConfig2);
320 ConfigurationRepository repo = ConfigurationRepository.lookup();
321 repo.populateConfiguration(
322 Constants.DEFAULT_TENANT + Constants.KEY_ELEMENTS_DELIMITER + TEST_COMPOSITE_NAMESPACE,