From 3de22e1c6c2711072ce996335e7250445a39d320 Mon Sep 17 00:00:00 2001 From: Gautam Shah Date: Sat, 21 Apr 2018 16:18:37 +0530 Subject: Reducing onboarding backend maven build time Reducing onboarding backend maven build time Change-Id: Id0178cbf010e46f741f4bff11e14b0801f14d4b8 Issue-ID: SDC-1189 Signed-off-by: GAUTAMS --- .../openecomp-sdc-artifact-generator-api/pom.xml | 27 +- common/pom.xml | 52 +- onboarding/pom.xml | 33 +- .../pom.xml | 9 +- .../InformationArtifactGeneratorImplTest.java | 79 -- .../openecomp-sdc-enrichment-impl/pom.xml | 3 + .../openecomp-sdc-orchesrtation-api/pom.xml | 25 - .../openecomp-sdc-orchesrtation-core/pom.xml | 30 - .../openecomp-sdc-orchesrtation-impl/pom.xml | 30 - .../lib/openecomp-sdc-orchestration-lib/pom.xml | 23 - .../openecomp-sdc-translator-core/pom.xml | 10 +- .../helper/impl/NameExtractorServiceImpl.java | 19 - .../BaseFullTranslationTest.java | 224 +++-- .../openecomp-sdc-translator-impl/pom.xml | 52 -- .../openecomp-sdc-translator-sdk/pom.xml | 45 - .../lib/openecomp-sdc-translator-lib/pom.xml | 2 - .../core/impl/ToscaConverterManagerImpl.java | 54 -- .../src/resources/ToscaConverters.json | 3 - openecomp-be/lib/openecomp-tosca-lib/pom.xml | 3 + openecomp-be/lib/pom.xml | 1 - openecomp-be/pom.xml | 86 +- openecomp-be/tools/build-helper/pom.xml | 31 - .../build/test/StaleCodeDetectionTest.java | 54 -- openecomp-be/tools/compile-helper-plugin/pom.xml | 41 + .../org/openecomp/sdc/onboarding/BuildState.java | 238 ++++++ .../org/openecomp/sdc/onboarding/Constants.java | 15 + .../sdc/onboarding/InitializationHelperMojo.java | 59 ++ .../sdc/onboarding/PostCompileHelperMojo.java | 235 ++++++ .../sdc/onboarding/PostTestRunHelperMojo.java | 61 ++ .../sdc/onboarding/PreCompileHelperMojo.java | 142 ++++ .../sdc/onboarding/PreTestCompileHelperMojo.java | 90 ++ pom.xml | 908 ++++++++++----------- 32 files changed, 1605 insertions(+), 1079 deletions(-) delete mode 100644 openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/informationartifact/InformationArtifactGeneratorImplTest.java delete mode 100644 openecomp-be/lib/openecomp-sdc-orchestration-lib/openecomp-sdc-orchesrtation-api/pom.xml delete mode 100644 openecomp-be/lib/openecomp-sdc-orchestration-lib/openecomp-sdc-orchesrtation-core/pom.xml delete mode 100644 openecomp-be/lib/openecomp-sdc-orchestration-lib/openecomp-sdc-orchesrtation-impl/pom.xml delete mode 100644 openecomp-be/lib/openecomp-sdc-orchestration-lib/pom.xml delete mode 100644 openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/helper/impl/NameExtractorServiceImpl.java delete mode 100644 openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-impl/pom.xml delete mode 100644 openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-sdk/pom.xml delete mode 100644 openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaConverterManagerImpl.java delete mode 100644 openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/resources/ToscaConverters.json delete mode 100644 openecomp-be/tools/build-helper/pom.xml delete mode 100644 openecomp-be/tools/build-helper/src/main/java/org/openecomp/onboarding/build/test/StaleCodeDetectionTest.java create mode 100644 openecomp-be/tools/compile-helper-plugin/pom.xml create mode 100644 openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/BuildState.java create mode 100644 openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/Constants.java create mode 100644 openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/InitializationHelperMojo.java create mode 100644 openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/PostCompileHelperMojo.java create mode 100644 openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/PostTestRunHelperMojo.java create mode 100644 openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/PreCompileHelperMojo.java create mode 100644 openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/PreTestCompileHelperMojo.java diff --git a/common/openecomp-sdc-artifact-generator-lib/openecomp-sdc-artifact-generator-api/pom.xml b/common/openecomp-sdc-artifact-generator-lib/openecomp-sdc-artifact-generator-api/pom.xml index 22a518aa36..ca8f6f8792 100644 --- a/common/openecomp-sdc-artifact-generator-lib/openecomp-sdc-artifact-generator-api/pom.xml +++ b/common/openecomp-sdc-artifact-generator-lib/openecomp-sdc-artifact-generator-api/pom.xml @@ -61,24 +61,6 @@ reflections ${org.reflections.version} - - org.testng - testng - test - 6.8.5 - - - snakeyaml - org.yaml - - - - - junit - junit - test - ${junit.version} - @@ -86,7 +68,7 @@ org.jvnet.jaxb2.maven2 maven-jaxb2-plugin - ${mvn.jaxb2.version} + ${mvn.jaxb2.version} generate-sources @@ -98,7 +80,12 @@ src/main/resources org.openecomp.sdc.generator.aai.xml - target/generated-sources/aai/xml + target/generated-sources/custom/aai/xml + false + true + false + false + false aai_schema_v11.xsd diff --git a/common/pom.xml b/common/pom.xml index 092c8994a8..54d3a1b3c3 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -11,7 +11,7 @@ org.openecomp.sdc sdc-onboarding 1.2.0-SNAPSHOT - ../onboarding + ../onboarding @@ -163,6 +163,56 @@ ${java.target} + + org.openecomp.sdc.onboarding + compile-helper-plugin + ${project.version} + + + + pre-compile-helper + pre-test-compile-helper + post-compile-helper + post-test-run-helper + init-helper + + + + + pom + test,runtime + 10000 + ${basedir}/src/main/java + ${basedir}/src/test/java + ${basedir}/src/main/resources + ${basedir}/src/test/resources + ${project.build.directory}/classes + ${project.build.directory}/test-classes + + ${project.build.directory}/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst + + + ${project.build.directory}/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst + + + ${project.build.directory}/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst + + + ${project.build.directory}/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst + + + ${project.build.directory}/build-data/ModuleDependencies.dat + + ${project.build.directory}/build-data/ResourceDependencies.dat + + ${project} + org.openecomp.sdc:sdc-onboarding/target/build-data/BuildState.dat + + org.openecomp.sdc:sdc-onboarding/target/build-data/ResourceState.dat + + + + @@ -99,7 +103,8 @@ 1.5.3 6.9.10 4.4.1 - 2.0.1 + 2.0.1 + 0.3.0 0.3.0 0.3.2 @@ -169,16 +174,19 @@ org.apache.maven.plugins maven-clean-plugin - 2.5 + ${mvn.clean.version} true ${project.build.directory} - test-classes/**/*.class - pmd/** - maven-status/** + ${classes} + ${testClasses} + ${pmd} + ${mavenStatus} + ${customGeneratedSources} + build-data/** @@ -189,7 +197,7 @@ maven-surefire-plugin ${mvn.surefire.version} - 0 + ${fork.count} false true @@ -197,12 +205,13 @@ src/test/resources/logback-test.xml - ${project.basedir}/src/test/resources/config/Artifact-Generator.properties + + ${project.basedir}/src/test/resources/config/Artifact-Generator.properties + ${project.basedir}/configuration - - org.openecomp.sdc:build-helper - + ${useSystemClassLoader} + ${skipTestRun} diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/pom.xml b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/pom.xml index 22004c2808..2b4057802e 100644 --- a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/pom.xml +++ b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/pom.xml @@ -198,11 +198,6 @@ openecomp-sdc-tosca-generator-core ${project.version} - - org.openecomp.sdc - openecomp-sdc-orchesrtation-core - 1.2.0-SNAPSHOT - org.openecomp.sdc openecomp-tosca-converter-api @@ -216,4 +211,8 @@ + + false + + diff --git a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/informationartifact/InformationArtifactGeneratorImplTest.java b/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/informationartifact/InformationArtifactGeneratorImplTest.java deleted file mode 100644 index 925eb7157e..0000000000 --- a/openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/informationartifact/InformationArtifactGeneratorImplTest.java +++ /dev/null @@ -1,79 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * SDC - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed 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. - * ============LICENSE_END========================================================= - */ - -//package org.openecomp.sdc.vendorsoftwareproduct.informationartifact; -// -//import org.openecomp.core.util.UniqueValueUtil; -//import org.openecomp.sdc.vendorsoftwareproduct.utils.VSPCommon; -//import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductConstants; -//import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager; -//import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails; -//import org.openecomp.sdc.vendorsoftwareproduct.impl.VendorSoftwareProductManagerImpl; -//import org.openecomp.sdc.versioning.dao.types.Version; -//import org.testng.Assert; -//import org.testng.annotations.BeforeClass; -//import org.testng.annotations.Test; -// -//import java.io.File; -//import java.io.IOException; -// -//import static org.testng.Assert.*; -// -///** -// * Created by Talio on 12/6/2016. -// */ -//public class InformationArtifactGeneratorImplTest { -// private static VendorSoftwareProductManager vendorSoftwareProductManager = -// new VendorSoftwareProductManagerImpl(); -// private static String vspId; -// private static Version vspActiveVersion; -// private static final String USER1 = "vspTestUser1"; -// -// -// @BeforeClass -// public void init(){ -// UniqueValueUtil.deleteUniqueValue(VendorSoftwareProductConstants.UniqueValues.VENDOR_SOFTWARE_PRODUCT_NAME, "Test_download_info"); -// VspDetails vspDetails = vendorSoftwareProductManager.createVsp -// (VSPCommon.createVspDetails(null, null, "Test_download_info", "Test-vsp-empty", -// "vendorName", "vlm1Id", "icon", "category", "subCategory", "123", null), USER1); -// vspId = vspDetails.getId(); -// vspActiveVersion = vspDetails.getVersion(); -// } -// -// @Test -// public void testDownloadInformationArtifact() throws IOException { -// File informationArtifact = -// vendorSoftwareProductManager.getInformationArtifact(vspId, vspActiveVersion, USER1); -// -// Assert.assertNotNull(informationArtifact); -// } -// -// @Test -// public void negativeTestDownloadInformationArtifactOnNoneExistiongVsp() throws IOException { -// try { -// File informationArtifact = vendorSoftwareProductManager -// .getInformationArtifact("non_existing_id", vspActiveVersion, USER1); -// }catch(Exception e){ -// Assert.assertEquals(e.getMessage(), "Versionable entity VendorSoftwareProduct with id " + -// "non_existing_id does not exist."); -// } -// } -// -//} diff --git a/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-impl/pom.xml b/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-impl/pom.xml index 0e6015236b..3a4ae67125 100644 --- a/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-impl/pom.xml +++ b/openecomp-be/lib/openecomp-sdc-enrichment-lib/openecomp-sdc-enrichment-impl/pom.xml @@ -109,4 +109,7 @@ + + false + diff --git a/openecomp-be/lib/openecomp-sdc-orchestration-lib/openecomp-sdc-orchesrtation-api/pom.xml b/openecomp-be/lib/openecomp-sdc-orchestration-lib/openecomp-sdc-orchesrtation-api/pom.xml deleted file mode 100644 index f3ee4de5ff..0000000000 --- a/openecomp-be/lib/openecomp-sdc-orchestration-lib/openecomp-sdc-orchesrtation-api/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - 4.0.0 - - - org.openecomp.sdc - openecomp-sdc-datatypes-lib - 1.2.0-SNAPSHOT - - - - - org.openecomp.sdc - openecomp-sdc-orchestration-lib - 1.2.0-SNAPSHOT - - - org.openecomp.sdc - openecomp-sdc-orchesrtation-api - 1.2.0-SNAPSHOT - - - \ No newline at end of file diff --git a/openecomp-be/lib/openecomp-sdc-orchestration-lib/openecomp-sdc-orchesrtation-core/pom.xml b/openecomp-be/lib/openecomp-sdc-orchestration-lib/openecomp-sdc-orchesrtation-core/pom.xml deleted file mode 100644 index 695b929543..0000000000 --- a/openecomp-be/lib/openecomp-sdc-orchestration-lib/openecomp-sdc-orchesrtation-core/pom.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - 4.0.0 - - - org.openecomp.sdc - openecomp-sdc-orchesrtation-api - 1.2.0-SNAPSHOT - - - org.openecomp.sdc.core - openecomp-utilities-lib - 1.2.0-SNAPSHOT - - - - - org.openecomp.sdc - openecomp-sdc-orchestration-lib - 1.2.0-SNAPSHOT - - - org.openecomp.sdc - openecomp-sdc-orchesrtation-core - 1.2.0-SNAPSHOT - - - \ No newline at end of file diff --git a/openecomp-be/lib/openecomp-sdc-orchestration-lib/openecomp-sdc-orchesrtation-impl/pom.xml b/openecomp-be/lib/openecomp-sdc-orchestration-lib/openecomp-sdc-orchesrtation-impl/pom.xml deleted file mode 100644 index d663ad1d67..0000000000 --- a/openecomp-be/lib/openecomp-sdc-orchestration-lib/openecomp-sdc-orchesrtation-impl/pom.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - 4.0.0 - - - org.openecomp.sdc - openecomp-sdc-orchesrtation-api - 1.2.0-SNAPSHOT - - - org.openecomp.sdc - openecomp-sdc-logging-api - 1.2.0-SNAPSHOT - - - - - org.openecomp.sdc - openecomp-sdc-orchestration-lib - 1.2.0-SNAPSHOT - - - org.openecomp.sdc - openecomp-sdc-orchesrtation-impl - 1.2.0-SNAPSHOT - - - \ No newline at end of file diff --git a/openecomp-be/lib/openecomp-sdc-orchestration-lib/pom.xml b/openecomp-be/lib/openecomp-sdc-orchestration-lib/pom.xml deleted file mode 100644 index 08fcf78942..0000000000 --- a/openecomp-be/lib/openecomp-sdc-orchestration-lib/pom.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - 4.0.0 - - openecomp-sdc-orchestration-lib - 1.2.0-SNAPSHOT - pom - - - openecomp-sdc-lib - org.openecomp.sdc - 1.2.0-SNAPSHOT - .. - - - - openecomp-sdc-orchesrtation-api - openecomp-sdc-orchesrtation-core - openecomp-sdc-orchesrtation-impl - - \ No newline at end of file diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/pom.xml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/pom.xml index b08067b6b4..0535d9dba1 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/pom.xml +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/pom.xml @@ -93,7 +93,7 @@ classes 1 - 0 + ${fork.count} false true 1 @@ -103,12 +103,14 @@ src/test/resources/logback-test.xml - - org.openecomp.sdc:build-helper - + ${useSystemClassLoader} + + false + + diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/helper/impl/NameExtractorServiceImpl.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/helper/impl/NameExtractorServiceImpl.java deleted file mode 100644 index 3867dadaeb..0000000000 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/helper/impl/NameExtractorServiceImpl.java +++ /dev/null @@ -1,19 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * SDC - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed 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. - * ============LICENSE_END========================================================= - */ diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/BaseFullTranslationTest.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/BaseFullTranslationTest.java index 2387390df9..801f2c67a0 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/BaseFullTranslationTest.java +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/BaseFullTranslationTest.java @@ -18,11 +18,22 @@ package org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslati import static org.junit.Assert.assertEquals; +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.net.URL; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; import org.apache.commons.collections4.MapUtils; import org.junit.Assert; import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.rules.TestName; import org.openecomp.core.translator.api.HeatToToscaTranslator; import org.openecomp.core.translator.datatypes.TranslatorOutput; import org.openecomp.core.translator.factory.HeatToToscaTranslatorFactory; @@ -39,133 +50,116 @@ import org.openecomp.sdc.translator.TestUtils; import org.togglz.testing.TestFeatureManager; import org.togglz.testing.TestFeatureManagerProvider; -import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.net.URL; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; - public class BaseFullTranslationTest { - public static final String IN_POSTFIX = "/in"; - public static final String OUT_POSTFIX = "/out"; - - @Rule - public TestName name = new TestName(); - - protected static TestFeatureManager manager; - private static File tempDir = new File(System.getProperty("java.io.tmpdir")); - - @BeforeClass - public static void enableToggleableFeatures(){ - manager = new TestFeatureManager(ToggleableFeature.class); - manager.enableAll(); - TestFeatureManagerProvider.setFeatureManager(manager); - } - - - public static void disableToggleableFeatures() { - manager.disableAll(); - manager = null; - TestFeatureManagerProvider.setFeatureManager(null); - } - - protected void testTranslationWithInit(String path) throws IOException { - byte[] translatedZipFile = initTranslatorAndTranslate(path); - testTranslation(path, translatedZipFile); - } - - protected byte[] initTranslatorAndTranslate(String path) throws IOException { - HeatToToscaTranslator heatToToscaTranslator = HeatToToscaTranslatorFactory.getInstance().createInterface(); - return translateZipFile(path, heatToToscaTranslator); - } - - protected void testTranslation(String basePath, byte[] translatedZipFile) throws IOException { - - URL url = BaseFullTranslationTest.class.getResource(basePath + OUT_POSTFIX); - Set expectedResultFileNameSet = new HashSet<>(); - Map expectedResultMap = new HashMap<>(); - - String path = url.getPath(); - File pathFile = new File(path); - File[] files = pathFile.listFiles(); - Assert.assertNotNull("manifest files is empty", files); - for (File expectedFile : files) { - expectedResultFileNameSet.add(expectedFile.getName()); - try (FileInputStream input = new FileInputStream(expectedFile)) { - expectedResultMap.put(expectedFile.getName(), FileUtils.toByteArray(input)); - } + public static final String IN_POSTFIX = "/in"; + public static final String OUT_POSTFIX = "/out"; + + + protected static TestFeatureManager manager; + + @BeforeClass + public static void enableToggleableFeatures() { + manager = new TestFeatureManager(ToggleableFeature.class); + manager.enableAll(); + TestFeatureManagerProvider.setFeatureManager(manager); } - try (ByteArrayInputStream fis = new ByteArrayInputStream(translatedZipFile);BufferedInputStream bis = new BufferedInputStream(fis); - ZipInputStream zis = new ZipInputStream(bis)) { - ZipEntry entry; - String name; - String expected; - String actual; - while ((entry = zis.getNextEntry()) != null) { + public static void disableToggleableFeatures() { + manager.disableAll(); + manager = null; + TestFeatureManagerProvider.setFeatureManager(null); + } - name = entry.getName() - .substring(entry.getName().lastIndexOf(File.separator) + 1, entry.getName().length()); - if (expectedResultFileNameSet.contains(name)) { - expected = new String(expectedResultMap.get(name)).trim().replace("\r", ""); - actual = new String(FileUtils.toByteArray(zis)).trim().replace("\r", ""); - assertEquals("difference in file: " + name, expected, actual); + protected void testTranslationWithInit(String path) throws IOException { + byte[] translatedZipFile = initTranslatorAndTranslate(path); + testTranslation(path, translatedZipFile); + } - expectedResultFileNameSet.remove(name); - } - } - if (expectedResultFileNameSet.isEmpty()) { - expectedResultFileNameSet.forEach(System.out::println); - } + protected byte[] initTranslatorAndTranslate(String path) throws IOException { + HeatToToscaTranslator heatToToscaTranslator = HeatToToscaTranslatorFactory.getInstance().createInterface(); + return translateZipFile(path, heatToToscaTranslator); } - assertEquals(0, expectedResultFileNameSet.size()); - } - - private byte[] translateZipFile(String basePath, HeatToToscaTranslator heatToToscaTranslator) throws IOException { - URL inputFilesUrl = this.getClass().getResource(basePath + IN_POSTFIX); - String path = inputFilesUrl.getPath(); - TestUtils.addFilesToTranslator(heatToToscaTranslator, path); - TranslatorOutput translatorOutput = heatToToscaTranslator.translate(); - Assert.assertNotNull(translatorOutput); - if (MapUtils.isNotEmpty(translatorOutput.getErrorMessages()) && MapUtils.isNotEmpty( - MessageContainerUtil - .getMessageByLevel(ErrorLevel.ERROR, translatorOutput.getErrorMessages()))) { - throw new CoreException((new ErrorCode.ErrorCodeBuilder()).withMessage( - "Error in validation " + getErrorAsString(translatorOutput.getErrorMessages())) - .withId("Validation Error").withCategory(ErrorCategory.APPLICATION).build()); + + protected void testTranslation(String basePath, byte[] translatedZipFile) throws IOException { + + URL url = BaseFullTranslationTest.class.getResource(basePath + OUT_POSTFIX); + Set expectedResultFileNameSet = new HashSet<>(); + Map expectedResultMap = new HashMap<>(); + + String path = url.getPath(); + File pathFile = new File(path); + File[] files = pathFile.listFiles(); + Assert.assertNotNull("manifest files is empty", files); + for (File expectedFile : files) { + expectedResultFileNameSet.add(expectedFile.getName()); + try (FileInputStream input = new FileInputStream(expectedFile)) { + expectedResultMap.put(expectedFile.getName(), FileUtils.toByteArray(input)); + } + } + + try (ByteArrayInputStream fis = new ByteArrayInputStream(translatedZipFile); + BufferedInputStream bis = new BufferedInputStream(fis); ZipInputStream zis = new ZipInputStream(bis)) { + ZipEntry entry; + String name; + String expected; + String actual; + + while ((entry = zis.getNextEntry()) != null) { + + name = entry.getName() + .substring(entry.getName().lastIndexOf(File.separator) + 1, entry.getName().length()); + if (expectedResultFileNameSet.contains(name)) { + expected = new String(expectedResultMap.get(name)).trim().replace("\r", ""); + actual = new String(FileUtils.toByteArray(zis)).trim().replace("\r", ""); + assertEquals("difference in file: " + name, expected, actual); + + expectedResultFileNameSet.remove(name); + } + } + if (expectedResultFileNameSet.isEmpty()) { + expectedResultFileNameSet.forEach(System.out::println); + } + } + assertEquals(0, expectedResultFileNameSet.size()); } - byte[] data = new ToscaFileOutputServiceCsarImpl().createOutputFile(translatorOutput.getToscaServiceModel(), null); + private byte[] translateZipFile(String basePath, HeatToToscaTranslator heatToToscaTranslator) throws IOException { + URL inputFilesUrl = this.getClass().getResource(basePath + IN_POSTFIX); + String path = inputFilesUrl.getPath(); + TestUtils.addFilesToTranslator(heatToToscaTranslator, path); + TranslatorOutput translatorOutput = heatToToscaTranslator.translate(); + Assert.assertNotNull(translatorOutput); + if (MapUtils.isNotEmpty(translatorOutput.getErrorMessages()) && MapUtils.isNotEmpty( + MessageContainerUtil.getMessageByLevel(ErrorLevel.ERROR, translatorOutput.getErrorMessages()))) { + throw new CoreException((new ErrorCode.ErrorCodeBuilder()).withMessage( + "Error in validation " + getErrorAsString(translatorOutput.getErrorMessages())) + .withId("Validation Error") + .withCategory(ErrorCategory.APPLICATION).build()); + } - return data; - } + byte[] data = + new ToscaFileOutputServiceCsarImpl().createOutputFile(translatorOutput.getToscaServiceModel(), null); - private String getErrorAsString(Map> errorMessages) { - StringBuilder sb = new StringBuilder(); - errorMessages.entrySet().forEach( - entry -> sb.append("File:").append(entry.getKey()).append(System.lineSeparator()) - .append(getErrorList(entry.getValue()))); + return data; + } - return sb.toString(); - } + private String getErrorAsString(Map> errorMessages) { + StringBuilder sb = new StringBuilder(); + errorMessages.entrySet().forEach( + entry -> sb.append("File:").append(entry.getKey()).append(System.lineSeparator()) + .append(getErrorList(entry.getValue()))); - private String getErrorList(List errors) { - StringBuilder sb = new StringBuilder(); - errors.forEach( - error -> sb.append(error.getMessage()).append("[").append(error.getLevel()).append("]") - .append(System.lineSeparator())); - return sb.toString(); - } + return sb.toString(); + } + + private String getErrorList(List errors) { + StringBuilder sb = new StringBuilder(); + errors.forEach(error -> sb.append(error.getMessage()).append("[").append(error.getLevel()).append("]") + .append(System.lineSeparator())); + return sb.toString(); + } } diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-impl/pom.xml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-impl/pom.xml deleted file mode 100644 index 8b59f02f95..0000000000 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-impl/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - 4.0.0 - - openecomp-sdc-translator-impl - openecomp-sdc-translator-impl - - - - org.openecomp.sdc - openecomp-sdc-lib - 1.2.0-SNAPSHOT - ../.. - - - - - ch.qos.logback - logback-classic - ${logback.version} - - - junit - junit - ${junit.version} - test - - - org.openecomp.sdc - openecomp-sdc-translator-api - ${project.version} - - - org.openecomp.sdc.core - openecomp-heat-lib - ${project.version} - - - org.openecomp.sdc.core - openecomp-tosca-lib - ${project.version} - - - - org.openecomp.sdc - openecomp-sdc-translator-core - ${project.version} - - - - diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-sdk/pom.xml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-sdk/pom.xml deleted file mode 100644 index 6e48011eb2..0000000000 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-sdk/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - 4.0.0 - - openecomp-sdc-translator-sdk - openecomp-sdc-translator-sdk - - - - org.openecomp.sdc - openecomp-sdc-lib - 1.2.0-SNAPSHOT - ../.. - - - - - ch.qos.logback - logback-classic - ${logback.version} - - - junit - junit - ${junit.version} - test - - - org.openecomp.sdc - openecomp-sdc-translator-api - ${project.version} - - - org.openecomp.sdc.core - openecomp-heat-lib - ${project.version} - - - org.openecomp.sdc.core - openecomp-tosca-lib - ${project.version} - - - diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/pom.xml b/openecomp-be/lib/openecomp-sdc-translator-lib/pom.xml index bf7f5aa957..814b152daf 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/pom.xml +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/pom.xml @@ -16,9 +16,7 @@ openecomp-sdc-translator-api - openecomp-sdc-translator-sdk openecomp-sdc-translator-core - openecomp-sdc-translator-impl diff --git a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaConverterManagerImpl.java b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaConverterManagerImpl.java deleted file mode 100644 index 4917533dd8..0000000000 --- a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/main/java/org/openecomp/core/impl/ToscaConverterManagerImpl.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.openecomp.core.impl; - -import org.openecomp.core.converter.ToscaConverter; -import org.openecomp.core.converter.api.ToscaConverterManager; -import org.openecomp.core.utilities.file.FileContentHandler; -import org.openecomp.core.utilities.file.FileUtils; -import org.openecomp.core.utilities.json.JsonUtil; -import org.openecomp.sdc.logging.api.Logger; -import org.openecomp.sdc.logging.api.LoggerFactory; -import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel; - -import java.lang.reflect.Constructor; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -public class ToscaConverterManagerImpl implements ToscaConverterManager { - - private static final Logger LOGGER = LoggerFactory.getLogger(ToscaConverterManagerImpl.class.getName()); - private static List toscaConverters; - private static final String toscaConverterFileName = "ToscaConverters.json"; - private static final String TOSCA_CONVERTER_IMPL_FORMAT_ERROR = "Failed to construct TOSCA converter for '%s' implementation."; - - static { - toscaConverters = getConvertersList(); - } - - @Override - public ToscaServiceModel convert(String csarName, FileContentHandler fileContentHandler) { - return null; - } - - private static List getConvertersList(){ - List toscaConvertersList = new ArrayList<>(); - Map convertersMap = FileUtils.readViaInputStream(toscaConverterFileName, - stream -> JsonUtil.json2Object(stream, Map.class)); - return getToscaConvertersList(toscaConvertersList, convertersMap); - } - - private static List getToscaConvertersList( - List toscaConvertersList, Map convertersMap) { - for(String implClassName : convertersMap.values()){ - try{ - Class clazz = Class.forName(implClassName); - Constructor constructor = clazz.getConstructor(); - toscaConvertersList.add((ToscaConverter) constructor.newInstance()); - }catch (Exception ex){ - LOGGER.debug(String.format(TOSCA_CONVERTER_IMPL_FORMAT_ERROR, implClassName), ex); - continue; - } - } - return toscaConvertersList; - } -} diff --git a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/resources/ToscaConverters.json b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/resources/ToscaConverters.json deleted file mode 100644 index e1cddeb854..0000000000 --- a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/resources/ToscaConverters.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "ToscaConverter" : "org.openecomp.core.converter.impl.ToscaConverterImpl" -} \ No newline at end of file diff --git a/openecomp-be/lib/openecomp-tosca-lib/pom.xml b/openecomp-be/lib/openecomp-tosca-lib/pom.xml index c6f8aa17a0..eedc6cb521 100644 --- a/openecomp-be/lib/openecomp-tosca-lib/pom.xml +++ b/openecomp-be/lib/openecomp-tosca-lib/pom.xml @@ -86,6 +86,9 @@ ${sdc-tosca-parser.version} + + false + diff --git a/openecomp-be/lib/pom.xml b/openecomp-be/lib/pom.xml index d031dd4d04..f59c05628d 100644 --- a/openecomp-be/lib/pom.xml +++ b/openecomp-be/lib/pom.xml @@ -32,7 +32,6 @@ openecomp-healing-lib openecomp-sdc-activity-log-lib openecomp-tosca-converter-lib - openecomp-sdc-orchestration-lib openecomp-sdc-notification-lib openecomp-item-permissions-lib openecomp-conflict-lib diff --git a/openecomp-be/pom.xml b/openecomp-be/pom.xml index 03613c4438..786ef92d38 100644 --- a/openecomp-be/pom.xml +++ b/openecomp-be/pom.xml @@ -36,13 +36,6 @@ ${togglz.version} test - - org.openecomp.sdc - build-helper - ${project.version} - runtime - - @@ -59,9 +52,62 @@ ${java.source} ${java.target} + + **/package-info.java + + + + + org.openecomp.sdc.onboarding + compile-helper-plugin + ${project.version} + + + + pre-compile-helper + pre-test-compile-helper + post-compile-helper + post-test-run-helper + init-helper + + + + + pom + test,runtime + 10000 + ${basedir}/src/main/java + ${basedir}/src/test/java + ${basedir}/src/main/resources + ${basedir}/src/test/resources + ${project.build.directory}/classes + ${project.build.directory}/test-classes + + ${project.build.directory}/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst + + + ${project.build.directory}/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst + + + ${project.build.directory}/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst + + + ${project.build.directory}/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst + + + ${project.build.directory}/build-data/ModuleDependencies.dat + + ${project.build.directory}/build-data/ResourceDependencies.dat + + ${project} + org.openecomp.sdc:sdc-onboarding/target/build-data/BuildState.dat + + org.openecomp.sdc:sdc-onboarding/target/build-data/ResourceState.dat + + - + org.codehaus.mojo license-maven-plugin ${mvn.license.version} @@ -202,20 +248,20 @@ - - /api - /lib - /tools/swagger-ui - /tools/zusammen-tools - /backend - + + /api + /lib + /tools/swagger-ui + /tools/zusammen-tools + /backend + - - - - - + + + + + diff --git a/openecomp-be/tools/build-helper/pom.xml b/openecomp-be/tools/build-helper/pom.xml deleted file mode 100644 index bcdf52a79e..0000000000 --- a/openecomp-be/tools/build-helper/pom.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - 4.0.0 - - build-helper - - - sdc-onboarding - org.openecomp.sdc - 1.2.0-SNAPSHOT - ../../../onboarding - - - - true - true - - - - - junit - junit - ${junit.version} - provided - - - - - diff --git a/openecomp-be/tools/build-helper/src/main/java/org/openecomp/onboarding/build/test/StaleCodeDetectionTest.java b/openecomp-be/tools/build-helper/src/main/java/org/openecomp/onboarding/build/test/StaleCodeDetectionTest.java deleted file mode 100644 index 69f77357ae..0000000000 --- a/openecomp-be/tools/build-helper/src/main/java/org/openecomp/onboarding/build/test/StaleCodeDetectionTest.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright © 2016-2017 European Support Limited - * - * Licensed 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 a "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.openecomp.onboarding.build.test; - -import org.junit.Assert; -import org.junit.Test; - -import java.io.File; -import java.nio.file.Paths; -import java.util.Arrays; -import java.util.Collections; - -public class StaleCodeDetectionTest { - - private static final String JAVA_EXT = ".java"; - private static final String CLASS_EXT = ".class"; - - @Test - public void checkIfStale() { - - String moduleLocation = System.getProperty("basedir"); - if (isStale(moduleLocation + File.separator + "target" + File.separator + "test-classes", - moduleLocation + File.separator + "src" + File.separator + "test" + File.separator + "java")) { - Assert.fail("****** Please remove 'target' directory manually under path " + moduleLocation); - } - } - - private boolean isStale(String compiledCodeLocation, String javaSourceLocation) { - File compiledFiles = new File(compiledCodeLocation); - File[] list = compiledFiles.listFiles((dir, file) -> file.endsWith(CLASS_EXT) && file.indexOf('$') == -1); - if (list == null || list.length == 0) { - return false; - } - File candidate = Collections.min(Arrays.asList(list), - (file1, file2) -> file1.lastModified() >= file2.lastModified() ? 1 : -1); - String sourceFilePath = javaSourceLocation + candidate.getAbsolutePath().replace(compiledCodeLocation, "") - .replace(CLASS_EXT, JAVA_EXT); - return !Paths.get(sourceFilePath).toFile().exists(); - } -} diff --git a/openecomp-be/tools/compile-helper-plugin/pom.xml b/openecomp-be/tools/compile-helper-plugin/pom.xml new file mode 100644 index 0000000000..3891558b66 --- /dev/null +++ b/openecomp-be/tools/compile-helper-plugin/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + org.openecomp.sdc.onboarding + compile-helper-plugin + maven-plugin + + + sdc-onboarding + org.openecomp.sdc + 1.2.0-SNAPSHOT + ../../../onboarding + + + + + org.apache.maven + maven-core + ${maven-core.version} + + + org.apache.maven.plugin-tools + maven-plugin-annotations + ${maven-plugin-annotations.version} + + + + + + + org.apache.maven.plugins + maven-plugin-plugin + ${maven-plugin-plugin.version} + + + + + \ No newline at end of file diff --git a/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/BuildState.java b/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/BuildState.java new file mode 100644 index 0000000000..888622f959 --- /dev/null +++ b/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/BuildState.java @@ -0,0 +1,238 @@ +/* + * Copyright © 2018 European Support Limited + * + * Licensed 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 a "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.openecomp.sdc.onboarding; + +import static org.openecomp.sdc.onboarding.Constants.RESOURCES_CHANGED; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.function.BiFunction; +import java.util.function.Function; +import java.util.stream.Stream; +import org.apache.maven.project.MavenProject; + +public class BuildState { + + private static Map fullBuildData = new HashMap<>(); + private static Map fullResourceBuildData = new HashMap<>(); + private static Map moduleBuildData = new HashMap<>(); + private static Map resourceBuildData = new HashMap<>(); + + private static File buildStateFile; + private static File resourceStateFile; + private File moduleBuildDataFile; + private File resourceBuildDataFile; + private MavenProject project; + private String buildStateFilePath; + private String resourceStateFilePath; + + private void readFullBuildState() { + buildStateFile = initialize(this::getBuildStateFile, fullBuildData, + buildStateFilePath.substring(0, buildStateFilePath.indexOf('/')), project); + } + + private void readResourceBuildState() { + resourceStateFile = initialize(this::getResourceStateFile, fullResourceBuildData, + resourceStateFilePath.substring(0, resourceStateFilePath.indexOf('/')), project); + + } + + private File initialize(BiFunction funct, Map store, String moduleCoordinate, + MavenProject proj) { + File file = funct.apply(moduleCoordinate, proj); + file.getParentFile().mkdirs(); + try (FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis);) { + if (store.isEmpty()) { + store.putAll(HashMap.class.cast(ois.readObject())); + } + } catch (Exception e) { + store.clear(); + } + return file; + } + + private void writeFullBuildState() throws IOException { + writeState(buildStateFile, fullBuildData); + } + + private void writeFullResourceBuildState() throws IOException { + writeState(resourceStateFile, fullResourceBuildData); + } + + private void writeState(File file, Map store) throws IOException { + try (FileOutputStream fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos)) { + oos.writeObject(store); + } + } + + private File getBuildStateFile(String moduleCoordinate, MavenProject proj) { + return getStateFile(moduleCoordinate, proj, buildStateFilePath); + } + + private File getResourceStateFile(String moduleCoordinate, MavenProject proj) { + return getStateFile(moduleCoordinate, proj, resourceStateFilePath); + } + + private File getStateFile(String moduleCoordinate, MavenProject proj, String filePath) { + return new File(getTopParentProject(moduleCoordinate, proj).getBasedir(), + filePath.substring(filePath.indexOf('/') + 1)); + } + + private MavenProject getTopParentProject(String moduleCoordinate, MavenProject proj) { + if (getModuleCoordinate(proj).equals(moduleCoordinate) || proj.getParent() == null) { + return proj; + } else { + return getTopParentProject(moduleCoordinate, proj.getParent()); + } + } + + private String getModuleCoordinate(MavenProject project) { + return project.getGroupId() + ":" + project.getArtifactId(); + } + + void addModuleBuildTime(String moduleCoordinates, Long buildTime) { + Long lastTime = fullBuildData.put(moduleCoordinates, buildTime); + try { + if (lastTime == null || !lastTime.equals(buildTime)) { + writeFullBuildState(); + } + } catch (IOException ignored) { + // ignored. No need to handle. System will take care. + } + } + + void addResourceBuildTime(String moduleCoordinates, Long buildTime) { + if (project.getProperties().containsKey(RESOURCES_CHANGED)) { + Long lastTime = fullResourceBuildData.put(moduleCoordinates, buildTime); + try { + writeFullResourceBuildState(); + } catch (IOException ignored) { + // ignored. No need to handle. System will take care. + } + } + } + + void addModuleBuildData(String moduleCoordinates, Map moduleBuildDependencies) { + moduleBuildData.put(moduleCoordinates, moduleBuildDependencies); + } + + Map readModuleBuildData() { + return readBuildData(moduleBuildDataFile); + } + + void saveModuleBuildData(String moduleCoordinate) { + saveBuildData(moduleBuildDataFile, moduleBuildData.get(moduleCoordinate)); + } + + void saveResourceBuildData(String moduleCoordinate) { + saveBuildData(resourceBuildDataFile, resourceBuildData.get(moduleCoordinate)); + } + + private void saveBuildData(File file, Object dataToSave) { + file.getParentFile().mkdirs(); + if (dataToSave != null) { + try (FileOutputStream fos = new FileOutputStream(file); + ObjectOutputStream ois = new ObjectOutputStream(fos)) { + ois.writeObject(dataToSave); + } catch (IOException ignored) { + //ignored. do nothing. system will take care. + } + } + } + + Map readResourceBuildData() { + return readBuildData(resourceBuildDataFile); + } + + private Map readBuildData(File file) { + try (FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis)) { + return HashMap.class.cast(ois.readObject()); + } catch (Exception e) { + return new HashMap<>(); + } + } + + void addResourceBuildData(String moduleCoordinates, Map currentModuleResourceBuildData) { + resourceBuildData.put(moduleCoordinates, currentModuleResourceBuildData); + } + + Long getBuildTime(String moduleCoordinates) { + if (fullBuildData.isEmpty()) { + readFullBuildState(); + readResourceBuildState(); + } + Long buildTime = fullBuildData.get(moduleCoordinates); + return buildTime == null ? 0 : buildTime; + } + + Long getResourceBuildTime(String moduleCoordinates) { + Long resourceBuildTime = fullResourceBuildData.get(moduleCoordinates); + return resourceBuildTime == null ? 0 : resourceBuildTime; + } + + boolean isCompileMust(String moduleCoordinates, Collection dependencies) { + return isMust(this::getBuildTime, moduleCoordinates, dependencies); + } + + boolean isTestMust(String moduleCoordinates, Collection dependencies) { + return isMust(this::getResourceBuildTime, moduleCoordinates, dependencies); + } + + private boolean isMust(Function funct, String moduleCoordinates, Collection dependencies) { + Long time = funct.apply(moduleCoordinates); + if (time == null || time == 0) { + return true; + } + for (String module : dependencies) { + Long buildTime = funct.apply(module); + if (buildTime >= time) { + return true; + } + } + return false; + } + + void markModuleDirty(File file) throws IOException { + if (file.exists()) { + Stream lines = Files.lines(file.toPath()); + Iterator itr = lines.iterator(); + while (itr.hasNext()) { + String line = itr.next(); + Path path = Paths.get(line); + if (path.toFile().exists()) { + if (path.toFile().setLastModified(System.currentTimeMillis())) { + break; + } else { + continue; + } + } + } + } + } + +} diff --git a/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/Constants.java b/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/Constants.java new file mode 100644 index 0000000000..96abc47882 --- /dev/null +++ b/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/Constants.java @@ -0,0 +1,15 @@ +package org.openecomp.sdc.onboarding; + +public class Constants { + + public static final String JACOCO_SKIP = "jacoco.skip"; + public static final String FORK_COUNT = "fork.count"; + public static final String JAVA_EXT = ".java"; + public static final String CLASS_EXT = ".class"; + public static final String SKIP_TEST_RUN = "skipTestRun"; + public static final String MAIN = "main"; + public static final String TEST = "test"; + public static final String JAVA = "java"; + public static final String RESOURCES_CHANGED = "resourcesChanged"; + public static final String UNICORN = "unicorn"; +} diff --git a/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/InitializationHelperMojo.java b/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/InitializationHelperMojo.java new file mode 100644 index 0000000000..cbf6f69c8a --- /dev/null +++ b/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/InitializationHelperMojo.java @@ -0,0 +1,59 @@ +/* + * Copyright © 2018 European Support Limited + * + * Licensed 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 a "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.openecomp.sdc.onboarding; + +import static org.openecomp.sdc.onboarding.Constants.FORK_COUNT; +import static org.openecomp.sdc.onboarding.Constants.JACOCO_SKIP; +import static org.openecomp.sdc.onboarding.Constants.UNICORN; + +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.plugins.annotations.LifecyclePhase; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.ResolutionScope; +import org.apache.maven.project.MavenProject; + +@Mojo(name = "init-helper", threadSafe = true, defaultPhase = LifecyclePhase.PRE_CLEAN, + requiresDependencyResolution = ResolutionScope.NONE) +public class InitializationHelperMojo extends AbstractMojo { + + @Parameter(defaultValue = "${project}", readonly = true) + private MavenProject project; + + public void execute() throws MojoExecutionException, MojoFailureException { + + if (System.getProperties().containsKey(JACOCO_SKIP) && Boolean.FALSE.equals(Boolean.valueOf( + System.getProperties().getProperty(JACOCO_SKIP)))) { + project.getProperties().setProperty(FORK_COUNT, "1"); + } else { + project.getProperties().setProperty(FORK_COUNT, "0"); + } + + if (System.getProperties().containsKey(UNICORN)) { + project.getProperties().setProperty("classes", "classes/**/*.class"); + project.getProperties().setProperty("testClasses", "test-classes/**/*.class"); + project.getProperties().setProperty("mavenStatus", "maven-status/**"); + project.getProperties().setProperty("pmd", "pmd/**"); + project.getProperties().setProperty("customGeneratedSources", "generated-sources/custom/**"); + + } + + } + +} diff --git a/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/PostCompileHelperMojo.java b/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/PostCompileHelperMojo.java new file mode 100644 index 0000000000..9ab373509e --- /dev/null +++ b/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/PostCompileHelperMojo.java @@ -0,0 +1,235 @@ +/* + * Copyright © 2018 European Support Limited + * + * Licensed 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 a "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.openecomp.sdc.onboarding; + +import static org.openecomp.sdc.onboarding.Constants.CLASS_EXT; +import static org.openecomp.sdc.onboarding.Constants.JAVA_EXT; +import static org.openecomp.sdc.onboarding.Constants.MAIN; +import static org.openecomp.sdc.onboarding.Constants.RESOURCES_CHANGED; +import static org.openecomp.sdc.onboarding.Constants.SKIP_TEST_RUN; +import static org.openecomp.sdc.onboarding.Constants.UNICORN; + +import java.io.File; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import org.apache.maven.artifact.Artifact; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugins.annotations.LifecyclePhase; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.ResolutionScope; +import org.apache.maven.project.MavenProject; + +@Mojo(name = "post-compile-helper", threadSafe = true, defaultPhase = LifecyclePhase.PROCESS_TEST_CLASSES, + requiresDependencyResolution = ResolutionScope.TEST) +public class PostCompileHelperMojo extends AbstractMojo { + + @Parameter(defaultValue = "${project}", readonly = true) + private MavenProject project; + @Parameter(defaultValue = "${project.artifact.groupId}:${project.artifact.artifactId}") + private String moduleCoordinates; + @Parameter + private Long staleThreshold; + @Parameter + private String excludePackaging; + @Parameter + private List excludeDependencies; + @Parameter + private File mainSourceLocation; + @Parameter + private File testSourceLocation; + @Parameter + private File mainCompiledLocation; + @Parameter + private File testCompiledLocation; + @Parameter + private File inputSourceFilesList; + @Parameter + private File inputTestFilesList; + @Parameter + private BuildState buildState; + @Parameter + private File mainResourceLocation; + @Parameter + private File testResourceLocation; + @Parameter + private File compiledTestFilesList; + + + private File[] getCompiledClasses(File compiledFiles) { + if (!compiledFiles.exists()) { + return new File[0]; + } + File[] list = null; + try { + list = Files.walk(Paths.get(compiledFiles.getAbsolutePath())) + .filter(p -> p.toFile().getAbsolutePath().endsWith(CLASS_EXT)).map(p -> p.toFile()) + .sorted(this::compare).collect(Collectors.toList()).toArray(new File[0]); + } catch (IOException e) { + e.printStackTrace(); + } + if (list == null || list.length == 0) { + return new File[0]; + } + return list; + } + + private int compare(File file1, File file2) { + if (file1.lastModified() > file2.lastModified()) { + return 1; + } + if (file1.lastModified() < file2.lastModified()) { + return -1; + } + return 0; + } + + private File[] getStaleCompiledClasses(File[] compiledClasses, File javaSourceLocation) { + List staleFiles = new ArrayList<>(); + for (File file : compiledClasses) { + String classLocation = file.getAbsolutePath().replace( + project.getBasedir().getAbsolutePath() + File.separator + "target" + File.separator, ""); + String classLocationWithPackageOnly = + classLocation.substring(classLocation.indexOf(File.separatorChar) + 1); + String sourceFilePath = javaSourceLocation.getAbsolutePath() + File.separator + classLocationWithPackageOnly + .replace(CLASS_EXT, + JAVA_EXT); + if (Paths.get(sourceFilePath).toFile().exists()) { + return staleFiles.toArray(new File[0]); + } else { + staleFiles.add(file); + } + } + return staleFiles.toArray(new File[0]); + } + + private boolean deleteAll(File[] files) { + for (File file : files) { + if (!file.delete()) { + return false; + } + } + return true; + } + + public void execute() throws MojoExecutionException { + if (!System.getProperties().containsKey(UNICORN)) { + return; + } + if (project.getPackaging().equals(excludePackaging)) { + return; + } + String moduleLocation = project.getBasedir().getAbsolutePath(); + + File[] mainClasses = getCompiledClasses(mainCompiledLocation); + processStaleClassesIfAny(mainClasses, mainSourceLocation, inputSourceFilesList); + + File[] testClasses = getCompiledClasses(testCompiledLocation); + processStaleClassesIfAny(testClasses, testSourceLocation, inputTestFilesList); + + if (mainClasses.length == 0 && testClasses.length == 0) { + return; + } + buildState.addModuleBuildTime(project.getGroupId() + ":" + project.getArtifactId(), + mainClasses.length > 0 ? mainClasses[mainClasses.length - 1].lastModified() : + testClasses.length > 0 ? testClasses[testClasses.length - 1].lastModified() : 0); + buildState.saveModuleBuildData(moduleCoordinates); + Map resourceBuildData = getCurrentResourceBuildData(); + Map lastTimeResourceBuildData = buildState.readResourceBuildData(); + boolean resourceDataSame = resourceBuildData.equals(lastTimeResourceBuildData); + if (!resourceDataSame) { + buildState.addResourceBuildData(moduleCoordinates, resourceBuildData); + project.getProperties().setProperty(SKIP_TEST_RUN, Boolean.FALSE.toString()); + } + boolean resourceMainBuildDataSameWithPreviousBuild = + lastTimeResourceBuildData.get(MAIN) != null && resourceBuildData.get(MAIN) + .equals(lastTimeResourceBuildData + .get(MAIN)); + if (!resourceMainBuildDataSameWithPreviousBuild) { + project.getProperties().setProperty(RESOURCES_CHANGED, Boolean.TRUE.toString()); + } + if (!project.getProperties().containsKey(SKIP_TEST_RUN)) { + if (compiledTestFilesList.exists() + && compiledTestFilesList.lastModified() > System.currentTimeMillis() - staleThreshold) { + project.getProperties().setProperty(SKIP_TEST_RUN, Boolean.FALSE.toString()); + } + } + } + + private void processStaleClassesIfAny(File[] classes, File sourceLocation, File listFile) + throws MojoExecutionException { + if (classes.length > 0) { + List list = new ArrayList<>(Arrays.asList(classes)); + File[] staleClasses = null; + boolean allStale = listFile.isFile() && listFile.length() == 0; + if (allStale) { + staleClasses = classes; + listFile.delete(); + } else { + list.removeIf(f -> f.lastModified() > classes[classes.length - 1].lastModified() - staleThreshold); + staleClasses = getStaleCompiledClasses(list.toArray(new File[0]), sourceLocation); + } + if (!deleteAll(staleClasses)) { + throw new MojoExecutionException( + "****** Please remove 'target' directory manually under path " + project.getBasedir() + .getAbsolutePath()); + } + } + } + + private Map getCurrentResourceBuildData() { + HashMap resourceBuildStateData = new HashMap<>(); + try { + resourceBuildStateData.put("main", readResources(mainResourceLocation)); + resourceBuildStateData.put("test", readResources(testResourceLocation)); + resourceBuildStateData.put("dependency", getDependencies()); + } catch (IOException ioException) { + throw new UncheckedIOException(ioException); + } + return resourceBuildStateData; + } + + private Map readResources(File file) throws IOException { + Map resources = new HashMap<>(); + if (file.exists()) { + List list = Files.walk(Paths.get(file.getAbsolutePath())).filter(Files::isRegularFile) + .collect(Collectors.toList()); + for (Path path : list) { + resources.put(path.toFile().getAbsolutePath(), path.toFile().lastModified()); + } + } + return resources; + } + + private Map getDependencies() { + Map dependencies = new HashMap<>(); + for (Artifact d : project.getArtifacts()) { + dependencies.put(d.getGroupId() + ":" + d.getArtifactId(), d.getVersion()); + } + return dependencies; + } +} diff --git a/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/PostTestRunHelperMojo.java b/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/PostTestRunHelperMojo.java new file mode 100644 index 0000000000..5b326f3ddf --- /dev/null +++ b/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/PostTestRunHelperMojo.java @@ -0,0 +1,61 @@ +/* + * Copyright © 2018 European Support Limited + * + * Licensed 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 a "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.openecomp.sdc.onboarding; + +import static org.openecomp.sdc.onboarding.Constants.SKIP_TEST_RUN; +import static org.openecomp.sdc.onboarding.Constants.UNICORN; + +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.plugins.annotations.LifecyclePhase; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.ResolutionScope; +import org.apache.maven.project.MavenProject; + +@Mojo(name = "post-test-run-helper", threadSafe = true, defaultPhase = LifecyclePhase.TEST, + requiresDependencyResolution = ResolutionScope.NONE) +public class PostTestRunHelperMojo extends AbstractMojo { + + @Parameter + private BuildState buildState; + @Parameter(defaultValue = "${project.artifact.groupId}:${project.artifact.artifactId}") + private String moduleCoordinates; + @Parameter(defaultValue = "${project}", readonly = true) + private MavenProject project; + @Parameter + private String excludePackaging; + + + public void execute() throws MojoExecutionException, MojoFailureException { + if (!System.getProperties().containsKey(UNICORN)) { + return; + } + if (project.getPackaging().equals(excludePackaging)) { + return; + } + buildState.saveResourceBuildData(moduleCoordinates); + if (project.getProperties().containsKey(SKIP_TEST_RUN) && !Boolean.valueOf( + project.getProperties().getProperty(SKIP_TEST_RUN))) { + if (!System.getProperties().containsKey("skipTests")) { + buildState.addResourceBuildTime(moduleCoordinates, System.currentTimeMillis()); + } + } + + } +} diff --git a/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/PreCompileHelperMojo.java b/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/PreCompileHelperMojo.java new file mode 100644 index 0000000000..faa3167e37 --- /dev/null +++ b/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/PreCompileHelperMojo.java @@ -0,0 +1,142 @@ +/* + * Copyright © 2018 European Support Limited + * + * Licensed 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 a "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.openecomp.sdc.onboarding; + +import static org.openecomp.sdc.onboarding.Constants.MAIN; +import static org.openecomp.sdc.onboarding.Constants.SKIP_TEST_RUN; +import static org.openecomp.sdc.onboarding.Constants.TEST; +import static org.openecomp.sdc.onboarding.Constants.UNICORN; + +import java.io.File; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.apache.maven.artifact.Artifact; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugins.annotations.LifecyclePhase; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.ResolutionScope; +import org.apache.maven.project.MavenProject; + +@Mojo(name = "pre-compile-helper", threadSafe = true, defaultPhase = LifecyclePhase.GENERATE_SOURCES, + requiresDependencyResolution = ResolutionScope.TEST) +public class PreCompileHelperMojo extends AbstractMojo { + + @Parameter(defaultValue = "${project}", readonly = true) + private MavenProject project; + @Parameter(defaultValue = "${project.artifact.groupId}:${project.artifact.artifactId}") + private String moduleCoordinates; + @Parameter + private String excludePackaging; + @Parameter + private List excludeDependencies; + @Parameter + private File mainCompiledLocation; + @Parameter + private File testCompiledLocation; + @Parameter + private File inputSourceFilesList; + @Parameter + private File inputTestFilesList; + @Parameter + private BuildState buildState; + + public void execute() throws MojoExecutionException { + if (!System.getProperties().containsKey(UNICORN)) { + return; + } + if (project.getPackaging().equals(excludePackaging)) { + return; + } + + Map moduleBuildData = getCurrentModuleBuildData(); + Map lastTimeModuleBuildData = buildState.readModuleBuildData(); + + boolean buildDataSameWithPreviousBuild = lastTimeModuleBuildData.get(MAIN) != null && moduleBuildData.get(MAIN) + .equals(lastTimeModuleBuildData + .get(MAIN)); + boolean isFirstBuild = buildState.getBuildTime(moduleCoordinates) == 0; + + if (isCompileNeeded(HashMap.class.cast(moduleBuildData.get(MAIN)).keySet(), isFirstBuild, + buildDataSameWithPreviousBuild)) { + try { + buildState.markModuleDirty(inputSourceFilesList); + buildState.markModuleDirty(inputTestFilesList); + project.getProperties().setProperty(SKIP_TEST_RUN, "false"); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + if (!moduleBuildData.get(TEST).equals(lastTimeModuleBuildData.get(TEST))) { + try { + buildState.markModuleDirty(inputTestFilesList); + project.getProperties().setProperty(SKIP_TEST_RUN, Boolean.FALSE.toString()); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + if (!moduleBuildData.equals(lastTimeModuleBuildData)) { + buildState.addModuleBuildData(moduleCoordinates, moduleBuildData); + } + + if (inputSourceFilesList.isFile() && inputSourceFilesList.length() == 0) { + if (!inputSourceFilesList.delete()) { + throw new MojoExecutionException( + "****** Please remove 'target' directory manually under path " + project.getBasedir() + .getAbsolutePath()); + } + } + if (inputTestFilesList.isFile() && inputTestFilesList.length() == 0) { + if (!inputTestFilesList.delete()) { + throw new MojoExecutionException( + "****** Please remove 'target' directory manually under path " + project.getBasedir() + .getAbsolutePath()); + } + } + } + + private boolean isCompileNeeded(Collection dependencyCoordinates, boolean isFirstBuild, + boolean buildDataSame) { + return isFirstBuild || !buildDataSame || buildState.isCompileMust(moduleCoordinates, dependencyCoordinates); + } + + private Map getCurrentModuleBuildData() { + Map moduleBuildData = new HashMap<>(); + moduleBuildData.put(MAIN, new HashMap()); + moduleBuildData.put(TEST, new HashMap()); + if (project.getArtifacts() == null || project.getArtifacts().isEmpty()) { + return moduleBuildData; + } + for (Artifact dependency : project.getArtifacts()) { + if (excludeDependencies.contains(dependency.getScope())) { + HashMap.class.cast(moduleBuildData.get(TEST)) + .put(dependency.getGroupId() + ":" + dependency.getArtifactId(), dependency.getVersion()); + continue; + } + HashMap.class.cast(moduleBuildData.get(MAIN)) + .put(dependency.getGroupId() + ":" + dependency.getArtifactId(), dependency.getVersion()); + } + return moduleBuildData; + } +} diff --git a/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/PreTestCompileHelperMojo.java b/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/PreTestCompileHelperMojo.java new file mode 100644 index 0000000000..e711cb0ae7 --- /dev/null +++ b/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/PreTestCompileHelperMojo.java @@ -0,0 +1,90 @@ +/* + * Copyright © 2018 European Support Limited + * + * Licensed 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 a "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.openecomp.sdc.onboarding; + +import static org.openecomp.sdc.onboarding.Constants.JACOCO_SKIP; +import static org.openecomp.sdc.onboarding.Constants.SKIP_TEST_RUN; +import static org.openecomp.sdc.onboarding.Constants.RESOURCES_CHANGED; +import static org.openecomp.sdc.onboarding.Constants.UNICORN; + +import java.io.File; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.util.stream.Collectors; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.plugins.annotations.LifecyclePhase; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.ResolutionScope; +import org.apache.maven.project.MavenProject; + +@Mojo(name = "pre-test-compile-helper", threadSafe = true, defaultPhase = LifecyclePhase.GENERATE_TEST_RESOURCES, + requiresDependencyResolution = ResolutionScope.TEST) +public class PreTestCompileHelperMojo extends AbstractMojo { + + @Parameter + private File compiledFilesList; + @Parameter + private Long staleThreshold; + @Parameter + private File inputTestFilesList; + @Parameter + private BuildState buildState; + @Parameter(defaultValue = "${project}", readonly = true) + private MavenProject project; + @Parameter(defaultValue = "${project.artifact.groupId}:${project.artifact.artifactId}") + private String moduleCoordinates; + @Parameter + private String excludePackaging; + + + public void execute() throws MojoExecutionException, MojoFailureException { + if (!System.getProperties().containsKey(UNICORN)) { + return; + } + if (project.getPackaging().equals(excludePackaging)) { + return; + } + if (compiledFilesList.exists() + && compiledFilesList.lastModified() > System.currentTimeMillis() - staleThreshold) { + try { + buildState.markModuleDirty(inputTestFilesList); + project.getProperties().setProperty(SKIP_TEST_RUN, Boolean.FALSE.toString()); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + boolean isTestMust = buildState.isTestMust(moduleCoordinates, + project.getDependencies().stream().map(d -> d.getGroupId() + ":" + d.getArtifactId()) + .collect(Collectors.toList())); + if (isTestMust) { + project.getProperties().setProperty(RESOURCES_CHANGED, Boolean.TRUE.toString()); + if (!project.getProperties().containsKey(SKIP_TEST_RUN)) { + project.getProperties().setProperty(SKIP_TEST_RUN, Boolean.FALSE.toString()); + } + } + if (!project.getProperties().containsKey(SKIP_TEST_RUN)) { + project.getProperties().setProperty(SKIP_TEST_RUN, Boolean.TRUE.toString()); + } + if (System.getProperties().containsKey(JACOCO_SKIP) && Boolean.FALSE.equals(Boolean.valueOf( + System.getProperties().getProperty(JACOCO_SKIP)))) { + project.getProperties().setProperty(SKIP_TEST_RUN, Boolean.FALSE.toString()); + } + } +} diff --git a/pom.xml b/pom.xml index c84367ccaf..6977b949f1 100644 --- a/pom.xml +++ b/pom.xml @@ -1,158 +1,157 @@ - 4.0.0 - - org.openecomp.sdc - sdc-main - 1.2.0-SNAPSHOT - pom - sdc - - - 1.8 - 1.8 - - - - - -SNAPSHOT - UTF-8 - 74 - - - 3.3.2 - 18.0 - 1.0.0 - 1.2.0 - 1.1.6.RELEASE - 4.3.13.RELEASE - 3.2.3.RELEASE - 2.0.1.RELEASE + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + + org.openecomp.sdc + sdc-main + 1.2.0-SNAPSHOT + pom + sdc + + + 1.8 + 1.8 + + + + + -SNAPSHOT + UTF-8 + 74 + + + 3.3.2 + 18.0 + 1.0.0 + 1.2.0 + 1.1.6.RELEASE + 4.3.13.RELEASE + 3.2.3.RELEASE + 2.0.1.RELEASE 2.26 2.5 - 2.11.0 - - ${project.version} - ${project.version} - 1.1.0 - ${project.version} - - - 2.4.0 - 1.0.0-SNAPSHOT - 1.0.0-SNAPSHOT - 9.2.10.v20150310 - - - 2.9.4 - 2.9.4 - 2.9.4 - - - 1.14 - 4.4 - 4.4.1 - 4.4.1 - 1.1 - - - - + 2.11.0 + + ${project.version} + ${project.version} + 1.1.0 + ${project.version} + + + 2.4.0 + 1.0.0-SNAPSHOT + 1.0.0-SNAPSHOT + 9.2.10.v20150310 + + + 2.9.4 + 2.9.4 + 2.9.4 + + + 1.14 + 4.4 + 4.4.1 + 4.4.1 + 1.1 + + + 1.2.3 1.7.10 1.10 1.2 - 2.4.13 - 3.0.6 + 2.4.13 + 3.0.6 - - 0.20.1 - 1.8.4 - 1.7.4 - 0.13.2 + + 0.20.1 + 1.8.4 + 1.7.4 + 0.13.2 - - - 1.6.4 + + + 1.6.4 - 3.0.3 + 3.0.3 - - 2.3.1 + + 2.3.1 1.1 - - 2.12.0 - 4.12 - 3.8.0 - 6.9.10 - 3.0.3 - 2.3.1 - - - 1.2.3-SNAPSHOT - - - jacoco - java - - ${project.build.sourceEncoding} - ${project.basedir} - ${project.version} - - - 3.0.0 - - nexus - nexus - - - https://nexus.onap.org - /content/sites/site/org/openecomp/sdc/${project.version} - 176c31dfe190a - - yyyyMMdd'T'HHmmss'Z' - - 0.23.0 - - ${project.version}-${maven.build.timestamp} - - - - - - - - org.glassfish.jersey.ext - jersey-bean-validation - ${jersey-bom.version} - - - - org.glassfish.hk2.external - asm-all-repackaged - 2.4.0 - - - - org.assertj - assertj-core - ${assertj.version} - - - - org.mockito - mockito-core - ${mockito.version} - - - - com.github.tomakehurst - wiremock - ${wire-mock.version} - + + 2.12.0 + 4.12 + 3.8.0 + 6.9.10 + 3.0.3 + 2.3.1 + + + 1.2.3-SNAPSHOT + + + jacoco + java + + ${project.build.sourceEncoding} + ${project.basedir} + ${project.version} + + + 3.0.0 + + nexus + nexus + + + https://nexus.onap.org + /content/sites/site/org/openecomp/sdc/${project.version} + 176c31dfe190a + + yyyyMMdd'T'HHmmss'Z' + + 0.23.0 + + ${project.version}-${maven.build.timestamp} + + + + + + + + org.glassfish.jersey.ext + jersey-bean-validation + ${jersey-bom.version} + + + + org.glassfish.hk2.external + asm-all-repackaged + 2.4.0 + + + + org.assertj + assertj-core + ${assertj.version} + + + + org.mockito + mockito-core + ${mockito.version} + + + + com.github.tomakehurst + wiremock + ${wire-mock.version} + io.cucumber @@ -165,318 +164,319 @@ cucumber-junit ${cucumber.version} - - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.0.0-M1 - - false - org.umlgraph.doclet.UmlGraphDoc - - org.umlgraph - umlgraph - 5.6 - - -views - true - - - - - - - - - - - org.apache.maven.plugins - maven-site-plugin - 3.4 - - - org.apache.maven.wagon - wagon-webdav-jackrabbit - 2.10 - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.1.0 - - - - org.codehaus.mojo - exec-maven-plugin - 1.4.0 - - - org.sonarsource.scanner.maven - sonar-maven-plugin - 3.0.2 - - - - - - - - - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.7 - true - - ${nexus.proxy} - ${staging.profile.id} - ecomp-staging - - - - - maven-surefire-plugin - 2.19.1 - - - src/test/resources/logback-test.xml - - - - - - org.codehaus.mojo - build-helper-maven-plugin - 1.8 - - - parse-version - - parse-version - - - - - - - - org.jacoco - jacoco-maven-plugin - 0.7.9 - - - default-prepare-agent - - prepare-agent - - - - default-report - - report - - - - - - - org.apache.maven.plugins - maven-site-plugin - - - org.apache.maven.wagon - wagon-webdav-jackrabbit - 2.10 - - - - - - - org.codehaus.gmaven - gmaven-plugin - 1.4 - - - false - integration-test - - execute - - - - pom.properties['deploy.url']= - pom.version.contains('-SNAPSHOT') ? - project.distributionManagement.snapshotRepository.url : - project.distributionManagement.repository.url; - pom.properties['repo.id']= pom.version.contains('-SNAPSHOT') ? - project.distributionManagement.snapshotRepository.id : - project.distributionManagement.repository.id; - - - - - - - - - org.codehaus.mojo - license-maven-plugin - 1.10 - - false - ============LICENSE_START======================================================= - ============LICENSE_END========================================================= - ================================================================================ - apache_v2 - 2017 - AT&T Intellectual Property. All rights - reserved. - SDC - true - true - true - true - false - - **/*.java - **/*.ts - - - **/*.d.ts - - - src - app - server-mock - typings - - - java - - - - - first - - update-file-header - - - - - - - - - - - all - - true - - - build-tools - onboarding - services/activity-spec - security-utils - common-app-api - common-be - catalog-dao - catalog-model - catalog-be - asdctool - catalog-ui - catalog-fe - test-apis-ci - ui-ci - sdc-os-chef - utils/webseal-simulator - - - - - - catalog - - false - - - security-utils - common-app-api - common-be - catalog-dao - catalog-model - catalog-be - asdctool - catalog-ui - catalog-fe - test-apis-ci - ui-ci - - - - 1.2.7 - 1802.0.1.167 - 1802.0.1.167 - 1802.0.1.167 - 1.1.32 - - - - - onboarding - - false - - - build-tools - onboarding - - - - - - - - - ecomp-releases - Release Repository - ${nexus.proxy}/content/repositories/releases/ - - - ecomp-snapshots - Snapshots Repository - ${nexus.proxy}/content/repositories/snapshots/ - - - ecomp-public - Public Repository - ${nexus.proxy}/content/repositories/public/ - - - - - - - ecomp-releases - Release Repository - ${nexus.proxy}/content/repositories/releases/ - - - ecomp-snapshots - Snapshot Repository - ${nexus.proxy}/content/repositories/snapshots/ - - - ecomp-site - dav:${nexus.proxy}${sitePath} - - + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.0.0-M1 + + false + org.umlgraph.doclet.UmlGraphDoc + + org.umlgraph + umlgraph + 5.6 + + -views + true + + + + + + + + + + + org.apache.maven.plugins + maven-site-plugin + 3.4 + + + org.apache.maven.wagon + wagon-webdav-jackrabbit + 2.10 + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.1.0 + + + + org.codehaus.mojo + exec-maven-plugin + 1.4.0 + + + org.sonarsource.scanner.maven + sonar-maven-plugin + 3.0.2 + + + + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.7 + true + + ${nexus.proxy} + ${staging.profile.id} + ecomp-staging + + + + + maven-surefire-plugin + 2.19.1 + + + src/test/resources/logback-test.xml + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.8 + + + parse-version + + parse-version + + + + + + + + org.jacoco + jacoco-maven-plugin + 0.7.9 + + + default-prepare-agent + + prepare-agent + + + + default-report + + report + + + + + + + org.apache.maven.plugins + maven-site-plugin + + + org.apache.maven.wagon + wagon-webdav-jackrabbit + 2.10 + + + + + + + org.codehaus.gmaven + gmaven-plugin + 1.4 + + + false + integration-test + + execute + + + + pom.properties['deploy.url'] = + pom.version.contains('-SNAPSHOT') ? + project.distributionManagement.snapshotRepository.url : + project.distributionManagement.repository.url; + pom.properties['repo.id'] = pom.version.contains('-SNAPSHOT') ? + project.distributionManagement.snapshotRepository.id : + project.distributionManagement.repository.id; + + + + + + + + + org.codehaus.mojo + license-maven-plugin + 1.10 + + false + ============LICENSE_START======================================================= + ============LICENSE_END========================================================= + ================================================================================ + apache_v2 + 2017 + AT&T Intellectual Property. All rights + reserved. + + SDC + true + true + true + true + false + + **/*.java + **/*.ts + + + **/*.d.ts + + + src + app + server-mock + typings + + + java + + + + + first + + update-file-header + + + + + + + + + + + all + + true + + + build-tools + onboarding + services/activity-spec + security-utils + common-app-api + common-be + catalog-dao + catalog-model + catalog-be + asdctool + catalog-ui + catalog-fe + test-apis-ci + ui-ci + sdc-os-chef + utils/webseal-simulator + + + + + + catalog + + false + + + security-utils + common-app-api + common-be + catalog-dao + catalog-model + catalog-be + asdctool + catalog-ui + catalog-fe + test-apis-ci + ui-ci + + + + 1.2.7 + 1802.0.1.167 + 1802.0.1.167 + 1802.0.1.167 + 1.1.32 + + + + + onboarding + + false + + + build-tools + onboarding + + + + + + + + + ecomp-releases + Release Repository + ${nexus.proxy}/content/repositories/releases/ + + + ecomp-snapshots + Snapshots Repository + ${nexus.proxy}/content/repositories/snapshots/ + + + ecomp-public + Public Repository + ${nexus.proxy}/content/repositories/public/ + + + + + + + ecomp-releases + Release Repository + ${nexus.proxy}/content/repositories/releases/ + + + ecomp-snapshots + Snapshot Repository + ${nexus.proxy}/content/repositories/snapshots/ + + + ecomp-site + dav:${nexus.proxy}${sitePath} + + -- cgit 1.2.3-korg