KEYCLOAK-7510 Add Support for server specific ArchiveProcessor
This commit is contained in:
parent
530a710dce
commit
d9f79fae79
64 changed files with 918 additions and 329 deletions
|
@ -123,6 +123,11 @@
|
|||
<version>${arquillian-wls-container.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jboss.arquillian.container</groupId>
|
||||
<artifactId>undertow-embedded</artifactId>
|
||||
<version>${undertow-embedded.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
|
@ -158,6 +163,7 @@
|
|||
<module>test-apps</module>
|
||||
<module>servers</module>
|
||||
<module>tests</module>
|
||||
<module>util</module>
|
||||
</modules>
|
||||
|
||||
<profiles>
|
||||
|
|
|
@ -53,5 +53,10 @@
|
|||
<groupId>org.wildfly.arquillian</groupId>
|
||||
<artifactId>wildfly-arquillian-container-managed</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.keycloak.testsuite</groupId>
|
||||
<artifactId>integration-arquillian-util</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* 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.eap;
|
||||
|
||||
import org.jboss.arquillian.container.test.spi.client.deployment.ApplicationArchiveProcessor;
|
||||
import org.jboss.arquillian.core.spi.LoadableExtension;
|
||||
import org.keycloak.testsuite.arquillian.eap.container.EAPDeploymentArchiveProcessor;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:vramik@redhat.com">Vlasta Ramik</a>
|
||||
*/
|
||||
public class EAPAppServerArquillianExtension implements LoadableExtension {
|
||||
|
||||
@Override
|
||||
public void register(ExtensionBuilder builder) {
|
||||
builder.service(ApplicationArchiveProcessor.class, EAPDeploymentArchiveProcessor.class);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
* 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.eap.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.annotation.UseServletFilter;
|
||||
import org.keycloak.testsuite.utils.arquillian.DeploymentArchiveProcessorUtils;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:vramik@redhat.com">Vlasta Ramik</a>
|
||||
*/
|
||||
public class EAPDeploymentArchiveProcessor implements ApplicationArchiveProcessor {
|
||||
|
||||
private final Logger log = Logger.getLogger(EAPDeploymentArchiveProcessor.class);
|
||||
|
||||
@Override
|
||||
public void process(Archive<?> archive, TestClass testClass) {
|
||||
if (DeploymentArchiveProcessorUtils.checkRunOnServerDeployment(archive)) return;
|
||||
|
||||
modifyWebXML(archive, testClass);
|
||||
|
||||
modifyOIDCAdapterConfig(archive, DeploymentArchiveProcessorUtils.ADAPTER_CONFIG_PATH);
|
||||
modifyOIDCAdapterConfig(archive, DeploymentArchiveProcessorUtils.ADAPTER_CONFIG_PATH_JS);
|
||||
|
||||
modifySAMLAdapterConfig(archive);
|
||||
}
|
||||
|
||||
private void modifyWebXML(Archive<?> archive, TestClass testClass) {
|
||||
if (!archive.contains(DeploymentArchiveProcessorUtils.WEBXML_PATH)) return;
|
||||
if (!testClass.getJavaClass().isAnnotationPresent(UseServletFilter.class)) return;
|
||||
if (!archive.contains(DeploymentArchiveProcessorUtils.JBOSS_DEPLOYMENT_XML_PATH)) return;
|
||||
|
||||
log.debug("Modifying WEB.XML in " + archive.getName() + " for Servlet Filter.");
|
||||
DeploymentArchiveProcessorUtils.modifyWebXMLForServletFilter(archive, testClass);
|
||||
DeploymentArchiveProcessorUtils.addFilterDependencies(archive, testClass);
|
||||
}
|
||||
|
||||
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) {
|
||||
if (!archive.contains(DeploymentArchiveProcessorUtils.SAML_ADAPTER_CONFIG_PATH)) return;
|
||||
|
||||
log.debug("Modifying adapter config " + DeploymentArchiveProcessorUtils.SAML_ADAPTER_CONFIG_PATH + " in " + archive.getName());
|
||||
DeploymentArchiveProcessorUtils.modifySAMLAdapterConfig(archive);
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
org.keycloak.testsuite.arquillian.eap.EAPAppServerArquillianExtension
|
|
@ -53,6 +53,11 @@
|
|||
<groupId>org.wildfly.arquillian</groupId>
|
||||
<artifactId>wildfly-arquillian-container-managed</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.keycloak.testsuite</groupId>
|
||||
<artifactId>integration-arquillian-util</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* 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.eap;
|
||||
|
||||
import org.jboss.arquillian.container.test.spi.client.deployment.ApplicationArchiveProcessor;
|
||||
import org.jboss.arquillian.core.spi.LoadableExtension;
|
||||
import org.keycloak.testsuite.arquillian.eap.container.EAP6DeploymentArchiveProcessor;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:vramik@redhat.com">Vlasta Ramik</a>
|
||||
*/
|
||||
public class EAP6AppServerArquillianExtension implements LoadableExtension {
|
||||
|
||||
@Override
|
||||
public void register(ExtensionBuilder builder) {
|
||||
builder.service(ApplicationArchiveProcessor.class, EAP6DeploymentArchiveProcessor.class);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,81 @@
|
|||
/*
|
||||
* 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.eap.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.annotation.UseServletFilter;
|
||||
import org.keycloak.testsuite.utils.arquillian.DeploymentArchiveProcessorUtils;
|
||||
import org.keycloak.testsuite.utils.io.IOUtil;
|
||||
import org.w3c.dom.Document;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:vramik@redhat.com">Vlasta Ramik</a>
|
||||
*/
|
||||
public class EAP6DeploymentArchiveProcessor implements ApplicationArchiveProcessor {
|
||||
|
||||
private final Logger log = Logger.getLogger(EAP6DeploymentArchiveProcessor.class);
|
||||
|
||||
@Override
|
||||
public void process(Archive<?> archive, TestClass testClass) {
|
||||
if (DeploymentArchiveProcessorUtils.checkRunOnServerDeployment(archive)) return;
|
||||
|
||||
modifyWebXML(archive, testClass);
|
||||
|
||||
modifyOIDCAdapterConfig(archive, DeploymentArchiveProcessorUtils.ADAPTER_CONFIG_PATH);
|
||||
modifyOIDCAdapterConfig(archive, DeploymentArchiveProcessorUtils.ADAPTER_CONFIG_PATH_JS);
|
||||
|
||||
modifySAMLAdapterConfig(archive);
|
||||
}
|
||||
|
||||
private void modifyWebXML(Archive<?> archive, TestClass testClass) {
|
||||
if (!archive.contains(DeploymentArchiveProcessorUtils.WEBXML_PATH)) return;
|
||||
if (!testClass.getJavaClass().isAnnotationPresent(UseServletFilter.class)) return;
|
||||
if (!archive.contains(DeploymentArchiveProcessorUtils.JBOSS_DEPLOYMENT_XML_PATH)) return;
|
||||
|
||||
log.debug("Modifying WEB.XML in " + archive.getName() + " for Servlet Filter.");
|
||||
DeploymentArchiveProcessorUtils.modifyWebXMLForServletFilter(archive, testClass);
|
||||
DeploymentArchiveProcessorUtils.addFilterDependencies(archive, testClass);
|
||||
|
||||
Document webXmlDoc;
|
||||
try {
|
||||
webXmlDoc = IOUtil.loadXML(archive.get(DeploymentArchiveProcessorUtils.WEBXML_PATH).getAsset().openStream());
|
||||
} catch (IllegalArgumentException ex) {
|
||||
throw new RuntimeException("Error when processing " + archive.getName(), ex);
|
||||
}
|
||||
IOUtil.modifyDocElementValue(webXmlDoc, "param-value", "wildfly.infinispan.InfinispanSessionCacheIdMapperUpdater",
|
||||
"org.keycloak.adapters.saml.jbossweb.infinispan.InfinispanSessionCacheIdMapperUpdater");
|
||||
}
|
||||
|
||||
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) {
|
||||
if (!archive.contains(DeploymentArchiveProcessorUtils.SAML_ADAPTER_CONFIG_PATH)) return;
|
||||
|
||||
log.debug("Modifying adapter config " + DeploymentArchiveProcessorUtils.SAML_ADAPTER_CONFIG_PATH + " in " + archive.getName());
|
||||
DeploymentArchiveProcessorUtils.modifySAMLAdapterConfig(archive);
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
org.keycloak.testsuite.arquillian.eap.EAP6AppServerArquillianExtension
|
|
@ -53,5 +53,10 @@
|
|||
<groupId>org.wildfly.arquillian</groupId>
|
||||
<artifactId>wildfly-arquillian-container-managed</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.keycloak.testsuite</groupId>
|
||||
<artifactId>integration-arquillian-util</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* 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.wildfly;
|
||||
|
||||
import org.jboss.arquillian.container.test.spi.client.deployment.ApplicationArchiveProcessor;
|
||||
import org.jboss.arquillian.core.spi.LoadableExtension;
|
||||
import org.keycloak.testsuite.arquillian.wildfly.container.WildflyDeploymentArchiveProcessor;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:vramik@redhat.com">Vlasta Ramik</a>
|
||||
*/
|
||||
public class WildflyAppServerArquillianExtension implements LoadableExtension {
|
||||
|
||||
@Override
|
||||
public void register(ExtensionBuilder builder) {
|
||||
builder.service(ApplicationArchiveProcessor.class, WildflyDeploymentArchiveProcessor.class);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
* 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.wildfly.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.annotation.UseServletFilter;
|
||||
import org.keycloak.testsuite.utils.arquillian.DeploymentArchiveProcessorUtils;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:vramik@redhat.com">Vlasta Ramik</a>
|
||||
*/
|
||||
public class WildflyDeploymentArchiveProcessor implements ApplicationArchiveProcessor {
|
||||
|
||||
private final Logger log = Logger.getLogger(WildflyDeploymentArchiveProcessor.class);
|
||||
|
||||
@Override
|
||||
public void process(Archive<?> archive, TestClass testClass) {
|
||||
if (DeploymentArchiveProcessorUtils.checkRunOnServerDeployment(archive)) return;
|
||||
|
||||
modifyWebXML(archive, testClass);
|
||||
|
||||
modifyOIDCAdapterConfig(archive, DeploymentArchiveProcessorUtils.ADAPTER_CONFIG_PATH);
|
||||
modifyOIDCAdapterConfig(archive, DeploymentArchiveProcessorUtils.ADAPTER_CONFIG_PATH_JS);
|
||||
|
||||
modifySAMLAdapterConfig(archive);
|
||||
}
|
||||
|
||||
private void modifyWebXML(Archive<?> archive, TestClass testClass) {
|
||||
if (!archive.contains(DeploymentArchiveProcessorUtils.WEBXML_PATH)) return;
|
||||
if (!testClass.getJavaClass().isAnnotationPresent(UseServletFilter.class)) return;
|
||||
if (!archive.contains(DeploymentArchiveProcessorUtils.JBOSS_DEPLOYMENT_XML_PATH)) return;
|
||||
|
||||
log.debug("Modifying WEB.XML in " + archive.getName() + " for Servlet Filter.");
|
||||
DeploymentArchiveProcessorUtils.modifyWebXMLForServletFilter(archive, testClass);
|
||||
DeploymentArchiveProcessorUtils.addFilterDependencies(archive, testClass);
|
||||
}
|
||||
|
||||
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) {
|
||||
if (!archive.contains(DeploymentArchiveProcessorUtils.SAML_ADAPTER_CONFIG_PATH)) return;
|
||||
|
||||
log.debug("Modifying adapter config " + DeploymentArchiveProcessorUtils.SAML_ADAPTER_CONFIG_PATH + " in " + archive.getName());
|
||||
DeploymentArchiveProcessorUtils.modifySAMLAdapterConfig(archive);
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
org.keycloak.testsuite.arquillian.wildfly.WildflyAppServerArquillianExtension
|
|
@ -39,7 +39,7 @@
|
|||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.keycloak.testsuite</groupId>
|
||||
<artifactId>integration-arquillian-servers-util</artifactId>
|
||||
<artifactId>integration-arquillian-util</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
@ -18,7 +18,9 @@
|
|||
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 <a href="mailto:vramik@redhat.com">Vlasta Ramik</a>
|
||||
|
@ -27,7 +29,10 @@ public class UndertowAppServerArquillianExtension implements LoadableExtension {
|
|||
|
||||
@Override
|
||||
public void register(ExtensionBuilder builder) {
|
||||
builder.service(DeployableContainer.class, UndertowAppServer.class);
|
||||
builder
|
||||
.service(DeployableContainer.class, UndertowAppServer.class)
|
||||
.service(ApplicationArchiveProcessor.class, UndertowDeploymentArchiveProcessor.class);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
* 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.annotation.UseServletFilter;
|
||||
import org.keycloak.testsuite.utils.arquillian.DeploymentArchiveProcessorUtils;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:vramik@redhat.com">Vlasta Ramik</a>
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
private void modifyWebXML(Archive<?> archive, TestClass testClass) {
|
||||
if (!archive.contains(DeploymentArchiveProcessorUtils.WEBXML_PATH)) return;
|
||||
if (!testClass.getJavaClass().isAnnotationPresent(UseServletFilter.class)) return;
|
||||
|
||||
log.debug("Modifying WEB.XML in " + archive.getName() + " for Servlet Filter.");
|
||||
DeploymentArchiveProcessorUtils.modifyWebXMLForServletFilter(archive, testClass);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
|
@ -36,7 +36,7 @@
|
|||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.keycloak.testsuite</groupId>
|
||||
<artifactId>integration-arquillian-servers-util</artifactId>
|
||||
<artifactId>integration-arquillian-util</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
@ -64,19 +64,8 @@
|
|||
<module>auth-server</module>
|
||||
<module>app-server</module>
|
||||
<module>cache-server</module>
|
||||
<module>util</module>
|
||||
</modules>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.jboss.arquillian.container</groupId>
|
||||
<artifactId>undertow-embedded</artifactId>
|
||||
<version>${undertow-embedded.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>auth-server-cluster</id>
|
||||
|
|
|
@ -21,6 +21,7 @@ import org.jboss.arquillian.container.test.api.OperateOnDeployment;
|
|||
import org.jboss.arquillian.graphene.findby.FindByJQuery;
|
||||
import org.jboss.arquillian.test.api.ArquillianResource;
|
||||
import org.keycloak.testsuite.page.AbstractPageWithInjectedUrl;
|
||||
import org.keycloak.testsuite.util.WaitUtils;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
|
||||
|
@ -70,40 +71,49 @@ public class AngularCorsProductTestApp extends AbstractPageWithInjectedUrl {
|
|||
private WebElement headers;
|
||||
|
||||
public void reloadData() {
|
||||
WaitUtils.waitUntilElement(reloadDataButton).is().clickable();
|
||||
reloadDataButton.click();
|
||||
}
|
||||
|
||||
public void loadRoles() {
|
||||
WaitUtils.waitUntilElement(loadRolesButton).is().clickable();
|
||||
loadRolesButton.click();
|
||||
}
|
||||
|
||||
public void addRole() {
|
||||
WaitUtils.waitUntilElement(addRoleButton).is().clickable();
|
||||
addRoleButton.click();
|
||||
}
|
||||
|
||||
public void deleteRole() {
|
||||
WaitUtils.waitUntilElement(deleteRoleButton).is().clickable();
|
||||
deleteRoleButton.click();
|
||||
}
|
||||
|
||||
public void loadAvailableSocialProviders() {
|
||||
WaitUtils.waitUntilElement(loadAvailableSocialProvidersButton).is().clickable();
|
||||
loadAvailableSocialProvidersButton.click();
|
||||
}
|
||||
|
||||
public void loadPublicRealmInfo() {
|
||||
WaitUtils.waitUntilElement(loadPublicRealmInfoButton).is().clickable();
|
||||
loadPublicRealmInfoButton.click();
|
||||
}
|
||||
|
||||
public void loadVersion() {
|
||||
WaitUtils.waitUntilElement(loadVersionButton).is().clickable();
|
||||
loadVersionButton.click();
|
||||
}
|
||||
|
||||
public WebElement getOutput() {
|
||||
WaitUtils.waitUntilElement(outputArea).is().visible();
|
||||
return outputArea;
|
||||
}
|
||||
|
||||
public WebElement getHeaders() {
|
||||
WaitUtils.waitUntilElement(headers).is().visible();
|
||||
return headers;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -206,6 +206,10 @@ public class AppServerTestEnricher {
|
|||
return CURRENT_APP_SERVER.equals("eap6");
|
||||
}
|
||||
|
||||
public static boolean isEAPAppServer() {
|
||||
return CURRENT_APP_SERVER.equals("eap");
|
||||
}
|
||||
|
||||
public static boolean isWASAppServer() {
|
||||
return CURRENT_APP_SERVER.equals("was");
|
||||
}
|
||||
|
|
|
@ -17,19 +17,14 @@
|
|||
|
||||
package org.keycloak.testsuite.arquillian;
|
||||
|
||||
import org.apache.tools.ant.DirectoryScanner;
|
||||
import org.keycloak.testsuite.utils.arquillian.KeycloakDependenciesResolver;
|
||||
import org.jboss.arquillian.container.test.spi.client.deployment.ApplicationArchiveProcessor;
|
||||
import org.jboss.arquillian.core.api.InstanceProducer;
|
||||
import org.jboss.arquillian.core.api.annotation.Inject;
|
||||
import org.jboss.arquillian.test.spi.TestClass;
|
||||
import org.jboss.arquillian.test.spi.annotation.ClassScoped;
|
||||
import org.jboss.logging.Logger;
|
||||
import org.jboss.logging.Logger.Level;
|
||||
import org.jboss.shrinkwrap.api.Archive;
|
||||
import org.jboss.shrinkwrap.api.ArchivePath;
|
||||
import org.jboss.shrinkwrap.api.Filters;
|
||||
import org.jboss.shrinkwrap.api.Node;
|
||||
import org.jboss.shrinkwrap.api.asset.ClassAsset;
|
||||
import org.jboss.shrinkwrap.api.asset.StringAsset;
|
||||
import org.jboss.shrinkwrap.api.spec.WebArchive;
|
||||
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
|
||||
|
@ -37,44 +32,42 @@ import org.jboss.shrinkwrap.resolver.api.maven.MavenFormatStage;
|
|||
import org.jboss.shrinkwrap.resolver.api.maven.MavenResolverSystem;
|
||||
import org.keycloak.adapters.servlet.KeycloakOIDCFilter;
|
||||
import org.keycloak.representations.adapters.config.AdapterConfig;
|
||||
import org.keycloak.testsuite.arquillian.annotation.UseServletFilter;
|
||||
import org.keycloak.testsuite.util.IOUtil;
|
||||
import org.keycloak.testsuite.utils.annotation.UseServletFilter;
|
||||
import org.keycloak.testsuite.utils.io.IOUtil;
|
||||
import org.keycloak.util.JsonSerialization;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.hasAppServerContainerAnnotation;
|
||||
import org.jboss.logging.Logger;
|
||||
import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.isEAP6AppServer;
|
||||
import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.isEAPAppServer;
|
||||
import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.isRelative;
|
||||
import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.isTomcatAppServer;
|
||||
import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.isUndertowAppServer;
|
||||
import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.isWLSAppServer;
|
||||
import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.isWASAppServer;
|
||||
import static org.keycloak.testsuite.arquillian.AppServerTestEnricher.isWildflyAppServer;
|
||||
import static org.keycloak.testsuite.arquillian.AuthServerTestEnricher.getAuthServerContextRoot;
|
||||
import static org.keycloak.testsuite.arquillian.AuthServerTestEnricher.AUTH_SERVER_CONTAINER;
|
||||
import static org.keycloak.testsuite.arquillian.AuthServerTestEnricher.AUTH_SERVER_CONTAINER_DEFAULT;
|
||||
import static org.keycloak.testsuite.util.IOUtil.appendChildInDocument;
|
||||
import static org.keycloak.testsuite.util.IOUtil.documentToString;
|
||||
import static org.keycloak.testsuite.util.IOUtil.getElementTextContent;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadJson;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadXML;
|
||||
import static org.keycloak.testsuite.util.IOUtil.modifyDocElementAttribute;
|
||||
import static org.keycloak.testsuite.util.IOUtil.modifyDocElementValue;
|
||||
import static org.keycloak.testsuite.util.IOUtil.removeElementsFromDoc;
|
||||
import static org.keycloak.testsuite.util.IOUtil.removeNodeByAttributeValue;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.appendChildInDocument;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.documentToString;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.getElementTextContent;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadJson;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadXML;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.modifyDocElementAttribute;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.modifyDocElementValue;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.removeElementsFromDoc;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.removeNodeByAttributeValue;
|
||||
|
||||
|
||||
/**
|
||||
* @author tkyjovsk
|
||||
*/
|
||||
@Deprecated
|
||||
public class DeploymentArchiveProcessor implements ApplicationArchiveProcessor {
|
||||
|
||||
protected final Logger log = org.jboss.logging.Logger.getLogger(this.getClass());
|
||||
protected final Logger log = Logger.getLogger(DeploymentArchiveProcessor.class);
|
||||
|
||||
private static final boolean AUTH_SERVER_SSL_REQUIRED = Boolean.parseBoolean(System.getProperty("auth.server.ssl.required"));
|
||||
private static final boolean APP_SERVER_SSL_REQUIRED = Boolean.parseBoolean(System.getProperty("app.server.ssl.required"));
|
||||
|
@ -98,17 +91,21 @@ public class DeploymentArchiveProcessor implements ApplicationArchiveProcessor {
|
|||
return;
|
||||
}
|
||||
|
||||
// Ignore archives modifed in specific DeploymentArchiveProcessors, see e.g.
|
||||
// org.keycloak.testsuite.arquillian.wildfly.container.WildflyDeploymentArchiveProcessor
|
||||
if (isEAP6AppServer() ||
|
||||
isEAPAppServer() ||
|
||||
isWildflyAppServer() ||
|
||||
isUndertowAppServer()) {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
log.info("Processing archive " + archive.getName());
|
||||
// if (isAdapterTest(testClass)) {
|
||||
modifyAdapterConfigs(archive, testClass);
|
||||
if (archive.contains(WEBXML_PATH)) {
|
||||
modifyWebXml(archive, testClass);
|
||||
}
|
||||
// } else {
|
||||
// log.info(testClass.getJavaClass().getSimpleName() + " is not an AdapterTest");
|
||||
// }
|
||||
if (isWLSAppServer()) {
|
||||
// {
|
||||
modifyWebXml(archive, testClass);
|
||||
|
||||
if (isWLSAppServer() || isWASAppServer()) {
|
||||
MavenResolverSystem resolver = Maven.resolver();
|
||||
MavenFormatStage dependencies = resolver
|
||||
.loadPomFromFile("pom.xml")
|
||||
|
@ -119,30 +116,8 @@ public class DeploymentArchiveProcessor implements ApplicationArchiveProcessor {
|
|||
((WebArchive) archive)
|
||||
.addAsLibraries(dependencies.asFile())
|
||||
.addClass(org.keycloak.testsuite.arquillian.annotation.AppServerContainer.class)
|
||||
.addClass(org.keycloak.testsuite.arquillian.annotation.UseServletFilter.class);
|
||||
.addClass(org.keycloak.testsuite.utils.annotation.UseServletFilter.class);
|
||||
}
|
||||
|
||||
if (isWASAppServer()) {
|
||||
// {
|
||||
MavenResolverSystem resolver = Maven.resolver();
|
||||
MavenFormatStage dependencies = resolver
|
||||
.loadPomFromFile("pom.xml")
|
||||
.importTestDependencies()
|
||||
.resolve("org.apache.httpcomponents:httpclient")
|
||||
.withTransitivity();
|
||||
|
||||
((WebArchive) archive)
|
||||
.addAsLibraries(dependencies.asFile())
|
||||
.addClass(org.keycloak.testsuite.arquillian.annotation.AppServerContainer.class)
|
||||
.addClass(org.keycloak.testsuite.arquillian.annotation.UseServletFilter.class);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static boolean isAdapterTest(TestClass testClass) {
|
||||
return hasAppServerContainerAnnotation(testClass.getJavaClass());
|
||||
}
|
||||
|
||||
protected void modifyAdapterConfigs(Archive<?> archive, TestClass testClass) {
|
||||
|
@ -191,16 +166,9 @@ public class DeploymentArchiveProcessor implements ApplicationArchiveProcessor {
|
|||
AdapterConfig adapterConfig = loadJson(archive.get(adapterConfigPath)
|
||||
.getAsset().openStream(), AdapterConfig.class);
|
||||
|
||||
// TODO find out if this is necessary
|
||||
if (relative && !AUTH_SERVER_CONTAINER.equals(AUTH_SERVER_CONTAINER_DEFAULT)) {
|
||||
log.info(" setting relative auth-server-url");
|
||||
adapterConfig.setAuthServerUrl("/auth");
|
||||
// ac.setRealmKey(null); // TODO verify if realm key is required for relative scneario
|
||||
} else {
|
||||
adapterConfig.setAuthServerUrl(getAuthServerContextRoot() + "/auth");
|
||||
}
|
||||
adapterConfig.setAuthServerUrl(getAuthServerContextRoot() + "/auth");
|
||||
|
||||
if ("true".equals(System.getProperty("app.server.ssl.required"))) {
|
||||
if (APP_SERVER_SSL_REQUIRED) {
|
||||
adapterConfig.setSslRequired("all");
|
||||
}
|
||||
|
||||
|
@ -208,38 +176,24 @@ public class DeploymentArchiveProcessor implements ApplicationArchiveProcessor {
|
|||
adapterConfigPath);
|
||||
|
||||
} catch (IOException ex) {
|
||||
log.log(Level.FATAL, "Cannot serialize adapter config to JSON.", ex);
|
||||
log.error("Cannot serialize adapter config to JSON.", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DirectoryScanner scanner = new DirectoryScanner();
|
||||
|
||||
protected List<File> getAdapterLibs(File adapterLibsLocation) {
|
||||
assert adapterLibsLocation.exists();
|
||||
List<File> libs = new ArrayList<>();
|
||||
scanner.setBasedir(adapterLibsLocation);
|
||||
scanner.setIncludes(new String[]{"**/*jar"});
|
||||
scanner.scan();
|
||||
for (String lib : scanner.getIncludedFiles()) {
|
||||
libs.add(new File(adapterLibsLocation, lib));
|
||||
}
|
||||
return libs;
|
||||
}
|
||||
|
||||
public void addFilterDependencies(Archive<?> archive, TestClass testClass) {
|
||||
TestContext testContext = testContextProducer.get();
|
||||
if (testContext.getAppServerInfo().isUndertow()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Node jbossDeploymentStructureXml = archive.get(JBOSS_DEPLOYMENT_XML_PATH);
|
||||
if (jbossDeploymentStructureXml == null) {
|
||||
log.debug("Archive doesn't contain " + JBOSS_DEPLOYMENT_XML_PATH);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
log.info("Adding filter dependencies to " + archive.getName());
|
||||
|
||||
String dependency = testClass.getAnnotation(UseServletFilter.class).filterDependency();
|
||||
|
@ -253,24 +207,19 @@ public class DeploymentArchiveProcessor implements ApplicationArchiveProcessor {
|
|||
}
|
||||
|
||||
protected void modifyWebXml(Archive<?> archive, TestClass testClass) {
|
||||
if (!archive.contains(WEBXML_PATH)) return;
|
||||
|
||||
Document webXmlDoc;
|
||||
try {
|
||||
webXmlDoc = loadXML(
|
||||
archive.get(WEBXML_PATH).getAsset().openStream());
|
||||
} catch (Exception ex) {
|
||||
} catch (IllegalArgumentException ex) {
|
||||
throw new RuntimeException("Error when processing " + archive.getName(), ex);
|
||||
}
|
||||
if (isTomcatAppServer()) {
|
||||
modifyDocElementValue(webXmlDoc, "auth-method", "KEYCLOAK", "BASIC");
|
||||
}
|
||||
|
||||
//temporary solution, will be removed within KEYCLOAK-7510
|
||||
if (isEAP6AppServer()) {
|
||||
modifyDocElementValue(webXmlDoc, "param-value",
|
||||
"org.keycloak.adapters.saml.wildfly.infinispan.InfinispanSessionCacheIdMapperUpdater",
|
||||
"org.keycloak.adapters.saml.jbossweb.infinispan.InfinispanSessionCacheIdMapperUpdater");
|
||||
}
|
||||
|
||||
if (testClass.getJavaClass().isAnnotationPresent(UseServletFilter.class) && archive.contains(JBOSS_DEPLOYMENT_XML_PATH)) {
|
||||
|
||||
addFilterDependencies(archive, testClass);
|
||||
|
@ -339,16 +288,4 @@ public class DeploymentArchiveProcessor implements ApplicationArchiveProcessor {
|
|||
|
||||
archive.add(new StringAsset((documentToString(webXmlDoc))), WEBXML_PATH);
|
||||
}
|
||||
|
||||
private String getServletClassName(Archive<?> archive) {
|
||||
|
||||
Map<ArchivePath, Node> content = archive.getContent(Filters.include(".*Servlet.class"));
|
||||
for (ArchivePath path : content.keySet()) {
|
||||
ClassAsset asset = (ClassAsset) content.get(path).getAsset();
|
||||
return asset.getSource().getName();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -24,7 +24,6 @@ import org.keycloak.testsuite.auth.page.login.OIDCLogin;
|
|||
import org.keycloak.testsuite.util.DroneUtils;
|
||||
import org.keycloak.testsuite.util.JavascriptBrowser;
|
||||
import org.keycloak.testsuite.util.URLUtils;
|
||||
import org.keycloak.testsuite.util.WaitUtils;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
|
||||
|
@ -52,9 +51,8 @@ public class AppServerWelcomePage extends AppServerContextRoot {
|
|||
}
|
||||
|
||||
public void navigateToConsole() {
|
||||
WaitUtils.pause(2000);
|
||||
URLUtils.navigateToUri(getInjectedUrl().toString() + "/console", true);
|
||||
waitForPageToLoad();
|
||||
loginPage.form().waitForLoginButtonPresent();
|
||||
}
|
||||
|
||||
public void login(String username, String password) {
|
||||
|
|
|
@ -37,7 +37,7 @@ import org.keycloak.testsuite.arquillian.SuiteContext;
|
|||
|
||||
import static org.keycloak.testsuite.auth.page.AuthRealm.ADMIN;
|
||||
import static org.keycloak.testsuite.auth.page.AuthRealm.MASTER;
|
||||
import static org.keycloak.testsuite.util.IOUtil.PROJECT_BUILD_DIRECTORY;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.PROJECT_BUILD_DIRECTORY;
|
||||
|
||||
|
||||
public class AdminClientUtil {
|
||||
|
|
|
@ -32,7 +32,7 @@ import java.net.URL;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.keycloak.testsuite.util.IOUtil.PROJECT_BUILD_DIRECTORY;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.PROJECT_BUILD_DIRECTORY;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||
|
|
|
@ -36,7 +36,7 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import static org.keycloak.testsuite.util.IOUtil.PROJECT_BUILD_DIRECTORY;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.PROJECT_BUILD_DIRECTORY;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -23,7 +23,7 @@ import static org.junit.Assert.assertThat;
|
|||
import static org.keycloak.testsuite.admin.Users.setPasswordFor;
|
||||
import static org.keycloak.testsuite.arquillian.DeploymentTargetModifier.APP_SERVER_CURRENT;
|
||||
import static org.keycloak.testsuite.auth.page.AuthRealm.DEMO;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith;
|
||||
|
||||
import io.undertow.Undertow;
|
||||
|
|
|
@ -24,6 +24,7 @@ import org.jboss.shrinkwrap.api.spec.WebArchive;
|
|||
import org.keycloak.representations.idm.RealmRepresentation;
|
||||
import org.keycloak.testsuite.adapter.filter.AdapterActionsFilter;
|
||||
import org.keycloak.testsuite.util.WaitUtils;
|
||||
import org.keycloak.testsuite.utils.io.IOUtil;
|
||||
import org.openqa.selenium.By;
|
||||
|
||||
import javax.ws.rs.core.UriBuilder;
|
||||
|
@ -34,7 +35,6 @@ import java.util.List;
|
|||
|
||||
import org.junit.Assert;
|
||||
import static org.keycloak.testsuite.auth.page.AuthRealm.DEMO;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
|
||||
public abstract class AbstractServletsAdapterTest extends AbstractAdapterTest {
|
||||
|
||||
|
@ -112,7 +112,7 @@ public abstract class AbstractServletsAdapterTest extends AbstractAdapterTest {
|
|||
|
||||
@Override
|
||||
public void addAdapterTestRealms(List<RealmRepresentation> testRealms) {
|
||||
testRealms.add(loadRealm("/adapter-test/demorealm.json"));
|
||||
testRealms.add(IOUtil.loadRealm("/adapter-test/demorealm.json"));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -2,7 +2,7 @@ package org.keycloak.testsuite.adapter.example;
|
|||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.keycloak.testsuite.auth.page.AuthRealm.DEMO;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlDoesntStartWith;
|
||||
import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith;
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ import static org.junit.Assert.assertEquals;
|
|||
import static org.junit.Assert.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.keycloak.testsuite.auth.page.AuthRealm.DEMO;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith;
|
||||
import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWithLoginUrlOf;
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ import org.openqa.selenium.By;
|
|||
import java.util.List;
|
||||
|
||||
import static org.keycloak.testsuite.auth.page.AuthRealm.DEMO;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith;
|
||||
import static org.keycloak.testsuite.util.WaitUtils.pause;
|
||||
import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
|
||||
|
|
|
@ -42,8 +42,8 @@ import java.net.URL;
|
|||
import java.util.List;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadJson;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadJson;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.util.WaitUtils.pause;
|
||||
import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
|
||||
|
||||
|
|
|
@ -83,8 +83,8 @@ import static org.hamcrest.Matchers.not;
|
|||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadJson;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadJson;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.util.WaitUtils.waitForPageToLoad;
|
||||
import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ import java.net.URL;
|
|||
import java.util.List;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
||||
|
|
|
@ -18,7 +18,7 @@ package org.keycloak.testsuite.adapter.example.authorization;
|
|||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.util.WaitUtils.pause;
|
||||
|
||||
import java.io.File;
|
||||
|
|
|
@ -48,7 +48,7 @@ import java.util.regex.Matcher;
|
|||
import java.util.regex.Pattern;
|
||||
|
||||
import static junit.framework.TestCase.assertNotNull;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith;
|
||||
import static org.keycloak.testsuite.util.WaitUtils.waitForPageToLoad;
|
||||
import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
|
||||
|
|
|
@ -17,10 +17,11 @@
|
|||
package org.keycloak.testsuite.adapter.example.hal;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
import org.jboss.arquillian.drone.api.annotation.Drone;
|
||||
|
||||
import org.jboss.arquillian.graphene.page.Page;
|
||||
|
@ -43,6 +44,7 @@ import org.wildfly.extras.creaper.core.online.OnlineManagementClient;
|
|||
import org.wildfly.extras.creaper.core.online.operations.Address;
|
||||
import org.wildfly.extras.creaper.core.online.operations.OperationException;
|
||||
import org.wildfly.extras.creaper.core.online.operations.Operations;
|
||||
import org.wildfly.extras.creaper.core.online.operations.admin.Administration;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -98,13 +100,15 @@ public class ConsoleProtectionTest extends AbstractAdapterTest {
|
|||
// Create a secure-server in order to publish the wildfly console configuration via mgmt interface
|
||||
clientWorkerNodeClient.execute("/subsystem=keycloak/secure-server=wildfly-console:add(realm=jboss-infra,resource=wildfly-console,public-client=true)");
|
||||
|
||||
// reload
|
||||
clientWorkerNodeClient.execute("reload");
|
||||
} catch (CliException cause) {
|
||||
log.debug("Reloading the server");
|
||||
new Administration(clientWorkerNodeClient).reload();
|
||||
log.debug("Reloaded");
|
||||
} catch (CliException | IOException | InterruptedException | TimeoutException cause) {
|
||||
throw new RuntimeException("Failed to configure app server", cause);
|
||||
}
|
||||
|
||||
DroneUtils.addWebDriver(jsDriver);
|
||||
log.debug("Added jsDriver");
|
||||
}
|
||||
|
||||
private void testLogin() throws InterruptedException {
|
||||
|
|
|
@ -19,7 +19,7 @@ package org.keycloak.testsuite.adapter.servlet;
|
|||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
|
||||
import org.keycloak.testsuite.arquillian.annotation.UseServletFilter;
|
||||
import org.keycloak.testsuite.utils.annotation.UseServletFilter;
|
||||
import org.keycloak.testsuite.arquillian.containers.ContainerConstants;
|
||||
|
||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||
|
|
|
@ -34,7 +34,7 @@ import org.keycloak.testsuite.arquillian.containers.ContainerConstants;
|
|||
import org.keycloak.testsuite.util.URLAssert;
|
||||
import org.keycloak.testsuite.util.WaitUtils;
|
||||
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||
|
||||
/**
|
||||
* note: migrated from old testsuite
|
||||
|
|
|
@ -22,11 +22,11 @@ import org.keycloak.testsuite.pages.AccountApplicationsPage;
|
|||
import org.keycloak.testsuite.pages.LoginPage;
|
||||
import org.keycloak.testsuite.pages.OAuthGrantPage;
|
||||
import org.keycloak.testsuite.util.ClientManager;
|
||||
import org.keycloak.testsuite.utils.io.IOUtil;
|
||||
import org.keycloak.util.TokenUtil;
|
||||
import org.openqa.selenium.By;
|
||||
|
||||
import static org.keycloak.testsuite.auth.page.AuthRealm.TEST;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlDoesntStartWith;
|
||||
import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith;
|
||||
import static org.keycloak.testsuite.util.WaitUtils.pause;
|
||||
|
@ -67,7 +67,7 @@ public class OfflineServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
|
||||
@Override
|
||||
public void addAdapterTestRealms(List<RealmRepresentation> testRealms) {
|
||||
testRealms.add(loadRealm("/adapter-test/offline-client/offlinerealm.json"));
|
||||
testRealms.add(IOUtil.loadRealm("/adapter-test/offline-client/offlinerealm.json"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -5,7 +5,7 @@ import org.junit.Before;
|
|||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
|
||||
import org.keycloak.testsuite.arquillian.annotation.UseServletFilter;
|
||||
import org.keycloak.testsuite.utils.annotation.UseServletFilter;
|
||||
import org.keycloak.testsuite.arquillian.containers.ContainerConstants;
|
||||
|
||||
/**
|
||||
|
@ -16,7 +16,7 @@ import org.keycloak.testsuite.arquillian.containers.ContainerConstants;
|
|||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||
@UseServletFilter(filterName = "saml-filter", filterClass = "org.keycloak.adapters.saml.servlet.SamlFilter",
|
||||
filterDependency = "org.keycloak:keycloak-saml-servlet-filter-adapter")
|
||||
public class SAMLFilterServletAdapterTest extends SAMLServletsAdapterTest {
|
||||
public class SAMLFilterServletAdapterTest extends SAMLServletAdapterTest {
|
||||
|
||||
@Before
|
||||
public void checkRoles() {
|
||||
|
|
|
@ -17,70 +17,37 @@
|
|||
|
||||
package org.keycloak.testsuite.adapter.servlet;
|
||||
|
||||
import org.jboss.resteasy.util.Base64;
|
||||
import org.keycloak.dom.saml.v2.protocol.ResponseType;
|
||||
import org.keycloak.dom.saml.v2.protocol.StatusCodeType;
|
||||
import org.keycloak.dom.saml.v2.protocol.StatusResponseType;
|
||||
import org.keycloak.saml.common.constants.JBossSAMLConstants;
|
||||
import org.keycloak.saml.common.util.DocumentUtil;
|
||||
import org.keycloak.saml.processing.core.parsers.saml.SAMLParser;
|
||||
import org.keycloak.testsuite.updaters.ClientAttributeUpdater;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.client.methods.HttpUriRequest;
|
||||
import org.apache.http.client.protocol.HttpClientContext;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.jboss.arquillian.container.test.api.Deployment;
|
||||
import org.jboss.arquillian.graphene.page.Page;
|
||||
import org.jboss.shrinkwrap.api.ShrinkWrap;
|
||||
import org.jboss.shrinkwrap.api.asset.StringAsset;
|
||||
import org.jboss.shrinkwrap.api.spec.WebArchive;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import static javax.ws.rs.core.Response.Status.OK;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.keycloak.OAuth2Constants.PASSWORD;
|
||||
import static org.keycloak.testsuite.admin.ApiUtil.createUserAndResetPasswordWithAdminClient;
|
||||
import static org.keycloak.testsuite.admin.Users.setPasswordFor;
|
||||
import static org.keycloak.testsuite.AbstractAuthTest.createUserRepresentation;
|
||||
import static org.keycloak.testsuite.adapter.AbstractServletsAdapterTest.samlServletDeployment;
|
||||
import static org.keycloak.testsuite.auth.page.AuthRealm.SAMLSERVLETDEMO;
|
||||
import static org.keycloak.testsuite.saml.AbstractSamlTest.REALM_PRIVATE_KEY;
|
||||
import static org.keycloak.testsuite.saml.AbstractSamlTest.REALM_PUBLIC_KEY;
|
||||
import static org.keycloak.testsuite.util.Matchers.bodyHC;
|
||||
import static org.keycloak.testsuite.util.Matchers.statusCodeIsHC;
|
||||
import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith;
|
||||
import static org.keycloak.testsuite.util.WaitUtils.waitForPageToLoad;
|
||||
import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
|
||||
|
||||
import org.keycloak.admin.client.resource.ClientResource;
|
||||
import org.keycloak.admin.client.resource.ProtocolMappersResource;
|
||||
import org.keycloak.admin.client.resource.RoleScopeResource;
|
||||
import org.keycloak.common.util.KeyUtils;
|
||||
import org.keycloak.common.util.PemUtils;
|
||||
import org.keycloak.dom.saml.v2.protocol.AuthnRequestType;
|
||||
import org.keycloak.keys.Attributes;
|
||||
import org.keycloak.keys.KeyProvider;
|
||||
import org.keycloak.keys.ImportedRsaKeyProviderFactory;
|
||||
import org.keycloak.protocol.saml.SamlConfigAttributes;
|
||||
import org.keycloak.protocol.saml.SamlProtocol;
|
||||
import org.keycloak.representations.idm.ComponentRepresentation;
|
||||
import org.keycloak.protocol.saml.mappers.AttributeStatementHelper;
|
||||
import org.keycloak.protocol.saml.mappers.RoleListMapper;
|
||||
import org.keycloak.representations.idm.ClientRepresentation;
|
||||
import org.keycloak.representations.idm.ProtocolMapperRepresentation;
|
||||
import org.keycloak.representations.idm.RealmRepresentation;
|
||||
import org.keycloak.representations.idm.RoleRepresentation;
|
||||
import org.keycloak.representations.idm.UserRepresentation;
|
||||
import org.keycloak.saml.SAML2ErrorResponseBuilder;
|
||||
import org.keycloak.saml.common.constants.JBossSAMLURIConstants;
|
||||
import org.keycloak.saml.common.util.XmlKeyInfoKeyNameTransformer;
|
||||
import org.keycloak.saml.processing.core.saml.v2.common.SAMLDocumentHolder;
|
||||
import org.keycloak.services.resources.RealmsResource;
|
||||
import org.keycloak.testsuite.adapter.AbstractServletsAdapterTest;
|
||||
import org.keycloak.testsuite.adapter.page.*;
|
||||
import org.keycloak.testsuite.admin.ApiUtil;
|
||||
import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
|
||||
import org.keycloak.testsuite.arquillian.containers.ContainerConstants;
|
||||
import org.keycloak.testsuite.auth.page.login.Login;
|
||||
import org.keycloak.testsuite.auth.page.login.SAMLIDPInitiatedLogin;
|
||||
import org.keycloak.testsuite.page.AbstractPage;
|
||||
import org.keycloak.testsuite.util.*;
|
||||
|
||||
import org.keycloak.testsuite.util.SamlClient.Binding;
|
||||
import org.keycloak.testsuite.util.SamlClientBuilder;
|
||||
import org.openqa.selenium.By;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.xml.sax.SAXException;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
import java.security.KeyPair;
|
||||
import java.security.PublicKey;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.ws.rs.client.Client;
|
||||
import javax.ws.rs.client.ClientBuilder;
|
||||
|
@ -109,43 +76,83 @@ import javax.xml.transform.stream.StreamSource;
|
|||
import javax.xml.validation.Schema;
|
||||
import javax.xml.validation.SchemaFactory;
|
||||
import javax.xml.validation.Validator;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
import java.security.KeyPair;
|
||||
import java.security.PublicKey;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.xml.xpath.XPath;
|
||||
import javax.xml.xpath.XPathConstants;
|
||||
import javax.xml.xpath.XPathExpression;
|
||||
import javax.xml.xpath.XPathFactory;
|
||||
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.client.methods.HttpUriRequest;
|
||||
import org.apache.http.client.protocol.HttpClientContext;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
|
||||
import org.jboss.arquillian.container.test.api.Deployment;
|
||||
import org.jboss.arquillian.graphene.page.Page;
|
||||
import org.jboss.shrinkwrap.api.asset.StringAsset;
|
||||
import org.jboss.shrinkwrap.api.spec.WebArchive;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.keycloak.admin.client.resource.ClientResource;
|
||||
import org.keycloak.admin.client.resource.ProtocolMappersResource;
|
||||
import org.keycloak.admin.client.resource.RoleScopeResource;
|
||||
import org.keycloak.common.util.Base64;
|
||||
import org.keycloak.common.util.KeyUtils;
|
||||
import org.keycloak.common.util.PemUtils;
|
||||
import org.keycloak.dom.saml.v2.protocol.AuthnRequestType;
|
||||
import org.keycloak.dom.saml.v2.protocol.ResponseType;
|
||||
import org.keycloak.dom.saml.v2.protocol.StatusCodeType;
|
||||
import org.keycloak.dom.saml.v2.protocol.StatusResponseType;
|
||||
import org.keycloak.keys.Attributes;
|
||||
import org.keycloak.keys.ImportedRsaKeyProviderFactory;
|
||||
import org.keycloak.keys.KeyProvider;
|
||||
import org.keycloak.protocol.saml.SamlConfigAttributes;
|
||||
import org.keycloak.protocol.saml.SamlProtocol;
|
||||
import org.keycloak.protocol.saml.mappers.AttributeStatementHelper;
|
||||
import org.keycloak.protocol.saml.mappers.RoleListMapper;
|
||||
import org.keycloak.representations.idm.ClientRepresentation;
|
||||
import org.keycloak.representations.idm.ComponentRepresentation;
|
||||
import org.keycloak.representations.idm.ProtocolMapperRepresentation;
|
||||
import org.keycloak.representations.idm.RealmRepresentation;
|
||||
import org.keycloak.representations.idm.RoleRepresentation;
|
||||
import org.keycloak.representations.idm.UserRepresentation;
|
||||
import org.keycloak.saml.SAML2ErrorResponseBuilder;
|
||||
import org.keycloak.saml.common.constants.JBossSAMLConstants;
|
||||
import org.keycloak.saml.common.constants.JBossSAMLURIConstants;
|
||||
import org.keycloak.saml.common.util.DocumentUtil;
|
||||
import org.keycloak.saml.common.util.XmlKeyInfoKeyNameTransformer;
|
||||
import org.keycloak.saml.processing.core.parsers.saml.SAMLParser;
|
||||
import org.keycloak.saml.processing.core.saml.v2.common.SAMLDocumentHolder;
|
||||
import org.keycloak.services.resources.RealmsResource;
|
||||
import org.keycloak.testsuite.adapter.AbstractServletsAdapterTest;
|
||||
import org.keycloak.testsuite.adapter.page.*;
|
||||
import org.keycloak.testsuite.admin.ApiUtil;
|
||||
import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
|
||||
import org.keycloak.testsuite.arquillian.containers.ContainerConstants;
|
||||
import org.keycloak.testsuite.auth.page.login.Login;
|
||||
import org.keycloak.testsuite.auth.page.login.SAMLIDPInitiatedLogin;
|
||||
import org.keycloak.testsuite.page.AbstractPage;
|
||||
import org.keycloak.testsuite.updaters.ClientAttributeUpdater;
|
||||
import org.keycloak.testsuite.util.SamlClient;
|
||||
import org.keycloak.testsuite.util.SamlClient.Binding;
|
||||
import org.keycloak.testsuite.util.SamlClientBuilder;
|
||||
import org.keycloak.testsuite.util.UserBuilder;
|
||||
import org.keycloak.testsuite.util.WaitUtils;
|
||||
import org.keycloak.testsuite.utils.io.IOUtil;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
import static javax.ws.rs.core.Response.Status.OK;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.keycloak.representations.idm.CredentialRepresentation.PASSWORD;
|
||||
import static org.keycloak.testsuite.AbstractAuthTest.createUserRepresentation;
|
||||
import static org.keycloak.testsuite.admin.ApiUtil.createUserAndResetPasswordWithAdminClient;
|
||||
import static org.keycloak.testsuite.admin.Users.setPasswordFor;
|
||||
import static org.keycloak.testsuite.auth.page.AuthRealm.SAMLSERVLETDEMO;
|
||||
import static org.keycloak.testsuite.saml.AbstractSamlTest.REALM_PRIVATE_KEY;
|
||||
import static org.keycloak.testsuite.saml.AbstractSamlTest.REALM_PUBLIC_KEY;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadXML;
|
||||
import static org.keycloak.testsuite.util.IOUtil.modifyDocElementAttribute;
|
||||
import static org.keycloak.testsuite.util.Matchers.bodyHC;
|
||||
import static org.keycloak.testsuite.util.Matchers.statusCodeIsHC;
|
||||
import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith;
|
||||
import static org.keycloak.testsuite.util.WaitUtils.*;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
/**
|
||||
* @author mhajas
|
||||
|
@ -153,7 +160,7 @@ import static org.keycloak.testsuite.util.WaitUtils.*;
|
|||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||
public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
||||
public class SAMLServletAdapterTest extends AbstractServletsAdapterTest {
|
||||
@Page
|
||||
protected BadClientSalesPostSigServlet badClientSalesPostSigServletPage;
|
||||
|
||||
|
@ -392,7 +399,7 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
|
||||
@Override
|
||||
public void addAdapterTestRealms(List<RealmRepresentation> testRealms) {
|
||||
testRealms.add(loadRealm("/adapter-test/keycloak-saml/testsaml.json"));
|
||||
testRealms.add(IOUtil.loadRealm("/adapter-test/keycloak-saml/testsaml.json"));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -407,7 +414,7 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
page.navigateTo();
|
||||
waitUntilElement(By.xpath("//body")).text().not().contains(expectedNotContains);
|
||||
//Different 403 status page on EAP and Wildfly
|
||||
assertTrue(driver.getPageSource().contains("Forbidden")
|
||||
Assert.assertTrue(driver.getPageSource().contains("Forbidden")
|
||||
|| driver.getPageSource().contains(FORBIDDEN_TEXT)
|
||||
|| driver.getPageSource().contains(WEBSPHERE_FORBIDDEN_TEXT)); // WebSphere
|
||||
}
|
||||
|
@ -423,7 +430,7 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
loginPage.form().login(username, password);
|
||||
waitUntilElement(By.xpath("//body")).text().not().contains(expectedNotContains);
|
||||
//Different 403 status page on EAP and Wildfly
|
||||
assertTrue(driver.getPageSource().contains("Forbidden")
|
||||
Assert.assertTrue(driver.getPageSource().contains("Forbidden")
|
||||
|| driver.getPageSource().contains(FORBIDDEN_TEXT)
|
||||
|| driver.getPageSource().contains(WEBSPHERE_FORBIDDEN_TEXT)); // WebSphere
|
||||
}
|
||||
|
@ -517,7 +524,7 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
|
||||
waitUntilElement(By.xpath("//body")).text().not().contains("principal=");
|
||||
//Different 403 status page on EAP and Wildfly
|
||||
assertTrue(driver.getPageSource().contains("Forbidden")
|
||||
Assert.assertTrue(driver.getPageSource().contains("Forbidden")
|
||||
|| driver.getPageSource().contains(FORBIDDEN_TEXT)
|
||||
|| driver.getPageSource().contains(WEBSPHERE_FORBIDDEN_TEXT)); // WebSphere
|
||||
}
|
||||
|
@ -538,9 +545,9 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
.navigateTo(employeeAcsServletPage.buildUri())
|
||||
.getSamlResponse(Binding.POST);
|
||||
|
||||
assertThat(samlResponse.getSamlObject(), instanceOf(AuthnRequestType.class));
|
||||
assertThat(((AuthnRequestType) samlResponse.getSamlObject()).getAssertionConsumerServiceURL(), notNullValue());
|
||||
assertThat(((AuthnRequestType) samlResponse.getSamlObject()).getAssertionConsumerServiceURL().getPath(), is("/employee-acs/a/different/endpoint/for/saml"));
|
||||
Assert.assertThat(samlResponse.getSamlObject(), instanceOf(AuthnRequestType.class));
|
||||
Assert.assertThat(((AuthnRequestType) samlResponse.getSamlObject()).getAssertionConsumerServiceURL(), notNullValue());
|
||||
Assert.assertThat(((AuthnRequestType) samlResponse.getSamlObject()).getAssertionConsumerServiceURL().getPath(), is("/employee-acs/a/different/endpoint/for/saml"));
|
||||
|
||||
assertSuccessfulLogin(employeeAcsServletPage, bburkeUser, testRealmSAMLPostLoginPage, "principal=bburke");
|
||||
}
|
||||
|
@ -670,10 +677,10 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
|
||||
@Test
|
||||
public void salesMetadataTest() throws Exception {
|
||||
Document doc = loadXML(SAMLServletsAdapterTest.class.getResourceAsStream("/adapter-test/keycloak-saml/sp-metadata.xml"));
|
||||
Document doc = IOUtil.loadXML(SAMLServletAdapterTest.class.getResourceAsStream("/adapter-test/keycloak-saml/sp-metadata.xml"));
|
||||
|
||||
modifyDocElementAttribute(doc, "SingleLogoutService", "Location", "8080", System.getProperty("app.server.http.port", null));
|
||||
modifyDocElementAttribute(doc, "AssertionConsumerService", "Location", "8080", System.getProperty("app.server.http.port", null));
|
||||
IOUtil.modifyDocElementAttribute(doc, "SingleLogoutService", "Location", "8080", System.getProperty("app.server.http.port", null));
|
||||
IOUtil.modifyDocElementAttribute(doc, "AssertionConsumerService", "Location", "8080", System.getProperty("app.server.http.port", null));
|
||||
|
||||
ClientRepresentation clientRep = testRealmResource().convertClientDescription(IOUtil.documentToString(doc));
|
||||
|
||||
|
@ -687,7 +694,7 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
clientRep.setAdminUrl(appServerUrl + "sales-metadata/saml");
|
||||
|
||||
Response response = testRealmResource().clients().create(clientRep);
|
||||
assertEquals(201, response.getStatus());
|
||||
Assert.assertEquals(201, response.getStatus());
|
||||
response.close();
|
||||
|
||||
testSuccessfulAndUnauthorizedLogin(salesMetadataServletPage, testRealmSAMLPostLoginPage);
|
||||
|
@ -746,8 +753,8 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
.processSamlResponse(Binding.POST).build()
|
||||
|
||||
.execute(r -> {
|
||||
assertThat(r, statusCodeIsHC(Response.Status.OK));
|
||||
assertThat(r, bodyHC(containsString("urn:oasis:names:tc:SAML:2.0:status:RequestDenied"))); // TODO: revisit - should the HTTP status be 403 too?
|
||||
Assert.assertThat(r, statusCodeIsHC(Response.Status.OK));
|
||||
Assert.assertThat(r, bodyHC(containsString("urn:oasis:names:tc:SAML:2.0:status:RequestDenied"))); // TODO: revisit - should the HTTP status be 403 too?
|
||||
});
|
||||
} finally {
|
||||
salesPostEncServletPage.logout();
|
||||
|
@ -768,8 +775,8 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
.processSamlResponse(Binding.POST).build()
|
||||
|
||||
.execute(r -> {
|
||||
assertThat(r, statusCodeIsHC(Response.Status.OK));
|
||||
assertThat(r, bodyHC(containsString("urn:oasis:names:tc:SAML:2.0:status:RequestDenied"))); // TODO: revisit - should the HTTP status be 403 too?
|
||||
Assert.assertThat(r, statusCodeIsHC(Response.Status.OK));
|
||||
Assert.assertThat(r, bodyHC(containsString("urn:oasis:names:tc:SAML:2.0:status:RequestDenied"))); // TODO: revisit - should the HTTP status be 403 too?
|
||||
});
|
||||
} finally {
|
||||
salesPostServletPage.logout();
|
||||
|
@ -825,8 +832,8 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
|
||||
UserRepresentation storedUser = testRealmResource().users().get(userId).toRepresentation();
|
||||
|
||||
assertThat(storedUser, notNullValue());
|
||||
assertThat("Database seems to be unable to store Unicode for username. Refer to KEYCLOAK-3439 and related issues.", storedUser.getUsername(), equalToIgnoringCase(username));
|
||||
Assert.assertThat(storedUser, notNullValue());
|
||||
Assert.assertThat("Database seems to be unable to store Unicode for username. Refer to KEYCLOAK-3439 and related issues.", storedUser.getUsername(), equalToIgnoringCase(username));
|
||||
|
||||
assertSuccessfulLogin(salesPostSigServletPage, user, testRealmSAMLPostLoginPage, "principal=" + storedUser.getUsername());
|
||||
|
||||
|
@ -849,8 +856,8 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
|
||||
UserRepresentation storedUser = testRealmResource().users().get(userId).toRepresentation();
|
||||
|
||||
assertThat(storedUser, notNullValue());
|
||||
assertThat("Database seems to be unable to store Unicode for username. Refer to KEYCLOAK-3439 and related issues.", storedUser.getUsername(), equalToIgnoringCase(username));
|
||||
Assert.assertThat(storedUser, notNullValue());
|
||||
Assert.assertThat("Database seems to be unable to store Unicode for username. Refer to KEYCLOAK-3439 and related issues.", storedUser.getUsername(), equalToIgnoringCase(username));
|
||||
|
||||
assertSuccessfulLogin(employeeSigServletPage, user, testRealmSAMLRedirectLoginPage, "principal=" + storedUser.getUsername());
|
||||
|
||||
|
@ -874,14 +881,14 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
.login().user(user).build()
|
||||
.processSamlResponse(Binding.POST)
|
||||
.transformString(s -> {
|
||||
assertThat(s, org.hamcrest.Matchers.containsString(">bburke@redhat.com.additional.domain<"));
|
||||
Assert.assertThat(s, org.hamcrest.Matchers.containsString(">bburke@redhat.com.additional.domain<"));
|
||||
s = s.replaceAll("bburke@redhat.com.additional.domain", "bburke@redhat.com<!-- comment -->.additional.domain");
|
||||
return s;
|
||||
})
|
||||
.build()
|
||||
.executeAndTransform(resp -> EntityUtils.toString(resp.getEntity()));
|
||||
|
||||
assertThat(resultPage, org.hamcrest.Matchers.containsString("principal=bburke@redhat.com.additional.domain"));
|
||||
Assert.assertThat(resultPage, org.hamcrest.Matchers.containsString("principal=bburke@redhat.com.additional.domain"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -895,14 +902,14 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
.login().user(user).build()
|
||||
.processSamlResponse(Binding.POST)
|
||||
.transformString(s -> {
|
||||
assertThat(s, org.hamcrest.Matchers.containsString(">bburke@redhat.com.additional.domain<"));
|
||||
Assert.assertThat(s, org.hamcrest.Matchers.containsString(">bburke@redhat.com.additional.domain<"));
|
||||
s = s.replaceAll("bburke@redhat.com.additional.domain", "bburke@redhat.com");
|
||||
return s;
|
||||
})
|
||||
.build()
|
||||
.executeAndTransform(resp -> EntityUtils.toString(resp.getEntity()));
|
||||
|
||||
assertThat(resultPage, org.hamcrest.Matchers.containsString("INVALID_SIGNATURE"));
|
||||
Assert.assertThat(resultPage, org.hamcrest.Matchers.containsString("INVALID_SIGNATURE"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -959,7 +966,7 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
|
||||
waitUntilElement(By.xpath("//body")).text().not().contains("bburke");
|
||||
//Different 403 status page on EAP and Wildfly
|
||||
assertTrue(driver.getPageSource().contains("Forbidden")
|
||||
Assert.assertTrue(driver.getPageSource().contains("Forbidden")
|
||||
|| driver.getPageSource().contains(FORBIDDEN_TEXT)
|
||||
|| driver.getPageSource().contains(WEBSPHERE_FORBIDDEN_TEXT)); // WebSphere
|
||||
|
||||
|
@ -1007,7 +1014,7 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
|
||||
samlidpInitiatedLoginPage.form().login(bburkeUser);
|
||||
assertCurrentUrlStartsWith(salesPost2ServletPage);
|
||||
assertThat(driver.getCurrentUrl(), endsWith("/foo"));
|
||||
Assert.assertThat(driver.getCurrentUrl(), endsWith("/foo"));
|
||||
waitUntilElement(By.xpath("//body")).text().contains("principal=bburke");
|
||||
salesPost2ServletPage.logout();
|
||||
checkLoggedOut(salesPost2ServletPage, testRealmSAMLPostLoginPage);
|
||||
|
@ -1025,7 +1032,7 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
testRealmSAMLPostLoginPage.form().login("bburke", "password");
|
||||
|
||||
waitUntilElement(By.xpath("//body")).text().contains("Error info: SamlAuthenticationError [reason=INVALID_SIGNATURE");
|
||||
assertEquals(driver.getCurrentUrl(), badAssertionSalesPostSigPage + "/saml");
|
||||
Assert.assertEquals(driver.getCurrentUrl(), badAssertionSalesPostSigPage + "/saml");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -1035,7 +1042,7 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
testRealmSAMLPostLoginPage.form().login("bburke", "password");
|
||||
|
||||
waitUntilElement(By.xpath("//body")).text().contains("Error info: SamlAuthenticationError [reason=INVALID_SIGNATURE");
|
||||
assertEquals(driver.getCurrentUrl(), missingAssertionSigPage + "/saml");
|
||||
Assert.assertEquals(driver.getCurrentUrl(), missingAssertionSigPage + "/saml");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -1049,7 +1056,7 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
new SamlClientBuilder()
|
||||
.addStep((client, currentURI, currentResponse, context) ->
|
||||
Binding.REDIRECT.createSamlUnsignedResponse(URI.create(employeeSigServletPage.toString() + "/saml"), null, document))
|
||||
.execute(closeableHttpResponse -> assertThat(closeableHttpResponse, bodyHC(containsString("INVALID_SIGNATURE"))));
|
||||
.execute(closeableHttpResponse -> Assert.assertThat(closeableHttpResponse, bodyHC(containsString("INVALID_SIGNATURE"))));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -1063,7 +1070,7 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
new SamlClientBuilder()
|
||||
.addStep((client, currentURI, currentResponse, context) ->
|
||||
Binding.REDIRECT.createSamlSignedResponse(URI.create(employeeSigServletPage.toString() + "/saml"), null, document, REALM_PRIVATE_KEY, REALM_PUBLIC_KEY))
|
||||
.execute(closeableHttpResponse -> assertThat(closeableHttpResponse, bodyHC(containsString("ERROR_STATUS"))));
|
||||
.execute(closeableHttpResponse -> Assert.assertThat(closeableHttpResponse, bodyHC(containsString("ERROR_STATUS"))));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -1076,8 +1083,8 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
assertCurrentUrlStartsWith(employeeServletPage);
|
||||
waitForPageToLoad();
|
||||
String pageSource = driver.getPageSource();
|
||||
assertThat(pageSource, containsString("Relay state: " + SamlSPFacade.RELAY_STATE));
|
||||
assertThat(pageSource, not(containsString("SAML response: null")));
|
||||
Assert.assertThat(pageSource, containsString("Relay state: " + SamlSPFacade.RELAY_STATE));
|
||||
Assert.assertThat(pageSource, not(containsString("SAML response: null")));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -1225,8 +1232,8 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
.navigateTo(employee2ServletPage.toString() + "/getAttributes")
|
||||
|
||||
.execute(r -> {
|
||||
assertThat(r, statusCodeIsHC(Response.Status.OK));
|
||||
assertThat(r, bodyHC(containsString("boolean-attribute: true")));
|
||||
Assert.assertThat(r, statusCodeIsHC(Response.Status.OK));
|
||||
Assert.assertThat(r, bodyHC(containsString("boolean-attribute: true")));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -1243,7 +1250,7 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
XPathExpression expr = xpath.compile("//*[local-name()='NameID']");
|
||||
|
||||
NodeList nodeList = (NodeList) expr.evaluate(responseDoc, XPathConstants.NODESET);
|
||||
assertThat(nodeList.getLength(), is(1));
|
||||
Assert.assertThat(nodeList.getLength(), is(1));
|
||||
|
||||
final Node nameIdNode = nodeList.item(0);
|
||||
nameIdNode.getParentNode().removeChild(nameIdNode);
|
||||
|
@ -1255,8 +1262,8 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
.navigateTo(employee2ServletPage.toString())
|
||||
|
||||
.execute(r -> {
|
||||
assertThat(r, statusCodeIsHC(Response.Status.OK));
|
||||
assertThat(r, bodyHC(allOf(containsString("principal="), not(containsString("500")))));
|
||||
Assert.assertThat(r, statusCodeIsHC(Response.Status.OK));
|
||||
Assert.assertThat(r, bodyHC(allOf(containsString("principal="), not(containsString("500")))));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -1282,13 +1289,13 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
HttpUriRequest post = SamlClient.Binding.POST.createSamlUnsignedResponse(getAppServerSamlEndpoint(salesPostSigEmailServletPage), null, responseDoc);
|
||||
response = client.execute(post, context);
|
||||
System.out.println(EntityUtils.toString(response.getEntity()));
|
||||
assertThat(response, statusCodeIsHC(Response.Status.FOUND));
|
||||
Assert.assertThat(response, statusCodeIsHC(Response.Status.FOUND));
|
||||
response.close();
|
||||
|
||||
HttpGet get = new HttpGet(salesPostSigEmailServletPage.toString());
|
||||
response = client.execute(get);
|
||||
assertThat(response, statusCodeIsHC(Response.Status.OK));
|
||||
assertThat(response, bodyHC(containsString("principal=bburke")));
|
||||
Assert.assertThat(response, statusCodeIsHC(Response.Status.OK));
|
||||
Assert.assertThat(response, bodyHC(containsString("principal=bburke")));
|
||||
} catch (Exception ex) {
|
||||
throw new RuntimeException(ex);
|
||||
} finally {
|
||||
|
@ -1304,8 +1311,8 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
public void testDifferentCookieName() {
|
||||
assertSuccessfulLogin(differentCookieNameServletPage, bburkeUser, testRealmSAMLPostLoginPage, "principal=bburke");
|
||||
|
||||
assertThat(driver.manage().getCookieNamed("DIFFERENT_SESSION_ID"), notNullValue());
|
||||
assertThat(driver.manage().getCookieNamed("JSESSIONID"), nullValue());
|
||||
Assert.assertThat(driver.manage().getCookieNamed("DIFFERENT_SESSION_ID"), notNullValue());
|
||||
Assert.assertThat(driver.manage().getCookieNamed("JSESSIONID"), nullValue());
|
||||
|
||||
salesPost2ServletPage.logout();
|
||||
checkLoggedOut(differentCookieNameServletPage, testRealmSAMLPostLoginPage);
|
||||
|
@ -1374,11 +1381,11 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
SOAPHeaderElement ecpRequestHeader = it.next();
|
||||
NodeList idpList = ecpRequestHeader.getElementsByTagNameNS("urn:oasis:names:tc:SAML:2.0:protocol", "IDPList");
|
||||
|
||||
assertThat("No IDPList returned from Service Provider", idpList.getLength(), is(1));
|
||||
Assert.assertThat("No IDPList returned from Service Provider", idpList.getLength(), is(1));
|
||||
|
||||
NodeList idpEntries = idpList.item(0).getChildNodes();
|
||||
|
||||
assertThat("No IDPEntry returned from Service Provider", idpEntries.getLength(), is(1));
|
||||
Assert.assertThat("No IDPEntry returned from Service Provider", idpEntries.getLength(), is(1));
|
||||
|
||||
String singleSignOnService = null;
|
||||
|
||||
|
@ -1390,7 +1397,7 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
singleSignOnService = location.getNodeValue();
|
||||
}
|
||||
|
||||
assertThat("Could not obtain SSO Service URL", singleSignOnService, notNullValue());
|
||||
Assert.assertThat("Could not obtain SSO Service URL", singleSignOnService, notNullValue());
|
||||
|
||||
Document authenticationRequest = authnRequestMessage.getSOAPBody().getFirstChild().getOwnerDocument();
|
||||
String username = "pedroigor";
|
||||
|
@ -1402,7 +1409,7 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
.header(HttpHeaders.AUTHORIZATION, authHeader)
|
||||
.post(Entity.entity(DocumentUtil.asString(authenticationRequest), "text/xml"));
|
||||
|
||||
assertThat(authenticationResponse.getStatus(), is(OK.getStatusCode()));
|
||||
Assert.assertThat(authenticationResponse.getStatus(), is(OK.getStatusCode()));
|
||||
|
||||
SOAPMessage responseMessage = MessageFactory.newInstance().createMessage(null, new ByteArrayInputStream(authenticationResponse.readEntity(byte[].class)));
|
||||
|
||||
|
@ -1412,19 +1419,19 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
|
||||
NodeList ecpResponse = responseMessageHeaders.getElementsByTagNameNS(JBossSAMLURIConstants.ECP_PROFILE.get(), JBossSAMLConstants.RESPONSE__ECP.get());
|
||||
|
||||
assertThat("No ECP Response", ecpResponse.getLength(), is(1));
|
||||
Assert.assertThat("No ECP Response", ecpResponse.getLength(), is(1));
|
||||
|
||||
Node samlResponse = responseMessage.getSOAPBody().getFirstChild();
|
||||
|
||||
assertThat(samlResponse, notNullValue());
|
||||
Assert.assertThat(samlResponse, notNullValue());
|
||||
|
||||
ResponseType responseType = (ResponseType) SAMLParser.getInstance().parse(samlResponse);
|
||||
StatusCodeType statusCode = responseType.getStatus().getStatusCode();
|
||||
|
||||
assertThat(statusCode.getValue().toString(), is(JBossSAMLURIConstants.STATUS_SUCCESS.get()));
|
||||
assertThat(responseType.getDestination(), is(ecpSPPage.toString() + "/"));
|
||||
assertThat(responseType.getSignature(), notNullValue());
|
||||
assertThat(responseType.getAssertions().size(), is(1));
|
||||
Assert.assertThat(statusCode.getValue().toString(), is(JBossSAMLURIConstants.STATUS_SUCCESS.get()));
|
||||
Assert.assertThat(responseType.getDestination(), is(ecpSPPage.toString() + "/"));
|
||||
Assert.assertThat(responseType.getSignature(), notNullValue());
|
||||
Assert.assertThat(responseType.getAssertions().size(), is(1));
|
||||
|
||||
SOAPMessage samlResponseRequest = MessageFactory.newInstance().createMessage();
|
||||
|
||||
|
@ -1446,7 +1453,7 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
}
|
||||
|
||||
Response resourceResponse = resourceRequest.get();
|
||||
assertThat(resourceResponse.readEntity(String.class), containsString("pedroigor"));
|
||||
Assert.assertThat(resourceResponse.readEntity(String.class), containsString("pedroigor"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -1465,11 +1472,11 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
SOAPHeaderElement ecpRequestHeader = it.next();
|
||||
NodeList idpList = ecpRequestHeader.getElementsByTagNameNS("urn:oasis:names:tc:SAML:2.0:protocol", "IDPList");
|
||||
|
||||
assertThat("No IDPList returned from Service Provider", idpList.getLength(), is(1));
|
||||
Assert.assertThat("No IDPList returned from Service Provider", idpList.getLength(), is(1));
|
||||
|
||||
NodeList idpEntries = idpList.item(0).getChildNodes();
|
||||
|
||||
assertThat("No IDPEntry returned from Service Provider", idpEntries.getLength(), is(1));
|
||||
Assert.assertThat("No IDPEntry returned from Service Provider", idpEntries.getLength(), is(1));
|
||||
|
||||
String singleSignOnService = null;
|
||||
|
||||
|
@ -1481,7 +1488,7 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
singleSignOnService = location.getNodeValue();
|
||||
}
|
||||
|
||||
assertThat("Could not obtain SSO Service URL", singleSignOnService, notNullValue());
|
||||
Assert.assertThat("Could not obtain SSO Service URL", singleSignOnService, notNullValue());
|
||||
|
||||
Document authenticationRequest = authnRequestMessage.getSOAPBody().getFirstChild().getOwnerDocument();
|
||||
String username = "pedroigor";
|
||||
|
@ -1493,17 +1500,17 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
.header(HttpHeaders.AUTHORIZATION, authHeader)
|
||||
.post(Entity.entity(DocumentUtil.asString(authenticationRequest), "application/soap+xml"));
|
||||
|
||||
assertThat(authenticationResponse.getStatus(), is(OK.getStatusCode()));
|
||||
Assert.assertThat(authenticationResponse.getStatus(), is(OK.getStatusCode()));
|
||||
|
||||
SOAPMessage responseMessage = MessageFactory.newInstance().createMessage(null, new ByteArrayInputStream(authenticationResponse.readEntity(byte[].class)));
|
||||
Node samlResponse = responseMessage.getSOAPBody().getFirstChild();
|
||||
|
||||
assertThat(samlResponse, notNullValue());
|
||||
Assert.assertThat(samlResponse, notNullValue());
|
||||
|
||||
StatusResponseType responseType = (StatusResponseType) SAMLParser.getInstance().parse(samlResponse);
|
||||
StatusCodeType statusCode = responseType.getStatus().getStatusCode();
|
||||
|
||||
assertThat(statusCode.getStatusCode().getValue().toString(), is(not(JBossSAMLURIConstants.STATUS_SUCCESS.get())));
|
||||
Assert.assertThat(statusCode.getStatusCode().getValue().toString(), is(not(JBossSAMLURIConstants.STATUS_SUCCESS.get())));
|
||||
}
|
||||
|
||||
public static void printDocument(Source doc, OutputStream out) throws IOException, TransformerException {
|
||||
|
@ -1568,7 +1575,7 @@ public class SAMLServletsAdapterTest extends AbstractServletsAdapterTest {
|
|||
waitUntilElement(By.xpath("//body")).is().present();
|
||||
|
||||
//Different 403 status page on EAP and Wildfly
|
||||
assertTrue(driver.getPageSource().contains("Forbidden")
|
||||
Assert.assertTrue(driver.getPageSource().contains("Forbidden")
|
||||
|| driver.getPageSource().contains(FORBIDDEN_TEXT)
|
||||
|| driver.getPageSource().contains(WEBSPHERE_FORBIDDEN_TEXT)); // WebSphere
|
||||
}
|
|
@ -41,7 +41,7 @@ import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
|
|||
|
||||
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.util.IOUtil.loadRealm;
|
||||
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;
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ package org.keycloak.testsuite.admin.client.authorization;
|
|||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.ByteArrayInputStream;
|
||||
|
|
|
@ -33,7 +33,7 @@ import java.util.Map;
|
|||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
||||
|
|
|
@ -37,7 +37,7 @@ import org.keycloak.testsuite.util.OAuthClient.AccessTokenResponse;
|
|||
import java.security.PublicKey;
|
||||
import java.util.List;
|
||||
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:mstrukel@redhat.com">Marko Strukelj</a>
|
||||
|
|
|
@ -16,7 +16,7 @@ import org.keycloak.testsuite.Assert;
|
|||
import org.keycloak.testsuite.pages.LoginPage;
|
||||
import org.keycloak.testsuite.pages.PageUtils;
|
||||
import org.keycloak.testsuite.pages.UpdateAccountInformationPage;
|
||||
import org.keycloak.testsuite.util.IOUtil;
|
||||
import org.keycloak.testsuite.utils.io.IOUtil;
|
||||
|
||||
import org.keycloak.testsuite.util.Matchers;
|
||||
import org.keycloak.testsuite.util.SamlClient.Binding;
|
||||
|
|
|
@ -24,7 +24,7 @@ import org.keycloak.exportimport.util.ImportUtils;
|
|||
import org.keycloak.representations.idm.RealmRepresentation;
|
||||
import org.keycloak.testsuite.arquillian.DeploymentTargetModifier;
|
||||
import org.keycloak.testsuite.runonserver.RunOnServerDeployment;
|
||||
import org.keycloak.testsuite.util.IOUtil;
|
||||
import org.keycloak.testsuite.utils.io.IOUtil;
|
||||
import org.keycloak.util.JsonSerialization;
|
||||
|
||||
import java.io.IOException;
|
||||
|
|
|
@ -24,7 +24,7 @@ import org.keycloak.exportimport.util.ImportUtils;
|
|||
import org.keycloak.representations.idm.RealmRepresentation;
|
||||
import org.keycloak.testsuite.arquillian.DeploymentTargetModifier;
|
||||
import org.keycloak.testsuite.runonserver.RunOnServerDeployment;
|
||||
import org.keycloak.testsuite.util.IOUtil;
|
||||
import org.keycloak.testsuite.utils.io.IOUtil;
|
||||
import org.keycloak.testsuite.util.WaitUtils;
|
||||
import org.keycloak.util.JsonSerialization;
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ import javax.ws.rs.core.UriBuilderException;
|
|||
import java.net.URI;
|
||||
import java.util.List;
|
||||
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||
|
||||
/**
|
||||
* @author mhajas
|
||||
|
|
|
@ -35,8 +35,8 @@ import static org.hamcrest.CoreMatchers.not;
|
|||
import static org.hamcrest.Matchers.containsString;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.keycloak.testsuite.saml.AbstractSamlTest.REALM_NAME;
|
||||
import static org.keycloak.testsuite.util.IOUtil.documentToString;
|
||||
import static org.keycloak.testsuite.util.IOUtil.setDocElementAttributeValue;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.documentToString;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.setDocElementAttributeValue;
|
||||
import static org.keycloak.testsuite.util.Matchers.statusCodeIsHC;
|
||||
|
||||
/**
|
||||
|
|
|
@ -21,8 +21,9 @@ import org.keycloak.representations.idm.RealmRepresentation;
|
|||
import org.keycloak.representations.idm.UserRepresentation;
|
||||
import org.keycloak.saml.processing.api.saml.v2.request.SAML2Request;
|
||||
import org.keycloak.testsuite.util.SamlClient;
|
||||
|
||||
import org.keycloak.testsuite.util.saml.LoginBuilder;
|
||||
import org.keycloak.testsuite.utils.io.IOUtil;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.Collection;
|
||||
|
@ -43,7 +44,6 @@ import org.junit.Test;
|
|||
import org.w3c.dom.Document;
|
||||
|
||||
import static org.keycloak.testsuite.util.SamlClient.*;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -108,9 +108,10 @@ public class ConcurrentAuthnRequestTest extends AbstractSamlTest {
|
|||
|
||||
@Override
|
||||
public void addTestRealms(List<RealmRepresentation> testRealms) {
|
||||
testRealms.add(loadRealm("/adapter-test/keycloak-saml/testsaml.json"));
|
||||
testRealms.add(IOUtil.loadRealm("/adapter-test/keycloak-saml/testsaml.json"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthnRequestType createLoginRequestDocument(String issuer, String assertionConsumerURL, String realmName) {
|
||||
return SamlClient.createLoginRequestDocument(issuer, assertionConsumerURL, getAuthServerSamlEndpoint(realmName));
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ import org.keycloak.saml.common.exceptions.ParsingException;
|
|||
import org.keycloak.saml.common.exceptions.ProcessingException;
|
||||
import org.keycloak.saml.processing.core.saml.v2.common.SAMLDocumentHolder;
|
||||
import org.keycloak.testsuite.util.ClientBuilder;
|
||||
import org.keycloak.testsuite.util.IOUtil;
|
||||
import org.keycloak.testsuite.utils.io.IOUtil;
|
||||
|
||||
import org.keycloak.testsuite.util.SamlClient.Binding;
|
||||
import org.keycloak.testsuite.util.SamlClientBuilder;
|
||||
|
@ -17,7 +17,6 @@ import java.util.List;
|
|||
import static org.hamcrest.CoreMatchers.containsString;
|
||||
import static org.hamcrest.CoreMatchers.not;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
|
||||
/**
|
||||
* @author mhajas
|
||||
|
@ -26,7 +25,7 @@ public class SamlConsentTest extends AbstractSamlTest {
|
|||
|
||||
@Override
|
||||
public void addTestRealms(List<RealmRepresentation> testRealms) {
|
||||
testRealms.add(loadRealm("/adapter-test/keycloak-saml/testsaml.json"));
|
||||
testRealms.add(IOUtil.loadRealm("/adapter-test/keycloak-saml/testsaml.json"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
package org.keycloak.testsuite.adapter;
|
||||
|
||||
import org.keycloak.testsuite.adapter.servlet.SAMLServletsAdapterTest;
|
||||
import org.keycloak.testsuite.adapter.servlet.SAMLServletAdapterTest;
|
||||
import org.keycloak.testsuite.arquillian.annotation.AppServerContainer;
|
||||
|
||||
/**
|
||||
* @author mhajas
|
||||
*/
|
||||
@AppServerContainer("app-server-remote")
|
||||
public class RemoteSAMLAdapterTest extends SAMLServletsAdapterTest {
|
||||
public class RemoteSAMLAdapterTest extends SAMLServletAdapterTest {
|
||||
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ import java.util.Date;
|
|||
import java.util.List;
|
||||
|
||||
import static org.keycloak.testsuite.performance.PerformanceTest.LOG;
|
||||
import static org.keycloak.testsuite.util.IOUtil.PROJECT_BUILD_DIRECTORY;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.PROJECT_BUILD_DIRECTORY;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -27,7 +27,7 @@ import static org.keycloak.testsuite.performance.LoginLogoutTestParameters.LOGIN
|
|||
import static org.keycloak.testsuite.performance.LoginLogoutTestParameters.LOGOUT_REQUEST_TIME;
|
||||
import static org.keycloak.testsuite.performance.LoginLogoutTestParameters.LOGOUT_VERIFY_REQUEST_TIME;
|
||||
import static org.keycloak.testsuite.performance.LoginLogoutTestParameters.PASSWORD_HASH_ITERATIONS;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -42,7 +42,7 @@ import static org.keycloak.testsuite.performance.LoginLogoutTestParameters.LOGIN
|
|||
import static org.keycloak.testsuite.performance.LoginLogoutTestParameters.LOGOUT_REQUEST_TIME;
|
||||
import static org.keycloak.testsuite.performance.LoginLogoutTestParameters.LOGOUT_VERIFY_REQUEST_TIME;
|
||||
import static org.keycloak.testsuite.performance.LoginLogoutTestParameters.PASSWORD_HASH_ITERATIONS;
|
||||
import static org.keycloak.testsuite.util.IOUtil.loadRealm;
|
||||
import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -20,19 +20,31 @@
|
|||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<parent>
|
||||
<groupId>org.keycloak.testsuite</groupId>
|
||||
<artifactId>integration-arquillian-servers</artifactId>
|
||||
<artifactId>integration-arquillian</artifactId>
|
||||
<version>4.1.0.Final-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>integration-arquillian-servers-util</artifactId>
|
||||
<artifactId>integration-arquillian-util</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>Test Servers Util</name>
|
||||
<name>Test Util</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.jboss.arquillian.container</groupId>
|
||||
<artifactId>undertow-embedded</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.keycloak</groupId>
|
||||
<artifactId>keycloak-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.keycloak</groupId>
|
||||
<artifactId>keycloak-servlet-filter-adapter</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jboss.shrinkwrap.resolver</groupId>
|
||||
<artifactId>shrinkwrap-resolver-api-maven</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
|
@ -1,4 +1,4 @@
|
|||
package org.keycloak.testsuite.arquillian.annotation;
|
||||
package org.keycloak.testsuite.utils.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
|
@ -0,0 +1,201 @@
|
|||
/*
|
||||
* 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.utils.arquillian;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import org.jboss.arquillian.test.spi.TestClass;
|
||||
import org.jboss.logging.Logger;
|
||||
import org.jboss.shrinkwrap.api.Archive;
|
||||
import org.jboss.shrinkwrap.api.asset.StringAsset;
|
||||
import org.jboss.shrinkwrap.api.spec.WebArchive;
|
||||
import org.keycloak.adapters.servlet.KeycloakOIDCFilter;
|
||||
import org.keycloak.representations.adapters.config.AdapterConfig;
|
||||
import org.keycloak.testsuite.utils.annotation.UseServletFilter;
|
||||
import org.keycloak.testsuite.utils.io.IOUtil;
|
||||
import org.keycloak.util.JsonSerialization;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author <a href="mailto:vramik@redhat.com">Vlasta Ramik</a>
|
||||
*/
|
||||
public class DeploymentArchiveProcessorUtils {
|
||||
|
||||
private static final Logger log = Logger.getLogger(DeploymentArchiveProcessorUtils.class);
|
||||
|
||||
private static final boolean AUTH_SERVER_SSL_REQUIRED = Boolean.parseBoolean(System.getProperty("auth.server.ssl.required"));
|
||||
private static final boolean APP_SERVER_SSL_REQUIRED = Boolean.parseBoolean(System.getProperty("app.server.ssl.required"));
|
||||
|
||||
public static final String WEBXML_PATH = "/WEB-INF/web.xml";
|
||||
public static final String ADAPTER_CONFIG_PATH = "/WEB-INF/keycloak.json";
|
||||
public static final String ADAPTER_CONFIG_PATH_TENANT1 = "/WEB-INF/classes/tenant1-keycloak.json";
|
||||
public static final String ADAPTER_CONFIG_PATH_TENANT2 = "/WEB-INF/classes/tenant2-keycloak.json";
|
||||
public static final String ADAPTER_CONFIG_PATH_JS = "/keycloak.json";
|
||||
public static final String SAML_ADAPTER_CONFIG_PATH = "/WEB-INF/keycloak-saml.xml";
|
||||
public static final String JBOSS_DEPLOYMENT_XML_PATH = "/WEB-INF/jboss-deployment-structure.xml";
|
||||
|
||||
/**
|
||||
* @return true iff archive's name equals run-on-server-classes.war
|
||||
*/
|
||||
public static boolean checkRunOnServerDeployment(Archive<?> archive) {
|
||||
return archive.getName().equals("run-on-server-classes.war");
|
||||
}
|
||||
|
||||
public static void modifyWebXMLForServletFilter(Archive<?> archive, TestClass testClass) {
|
||||
Document webXmlDoc;
|
||||
try {
|
||||
webXmlDoc = IOUtil.loadXML(
|
||||
archive.get(WEBXML_PATH).getAsset().openStream());
|
||||
} catch (Exception ex) {
|
||||
throw new RuntimeException("Error when processing " + archive.getName(), ex);
|
||||
}
|
||||
|
||||
//We need to add filter declaration to web.xml
|
||||
log.info("Adding filter to " + testClass.getAnnotation(UseServletFilter.class).filterClass() +
|
||||
" with mapping " + testClass.getAnnotation(UseServletFilter.class).filterPattern() +
|
||||
" for " + archive.getName());
|
||||
|
||||
Element filter = webXmlDoc.createElement("filter");
|
||||
Element filterName = webXmlDoc.createElement("filter-name");
|
||||
Element filterClass = webXmlDoc.createElement("filter-class");
|
||||
|
||||
filterName.setTextContent(testClass.getAnnotation(UseServletFilter.class).filterName());
|
||||
filterClass.setTextContent(testClass.getAnnotation(UseServletFilter.class).filterClass());
|
||||
|
||||
filter.appendChild(filterName);
|
||||
filter.appendChild(filterClass);
|
||||
IOUtil.appendChildInDocument(webXmlDoc, "web-app", filter);
|
||||
|
||||
filter.appendChild(filterName);
|
||||
filter.appendChild(filterClass);
|
||||
|
||||
// Limitation that all deployments of annotated class use same skipPattern. Refactor if
|
||||
// something more flexible is needed (would require more tricky web.xml parsing though...)
|
||||
String skipPattern = testClass.getAnnotation(UseServletFilter.class).skipPattern();
|
||||
if (skipPattern != null && !skipPattern.isEmpty()) {
|
||||
Element initParam = webXmlDoc.createElement("init-param");
|
||||
|
||||
Element paramName = webXmlDoc.createElement("param-name");
|
||||
paramName.setTextContent(KeycloakOIDCFilter.SKIP_PATTERN_PARAM);
|
||||
|
||||
Element paramValue = webXmlDoc.createElement("param-value");
|
||||
paramValue.setTextContent(skipPattern);
|
||||
|
||||
initParam.appendChild(paramName);
|
||||
initParam.appendChild(paramValue);
|
||||
|
||||
filter.appendChild(initParam);
|
||||
}
|
||||
|
||||
IOUtil.appendChildInDocument(webXmlDoc, "web-app", filter);
|
||||
|
||||
Element filterMapping = webXmlDoc.createElement("filter-mapping");
|
||||
|
||||
Element urlPattern = webXmlDoc.createElement("url-pattern");
|
||||
|
||||
filterName = webXmlDoc.createElement("filter-name");
|
||||
|
||||
filterName.setTextContent(testClass.getAnnotation(UseServletFilter.class).filterName());
|
||||
urlPattern.setTextContent(IOUtil.getElementTextContent(webXmlDoc, "web-app/security-constraint/web-resource-collection/url-pattern"));
|
||||
|
||||
filterMapping.appendChild(filterName);
|
||||
filterMapping.appendChild(urlPattern);
|
||||
|
||||
if (!testClass.getAnnotation(UseServletFilter.class).dispatcherType().isEmpty()) {
|
||||
Element dispatcher = webXmlDoc.createElement("dispatcher");
|
||||
dispatcher.setTextContent(testClass.getAnnotation(UseServletFilter.class).dispatcherType());
|
||||
filterMapping.appendChild(dispatcher);
|
||||
}
|
||||
IOUtil.appendChildInDocument(webXmlDoc, "web-app", filterMapping);
|
||||
|
||||
//finally we need to remove all keycloak related configuration from web.xml
|
||||
IOUtil.removeElementsFromDoc(webXmlDoc, "web-app", "security-constraint");
|
||||
IOUtil.removeElementsFromDoc(webXmlDoc, "web-app", "login-config");
|
||||
IOUtil.removeElementsFromDoc(webXmlDoc, "web-app", "security-role");
|
||||
|
||||
archive.add(new StringAsset((IOUtil.documentToString(webXmlDoc))), WEBXML_PATH);
|
||||
}
|
||||
|
||||
public static void addFilterDependencies(Archive<?> archive, TestClass testClass) {
|
||||
log.info("Adding filter dependencies to " + archive.getName());
|
||||
|
||||
String dependency = testClass.getAnnotation(UseServletFilter.class).filterDependency();
|
||||
((WebArchive) archive).addAsLibraries(KeycloakDependenciesResolver.resolveDependencies((dependency + ":" + System.getProperty("project.version"))));
|
||||
|
||||
Document jbossXmlDoc = IOUtil.loadXML(archive.get(JBOSS_DEPLOYMENT_XML_PATH).getAsset().openStream());
|
||||
IOUtil.removeNodeByAttributeValue(jbossXmlDoc, "dependencies", "module", "name", "org.keycloak.keycloak-saml-core");
|
||||
IOUtil.removeNodeByAttributeValue(jbossXmlDoc, "dependencies", "module", "name", "org.keycloak.keycloak-adapter-spi");
|
||||
|
||||
archive.add(new StringAsset((IOUtil.documentToString(jbossXmlDoc))), JBOSS_DEPLOYMENT_XML_PATH);
|
||||
}
|
||||
|
||||
public static void modifyOIDCAdapterConfig(Archive<?> archive, String adapterConfigPath) {
|
||||
try {
|
||||
AdapterConfig adapterConfig = IOUtil.loadJson(archive.get(adapterConfigPath)
|
||||
.getAsset().openStream(), AdapterConfig.class);
|
||||
|
||||
adapterConfig.setAuthServerUrl(getAuthServerUrl());
|
||||
|
||||
if (APP_SERVER_SSL_REQUIRED) {
|
||||
adapterConfig.setSslRequired("all");
|
||||
}
|
||||
|
||||
archive.add(new StringAsset(JsonSerialization.writeValueAsPrettyString(adapterConfig)),
|
||||
adapterConfigPath);
|
||||
} catch (IOException ex) {
|
||||
log.error("Cannot serialize adapter config to JSON.", ex);
|
||||
}
|
||||
}
|
||||
|
||||
public static void modifySAMLAdapterConfig(Archive<?> archive) {
|
||||
Document doc = IOUtil.loadXML(archive.get(SAML_ADAPTER_CONFIG_PATH).getAsset().openStream());
|
||||
|
||||
if (AUTH_SERVER_SSL_REQUIRED) {
|
||||
IOUtil.modifyDocElementAttribute(doc, "SingleSignOnService", "bindingUrl", "8080", System.getProperty("auth.server.https.port"));
|
||||
IOUtil.modifyDocElementAttribute(doc, "SingleSignOnService", "bindingUrl", "http", "https");
|
||||
IOUtil.modifyDocElementAttribute(doc, "SingleSignOnService", "assertionConsumerServiceUrl", "8081", System.getProperty("app.server.https.port"));
|
||||
IOUtil.modifyDocElementAttribute(doc, "SingleSignOnService", "assertionConsumerServiceUrl", "http", "https");
|
||||
IOUtil.modifyDocElementAttribute(doc, "SingleLogoutService", "postBindingUrl", "8080", System.getProperty("auth.server.https.port"));
|
||||
IOUtil.modifyDocElementAttribute(doc, "SingleLogoutService", "postBindingUrl", "http", "https");
|
||||
IOUtil.modifyDocElementAttribute(doc, "SingleLogoutService", "redirectBindingUrl", "8080", System.getProperty("auth.server.https.port"));
|
||||
IOUtil.modifyDocElementAttribute(doc, "SingleLogoutService", "redirectBindingUrl", "http", "https");
|
||||
IOUtil.modifyDocElementAttribute(doc, "SP", "logoutPage", "8081", System.getProperty("app.server.https.port"));
|
||||
IOUtil.modifyDocElementAttribute(doc, "SP", "logoutPage", "http", "https");
|
||||
} else {
|
||||
IOUtil.modifyDocElementAttribute(doc, "SingleSignOnService", "bindingUrl", "8080", System.getProperty("auth.server.http.port"));
|
||||
IOUtil.modifyDocElementAttribute(doc, "SingleSignOnService", "assertionConsumerServiceUrl", "8081", System.getProperty("app.server.http.port"));
|
||||
IOUtil.modifyDocElementAttribute(doc, "SingleLogoutService", "postBindingUrl", "8080", System.getProperty("auth.server.http.port"));
|
||||
IOUtil.modifyDocElementAttribute(doc, "SingleLogoutService", "redirectBindingUrl", "8080", System.getProperty("auth.server.http.port"));
|
||||
IOUtil.modifyDocElementAttribute(doc, "SP", "logoutPage", "8081", System.getProperty("app.server.http.port"));
|
||||
}
|
||||
|
||||
archive.add(new StringAsset(IOUtil.documentToString(doc)), SAML_ADAPTER_CONFIG_PATH);
|
||||
|
||||
((WebArchive) archive).addAsResource(new File(DeploymentArchiveProcessorUtils.class.getResource("/keystore/keycloak.truststore").getFile()));
|
||||
}
|
||||
|
||||
private static String getAuthServerUrl() {
|
||||
String scheme = AUTH_SERVER_SSL_REQUIRED ? "https" : "http";
|
||||
String host = System.getProperty("app.server.host", "localhost");
|
||||
String port = AUTH_SERVER_SSL_REQUIRED ? System.getProperty("auth.server.https.port", "8443") :
|
||||
System.getProperty("auth.server.http.port", "8180");
|
||||
|
||||
return String.format("%s://%s:%s/auth", scheme, host, port);
|
||||
}
|
||||
}
|
|
@ -1,4 +1,20 @@
|
|||
package org.keycloak.testsuite.arquillian;
|
||||
/*
|
||||
* 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.utils.arquillian;
|
||||
|
||||
import org.jboss.logging.Logger;
|
||||
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
|
||||
|
@ -15,7 +31,7 @@ import java.util.Map;
|
|||
*/
|
||||
public class KeycloakDependenciesResolver {
|
||||
|
||||
private static Map<String, File[]> dependencies = new HashMap<>();
|
||||
private static final Map<String, File[]> dependencies = new HashMap<>();
|
||||
|
||||
protected static final Logger log = org.jboss.logging.Logger.getLogger(KeycloakDependenciesResolver.class);
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.keycloak.testsuite.util;
|
||||
package org.keycloak.testsuite.utils.io;
|
||||
|
||||
import org.jboss.logging.Logger;
|
||||
import org.keycloak.representations.idm.RealmRepresentation;
|
||||
|
@ -69,7 +69,7 @@ public class IOUtil {
|
|||
try {
|
||||
return loadRealm(new FileInputStream(realmFile));
|
||||
} catch (FileNotFoundException ex) {
|
||||
throw new IllegalStateException("Test realm file not found: " + realmFile);
|
||||
throw new IllegalStateException("Test realm file not found: " + realmFile, ex);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in a new issue