diff --git a/a2a-java-sdk-server-jakarta.iml b/a2a-java-sdk-server-jakarta.iml new file mode 100644 index 0000000..4d4ebba --- /dev/null +++ b/a2a-java-sdk-server-jakarta.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/impl/pom.xml b/impl/pom.xml new file mode 100644 index 0000000..d4f1711 --- /dev/null +++ b/impl/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + + org.wildfly.extras.a2a + a2a-java-sdk-server-jakarta-parent + 0.2.3.Beta2-SNAPSHOT + + + a2a-java-sdk-server-jakarta + + jar + + WildFly Extras - Java A2A SDK for Jakarta + Java SDK for the Agent2Agent Protocol (A2A) - SDK - Jakarta + + + + io.github.a2asdk + a2a-java-sdk-server-common + + + io.github.a2asdk + a2a-java-sdk-tests-server-common + provided + + + io.github.a2asdk + a2a-java-sdk-tests-server-common + test-jar + test + + + jakarta.ws.rs + jakarta.ws.rs-api + provided + + + \ No newline at end of file diff --git a/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2ARequestFilter.java b/impl/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2ARequestFilter.java similarity index 87% rename from src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2ARequestFilter.java rename to impl/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2ARequestFilter.java index 9195849..3cbfc45 100644 --- a/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2ARequestFilter.java +++ b/impl/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2ARequestFilter.java @@ -28,7 +28,7 @@ public class A2ARequestFilter implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext requestContext) { - if (requestContext.getMethod().equals("POST") && requestContext.hasEntity()) { + if (isA2ARequest(requestContext)) { try (InputStream entityInputStream = requestContext.getEntityStream()) { byte[] requestBodyBytes = entityInputStream.readAllBytes(); String requestBody = new String(requestBodyBytes); @@ -49,6 +49,14 @@ public void filter(ContainerRequestContext requestContext) { } } + private boolean isA2ARequest(ContainerRequestContext requestContext) { + String path = requestContext.getUriInfo().getPath().trim(); + if (path.equals("/") || path.startsWith("/agent/") || path.startsWith("/.well-known/")) { + return requestContext.getMethod().equals("POST") && requestContext.hasEntity(); + } + return false; + } + private static boolean isStreamingRequest(String requestBody) { return requestBody.contains(SendStreamingMessageRequest.METHOD) || requestBody.contains(TaskResubscriptionRequest.METHOD); diff --git a/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2AServerResource.java b/impl/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2AServerResource.java similarity index 99% rename from src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2AServerResource.java rename to impl/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2AServerResource.java index d38e614..22a967c 100644 --- a/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2AServerResource.java +++ b/impl/src/main/java/org/wildfly/extras/a2a/server/apps/jakarta/A2AServerResource.java @@ -208,7 +208,7 @@ private JSONRPCResponse generateErrorResponse(JSONRPCRequest request, JSON return new JSONRPCErrorResponse(request.getId(), error); } - static void setStreamingIsSubscribedRunnable(Runnable streamingIsSubscribedRunnable) { + public static void setStreamingIsSubscribedRunnable(Runnable streamingIsSubscribedRunnable) { A2AServerResource.streamingIsSubscribedRunnable = streamingIsSubscribedRunnable; } diff --git a/src/main/resources/META-INF/beans.xml b/impl/src/main/resources/META-INF/beans.xml similarity index 100% rename from src/main/resources/META-INF/beans.xml rename to impl/src/main/resources/META-INF/beans.xml diff --git a/src/test/resources/WEB-INF/web.xml b/impl/src/main/resources/WEB-INF/web.xml similarity index 74% rename from src/test/resources/WEB-INF/web.xml rename to impl/src/main/resources/WEB-INF/web.xml index 2678fbc..4330758 100644 --- a/src/test/resources/WEB-INF/web.xml +++ b/impl/src/main/resources/WEB-INF/web.xml @@ -4,9 +4,4 @@ xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" version="6.0"> - - - 30 - - diff --git a/pom.xml b/pom.xml index 9cabdd0..a715565 100644 --- a/pom.xml +++ b/pom.xml @@ -11,13 +11,13 @@ org.wildfly.extras.a2a - a2a-java-sdk-server-jakarta + a2a-java-sdk-server-jakarta-parent 0.2.3.Beta2-SNAPSHOT - jar + pom - WildFly Extras - Java A2A SDK for Jakarta - Java SDK for the Agent2Agent Protocol (A2A) - SDK - Jakarta + WildFly Extras - Java A2A SDK for Jakarta Parent + Java SDK for the Agent2Agent Protocol (A2A) - SDK - Jakarta - Parent https://github.com/wildfly-extras/a2a-java-sdk-server-jakarta @@ -43,9 +43,13 @@ - + ${project.build.directory}${file.separator}wildfly 36.0.1.Final - 0.2.3.Beta1 + ${project.version} + + 1.1.1 + + 1.0.0.Final 2.2 5.12.2 5.1.0.Beta11 @@ -53,7 +57,7 @@ 1.2.6 10.0.0.Final 3.3.4 - 5.5.1 + 5.5.5 ${project.build.directory}${file.separator}wildfly @@ -61,6 +65,7 @@ true + @@ -92,96 +97,68 @@ pom import + + io.github.a2asdk + a2a-java-sdk-client + ${version.sdk} + + + io.github.a2asdk + a2a-java-sdk-common + ${version.sdk} + + + io.github.a2asdk + a2a-java-sdk-server-common + ${version.sdk} + + + io.github.a2asdk + a2a-java-sdk-spec + ${version.sdk} + + + io.github.a2asdk + a2a-java-sdk-tests-server-common + ${version.sdk} + + + io.smallrye.reactive + mutiny-zero + ${version.mutiny-zero} + + + io.github.a2asdk + a2a-java-sdk-tests-server-common + test-jar + test + ${version.sdk} + + + io.rest-assured + rest-assured + ${version.rest-assured} + test + + + org.jboss.logging + commons-logging-jboss-logging + ${version.jboss-commons-logging} + + + org.junit.jupiter + junit-jupiter + ${version.junit} + test + + + org.hamcrest + hamcrest + ${version.hamcrest} + test + - - - io.github.a2asdk - a2a-java-sdk-server-common - ${version.sdk} - - - io.github.a2asdk - a2a-java-sdk-tests-server-common - ${version.sdk} - provided - - - io.github.a2asdk - a2a-java-sdk-tests-server-common - test-jar - test - ${version.sdk} - - - com.fasterxml.jackson.core - jackson-databind - provided - - - jakarta.enterprise - jakarta.enterprise.cdi-api - provided - - - jakarta.inject - jakarta.inject-api - provided - - - jakarta.json - jakarta.json-api - provided - - - jakarta.ws.rs - jakarta.ws.rs-api - provided - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - test - - - io.rest-assured - rest-assured - ${version.rest-assured} - test - - - org.jboss.arquillian.junit5 - arquillian-junit5-container - test - - - org.wildfly.arquillian - wildfly-arquillian-container-managed - test - - - org.jboss.shrinkwrap - shrinkwrap-api - test - - - org.junit.jupiter - junit-jupiter - ${version.junit} - test - - - org.jboss.threads - jboss-threads - test - - - org.hamcrest - hamcrest - ${version.hamcrest} - test - - @@ -259,27 +236,6 @@ - - org.apache.maven.plugins - maven-dependency-plugin - 3.8.1 - - ${project.build.directory}/lib - - - - copy - generate-test-resources - - copy-dependencies - - - test - provided - - - - org.apache.maven.plugins maven-source-plugin @@ -320,27 +276,20 @@ + + maven-assembly-plugin + 3.7.1 + - - - org.wildfly.glow - wildfly-glow-arquillian-plugin - - - org.wildfly.plugins - wildfly-maven-plugin - - - org.apache.maven.plugins - maven-surefire-plugin - - - org.apache.maven.plugins - maven-dependency-plugin - - + + impl + wildfly-jar + tests/common + tests/impl + tests/wildfly-jar + debug.profile diff --git a/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/JakartaA2AServerTest.java b/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/JakartaA2AServerTest.java deleted file mode 100644 index 161aec3..0000000 --- a/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/JakartaA2AServerTest.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.wildfly.extras.a2a.server.apps.jakarta; - - -import java.io.File; -import java.io.IOException; -import java.nio.file.DirectoryStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; - -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.inject.Inject; - -import io.a2a.server.apps.common.AbstractA2AServerTest; -import io.a2a.server.apps.common.AgentCardProducer; -import io.a2a.server.apps.common.AgentExecutorProducer; -import io.a2a.server.events.InMemoryQueueManager; -import io.a2a.server.tasks.TaskStore; -import org.jboss.arquillian.container.test.api.Deployment; -import org.jboss.arquillian.junit5.container.annotation.ArquillianTest; -import org.jboss.shrinkwrap.api.ShrinkWrap; -import org.jboss.shrinkwrap.api.spec.WebArchive; - -@ArquillianTest -@ApplicationScoped -public class JakartaA2AServerTest extends AbstractA2AServerTest { - - public JakartaA2AServerTest() { - super(8080); - } - - @Deployment - public static WebArchive createTestArchive() throws IOException { - final List prefixes = List.of( - "a2a-java-sdk-client", - "a2a-java-sdk-common", - "a2a-java-sdk-server-common", - "a2a-java-sdk-spec", - "jackson", - "mutiny", - "slf4j", - "rest-assured", - "groovy", - "http", - "commons", - "xml-path", - "json-path", - "hamcrest" - ); - List libraries = new ArrayList<>(); - try (DirectoryStream stream = Files.newDirectoryStream(Paths.get("target").resolve("lib"))) { - for (Path file : stream) { - String fileName = file.getFileName().toString(); - if (prefixes.stream().anyMatch(fileName::startsWith)) { - libraries.add(file.toFile()); - } - } - } - WebArchive archive = ShrinkWrap.create(WebArchive.class, "ROOT.war") - .addAsLibraries(libraries.toArray(new File[libraries.size()])) - .addClass(AbstractA2AServerTest.class) - .addClass(AgentCardProducer.class) - .addClass(AgentExecutorProducer.class) - .addClass(JakartaA2AServerTest.class) - .addClass(A2ARequestFilter.class) - .addClass(A2AServerResource.class) - .addClass(RestApplication.class) - .addAsManifestResource("META-INF/beans.xml", "beans.xml") - .addAsWebInfResource("META-INF/beans.xml", "beans.xml") - .addAsWebInfResource("WEB-INF/web.xml", "web.xml"); - return archive; - } - - @Inject - TaskStore taskStore; - - @Inject - InMemoryQueueManager queueManager; - - @Override - protected TaskStore getTaskStore() { - return taskStore; - } - - @Override - protected InMemoryQueueManager getQueueManager() { - return queueManager; - } - - @Override - protected void setStreamingSubscribedRunnable(Runnable runnable) { - A2AServerResource.setStreamingIsSubscribedRunnable(runnable); - } -} diff --git a/tests/common/pom.xml b/tests/common/pom.xml new file mode 100644 index 0000000..240950d --- /dev/null +++ b/tests/common/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + + + org.wildfly.extras.a2a + a2a-java-sdk-server-jakarta-parent + 0.2.3.Beta2-SNAPSHOT + ../../pom.xml + + + a2a-java-sdk-server-jakarta-test-common + + jar + + WildFly Extras - Java A2A SDK for Jakarta - Test Utils + Java SDK for the Agent2Agent Protocol (A2A) - SDK - Jakarta - Test Utils + + + + io.github.a2asdk + a2a-java-sdk-server-common + provided + + + io.github.a2asdk + a2a-java-sdk-tests-server-common + provided + + + io.github.a2asdk + a2a-java-sdk-tests-server-common + test-jar + provided + + + jakarta.enterprise + jakarta.enterprise.cdi-api + provided + + + jakarta.inject + jakarta.inject-api + provided + + + jakarta.ws.rs + jakarta.ws.rs-api + provided + + + jakarta.annotation + jakarta.annotation-api + provided + + + \ No newline at end of file diff --git a/tests/common/src/main/java/org/wildfly/extras/a2a/server/jakarta/test/common/A2ATestResource.java b/tests/common/src/main/java/org/wildfly/extras/a2a/server/jakarta/test/common/A2ATestResource.java new file mode 100644 index 0000000..b180605 --- /dev/null +++ b/tests/common/src/main/java/org/wildfly/extras/a2a/server/jakarta/test/common/A2ATestResource.java @@ -0,0 +1,105 @@ +package org.wildfly.extras.a2a.server.jakarta.test.common; + +import static jakarta.ws.rs.core.MediaType.TEXT_PLAIN; + +import java.util.concurrent.atomic.AtomicInteger; + +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; + +import io.a2a.server.apps.common.TestUtilsBean; +import io.a2a.spec.Task; +import io.a2a.spec.TaskArtifactUpdateEvent; +import io.a2a.spec.TaskStatusUpdateEvent; +import io.a2a.util.Utils; + +@Path("/test") +@ApplicationScoped +public class A2ATestResource { + @Inject + TestUtilsBean testUtilsBean; + + private final AtomicInteger streamingSubscribedCount = new AtomicInteger(0); + + @PostConstruct + public void init() { + //A2AServerResource.setStreamingIsSubscribedRunnable(streamingSubscribedCount::incrementAndGet); + } + + + @POST + @Path("/task") + @Consumes(MediaType.APPLICATION_JSON) + public Response saveTask(String body) throws Exception { + Task task = Utils.OBJECT_MAPPER.readValue(body, Task.class); + testUtilsBean.saveTask(task); + return Response.ok().build(); + } + + @GET + @Path("/task/{taskId}") + public Response getTask(@PathParam("taskId") String taskId) throws Exception { + Task task = testUtilsBean.getTask(taskId); + if (task == null) { + return Response.status(404).build(); + } + return Response.ok() + .entity(Utils.OBJECT_MAPPER.writeValueAsString(task)) + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .build(); + } + + @DELETE + @Path("/task/{taskId}") + public Response deleteTask(@PathParam("taskId") String taskId) { + Task task = testUtilsBean.getTask(taskId); + if (task == null) { + return Response.status(404).build(); + } + testUtilsBean.deleteTask(taskId); + return Response.ok() + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .build(); + } + + @POST + @Path("/queue/ensure/{taskId}") + public Response ensureQueue(@PathParam("taskId") String taskId) { + testUtilsBean.ensureQueue(taskId); + return Response.ok().build(); + } + + @POST + @Path("/queue/enqueueTaskStatusUpdateEvent/{taskId}") + public Response enqueueTaskStatusUpdateEvent(@PathParam("taskId") String taskId, String body) throws Exception { + TaskStatusUpdateEvent event = Utils.OBJECT_MAPPER.readValue(body, TaskStatusUpdateEvent.class); + testUtilsBean.enqueueEvent(taskId, event); + return Response.ok().build(); + } + + @POST + @Path("/queue/enqueueTaskArtifactUpdateEvent/{taskId}") + public Response enqueueTaskArtifactUpdateEvent(@PathParam("taskId") String taskId, String body) throws Exception { + TaskArtifactUpdateEvent event = Utils.OBJECT_MAPPER.readValue(body, TaskArtifactUpdateEvent.class); + testUtilsBean.enqueueEvent(taskId, event); + return Response.ok().build(); + } + + @GET + @Path("/streamingSubscribedCount") + @Produces(TEXT_PLAIN) + public Response getStreamingSubscribedCount() { + return Response.ok(String.valueOf(streamingSubscribedCount.get()), TEXT_PLAIN).build(); + } +} diff --git a/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/RestApplication.java b/tests/common/src/main/java/org/wildfly/extras/a2a/server/jakarta/test/common/RestApplication.java similarity index 72% rename from src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/RestApplication.java rename to tests/common/src/main/java/org/wildfly/extras/a2a/server/jakarta/test/common/RestApplication.java index 7f3aff8..3746c84 100644 --- a/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/RestApplication.java +++ b/tests/common/src/main/java/org/wildfly/extras/a2a/server/jakarta/test/common/RestApplication.java @@ -1,4 +1,4 @@ -package org.wildfly.extras.a2a.server.apps.jakarta; +package org.wildfly.extras.a2a.server.jakarta.test.common; import jakarta.ws.rs.ApplicationPath; import jakarta.ws.rs.core.Application; diff --git a/tests/common/src/main/resources/META-INF/services/org.wildfly.extras.a2a.server.apps.jakarta.TestingHook b/tests/common/src/main/resources/META-INF/services/org.wildfly.extras.a2a.server.apps.jakarta.TestingHook new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/arquillian.xml b/tests/common/src/main/resources/arquillian.xml similarity index 100% rename from src/test/resources/arquillian.xml rename to tests/common/src/main/resources/arquillian.xml diff --git a/tests/impl/pom.xml b/tests/impl/pom.xml new file mode 100644 index 0000000..c2ba055 --- /dev/null +++ b/tests/impl/pom.xml @@ -0,0 +1,137 @@ + + + 4.0.0 + + + org.wildfly.extras.a2a + a2a-java-sdk-server-jakarta-parent + 0.2.3.Beta2-SNAPSHOT + ../../pom.xml + + + a2a-java-sdk-server-jakarta-tests + + jar + + WildFly Extras - Java A2A SDK for Jakarta - Tests + Java SDK for the Agent2Agent Protocol (A2A) - SDK - Jakarta - Tests + + + + ${project.groupId} + a2a-java-sdk-server-jakarta + ${project.version} + test + + + ${project.groupId} + a2a-java-sdk-server-jakarta-test-common + ${project.version} + test + + + io.github.a2asdk + a2a-java-sdk-server-common + test + + + io.github.a2asdk + a2a-java-sdk-tests-server-common + test + + + io.github.a2asdk + a2a-java-sdk-tests-server-common + test-jar + test + + + com.fasterxml.jackson.core + jackson-databind + test + + + jakarta.enterprise + jakarta.enterprise.cdi-api + test + + + jakarta.inject + jakarta.inject-api + test + + + jakarta.json + jakarta.json-api + test + + + jakarta.ws.rs + jakarta.ws.rs-api + test + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + test + + + io.rest-assured + rest-assured + test + + + org.jboss.arquillian.junit5 + arquillian-junit5-container + test + + + org.wildfly.arquillian + wildfly-arquillian-container-managed + test + + + org.jboss.logging + commons-logging-jboss-logging + test + + + org.jboss.shrinkwrap + shrinkwrap-api + test + + + org.junit.jupiter + junit-jupiter + test + + + org.jboss.threads + jboss-threads + test + + + org.hamcrest + hamcrest + test + + + + + + org.wildfly.glow + wildfly-glow-arquillian-plugin + + + org.wildfly.plugins + wildfly-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + + + \ No newline at end of file diff --git a/src/scripts/configure_logger.cli b/tests/impl/src/scripts/configure_logger.cli similarity index 100% rename from src/scripts/configure_logger.cli rename to tests/impl/src/scripts/configure_logger.cli diff --git a/tests/impl/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/JakartaA2AServerTest.java b/tests/impl/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/JakartaA2AServerTest.java new file mode 100644 index 0000000..7313384 --- /dev/null +++ b/tests/impl/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/JakartaA2AServerTest.java @@ -0,0 +1,71 @@ +package org.wildfly.extras.a2a.server.apps.jakarta; + + +import java.io.File; +import java.io.IOException; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; + +import io.a2a.A2A; +import io.a2a.server.PublicAgentCard; +import io.a2a.server.apps.common.AbstractA2AServerTest; +import io.a2a.spec.Event; +import io.a2a.util.Assert; +import mutiny.zero.ZeroPublisher; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.container.test.api.RunAsClient; +import org.jboss.arquillian.junit5.container.annotation.ArquillianTest; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.wildfly.extras.a2a.server.jakarta.test.common.A2ATestResource; +import org.wildfly.extras.a2a.server.jakarta.test.common.RestApplication; + + +@ArquillianTest +@RunAsClient +public class JakartaA2AServerTest extends AbstractA2AServerTest { + + public JakartaA2AServerTest() { + super(8080); + } + + @Deployment + public static WebArchive createTestArchive() throws Exception { + final JavaArchive[] libraries = List.of( + // a2a-java-sdk-client.jar + getJarForClass(A2A.class), + // a2a-java-sdk-common.jar + getJarForClass(Assert.class), + // a2a-java-sdk-server-common.jar + getJarForClass(PublicAgentCard.class), + // a2a-java-sdk-spec.jar + getJarForClass(Event.class), + // mutiny-zero.jar. This is provided by some WildFly layers, but not always, and not in + // the server provisioned by Glow when inspecting our war + getJarForClass(ZeroPublisher.class)).toArray(new JavaArchive[0]); + + + WebArchive archive = ShrinkWrap.create(WebArchive.class, "ROOT.war") + .addAsLibraries(libraries) + // Extra dependencies needed by the tests + .addPackage(AbstractA2AServerTest.class.getPackage()) + .addPackage(A2AServerResource.class.getPackage()) + .addPackage(A2ATestResource.class.getPackage()) + // Add deployment descriptors + .addAsManifestResource("META-INF/beans.xml", "beans.xml") + .addAsWebInfResource("META-INF/beans.xml", "beans.xml") + .addAsWebInfResource("WEB-INF/web.xml", "web.xml"); + archive.toString(true); + return archive; + } + + static JavaArchive getJarForClass(Class clazz) throws Exception { + File f = new File(clazz.getProtectionDomain().getCodeSource().getLocation().toURI()); + return ShrinkWrap.createFromZipFile(JavaArchive.class, f); + } +} diff --git a/src/test/resources/logging.properties b/tests/impl/src/test/resources/logging.properties similarity index 100% rename from src/test/resources/logging.properties rename to tests/impl/src/test/resources/logging.properties diff --git a/tests/wildfly-jar/pom.xml b/tests/wildfly-jar/pom.xml new file mode 100644 index 0000000..8622be2 --- /dev/null +++ b/tests/wildfly-jar/pom.xml @@ -0,0 +1,132 @@ + + + 4.0.0 + + + org.wildfly.extras.a2a + a2a-java-sdk-server-jakarta-parent + 0.2.3.Beta2-SNAPSHOT + ../../pom.xml + + + a2a-java-sdk-server-jakarta-tests-wildfly + + jar + + WildFly Extras - Java A2A SDK for Jakarta - Tests - WildFly Jar + Java SDK for the Agent2Agent Protocol (A2A) - SDK - Jakarta - Tests - WildFly Jar + + + + ${project.groupId} + a2a-java-sdk-server-jakarta-wildfly + ${project.version} + test + + + ${project.groupId} + a2a-java-sdk-server-jakarta-test-common + ${project.version} + test + + + io.github.a2asdk + a2a-java-sdk-tests-server-common + test + + + io.github.a2asdk + a2a-java-sdk-tests-server-common + test-jar + test + + + com.fasterxml.jackson.core + jackson-databind + test + + + jakarta.enterprise + jakarta.enterprise.cdi-api + test + + + jakarta.inject + jakarta.inject-api + test + + + jakarta.json + jakarta.json-api + test + + + jakarta.ws.rs + jakarta.ws.rs-api + test + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + test + + + io.rest-assured + rest-assured + test + + + org.jboss.arquillian.junit5 + arquillian-junit5-container + test + + + org.wildfly.arquillian + wildfly-arquillian-container-managed + test + + + org.jboss.logging + commons-logging-jboss-logging + test + + + org.jboss.shrinkwrap + shrinkwrap-api + test + + + org.junit.jupiter + junit-jupiter + test + + + org.jboss.threads + jboss-threads + test + + + org.hamcrest + hamcrest + test + + + + + + org.wildfly.glow + wildfly-glow-arquillian-plugin + + + org.wildfly.plugins + wildfly-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + + + \ No newline at end of file diff --git a/tests/wildfly-jar/src/scripts/configure_logger.cli b/tests/wildfly-jar/src/scripts/configure_logger.cli new file mode 100644 index 0000000..a45fb24 --- /dev/null +++ b/tests/wildfly-jar/src/scripts/configure_logger.cli @@ -0,0 +1,2 @@ +/subsystem=logging/logger=org.jboss.weld:add(level=DEBUG) +/subsystem=logging/logger=io.a2a:add(level=DEBUG) \ No newline at end of file diff --git a/tests/wildfly-jar/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/WildFlyJarJakartaA2AServerTest.java b/tests/wildfly-jar/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/WildFlyJarJakartaA2AServerTest.java new file mode 100644 index 0000000..42cfeed --- /dev/null +++ b/tests/wildfly-jar/src/test/java/org/wildfly/extras/a2a/server/apps/jakarta/WildFlyJarJakartaA2AServerTest.java @@ -0,0 +1,51 @@ +package org.wildfly.extras.a2a.server.apps.jakarta; + + +import java.io.File; +import java.io.IOException; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; + +import io.a2a.server.apps.common.AbstractA2AServerTest; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.container.test.api.RunAsClient; +import org.jboss.arquillian.junit5.container.annotation.ArquillianTest; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.wildfly.extras.a2a.server.jakarta.test.common.A2ATestResource; +import org.wildfly.extras.a2a.server.jakarta.test.common.RestApplication; + + +@ArquillianTest +@RunAsClient +public class WildFlyJarJakartaA2AServerTest extends AbstractA2AServerTest { + + public WildFlyJarJakartaA2AServerTest() { + super(8080); + } + + @Deployment + public static WebArchive createTestArchive() throws Exception { + + // Get wildfly-jar path + JavaArchive wildFlyJar = ShrinkWrap.createFromZipFile(JavaArchive.class, + new File(A2AServerResource.class.getProtectionDomain().getCodeSource().getLocation().toURI())); + + WebArchive archive = ShrinkWrap.create(WebArchive.class, "ROOT.war") + .addAsLibrary(wildFlyJar) + // Extra dependencies needed by the tests + .addPackage(AbstractA2AServerTest.class.getPackage()) + .addPackage(A2ATestResource.class.getPackage()) + // Add deployment descriptors + .addAsManifestResource("META-INF/beans.xml", "beans.xml") + .addAsWebInfResource("META-INF/beans.xml", "beans.xml") + .addAsWebInfResource("WEB-INF/web.xml", "web.xml"); + archive.toString(true); + return archive; + } +} diff --git a/tests/wildfly-jar/src/test/resources/logging.properties b/tests/wildfly-jar/src/test/resources/logging.properties new file mode 100644 index 0000000..17885c8 --- /dev/null +++ b/tests/wildfly-jar/src/test/resources/logging.properties @@ -0,0 +1,29 @@ +# +# Copyright The WildFly Authors +# SPDX-License-Identifier: Apache-2.0 +# + +# Additional logger names to configure (root logger is always configured) +loggers=sun.rmi,org.jboss.shrinkwrap,org.apache.http.wire +logger.org.jboss.shrinkwrap.level=INFO +logger.sun.rmi.level=WARNING +logger.org.apache.http.wire.level=WARN + +# Root logger level +logger.level=WARN + +# Root logger handlers +logger.handlers=FILE + +# File handler configuration +handler.FILE=org.jboss.logmanager.handlers.FileHandler +handler.FILE.properties=autoFlush,append,fileName +handler.FILE.autoFlush=true +handler.FILE.fileName=./target/test.log +handler.FILE.formatter=PATTERN +handler.FILE.append=true + +# Formatter pattern configuration +formatter.PATTERN=org.jboss.logmanager.formatters.PatternFormatter +formatter.PATTERN.properties=pattern +formatter.PATTERN.pattern=%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n diff --git a/wildfly-jar/pom.xml b/wildfly-jar/pom.xml new file mode 100644 index 0000000..1b6ab8c --- /dev/null +++ b/wildfly-jar/pom.xml @@ -0,0 +1,182 @@ + + + 4.0.0 + + + org.wildfly.extras.a2a + a2a-java-sdk-server-jakarta-parent + 0.2.3.Beta2-SNAPSHOT + + + a2a-java-sdk-server-jakarta-wildfly + + jar + + WildFly Extras - Java A2A SDK for Jakarta - WildFly Jar + Java SDK for the Agent2Agent Protocol (A2A) - SDK - Jakarta - Jar for WildFly + + 3.7.1 + + + + + io.github.a2asdk + a2a-java-sdk-client + + + * + * + + + + + io.github.a2asdk + a2a-java-sdk-common + + + * + * + + + + + io.github.a2asdk + a2a-java-sdk-server-common + + + * + * + + + + + io.github.a2asdk + a2a-java-sdk-spec + + + * + * + + + + + io.smallrye.reactive + mutiny-zero + + + * + * + + + + + ${project.groupId} + a2a-java-sdk-server-jakarta + ${project.version} + + + io.github.a2asdk + a2a-java-sdk-tests-server-common + test + + + io.github.a2asdk + a2a-java-sdk-tests-server-common + test-jar + test + + + com.fasterxml.jackson.core + jackson-databind + provided + + + jakarta.enterprise + jakarta.enterprise.cdi-api + provided + + + jakarta.inject + jakarta.inject-api + provided + + + jakarta.json + jakarta.json-api + provided + + + jakarta.ws.rs + jakarta.ws.rs-api + provided + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + test + + + io.rest-assured + rest-assured + test + + + org.jboss.arquillian.junit5 + arquillian-junit5-container + test + + + org.wildfly.arquillian + wildfly-arquillian-container-managed + test + + + org.jboss.logging + commons-logging-jboss-logging + test + + + org.jboss.shrinkwrap + shrinkwrap-api + test + + + org.junit.jupiter + junit-jupiter + test + + + org.jboss.threads + jboss-threads + test + + + org.hamcrest + hamcrest + test + + + + + + maven-assembly-plugin + + + package + + single + + + false + + jar-with-dependencies + + + + + + + + \ No newline at end of file