/* * Copyright 2013 eXo Platform SAS * * 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 juzu.plugin.authz; import juzu.impl.bridge.DescriptorBuilder; import juzu.test.AbstractWebTestCase; import org.apache.http.HttpHost; import org.apache.http.HttpResponse; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.AuthCache; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.protocol.HttpClientContext; import org.apache.http.impl.auth.BasicScheme; import org.apache.http.impl.client.BasicAuthCache; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.HttpClientBuilder; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.RunAsClient; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Test; /** * @author Julien Viet */ public class AuthenticatedTestCase extends AbstractWebTestCase { @Deployment public static WebArchive createDeployment() { DescriptorBuilder def = DescriptorBuilder.DEFAULT.servletApp("juzu.authenticated"); // DescriptorBuilder desc = new DescriptorBuilder(def) { @Override protected void appendWebXmlFooter(StringBuilder buffer) { buffer.append("" + "<security-constraint>\n" + "<web-resource-collection>\n" + "<web-resource-name>secured</web-resource-name>\n" + "<url-pattern>/</url-pattern>\n" + "</web-resource-collection>\n" + "<auth-constraint>\n" + "<role-name>myrole</role-name>\n" + "</auth-constraint>\n" + "</security-constraint>\n" + "<login-config>\n" + "<auth-method>BASIC</auth-method>\n" + "<realm-name>MyUserDatabase</realm-name>\n" + "</login-config>\n" + "<security-role>\n" + "<role-name>myrole</role-name>\n" + "</security-role>\n" + "<session-config>\n" + "<tracking-mode>URL</tracking-mode>\n" + "</session-config>\n"); super.appendWebXmlFooter(buffer); } }; WebArchive war = createServletDeployment(desc, true); war.addAsManifestResource("juzu/authenticated/resources/context.xml", "context.xml"); return war; } @Test @RunAsClient public void testFoo() throws Exception { // Deny all HttpResponse response = execute(deploymentURL.toString() + "/denyall"); assertEquals(403, response.getStatusLine().getStatusCode()); // Manager response = execute(deploymentURL.toString() + "/manager"); assertEquals(403, response.getStatusLine().getStatusCode()); // My response = execute(deploymentURL.toString() + "/myrole"); assertEquals(200, response.getStatusLine().getStatusCode()); } private HttpResponse execute(String url) throws Exception { HttpClient builder = HttpClientBuilder.create().build(); HttpClientContext context = new HttpClientContext(); BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("foo", "foo")); context.setCredentialsProvider(credentialsProvider); AuthCache authCache = new BasicAuthCache(); HttpHost host = new HttpHost("localhost"); authCache.put(host, new BasicScheme()); context.setAuthCache(authCache); return builder.execute(new HttpGet(url), context); } }