+
+ @Test
+ public void testGetCollectionGenericType() throws NoSuchFieldException {
+
+ class DummyClass {
+ public Map<String, String> testParameterizedTypeField;
+ }
+ Field field = DummyClass.class.getField("testParameterizedTypeField");
+ assertEquals(String.class, ConfigurationUtils.getCollectionGenericType(field));
+ }
+
+ @Test
+ public void testCastingArray() {
+ int arraySize = 2;
+ final Class<?>[] primitiveType = new Class[]{boolean.class, byte.class,
+ double.class, float.class, int.class, long.class, short.class};
+
+ for (Class<?> clazz : primitiveType) {
+ Class<?> expectedResultClass = Array.newInstance(clazz, 0).getClass();
+ List<?> defaultCollection = IntStream.range(0, arraySize).mapToObj(i ->
+ ConfigurationUtils.getDefaultFor(clazz)).collect(toList());
+
+ Object resultArray = ConfigurationUtils.getPrimitiveArray(defaultCollection, clazz);
+
+ assertNotNull(resultArray);
+ assertFalse(ConfigurationUtils.isZeroLengthArray(expectedResultClass, resultArray));
+ assertNotNull(expectedResultClass.cast(resultArray));
+ }
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testGetCompatibleCollection() {
+ final Map<Class<?>, Class<?>> testClasses = Stream.of(new Class<?>[][]{
+ {BlockingQueue.class, LinkedBlockingQueue.class},
+ {TransferQueue.class, LinkedTransferQueue.class},
+ {Deque.class, ArrayDeque.class},
+ {Queue.class, ConcurrentLinkedQueue.class},
+ {SortedSet.class, TreeSet.class},
+ {Set.class, HashSet.class},
+ {List.class, ArrayList.class}
+ }).collect(Collectors.toMap(data -> data[0], data -> data[1]));
+
+ testClasses.forEach((entryClass, expResultClass) -> {
+ Class<?> resultClass = ConfigurationUtils.getCompatibleCollectionForAbstractDef(entryClass).getClass();
+ assertEquals(expResultClass, resultClass);
+ }
+ );
+
+ ConfigurationUtils.getCompatibleCollectionForAbstractDef(Collection.class);
+
+ }
+
+ @Test
+ public void testGetPrimitivesArrayZeroLength() {
+ assertArrayEquals(new int[0], (int[]) ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), int.class));
+ assertArrayEquals(new byte[0], (byte[]) ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), byte.class));
+ assertArrayEquals(new short[0], (short[]) ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), short.class));
+ assertArrayEquals(new long[0], (long[]) ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), long.class));
+ assertArrayEquals(new double[0], (double[]) ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), double.class), 0);
+ assertArrayEquals(new float[0], (float[]) ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), float.class), 0);
+ assertArrayEquals(new boolean[0], (boolean[]) ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), boolean.class));
+ assertArrayEquals(new char[0], (char[]) ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), char.class));
+ assertNull(ConfigurationUtils.getPrimitiveArray(Collections.emptyList(), Integer.class));
+ }
+
+ @Test
+ public void testGetWrappersArrayZeroLength() {
+ assertArrayEquals(new Integer[0], (Integer[]) ConfigurationUtils.getWrappersArray(Collections.emptyList(), Integer.class));
+ assertArrayEquals(new Byte[0], (Byte[]) ConfigurationUtils.getWrappersArray(Collections.emptyList(), Byte.class));
+ assertArrayEquals(new Short[0], (Short[]) ConfigurationUtils.getWrappersArray(Collections.emptyList(), Short.class));
+ assertArrayEquals(new Long[0], (Long[]) ConfigurationUtils.getWrappersArray(Collections.emptyList(), Long.class));
+ assertArrayEquals(new Double[0], (Double[]) ConfigurationUtils.getWrappersArray(Collections.emptyList(), Double.class));
+ assertArrayEquals(new Float[0], (Float[]) ConfigurationUtils.getWrappersArray(Collections.emptyList(), Float.class));
+ assertArrayEquals(new Boolean[0], (Boolean[]) ConfigurationUtils.getWrappersArray(Collections.emptyList(), Boolean.class));
+ assertArrayEquals(new Character[0], (Character[]) ConfigurationUtils.getWrappersArray(Collections.emptyList(), Character.class));
+ assertNull(ConfigurationUtils.getWrappersArray(Collections.emptyList(), boolean.class));
+ }
+
+ @Test
+ public void testPrimitivesArrayNonZeroLength() {
+ List<Integer> list = new ArrayList<>();
+ list.add(1);
+ list.add(2);
+ list.add(3);
+ list.add(4);
+ list.add(5);
+ assertArrayEquals(new int[]{1, 2, 3, 4, 5}, (int[]) ConfigurationUtils.getPrimitiveArray(list, int.class));
+ }
+
+ @Test
+ public void testWrappersArrayNonZeroLength() {
+ List<Integer> list = new ArrayList<>();
+ list.add(1);
+ list.add(2);
+ list.add(3);
+ list.add(4);
+ list.add(5);
+ assertArrayEquals(new Integer[]{1, 2, 3, 4, 5}, (Integer[]) ConfigurationUtils.getWrappersArray(list, Integer.class));
+ }
+
+ @Test
+ public void testGetAllFilesRecursiveIncludeAll() throws IOException {
+ Path tmpRoot = TestUtil.createTestDirsStructure(TMP_DIR_PREFIX);
+ Collection<File> allFiles = ConfigurationUtils.getAllFiles(tmpRoot.toFile(), true, false);
+ assertEquals(7, allFiles.size());
+ TestUtil.deleteTestDirsStrucuture(tmpRoot);
+ }
+
+ @Test
+ public void testGetAllFilesRecursiveIncludeDirsOnly() throws IOException {
+ Path tmpRoot = TestUtil.createTestDirsStructure(TMP_DIR_PREFIX);
+ Collection<File> allFiles = ConfigurationUtils.getAllFiles(tmpRoot.toFile(), true, true);
+ assertEquals(3, allFiles.size());
+ TestUtil.deleteTestDirsStrucuture(tmpRoot);
+ }
+
+ @Test
+ public void testGetAllFilesNonRecursiveIncludeAll() throws IOException {
+ Path tmpRoot = TestUtil.createTestDirsStructure(TMP_DIR_PREFIX);
+ Collection<File> allFiles = ConfigurationUtils.getAllFiles(tmpRoot.toFile(), false, false);
+ assertEquals(2, allFiles.size());
+ TestUtil.deleteTestDirsStrucuture(tmpRoot);
+ }
+
+ @Test
+ public void testGetAllFilesNonRecursiveIncludeDirsOnly() throws IOException {
+ Path tmpRoot = TestUtil.createTestDirsStructure(TMP_DIR_PREFIX);
+ Collection<File> allFiles = ConfigurationUtils.getAllFiles(tmpRoot.toFile(), false, true);
+ assertEquals(1, allFiles.size());
+ TestUtil.deleteTestDirsStrucuture(tmpRoot);
+ }
+
+ @Test
+ public void testGetAllFilesEmptyDir() throws IOException {
+ Path tmpRoot = TestUtil.createEmptyTmpDir(TMP_DIR_PREFIX);
+ Collection<File> allFiles = ConfigurationUtils.getAllFiles(tmpRoot.toFile(), true, true);
+ assertEquals(0, allFiles.size());
+ TestUtil.deleteTestDirsStrucuture(tmpRoot);
+ }
+
+ @Test
+ public void testGetAllFilesNonExistentDir() throws IOException {
+ Path nonExistentDir = Paths.get("/tmp/nonexistentdir");
+ Collection<File> allFiles = ConfigurationUtils.getAllFiles(nonExistentDir.toFile(), false, true);
+ assertEquals(0, allFiles.size());
+ }
+
+ @Test
+ public void testGetConfigPropertyBaseConfig() throws Exception {
+ ConfigurationRepository repo = populateTestBaseConfig();
+ Configuration config = repo.getConfigurationFor(Constants.DEFAULT_TENANT, TEST_NAME_SPACE);
+ assertEquals(TEST_NAME_SPACE, ConfigurationUtils.getProperty(config, Constants.NAMESPACE_KEY, Hint.DEFAULT.value()));
+ }
+
+ @Test
+ public void testGetCompositeConfigPropertyDefaultHints() throws Exception {
+ ConfigurationRepository repo = populateTestCompositeConfig();
+ Configuration config = repo.getConfigurationFor(Constants.DEFAULT_TENANT, TEST_COMPOSITE_NAMESPACE);
+ assertEquals(TEST_NAME_SPACE, ConfigurationUtils.getProperty(config, Constants.NAMESPACE_KEY, Hint.DEFAULT.value()));
+ }
+
+ @Test
+ public void testGetCompositeConfigPropertyNodeSpecificHints() throws Exception {
+ ConfigurationRepository repo = populateTestCompositeConfig();
+ Configuration config = repo.getConfigurationFor(Constants.DEFAULT_TENANT, TEST_COMPOSITE_NAMESPACE);
+ assertEquals(TEST_NAME_SPACE, ConfigurationUtils.getProperty(config, Constants.NAMESPACE_KEY, Hint.NODE_SPECIFIC.value()));
+ }
+
+ @Test
+ public void testIsAMap() {
+ assertTrue(ConfigurationUtils.isAMap(HashMap.class));
+ assertFalse(ConfigurationUtils.isAMap(ArrayList.class));
+ }
+
+ @Test
+ public void testIsACollection() {
+ assertTrue(ConfigurationUtils.isACollection(ArrayList.class));
+ assertFalse(ConfigurationUtils.isACollection(HashMap.class));
+ }
+
+ @Test
+ public void testIsAPrimitiveOrWrapper() {
+ assertTrue(ConfigurationUtils.isAPrimitiveOrWrapper(int.class));
+ assertTrue(ConfigurationUtils.isAPrimitiveOrWrapper(Integer.class));
+ assertFalse(ConfigurationUtils.isAPrimitiveOrWrapper(HashMap.class));
+ }
+
+ @Test
+ public void testIsAPrimitivesArray() {
+ assertTrue(ConfigurationUtils.isAPrimitivesArray(int[].class));
+ assertFalse(ConfigurationUtils.isAPrimitivesArray(Integer[].class));
+ assertFalse(ConfigurationUtils.isAPrimitivesArray(HashMap[].class));
+ }
+
+ @Test
+ public void testIsAWrapperArray() {
+ assertTrue(ConfigurationUtils.isAWrappersArray(Integer[].class));
+ assertFalse(ConfigurationUtils.isAWrappersArray(int[].class));
+ assertFalse(ConfigurationUtils.isAWrappersArray(HashMap[].class));
+ }
+
+ @Test
+ public void testIsAPrimitivesOrWrapperArray() {
+ assertTrue(ConfigurationUtils.isAPrimitivesOrWrappersArray(int[].class));
+ assertTrue(ConfigurationUtils.isAPrimitivesOrWrappersArray(Integer[].class));
+ assertFalse(ConfigurationUtils.isAPrimitivesOrWrappersArray(HashMap[].class));
+ }
+
+ private ConfigurationRepository populateTestBaseConfig() {
+ BaseConfiguration inputConfig = new PropertiesConfiguration();
+ inputConfig.setProperty(Constants.NAMESPACE_KEY, TEST_NAME_SPACE);
+ ConfigurationRepository repo = ConfigurationRepository.lookup();
+
+ repo.populateConfiguration(
+ Constants.DEFAULT_TENANT + Constants.KEY_ELEMENTS_DELIMITER + TEST_NAME_SPACE, inputConfig);
+
+ return repo;
+ }
+
+ private ConfigurationRepository populateTestCompositeConfig() {
+ CompositeConfiguration inputCompositeConfig = new CompositeConfiguration();
+ Configuration inputConfig1 = new BaseConfiguration();
+ Configuration inputConfig2 = new BaseConfiguration();
+ inputConfig1.setProperty(Constants.NAMESPACE_KEY, TEST_NAME_SPACE);
+ inputCompositeConfig.addConfiguration(inputConfig1);
+ inputCompositeConfig.addConfigurationFirst(inputConfig2);
+
+ ConfigurationRepository repo = ConfigurationRepository.lookup();
+ repo.populateConfiguration(
+ Constants.DEFAULT_TENANT + Constants.KEY_ELEMENTS_DELIMITER + TEST_COMPOSITE_NAMESPACE,
+ inputCompositeConfig
+ );
+
+ return repo;
+ }
+}