From 7d42ab822b2c3c19a9accbc7b325543a5031f767 Mon Sep 17 00:00:00 2001 From: rmartinc Date: Wed, 12 Jun 2024 10:39:20 +0200 Subject: [PATCH] Remove adapter app-server-undertow profile which is not used Closes #30347 Signed-off-by: rmartinc --- .../servers/app-server/pom.xml | 1 - .../servers/app-server/undertow/pom.xml | 70 ----- .../undertow/UndertowAppServer.java | 261 ------------------ .../UndertowAppServerArquillianExtension.java | 39 --- .../UndertowAppServerConfiguration.java | 48 ---- .../container/UndertowAppServerProvider.java | 85 ------ .../UndertowDeploymentArchiveProcessor.java | 67 ----- .../saml/util/RestSamlApplicationConfig.java | 47 ---- ...boss.arquillian.core.spi.LoadableExtension | 1 - ...llian.container.AppServerContainerProvider | 1 - .../integration-arquillian/tests/base/pom.xml | 20 -- .../servlet/SAMLClockSkewAdapterTest.java | 1 - .../SAMLLoginResponseHandlingTest.java | 1 - .../servlet/SAMLLogoutAdapterTest.java | 1 - .../servlet/SAMLServletAdapterTest.java | 1 - .../SAMLServletSessionTimeoutTest.java | 1 - .../adapter/servlet/SamlSignatureTest.java | 1 - .../adapter/servlet/SamlXMLAttacksTest.java | 1 - .../UndertowRelaviteUriAdapterTest.java | 149 ---------- .../utils/arquillian/ContainerConstants.java | 2 - 20 files changed, 798 deletions(-) delete mode 100644 testsuite/integration-arquillian/servers/app-server/undertow/pom.xml delete mode 100644 testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServer.java delete mode 100644 testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServerArquillianExtension.java delete mode 100644 testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServerConfiguration.java delete mode 100644 testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/container/UndertowAppServerProvider.java delete mode 100644 testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/container/UndertowDeploymentArchiveProcessor.java delete mode 100644 testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/saml/util/RestSamlApplicationConfig.java delete mode 100644 testsuite/integration-arquillian/servers/app-server/undertow/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension delete mode 100644 testsuite/integration-arquillian/servers/app-server/undertow/src/main/resources/META-INF/services/org.keycloak.testsuite.arquillian.container.AppServerContainerProvider delete mode 100644 testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowRelaviteUriAdapterTest.java diff --git a/testsuite/integration-arquillian/servers/app-server/pom.xml b/testsuite/integration-arquillian/servers/app-server/pom.xml index 30260222ef..a5e877a89a 100644 --- a/testsuite/integration-arquillian/servers/app-server/pom.xml +++ b/testsuite/integration-arquillian/servers/app-server/pom.xml @@ -44,7 +44,6 @@ build-app-servers jboss - undertow diff --git a/testsuite/integration-arquillian/servers/app-server/undertow/pom.xml b/testsuite/integration-arquillian/servers/app-server/undertow/pom.xml deleted file mode 100644 index db333880a1..0000000000 --- a/testsuite/integration-arquillian/servers/app-server/undertow/pom.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - org.keycloak.testsuite - integration-arquillian-servers-app-server - 999.0.0-SNAPSHOT - - - 4.0.0 - - integration-arquillian-servers-app-server-undertow - jar - App Server - Undertow - - - - org.keycloak.testsuite - keycloak-saml-undertow-adapter-jakarta - ${project.version} - - - org.keycloak.testsuite - integration-arquillian-servers-app-server-spi - ${project.version} - - - org.keycloak.testsuite - integration-arquillian-util - ${project.version} - - - org.jboss.resteasy - resteasy-undertow - - - org.jboss.arquillian.container - undertow-embedded - - - commons-io - commons-io - - - - - - org.jboss.spec.javax.servlet.jsp - jboss-jsp-api_2.3_spec - - - - diff --git a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServer.java b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServer.java deleted file mode 100644 index f419c4a1bc..0000000000 --- a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServer.java +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates - * and other contributors as indicated by the @author tags. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.keycloak.testsuite.arquillian.undertow; - -import io.undertow.Undertow; -import io.undertow.server.handlers.PathHandler; -import io.undertow.servlet.api.DeploymentInfo; -import io.undertow.servlet.api.DeploymentManager; -import io.undertow.servlet.api.ServletContainer; -import io.undertow.servlet.api.ServletInfo; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Field; -import java.nio.charset.Charset; -import java.util.Collection; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.stream.Collectors; -import jakarta.servlet.ServletException; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.core.Application; - -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.arquillian.undertow.UndertowContainerConfiguration; -import org.jboss.arquillian.container.spi.client.container.DeployableContainer; -import org.jboss.arquillian.container.spi.client.container.DeploymentException; -import org.jboss.arquillian.container.spi.client.container.LifecycleException; -import org.jboss.arquillian.container.spi.client.protocol.ProtocolDescription; -import org.jboss.arquillian.container.spi.client.protocol.metadata.HTTPContext; -import org.jboss.arquillian.container.spi.client.protocol.metadata.ProtocolMetaData; -import org.jboss.arquillian.container.spi.client.protocol.metadata.Servlet; -import org.jboss.logging.Logger; -import org.jboss.resteasy.core.ResteasyDeploymentImpl; -import org.jboss.resteasy.plugins.server.undertow.UndertowJaxrsServer; -import org.jboss.resteasy.spi.ResteasyDeployment; -import org.jboss.shrinkwrap.api.Archive; -import org.jboss.shrinkwrap.api.Node; -import org.jboss.shrinkwrap.api.asset.ClassAsset; -import org.jboss.shrinkwrap.api.spec.WebArchive; -import org.jboss.shrinkwrap.descriptor.api.Descriptor; -import org.jboss.shrinkwrap.undertow.api.UndertowWebArchive; -import org.keycloak.common.util.reflections.Reflections; -import org.keycloak.testsuite.arquillian.undertow.saml.util.RestSamlApplicationConfig; -import org.keycloak.testsuite.utils.undertow.UndertowDeployerHelper; -import org.keycloak.testsuite.utils.undertow.UndertowWarClassLoader; -import java.io.InputStream; - -/** - * @author Vlasta Ramik - */ -public class UndertowAppServer implements DeployableContainer { - - private static final Logger log = Logger.getLogger(UndertowAppServer.class); - - private UndertowContainerConfiguration configuration; - private UndertowJaxrsServer undertow; - Map deployedArchivesToContextPath = new ConcurrentHashMap<>(); - - @Override - public Class getConfigurationClass() { - return UndertowAppServerConfiguration.class; - } - - @Override - public void setup(UndertowAppServerConfiguration configuration) { - this.configuration = configuration; - } - - @Override - public void start() throws LifecycleException { - long start = System.currentTimeMillis(); - - undertow = new UndertowJaxrsServer(); - undertow.start(Undertow.builder() - .addHttpListener(configuration.getBindHttpPort(), configuration.getBindAddress())); - log.infof("App server started in %dms on http://%s:%d/", (System.currentTimeMillis() - start), configuration.getBindAddress(), configuration.getBindHttpPort()); - } - - @Override - public void stop() throws LifecycleException { - undertow.stop(); - log.info("App Server stopped."); - } - - @Override - public ProtocolDescription getDefaultProtocol() { - return new ProtocolDescription("Servlet 3.1"); - } - - @Override - public ProtocolMetaData deploy(Archive archive) throws DeploymentException { - log.info("Deploying archive " + archive.getName()); - - // Remove jsps - String ioTMPDir = System.getProperty("java.io.tmpdir", ""); // My Intellij and Terminal stores tmp directory in this property - if (!ioTMPDir.isEmpty()) { - ioTMPDir = ioTMPDir.endsWith("/") ? ioTMPDir : ioTMPDir + "/"; - File tmpUndertowJSPDirectory = new File(ioTMPDir + "org/apache/jsp"); - if (tmpUndertowJSPDirectory.exists()) { - try { - FileUtils.deleteDirectory(tmpUndertowJSPDirectory); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - DeploymentInfo di; - if (archive instanceof UndertowWebArchive) { - di = ((UndertowWebArchive) archive).getDeploymentInfo(); - } else if (archive instanceof WebArchive) { - WebArchive webArchive = (WebArchive)archive; - - Optional applicationClassNode = archive.getContent(archivePath -> - archivePath.get().startsWith("/WEB-INF/classes/") && archivePath.get().endsWith("Application.class")) - .values().stream().findFirst(); - - if (isJaxrsApp(webArchive)) { - di = new UndertowDeployerHelper().getDeploymentInfo(configuration, webArchive, - undertow.undertowDeployment(discoverPathAnnotatedClasses(webArchive))); - } else if (applicationClassNode.isPresent()) { - String applicationPath = applicationClassNode.get().getPath().get(); - - ResteasyDeployment deployment = new ResteasyDeploymentImpl(); - deployment.setApplicationClass(extractClassName(applicationPath)); - di = new UndertowDeployerHelper().getDeploymentInfo(configuration, (WebArchive) archive, undertow.undertowDeployment(deployment)); - } else { - di = new UndertowDeployerHelper().getDeploymentInfo(configuration, webArchive); - } - } else { - throw new IllegalArgumentException("UndertowContainer only supports UndertowWebArchive or WebArchive."); - } - - if ("ROOT.war".equals(archive.getName())) { - di.setContextPath("/"); - } - - ClassLoader parentCl = Thread.currentThread().getContextClassLoader(); - UndertowWarClassLoader classLoader = new UndertowWarClassLoader(parentCl, archive); - Thread.currentThread().setContextClassLoader(classLoader); - - try { - undertow.deploy(di); - } finally { - Thread.currentThread().setContextClassLoader(parentCl); - } - - deployedArchivesToContextPath.put(archive.getName(), di.getContextPath()); - - return new ProtocolMetaData().addContext( - createHttpContextForDeploymentInfo(di)); - } - - private String extractClassName(String applicationPath) { - applicationPath = applicationPath - .substring(0, applicationPath.lastIndexOf(".class")) // Remove .class - .replaceFirst("^/WEB-INF/classes/", ""); // Remove /WEB-INF/classes/ from beginning - - return applicationPath.replaceAll("/", "."); - } - - @Override - public void undeploy(Archive archive) throws DeploymentException { - log.info("Undeploying archive " + archive.getName()); - Field containerField = Reflections.findDeclaredField(UndertowJaxrsServer.class, "container"); - Reflections.setAccessible(containerField); - ServletContainer container = (ServletContainer) Reflections.getFieldValue(containerField, undertow); - - DeploymentManager deploymentMgr = container.getDeployment(archive.getName()); - if (deploymentMgr != null) { - DeploymentInfo deployment = deploymentMgr.getDeployment().getDeploymentInfo(); - - try { - deploymentMgr.stop(); - } catch (ServletException se) { - throw new DeploymentException(se.getMessage(), se); - } - - deploymentMgr.undeploy(); - - Field rootField = Reflections.findDeclaredField(UndertowJaxrsServer.class, "root"); - Reflections.setAccessible(rootField); - PathHandler root = (PathHandler) Reflections.getFieldValue(rootField, undertow); - - String path = deployedArchivesToContextPath.get(archive.getName()); - root.removePrefixPath(path); - - container.removeDeployment(deployment); - } else { - log.warnf("Deployment '%s' not found", archive.getName()); - } - } - - @Override - public void deploy(Descriptor descriptor) throws DeploymentException { - throw new UnsupportedOperationException("Not implemented"); - } - - @Override - public void undeploy(Descriptor descriptor) throws DeploymentException { - throw new UnsupportedOperationException("Not implemented"); - } - - private HTTPContext createHttpContextForDeploymentInfo(DeploymentInfo deploymentInfo) { - HTTPContext httpContext = new HTTPContext(configuration.getBindAddress(), configuration.getBindHttpPort()); - final Map servlets = deploymentInfo.getServlets(); - final Collection servletsInfo = servlets.values(); - for (ServletInfo servletInfo : servletsInfo) { - httpContext.add(new Servlet(servletInfo.getName(), deploymentInfo.getContextPath())); - } - return httpContext; - } - - private boolean isJaxrsApp(WebArchive archive) throws DeploymentException { - if (! archive.contains("/WEB-INF/web.xml")) { - return false; - } - try (InputStream stream = archive.get("/WEB-INF/web.xml").getAsset().openStream()) { - return - IOUtils.toString(stream, Charset.forName("UTF-8")) - .contains(Application.class.getName()); - } catch (IOException e) { - throw new DeploymentException("Unable to read archive.", e); - } - } - - private ResteasyDeployment discoverPathAnnotatedClasses(WebArchive webArchive) { - //take all classes from war and add those with @Path annotation to RestSamlApplicationConfig - Set> classes = webArchive.getContent(archivePath -> - archivePath.get().startsWith("/WEB-INF/classes/") && - archivePath.get().endsWith(".class") - ).values().stream() - .filter(node -> node.getAsset() instanceof ClassAsset) - .map(node -> ((ClassAsset)node.getAsset()).getSource()) - .filter(clazz -> clazz.isAnnotationPresent(Path.class)) - .collect(Collectors.toSet()); - - ResteasyDeployment deployment = new ResteasyDeploymentImpl(); - deployment.setApplication(new RestSamlApplicationConfig(classes)); - return deployment; - } -} diff --git a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServerArquillianExtension.java b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServerArquillianExtension.java deleted file mode 100644 index 06d18d691e..0000000000 --- a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServerArquillianExtension.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates - * and other contributors as indicated by the @author tags. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.keycloak.testsuite.arquillian.undertow; - -import org.jboss.arquillian.container.spi.client.container.DeployableContainer; -import org.jboss.arquillian.container.test.spi.client.deployment.ApplicationArchiveProcessor; -import org.jboss.arquillian.core.spi.LoadableExtension; -import org.keycloak.testsuite.arquillian.undertow.container.UndertowDeploymentArchiveProcessor; - -/** - * @author Vlasta Ramik - */ -public class UndertowAppServerArquillianExtension implements LoadableExtension { - - @Override - public void register(ExtensionBuilder builder) { - builder - .service(DeployableContainer.class, UndertowAppServer.class) - .service(ApplicationArchiveProcessor.class, UndertowDeploymentArchiveProcessor.class); - - } - - -} diff --git a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServerConfiguration.java b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServerConfiguration.java deleted file mode 100644 index 9a6ccce471..0000000000 --- a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/UndertowAppServerConfiguration.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates - * and other contributors as indicated by the @author tags. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.keycloak.testsuite.arquillian.undertow; - -import org.arquillian.undertow.UndertowContainerConfiguration; -import org.jboss.arquillian.container.spi.ConfigurationException; -import org.jboss.logging.Logger; - -public class UndertowAppServerConfiguration extends UndertowContainerConfiguration { - - protected static final Logger log = Logger.getLogger(UndertowAppServerConfiguration.class); - - private int bindHttpPortOffset = 0; - - public int getBindHttpPortOffset() { - return bindHttpPortOffset; - } - - public void setBindHttpPortOffset(int bindHttpPortOffset) { - this.bindHttpPortOffset = bindHttpPortOffset; - } - - @Override - public void validate() throws ConfigurationException { - super.validate(); - - int basePort = getBindHttpPort(); - int newPort = basePort + bindHttpPortOffset; - setBindHttpPort(newPort); - log.info("App server undertow will listen on port: " + newPort); - } - -} diff --git a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/container/UndertowAppServerProvider.java b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/container/UndertowAppServerProvider.java deleted file mode 100644 index f9af9fe725..0000000000 --- a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/container/UndertowAppServerProvider.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates - * and other contributors as indicated by the @author tags. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.keycloak.testsuite.arquillian.undertow.container; - -import java.util.ArrayList; -import java.util.List; -import org.jboss.shrinkwrap.descriptor.spi.node.Node; -import org.keycloak.testsuite.arquillian.undertow.UndertowAppServer; -import org.keycloak.testsuite.arquillian.container.AppServerContainerProvider; - -/** - * @author Vlasta Ramik - */ -public class UndertowAppServerProvider implements AppServerContainerProvider { - - private Node configuration; - private static final String containerName = "undertow"; - - @Override - public String getName() { - return containerName; - } - - @Override - public List getContainers() { - List containers = new ArrayList<>(); - - containers.add(standaloneContainer()); - - //not supported yet -// containers.add(haNodeContainer(1)); -// containers.add(haNodeContainer(2)); - - return containers; - } - - private void createChild(String name, String text) { - configuration.createChild("property").attribute("name", name).text(text); - } - - private Node standaloneContainer() { - Node container = new Node("container"); - container.attribute("mode", "manual"); - container.attribute("qualifier", AppServerContainerProvider.APP_SERVER + "-" + containerName); - - configuration = container.createChild("configuration"); - createChild("enabled", "true"); - createChild("bindAddress", "0.0.0.0"); - createChild("bindHttpPort", "8280"); - createChild("adapterImplClass", UndertowAppServer.class.getName()); - - return container; - } - - private Node haNodeContainer(int number) { - Node container = new Node("container"); - container.attribute("mode", "manual"); - container.attribute("qualifier", AppServerContainerProvider.APP_SERVER + "-" + containerName + "-ha-node-" + number); - - configuration = container.createChild("configuration"); - createChild("enabled", "true"); - createChild("bindAddress", "localhost"); - createChild("bindHttpPort", "8280"); - createChild("bindHttpPortOffset", Integer.toString(number)); - createChild("adapterImplClass", UndertowAppServer.class.getName()); - - return container; - } - -} diff --git a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/container/UndertowDeploymentArchiveProcessor.java b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/container/UndertowDeploymentArchiveProcessor.java deleted file mode 100644 index 9eb5fc1924..0000000000 --- a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/container/UndertowDeploymentArchiveProcessor.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates - * and other contributors as indicated by the @author tags. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.keycloak.testsuite.arquillian.undertow.container; - -import org.jboss.arquillian.container.test.spi.client.deployment.ApplicationArchiveProcessor; -import org.jboss.arquillian.test.spi.TestClass; -import org.jboss.logging.Logger; -import org.jboss.shrinkwrap.api.Archive; -import org.keycloak.testsuite.utils.arquillian.DeploymentArchiveProcessorUtils; - -/** - * - * @author Vlasta Ramik - */ -public class UndertowDeploymentArchiveProcessor implements ApplicationArchiveProcessor { - - private final Logger log = Logger.getLogger(UndertowDeploymentArchiveProcessor.class); - - @Override - public void process(Archive archive, TestClass testClass) { - if (DeploymentArchiveProcessorUtils.checkRunOnServerDeployment(archive)) return; - if (!System.getProperty("app.server", "undertow").equals("undertow")) return; - - modifyWebXML(archive, testClass); - - modifyOIDCAdapterConfig(archive, DeploymentArchiveProcessorUtils.ADAPTER_CONFIG_PATH); - - modifySAMLAdapterConfig(archive, DeploymentArchiveProcessorUtils.SAML_ADAPTER_CONFIG_PATH); - modifySAMLAdapterConfig(archive, DeploymentArchiveProcessorUtils.SAML_ADAPTER_CONFIG_PATH_TENANT1); - modifySAMLAdapterConfig(archive, DeploymentArchiveProcessorUtils.SAML_ADAPTER_CONFIG_PATH_TENANT2); - - modifyOIDCAdapterConfig(archive, DeploymentArchiveProcessorUtils.ADAPTER_CONFIG_PATH_JS); - } - - private void modifyWebXML(Archive archive, TestClass testClass) { - if (!archive.contains(DeploymentArchiveProcessorUtils.WEBXML_PATH)) return; - } - - private void modifyOIDCAdapterConfig(Archive archive, String adapterConfigPath) { - if (!archive.contains(adapterConfigPath)) return; - - log.debug("Modifying adapter config " + adapterConfigPath + " in " + archive.getName()); - - DeploymentArchiveProcessorUtils.modifyOIDCAdapterConfig(archive, adapterConfigPath); - } - - private void modifySAMLAdapterConfig(Archive archive, String adapterConfigPath) { - if (!archive.contains(adapterConfigPath)) return; - - log.debug("Modifying adapter config " + adapterConfigPath + " in " + archive.getName()); - DeploymentArchiveProcessorUtils.modifySAMLAdapterConfig(archive, adapterConfigPath); - } -} diff --git a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/saml/util/RestSamlApplicationConfig.java b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/saml/util/RestSamlApplicationConfig.java deleted file mode 100644 index 5a624bcaad..0000000000 --- a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/java/org/keycloak/testsuite/arquillian/undertow/saml/util/RestSamlApplicationConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates - * and other contributors as indicated by the @author tags. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.keycloak.testsuite.arquillian.undertow.saml.util; - -import java.util.Set; -import jakarta.ws.rs.core.Application; - -/** - * Wildfly JAX-RS Integration has support for scanning deployment for annotations. - * - * https://github.com/wildfly/wildfly/blob/14.0.1.Final/jaxrs/src/main/java/org/jboss/as/jaxrs/deployment/JaxrsAnnotationProcessor.java - * - * On undertow we have to set Application Class manually: - * - * ResteasyDeployment deployment = new ResteasyDeployment(); - * deployment.setApplication(application); - * - * @author vramik - */ -public class RestSamlApplicationConfig extends Application { - - private final Set> classes; - - public RestSamlApplicationConfig(Set> classes) { - this.classes = classes; - } - - @Override - public Set> getClasses() { - return classes; - } -} diff --git a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension deleted file mode 100644 index 9201599f3d..0000000000 --- a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension +++ /dev/null @@ -1 +0,0 @@ -org.keycloak.testsuite.arquillian.undertow.UndertowAppServerArquillianExtension diff --git a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/resources/META-INF/services/org.keycloak.testsuite.arquillian.container.AppServerContainerProvider b/testsuite/integration-arquillian/servers/app-server/undertow/src/main/resources/META-INF/services/org.keycloak.testsuite.arquillian.container.AppServerContainerProvider deleted file mode 100644 index a00362f31a..0000000000 --- a/testsuite/integration-arquillian/servers/app-server/undertow/src/main/resources/META-INF/services/org.keycloak.testsuite.arquillian.container.AppServerContainerProvider +++ /dev/null @@ -1 +0,0 @@ -org.keycloak.testsuite.arquillian.undertow.container.UndertowAppServerProvider diff --git a/testsuite/integration-arquillian/tests/base/pom.xml b/testsuite/integration-arquillian/tests/base/pom.xml index 8676cf3e22..1ca1b47b46 100644 --- a/testsuite/integration-arquillian/tests/base/pom.xml +++ b/testsuite/integration-arquillian/tests/base/pom.xml @@ -476,26 +476,6 @@ - - app-server-undertow - - - app.server - undertow - - - - undertow - - - - org.keycloak.testsuite - integration-arquillian-servers-app-server-undertow - ${project.version} - runtime - - - app-server-wildfly diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLClockSkewAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLClockSkewAdapterTest.java index c35c539afe..bfa53ef3a8 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLClockSkewAdapterTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLClockSkewAdapterTest.java @@ -42,7 +42,6 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.keycloak.testsuite.util.SamlClient.Binding.POST; -@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW) @AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY) @AppServerContainer(ContainerConstants.APP_SERVER_EAP) @AppServerContainer(ContainerConstants.APP_SERVER_EAP8) diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLLoginResponseHandlingTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLLoginResponseHandlingTest.java index 9007e65550..decb16bc14 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLLoginResponseHandlingTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLLoginResponseHandlingTest.java @@ -53,7 +53,6 @@ import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement; /** * @author mhajas */ -@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW) @AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY) @AppServerContainer(ContainerConstants.APP_SERVER_EAP) @AppServerContainer(ContainerConstants.APP_SERVER_EAP8) diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLLogoutAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLLogoutAdapterTest.java index de14c7bec4..6a4ad5ccb7 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLLogoutAdapterTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLLogoutAdapterTest.java @@ -49,7 +49,6 @@ import static org.keycloak.testsuite.util.SamlClient.Binding.REDIRECT; * * @author hmlnarik */ -@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW) @AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY) @AppServerContainer(ContainerConstants.APP_SERVER_EAP) @AppServerContainer(ContainerConstants.APP_SERVER_EAP8) diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLServletAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLServletAdapterTest.java index c1dc481425..2ffe1fce03 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLServletAdapterTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLServletAdapterTest.java @@ -192,7 +192,6 @@ import org.xml.sax.SAXException; /** * @author mhajas */ -@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW) @AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY) @AppServerContainer(ContainerConstants.APP_SERVER_EAP) @AppServerContainer(ContainerConstants.APP_SERVER_EAP8) diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLServletSessionTimeoutTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLServletSessionTimeoutTest.java index 25d5e92a64..2d9b71729e 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLServletSessionTimeoutTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SAMLServletSessionTimeoutTest.java @@ -32,7 +32,6 @@ import static org.keycloak.testsuite.saml.AbstractSamlTest.REALM_NAME; import static org.keycloak.testsuite.util.Matchers.bodyHC; -@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW) @AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY) @AppServerContainer(ContainerConstants.APP_SERVER_EAP) @AppServerContainer(ContainerConstants.APP_SERVER_EAP8) diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SamlSignatureTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SamlSignatureTest.java index d243e17315..406290d384 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SamlSignatureTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SamlSignatureTest.java @@ -76,7 +76,6 @@ import static org.keycloak.testsuite.saml.AbstractSamlTest.REALM_SIGNING_CERTIFI * * @author hmlnarik */ -@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW) @AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY) @AppServerContainer(ContainerConstants.APP_SERVER_EAP) @AppServerContainer(ContainerConstants.APP_SERVER_EAP8) diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SamlXMLAttacksTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SamlXMLAttacksTest.java index b8817ce501..16fc8ea408 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SamlXMLAttacksTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/servlet/SamlXMLAttacksTest.java @@ -33,7 +33,6 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.keycloak.testsuite.util.Matchers.bodyHC; import static org.keycloak.testsuite.util.Matchers.statusCodeIsHC; -@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW) @AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY) @AppServerContainer(ContainerConstants.APP_SERVER_EAP) @AppServerContainer(ContainerConstants.APP_SERVER_EAP8) diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowRelaviteUriAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowRelaviteUriAdapterTest.java deleted file mode 100644 index e69c09e198..0000000000 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/undertow/servlet/UndertowRelaviteUriAdapterTest.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates - * and other contributors as indicated by the @author tags. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.keycloak.testsuite.adapter.undertow.servlet; - -import java.util.List; -import java.util.Map; -import org.jboss.arquillian.container.test.api.Deployment; -import org.jboss.arquillian.graphene.page.Page; -import org.jboss.shrinkwrap.api.spec.WebArchive; -import org.junit.Assert; -import org.junit.Ignore; -import org.junit.Test; -import org.keycloak.representations.idm.RealmRepresentation; -import org.keycloak.testsuite.adapter.AbstractServletsAdapterTest; -import org.keycloak.testsuite.adapter.filter.AdapterActionsFilter; -import org.keycloak.testsuite.adapter.page.CustomerDb; -import org.keycloak.testsuite.adapter.page.CustomerPortal; -import org.keycloak.testsuite.adapter.page.ProductPortal; -import org.keycloak.testsuite.adapter.servlet.CustomerDatabaseServlet; -import org.keycloak.testsuite.adapter.servlet.CustomerServlet; -import org.keycloak.testsuite.adapter.servlet.ErrorServlet; -import org.keycloak.testsuite.adapter.servlet.ProductServlet; -import org.keycloak.testsuite.adapter.servlet.ServletTestUtils; -import org.keycloak.testsuite.arquillian.annotation.AppServerContainer; -import org.keycloak.testsuite.util.AccountHelper; - -import static org.keycloak.testsuite.arquillian.AuthServerTestEnricher.AUTH_SERVER_CONTAINER_DEFAULT; -import static org.keycloak.testsuite.auth.page.AuthRealm.DEMO; -import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm; -import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlEquals; -import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWithLoginUrlOf; - -/** - * Also tests relative URIs in the adapter and valid redirect uris. - * Also tests adapters not configured with public key - * - * note: migrated from old testsuite - * - * @author Bill Burke - */ -@AppServerContainer(AUTH_SERVER_CONTAINER_DEFAULT) -@Ignore(value = "Need to resolve default relative scenario when running on non-undertow") -public class UndertowRelaviteUriAdapterTest extends AbstractServletsAdapterTest { - - @Page - private CustomerPortal customerPortal; - @Page - private ProductPortal productPortal; - - @Override - public void addAdapterTestRealms(List testRealms) { - testRealms.add(loadRealm("/adapter-test/demorealm-relative.json")); - } - - @Deployment(name = CustomerPortal.DEPLOYMENT_NAME) - protected static WebArchive customerPortal() { - return servletDeployment(CustomerPortal.DEPLOYMENT_NAME, "keycloak-relative.json", CustomerServlet.class, ErrorServlet.class, ServletTestUtils.class); - } - - @Deployment(name = CustomerDb.DEPLOYMENT_NAME) - protected static WebArchive customerDb() { - return servletDeployment(CustomerDb.DEPLOYMENT_NAME, "keycloak-relative.json", AdapterActionsFilter.class, CustomerDatabaseServlet.class); - } - - @Deployment(name = ProductPortal.DEPLOYMENT_NAME) - protected static WebArchive productPortal() { - return servletDeployment(ProductPortal.DEPLOYMENT_NAME, "keycloak-relative.json", ProductServlet.class); - } - - @Test - public void testLoginSSOAndLogout() { - // test login to customer-portal which does a bearer request to customer-db - customerPortal.navigateTo(); - assertCurrentUrlStartsWithLoginUrlOf(testRealmPage); - testRealmLoginPage.form().login("bburke@redhat.com", "password"); - assertCurrentUrlEquals(customerPortal); - String pageSource = driver.getPageSource(); - Assert.assertTrue(pageSource.contains("Bill Burke") && pageSource.contains("Stian Thorgersen")); - - // test SSO - productPortal.navigateTo(); - assertCurrentUrlEquals(productPortal); - pageSource = driver.getPageSource(); - Assert.assertTrue(pageSource.contains("iPhone") && pageSource.contains("iPad")); - - // View stats - List> stats = adminClient.realm(DEMO).getClientSessionStats(); - Map customerPortalStats = null; - Map productPortalStats = null; - for (Map s : stats) { - switch (s.get("clientId")) { - case "customer-portal": - customerPortalStats = s; - break; - case "product-portal": - productPortalStats = s; - break; - } - } - Assert.assertEquals(1, Integer.parseInt(customerPortalStats.get("active"))); - Assert.assertEquals(1, Integer.parseInt(productPortalStats.get("active"))); - - // test logout - AccountHelper.logout(testRealmResource(), testUser.getUsername()); - - assertCurrentUrlStartsWithLoginUrlOf(testRealmPage); - productPortal.navigateTo(); - assertCurrentUrlStartsWithLoginUrlOf(testRealmPage); - customerPortal.navigateTo(); - assertCurrentUrlStartsWithLoginUrlOf(testRealmPage); - } - - @Test - public void testServletRequestLogout() { - customerPortal.navigateTo(); - assertCurrentUrlStartsWithLoginUrlOf(testRealmPage); - testRealmLoginPage.form().login("bburke@redhat.com", "password"); - assertCurrentUrlEquals(customerPortal); - Assert.assertTrue(driver.getPageSource().contains("Bill Burke")); - - - productPortal.navigateTo(); - assertCurrentUrlEquals(productPortal); - Assert.assertTrue(driver.getPageSource().contains("iPhone")); - - // test logout - driver.navigate().to(customerPortal.logout().toASCIIString()); - Assert.assertTrue(driver.getPageSource().contains("servlet logout ok")); - - customerPortal.navigateTo(); - assertCurrentUrlStartsWithLoginUrlOf(testRealmPage); - productPortal.navigateTo(); - assertCurrentUrlStartsWithLoginUrlOf(testRealmPage); - } -} diff --git a/testsuite/integration-arquillian/util/src/main/java/org/keycloak/testsuite/utils/arquillian/ContainerConstants.java b/testsuite/integration-arquillian/util/src/main/java/org/keycloak/testsuite/utils/arquillian/ContainerConstants.java index 775b0f4a4a..f962331617 100644 --- a/testsuite/integration-arquillian/util/src/main/java/org/keycloak/testsuite/utils/arquillian/ContainerConstants.java +++ b/testsuite/integration-arquillian/util/src/main/java/org/keycloak/testsuite/utils/arquillian/ContainerConstants.java @@ -19,8 +19,6 @@ package org.keycloak.testsuite.utils.arquillian; public interface ContainerConstants { String APP_SERVER_PREFIX = "app-server-"; - String APP_SERVER_UNDERTOW = APP_SERVER_PREFIX + "undertow"; - String APP_SERVER_WILDFLY = APP_SERVER_PREFIX + "wildfly"; String APP_SERVER_WILDFLY_CLUSTER = APP_SERVER_WILDFLY + "-ha-node-1;" + APP_SERVER_WILDFLY + "-ha-node-2";