Skip to content

Commit bcc6502

Browse files
committed
feat: support Jetty6 and Jetty ee8 ~ee10
1 parent 6f5bab7 commit bcc6502

File tree

14 files changed

+256
-206
lines changed

14 files changed

+256
-206
lines changed

integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty10ContainerTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public class Jetty10ContainerTest {
5252
static Stream<Arguments> casesProvider() {
5353
Server server = Server.Jetty;
5454
List<String> supportedShellTypes = List.of(
55-
ShellType.SERVLET, ShellType.FILTER, ShellType.LISTENER,
55+
// ShellType.SERVLET, ShellType.FILTER, ShellType.LISTENER,
5656
ShellType.JETTY_AGENT_HANDLER
5757
);
5858
List<Packers> testPackers = List.of(Packers.JSP, Packers.JSPX, Packers.JavaDeserialize);
@@ -62,6 +62,7 @@ static Stream<Arguments> casesProvider() {
6262
@AfterAll
6363
static void tearDown() {
6464
String logs = container.getLogs();
65+
log.info(logs);
6566
assertThat("Logs should not contain any exceptions", logs, doesNotContainException());
6667
}
6768

integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty11ContainerTest.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import org.testcontainers.images.builder.ImageFromDockerfile;
1818
import org.testcontainers.junit.jupiter.Container;
1919
import org.testcontainers.junit.jupiter.Testcontainers;
20-
import org.testcontainers.shaded.org.apache.commons.lang3.tuple.Triple;
2120

2221
import java.util.List;
2322
import java.util.stream.Stream;
@@ -59,12 +58,8 @@ static Stream<Arguments> casesProvider() {
5958
ShellType.JETTY_AGENT_HANDLER
6059
);
6160
List<Packers> testPackers = List.of(Packers.JSP);
62-
List<Triple<String, ShellTool, Packers>> unSupportedCases = List.of(
63-
Triple.of(ShellType.JETTY_AGENT_HANDLER, ShellTool.Godzilla, Packers.AgentJar), // jdk module
64-
Triple.of(ShellType.JETTY_AGENT_HANDLER, ShellTool.Behinder, Packers.AgentJar) // jdk module
65-
);
6661
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers,
67-
unSupportedCases, List.of(ShellTool.AntSword)
62+
null, List.of(ShellTool.AntSword)
6863
);
6964
}
7065

integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty12ee10ContainerTest.java

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,17 @@
1111
import org.junit.jupiter.params.ParameterizedTest;
1212
import org.junit.jupiter.params.provider.Arguments;
1313
import org.junit.jupiter.params.provider.MethodSource;
14-
import org.testcontainers.containers.DockerComposeContainer;
14+
import org.testcontainers.containers.GenericContainer;
15+
import org.testcontainers.containers.Network;
16+
import org.testcontainers.containers.wait.strategy.Wait;
17+
import org.testcontainers.images.builder.ImageFromDockerfile;
1518
import org.testcontainers.junit.jupiter.Container;
1619
import org.testcontainers.junit.jupiter.Testcontainers;
1720

18-
import java.io.File;
1921
import java.util.List;
2022
import java.util.stream.Stream;
2123

24+
import static com.reajason.javaweb.integration.ContainerTool.*;
2225
import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException;
2326
import static com.reajason.javaweb.integration.ShellAssertionTool.testShellInjectAssertOk;
2427
import static org.hamcrest.MatcherAssert.assertThat;
@@ -30,44 +33,45 @@
3033
@Slf4j
3134
@Testcontainers
3235
public class Jetty12ee10ContainerTest {
33-
public static final String imageName = "jetty:12.0-jre21-ee10";
34-
public static final String serviceName = "jetty1221ee10";
35-
36+
public static final String imageName = "reajason/jetty:12.0-jre21-ee10";
37+
static Network network = Network.newNetwork();
38+
@Container
39+
public final static GenericContainer<?> python = new GenericContainer<>(new ImageFromDockerfile()
40+
.withDockerfile(neoGeorgDockerfile))
41+
.withNetwork(network);
3642
@Container
37-
public static final DockerComposeContainer<?> compose =
38-
new DockerComposeContainer<>(new File("docker-compose/jetty/docker-compose-12-jre21-ee10.yaml"))
39-
.withExposedService(serviceName, 8080);
43+
public final static GenericContainer<?> container = new GenericContainer<>(imageName)
44+
.withCopyToContainer(warJakartaFile, "/var/lib/jetty/webapps/app.war")
45+
.withCopyToContainer(jattachFile, "/jattach")
46+
.withCopyToContainer(jettyPid, "/fetch_pid.sh")
47+
.withNetwork(network)
48+
.withNetworkAliases("app")
49+
.waitingFor(Wait.forHttp("/app"))
50+
.withExposedPorts(8080);
4051

4152
static Stream<Arguments> casesProvider() {
4253
Server server = Server.Jetty;
4354
List<String> supportedShellTypes = List.of(
4455
ShellType.JAKARTA_SERVLET,
4556
ShellType.JAKARTA_FILTER,
46-
ShellType.JAKARTA_LISTENER
57+
ShellType.JAKARTA_LISTENER,
58+
ShellType.JETTY_AGENT_HANDLER
4759
);
4860
List<Packers> testPackers = List.of(Packers.Base64);
4961
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers,
50-
null, List.of(ShellTool.AntSword, ShellTool.NeoreGeorg) // AntSword not supported Jakarta
62+
null, List.of(ShellTool.AntSword) // AntSword not supported Jakarta
5163
);
5264
}
5365

5466
@AfterAll
5567
static void tearDown() {
56-
String logs = compose.getContainerByServiceName(serviceName).get().getLogs();
68+
String logs = container.getLogs();
5769
assertThat("Logs should not contain any exceptions", logs, doesNotContainException());
5870
}
5971

60-
public static String getUrl() {
61-
String host = compose.getServiceHost(serviceName, 8080);
62-
int port = compose.getServicePort(serviceName, 8080);
63-
String url = "http://" + host + ":" + port + "/app";
64-
log.info("container started, app url is : {}", url);
65-
return url;
66-
}
67-
6872
@ParameterizedTest(name = "{0}|{1}{2}|{3}")
6973
@MethodSource("casesProvider")
7074
void test(String imageName, String shellType, ShellTool shellTool, Packers packer) {
71-
testShellInjectAssertOk(getUrl(), Server.Jetty, shellType, shellTool, Opcodes.V21, packer, null);
75+
testShellInjectAssertOk(getUrl(container), Server.Jetty, shellType, shellTool, Opcodes.V21, packer, container, python);
7276
}
7377
}

integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty12ee8ContainerTest.java

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,17 @@
1111
import org.junit.jupiter.params.ParameterizedTest;
1212
import org.junit.jupiter.params.provider.Arguments;
1313
import org.junit.jupiter.params.provider.MethodSource;
14-
import org.testcontainers.containers.DockerComposeContainer;
14+
import org.testcontainers.containers.GenericContainer;
15+
import org.testcontainers.containers.Network;
16+
import org.testcontainers.containers.wait.strategy.Wait;
17+
import org.testcontainers.images.builder.ImageFromDockerfile;
1518
import org.testcontainers.junit.jupiter.Container;
1619
import org.testcontainers.junit.jupiter.Testcontainers;
1720

18-
import java.io.File;
1921
import java.util.List;
2022
import java.util.stream.Stream;
2123

24+
import static com.reajason.javaweb.integration.ContainerTool.*;
2225
import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException;
2326
import static com.reajason.javaweb.integration.ShellAssertionTool.testShellInjectAssertOk;
2427
import static org.hamcrest.MatcherAssert.assertThat;
@@ -30,44 +33,43 @@
3033
@Slf4j
3134
@Testcontainers
3235
public class Jetty12ee8ContainerTest {
33-
public static final String imageName = "jetty:12.0-jre21-ee8";
34-
public static final String serviceName = "jetty1221ee8";
35-
36+
public static final String imageName = "reajason/jetty:12.0-jre21-ee8";
37+
static Network network = Network.newNetwork();
38+
@Container
39+
public final static GenericContainer<?> python = new GenericContainer<>(new ImageFromDockerfile()
40+
.withDockerfile(neoGeorgDockerfile))
41+
.withNetwork(network);
3642
@Container
37-
public static final DockerComposeContainer<?> compose =
38-
new DockerComposeContainer<>(new File("docker-compose/jetty/docker-compose-12-jre21-ee8.yaml"))
39-
.withExposedService(serviceName, 8080);
43+
public final static GenericContainer<?> container = new GenericContainer<>(imageName)
44+
.withCopyToContainer(warFile, "/var/lib/jetty/webapps/app.war")
45+
.withCopyToContainer(jattachFile, "/jattach")
46+
.withCopyToContainer(jettyPid, "/fetch_pid.sh")
47+
.withNetwork(network)
48+
.withNetworkAliases("app")
49+
.waitingFor(Wait.forHttp("/app"))
50+
.withExposedPorts(8080);
4051

4152
static Stream<Arguments> casesProvider() {
4253
Server server = Server.Jetty;
4354
List<String> supportedShellTypes = List.of(
4455
ShellType.SERVLET,
4556
ShellType.FILTER,
46-
ShellType.LISTENER
57+
ShellType.LISTENER,
58+
ShellType.JETTY_AGENT_HANDLER
4759
);
4860
List<Packers> testPackers = List.of(Packers.Base64);
49-
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers,
50-
null, List.of(ShellTool.AntSword, ShellTool.NeoreGeorg) // AntSword not supported Jakarta
51-
);
61+
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers);
5262
}
5363

5464
@AfterAll
5565
static void tearDown() {
56-
String logs = compose.getContainerByServiceName(serviceName).get().getLogs();
66+
String logs = container.getLogs();
5767
assertThat("Logs should not contain any exceptions", logs, doesNotContainException());
5868
}
5969

60-
public static String getUrl() {
61-
String host = compose.getServiceHost(serviceName, 8080);
62-
int port = compose.getServicePort(serviceName, 8080);
63-
String url = "http://" + host + ":" + port + "/app";
64-
log.info("container started, app url is : {}", url);
65-
return url;
66-
}
67-
6870
@ParameterizedTest(name = "{0}|{1}{2}|{3}")
6971
@MethodSource("casesProvider")
7072
void test(String imageName, String shellType, ShellTool shellTool, Packers packer) {
71-
testShellInjectAssertOk(getUrl(), Server.Jetty, shellType, shellTool, Opcodes.V21, packer, null);
73+
testShellInjectAssertOk(getUrl(container), Server.Jetty, shellType, shellTool, Opcodes.V21, packer, container, python);
7274
}
7375
}

integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty12ee9ContainerTest.java

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,20 @@
1212
import org.junit.jupiter.params.provider.Arguments;
1313
import org.junit.jupiter.params.provider.MethodSource;
1414
import org.testcontainers.containers.DockerComposeContainer;
15+
import org.testcontainers.containers.GenericContainer;
16+
import org.testcontainers.containers.Network;
17+
import org.testcontainers.containers.wait.strategy.Wait;
18+
import org.testcontainers.images.builder.ImageFromDockerfile;
1519
import org.testcontainers.junit.jupiter.Container;
1620
import org.testcontainers.junit.jupiter.Testcontainers;
1721

1822
import java.io.File;
1923
import java.util.List;
2024
import java.util.stream.Stream;
2125

26+
import static com.reajason.javaweb.integration.ContainerTool.*;
27+
import static com.reajason.javaweb.integration.ContainerTool.getUrl;
28+
import static com.reajason.javaweb.integration.ContainerTool.jettyPid;
2229
import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException;
2330
import static com.reajason.javaweb.integration.ShellAssertionTool.testShellInjectAssertOk;
2431
import static org.hamcrest.MatcherAssert.assertThat;
@@ -30,44 +37,45 @@
3037
@Slf4j
3138
@Testcontainers
3239
public class Jetty12ee9ContainerTest {
33-
public static final String imageName = "jetty:12.0-jre21-ee9";
34-
public static final String serviceName = "jetty1221ee9";
35-
40+
public static final String imageName = "reajason/jetty:12.0-jre21-ee9";
41+
static Network network = Network.newNetwork();
42+
@Container
43+
public final static GenericContainer<?> python = new GenericContainer<>(new ImageFromDockerfile()
44+
.withDockerfile(neoGeorgDockerfile))
45+
.withNetwork(network);
3646
@Container
37-
public static final DockerComposeContainer<?> compose =
38-
new DockerComposeContainer<>(new File("docker-compose/jetty/docker-compose-12-jre21-ee9.yaml"))
39-
.withExposedService(serviceName, 8080);
47+
public final static GenericContainer<?> container = new GenericContainer<>(imageName)
48+
.withCopyToContainer(warJakartaFile, "/var/lib/jetty/webapps/app.war")
49+
.withCopyToContainer(jattachFile, "/jattach")
50+
.withCopyToContainer(jettyPid, "/fetch_pid.sh")
51+
.withNetwork(network)
52+
.withNetworkAliases("app")
53+
.waitingFor(Wait.forHttp("/app"))
54+
.withExposedPorts(8080);
4055

4156
static Stream<Arguments> casesProvider() {
4257
Server server = Server.Jetty;
4358
List<String> supportedShellTypes = List.of(
4459
ShellType.JAKARTA_SERVLET,
4560
ShellType.JAKARTA_FILTER,
46-
ShellType.JAKARTA_LISTENER
61+
ShellType.JAKARTA_LISTENER,
62+
ShellType.JETTY_AGENT_HANDLER
4763
);
4864
List<Packers> testPackers = List.of(Packers.Base64);
4965
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers,
50-
null, List.of(ShellTool.AntSword, ShellTool.NeoreGeorg) // AntSword not supported Jakarta
66+
null, List.of(ShellTool.AntSword) // AntSword not supported Jakarta
5167
);
5268
}
5369

5470
@AfterAll
5571
static void tearDown() {
56-
String logs = compose.getContainerByServiceName(serviceName).get().getLogs();
72+
String logs = container.getLogs();
5773
assertThat("Logs should not contain any exceptions", logs, doesNotContainException());
5874
}
5975

60-
public static String getUrl() {
61-
String host = compose.getServiceHost(serviceName, 8080);
62-
int port = compose.getServicePort(serviceName, 8080);
63-
String url = "http://" + host + ":" + port + "/app";
64-
log.info("container started, app url is : {}", url);
65-
return url;
66-
}
67-
6876
@ParameterizedTest(name = "{0}|{1}{2}|{3}")
6977
@MethodSource("casesProvider")
7078
void test(String imageName, String shellType, ShellTool shellTool, Packers packer) {
71-
testShellInjectAssertOk(getUrl(), Server.Jetty, shellType, shellTool, Opcodes.V21, packer, null);
79+
testShellInjectAssertOk(getUrl(container), Server.Jetty, shellType, shellTool, Opcodes.V21, packer, container, python);
7280
}
7381
}

integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty61ContainerTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ public class Jetty61ContainerTest {
5252
static Stream<Arguments> casesProvider() {
5353
Server server = Server.Jetty;
5454
List<String> supportedShellTypes = List.of(
55-
ShellType.SERVLET, ShellType.FILTER, ShellType.LISTENER
55+
ShellType.SERVLET, ShellType.FILTER, ShellType.LISTENER,
56+
ShellType.JETTY_AGENT_HANDLER
5657
);
5758
List<Packers> testPackers = List.of(Packers.JSP, Packers.JSPX, Packers.JavaDeserialize);
5859
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers);

integration-test/src/test/java/com/reajason/javaweb/integration/jetty/Jetty93ContainerTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public class Jetty93ContainerTest {
5252
static Stream<Arguments> casesProvider() {
5353
Server server = Server.Jetty;
5454
List<String> supportedShellTypes = List.of(
55+
ShellType.SERVLET, ShellType.FILTER, ShellType.LISTENER,
5556
ShellType.JETTY_AGENT_HANDLER
5657
);
5758
List<Packers> testPackers = List.of(Packers.JSP, Packers.JSPX, Packers.JavaDeserialize);
@@ -61,6 +62,7 @@ static Stream<Arguments> casesProvider() {
6162
@AfterAll
6263
static void tearDown() {
6364
String logs = container.getLogs();
65+
log.info(logs);
6466
assertThat("Logs should not contain any exceptions", logs, doesNotContainException());
6567
}
6668

0 commit comments

Comments
 (0)