import org.junit.Rule import org.junit.Test import org.junit.rules.RuleChain import util.BasePiperTest import util.JenkinsDockerExecuteRule import util.JenkinsReadYamlRule import util.JenkinsShellCallRule import util.JenkinsStepRule import util.Rules import static org.hamcrest.Matchers.allOf import static org.hamcrest.Matchers.containsString import static org.hamcrest.Matchers.not import static org.junit.Assert.assertEquals import static org.junit.Assert.assertThat import static org.junit.Assert.assertTrue class MavenExecuteTest extends BasePiperTest { Map dockerParameters private JenkinsShellCallRule shellRule = new JenkinsShellCallRule(this) private JenkinsDockerExecuteRule dockerExecuteRule = new JenkinsDockerExecuteRule(this) private JenkinsStepRule stepRule = new JenkinsStepRule(this) @Rule public RuleChain ruleChain = Rules .getCommonRules(this) .around(new JenkinsReadYamlRule(this)) .around(dockerExecuteRule) .around(shellRule) .around(stepRule) @Test void testExecuteBasicMavenCommand() throws Exception { stepRule.step.mavenExecute(script: nullScript, goals: 'clean install') assertEquals('maven:3.5-jdk-7', dockerExecuteRule.dockerParams.dockerImage) assert shellRule.shell[0] == 'mvn --batch-mode -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn clean install' } @Test void testExecuteBasicMavenCommandWithDownloadLogsEnabled() throws Exception { stepRule.step.mavenExecute(script: nullScript, goals: 'clean install', logSuccessfulMavenTransfers: true) assertEquals('maven:3.5-jdk-7', dockerExecuteRule.dockerParams.dockerImage) assert shellRule.shell[0] == 'mvn --batch-mode clean install' } @Test void testExecuteMavenCommandWithParameter() throws Exception { stepRule.step.mavenExecute( script: nullScript, dockerImage: 'maven:3.5-jdk-8-alpine', goals: 'clean install', globalSettingsFile: 'globalSettingsFile.xml', projectSettingsFile: 'projectSettingsFile.xml', pomPath: 'pom.xml', flags: '-o', m2Path: 'm2Path', defines: '-Dmaven.tests.skip=true') assertEquals('maven:3.5-jdk-8-alpine', dockerExecuteRule.dockerParams.dockerImage) String mvnCommand = "mvn --global-settings 'globalSettingsFile.xml' -Dmaven.repo.local='m2Path' --settings 'projectSettingsFile.xml' --file 'pom.xml' -o --batch-mode -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn clean install -Dmaven.tests.skip=true" assertTrue(shellRule.shell.contains(mvnCommand)) } @Test void testMavenCommandForwardsDockerOptions() throws Exception { stepRule.step.mavenExecute(script: nullScript, goals: 'clean install') assertEquals('maven:3.5-jdk-7', dockerExecuteRule.dockerParams.dockerImage) assertEquals('mvn --batch-mode -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn clean install', shellRule.shell[0]) } @Test void testMavenCommandWithShortBatchModeFlag() throws Exception { stepRule.step.mavenExecute(script: nullScript, goals: 'clean install', flags: '-B') assertEquals('maven:3.5-jdk-7', dockerExecuteRule.dockerParams.dockerImage) assertEquals('mvn -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn clean install', shellRule.shell[0]) } @Test void testMavenCommandWithFalsePositiveMinusBFlag() throws Exception { stepRule.step.mavenExecute(script: nullScript, goals: 'clean install', flags: '-Blah') assertEquals('maven:3.5-jdk-7', dockerExecuteRule.dockerParams.dockerImage) assertThat(shellRule.shell[0], allOf(containsString('-Blah'), containsString('--batch-mode'))) } @Test void testMavenCommandWithBatchModeMultiline() throws Exception { stepRule.step.mavenExecute(script: nullScript, goals: 'clean install', flags: ('''-B\\ |--show-version''' as CharSequence).stripMargin()) assertThat(shellRule.shell[0], not(containsString('--batch-mode'))) } @Test void testMavenExecuteReturnsStdout() { shellRule.setReturnValue('mvn --batch-mode -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn clean install', "[INFO] BUILD SUCCESS") String commandOutput = stepRule.step.mavenExecute(script: nullScript, goals: 'clean install', returnStdout: true) assertEquals(commandOutput, '[INFO] BUILD SUCCESS') } }