package com.nirima.jenkins.plugins.docker.client; import com.cloudbees.plugins.credentials.Credentials; import com.cloudbees.plugins.credentials.CredentialsProvider; import com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.core.RemoteApiVersion; import com.nirima.jenkins.plugins.docker.DockerCloud; import com.nirima.jenkins.plugins.docker.DockerTemplate; import edu.umd.cs.findbugs.annotations.NonNull; import hudson.model.ItemGroup; import org.acegisecurity.Authentication; import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.JenkinsRule; import org.jvnet.hudson.test.TestExtension; import org.jvnet.hudson.test.WithoutJenkins; import java.util.Collections; import java.util.List; import static com.cloudbees.plugins.credentials.CredentialsScope.GLOBAL; import static com.nirima.jenkins.plugins.docker.client.ClientConfigBuilderForPlugin.dockerClientConfig; import static java.util.Arrays.asList; import static java.util.concurrent.TimeUnit.SECONDS; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; /** * @author lanwen (Merkushev Kirill) */ public class ClientBuilderForPluginTest { public static final String HTTP_SERVER_URL = "tcp://server.url/"; public static final RemoteApiVersion DOCKER_API_VER = RemoteApiVersion.VERSION_1_19; public static final String CLOUD_NAME = "cloud-name"; public static final int READ_TIMEOUT = 10; public static final String EMPTY_CREDS = ""; public static final int CONNECT_TIMEOUT = 0; public static final String EMPTY_CONTAINER_CAP = ""; public static final String ID_OF_CREDS = "idcreds"; public static final String USERNAME = "usrname"; public static final String PASSWORD = "pwd021"; @Rule public JenkinsRule jenkins = new JenkinsRule(); @Test @WithoutJenkins public void shouldGetUriVersionReadTimeoutSettingsFromCloud() throws Exception { DockerCloud cloud = new DockerCloud(CLOUD_NAME, Collections.<DockerTemplate>emptyList(), HTTP_SERVER_URL, EMPTY_CONTAINER_CAP, CONNECT_TIMEOUT, READ_TIMEOUT, EMPTY_CREDS, "1.19", ""); ClientConfigBuilderForPlugin builder = dockerClientConfig(); builder.forCloud(cloud); DockerClientConfig config = builder.config().build(); assertThat("server", config.getDockerHost().toString(), equalTo(HTTP_SERVER_URL)); assertThat("version", config.getApiVersion(), equalTo(DOCKER_API_VER)); // assertThat("read TO", config.getReadTimeout(), equalTo((int) SECONDS.toMillis(READ_TIMEOUT))); } @Test public void shouldFindPasswordCredsFromJenkins() throws Exception { ClientConfigBuilderForPlugin builder = dockerClientConfig(); builder.forServer(HTTP_SERVER_URL, "1.19").withCredentials(ID_OF_CREDS); DockerClientConfig config = builder.config().build(); assertThat("login", config.getRegistryUsername(), equalTo(USERNAME)); assertThat("pwd", config.getRegistryPassword(), equalTo(PASSWORD)); } @TestExtension public static class TestCreds extends CredentialsProvider { @NonNull @Override public <C extends Credentials> List<C> getCredentials(Class<C> type, ItemGroup itemGroup, Authentication authentication) { return asList((C) new UsernamePasswordCredentialsImpl(GLOBAL, ID_OF_CREDS, null, USERNAME, PASSWORD)); } } }