CredentialDigest test
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/d995c944 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/d995c944 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/d995c944 Branch: refs/heads/master Commit: d995c944636bc9978633376ee6ec5ada4994dca9 Parents: cf13b57 Author: Romain manni-Bucau <rmannibu...@gmail.com> Authored: Fri Aug 26 10:31:14 2016 +0200 Committer: Romain manni-Bucau <rmannibu...@gmail.com> Committed: Fri Aug 26 10:31:14 2016 +0200 ---------------------------------------------------------------------- .../tests/datasourcerealm/AddUser.java | 45 +++++++ .../datasourcerealm/DataSourceRealmTest.java | 127 +++++++++++++++++++ .../arquillian/tests/datasourcerealm/Role.java | 47 +++++++ .../tests/datasourcerealm/RoleId.java | 65 ++++++++++ .../arquillian/tests/datasourcerealm/User.java | 60 +++++++++ arquillian/arquillian-tomee-tests/pom.xml | 6 +- 6 files changed, 349 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/d995c944/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/AddUser.java ---------------------------------------------------------------------- diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/AddUser.java b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/AddUser.java new file mode 100644 index 0000000..29d5511 --- /dev/null +++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/AddUser.java @@ -0,0 +1,45 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * 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.apache.openejb.arquillian.tests.datasourcerealm; + +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.context.Initialized; +import javax.enterprise.event.Observes; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.transaction.Transactional; + +public class AddUser { + @PersistenceContext + private EntityManager em; + + @Transactional + public void add(@Observes @Initialized(ApplicationScoped.class) Object init) { + final User user = new User(); + user.setUserName("test"); + user.setUserPass("9003d1df22eb4d3820015070385194c8"); // md5(pwd) + em.persist(user); + + final RoleId roleId = new RoleId(); + roleId.setUserName(user.getUserName()); + roleId.setUserRole("arquillian"); + + final Role role = new Role(); + role.setId(roleId); + em.persist(role); + } +} http://git-wip-us.apache.org/repos/asf/tomee/blob/d995c944/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/DataSourceRealmTest.java ---------------------------------------------------------------------- diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/DataSourceRealmTest.java b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/DataSourceRealmTest.java new file mode 100644 index 0000000..6ba794b --- /dev/null +++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/DataSourceRealmTest.java @@ -0,0 +1,127 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * 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.apache.openejb.arquillian.tests.datasourcerealm; + +import org.apache.ziplock.IO; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.arquillian.test.api.ArquillianResource; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.asset.StringAsset; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.jboss.shrinkwrap.descriptor.api.Descriptors; +import org.jboss.shrinkwrap.descriptor.api.webapp31.WebAppDescriptor; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.core.MediaType; +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; + +import static javax.xml.bind.DatatypeConverter.printBase64Binary; +import static org.junit.Assert.assertEquals; + +@RunWith(Arquillian.class) +public class DataSourceRealmTest { + @Deployment(testable = false) + public static Archive<?> war() { + return ShrinkWrap.create(WebArchive.class, DataSourceRealmTest.class.getName() + ".war") + .addClasses(AddUser.class) + .addAsWebInfResource(new StringAsset( // JPA for user/role provisioning and table init + "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + + "<persistence xmlns=\"http://java.sun.com/xml/ns/persistence\"\n" + + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + + " xsi:schemaLocation=\"\n" + + " http://java.sun.com/xml/ns/persistence\n" + + " http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd\"\n" + + " version=\"2.0\">\n" + + " <persistence-unit name=\"users\">\n" + + " <jta-data-source>jdbc/users-managed</jta-data-source>\n" + + " <non-jta-data-source>jdbc/users</non-jta-data-source>\n" + + " <class>org.apache.openejb.arquillian.tests.datasourcerealm.User</class>\n" + + " <class>org.apache.openejb.arquillian.tests.datasourcerealm.Role</class>\n" + + " <class>org.apache.openejb.arquillian.tests.datasourcerealm.RoleId</class>\n" + + " <exclude-unlisted-classes>true</exclude-unlisted-classes>\n" + + " <properties>\n" + + " <property name=\"openejb.jpa.init-entitymanager\" value=\"true\" />\n" + + " <property name=\"openjpa.jdbc.SynchronizeMappings\" value=\"buildSchema(ForeignKeys=true)\"/>\n" + + " <property name=\"openjpa.RuntimeUnenhancedClasses\" value=\"supported\"/>\n" + + " </properties>\n" + + " </persistence-unit>\n" + + "</persistence>"), "persistence.xml") + .addAsManifestResource(new StringAsset( + "<Context>\n" + + " <Realm className=\"org.apache.catalina.realm.DataSourceRealm\" \n" + + " dataSourceName=\"jdbc/users\" localDataSource=\"true\"\n" + + " userTable=\"users\" userNameCol=\"user_name\" userCredCol=\"user_pass\"\n" + + " userRoleTable=\"user_roles\" roleNameCol=\"user_role\">\n" + + "\n" + + " <CredentialHandler className=\"org.apache.catalina.realm.MessageDigestCredentialHandler\" algorithm=\"md5\" />\n" + + " </Realm>\n" + + "</Context>"), "context.xml") + .addAsWebInfResource(new StringAsset( + "<Resources>\n" + + " <Resource id=\"jdbc/users-managed\" type=\"DataSource\">\n" + + " JtaManaged = true\n" + + " JdbcUrl = jdbc:hsqldb:mem:DataSourceRealmTest_users\n" + + " LogSql = true\n" + + " </Resource>\n" + + " <Resource id=\"jdbc/users\" type=\"DataSource\">\n" + + " JtaManaged = false\n" + + " JdbcUrl = jdbc:hsqldb:mem:DataSourceRealmTest_users\n" + + " LogSql = true\n" + + " </Resource>\n" + + "</Resources>"), "resources.xml") + .addAsWebResource(new StringAsset("touched"), "index.html") + .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") + .setWebXML(new StringAsset( + Descriptors.create(WebAppDescriptor.class) + .getOrCreateSecurityConstraint() + .createWebResourceCollection() + .webResourceName("all") + .urlPattern("/*") + .up() + .getOrCreateAuthConstraint() + .roleName("arquillian") + .up() + .up() + .getOrCreateLoginConfig() + .authMethod("BASIC") + .up() + .exportAsString())); + } + + @ArquillianResource + private URL base; + + @Test(expected = IOException.class) + public void forbidden() throws IOException { + IO.slurp(base); + } + + @Test + public void allowed() throws IOException, URISyntaxException { + assertEquals("touched", ClientBuilder.newClient() + .target(base.toURI()).request(MediaType.TEXT_PLAIN) + .header("Authorization", "Basic " + printBase64Binary("test:pwd".getBytes("UTF-8"))) + .get(String.class)); + } +} http://git-wip-us.apache.org/repos/asf/tomee/blob/d995c944/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/Role.java ---------------------------------------------------------------------- diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/Role.java b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/Role.java new file mode 100644 index 0000000..08efcdf --- /dev/null +++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/Role.java @@ -0,0 +1,47 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * 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.apache.openejb.arquillian.tests.datasourcerealm; + +import javax.persistence.EmbeddedId; +import javax.persistence.Entity; +import javax.persistence.Table; + +@Entity +@Table(name = "user_roles") +public class Role { + @EmbeddedId + private RoleId id; + + public RoleId getId() { + return id; + } + + public void setId(final RoleId id) { + this.id = id; + } + + @Override + public boolean equals(final Object o) { + return this == o || !(o == null || !Role.class.isInstance(o)) && id.equals(Role.class.cast(o).id); + + } + + @Override + public int hashCode() { + return id.hashCode(); + } +} http://git-wip-us.apache.org/repos/asf/tomee/blob/d995c944/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/RoleId.java ---------------------------------------------------------------------- diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/RoleId.java b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/RoleId.java new file mode 100644 index 0000000..0a3c387 --- /dev/null +++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/RoleId.java @@ -0,0 +1,65 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * 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.apache.openejb.arquillian.tests.datasourcerealm; + +import javax.persistence.Column; +import javax.persistence.Embeddable; + +@Embeddable +public class RoleId { + @Column(name = "user_name") + private String userName; + + @Column(name = "user_role") + private String userRole; + + public String getUserName() { + return userName; + } + + public void setUserName(final String userName) { + this.userName = userName; + } + + public String getUserRole() { + return userRole; + } + + public void setUserRole(final String userRole) { + this.userRole = userRole; + } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || !RoleId.class.isInstance(o)) { + return false; + } + final RoleId roleId = RoleId.class.cast(o); + return userName.equals(roleId.userName) && userRole.equals(roleId.userRole); + + } + + @Override + public int hashCode() { + int result = userName.hashCode(); + result = 31 * result + userRole.hashCode(); + return result; + } +} http://git-wip-us.apache.org/repos/asf/tomee/blob/d995c944/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/User.java ---------------------------------------------------------------------- diff --git a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/User.java b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/User.java new file mode 100644 index 0000000..f49d8e4 --- /dev/null +++ b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/datasourcerealm/User.java @@ -0,0 +1,60 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * 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.apache.openejb.arquillian.tests.datasourcerealm; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "users") +public class User { + @Id + @Column(name = "user_name") + private String userName; + + @Column(name = "user_pass") + private String userPass; + + public String getUserName() { + return userName; + } + + public void setUserName(final String userName) { + this.userName = userName; + } + + public String getUserPass() { + return userPass; + } + + public void setUserPass(final String userPass) { + this.userPass = userPass; + } + + @Override + public boolean equals(final Object o) { + return this == o || !(o == null || !User.class.isInstance(o)) && userName.equals(User.class.cast(o).userName); + + } + + @Override + public int hashCode() { + return userName.hashCode(); + } +} http://git-wip-us.apache.org/repos/asf/tomee/blob/d995c944/arquillian/arquillian-tomee-tests/pom.xml ---------------------------------------------------------------------- diff --git a/arquillian/arquillian-tomee-tests/pom.xml b/arquillian/arquillian-tomee-tests/pom.xml index be26792..70137ae 100644 --- a/arquillian/arquillian-tomee-tests/pom.xml +++ b/arquillian/arquillian-tomee-tests/pom.xml @@ -160,6 +160,7 @@ </goals> <configuration> <skip>${maven.test.skip}</skip> + <argLine>-javaagent:${settings.localRepository}/org/apache/tomee/openejb-javaagent/${project.version}/openejb-javaagent-${project.version}.jar</argLine> <systemPropertyVariables> <tomee.version>${project.version}</tomee.version> <arquillian.launch>tomee-embedded</arquillian.launch> @@ -275,7 +276,10 @@ </goals> <configuration> <skip>${skip.embedded}</skip> - <argLine>-XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=512M</argLine> + <argLine> + -javaagent:${settings.localRepository}/org/apache/tomee/openejb-javaagent/${project.version}/openejb-javaagent-${project.version}.jar + -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=512M + </argLine> <systemPropertyVariables> <tomee.version>${project.version}</tomee.version> <arquillian.launch>tomee-embedded</arquillian.launch>