Index: modules/testsuite/cxf-tests/src/test/java/org/jboss/test/ws/jaxws/samples/wsse/policy/basic/AnnotatedSignEncryptArquillianTestCase.java =================================================================== --- modules/testsuite/cxf-tests/src/test/java/org/jboss/test/ws/jaxws/samples/wsse/policy/basic/AnnotatedSignEncryptArquillianTestCase.java (revision 0) +++ modules/testsuite/cxf-tests/src/test/java/org/jboss/test/ws/jaxws/samples/wsse/policy/basic/AnnotatedSignEncryptArquillianTestCase.java (working copy) @@ -0,0 +1,153 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright 2013, Red Hat Middleware LLC, and individual contributors + * as indicated by the @author tags. See the copyright.txt file in the + * distribution for a full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ +package org.jboss.test.ws.jaxws.samples.wsse.policy.basic; + +import static org.junit.Assert.*; + +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStreamReader; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; + +import javax.xml.namespace.QName; +import javax.xml.ws.BindingProvider; +import javax.xml.ws.Service; + +import org.apache.cxf.ws.security.SecurityConstants; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.container.test.api.RunAsClient; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.asset.StringAsset; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.jboss.wsf.test.JBossWSTestHelper; +import org.jboss.wsf.test.JBossWSTestHelper.JarDeployment; +import org.jboss.wsf.test.JBossWSTestHelper.WarDeployment; +import org.junit.Test; +import org.junit.runner.RunWith; +//import org.jboss.wsf.test.JBossWSTestHelper; + +@RunWith(Arquillian.class) +public final class AnnotatedSignEncryptArquillianTestCase +{ + private static final String WAR_NAME = "jaxws-samples-wsse-policy-sign-encrypt-gcm-code-first.war"; + private static final String CLIENT_JAR_NAME = "jaxws-samples-wsse-policy-sign-encrypt-client.jar"; + private static final String CLIENT_JAR_RESOURCES_PREFIX = "jaxws/samples/wsse/policy/basic/sign-encrypt/"; + private final String serviceURL = "http://" + JBossWSTestHelper.getServerHost() + ":8080/jaxws-samples-wsse-policy-sign-encrypt-gcm-code-first/AnnotatedSecurityService"; + + public static JarDeployment createClientJarDeployment(String name) + { + return new JarDeployment(name) { { + archive + .addManifest() + .addAsManifestResource(new File(testResourcesPath + CLIENT_JAR_RESOURCES_PREFIX + "META-INF/alice.properties"), "alice.properties") + .addAsManifestResource(new File(testResourcesPath + CLIENT_JAR_RESOURCES_PREFIX + "META-INF/alice.jks"), "alice.jks") + .addAsManifestResource(new File(testResourcesPath + CLIENT_JAR_RESOURCES_PREFIX + "META-INF/jaxws-client-config.xml"), "jaxws-client-config.xml") + ; + } }; + } + + + @Deployment(testable = false) + public static WebArchive getDeployment() { + return new WarDeployment(WAR_NAME) { { + archive + .setManifest(new StringAsset("Manifest-Version: 1.0\n" + + "Dependencies: org.jboss.ws.cxf.jbossws-cxf-client\n")) + .addClass(org.jboss.test.ws.jaxws.samples.wsse.policy.basic.AnnotatedServiceIface.class) + .addClass(org.jboss.test.ws.jaxws.samples.wsse.policy.basic.AnnotatedServiceImpl.class) + .addClass(org.jboss.test.ws.jaxws.samples.wsse.policy.basic.KeystorePasswordCallback.class) + .addClass(org.jboss.test.ws.jaxws.samples.wsse.policy.jaxws.SayHello.class) + .addClass(org.jboss.test.ws.jaxws.samples.wsse.policy.jaxws.SayHelloResponse.class) + .addAsResource(new File(testResourcesPath + "jaxws/samples/wsse/policy/basic/gcm/WEB-INF/bob.jks"), "bob.jks") + .addAsResource(new File(testResourcesPath + "jaxws/samples/wsse/policy/basic/gcm/WEB-INF/bob.properties"), "bob.properties") + ; + } }.create(); + } + + @RunAsClient + @Test + public void testWsdl() throws Exception + { + URL wsdlURL = new URL(serviceURL + "?wsdl"); + BufferedReader br = new BufferedReader(new InputStreamReader(wsdlURL.openStream(), "UTF-8")); + StringBuilder sb = new StringBuilder(); + try { + String s; + while ((s = br.readLine()) != null) { + sb.append(s); + } + } finally { + br.close(); + } + String wsdl = sb.toString(); + assertTrue(wsdl.contains("AsymmetricBinding_X509v1_GCM192OAEP_ProtectTokens_binding_policy")); + } + + @RunAsClient + @Test + public void test() throws Exception + { + File file = new File(JBossWSTestHelper.getTestArchiveDir(), CLIENT_JAR_NAME); + createClientJarDeployment(CLIENT_JAR_NAME).writeToFile(); + + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + setNewClassLoaderWithJars(classLoader, file); + + QName serviceName = new QName("http://www.jboss.org/jbossws/ws-extensions/wssecuritypolicy", "AnnotatedSecurityService"); + URL wsdlURL = new URL(serviceURL + "?wsdl"); + Service service = Service.create(wsdlURL, serviceName); + AnnotatedServiceIface proxy = (AnnotatedServiceIface)service.getPort(AnnotatedServiceIface.class); + setupWsse(proxy); + + assertEquals("Secure Hello World!", proxy.sayHello()); + + // cleanup + file.delete(); + Thread.currentThread().setContextClassLoader(classLoader); + } + + private void setNewClassLoaderWithJars(ClassLoader classloader, File ... jarFiles) throws MalformedURLException + { + if (jarFiles == null) + return; + URL[] urls = new URL[jarFiles.length]; + int i = 0; + for (File jarFile : jarFiles) + { + urls[i] = jarFile.toURI().toURL(); + i++; + } + URLClassLoader cl = new URLClassLoader(urls, classloader); + Thread.currentThread().setContextClassLoader(cl); + } + + private void setupWsse(AnnotatedServiceIface proxy) + { + ((BindingProvider)proxy).getRequestContext().put(SecurityConstants.CALLBACK_HANDLER, new KeystorePasswordCallback()); + ((BindingProvider)proxy).getRequestContext().put(SecurityConstants.SIGNATURE_PROPERTIES, Thread.currentThread().getContextClassLoader().getResource("META-INF/alice.properties")); + ((BindingProvider)proxy).getRequestContext().put(SecurityConstants.ENCRYPT_PROPERTIES, Thread.currentThread().getContextClassLoader().getResource("META-INF/alice.properties")); + ((BindingProvider)proxy).getRequestContext().put(SecurityConstants.SIGNATURE_USERNAME, "alice"); + ((BindingProvider)proxy).getRequestContext().put(SecurityConstants.ENCRYPT_USERNAME, "bob"); + } +}