1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-16 11:09:33 +02:00
sap-jenkins-library/test/groovy/PrepareDefaultValuesTest.groovy
Kevin Hudemann d7985dd1b5
Enable use of customDefaults from Project Config also in Groovy (#1521)
This change enables the setupCommonPipelineEnvironment step to handle
custom default configurations defined in customDefaults parameter of the
project configuration.

Previously, only the getConfig Go step was able to incorporate custom
default configurations.

Update documentation on custom defaults and sharing between projects.

Co-authored-by: Stephan Aßmus <stephan.assmus@sap.com>
2020-05-12 13:50:18 +02:00

127 lines
4.6 KiB
Groovy

import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.ExpectedException
import org.junit.rules.RuleChain
import com.sap.piper.DefaultValueCache
import util.BasePiperTest
import util.JenkinsLoggingRule
import util.JenkinsReadYamlRule
import util.JenkinsStepRule
import util.Rules
public class PrepareDefaultValuesTest extends BasePiperTest {
private JenkinsStepRule stepRule = new JenkinsStepRule(this)
private JenkinsLoggingRule loggingRule = new JenkinsLoggingRule(this)
private ExpectedException thrown = ExpectedException.none()
@Rule
public RuleChain ruleChain = Rules
.getCommonRules(this)
.around(new JenkinsReadYamlRule(this))
.around(thrown)
.around(stepRule)
.around(loggingRule)
@Before
public void setup() {
helper.registerAllowedMethod("libraryResource", [String], { fileName ->
switch (fileName) {
case 'default_pipeline_environment.yml': return "default: 'config'"
case 'custom.yml': return "custom: 'myConfig'"
case 'not_found': throw new hudson.AbortException('No such library resource not_found could be found')
default: return "the:'end'"
}
})
}
@Test
public void testDefaultPipelineEnvironmentOnly() {
stepRule.step.prepareDefaultValues(script: nullScript)
assert DefaultValueCache.getInstance().getDefaultValues().size() == 1
assert DefaultValueCache.getInstance().getDefaultValues().default == 'config'
}
@Test
public void testReInitializeOnCustomConfig() {
def instance = DefaultValueCache.createInstance([key:'value'])
// existing instance is dropped in case a custom config is provided.
stepRule.step.prepareDefaultValues(script: nullScript, customDefaults: 'custom.yml')
// this check is for checking we have another instance
assert ! instance.is(DefaultValueCache.getInstance())
// some additional checks that the configuration represented by the new
// config is fine
assert DefaultValueCache.getInstance().getDefaultValues().size() == 2
assert DefaultValueCache.getInstance().getDefaultValues().default == 'config'
assert DefaultValueCache.getInstance().getDefaultValues().custom == 'myConfig'
}
@Test
public void testNoReInitializeWithoutCustomConfig() {
def instance = DefaultValueCache.createInstance([key:'value'])
stepRule.step.prepareDefaultValues(script: nullScript)
assert instance.is(DefaultValueCache.getInstance())
assert DefaultValueCache.getInstance().getDefaultValues().size() == 1
assert DefaultValueCache.getInstance().getDefaultValues().key == 'value'
}
@Test
public void testAttemptToLoadNonExistingConfigFile() {
// Behavior documented here based on reality check
thrown.expect(hudson.AbortException.class)
thrown.expectMessage('No such library resource not_found could be found')
stepRule.step.prepareDefaultValues(script: nullScript, customDefaults: 'not_found')
}
@Test
public void testDefaultPipelineEnvironmentWithCustomConfigReferencedAsString() {
stepRule.step.prepareDefaultValues(script: nullScript, customDefaults: 'custom.yml')
assert DefaultValueCache.getInstance().getDefaultValues().size() == 2
assert DefaultValueCache.getInstance().getDefaultValues().default == 'config'
assert DefaultValueCache.getInstance().getDefaultValues().custom == 'myConfig'
}
@Test
public void testDefaultPipelineEnvironmentWithCustomConfigReferencedAsList() {
stepRule.step.prepareDefaultValues(script: nullScript, customDefaults: ['custom.yml'])
assert DefaultValueCache.getInstance().getDefaultValues().size() == 2
assert DefaultValueCache.getInstance().getDefaultValues().default == 'config'
assert DefaultValueCache.getInstance().getDefaultValues().custom == 'myConfig'
}
@Test
public void testAssertNoLogMessageInCaseOfNoAdditionalConfigFiles() {
stepRule.step.prepareDefaultValues(script: nullScript)
assert ! loggingRule.log.contains("Loading configuration file 'default_pipeline_environment.yml'")
}
@Test
public void testAssertLogMessageInCaseOfMoreThanOneConfigFile() {
stepRule.step.prepareDefaultValues(script: nullScript, customDefaults: ['custom.yml'])
assert loggingRule.log.contains("Loading configuration file 'default_pipeline_environment.yml'")
assert loggingRule.log.contains("Loading configuration file 'custom.yml'")
}
}