feat: support AntSword shell generate (#34)

This commit is contained in:
ReaJason
2025-02-19 00:04:29 +08:00
parent e71f980991
commit 583abbf9ba
98 changed files with 2860 additions and 152 deletions
@@ -1,86 +0,0 @@
package com.reajason.javaweb.integration.websphere;
import com.reajason.javaweb.memshell.WebSphereShell;
import com.reajason.javaweb.memshell.config.Constants;
import com.reajason.javaweb.memshell.config.Server;
import com.reajason.javaweb.memshell.config.ShellTool;
import com.reajason.javaweb.memshell.packer.Packers;
import lombok.extern.slf4j.Slf4j;
import net.bytebuddy.jar.asm.Opcodes;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import org.testcontainers.containers.BindMode;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import java.time.Duration;
import java.util.stream.Stream;
import static com.reajason.javaweb.integration.ContainerTool.*;
import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException;
import static com.reajason.javaweb.integration.ShellAssertionTool.testShellInjectAssertOk;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.params.provider.Arguments.arguments;
/**
* @author ReaJason
* @since 2024/12/21
*/
@Testcontainers
@Slf4j
public class WebSphere700ContainerTest {
public static final String imageName = "reajason/websphere:7.0.0.21";
@Container
public final static GenericContainer<?> container = new GenericContainer<>(imageName)
.withFileSystemBind(warFile.getFilesystemPath(), "/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/monitoredDeployableApps/servers/server1/app.war", BindMode.READ_WRITE)
.withCopyToContainer(jattachFile, "/jattach")
.withCopyToContainer(webspherePid, "/fetch_pid.sh")
.waitingFor(Wait.forHttp("/app/").forPort(9080).withStartupTimeout(Duration.ofMinutes(5)))
.withExposedPorts(9080)
.withPrivilegedMode(true);
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Command, Packers.AgentJar),
arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Godzilla, Packers.AgentJar)
);
}
@AfterAll
static void tearDown() {
String logs = container.getLogs();
log.info("container stopped, logs is : {}", logs);
assertThat("Logs should not contain any exceptions", logs, doesNotContainException());
}
@ParameterizedTest(name = "{0}|{1}{2}|{3}")
@MethodSource("casesProvider")
void test(String imageName, String shellType, ShellTool shellTool, Packers packer) {
testShellInjectAssertOk(getUrl(container), Server.WebSphere, shellType, shellTool, Opcodes.V1_6, packer, container);
}
public static String getUrl(GenericContainer<?> container) {
String host = container.getHost();
int port = container.getMappedPort(9080);
String url = "http://" + host + ":" + port + "/app";
log.info("container started, app url is : {}", url);
return url;
}
}
@@ -49,14 +49,18 @@ public class WebSphere855ContainerTest {
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Command, Packers.AgentJar),
arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Godzilla, Packers.AgentJar)
@@ -49,14 +49,18 @@ public class WebSphere905ContainerTest {
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Command, Packers.AgentJar),
arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, WebSphereShell.AGENT_FILTER_MANAGER, ShellTool.Godzilla, Packers.AgentJar)