Author: [email protected]
Date: Thu Apr 14 15:37:23 2011
New Revision: 969

Log:
[AMDATUCASSANDRA-7] Moved all cassandra tests to cassandra subproject

Added:
   
trunk/amdatu-cassandra/test-integration/src/test/java/org/amdatu/cassandra/test/integration/base/UserAdminStoreTestBase.java
   
trunk/amdatu-cassandra/test-integration/src/test/java/org/amdatu/cassandra/test/integration/tests/UserAdminCassandraStoreTest.java
Removed:
   
trunk/integration-tests/test-platform/src/test/java/org/amdatu/test/integration/tests/CassandraDaemonIntegrationTest.java
   
trunk/integration-tests/test-platform/src/test/java/org/amdatu/test/integration/tests/CassandraPersistenceManagerTest.java
   
trunk/integration-tests/test-platform/src/test/java/org/amdatu/test/integration/tests/UserAdminCassandraStoreTest.java
Modified:
   trunk/amdatu-cassandra/test-integration/pom.xml
   
trunk/amdatu-cassandra/test-integration/src/test/java/org/amdatu/cassandra/test/integration/base/ConfigProvider.java
   
trunk/amdatu-cassandra/test-integration/src/test/java/org/amdatu/cassandra/test/integration/base/IntegrationTestBase.java

Modified: trunk/amdatu-cassandra/test-integration/pom.xml
==============================================================================
--- trunk/amdatu-cassandra/test-integration/pom.xml     (original)
+++ trunk/amdatu-cassandra/test-integration/pom.xml     Thu Apr 14 15:37:23 2011
@@ -21,6 +21,8 @@
     <org.apache.felix.log.version>1.0.0</org.apache.felix.log.version>
     <pax.swissbox.version>1.3.0</pax.swissbox.version>
     <org.apache.felix.main.version>3.0.2</org.apache.felix.main.version>
+    
<org.apache.sling.commons.mime.version>2.1.4</org.apache.sling.commons.mime.version>
+    
<org.apache.sling.commons.osgi.version>2.0.6</org.apache.sling.commons.osgi.version>
   </properties>
 
   <dependencies>
@@ -55,6 +57,21 @@
       <scope>test</scope>
     </dependency>
     <dependency>
+      <groupId>org.amdatu.web.rest</groupId>
+      <artifactId>jaxrs</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+      <type>bundle</type>
+    </dependency>
+    <dependency>
+      <groupId>org.amdatu.web</groupId>
+      <artifactId>httpcontext</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+      <type>bundle</type>
+    </dependency>
+
+    <dependency>
       <groupId>org.amdatu.core.config</groupId>
       <artifactId>templates</artifactId>
       <version>${project.version}</version>
@@ -69,6 +86,27 @@
       <type>bundle</type>
     </dependency>
     <dependency>
+      <groupId>org.amdatu.core</groupId>
+      <artifactId>tenant</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+      <type>bundle</type>
+    </dependency>
+    <dependency>
+      <groupId>org.amdatu.core</groupId>
+      <artifactId>tenantuseradmindecorator</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+      <type>bundle</type>
+    </dependency>
+    <dependency>
+      <groupId>org.amdatu.core</groupId>
+      <artifactId>tenantstore-fs</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+      <type>bundle</type>
+    </dependency>
+    <dependency>
       <groupId>org.amdatu.cassandra</groupId>
       <artifactId>application</artifactId>
       <version>${project.version}</version>
@@ -117,7 +155,18 @@
       <scope>test</scope>
       <type>bundle</type>
     </dependency>
-
+    <dependency>
+      <groupId>org.apache.sling</groupId>
+      <artifactId>org.apache.sling.commons.mime</artifactId>
+      <version>${org.apache.sling.commons.mime.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.sling</groupId>
+      <artifactId>org.apache.sling.commons.osgi</artifactId>
+      <version>${org.apache.sling.commons.osgi.version}</version>
+      <scope>test</scope>
+    </dependency>
     <dependency>
       <groupId>org.apache.felix</groupId>
       <artifactId>org.apache.felix.eventadmin</artifactId>

Modified: 
trunk/amdatu-cassandra/test-integration/src/test/java/org/amdatu/cassandra/test/integration/base/ConfigProvider.java
==============================================================================
--- 
trunk/amdatu-cassandra/test-integration/src/test/java/org/amdatu/cassandra/test/integration/base/ConfigProvider.java
        (original)
+++ 
trunk/amdatu-cassandra/test-integration/src/test/java/org/amdatu/cassandra/test/integration/base/ConfigProvider.java
        Thu Apr 14 15:37:23 2011
@@ -23,6 +23,8 @@
 
 import org.amdatu.cassandra.application.CassandraConfigurationService;
 import org.amdatu.core.config.templates.ConfigTemplateManager;
+import org.amdatu.core.tenant.TenantManagementService;
+import org.amdatu.core.tenant.TenantStorageProvider;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 
@@ -39,6 +41,15 @@
         config.update(properties);
     }
     
+    public void addTenantConfig(ConfigurationAdmin configAdmin) throws 
IOException {
+        Configuration config = 
configAdmin.getConfiguration(TenantManagementService.PID, null);
+        Properties properties = new Properties();
+        properties.put("tenant1.id", "Default");
+        properties.put("tenant1.name", "Default tenant");
+        properties.put("tenant1.properties.hostname", "localhost");
+        config.update(properties);
+    }
+    
     public void addCassandraConfig(ConfigurationAdmin configAdmin) throws 
IOException {
         Configuration config = 
configAdmin.getConfiguration(CassandraConfigurationService.PID, null);
         Properties properties = new Properties();
@@ -70,6 +81,13 @@
         config.update(properties);
     }
 
+    public void addFSTenantStoreConfig(ConfigurationAdmin configAdmin) throws 
IOException {
+        Configuration config = 
configAdmin.getConfiguration(TenantStorageProvider.CONFIGURATION_PID, null);
+        Properties properties = new Properties();
+        properties.put(TenantStorageProvider.DATA_DIRECTORY, 
"work/tenantstore");
+        config.update(properties);
+    }
+    
     /**
      * Wait until the service at the specified URL returns the specified 
response code with a timeout as specified.
      * 

Modified: 
trunk/amdatu-cassandra/test-integration/src/test/java/org/amdatu/cassandra/test/integration/base/IntegrationTestBase.java
==============================================================================
--- 
trunk/amdatu-cassandra/test-integration/src/test/java/org/amdatu/cassandra/test/integration/base/IntegrationTestBase.java
   (original)
+++ 
trunk/amdatu-cassandra/test-integration/src/test/java/org/amdatu/cassandra/test/integration/base/IntegrationTestBase.java
   Thu Apr 14 15:37:23 2011
@@ -324,7 +324,37 @@
     protected static MavenArtifactProvisionOption amdatuLogHandler() {
         return 
mavenBundle().groupId("org.amdatu.core").artifactId("loghandler").version("0.2.0-SNAPSHOT");
     }
+    
+    protected static MavenArtifactProvisionOption amdatuTenantService() {
+        return 
mavenBundle().groupId("org.amdatu.core").artifactId("tenant").versionAsInProject();
+    }
+
+    protected static MavenArtifactProvisionOption 
amdatuTenantUserAdminDecoratorService() {
+        return 
mavenBundle().groupId("org.amdatu.core").artifactId("tenantuseradmindecorator").versionAsInProject();
+    }
+
+    protected static MavenArtifactProvisionOption amdatuTenantStoreFSService() 
{
+        return 
mavenBundle().groupId("org.amdatu.core").artifactId("tenantstore-fs").versionAsInProject();
+    }
+    
+    protected static MavenArtifactProvisionOption amdatuHttpContext() {
+        return 
mavenBundle().groupId("org.amdatu.web").artifactId("httpcontext").versionAsInProject();
+    }
 
+    protected static MavenArtifactProvisionOption amdatuJaxRs() {
+        return 
mavenBundle().groupId("org.amdatu.web.rest").artifactId("jaxrs").versionAsInProject();
+    }
+    
+    protected static MavenArtifactProvisionOption slingCommons() {
+        return 
mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.osgi")
+        .versionAsInProject();
+    }
+
+    protected static MavenArtifactProvisionOption slingMime() {
+        return 
mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.mime")
+        .versionAsInProject();
+    }
+    
     protected static MavenArtifactProvisionOption paxUserAdmin() {
         return 
mavenBundle().groupId("org.ops4j.pax.useradmin").artifactId("pax-useradmin-service").versionAsInProject();
     }

Added: 
trunk/amdatu-cassandra/test-integration/src/test/java/org/amdatu/cassandra/test/integration/base/UserAdminStoreTestBase.java
==============================================================================
--- (empty file)
+++ 
trunk/amdatu-cassandra/test-integration/src/test/java/org/amdatu/cassandra/test/integration/base/UserAdminStoreTestBase.java
        Thu Apr 14 15:37:23 2011
@@ -0,0 +1,219 @@
+package org.amdatu.cassandra.test.integration.base;
+
+import junit.framework.Assert;
+
+import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
+import org.junit.Test;
+import org.ops4j.pax.exam.Inject;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.useradmin.Group;
+import org.osgi.service.useradmin.Role;
+import org.osgi.service.useradmin.User;
+import org.osgi.service.useradmin.UserAdmin;
+
+public abstract class UserAdminStoreTestBase extends IntegrationTestBase {
+    //Amount of milliseconds to wait between WRITE and READ operations 
concerning the same row and same column.
+    // See AMDATU-137.
+    private static int WAIT = 20;
+
+    private final static String ADMIN_USER = "TestAdministrator";
+    private final static String EDITOR_USER = "TestEditor";
+    private final static String GUEST_USER = "TestGuest";
+
+    private final static String ADMIN_GROUP = "TestAdminUsers";
+    private final static String EDITOR_GROUP = "TestEditUsers";
+    private final static String GUEST_GROUP = "TestGuestUsers";
+
+    @Inject
+    protected volatile ConfigurationAdmin m_configAdmin;
+    protected volatile UserAdmin m_userAdmin;
+
+    @Configuration
+    public Option[] configure() {
+        return super.configure();
+    }
+
+    public Component[] getDependencies(DependencyManager manager) {
+        return new Component[] {
+            manager.createComponent().setImplementation(this)
+            
.add(manager.createServiceDependency().setService(ConfigurationAdmin.class).setRequired(true))
+            .add(manager.createServiceDependency().setService(UserAdmin.class))
+        };
+    }
+
+    private void sleep() throws InterruptedException {
+        // Wait for 100 milliseconds, remember that Cassandra write operations 
are asynchronously
+        Thread.sleep(WAIT);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void testAdminStore() throws Exception {
+        // Start the test, first remove all existing roles
+        Role[] allRoles = m_userAdmin.getRoles(null);
+        if (allRoles != null) {
+            for (Role role : allRoles) {
+                String roleName = role.getName();
+                m_userAdmin.removeRole(roleName);
+                sleep();
+                Assert.assertTrue("Role '" + roleName + "' removed but still 
returned", m_userAdmin
+                    .getRole(roleName) == null);
+            }
+        }
+
+        // Test if all roles have been removed
+        Assert.assertTrue("All roles were removed, but getRoles() still 
returns roles",
+            m_userAdmin.getRoles(null) == null
+            || m_userAdmin.getRoles(null).length == 0);
+
+        // Create three test users and set the credentials
+        User adminUser = (User) m_userAdmin.createRole(ADMIN_USER, Role.USER);
+        User editorUser = (User) m_userAdmin.createRole(EDITOR_USER, 
Role.USER);
+        User guestUser = (User) m_userAdmin.createRole(GUEST_USER, Role.USER);
+
+        Assert.assertTrue("All users were removed, but still creating a user 
failed since it already exists",
+            adminUser != null && editorUser != null && guestUser != null);
+        adminUser.getCredentials().put("password", "adminpasswd");
+        editorUser.getCredentials().put("password", "editorpasswd");
+        guestUser.getCredentials().put("password", "guestpasswd");
+
+        // Now see if we can find these users from credentials
+        sleep();
+        Assert.assertTrue("TestAdmin user could not be found", 
m_userAdmin.getRole(ADMIN_USER) != null);
+        Assert.assertTrue("TestEditor user could not be found", 
m_userAdmin.getRole(EDITOR_USER) != null);
+        Assert.assertTrue("TestGuest user could not be found", 
m_userAdmin.getRole(GUEST_USER) != null);
+        
+        Assert.assertTrue("TestAdmin user could be retrieved by undefined 
'name' property", m_userAdmin.getUser("name", ADMIN_USER) == null);
+        Assert.assertTrue("TestEditor user could be retrieved by undefined 
'name' property", m_userAdmin.getUser("name", EDITOR_USER) == null);
+        Assert.assertTrue("TestGuest user could be retrieved by undefined 
'name' property", m_userAdmin.getUser("name", GUEST_USER) == null);
+        
+        // Set user properties of admin
+        adminUser.getProperties().put("firstName", "John".getBytes());
+        adminUser.getProperties().put("lastName", "Doe".getBytes());
+
+        // And check if they were set correctly
+        sleep();
+        byte[] firstName = (byte[]) 
m_userAdmin.getRole(ADMIN_USER).getProperties().get("firstName");
+        Assert.assertTrue("firstName not properly set", new String(firstName, 
"UTF-8").equals("John"));
+        byte[] lastName = (byte[]) 
m_userAdmin.getRole(ADMIN_USER).getProperties().get("lastName");
+        Assert.assertTrue("lastName not properly set", new String(lastName, 
"UTF-8").equals("Doe"));
+
+        // Remove last name
+        adminUser.getProperties().remove("lastName");
+        sleep();
+        Assert.assertTrue("lastName not properly removed from property set",
+            m_userAdmin.getRole(ADMIN_USER).getProperties().get("lastName") == 
null);
+
+        // Now create "Administrator", "Editor" and "Guest" group and do some 
assignments
+        Group adminGroup = (Group) m_userAdmin.createRole(ADMIN_GROUP, 
Role.GROUP);
+        Group editorGroup = (Group) m_userAdmin.createRole(EDITOR_GROUP, 
Role.GROUP);
+        Group guestGroup = (Group) m_userAdmin.createRole(GUEST_GROUP, 
Role.GROUP);
+        adminGroup.addMember(adminUser);
+        adminGroup.addRequiredMember(adminUser);
+
+        // Excessive test of TestEditUsers group since this failed before
+        sleep();
+        assertBasicMemberCount(EDITOR_GROUP, 0);
+        assertRequiredMemberCount(EDITOR_GROUP, 0);
+        editorGroup.addMember(adminUser);
+        sleep();
+        assertBasicMemberCount(EDITOR_GROUP, 1);
+        assertRequiredMemberCount(EDITOR_GROUP, 0);
+        editorGroup.addMember(editorUser);
+        sleep();
+        assertBasicMemberCount(EDITOR_GROUP, 2);
+        assertRequiredMemberCount(EDITOR_GROUP, 0);
+        editorGroup.addRequiredMember(adminUser);
+        sleep();
+        assertBasicMemberCount(EDITOR_GROUP, 2);
+        assertRequiredMemberCount(EDITOR_GROUP, 1);
+        editorGroup.addRequiredMember(editorUser);
+        sleep();
+        assertBasicMemberCount(EDITOR_GROUP, 2);
+        assertRequiredMemberCount(EDITOR_GROUP, 2);
+
+        guestGroup.addMember(adminUser);
+        sleep();
+        guestGroup.addMember(editorUser);
+        sleep();
+        guestGroup.addMember(guestUser);
+        sleep();
+
+        assertBasicMemberCount(ADMIN_GROUP, 1);
+        assertRequiredMemberCount(ADMIN_GROUP, 1);
+        assertBasicMemberCount(EDITOR_GROUP, 2);
+        assertRequiredMemberCount(EDITOR_GROUP, 2);
+        assertBasicMemberCount(GUEST_GROUP, 3);
+        assertRequiredMemberCount(GUEST_GROUP, 0);
+
+        // Now remove some members
+        guestGroup.removeMember(adminUser);
+        sleep();
+        assertBasicMemberCount(GUEST_GROUP, 2);
+
+        // Remove the editor user, is it removed from the admin group?
+        m_userAdmin.removeRole(EDITOR_USER);
+        sleep();
+        assertBasicMemberCount(EDITOR_GROUP, 1);
+        assertRequiredMemberCount(EDITOR_GROUP, 1);
+        Assert.assertTrue("TestEditor should have been removed", 
m_userAdmin.getRole(EDITOR_USER) == null);
+
+        // Now remove a user and verify that it is also removed as member of 
all groups it was member of
+        m_userAdmin.removeRole(ADMIN_USER);
+        assertBasicMemberCount(ADMIN_GROUP, 0);
+        assertRequiredMemberCount(ADMIN_GROUP, 0);
+        assertBasicMemberCount(GUEST_GROUP, 1);
+
+        m_userAdmin.removeRole(GUEST_USER);
+        assertBasicMemberCount(GUEST_GROUP, 0);
+
+        // Finally, remove all test users and groups
+        allRoles = m_userAdmin.getRoles(null);
+        if (allRoles != null) {
+            for (Role role : allRoles) {
+                String roleName = role.getName();
+                m_userAdmin.removeRole(roleName);
+                sleep();
+                Assert.assertTrue("Role '" + roleName + "' removed but still 
returned", m_userAdmin
+                    .getRole(roleName) == null);
+            }
+        }
+    }
+
+    private void assertBasicMemberCount(String group, int expected) {
+        Assert.assertTrue("Group '" + group + "' is unknown by UserAdmin", 
m_userAdmin.getRole(group) != null);
+        int count =
+            ((Group) m_userAdmin.getRole(group)).getMembers() != null ? 
((Group) m_userAdmin.getRole(group))
+                .getMembers().length : 0;
+                if (count != expected) {
+                    Role[] members = ((Group) 
m_userAdmin.getRole(group)).getMembers();
+                    String sMembers = toString(members);
+                    Assert.assertTrue("Group '" + group + "' has " + count + " 
basic members. Expected: " + expected
+                        + ". Members found: " + sMembers, false);
+                }
+    }
+
+    private void assertRequiredMemberCount(String group, int expected) {
+        Assert.assertTrue("Group '" + group + "' is unknown by UserAdmin", 
m_userAdmin.getRole(group) != null);
+        int count =
+            ((Group) m_userAdmin.getRole(group)).getRequiredMembers() != null 
? ((Group) m_userAdmin.getRole(group))
+                .getRequiredMembers().length : 0;
+                if (count != expected) {
+                    Role[] members = ((Group) 
m_userAdmin.getRole(group)).getRequiredMembers();
+                    String sMembers = toString(members);
+                    Assert.assertTrue("Group '" + group + "' has " + count + " 
required members. Expected: " + expected
+                        + ". Members found: " + sMembers, false);
+                }
+    }
+
+    private String toString(Role[] members) {
+        String sMembers = "";
+        for (Role role : members) {
+            sMembers += role.getName() + " ";
+        }
+        return sMembers;
+    }
+}

Added: 
trunk/amdatu-cassandra/test-integration/src/test/java/org/amdatu/cassandra/test/integration/tests/UserAdminCassandraStoreTest.java
==============================================================================
--- (empty file)
+++ 
trunk/amdatu-cassandra/test-integration/src/test/java/org/amdatu/cassandra/test/integration/tests/UserAdminCassandraStoreTest.java
  Thu Apr 14 15:37:23 2011
@@ -0,0 +1,68 @@
+/*
+    Copyright (C) 2010 Amdatu.org
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program 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 General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.amdatu.cassandra.test.integration.tests;
+
+import static org.ops4j.pax.exam.CoreOptions.provision;
+
+import java.io.IOException;
+
+import org.amdatu.cassandra.test.integration.base.ConfigProvider;
+import org.amdatu.cassandra.test.integration.base.UserAdminStoreTestBase;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.useradmin.UserAdmin;
+
+/**
+ * This class provides an integration test for testing the User Admin 
Cassandra store.
+ * 
+ * @author ivol
+ */
+@RunWith(JUnit4TestRunner.class)
+public class UserAdminCassandraStoreTest extends UserAdminStoreTestBase {
+    protected void initConfiguration() throws IOException {
+        m_configAdmin = getService(ConfigurationAdmin.class);
+
+        // Add cassandra and templates configs
+        ConfigProvider configProvider = new ConfigProvider();
+        configProvider.addTenantConfig(m_configAdmin);
+        configProvider.addFSTenantStoreConfig(m_configAdmin);
+        configProvider.addCassandraConfig(m_configAdmin);
+        configProvider.addTemplateConfig(m_configAdmin);
+
+        m_userAdmin = getService(UserAdmin.class);
+    }
+
+    protected Option provisionBundles() {
+        return provision(
+            amdatuTenantService(),
+            amdatuTenantStoreFSService(),
+            amdatuTenantUserAdminDecoratorService(),
+            javaxServlet(), // Required if the httpservice is not deployed
+            amdatuConfigTemplateManager(), // Required for placeholders in 
cassandra.yaml
+            amdatuHttpContext(), // needed by cassandra useradmin store
+            amdatuJaxRs(), // needed by cassandra useradmin store
+            amdatuCassandraApplication(),
+            amdatuCassandraListener(),
+            amdatuCassandraPersistenceManager(),
+            slingCommons(),
+            slingMime(),
+            paxUserAdmin(),
+            amdatuUserAdminCassandraStore());
+    }
+}
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits

Reply via email to