1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-12 10:55:20 +02:00
sap-jenkins-library/test/groovy/CheckForLegacyConfigurationTest.groovy

437 lines
20 KiB
Groovy

import com.sap.piper.DefaultValueCache
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.ExpectedException
import org.junit.rules.RuleChain
import util.BasePiperTest
import util.JenkinsStepRule
import util.Rules
import static org.junit.Assert.assertEquals
class CheckForLegacyConfigurationTest extends BasePiperTest {
private ExpectedException thrown = ExpectedException.none()
private JenkinsStepRule stepRule = new JenkinsStepRule(this)
String echoOutput = ""
@Rule
public RuleChain ruleChain = Rules
.getCommonRules(this)
.around(thrown)
.around(stepRule)
@Before
void init() {
DefaultValueCache.createInstance([
steps: [
customStep: [
param: 'test'
]
]
])
helper.registerAllowedMethod('addBadge', [Map], {return})
helper.registerAllowedMethod('createSummary', [Map], {return})
helper.registerAllowedMethod("echo", [String.class], { s ->
if (echoOutput) {
echoOutput += "\n"
}
echoOutput += s
})
helper.registerAllowedMethod('findFiles', [Map], {m ->
if(m.glob == '**/package.json') {
return [new File("package.json")].toArray()
} else {
return []
}
})
helper.registerAllowedMethod('readJSON', [Map], { m ->
if (m.file.contains('package.json')) {
return [scripts: [oldNpmScriptName: "echo test",
npmScript2: "echo test"]]
} else {
return [:]
}
})
}
@Test
void testCheckForRemovedConfigKeys() {
nullScript.commonPipelineEnvironment.configuration = [steps: [someStep: [oldConfigKey: false]]]
Map configChanges = [oldConfigKey: [steps: ['someStep'], customMessage: "test"]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForRemovedOrReplacedConfigKeys(nullScript, configChanges)
assertEquals(errors, ["Your pipeline configuration contains the configuration key oldConfigKey for the step someStep. " +
"This configuration option was removed. test"])
}
@Test
void testCheckForReplacedConfigKeys() {
nullScript.commonPipelineEnvironment.configuration = [steps: [someStep: [oldConfigKey: false]]]
Map configChanges = [oldConfigKey: [steps: ['someStep'], newConfigKey: "newConfigKey", customMessage: "test"]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForRemovedOrReplacedConfigKeys(nullScript, configChanges)
assertEquals(errors, ["Your pipeline configuration contains the configuration key oldConfigKey for the step someStep. " +
"This configuration option was removed. Please use the parameter newConfigKey instead. test"])
}
@Test
void testCheckForRemovedConfigKeysWithWarning() {
String expectedWarning = "[WARNING] Your pipeline configuration contains the configuration key oldConfigKey for the step someStep. " +
"This configuration option was removed. test"
nullScript.commonPipelineEnvironment.configuration = [steps: [someStep: [oldConfigKey: false]]]
Map configChanges = [oldConfigKey: [steps: ['someStep'], warnInsteadOfError: true, customMessage: "test"]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForRemovedOrReplacedConfigKeys(nullScript, configChanges)
assertEquals(expectedWarning, echoOutput)
assertEquals(errors, [])
}
@Test
void testCheckForRemovedStageConfigKeys() {
nullScript.commonPipelineEnvironment.configuration = [stages: [someStage: [oldConfigKey: false]]]
Map configChanges = [oldConfigKey: [stages: ['someStage']]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForRemovedOrReplacedConfigKeys(nullScript, configChanges)
assertEquals(errors, ["Your pipeline configuration contains the configuration key oldConfigKey for the stage someStage. " +
"This configuration option was removed. "])
}
@Test
void testCheckForRemovedGeneralConfigKeys() {
nullScript.commonPipelineEnvironment.configuration = [general: [oldConfigKey: false]]
Map configChanges = [oldConfigKey: [general: true]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForRemovedOrReplacedConfigKeys(nullScript, configChanges)
assertEquals(errors, ["Your pipeline configuration contains the configuration key oldConfigKey in the general section. " +
"This configuration option was removed. "])
}
@Test
void testCheckForRemovedPostActionConfigKeys() {
nullScript.commonPipelineEnvironment.configuration = [postActions: [oldConfigKey: false]]
Map configChanges = [oldConfigKey: [postAction: true]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForRemovedOrReplacedConfigKeys(nullScript, configChanges)
assertEquals(errors, ["Your pipeline configuration contains the configuration key oldConfigKey in the postActions section. " +
"This configuration option was removed. "])
}
@Test
void testCheckForMissingConfigKeys() {
nullScript.commonPipelineEnvironment.configuration = [steps: [someStep: [:]]]
Map configChanges = [importantConfigKey: [steps: ['someStep'], customMessage: "test"]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForMissingConfigKeys(nullScript, configChanges)
assertEquals(errors, ["Your pipeline configuration does not contain the configuration key importantConfigKey for the step someStep. test"])
}
@Test
void testCheckForMissingConfigKeysWithWarning() {
String expectedWarning = "[WARNING] Your pipeline configuration does not contain the configuration key importantConfigKey for the step someStep. test"
nullScript.commonPipelineEnvironment.configuration = [steps: [someStep: [:]]]
Map configChanges = [importantConfigKey: [steps: ['someStep'], warnInsteadOfError: true, customMessage: "test"]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForMissingConfigKeys(nullScript, configChanges)
assertEquals(expectedWarning, echoOutput)
assertEquals(errors, [])
}
@Test
void testCheckForMissingStageConfigKeys() {
nullScript.commonPipelineEnvironment.configuration = [stages: [someStage: [:]]]
Map configChanges = [importantConfigKey: [stages: ['someStage']]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForMissingConfigKeys(nullScript, configChanges)
assertEquals(errors, ["Your pipeline configuration does not contain the configuration key importantConfigKey for the stage someStage. "])
}
@Test
void testCheckForMissingGeneralConfigKeys() {
nullScript.commonPipelineEnvironment.configuration = [general: [:]]
Map configChanges = [importantConfigKey: [general: true]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForMissingConfigKeys(nullScript, configChanges)
assertEquals(errors, ["Your pipeline configuration does not contain the configuration key importantConfigKey in the general section. "])
}
@Test
void testCheckForPresentGeneralConfigKeys() {
nullScript.commonPipelineEnvironment.configuration = [general: [importantConfigKey: 'isPresent']]
Map configChanges = [importantConfigKey: [general: true]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForMissingConfigKeys(nullScript, configChanges)
assertEquals(errors, [])
}
@Test
void testCheckForMissingPostActionConfigKeys() {
nullScript.commonPipelineEnvironment.configuration = [postActions: [:]]
Map configChanges = [importantConfigKey: [postAction: true]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForMissingConfigKeys(nullScript, configChanges)
assertEquals(errors, ["Your pipeline configuration does not contain the configuration key importantConfigKey in the postActions section. "])
}
@Test
void testCheckForReplacedStep() {
String oldStep = "oldStep"
nullScript.commonPipelineEnvironment.configuration = [steps: [oldStep: [configKey: false]]]
Map configChanges = [oldStep: [newStepName: 'newStep', customMessage: "test"]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForRemovedOrReplacedSteps(nullScript, configChanges)
assertEquals(errors, ["Your pipeline configuration contains configuration for the step $oldStep. " +
"This step has been removed. Please configure the step newStep instead. test"])
}
@Test
void testCheckForRemovedStep() {
String oldStep = "oldStep"
nullScript.commonPipelineEnvironment.configuration = [steps: [oldStep: [configKey: false]]]
Map configChanges = [oldStep: [customMessage: "test"]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForRemovedOrReplacedSteps(nullScript, configChanges)
assertEquals(errors, ["Your pipeline configuration contains configuration for the step $oldStep. " +
"This step has been removed. test"])
}
@Test
void testCheckForRemovedStepOnlyProjectConfig() {
DefaultValueCache.createInstance([
steps: [
oldStep: [
configKey: false
]
]
])
nullScript.commonPipelineEnvironment.configuration = [steps: [newStep: [configKey: false]]]
Map configChanges = [oldStep: [onlyCheckProjectConfig: true]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForRemovedOrReplacedSteps(nullScript, configChanges)
assertEquals(errors, [])
}
@Test
void testCheckForReplacedStage() {
String oldStage = "oldStage"
nullScript.commonPipelineEnvironment.configuration = [stages: [oldStage: [configKey: false]]]
Map configChanges = [oldStage: [newStageName: 'newStage', customMessage: "test"]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForRemovedOrReplacedStages(nullScript, configChanges)
assertEquals(errors, ["Your pipeline configuration contains configuration for the stage $oldStage. " +
"This stage has been removed. Please configure the stage newStage instead. test"])
}
@Test
void testCheckForRemovedStage() {
String oldStage = "oldStage"
nullScript.commonPipelineEnvironment.configuration = [stages: [oldStage: [configKey: false]]]
Map configChanges = [oldStage: []]
List errors = stepRule.step.checkForLegacyConfiguration.checkForRemovedOrReplacedStages(nullScript, configChanges)
assertEquals(errors, ["Your pipeline configuration contains configuration for the stage $oldStage. " +
"This stage has been removed. "])
}
@Test
void testCheckForStageParameterTypeChanged() {
String stageName = "productionDeployment"
nullScript.commonPipelineEnvironment.configuration = [stages: [productionDeployment: [configKeyOldType: "string"]]]
Map configChanges = [configKeyOldType: [oldType: "String", newType: "List", stages: ["productionDeployment", "endToEndTests"], customMessage: "test"]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForParameterTypeChanged(nullScript, configChanges)
assertEquals(errors, ["Your pipeline configuration contains the configuration key configKeyOldType for the stage $stageName. " +
"The type of this configuration parameter was changed from String to List. test"])
}
@Test
void testCheckForStepParameterTypeChanged() {
String stepName = "testStep"
nullScript.commonPipelineEnvironment.configuration = [steps: [testStep: [configKeyOldType: "string"]]]
Map configChanges = [configKeyOldType: [oldType: "String", newType: "List", steps: ["testStep"], customMessage: "test"]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForParameterTypeChanged(nullScript, configChanges)
assertEquals(errors, ["Your pipeline configuration contains the configuration key configKeyOldType for the step $stepName. " +
"The type of this configuration parameter was changed from String to List. test"])
}
@Test
void testCheckForGeneralParameterTypeChanged() {
String key = "configKeyOldType"
nullScript.commonPipelineEnvironment.configuration = [general: [configKeyOldType: "string"]]
Map configChanges = [configKeyOldType: [oldType: "String", newType: "List", general: true, customMessage: "test"]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForParameterTypeChanged(nullScript, configChanges)
assertEquals(errors, ["Your pipeline configuration contains the configuration key $key in the general section. " +
"The type of this configuration parameter was changed from String to List. test"])
}
@Test
void testCheckForUnsupportedParameterTypeChanged() {
String expectedWarning = "Your legacy config settings contain an entry for parameterTypeChanged with the key configKeyOldType with the unsupported type Map. " +
"Currently only the type 'String' is supported."
nullScript.commonPipelineEnvironment.configuration = [steps: [testStep: [configKeyOldType: [test: true]]]]
Map configChanges = [configKeyOldType: [oldType: "Map", newType: "List", steps: ["testStep"], customMessage: "test"]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForParameterTypeChanged(nullScript, configChanges)
assertEquals(expectedWarning, errors[0].toString())
}
@Test
void testCheckForRenamedNpmScripts() {
Map configChanges = [oldNpmScriptName: [newScriptName: "newNpmScriptName", customMessage: "test"]]
List errors = stepRule.step.checkForLegacyConfiguration.checkForRenamedNpmScripts(nullScript, configChanges)
assertEquals(errors, ["Your package.json file package.json contains an npm script using the deprecated name oldNpmScriptName. " +
"Please rename the script to newNpmScriptName, since the script oldNpmScriptName will not be executed by the pipeline anymore. test"])
}
@Test
void testCheckForRenamedNpmScriptsWithWarning() {
Map configChanges = [oldNpmScriptName: [newScriptName: "newNpmScriptName", warnInsteadOfError: true, customMessage: "test"]]
String expectedWarning = "[WARNING] Your package.json file package.json contains an npm script using the deprecated name oldNpmScriptName. " +
"Please rename the script to newNpmScriptName, since the script oldNpmScriptName will not be executed by the pipeline anymore. test"
stepRule.step.checkForLegacyConfiguration.checkForRenamedNpmScripts(nullScript, configChanges)
assertEquals(expectedWarning, echoOutput)
}
@Test
void testCheckConfigurationRemovedOrReplacedConfigKeys() {
nullScript.commonPipelineEnvironment.configuration = [steps: [someStep: [oldConfigKey: false]]]
Map configChanges = [
removedOrReplacedConfigKeys: [
oldConfigKey: [
steps: ['someStep'],
customMessage: "test"
]
]
]
String exception = "Your pipeline configuration contains the configuration key oldConfigKey for the step someStep. This configuration option was removed. test\n" +
"Failing pipeline due to configuration errors. Please see log output above."
String output = ""
assertExceptionAndOutput(exception, output) {
stepRule.step.checkForLegacyConfiguration(script: nullScript, legacyConfigSettings: configChanges)
}
}
@Test
void testCheckConfigurationRemovedOrReplacedSteps() {
nullScript.commonPipelineEnvironment.configuration = [steps: [oldStep: [configKey: false]]]
Map configChanges = [
removedOrReplacedSteps: [
oldStep: [
newStepName: 'newStep',
customMessage: "test"
]
]
]
String exception = "Your pipeline configuration contains configuration for the step oldStep. This step has been removed. Please configure the step newStep instead. test\n" +
"Failing pipeline due to configuration errors. Please see log output above."
String output = ""
assertExceptionAndOutput(exception, output) {
stepRule.step.checkForLegacyConfiguration(script: nullScript, legacyConfigSettings: configChanges)
}
}
@Test
void testCheckConfigurationRemovedOrReplacedStages() {
nullScript.commonPipelineEnvironment.configuration = [stages: [oldStage: [configKey: false]]]
Map configChanges = [
removedOrReplacedStages: [
oldStage: []
]
]
String exception = "Your pipeline configuration contains configuration for the stage oldStage. This stage has been removed. \n" +
"Failing pipeline due to configuration errors. Please see log output above."
String output = ""
assertExceptionAndOutput(exception, output) {
stepRule.step.checkForLegacyConfiguration(script: nullScript, legacyConfigSettings: configChanges)
}
}
@Test
void testCheckConfigurationParameterTypeChanged() {
nullScript.commonPipelineEnvironment.configuration = [steps: [testStep: [configKeyOldType: "string"]]]
Map configChanges = [
parameterTypeChanged: [
configKeyOldType: [
oldType: "String",
newType: "List",
steps: ["testStep"],
customMessage: "test"]
]
]
String exception = "Your pipeline configuration contains the configuration key configKeyOldType for the step testStep. The type of this configuration parameter was changed from String to List. test\n" +
"Failing pipeline due to configuration errors. Please see log output above."
String output = ""
assertExceptionAndOutput(exception, output) {
stepRule.step.checkForLegacyConfiguration(script: nullScript, legacyConfigSettings: configChanges)
}
}
@Test
void testCheckConfigurationRenamedNpmScript() {
Map configChanges = [
renamedNpmScript: [
oldNpmScriptName: [
newScriptName: "newNpmScriptName",
customMessage: "test"]
]
]
String exception = "Your package.json file package.json contains an npm script using the deprecated name oldNpmScriptName. Please rename the script to newNpmScriptName, since the script oldNpmScriptName will not be executed by the pipeline anymore. test\n" +
"Failing pipeline due to configuration errors. Please see log output above."
String output = ""
assertExceptionAndOutput(exception, output) {
stepRule.step.checkForLegacyConfiguration(script: nullScript, legacyConfigSettings: configChanges)
}
}
private void assertExceptionAndOutput(String exception, String output, Closure body) {
String actualException = ""
try {
body()
} catch (Exception e) {
actualException = e.getMessage()
}
assertEquals(exception, actualException)
assertEquals(output, echoOutput)
}
}