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