diff --git a/jenkins-client-it/pom.xml b/jenkins-client-it/pom.xml new file mode 100644 index 00000000..0e497054 --- /dev/null +++ b/jenkins-client-it/pom.xml @@ -0,0 +1,110 @@ + + + + + 4.0.0 + + + com.offbytwo.jenkins + jenkins-client-parent + 0.4.0-SNAPSHOT + + + jenkins-client-it + Jenkins API client for Java :: IT + + + + com.offbytwo.jenkins + jenkins-client + ${project.version} + + + + + + junit + junit + test + + + org.testcontainers + testcontainers + test + + + + org.mockito + mockito-core + test + + + + org.assertj + assertj-core + test + + + + + + org.apache.maven.plugins + maven-gpg-plugin + + true + + + + org.apache.maven.plugins + maven-jar-plugin + + true + + + + org.apache.maven.plugins + maven-install-plugin + + true + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + + + run-docker-its + + + + maven-failsafe-plugin + + + integration-test + + integration-test + verify + + + + ${docker.container.network} + + + + + + + + + + diff --git a/jenkins-client-it/src/site/site.xml b/jenkins-client-it/src/site/site.xml new file mode 100644 index 00000000..39d61857 --- /dev/null +++ b/jenkins-client-it/src/site/site.xml @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/jenkins-client-it/src/test/java/com/offbytwo/jenkins/it/testcontainer/FirstContainerTest.java b/jenkins-client-it/src/test/java/com/offbytwo/jenkins/it/testcontainer/FirstContainerTest.java new file mode 100644 index 00000000..67000ced --- /dev/null +++ b/jenkins-client-it/src/test/java/com/offbytwo/jenkins/it/testcontainer/FirstContainerTest.java @@ -0,0 +1,71 @@ +package com.offbytwo.jenkins.it.testcontainer; + +import java.io.IOException; +import java.net.URI; + +import org.junit.ClassRule; +import org.junit.Test; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.output.OutputFrame.OutputType; +import org.testcontainers.containers.output.ToStringConsumer; +import org.testcontainers.images.builder.ImageFromDockerfile; + +import com.offbytwo.jenkins.JenkinsServer; +import com.offbytwo.jenkins.model.View; + +public class FirstContainerTest { + +// public static GenericContainer jenkins = new GenericContainer("jenkins/jenkins:2.142-slim") +// .withExposedPorts(8080); +// @ClassRule +// public static GenericContainer jenkins = new GenericContainer("jenkins:1.651.3") +// .withExposedPorts(8080); +// withCopyFileToContainer(MountableFile.forClasspathResource("/app.jar"), "/") + + @ClassRule + public static GenericContainer jenkinsTestContainer = new GenericContainer<>( + new ImageFromDockerfile() + .withFileFromClasspath("plugins.txt", "/plugins.txt") + .withFileFromClasspath("config.xml", "/config.xml") + .withDockerfileFromBuilder(builder -> + { + builder + .from("jenkins:1.651.3") + .copy("plugins.txt", "/usr/share/jenkins/ref/plugins.txt") + .copy("config.xml", "/usr/share/jenkins/ref/config.xml") + .run("/usr/local/bin/plugins.sh", "/usr/share/jenkins/ref/plugins.txt"); + + }) + ); + + + @Test + public void testName() throws InterruptedException, IOException { + System.out.println("Hello world."); + + String containerIpAddress = jenkinsTestContainer.getContainerIpAddress(); + Integer mappedPort = jenkinsTestContainer.getMappedPort(8080); + System.out.println("IP:" + containerIpAddress + " mappedPort:" + mappedPort); + + JenkinsServer jenkinsServer = new JenkinsServer(URI.create("http://" + containerIpAddress + ":" + mappedPort + "/")); + + ToStringConsumer stdoutStringConsumer = new ToStringConsumer(); + ToStringConsumer stderrStringConsumer = new ToStringConsumer(); + jenkinsTestContainer.followOutput(stdoutStringConsumer, OutputType.STDOUT); + jenkinsTestContainer.followOutput(stderrStringConsumer, OutputType.STDERR); + + String utf8String = stdoutStringConsumer.toUtf8String(); + String utf8StringErr = stderrStringConsumer.toUtf8String(); + + System.out.println(utf8String); + System.out.println(utf8StringErr); + + while (!jenkinsServer.isRunning()) { + Thread.sleep(500); + } + + View job = jenkinsServer.getView("Test-View"); + + System.out.println("Job:" + job.getDescription() + " " + job.getName()); + } +} diff --git a/jenkins-client-it/src/test/resources/config.xml b/jenkins-client-it/src/test/resources/config.xml new file mode 100644 index 00000000..6bf7ac5f --- /dev/null +++ b/jenkins-client-it/src/test/resources/config.xml @@ -0,0 +1,70 @@ + + + + 1453986179962 + + + hudson.slaves.Messages + + SlaveComputer.DisconnectedBy + + anonymous + : Manually turned off + + + + + 1.625.3 + 2 + NORMAL + true + + + false + + ${JENKINS_HOME}/workspace/${ITEM_FULLNAME} + ${ITEM_ROOTDIR}/builds + + + + + 5 + 0 + + + + All + false + false + + + + + Test-View + false + false + + + + test + + + + + + + + + + + + false + + + All + 50000 + + + + true + diff --git a/jenkins-client-it/src/test/resources/log4j2-test.xml b/jenkins-client-it/src/test/resources/log4j2-test.xml new file mode 100644 index 00000000..0633b1ef --- /dev/null +++ b/jenkins-client-it/src/test/resources/log4j2-test.xml @@ -0,0 +1,27 @@ + + + + + + + + %d %p %c{1.} [%t] %m%n + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jenkins-client-it/src/test/resources/logback-test.xml b/jenkins-client-it/src/test/resources/logback-test.xml new file mode 100644 index 00000000..23f40bbe --- /dev/null +++ b/jenkins-client-it/src/test/resources/logback-test.xml @@ -0,0 +1,16 @@ + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n + + + + + + + + + + + + \ No newline at end of file diff --git a/jenkins-client-it/src/test/resources/plugins.txt b/jenkins-client-it/src/test/resources/plugins.txt new file mode 100644 index 00000000..e802c9d0 --- /dev/null +++ b/jenkins-client-it/src/test/resources/plugins.txt @@ -0,0 +1,10 @@ +timestamper:1.7.2 +credentials:1.24 +junit:1.10 +token-macro:1.12.1 +throttle-concurrents:1.9.0 +jacoco:1.0.19 +job-dsl:1.41 +config-file-provider:2.10.0 +testng-plugin:1.10 +cloudbees-folder: 5.12 diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java index 4eadc5c9..3f7cff71 100755 --- a/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java +++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/client/JenkinsHttpClient.java @@ -8,6 +8,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.offbytwo.jenkins.client.util.EncodingUtils; import com.offbytwo.jenkins.client.util.RequestReleasingInputStream; +import com.offbytwo.jenkins.client.util.ResponseUtils; +import com.offbytwo.jenkins.client.util.UrlUtils; import com.offbytwo.jenkins.client.validator.HttpResponseValidator; import com.offbytwo.jenkins.model.BaseModel; import com.offbytwo.jenkins.model.Crumb; @@ -45,14 +47,11 @@ import java.io.IOException; import java.io.InputStream; import java.net.URI; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; import java.util.Map; import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES; -import com.offbytwo.jenkins.client.util.ResponseUtils; -import com.offbytwo.jenkins.client.util.UrlUtils; import static org.apache.commons.lang.StringUtils.isNotBlank; public class JenkinsHttpClient implements JenkinsHttpConnection { @@ -86,6 +85,7 @@ public JenkinsHttpClient(URI uri, CloseableHttpClient client) { this.uri = uri; this.mapper = getDefaultMapper(); this.client = client; + this.httpResponseValidator = new HttpResponseValidator(); // this.contentExtractor = new HttpResponseContentExtractor(); this.jenkinsVersion = EMPTY_VERSION; diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java index ab9e201d..031eb196 100644 --- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java +++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/BuildWithDetails.java @@ -6,16 +6,11 @@ package com.offbytwo.jenkins.model; +import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.toMap; + import com.fasterxml.jackson.annotation.JsonProperty; import com.offbytwo.jenkins.helper.BuildConsoleStreamListener; -import org.apache.http.Header; -import org.apache.http.HttpResponse; -import org.apache.http.NameValuePair; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.util.EntityUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.IOException; import java.io.InputStream; import java.net.URI; @@ -27,9 +22,13 @@ import java.util.List; import java.util.Map; import java.util.Objects; - -import static java.util.stream.Collectors.toList; -import static java.util.stream.Collectors.toMap; +import org.apache.http.Header; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * This class represents build information with details about what has been done @@ -162,11 +161,11 @@ public boolean isBuilding() { public List getCauses() { return actions.stream() - .filter(item -> item.containsKey("causes")) - .flatMap(item -> item.entrySet().stream()) - .flatMap(sub -> sub.getValue().stream()) - .map(item -> convertToBuildCause(item)) - .collect(toList()); + .filter(item2 -> item2.containsKey("causes")) + .flatMap(item1 -> item1.entrySet().stream()) + .flatMap(sub -> sub.getValue().stream()) + .map(item -> convertToBuildCause(item)) + .collect(toList()); } /** diff --git a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/PluginManager.java b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/PluginManager.java index c08fc713..7303d8a4 100644 --- a/jenkins-client/src/main/java/com/offbytwo/jenkins/model/PluginManager.java +++ b/jenkins-client/src/main/java/com/offbytwo/jenkins/model/PluginManager.java @@ -1,5 +1,6 @@ package com.offbytwo.jenkins.model; +import java.util.ArrayList; import java.util.List; /** @@ -19,6 +20,10 @@ public PluginManager setPlugins(List plugins) { return this; } + public PluginManager(List plugins) { + this.plugins = new ArrayList<>(); + } + @Override public int hashCode() { diff --git a/pom.xml b/pom.xml index 8015cefa..fba8f237 100644 --- a/pom.xml +++ b/pom.xml @@ -53,7 +53,7 @@ 1.644 4.12 - 1.9.5 + 2.23.0 2.4 1.4.7-jenkins-1 1.6.1 @@ -181,7 +181,11 @@ ${mockito-core.version} test - + + org.testcontainers + testcontainers + 1.12.4 + org.jenkins-ci.main jenkins-test-harness @@ -191,7 +195,7 @@ org.assertj assertj-core - 3.12.2 + 3.14.0 test @@ -485,6 +489,7 @@ jenkins-client + jenkins-client-it jenkins-client-it-docker