diff --git a/test/groovy/CommonStepsTest.groovy b/test/groovy/CommonStepsTest.groovy new file mode 100644 index 000000000..a56abcd57 --- /dev/null +++ b/test/groovy/CommonStepsTest.groovy @@ -0,0 +1,75 @@ +import static java.util.stream.Collectors.toList +import static org.hamcrest.Matchers.empty +import static org.hamcrest.Matchers.is +import static org.junit.Assert.assertThat + +import java.lang.reflect.Field + +import org.junit.Assert +import org.junit.Rule +import org.junit.Test +import org.junit.rules.RuleChain + +import groovy.io.FileType +import util.BasePiperTest +import util.Rules + +/* + * Intended for collecting generic checks applied to all steps. + */ +public class CommonStepsTest extends BasePiperTest{ + + @Rule + public RuleChain ruleChain = Rules.getCommonRules(this) + + @Test + public void stepsWithWrongFieldNameTest() { + + def whitelist = ['commonPipelineEnvironment'] + + def stepsWithWrongStepName = [] + + for(def step in getSteps()) { + + if(whitelist.contains(step)) continue + + def script = loadScript("${step}.groovy") + + def fields = script.getClass().getDeclaredFields() as Set + Field stepNameField = fields.find { it.getName() == 'STEP_NAME'} + + if(! stepNameField) { + stepsWithWrongStepName.add(step) + continue + } + + boolean notAccessible = false; + def fieldName + + if(!stepNameField.isAccessible()) { + stepNameField.setAccessible(true) + notAccessible = true + } + + try { + fieldName = stepNameField.get(script) + } finally { + if(notAccessible) stepNameField.setAccessible(false) + } + if(fieldName != step) { + stepsWithWrongStepName.add(step) + } + } + + assertThat("Steps with wrong step name or without STEP_NAME field.: ${stepsWithWrongStepName}", + stepsWithWrongStepName, is(empty())) + } + + private static getSteps() { + List steps = [] + new File('vars').traverse(type: FileType.FILES, maxDepth: 0) + { if(it.getName().endsWith('.groovy')) steps << (it =~ /vars\/(.*)\.groovy/)[0][1] } + return steps + + } +} diff --git a/vars/durationMeasure.groovy b/vars/durationMeasure.groovy index aee5b0e60..74fd5643c 100644 --- a/vars/durationMeasure.groovy +++ b/vars/durationMeasure.groovy @@ -1,3 +1,7 @@ +import groovy.transform.Field + +@Field STEP_NAME = 'durationMeasure' + def call(Map parameters = [:], body) { def script = parameters.script diff --git a/vars/handlePipelineStepErrors.groovy b/vars/handlePipelineStepErrors.groovy index dfc67f267..c4bcbdf0f 100644 --- a/vars/handlePipelineStepErrors.groovy +++ b/vars/handlePipelineStepErrors.groovy @@ -1,3 +1,7 @@ +import groovy.transform.Field + +@Field STEP_NAME = 'handlePipelineStepErrors' + def call(Map parameters = [:], body) { diff --git a/vars/pipelineExecute.groovy b/vars/pipelineExecute.groovy index f0209bd32..21743762d 100644 --- a/vars/pipelineExecute.groovy +++ b/vars/pipelineExecute.groovy @@ -1,5 +1,11 @@ import com.sap.piper.Utils +import groovy.transform.Field + + +@Field STEP_NAME = 'pipelineExecute' + + /** * pipelineExecute * Load and executes a pipeline from another git repository. diff --git a/vars/pipelineStashFiles.groovy b/vars/pipelineStashFiles.groovy index eb2ea5214..9dd0199ef 100644 --- a/vars/pipelineStashFiles.groovy +++ b/vars/pipelineStashFiles.groovy @@ -1,3 +1,7 @@ +import groovy.transform.Field + +@Field STEP_NAME = 'pipelineStashFiles' + def call(Map parameters = [:], body) { handlePipelineStepErrors (stepName: 'pipelineStashFiles', stepParameters: parameters) { pipelineStashFilesBeforeBuild(parameters) diff --git a/vars/prepareDefaultValues.groovy b/vars/prepareDefaultValues.groovy index 35bd1478a..63839341f 100644 --- a/vars/prepareDefaultValues.groovy +++ b/vars/prepareDefaultValues.groovy @@ -1,6 +1,10 @@ import com.sap.piper.DefaultValueCache import com.sap.piper.MapUtils +import groovy.transform.Field + +@Field STEP_NAME = 'prepareDefaultValues' + def call(Map parameters = [:]) { handlePipelineStepErrors (stepName: 'prepareDefaultValues', stepParameters: parameters) { if(!DefaultValueCache.getInstance() || parameters.customDefaults) { diff --git a/vars/toolValidate.groovy b/vars/toolValidate.groovy index eb840e060..562b9ed56 100644 --- a/vars/toolValidate.groovy +++ b/vars/toolValidate.groovy @@ -3,8 +3,11 @@ import com.sap.piper.Version import com.sap.piper.tools.JavaArchiveDescriptor import com.sap.piper.tools.ToolDescriptor +import groovy.transform.Field + import hudson.AbortException +@Field STEP_NAME = 'toolValidate' def call(Map parameters = [:]) {