Skip to content

Commit d52f472

Browse files
committed
test: add jetty ee8 ~ ee10 cases
1 parent 838bfa0 commit d52f472

File tree

14 files changed

+379
-550
lines changed

14 files changed

+379
-550
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
FROM jetty:12.0-jre21
2+
3+
RUN java -jar /usr/local/jetty/start.jar --add-modules=ee10-deploy
4+
5+
EXPOSE 8080
6+
7+
CMD ["java", "-jar", "/usr/local/jetty/start.jar"]
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
FROM jetty:12.0-jre21
2+
3+
RUN java -jar /usr/local/jetty/start.jar --add-modules=ee8-deploy
4+
5+
EXPOSE 8080
6+
7+
CMD ["java", "-jar", "/usr/local/jetty/start.jar"]
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
FROM jetty:12.0-jre21
2+
3+
RUN java -jar /usr/local/jetty/start.jar --add-modules=ee9-deploy
4+
5+
EXPOSE 8080
6+
7+
CMD ["java", "-jar", "/usr/local/jetty/start.jar"]
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
services:
2+
jetty1221ee10:
3+
build:
4+
dockerfile: ./Dockerfile-ee10
5+
context: .
6+
ports:
7+
- "8080:8080"
8+
- "5005:5005"
9+
environment:
10+
JAVA_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
11+
volumes:
12+
- ../../../vul/vul-webapp-jakarta/build/libs/vul-webapp-jakarta.war:/var/lib/jetty/webapps/app.war
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
services:
2+
jetty1221ee8:
3+
build:
4+
dockerfile: ./Dockerfile-ee8
5+
context: .
6+
ports:
7+
- "8080:8080"
8+
- "5005:5005"
9+
environment:
10+
JAVA_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
11+
volumes:
12+
- ../../../vul/vul-webapp/build/libs/vul-webapp.war:/var/lib/jetty/webapps/app.war
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
services:
2+
jetty1221ee9:
3+
build:
4+
dockerfile: ./Dockerfile-ee9
5+
context: .
6+
ports:
7+
- "8080:8080"
8+
- "5005:5005"
9+
environment:
10+
JAVA_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
11+
volumes:
12+
- ../../../vul/vul-webapp-jakarta/build/libs/vul-webapp-jakarta.war:/var/lib/jetty/webapps/app.war

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

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
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;
2021

2122
import java.util.List;
2223
import java.util.stream.Stream;
@@ -33,7 +34,7 @@
3334
@Slf4j
3435
@Testcontainers
3536
public class Jetty11ContainerTest {
36-
public static final String imageName = "jetty:11-jre11";
37+
public static final String imageName = "jetty:11.0-jre17";
3738
static Network network = Network.newNetwork();
3839
@Container
3940
public final static GenericContainer<?> python = new GenericContainer<>(new ImageFromDockerfile()
@@ -52,12 +53,19 @@ public class Jetty11ContainerTest {
5253
static Stream<Arguments> casesProvider() {
5354
Server server = Server.Jetty;
5455
List<String> supportedShellTypes = List.of(
55-
ShellType.JAKARTA_SERVLET, ShellType.JAKARTA_FILTER, ShellType.JAKARTA_LISTENER,
56-
ShellType.JETTY_AGENT_HANDLER,ShellType.JETTY_AGENT_HANDLER_ASM
56+
ShellType.JAKARTA_SERVLET,
57+
ShellType.JAKARTA_FILTER,
58+
ShellType.JAKARTA_LISTENER,
59+
ShellType.JETTY_AGENT_HANDLER,
60+
ShellType.JETTY_AGENT_HANDLER_ASM
61+
);
62+
List<Packers> testPackers = List.of(Packers.JSP);
63+
List<Triple<String, ShellTool, Packers>> unSupportedCases = List.of(
64+
Triple.of(ShellType.JETTY_AGENT_HANDLER, ShellTool.Godzilla, Packers.AgentJar), // jdk module
65+
Triple.of(ShellType.JETTY_AGENT_HANDLER, ShellTool.Behinder, Packers.AgentJar) // jdk module
5766
);
58-
List<Packers> testPackers = List.of(Packers.JSP, Packers.JSPX, Packers.JavaDeserialize);
5967
return TestCasesProvider.getTestCases(imageName, server, supportedShellTypes, testPackers,
60-
null, List.of(ShellTool.AntSword) // AntSword not supported Jakarta
68+
unSupportedCases, List.of(ShellTool.AntSword)
6169
);
6270
}
6371

@@ -70,6 +78,6 @@ static void tearDown() {
7078
@ParameterizedTest(name = "{0}|{1}{2}|{3}")
7179
@MethodSource("casesProvider")
7280
void test(String imageName, String shellType, ShellTool shellTool, Packers packer) {
73-
testShellInjectAssertOk(getUrl(container), Server.Jetty, shellType, shellTool, Opcodes.V11, packer, container, python);
81+
testShellInjectAssertOk(getUrl(container), Server.Jetty, shellType, shellTool, Opcodes.V17, packer, container, python);
7482
}
7583
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package com.reajason.javaweb.integration.jetty;
2+
3+
import com.reajason.javaweb.integration.TestCasesProvider;
4+
import com.reajason.javaweb.memshell.Packers;
5+
import com.reajason.javaweb.memshell.Server;
6+
import com.reajason.javaweb.memshell.ShellTool;
7+
import com.reajason.javaweb.memshell.ShellType;
8+
import lombok.extern.slf4j.Slf4j;
9+
import net.bytebuddy.jar.asm.Opcodes;
10+
import org.junit.jupiter.api.AfterAll;
11+
import org.junit.jupiter.params.ParameterizedTest;
12+
import org.junit.jupiter.params.provider.Arguments;
13+
import org.junit.jupiter.params.provider.MethodSource;
14+
import org.testcontainers.containers.DockerComposeContainer;
15+
import org.testcontainers.junit.jupiter.Container;
16+
import org.testcontainers.junit.jupiter.Testcontainers;
17+
18+
import java.io.File;
19+
import java.util.List;
20+
import java.util.stream.Stream;
21+
22+
import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException;
23+
import static com.reajason.javaweb.integration.ShellAssertionTool.testShellInjectAssertOk;
24+
import static org.hamcrest.MatcherAssert.assertThat;
25+
26+
/**
27+
* @author ReaJason
28+
* @since 2024/12/7
29+
*/
30+
@Slf4j
31+
@Testcontainers
32+
public class Jetty12ee10ContainerTest {
33+
public static final String imageName = "jetty:12.0-jre21-ee10";
34+
public static final String serviceName = "jetty1221ee10";
35+
36+
@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);
40+
41+
static Stream<Arguments> casesProvider() {
42+
Server server = Server.Jetty;
43+
List<String> supportedShellTypes = List.of(
44+
ShellType.JAKARTA_SERVLET,
45+
ShellType.JAKARTA_FILTER,
46+
ShellType.JAKARTA_LISTENER
47+
);
48+
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+
);
52+
}
53+
54+
@AfterAll
55+
static void tearDown() {
56+
String logs = compose.getContainerByServiceName(serviceName).get().getLogs();
57+
assertThat("Logs should not contain any exceptions", logs, doesNotContainException());
58+
}
59+
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+
68+
@ParameterizedTest(name = "{0}|{1}{2}|{3}")
69+
@MethodSource("casesProvider")
70+
void test(String imageName, String shellType, ShellTool shellTool, Packers packer) {
71+
testShellInjectAssertOk(getUrl(), Server.Jetty, shellType, shellTool, Opcodes.V21, packer, null);
72+
}
73+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package com.reajason.javaweb.integration.jetty;
2+
3+
import com.reajason.javaweb.integration.TestCasesProvider;
4+
import com.reajason.javaweb.memshell.Packers;
5+
import com.reajason.javaweb.memshell.Server;
6+
import com.reajason.javaweb.memshell.ShellTool;
7+
import com.reajason.javaweb.memshell.ShellType;
8+
import lombok.extern.slf4j.Slf4j;
9+
import net.bytebuddy.jar.asm.Opcodes;
10+
import org.junit.jupiter.api.AfterAll;
11+
import org.junit.jupiter.params.ParameterizedTest;
12+
import org.junit.jupiter.params.provider.Arguments;
13+
import org.junit.jupiter.params.provider.MethodSource;
14+
import org.testcontainers.containers.DockerComposeContainer;
15+
import org.testcontainers.junit.jupiter.Container;
16+
import org.testcontainers.junit.jupiter.Testcontainers;
17+
18+
import java.io.File;
19+
import java.util.List;
20+
import java.util.stream.Stream;
21+
22+
import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException;
23+
import static com.reajason.javaweb.integration.ShellAssertionTool.testShellInjectAssertOk;
24+
import static org.hamcrest.MatcherAssert.assertThat;
25+
26+
/**
27+
* @author ReaJason
28+
* @since 2024/12/7
29+
*/
30+
@Slf4j
31+
@Testcontainers
32+
public class Jetty12ee8ContainerTest {
33+
public static final String imageName = "jetty:12.0-jre21-ee8";
34+
public static final String serviceName = "jetty1221ee8";
35+
36+
@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);
40+
41+
static Stream<Arguments> casesProvider() {
42+
Server server = Server.Jetty;
43+
List<String> supportedShellTypes = List.of(
44+
ShellType.SERVLET,
45+
ShellType.FILTER,
46+
ShellType.LISTENER
47+
);
48+
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+
);
52+
}
53+
54+
@AfterAll
55+
static void tearDown() {
56+
String logs = compose.getContainerByServiceName(serviceName).get().getLogs();
57+
assertThat("Logs should not contain any exceptions", logs, doesNotContainException());
58+
}
59+
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+
68+
@ParameterizedTest(name = "{0}|{1}{2}|{3}")
69+
@MethodSource("casesProvider")
70+
void test(String imageName, String shellType, ShellTool shellTool, Packers packer) {
71+
testShellInjectAssertOk(getUrl(), Server.Jetty, shellType, shellTool, Opcodes.V21, packer, null);
72+
}
73+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package com.reajason.javaweb.integration.jetty;
2+
3+
import com.reajason.javaweb.integration.TestCasesProvider;
4+
import com.reajason.javaweb.memshell.Packers;
5+
import com.reajason.javaweb.memshell.Server;
6+
import com.reajason.javaweb.memshell.ShellTool;
7+
import com.reajason.javaweb.memshell.ShellType;
8+
import lombok.extern.slf4j.Slf4j;
9+
import net.bytebuddy.jar.asm.Opcodes;
10+
import org.junit.jupiter.api.AfterAll;
11+
import org.junit.jupiter.params.ParameterizedTest;
12+
import org.junit.jupiter.params.provider.Arguments;
13+
import org.junit.jupiter.params.provider.MethodSource;
14+
import org.testcontainers.containers.DockerComposeContainer;
15+
import org.testcontainers.junit.jupiter.Container;
16+
import org.testcontainers.junit.jupiter.Testcontainers;
17+
18+
import java.io.File;
19+
import java.util.List;
20+
import java.util.stream.Stream;
21+
22+
import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException;
23+
import static com.reajason.javaweb.integration.ShellAssertionTool.testShellInjectAssertOk;
24+
import static org.hamcrest.MatcherAssert.assertThat;
25+
26+
/**
27+
* @author ReaJason
28+
* @since 2024/12/7
29+
*/
30+
@Slf4j
31+
@Testcontainers
32+
public class Jetty12ee9ContainerTest {
33+
public static final String imageName = "jetty:12.0-jre21-ee9";
34+
public static final String serviceName = "jetty1221ee9";
35+
36+
@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);
40+
41+
static Stream<Arguments> casesProvider() {
42+
Server server = Server.Jetty;
43+
List<String> supportedShellTypes = List.of(
44+
ShellType.JAKARTA_SERVLET,
45+
ShellType.JAKARTA_FILTER,
46+
ShellType.JAKARTA_LISTENER
47+
);
48+
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+
);
52+
}
53+
54+
@AfterAll
55+
static void tearDown() {
56+
String logs = compose.getContainerByServiceName(serviceName).get().getLogs();
57+
assertThat("Logs should not contain any exceptions", logs, doesNotContainException());
58+
}
59+
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+
68+
@ParameterizedTest(name = "{0}|{1}{2}|{3}")
69+
@MethodSource("casesProvider")
70+
void test(String imageName, String shellType, ShellTool shellTool, Packers packer) {
71+
testShellInjectAssertOk(getUrl(), Server.Jetty, shellType, shellTool, Opcodes.V21, packer, null);
72+
}
73+
}

0 commit comments

Comments
 (0)