1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-14 11:03:09 +02:00
sap-jenkins-library/test/groovy/ChecksPublishResultsTest.groovy
2019-11-12 15:49:02 +01:00

280 lines
17 KiB
Groovy

import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.RuleChain
import com.sap.piper.CommonPipelineEnvironment
import org.junit.Ignore
import util.BasePiperTest
import static org.junit.Assert.assertEquals
import static org.junit.Assert.assertTrue
import util.Rules
import util.JenkinsReadYamlRule
import util.JenkinsStepRule
class ChecksPublishResultsTest extends BasePiperTest {
Map publisherStepOptions
List archiveStepPatterns
private JenkinsStepRule stepRule = new JenkinsStepRule(this)
@Rule
public RuleChain ruleChain = Rules
.getCommonRules(this)
.around(new JenkinsReadYamlRule(this))
.around(stepRule)
@Before
void init() {
publisherStepOptions = [:]
archiveStepPatterns = []
// add handler for generic step call
helper.registerAllowedMethod("step", [Map.class], {
parameters -> publisherStepOptions[parameters.$class] = parameters
})
helper.registerAllowedMethod("archiveArtifacts", [Map.class], {
parameters -> archiveStepPatterns.push(parameters.artifacts)
})
}
@Test
void testPublishWithDefaultSettings() throws Exception {
stepRule.step.checksPublishResults(script: nullScript)
assertTrue("AnalysisPublisher options not set", publisherStepOptions['AnalysisPublisher'] != null)
// ensure nothing else is published
assertTrue("WarningsPublisher options not empty", publisherStepOptions['WarningsPublisher'] == null)
assertTrue("PmdPublisher options not empty", publisherStepOptions['PmdPublisher'] == null)
assertTrue("DryPublisher options not empty", publisherStepOptions['DryPublisher'] == null)
assertTrue("FindBugsPublisher options not empty", publisherStepOptions['FindBugsPublisher'] == null)
assertTrue("CheckStylePublisher options not empty", publisherStepOptions['CheckStylePublisher'] == null)
}
@Test
void testPublishForJavaWithDefaultSettings() throws Exception {
stepRule.step.checksPublishResults(script: nullScript, pmd: true, cpd: true, findbugs: true, checkstyle: true)
assertTrue("AnalysisPublisher options not set", publisherStepOptions['AnalysisPublisher'] != null)
assertTrue("PmdPublisher options not set", publisherStepOptions['PmdPublisher'] != null)
assertTrue("DryPublisher options not set", publisherStepOptions['DryPublisher'] != null)
assertTrue("FindBugsPublisher options not set", publisherStepOptions['FindBugsPublisher'] != null)
assertTrue("CheckStylePublisher options not set", publisherStepOptions['CheckStylePublisher'] != null)
// ensure default patterns are set
assertEquals("PmdPublisher default pattern not set", '**/target/pmd.xml', publisherStepOptions['PmdPublisher']['pattern'])
assertEquals("DryPublisher default pattern not set", '**/target/cpd.xml', publisherStepOptions['DryPublisher']['pattern'])
assertEquals("FindBugsPublisher default pattern not set", '**/target/findbugsXml.xml, **/target/findbugs.xml', publisherStepOptions['FindBugsPublisher']['pattern'])
assertEquals("CheckStylePublisher default pattern not set", '**/target/checkstyle-result.xml', publisherStepOptions['CheckStylePublisher']['pattern'])
// ensure nothing else is published
assertTrue("WarningsPublisher options not empty", publisherStepOptions['WarningsPublisher'] == null)
}
@Test
void testPublishForJavaScriptWithDefaultSettings() throws Exception {
stepRule.step.checksPublishResults(script: nullScript, eslint: true)
assertTrue("AnalysisPublisher options not set", publisherStepOptions['AnalysisPublisher'] != null)
assertTrue("WarningsPublisher options not set", publisherStepOptions['WarningsPublisher'] != null)
assertTrue("WarningsPublisher parser configuration number not correct", publisherStepOptions['WarningsPublisher']['parserConfigurations'].size() == 1)
// ensure correct parser is set set
assertEquals("ESLint parser not correct", 'JSLint', publisherStepOptions['WarningsPublisher']['parserConfigurations'][0]['parserName'])
// ensure default patterns are set
assertEquals("ESLint default pattern not set", '**/eslint.xml', publisherStepOptions['WarningsPublisher']['parserConfigurations'][0]['pattern'])
// ensure nothing else is published
assertTrue("PmdPublisher options not empty", publisherStepOptions['PmdPublisher'] == null)
assertTrue("DryPublisher options not empty", publisherStepOptions['DryPublisher'] == null)
assertTrue("FindBugsPublisher options not empty", publisherStepOptions['FindBugsPublisher'] == null)
assertTrue("CheckStylePublisher options not empty", publisherStepOptions['CheckStylePublisher'] == null)
}
@Test
void testPublishForPythonWithDefaultSettings() throws Exception {
stepRule.step.checksPublishResults(script: nullScript, pylint: true)
assertTrue("AnalysisPublisher options not set", publisherStepOptions['AnalysisPublisher'] != null)
assertTrue("WarningsPublisher options not set", publisherStepOptions['WarningsPublisher'] != null)
assertTrue("WarningsPublisher parser configuration number not correct", publisherStepOptions['WarningsPublisher']['parserConfigurations'].size() == 1)
assertEquals('PyLint', publisherStepOptions['WarningsPublisher']['parserConfigurations'][0]['parserName'])
// ensure correct parser is set set
assertEquals("PyLint parser not correct", 'PyLint', publisherStepOptions['WarningsPublisher']['parserConfigurations'][0]['parserName'])
// ensure default patterns are set
assertEquals("PyLint default pattern not set", '**/pylint.log', publisherStepOptions['WarningsPublisher']['parserConfigurations'][0]['pattern'])
// ensure nothing else is published
assertTrue("PmdPublisher options not empty", publisherStepOptions['PmdPublisher'] == null)
assertTrue("DryPublisher options not empty", publisherStepOptions['DryPublisher'] == null)
assertTrue("FindBugsPublisher options not empty", publisherStepOptions['FindBugsPublisher'] == null)
assertTrue("CheckStylePublisher options not empty", publisherStepOptions['CheckStylePublisher'] == null)
}
@Test
void testPublishNothing() throws Exception {
stepRule.step.checksPublishResults(script: nullScript, aggregation: false)
// ensure nothing is published
assertTrue("AnalysisPublisher options not empty", publisherStepOptions['AnalysisPublisher'] == null)
assertTrue("WarningsPublisher options not empty", publisherStepOptions['WarningsPublisher'] == null)
assertTrue("PmdPublisher options not empty", publisherStepOptions['PmdPublisher'] == null)
assertTrue("DryPublisher options not empty", publisherStepOptions['DryPublisher'] == null)
assertTrue("FindBugsPublisher options not empty", publisherStepOptions['FindBugsPublisher'] == null)
assertTrue("CheckStylePublisher options not empty", publisherStepOptions['CheckStylePublisher'] == null)
}
@Test
void testPublishNothingExplicitFalse() throws Exception {
stepRule.step.checksPublishResults(script: nullScript, pmd: false)
assertTrue("AnalysisPublisher options not set", publisherStepOptions['AnalysisPublisher'] != null)
// ensure nothing else is published
assertTrue("PmdPublisher options not empty", publisherStepOptions['PmdPublisher'] == null)
assertTrue("DryPublisher options not empty", publisherStepOptions['DryPublisher'] == null)
assertTrue("FindBugsPublisher options not empty", publisherStepOptions['FindBugsPublisher'] == null)
assertTrue("CheckStylePublisher options not empty", publisherStepOptions['CheckStylePublisher'] == null)
assertTrue("WarningsPublisher options not empty", publisherStepOptions['WarningsPublisher'] == null)
}
@Test
void testPublishNothingImplicitTrue() throws Exception {
stepRule.step.checksPublishResults(script: nullScript, pmd: [:])
// ensure pmd is not published
assertTrue("PmdPublisher options not set", publisherStepOptions['PmdPublisher'] != null)
}
@Test
void testPublishNothingExplicitActiveFalse() throws Exception {
stepRule.step.checksPublishResults(script: nullScript, pmd: [active: false])
// ensure pmd is not published
assertTrue("PmdPublisher options not empty", publisherStepOptions['PmdPublisher'] == null)
}
@Test
void testPublishWithChangedStepDefaultSettings() throws Exception {
// pmd has been set to active: true in step configuration
CommonPipelineEnvironment.getInstance().configuration =
[steps: [checksPublishResults: [pmd: [active: true]]]]
stepRule.step.checksPublishResults([script: nullScript])
assertTrue("AnalysisPublisher options not set", publisherStepOptions['AnalysisPublisher'] != null)
assertTrue("PmdPublisher options not set", publisherStepOptions['PmdPublisher'] != null)
// ensure nothing else is published
assertTrue("DryPublisher options not empty", publisherStepOptions['DryPublisher'] == null)
assertTrue("FindBugsPublisher options not empty", publisherStepOptions['FindBugsPublisher'] == null)
assertTrue("CheckStylePublisher options not empty", publisherStepOptions['CheckStylePublisher'] == null)
assertTrue("WarningsPublisher options not empty", publisherStepOptions['WarningsPublisher'] == null)
}
@Test
void testPublishWithCustomPattern() throws Exception {
stepRule.step.checksPublishResults(script: nullScript, eslint: [pattern: 'my-fancy-file.ext'], pmd: [pattern: 'this-is-not-a-patter.xml'])
assertTrue("AnalysisPublisher options not set", publisherStepOptions['AnalysisPublisher'] != null)
assertTrue("PmdPublisher options not set", publisherStepOptions['PmdPublisher'] != null)
assertTrue("WarningsPublisher options not set", publisherStepOptions['WarningsPublisher'] != null)
assertTrue("WarningsPublisher parser configuration number not correct", publisherStepOptions['WarningsPublisher']['parserConfigurations'].size() == 1)
// ensure custom patterns are set
assertEquals("PmdPublisher custom pattern not set", 'this-is-not-a-patter.xml', publisherStepOptions['PmdPublisher']['pattern'])
assertEquals("ESLint custom pattern not set", 'my-fancy-file.ext', publisherStepOptions['WarningsPublisher']['parserConfigurations'][0]['pattern'])
// ensure nothing else is published
assertTrue("DryPublisher options not empty", publisherStepOptions['DryPublisher'] == null)
assertTrue("FindBugsPublisher options not empty", publisherStepOptions['FindBugsPublisher'] == null)
assertTrue("CheckStylePublisher options not empty", publisherStepOptions['CheckStylePublisher'] == null)
}
@Test
void testPublishWithArchive() throws Exception {
stepRule.step.checksPublishResults(script: nullScript, archive: true, eslint: true, pmd: true, cpd: true, findbugs: true, checkstyle: true)
assertTrue("ArchivePatterns number not correct", archiveStepPatterns.size() == 5)
assertTrue("ArchivePatterns contains no PMD pattern", archiveStepPatterns.contains('**/target/pmd.xml'))
assertTrue("ArchivePatterns contains no CPD pattern", archiveStepPatterns.contains('**/target/cpd.xml'))
assertTrue("ArchivePatterns contains no FindBugs pattern", archiveStepPatterns.contains('**/target/findbugsXml.xml, **/target/findbugs.xml'))
assertTrue("ArchivePatterns contains no CheckStyle pattern", archiveStepPatterns.contains('**/target/checkstyle-result.xml'))
assertTrue("ArchivePatterns contains no ESLint pattern", archiveStepPatterns.contains('**/eslint.xml'))
}
@Test
void testPublishWithPartialArchive() throws Exception {
stepRule.step.checksPublishResults(script: nullScript, archive: true, eslint: [archive: false], pmd: true, cpd: true, findbugs: true, checkstyle: true)
assertTrue("ArchivePatterns number not correct", archiveStepPatterns.size() == 4)
assertTrue("ArchivePatterns contains no PMD pattern", archiveStepPatterns.contains('**/target/pmd.xml'))
assertTrue("ArchivePatterns contains no CPD pattern", archiveStepPatterns.contains('**/target/cpd.xml'))
assertTrue("ArchivePatterns contains no FindBugs pattern", archiveStepPatterns.contains('**/target/findbugsXml.xml, **/target/findbugs.xml'))
assertTrue("ArchivePatterns contains no CheckStyle pattern", archiveStepPatterns.contains('**/target/checkstyle-result.xml'))
// ensure no ESLint pattern is contained
assertTrue("ArchivePatterns contains ESLint pattern", !archiveStepPatterns.contains('**/eslint.xml'))
}
@Test
void testPublishWithDefaultThresholds() throws Exception {
stepRule.step.checksPublishResults(script: nullScript, pmd: true)
assertTrue("AnalysisPublisher options not set",
publisherStepOptions['AnalysisPublisher'] != null)
assertTrue("PmdPublisher options not set",
publisherStepOptions['PmdPublisher'] != null)
assertEquals("AnalysisPublisher thresholds configuration for failedTotalHigh not correct",
'0', publisherStepOptions['AnalysisPublisher']['failedTotalHigh'])
assertEquals("PmdPublisher thresholds configuration for failedTotalHigh not correct",
'0', publisherStepOptions['PmdPublisher']['failedTotalHigh'])
// ensure other values are empty
assertEquals("AnalysisPublisher thresholds configuration for failedTotalNormal is set",
null, publisherStepOptions['AnalysisPublisher']['failedTotalNormal'])
assertEquals("AnalysisPublisher thresholds configuration for failedTotalLow is set",
null, publisherStepOptions['AnalysisPublisher']['failedTotalLow'])
assertEquals("AnalysisPublisher thresholds configuration for failedTotalAll is set",
null, publisherStepOptions['AnalysisPublisher']['failedTotalAll'])
assertEquals("AnalysisPublisher thresholds configuration for unstableTotalHigh not correct",
null, publisherStepOptions['AnalysisPublisher']['unstableTotalHigh'])
assertEquals("AnalysisPublisher thresholds configuration for unstableTotalNormal is set",
null, publisherStepOptions['AnalysisPublisher']['unstableTotalNormal'])
assertEquals("AnalysisPublisher thresholds configuration for unstableTotalLow is set",
null, publisherStepOptions['AnalysisPublisher']['unstableTotalLow'])
assertEquals("AnalysisPublisher thresholds configuration for unstableTotalAll is set",
null, publisherStepOptions['AnalysisPublisher']['unstableTotalAll'])
// ensure nothing else is published
assertTrue("DryPublisher options not empty", publisherStepOptions['DryPublisher'] == null)
assertTrue("FindBugsPublisher options not empty", publisherStepOptions['FindBugsPublisher'] == null)
assertTrue("CheckStylePublisher options not empty", publisherStepOptions['CheckStylePublisher'] == null)
assertTrue("WarningsPublisher options not empty", publisherStepOptions['WarningsPublisher'] == null)
}
@Test
void testPublishWithThresholds() throws Exception {
stepRule.step.checksPublishResults(script: nullScript, aggregation: [thresholds: [fail: [high: '10']]], pmd: true)
assertTrue("AnalysisPublisher options not set", publisherStepOptions['AnalysisPublisher'] != null)
assertTrue("PmdPublisher options not set", publisherStepOptions['PmdPublisher'] != null)
assertEquals("AnalysisPublisher thresholds configuration for failedTotalHigh not correct",
'10', publisherStepOptions['AnalysisPublisher']['failedTotalHigh'])
// ensure other values are empty
assertEquals("AnalysisPublisher thresholds configuration for failedTotalNormal is set",
null, publisherStepOptions['AnalysisPublisher']['failedTotalNormal'])
assertEquals("AnalysisPublisher thresholds configuration for failedTotalLow is set",
null, publisherStepOptions['AnalysisPublisher']['failedTotalLow'])
assertEquals("AnalysisPublisher thresholds configuration for failedTotalAll is set",
null, publisherStepOptions['AnalysisPublisher']['failedTotalAll'])
assertEquals("AnalysisPublisher thresholds configuration for unstableTotalHigh not correct",
null, publisherStepOptions['AnalysisPublisher']['unstableTotalHigh'])
assertEquals("AnalysisPublisher thresholds configuration for unstableTotalNormal is set",
null, publisherStepOptions['AnalysisPublisher']['unstableTotalNormal'])
assertEquals("AnalysisPublisher thresholds configuration for unstableTotalLow is set",
null, publisherStepOptions['AnalysisPublisher']['unstableTotalLow'])
assertEquals("AnalysisPublisher thresholds configuration for unstableTotalAll is set",
null, publisherStepOptions['AnalysisPublisher']['unstableTotalAll'])
// ensure nothing else is published
assertTrue("DryPublisher options not empty", publisherStepOptions['DryPublisher'] == null)
assertTrue("FindBugsPublisher options not empty", publisherStepOptions['FindBugsPublisher'] == null)
assertTrue("CheckStylePublisher options not empty", publisherStepOptions['CheckStylePublisher'] == null)
assertTrue("WarningsPublisher options not empty", publisherStepOptions['WarningsPublisher'] == null)
}
}