From 5cca5fddbb1989d403ff63b55c1135416a99a891 Mon Sep 17 00:00:00 2001 From: Marcus Holl Date: Mon, 3 Sep 2018 11:09:09 +0200 Subject: [PATCH] Tests: make use of JenkinsCredentialsRule JenkinsCredentialsRule now closer to reality since it mimics the bevavior or the credentials plugin in case a credential is not known. --- test/groovy/CloudFoundryDeployTest.groovy | 22 ++------------- test/groovy/NeoDeployTest.groovy | 27 +++++-------------- .../groovy/util/JenkinsCredentialsRule.groovy | 12 ++++++--- 3 files changed, 17 insertions(+), 44 deletions(-) diff --git a/test/groovy/CloudFoundryDeployTest.groovy b/test/groovy/CloudFoundryDeployTest.groovy index a5e5c41af..fd2865507 100644 --- a/test/groovy/CloudFoundryDeployTest.groovy +++ b/test/groovy/CloudFoundryDeployTest.groovy @@ -6,6 +6,7 @@ import org.junit.rules.ExpectedException import org.junit.rules.RuleChain import org.yaml.snakeyaml.Yaml import util.BasePiperTest +import util.JenkinsCredentialsRule import util.JenkinsEnvironmentRule import util.JenkinsDockerExecuteRule import util.JenkinsLoggingRule @@ -39,28 +40,9 @@ class CloudFoundryDeployTest extends BasePiperTest { .around(jwfr) .around(jedr) .around(jer) + .around(new JenkinsCredentialsRule(this).withCredentials('test_cfCredentialsId', 'test_cf', '********')) .around(jsr) // needs to be activated after jedr, otherwise executeDocker is not mocked - @Before - void init() throws Throwable { - helper.registerAllowedMethod('usernamePassword', [Map], { m -> return m }) - helper.registerAllowedMethod('withCredentials', [List, Closure], { l, c -> - if(l[0].credentialsId == 'test_cfCredentialsId') { - binding.setProperty('username', 'test_cf') - binding.setProperty('password', '********') - } else if(l[0].credentialsId == 'test_camCredentialsId') { - binding.setProperty('username', 'test_cam') - binding.setProperty('password', '********') - } - try { - c() - } finally { - binding.setProperty('username', null) - binding.setProperty('password', null) - } - }) - } - @Test void testNoTool() throws Exception { nullScript.commonPipelineEnvironment.configuration = [ diff --git a/test/groovy/NeoDeployTest.groovy b/test/groovy/NeoDeployTest.groovy index f18f0f866..045ebc52e 100644 --- a/test/groovy/NeoDeployTest.groovy +++ b/test/groovy/NeoDeployTest.groovy @@ -5,8 +5,10 @@ import org.junit.rules.TemporaryFolder import org.junit.BeforeClass import org.junit.ClassRule import org.junit.Ignore + import org.hamcrest.BaseMatcher import org.hamcrest.Description +import org.jenkinsci.plugins.credentialsbinding.impl.CredentialNotFoundException import org.junit.Assert import org.junit.Before import org.junit.Rule @@ -14,6 +16,7 @@ import org.junit.Test import org.junit.rules.ExpectedException import org.junit.rules.RuleChain import util.BasePiperTest +import util.JenkinsCredentialsRule import util.JenkinsLoggingRule import util.JenkinsShellCallRule import util.JenkinsStepRule @@ -37,6 +40,9 @@ class NeoDeployTest extends BasePiperTest { .around(thrown) .around(jlr) .around(jscr) + .around(new JenkinsCredentialsRule(this) + .withCredentials('myCredentialsId', 'anonymous', '********') + .withCredentials('CI_CREDENTIALS_ID', 'defaultUser', '********')) .around(jsr) private static workspacePath @@ -63,24 +69,6 @@ class NeoDeployTest extends BasePiperTest { helper.registerAllowedMethod('dockerExecute', [Map, Closure], null) helper.registerAllowedMethod('fileExists', [String], { s -> return new File(workspacePath, s).exists() }) - helper.registerAllowedMethod('usernamePassword', [Map], { m -> return m }) - helper.registerAllowedMethod('withCredentials', [List, Closure], { l, c -> - if(l[0].credentialsId == 'myCredentialsId') { - binding.setProperty('username', 'anonymous') - binding.setProperty('password', '********') - } else if(l[0].credentialsId == 'CI_CREDENTIALS_ID') { - binding.setProperty('username', 'defaultUser') - binding.setProperty('password', '********') - } - try { - c() - } finally { - binding.setProperty('username', null) - binding.setProperty('password', null) - } - - }) - helper.registerAllowedMethod('sh', [Map], { Map m -> getVersionWithEnvVars(m) }) nullScript.commonPipelineEnvironment.configuration = [steps:[neoDeploy: [host: 'test.deploy.host.com', account: 'trialuser123']]] @@ -176,8 +164,7 @@ class NeoDeployTest extends BasePiperTest { @Test void badCredentialsIdTest() { - thrown.expect(MissingPropertyException) - thrown.expectMessage('No such property: username') + thrown.expect(CredentialNotFoundException) jsr.step.call(script: nullScript, archivePath: archiveName, diff --git a/test/groovy/util/JenkinsCredentialsRule.groovy b/test/groovy/util/JenkinsCredentialsRule.groovy index 63133c372..5f6e7dd8c 100644 --- a/test/groovy/util/JenkinsCredentialsRule.groovy +++ b/test/groovy/util/JenkinsCredentialsRule.groovy @@ -14,6 +14,7 @@ import static org.hamcrest.Matchers.nullValue import static org.junit.Assert.assertThat; import org.hamcrest.Matchers +import org.jenkinsci.plugins.credentialsbinding.impl.CredentialNotFoundException /** * By default a user "anonymous" with password "********" @@ -47,16 +48,19 @@ class JenkinsCredentialsRule implements TestRule { @Override void evaluate() throws Throwable { - testInstance.helper.registerAllowedMethod('usernamePassword', [Map.class], {m -> return m}) + testInstance.helper.registerAllowedMethod('usernamePassword', [Map.class], + { m -> if (credentials.keySet().contains(m.credentialsId)) return m; + // this is what really happens in case of an unknown credentials id, + // checked with reality using credentials plugin 2.1.18. + throw new CredentialNotFoundException( + "Could not find credentials entry with ID '${m.credentialsId}'") + }) testInstance.helper.registerAllowedMethod('withCredentials', [List, Closure], { l, c -> def credsId = l[0].credentialsId def creds = credentials.get(credsId) - assertThat("Unexpected credentialsId received: '${credsId}'.", - creds, is(not(nullValue()))) - binding.setProperty('username', creds?.user) binding.setProperty('password', creds?.passwd) try {