diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/SchemaUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/SchemaUtils.java index a4e16ba8b6..7d341f3b20 100644 --- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/SchemaUtils.java +++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/SchemaUtils.java @@ -35,7 +35,7 @@ import java.util.regex.Pattern; * */ public class SchemaUtils { - + private static final Logger logger = LoggerFactory.getLogger(SchemaUtils.class); private static Pattern p = Pattern.compile("\\s*|\t|\r|\n"); @@ -50,11 +50,11 @@ public class SchemaUtils { if(schemaDirArr == null || schemaDirArr.length == 0) { return null; } - + for(File file : schemaDirArr) { schemaDirList.add(file.getName()); } - + Collections.sort(schemaDirList , new Comparator() { @Override public int compare(Object o1 , Object o2){ @@ -66,23 +66,23 @@ public class SchemaUtils { if(version1.equals(version2)) { return 0; } - + if(SchemaUtils.isAGreatVersion(version1, version2)) { return 1; } - + return -1; - + } catch (Exception e) { logger.error(e.getMessage(),e); throw new RuntimeException(e); } } }); - + return schemaDirList; } - + /** * Determine whether schemaVersion is higher than version * @param schemaVersion schema version @@ -93,7 +93,7 @@ public class SchemaUtils { if(StringUtils.isEmpty(schemaVersion) || StringUtils.isEmpty(version)) { throw new RuntimeException("schemaVersion or version is empty"); } - + String[] schemaVersionArr = schemaVersion.split("\\."); String[] versionArr = version.split("\\."); int arrLength = schemaVersionArr.length < versionArr.length ? schemaVersionArr.length : versionArr.length; @@ -104,11 +104,11 @@ public class SchemaUtils { return false; } } - + // If the version and schema version is the same from 0 up to the arrlength-1 element,whoever has a larger arrLength has a larger version number return schemaVersionArr.length > versionArr.length; } - + /** * Gets the current software version number of the system * @return current software version @@ -127,7 +127,7 @@ public class SchemaUtils { } return soft_version; } - + /** * Strips the string of space carriage returns and tabs * @param str string diff --git a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/SchemaUtilsTest.java b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/SchemaUtilsTest.java new file mode 100644 index 0000000000..907a09e458 --- /dev/null +++ b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/SchemaUtilsTest.java @@ -0,0 +1,119 @@ +/* + * 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.dolphinscheduler.common.utils; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@RunWith(PowerMockRunner.class) +@PrepareForTest({ LoggerFactory.class, FileUtils.class }) +public class SchemaUtilsTest { + + @Test + public void testReplaceBlank() { + Assert.assertEquals("abc", SchemaUtils.replaceBlank(" abc")); + Assert.assertEquals("abc", SchemaUtils.replaceBlank("abc ")); + Assert.assertEquals("abc", SchemaUtils.replaceBlank("a b c")); + Assert.assertEquals("abc", SchemaUtils.replaceBlank("a b c")); + Assert.assertEquals("", SchemaUtils.replaceBlank(" ")); + Assert.assertEquals("", SchemaUtils.replaceBlank(null)); + Assert.assertEquals("我怕的你", SchemaUtils.replaceBlank("我怕的 你")); + } + + @Test + public void testGetSoftVersion() { + // file not found + try { + SchemaUtils.getSoftVersion(); + } catch (RuntimeException e) { + Assert.assertEquals("Failed to get the product version description file. The file could not be found", + e.getMessage()); + } + + // file exists, fmt is invalid + FileUtils.writeContent2File("32432423", "sql/soft_version"); + Assert.assertEquals("32432423", SchemaUtils.getSoftVersion()); + } + + @Test + public void testIsAGreatVersion() { + // param is null + try { + SchemaUtils.isAGreatVersion(null, null); + } catch (RuntimeException e) { + Assert.assertEquals("schemaVersion or version is empty", e.getMessage()); + } + + // param is "" + try { + SchemaUtils.isAGreatVersion("", ""); + } catch (RuntimeException e) { + Assert.assertEquals("schemaVersion or version is empty", e.getMessage()); + } + Assert.assertFalse(SchemaUtils.isAGreatVersion("1", "1")); + Assert.assertTrue(SchemaUtils.isAGreatVersion("2", "1")); + Assert.assertTrue(SchemaUtils.isAGreatVersion("1.1", "1")); + Assert.assertTrue(SchemaUtils.isAGreatVersion("1.1", "1.0.1")); + Assert.assertFalse(SchemaUtils.isAGreatVersion("1.1", "1.2")); + Assert.assertTrue(SchemaUtils.isAGreatVersion("1.1.1", "1.1")); + Assert.assertTrue(SchemaUtils.isAGreatVersion("10.1.1", "1.01.100")); + try { + SchemaUtils.isAGreatVersion("10.1.1", ".1"); + } catch (Exception e) { + Assert.assertNotNull(e); + } + try { + SchemaUtils.isAGreatVersion("a.1.1", "b.1"); + } catch (Exception e) { + Assert.assertNotNull(e); + } + } + + @Test + public void testGetAllSchemaList() { + //normal + PowerMockito.mockStatic(FileUtils.class); + File[] files = new File[4]; + files[0] = new File("sql/upgrade/1.2.0_schema"); + files[1] = new File("sql/upgrade/1.0.1_schema"); + files[2] = new File("sql/upgrade/1.0.2_schema"); + files[3] = new File("sql/upgrade/1.1.0_schema"); + PowerMockito.when(FileUtils.getAllDir("sql/upgrade")).thenReturn(files); + List real = SchemaUtils.getAllSchemaList(); + List expect = Arrays.asList("1.0.1_schema", "1.0.2_schema", + "1.1.0_schema", "1.2.0_schema"); + Assert.assertTrue(CollectionUtils.isEqualCollection(real, expect)); + + //normal + files = new File[0]; + PowerMockito.when(FileUtils.getAllDir("sql/upgrade")).thenReturn(files); + real = SchemaUtils.getAllSchemaList(); + Assert.assertNull(real); + } +} diff --git a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/TaskParametersUtilsTest.java b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/TaskParametersUtilsTest.java new file mode 100644 index 0000000000..db4a86bc26 --- /dev/null +++ b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/TaskParametersUtilsTest.java @@ -0,0 +1,48 @@ +/* + * 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.dolphinscheduler.common.utils; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.slf4j.LoggerFactory; + +@RunWith(PowerMockRunner.class) +@PrepareForTest(LoggerFactory.class) +public class TaskParametersUtilsTest { + + @Test + public void testGetParameters() { + Assert.assertNull(TaskParametersUtils.getParameters("xx", "ttt")); + Assert.assertNull(TaskParametersUtils.getParameters("SHELL", "ttt")); + Assert.assertNotNull(TaskParametersUtils.getParameters("SHELL", "{}")); + Assert.assertNotNull(TaskParametersUtils.getParameters("SQL", "{}")); + Assert.assertNotNull(TaskParametersUtils.getParameters("SUB_PROCESS", "{}")); + Assert.assertNotNull(TaskParametersUtils.getParameters("PROCEDURE", "{}")); + Assert.assertNotNull(TaskParametersUtils.getParameters("MR", "{}")); + Assert.assertNotNull(TaskParametersUtils.getParameters("SPARK", "{}")); + Assert.assertNotNull(TaskParametersUtils.getParameters("PYTHON", "{}")); + Assert.assertNotNull(TaskParametersUtils.getParameters("DEPENDENT", "{}")); + Assert.assertNotNull(TaskParametersUtils.getParameters("FLINK", "{}")); + Assert.assertNotNull(TaskParametersUtils.getParameters("HTTP", "{}")); + } +}