Jelajahi Sumber

SEC-313: Add integration test for Contacts.

Ben Alex 19 tahun lalu
induk
melakukan
508966f0c7

+ 15 - 11
.classpath

@@ -1,22 +1,27 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="samples/attributes/src/main/java"/>
+	<classpathentry kind="src" path="core/src/main/java"/>
+	<classpathentry kind="src" path="core/src/main/resources"/>
+	<classpathentry kind="src" path="core/src/test/java"/>
+	<classpathentry kind="src" path="core/src/test/resources"/>
 	<classpathentry kind="src" path="sandbox/other/src/main/java"/>
-	<classpathentry kind="src" path="samples/acegifier/src/test/resources"/>
-	<classpathentry kind="src" path="samples/acegifier/src/main/resources"/>
+	<classpathentry kind="src" path="samples/contacts/src/main/java"/>
+	<classpathentry kind="src" path="samples/contacts/src/main/resources"/>
+	<classpathentry kind="src" path="samples/contacts/src/test/java"/>
+	<classpathentry kind="src" path="samples/contacts/src/test/resources"/>
 	<classpathentry kind="src" path="samples/acegifier/src/main/java"/>
+	<classpathentry kind="src" path="samples/acegifier/src/main/resources"/>
 	<classpathentry kind="src" path="samples/acegifier/src/test/java"/>
-	<classpathentry kind="src" path="adapters/catalina/src/main/resources"/>
+	<classpathentry kind="src" path="samples/acegifier/src/test/resources"/>
+	<classpathentry kind="src" path="samples/attributes/src/main/java"/>
 	<classpathentry kind="src" path="samples/attributes/src/main/resources"/>
 	<classpathentry kind="src" path="samples/attributes/src/test/java"/>
 	<classpathentry kind="src" path="adapters/cas/src/test/resources"/>
 	<classpathentry kind="src" path="adapters/cas/src/main/resources"/>
-	<classpathentry kind="src" path="core/src/main/resources"/>
-	<classpathentry kind="src" path="core/src/test/resources"/>
-	<classpathentry kind="src" path="samples/contacts/src/main/java"/>
 	<classpathentry kind="src" path="adapters/cas/src/main/java"/>
 	<classpathentry kind="src" path="adapters/cas/src/test/java"/>
 	<classpathentry kind="src" path="adapters/catalina/src/main/java"/>
+	<classpathentry kind="src" path="adapters/catalina/src/main/resources"/>
 	<classpathentry kind="src" path="adapters/catalina/src/test/java"/>
 	<classpathentry kind="src" path="adapters/jboss/src/main/java"/>
 	<classpathentry kind="src" path="adapters/jboss/src/test/java"/>
@@ -24,8 +29,7 @@
 	<classpathentry kind="src" path="adapters/jetty/src/test/java"/>
 	<classpathentry kind="src" path="adapters/resin/src/main/java"/>
 	<classpathentry kind="src" path="adapters/resin/src/test/java"/>
-	<classpathentry kind="src" path="core/src/main/java"/>
-	<classpathentry kind="src" path="core/src/test/java"/>
+	<classpathentry kind="src" path="java"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="var" path="MAVEN_REPO/com.caucho/jars/resin-3.0.9.jar"/>
 	<classpathentry kind="var" path="MAVEN_REPO/org.springframework/jars/spring-2.0-m2.jar"/>
@@ -49,14 +53,14 @@
 	<classpathentry kind="var" path="MAVEN_REPO/javax.servlet/jars/jsp-api-2.0.jar"/>
 	<classpathentry kind="var" path="MAVEN_REPO/hibernate/jars/hibernate-3.0.3.jar"/>
 	<classpathentry sourcepath="DIST_BASE/commons-beanutils-1.6.1-src/src/java" kind="var" path="MAVEN_REPO/commons-beanutils/jars/commons-beanutils-1.6.1.jar"/>
+	<classpathentry kind="src" path="samples/contacts-tiger/src/main/java"/>
 	<classpathentry kind="src" path="core-tiger/src/main/java"/>
-	<classpathentry kind="src" path="core-tiger/src/test/java"/>
 	<classpathentry kind="src" path="core-tiger/src/main/resources"/>
+	<classpathentry kind="src" path="core-tiger/src/test/java"/>
 	<classpathentry kind="src" path="core-tiger/src/test/resources"/>
 	<classpathentry kind="src" path="samples/annotations/src/main/java"/>
 	<classpathentry kind="src" path="samples/annotations/src/main/resources"/>
 	<classpathentry kind="src" path="samples/annotations/src/test/java"/>
-	<classpathentry kind="src" path="samples/contacts-tiger/src/main/java"/>
 	<classpathentry kind="var" path="MAVEN_REPO/org.samba.jcifs/jars/jcifs-1.2.6.jar"/>
 	<classpathentry kind="var" path="MAVEN_REPO/dom4j/jars/dom4j-1.6.jar"/>
 	<classpathentry kind="var" path="MAVEN_REPO/xerces/jars/xercesImpl-2.6.2.jar"/>

+ 0 - 0
samples/contacts/src/main/webapp/common/WEB-INF/applicationContext-common-authorization.xml → samples/contacts/src/main/resources/applicationContext-common-authorization.xml


+ 0 - 0
samples/contacts/src/main/webapp/common/WEB-INF/applicationContext-common-business.xml → samples/contacts/src/main/resources/applicationContext-common-business.xml


+ 2 - 2
samples/contacts/src/main/webapp/ca/WEB-INF/web.xml

@@ -21,8 +21,8 @@
 		<param-name>contextConfigLocation</param-name>
 		<param-value>
 			/WEB-INF/applicationContext-acegi-security.xml
-			/WEB-INF/applicationContext-common-business.xml
-			/WEB-INF/applicationContext-common-authorization.xml
+			classpath:applicationContext-common-business.xml
+			classpath:applicationContext-common-authorization.xml
 		</param-value>
 	</context-param>
 	

+ 2 - 2
samples/contacts/src/main/webapp/cas/WEB-INF/web.xml

@@ -21,8 +21,8 @@
 		<param-name>contextConfigLocation</param-name>
 		<param-value>
 			/WEB-INF/applicationContext-acegi-security.xml
-			/WEB-INF/applicationContext-common-business.xml
-			/WEB-INF/applicationContext-common-authorization.xml
+			classpath:applicationContext-common-business.xml
+			classpath:applicationContext-common-authorization.xml
 		</param-value>
 	</context-param>
 	

+ 2 - 2
samples/contacts/src/main/webapp/filter/WEB-INF/web.xml

@@ -21,8 +21,8 @@
 		<param-name>contextConfigLocation</param-name>
 		<param-value>
 			/WEB-INF/applicationContext-acegi-security.xml
-			/WEB-INF/applicationContext-common-business.xml
-			/WEB-INF/applicationContext-common-authorization.xml
+			classpath:applicationContext-common-business.xml
+			classpath:applicationContext-common-authorization.xml
 		</param-value>
 	</context-param>
 	

+ 2 - 2
samples/contacts/src/main/webapp/ldap/WEB-INF/web.xml

@@ -21,8 +21,8 @@
 		<param-name>contextConfigLocation</param-name>
 		<param-value>
 			/WEB-INF/applicationContext-acegi-security.xml
-			/WEB-INF/applicationContext-common-business.xml
-			/WEB-INF/applicationContext-common-authorization.xml
+			classpath:applicationContext-common-business.xml
+			classpath:applicationContext-common-authorization.xml
 		</param-value>
 	</context-param>
 	

+ 2 - 2
samples/contacts/src/main/webapp/x509/WEB-INF/web.xml

@@ -21,8 +21,8 @@
 		<param-name>contextConfigLocation</param-name>
 		<param-value>
 			/WEB-INF/applicationContext-acegi-security.xml
-			/WEB-INF/applicationContext-common-business.xml
-			/WEB-INF/applicationContext-common-authorization.xml
+			classpath:applicationContext-common-business.xml
+			classpath:applicationContext-common-authorization.xml
 		</param-value>
 	</context-param>
 <!--	

+ 118 - 0
samples/contacts/src/test/java/sample/contact/AbstractContactsSampleTest.java

@@ -0,0 +1,118 @@
+package sample.contact;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.acegisecurity.Authentication;
+import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
+import org.acegisecurity.context.SecurityContextImpl;
+import org.acegisecurity.context.SecurityContextHolder;
+import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
+import org.springframework.test.AbstractTransactionalSpringContextTests;
+
+/**
+ * Provides simplified access to the <code>ContactManager</code> bean and
+ * convenience test support methods.
+ * 
+ * @author David Leal
+ */
+/**
+ * @author balex
+ *
+ */
+public abstract class AbstractContactsSampleTest extends AbstractTransactionalSpringContextTests {
+
+    protected ContactManager contactManager;
+
+    protected String[] getConfigLocations() {
+    	setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_NAME);
+        return new String[] { "applicationContext-common-authorization.xml",
+                "applicationContext-common-business.xml",
+                "applicationContext-contacts-test.xml" };
+    }
+
+    /**
+     * Locates the first <code>Contact</code> of the exact name specified.
+     * 
+     * <p>
+     * Uses the {@link ContactManager#getAll()} method.
+     * </p>
+     * 
+     * @param id
+     *            Identify of the contact to locate (must be an exact match)
+     * 
+     * @return the domain or <code>null</code> if not found
+     */
+    protected Contact getContact(String id) {
+        List contacts = contactManager.getAll();
+        Iterator iter = contacts.iterator();
+
+        while (iter.hasNext()) {
+            Contact contact = (Contact) iter.next();
+
+            if (contact.getId().equals(id)) {
+                return contact;
+            }
+        }
+
+        return null;
+    }
+
+    protected void assertContainsContact(String id, List contacts) {
+        Iterator iter = contacts.iterator();
+        System.out.println(contacts);
+        while (iter.hasNext()) {
+            Contact contact = (Contact) iter.next();
+
+            if (contact.getId().toString().equals(id)) {
+                return;
+            }
+        }
+
+        fail("List of contacts should have contained: " + id);
+    }
+
+    protected void assertNotContainsContact(String id, List contacts) {
+        Iterator iter = contacts.iterator();
+
+        while (iter.hasNext()) {
+            Contact domain = (Contact) iter.next();
+
+            if (domain.getId().toString().equals(id)) {
+                fail("List of contact should NOT (but did) contain: " + id);
+            }
+        }
+    }
+
+    protected void makeActiveUser(String username) {
+        String password = "";
+
+        if ("marissa".equals(username)) {
+            password = "koala";
+        } else if ("dianne".equals(username)) {
+            password = "emu";
+        } else if ("scott".equals(username)) {
+            password = "wombat";
+        } else if ("peter".equals(username)) {
+            password = "opal";
+        }
+
+        Authentication authRequest = new UsernamePasswordAuthenticationToken(
+                username, password);
+        SecurityContextImpl secureContext = new SecurityContextImpl();
+        secureContext.setAuthentication(authRequest);
+        SecurityContextHolder.setContext(secureContext);
+    }
+
+    protected void onTearDownInTransaction() {
+        destroySecureContext();
+    }
+
+    private static void destroySecureContext() {
+        SecurityContextHolder.setContext(new SecurityContextImpl());
+    }
+
+	public void setContactManager(ContactManager contactManager) {
+		this.contactManager = contactManager;
+	}
+}

+ 79 - 0
samples/contacts/src/test/java/sample/contact/GetAllContactsTests.java

@@ -0,0 +1,79 @@
+/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
+ *
+ * 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 sample.contact;
+
+import java.util.List;
+
+
+/**
+ * Tests {@link
+ * com.acegitech.dns.domain.DomainManager#findAllDomainsLike(String)}.
+ *
+ * @author David Leal
+ */
+public class GetAllContactsTests extends AbstractContactsSampleTest {
+    //~ Methods ================================================================
+
+    public void testFindAllDomainsLikeAsDianne() {
+        makeActiveUser("dianne"); // has ROLE_USER
+        
+        List contacts = contactManager.getAll();
+        assertEquals(4, contacts.size());
+        
+        assertContainsContact(Long.toString(4), contacts);
+        assertContainsContact(Long.toString(5), contacts);
+        assertContainsContact(Long.toString(6), contacts);
+        assertContainsContact(Long.toString(8), contacts);
+        
+        assertNotContainsContact(Long.toString(1), contacts);
+        assertNotContainsContact(Long.toString(2), contacts);
+        assertNotContainsContact(Long.toString(3), contacts);
+        
+    }
+
+    public void testFindAllDomainsLikeAsMarissa() {
+        makeActiveUser("marissa"); // has ROLE_SUPERVISOR
+        
+        List contacts = contactManager.getAll();        
+        
+        assertEquals(4, contacts.size());
+        
+        assertContainsContact(Long.toString(1), contacts);
+        assertContainsContact(Long.toString(2), contacts);
+        assertContainsContact(Long.toString(3), contacts);
+        assertContainsContact(Long.toString(4), contacts);
+        
+        assertNotContainsContact(Long.toString(5), contacts);       
+              
+    }
+
+    public void testFindAllDomainsLikeAsScott() {
+        makeActiveUser("scott"); // has ROLE_USER
+        
+        List contacts = contactManager.getAll();
+        
+        assertEquals(5, contacts.size());        
+        
+        assertContainsContact(Long.toString(4), contacts);
+        assertContainsContact(Long.toString(6), contacts);
+        assertContainsContact(Long.toString(7), contacts);
+        assertContainsContact(Long.toString(8), contacts);
+        assertContainsContact(Long.toString(9), contacts);
+        
+        assertNotContainsContact(Long.toString(1), contacts);        
+                       
+    }
+}

+ 38 - 0
samples/contacts/src/test/resources/applicationContext-contacts-test.xml

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
+
+<!--
+  - Application context containing authentication beans.
+  -
+  - Only used by unit tests.
+  -
+  - $Id$
+  -->
+
+<beans>
+
+   <!-- ======================== AUTHENTICATION ======================= -->
+
+   <bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">
+      <property name="providers">
+         <list>
+            <ref local="daoAuthenticationProvider"/>
+         </list>
+      </property>
+   </bean>
+   
+   <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
+      <property name="userDetailsService"><ref local="jdbcDaoImpl"/></property>
+      <property name="passwordEncoder"><ref local="passwordEncoder"/></property>
+   </bean>   
+
+   <bean id="jdbcDaoImpl" class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">
+      <property name="dataSource"><ref bean="dataSource"/></property>
+   </bean>
+
+   <bean id="passwordEncoder" class="org.acegisecurity.providers.encoding.Md5PasswordEncoder"/>
+
+   <!-- Automatically receives AuthenticationEvent messages -->
+   <bean id="loggerListener" class="org.acegisecurity.event.authentication.LoggerListener"/>
+
+</beans>