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