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/InfluxWriteDataTest.groovy
Marcus Holl fd568c9174
do not swallow exception triggered inside SWA handling (#1839)
* do not swallow exception triggered inside SWA handling

--> write it to the log

The real change is in src/com/sap/piper/Utils.groovy
All the changes in the tests are dealing with mocking the echo method
used in the Utils class mentioned above.
2020-09-24 13:47:20 +02:00

214 lines
7.0 KiB
Groovy

import com.sap.piper.DefaultValueCache
import com.sap.piper.JenkinsUtils
import com.sap.piper.analytics.InfluxData
import com.sap.piper.Utils
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.RuleChain
import util.BasePiperTest
import util.JenkinsLoggingRule
import util.JenkinsStepRule
import util.JenkinsReadYamlRule
import util.Rules
import static org.hamcrest.Matchers.allOf
import static org.hamcrest.Matchers.containsString
import static org.hamcrest.Matchers.hasKey
import static org.hamcrest.Matchers.hasValue
import static org.hamcrest.Matchers.is
import static org.hamcrest.Matchers.isEmptyOrNullString
import static org.junit.Assert.assertThat
import static org.junit.Assert.assertTrue
import static org.junit.Assert.assertEquals
class InfluxWriteDataTest extends BasePiperTest {
public JenkinsLoggingRule loggingRule = new JenkinsLoggingRule(this)
private JenkinsStepRule stepRule = new JenkinsStepRule(this)
@Rule
public RuleChain ruleChain = Rules
.getCommonRules(this)
.around(new JenkinsReadYamlRule(this))
.around(loggingRule)
.around(stepRule)
Map fileMap = [:]
Map stepMap = [:]
String echoLog = ''
String influxVersion
class JenkinsUtilsMock extends JenkinsUtils {
String getPluginVersion(name) {
return influxVersion
}
}
@Before
void init() throws Exception {
// Currently we have dependencies between the tests since
// DefaultValueCache is a singleton which keeps its status
// for all the tests. Depending on the test order we fail.
// As long as this status remains we need:
DefaultValueCache.reset()
//reset stepMap
stepMap = [:]
//reset fileMap
fileMap = [:]
influxVersion = '1.15'
helper.registerAllowedMethod('readYaml', [Map.class], { map ->
return [
general: [productiveBranch: 'develop'],
steps : [influxWriteData: [influxServer: 'testInflux']]
]
})
helper.registerAllowedMethod('writeFile', [Map.class],{m -> fileMap[m.file] = m.text})
helper.registerAllowedMethod('step', [Map.class],{m -> stepMap = m})
helper.registerAllowedMethod('influxDbPublisher', [Map.class],{m -> stepMap = m})
Utils.metaClass.echo = { def m -> }
}
@After
void teadDown() {
Utils.metaClass = null
}
@Test
void testInfluxWriteDataWithDefault() throws Exception {
nullScript.commonPipelineEnvironment.setArtifactVersion('1.2.3')
stepRule.step.influxWriteData(
script: nullScript,
jenkinsUtilsStub: new JenkinsUtilsMock(),
)
assertThat(loggingRule.log, containsString('Artifact version: 1.2.3'))
assertThat(stepMap.selectedTarget, is('testInflux'))
assertThat(stepMap.customPrefix, isEmptyOrNullString())
assertThat(stepMap.customData, isEmptyOrNullString())
assertThat(stepMap.customDataMap, is([pipeline_data: [:], step_data: [:]]))
assertThat(fileMap, hasKey('jenkins_data.json'))
assertThat(fileMap, hasKey('influx_data.json'))
assertThat(fileMap, hasKey('jenkins_data_tags.json'))
assertThat(fileMap, hasKey('influx_data_tags.json'))
assertThat(stepMap['$class'], is('InfluxDbPublisher'))
assertJobStatusSuccess()
}
@Test
void testInfluxWriteDataNoInflux() throws Exception {
nullScript.commonPipelineEnvironment.setArtifactVersion('1.2.3')
stepRule.step.influxWriteData(script: nullScript, influxServer: '')
assertEquals(0, stepMap.size())
assertTrue(fileMap.containsKey('jenkins_data.json'))
assertTrue(fileMap.containsKey('influx_data.json'))
assertJobStatusSuccess()
}
@Test
void testInfluxWriteDataNoArtifactVersion() throws Exception {
stepRule.step.influxWriteData(script: nullScript)
assertEquals(0, stepMap.size())
assertEquals(0, fileMap.size())
assertTrue(loggingRule.log.contains('no artifact version available -> exiting writeInflux without writing data'))
assertJobStatusSuccess()
}
@Test
void testInfluxWriteDataWrapInNode() throws Exception {
boolean nodeCalled = false
helper.registerAllowedMethod('node', [String.class, Closure.class]) {s, body ->
nodeCalled = true
return body()
}
helper.registerAllowedMethod("deleteDir", [], null)
nullScript.commonPipelineEnvironment.setArtifactVersion('1.2.3')
stepRule.step.influxWriteData(
script: nullScript,
jenkinsUtilsStub: new JenkinsUtilsMock(),
wrapInNode: true
)
assertThat(nodeCalled, is(true))
}
@Test
void testInfluxCustomData() {
nullScript.commonPipelineEnvironment.setArtifactVersion('1.2.3')
stepRule.step.influxWriteData(
//juStabUtils: utils,
script: nullScript,
jenkinsUtilsStub: new JenkinsUtilsMock(),
influxServer: 'myInstance',
customData: [key1: 'test1'],
customDataTags: [tag1: 'testTag1'],
customDataMap: [test_data: [key1: 'keyValue1']],
customDataMapTags: [test_data: [tag1: 'tagValue1']]
)
assertThat(stepMap.customData, allOf(hasKey('key1'), hasValue('test1')))
assertThat(stepMap.customDataTags, allOf(hasKey('tag1'), hasValue('testTag1')))
assertThat(stepMap.customDataMap, hasKey('test_data'))
assertThat(stepMap.customDataMapTags, hasKey('test_data'))
}
@Test
void testInfluxCustomDataFromCPE() {
nullScript.commonPipelineEnvironment.reset()
nullScript.commonPipelineEnvironment.setArtifactVersion('1.2.3')
InfluxData.addTag('jenkins_custom_data', 'tag1', 'testTag1')
InfluxData.addField('test_data', 'key1', 'keyValue1')
InfluxData.addTag('test_data', 'tag1', 'tagValue1')
stepRule.step.influxWriteData(
jenkinsUtilsStub: new JenkinsUtilsMock(),
script: nullScript,
influxServer: 'myInstance'
)
assertThat(stepMap.customData, isEmptyOrNullString())
assertThat(stepMap.customDataTags, allOf(hasKey('tag1'), hasValue('testTag1')))
assertThat(stepMap.customDataMap, hasKey('test_data'))
assertThat(stepMap.customDataMapTags, hasKey('test_data'))
}
@Test
void testInfluxWriteDataPluginVersion2() {
nullScript.commonPipelineEnvironment.setArtifactVersion('1.2.3')
influxVersion = '2.0'
stepRule.step.influxWriteData(
script: nullScript,
jenkinsUtilsStub: new JenkinsUtilsMock(),
)
assertThat(loggingRule.log, containsString('Artifact version: 1.2.3'))
assertThat(stepMap.selectedTarget, is('testInflux'))
assertThat(stepMap.customPrefix, isEmptyOrNullString())
assertThat(stepMap['$class'], isEmptyOrNullString())
}
}