diff --git a/pom.xml b/pom.xml
index c5b6a9bb..8ad65a7e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -141,6 +141,11 @@
1.16
test
+
+ org.mockito
+ mockito-core
+ test
+
org.jenkins-ci.plugins
subversion
diff --git a/src/main/java/org/jenkinsci/plugins/rundeck/client/RundeckClientManager.java b/src/main/java/org/jenkinsci/plugins/rundeck/client/RundeckClientManager.java
index 6b4c2953..7381eac5 100644
--- a/src/main/java/org/jenkinsci/plugins/rundeck/client/RundeckClientManager.java
+++ b/src/main/java/org/jenkinsci/plugins/rundeck/client/RundeckClientManager.java
@@ -1,9 +1,11 @@
package org.jenkinsci.plugins.rundeck.client;
+import com.google.common.annotations.VisibleForTesting;
import hudson.AbortException;
import okhttp3.ResponseBody;
import org.jenkinsci.plugins.rundeck.RundeckInstance;
import org.rundeck.client.RundeckClient;
+import org.rundeck.client.RundeckClient.Builder;
import org.rundeck.client.api.RundeckApi;
import org.rundeck.client.api.model.*;
import org.rundeck.client.api.model.scheduler.ScheduledJobItem;
@@ -23,6 +25,8 @@ public class RundeckClientManager implements RundeckManager {
private RundeckInstance rundeckInstance;
private Client client;
+ private Builder clientBuilder;
+
public RundeckClientManager() {
}
@@ -31,6 +35,20 @@ public RundeckClientManager(RundeckInstance rundeckInstance) {
buildClient();
}
+
+ private Builder createRundeckClientBuilder() {
+ if (clientBuilder != null) {
+ return clientBuilder;
+ } else {
+ return RundeckClient.builder();
+ }
+ }
+
+ @VisibleForTesting
+ protected void setRundeckClientBuilder(Builder builder) {
+ clientBuilder = builder;
+ }
+
public RundeckInstance getRundeckInstance() {
return rundeckInstance;
}
@@ -49,12 +67,13 @@ public void setClient(Client client) {
public void buildClient(){
if(client == null){
- RundeckClient.Builder builder = RundeckClient.builder().baseUrl(rundeckInstance.getUrl());
+ RundeckClient.Builder builder = createRundeckClientBuilder().baseUrl(rundeckInstance.getUrl());
if(rundeckInstance.getToken()!=null && !rundeckInstance.getToken().getPlainText().isEmpty()){
builder.tokenAuth(rundeckInstance.getToken().getPlainText());
}
- if(rundeckInstance.getLogin() != null && rundeckInstance.getPassword()!=null){
+ if (rundeckInstance.getLogin() != null && rundeckInstance.getPassword() != null
+ && !rundeckInstance.getPassword().getPlainText().isEmpty()) {
builder.passwordAuth(rundeckInstance.getLogin(),rundeckInstance.getPassword().getPlainText() );
}
diff --git a/src/test/java/org/jenkinsci/plugins/rundeck/client/RundeckClientManagerTest.java b/src/test/java/org/jenkinsci/plugins/rundeck/client/RundeckClientManagerTest.java
new file mode 100644
index 00000000..4f555002
--- /dev/null
+++ b/src/test/java/org/jenkinsci/plugins/rundeck/client/RundeckClientManagerTest.java
@@ -0,0 +1,39 @@
+package org.jenkinsci.plugins.rundeck.client;
+
+import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import hudson.util.Secret;
+import org.jenkinsci.plugins.rundeck.RundeckInstance;
+import org.junit.Test;
+import org.rundeck.client.RundeckClient;
+import org.rundeck.client.RundeckClient.Builder;
+import org.rundeck.client.api.RundeckApi;
+
+public class RundeckClientManagerTest {
+
+ @Test
+ public void usingTokenDoesNotTryToSetUsernameAndPasswordCredentialsMethodWhenEarlierLoginInformationIsFoundInConfiguration() {
+
+ Builder clientBuilderSpy = spy(RundeckClient.builder());
+
+ RundeckInstance rundeckInstanceMock = mock(RundeckInstance.class);
+ when(rundeckInstanceMock.getUrl()).thenReturn("http://localhost:4044");
+
+ when(rundeckInstanceMock.getToken()).thenReturn(Secret.fromString("aToken"));
+ when(rundeckInstanceMock.getTokenPlainText()).thenReturn("aToken");
+ when(rundeckInstanceMock.getLogin()).thenReturn("bad_data_from_plugin_data_somehow");
+ when(rundeckInstanceMock.getPassword()).thenReturn(Secret.fromString(""));
+ when(rundeckInstanceMock.getPasswordPlainText()).thenReturn("");
+
+ RundeckClientManager rundeckClientManager = new RundeckClientManager(rundeckInstanceMock);
+ rundeckClientManager.setRundeckClientBuilder(clientBuilderSpy);
+ rundeckClientManager.buildClient();
+
+ verify(clientBuilderSpy, never()).passwordAuth(anyString(), anyString());
+
+ }
+}