diff --git a/ccm-core/pom.xml b/ccm-core/pom.xml index 6b2cc7ed4..4a301c7ea 100644 --- a/ccm-core/pom.xml +++ b/ccm-core/pom.xml @@ -8,7 +8,6 @@ UTF-8 - @@ -114,7 +113,6 @@ org.libreccm ccm-testutils ${project.parent.version} - test @@ -247,7 +245,7 @@ - + de.jpdigital @@ -284,7 +282,7 @@ - + @@ -1002,7 +999,6 @@ - @@ -1086,7 +1082,6 @@ - diff --git a/ccm-core/src/main/java/org/libreccm/core/modules/CcmModuleContextListener.java b/ccm-core/src/main/java/org/libreccm/core/modules/CcmModuleContextListener.java new file mode 100644 index 000000000..92f6c09d3 --- /dev/null +++ b/ccm-core/src/main/java/org/libreccm/core/modules/CcmModuleContextListener.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2015 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.libreccm.core.modules; + +import javax.inject.Inject; +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; +import javax.servlet.annotation.WebListener; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.libreccm.core.modules.ModuleManager; + +/** + * + * @author Jens Pelzetter + */ +@WebListener +public class CcmModuleContextListener implements ServletContextListener { + + private static final Logger LOGGER = LogManager.getLogger( + CcmModuleContextListener.class); + + @Inject + private transient ModuleManager moduleManager; + + @Override + public void contextInitialized(final ServletContextEvent event) { + LOGGER.info("ServletContext initalised. Initalising modules..."); + moduleManager.initModules(); + } + + @Override + public void contextDestroyed(final ServletContextEvent event) { + LOGGER.info("ServletContext destroyed. Shutting modules down..."); + moduleManager.shutdownModules(); + } + +} diff --git a/ccm-core/src/main/java/org/libreccm/messaging/Attachment.java b/ccm-core/src/main/java/org/libreccm/messaging/Attachment.java index 10933f807..cc4d87bb0 100644 --- a/ccm-core/src/main/java/org/libreccm/messaging/Attachment.java +++ b/ccm-core/src/main/java/org/libreccm/messaging/Attachment.java @@ -47,7 +47,7 @@ public class Attachment implements Serializable { private static final long serialVersionUID = 2063934721452863106L; @Id - @Column(name = "message_id") + @Column(name = "attachment_id") @GeneratedValue(strategy = GenerationType.AUTO) private long attachmentId; diff --git a/ccm-core/src/main/resources/db/migrations/org/libreccm/core/CcmCore/pgsql/V1_0_0_0_create_tables.sql b/ccm-core/src/main/resources/db/migrations/org/libreccm/core/CcmCore/pgsql/V1_0_0_0_create_tables.sql index 6ee82064e..c5209705b 100644 --- a/ccm-core/src/main/resources/db/migrations/org/libreccm/core/CcmCore/pgsql/V1_0_0_0_create_tables.sql +++ b/ccm-core/src/main/resources/db/migrations/org/libreccm/core/CcmCore/pgsql/V1_0_0_0_create_tables.sql @@ -16,7 +16,7 @@ ); create table ccm_core.attachments ( - message_id int8 not null, + attachment_id int8 not null, attachment_data oid, description varchar(255), mime_type varchar(255), @@ -632,7 +632,7 @@ alter table ccm_core.attachments add constraint FK_r3hibvgfo1dmawqig8c563xau - foreign key (message_id) + foreign key (attachment_id) references ccm_core.messages; alter table ccm_core.categories diff --git a/ccm-core/src/main/resources/index.jsp b/ccm-core/src/main/resources/index.jsp new file mode 100644 index 000000000..c38169bb9 --- /dev/null +++ b/ccm-core/src/main/resources/index.jsp @@ -0,0 +1,5 @@ + + +

Hello World!

+ + diff --git a/ccm-core/src/test/java/org/libreccm/core/modules/CcmModulesTest.java b/ccm-core/src/test/java/org/libreccm/core/modules/CcmModulesTest.java index 545d71ace..10ea98e0a 100644 --- a/ccm-core/src/test/java/org/libreccm/core/modules/CcmModulesTest.java +++ b/ccm-core/src/test/java/org/libreccm/core/modules/CcmModulesTest.java @@ -51,6 +51,7 @@ import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.sql.DataSource; +import org.jboss.arquillian.persistence.CreateSchema; import static org.junit.Assert.*; @@ -58,10 +59,11 @@ import static org.junit.Assert.*; * * @author Jens Pelzetter */ -@Category(IntegrationTest.class) +//@Category(IntegrationTest.class) @RunWith(Arquillian.class) @PersistenceTest @Transactional(TransactionMode.COMMIT) +@CreateSchema({"clearup_schema.sql"}) public class CcmModulesTest { @PersistenceContext(name = "LibreCCM") @@ -89,10 +91,10 @@ public class CcmModulesTest { @Deployment public static WebArchive createDeployment() { final PomEquippedResolveStage pom = Maven - .resolver() - .loadPomFromFile("pom.xml"); + .resolver() + .loadPomFromFile("pom.xml"); final PomEquippedResolveStage dependencies = pom - .importCompileAndRuntimeDependencies(); + .importCompileAndRuntimeDependencies(); final File[] libs = dependencies.resolve().withTransitivity().asFile(); for (File lib : libs) { @@ -101,40 +103,60 @@ public class CcmModulesTest { } return ShrinkWrap - .create(WebArchive.class, - "LibreCCM-org.libreccm.core.modules.CcmModulesTest.war") - .addPackage(CcmCore.class.getPackage()) - .addPackage(CcmModule.class.getPackage()) - .addPackage(org.libreccm.web.Application.class.getPackage()) - .addPackage(org.libreccm.categorization.Category.class. - getPackage()) - .addPackage(org.libreccm.l10n.LocalizedString.class.getPackage()). - addPackage(org.libreccm.jpa.EntityManagerProducer.class - .getPackage()) - .addPackage(org.libreccm.jpa.utils.MimeTypeConverter.class - .getPackage()) - .addPackage(org.libreccm.testutils.EqualsVerifier.class. - getPackage()) - .addPackage(org.libreccm.tests.categories.IntegrationTest.class - .getPackage()) - .addAsLibraries(libs) - .addAsResource("test-persistence.xml", - "META-INF/persistence.xml") - .addAsWebInfResource("test-web.xml", "WEB-INF/web.xml") - .addAsWebInfResource(EmptyAsset.INSTANCE, "WEB-INF/beans.xml") - .addAsManifestResource( - "META-INF/services/org.hibernate.integrator.spi.Integrator") - .addAsManifestResource( - "META-INF/services/org.libreccm.core.modules.CcmModule") - .addAsResource("module-info/org.libreccm.core.CcmCore.properties") - .addAsResource("ccm-core.config"); + .create(WebArchive.class, + "LibreCCM-org.libreccm.core.modules.CcmModulesTest.war") + .addPackage(org.libreccm.auditing.CcmRevision.class.getPackage()). + addPackage(org.libreccm.categorization.Category.class. + getPackage()) + .addPackage(org.libreccm.cdi.utils.CdiUtil.class.getPackage()) + .addPackage(org.libreccm.core.CcmCore.class.getPackage()) + .addPackage(org.libreccm.core.authentication.LoginManager.class. + getPackage()) + .addPackage(org.libreccm.core.modules.CcmModule.class. + getPackage()) + .addPackage(org.libreccm.formbuilder.Component.class. + getPackage()) + .addPackage( + org.libreccm.formbuilder.actions.ConfirmEmailListener.class. + getPackage()) + .addPackage(org.libreccm.jpa.EntityManagerProducer.class. + getPackage()) + .addPackage(org.libreccm.jpa.utils.MimeTypeConverter.class + .getPackage()) + .addPackage(org.libreccm.l10n.LocalizedString.class.getPackage()). + addPackage(org.libreccm.messaging.Message.class.getPackage()) + .addPackage(org.libreccm.notification.Notification.class. + getPackage()) + .addPackage(org.libreccm.portal.Portal.class.getPackage()) + .addPackage(org.libreccm.runtime.Initalizer.class.getPackage()) + .addPackage(org.libreccm.search.lucene.Document.class. + getPackage()) + .addPackage(org.libreccm.web.Application.class.getPackage()) + .addPackage(org.libreccm.workflow.Workflow.class.getPackage()) + .addPackage(org.libreccm.testutils.EqualsVerifier.class. + getPackage()) + .addPackage(org.libreccm.tests.categories.IntegrationTest.class + .getPackage()) + .addAsLibraries(libs) + .addAsResource("test-persistence.xml", + "META-INF/persistence.xml") + .addAsWebInfResource("test-web.xml", "web.xml") + .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") + .addAsResource( + "META-INF/services/org.hibernate.integrator.spi.Integrator"). + addAsResource( + "META-INF/services/org.libreccm.core.modules.CcmModule") + .addAsResource( + "module-info/org.libreccm.core.CcmCore.properties") + .addAsResource("db") + .addAsResource("ccm-core.config"); } @Test public void verifyModules() throws SQLException { final Object dataSourceObj = entityManager.getEntityManagerFactory() - .getProperties().get("javax.persistence.jtaDataSource"); + .getProperties().get("javax.persistence.jtaDataSource"); assertThat(dataSourceObj, is(instanceOf(DataSource.class))); @@ -144,33 +166,34 @@ public class CcmModulesTest { assertThat(connection, is(instanceOf(Connection.class))); final ResultSet ccmObjectTable = connection.getMetaData() - .getTables(null, "ccm_core", "ccm_objects", null); + .getTables(null, "ccm_core", "ccm_objects", null); if (!ccmObjectTable.next()) { fail("No metadata for table ccm_core.ccm_objects returned. " - + "Table does exist?"); + + "Table does not exist?"); } final ResultSet installedModulesTable = connection.getMetaData() - .getTables(null, "ccm_core", "installed_modules", null); + .getTables(null, "ccm_core", "installed_modules", null); if (!installedModulesTable.next()) { fail("No metadata for table ccm_core.installed_modules returned. " - + "Table does not exist?"); + + "Table does not exist?"); } final Statement statement = connection.createStatement(); final ResultSet installedModules = statement.executeQuery( - "SELECT module_id, module_class_name, status " - + "FROM ccm_core.installed_modules" - + " ORDER BY module_class_name"); + "SELECT module_id, module_class_name, status " + + "FROM ccm_core.installed_modules" + + " ORDER BY module_class_name"); final List modulesList = new ArrayList<>(); while (installedModules.next()) { createInstalledModuleListEntry(installedModules, modulesList); } - + assertThat(modulesList.size(), is(1)); - - assertThat(modulesList.get(0)[0], - is(equalTo(Integer.toString(CcmCore.class.getName().hashCode())))); + + assertThat(modulesList.get(0)[0], + is(equalTo(Integer.toString(CcmCore.class.getName(). + hashCode())))); assertThat(modulesList.get(0)[1], is(equalTo(CcmCore.class.getName()))); assertThat(modulesList.get(0)[2], @@ -179,14 +202,14 @@ public class CcmModulesTest { } private void createInstalledModuleListEntry( - final ResultSet resultSet, final List modulesList) - throws SQLException { + final ResultSet resultSet, final List modulesList) + throws SQLException { final String[] moduleData = new String[3]; moduleData[0] = Integer.toString(resultSet.getInt("module_id")); moduleData[1] = resultSet.getString("module_class_name"); moduleData[2] = resultSet.getString("status"); - + modulesList.add(moduleData); } diff --git a/ccm-core/src/test/resources-wildfly8-remote-h2-mem/scripts/create_ccm_core_schema.sql b/ccm-core/src/test/resources-wildfly8-remote-h2-mem/scripts/create_ccm_core_schema.sql index f2f805118..5274c4fe1 100644 --- a/ccm-core/src/test/resources-wildfly8-remote-h2-mem/scripts/create_ccm_core_schema.sql +++ b/ccm-core/src/test/resources-wildfly8-remote-h2-mem/scripts/create_ccm_core_schema.sql @@ -19,7 +19,7 @@ CREATE SCHEMA ccm_core; ); create table ccm_core.attachments ( - message_id bigint not null, + attachment_id bigint not null, attachment_data blob, description varchar(255), mime_type varchar(255), @@ -635,7 +635,7 @@ CREATE SCHEMA ccm_core; alter table ccm_core.attachments add constraint FK_r3hibvgfo1dmawqig8c563xau - foreign key (message_id) + foreign key (attachment_id) references ccm_core.messages; alter table ccm_core.categories diff --git a/ccm-core/src/test/resources-wildfly8-remote-pgsql/scripts/clearup_schema.sql b/ccm-core/src/test/resources-wildfly8-remote-pgsql/scripts/clearup_schema.sql new file mode 100644 index 000000000..08ee8967d --- /dev/null +++ b/ccm-core/src/test/resources-wildfly8-remote-pgsql/scripts/clearup_schema.sql @@ -0,0 +1,6 @@ +-- Used by the org.libreccm.core.modules.CcmModulesTest to clean up the +-- schema before the test + +DROP SCHEMA IF EXISTS ccm_core; + +DROP SEQUENCE IF EXISTS hibernate_sequence; \ No newline at end of file diff --git a/ccm-core/src/test/resources-wildfly8-remote-pgsql/scripts/create_ccm_core_schema.sql b/ccm-core/src/test/resources-wildfly8-remote-pgsql/scripts/create_ccm_core_schema.sql index ace8071e1..fd0f86d37 100644 --- a/ccm-core/src/test/resources-wildfly8-remote-pgsql/scripts/create_ccm_core_schema.sql +++ b/ccm-core/src/test/resources-wildfly8-remote-pgsql/scripts/create_ccm_core_schema.sql @@ -19,7 +19,7 @@ CREATE SCHEMA ccm_core; ); create table ccm_core.attachments ( - message_id int8 not null, + attachment_id int8 not null, attachment_data oid, description varchar(255), mime_type varchar(255), @@ -635,7 +635,7 @@ CREATE SCHEMA ccm_core; alter table ccm_core.attachments add constraint FK_r3hibvgfo1dmawqig8c563xau - foreign key (message_id) + foreign key (attachment_id) references ccm_core.messages; alter table ccm_core.categories diff --git a/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/Shortcut.java b/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/Shortcut.java index 84f9e8002..418f90475 100644 --- a/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/Shortcut.java +++ b/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/Shortcut.java @@ -39,7 +39,7 @@ import javax.persistence.Table; public class Shortcut implements Serializable { private static final long serialVersionUID = -5674633339633714327L; - + @Id @Column(name = "shortcut_id") @GeneratedValue(strategy = GenerationType.AUTO) diff --git a/ccm-test-bundle/pom.xml b/ccm-test-bundle/pom.xml new file mode 100644 index 000000000..09aca25b6 --- /dev/null +++ b/ccm-test-bundle/pom.xml @@ -0,0 +1,477 @@ + + + + + UTF-8 + + + 4.0.0 + + + org.libreccm + libreccm-parent + 7.0.0-SNAPSHOT + + + org.libreccm + ccm-test-bundle + + war + + LibreCCM Test Bundle + http://www.libreccm.org/test-bundle + + + + org.libreccm + ccm-core + ${project.parent.version} + + + + junit + junit + test + + + org.libreccm + ccm-testutils + ${project.parent.version} + test + + + org.jboss.arquillian.junit + arquillian-junit-container + test + + + org.jboss.arquillian.extension + arquillian-persistence-dbunit + test + + + org.jboss.arquillian.extension + arquillian-transaction-impl-base + test + + + org.jboss.shrinkwrap.resolver + shrinkwrap-resolver-impl-maven + test + + + + + + ccm-test-bundle + + + + src/test/resources + + + ${project.build.directory}/generated-resources + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.7 + 1.7 + true + true + ${project.build.sourceEncoding} + + + + org.apache.maven.plugins + maven-war-plugin + + + + org.libreccm + ccm-core + jar + + index.jsp + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.18.1 + + org.libreccm.tests.categories.UnitTest + + + + org.jacoco + jacoco-maven-plugin + 0.7.5.201505241946 + + + default-prepare-agent + + prepare-agent + + + + default-report + prepare-package + + report + + + + default-check + + check + + + + + BUNDLE + + + COMPLEXITY + COVEREDRATIO + 0.60 + + + + + + + + + + de.jpdigital + hibernate4-ddl-maven-plugin + + + h2 + mysql5_innodb + oracle10g + postgresql9 + + + org.libreccm.categorization + org.libreccm.core + org.libreccm.formbuilder + org.libreccm.jpa + org.libreccm.l10n + org.libreccm.messaging + org.libreccm.notification + org.libreccm.portal + org.libreccm.runtime + org.libreccm.search.lucene + org.libreccm.web + org.libreccm.workflow + + true + + + + + gen-ddl + + process-classes + + + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + true + true + + http://docs.oracle.com/javase/7/docs/api/ + http://docs.oracle.com/javaee/7/api/ + http://docs.jboss.org/hibernate/orm/4.3/javadocs/ + + private + true + UTF-8 + UTF-8 + UTF-8 + true + true + true + true + false + org.jboss.apiviz.APIviz + + org.jboss.apiviz + apiviz + 1.3.2.GA + + true + + -sourceclasspath ${project.build.outputDirectory} + + + + + + org.apache.maven.plugins + maven-jxr-plugin + 2.5 + + + org.apache.maven.plugins + maven-surefire-report-plugin + 2.18.1 + + + org.jacoco + jacoco-maven-plugin + 0.7.5.201505241946 + + + org.codehaus.mojo + findbugs-maven-plugin + 3.0.1 + + findbugs-exclude.xml + + + + org.apache.maven.plugins + maven-pmd-plugin + 3.4 + + true + utf-8 + 1.7 + + /rulesets/java/basic.xml + /rulesets/java/braces.xml + /rulesets/java/clone.xml + /rulesets/java/codesize.xml + /rulesets/java/design.xml + /rulesets/java/empty.xml + /rulesets/java/finalizers.xml + /rulesets/java/imports.xml + /rulesets/java/javabeans.xml + /rulesets/java/junit.xml + /rulesets/java/naming.xml + /rulesets/java/optimizations.xml + /rulesets/java/strictexception.xml + /rulesets/java/strings.xml + /rulesets/java/sunsecure.xml + /rulesets/java/typeresolution.xml + /rulesets/java/unnecessary.xml + /rulesets/java/unusedcode.xml + + + + + org.codehaus.mojo + javancss-maven-plugin + 2.1 + + + org.codehaus.mojo + jdepend-maven-plugin + 2.0 + + + org.codehaus.mojo + taglist-maven-plugin + 2.4 + + + org.apache.maven.plugins + maven-project-info-reports-plugin + 2.8 + + + + dependencies + + license + + + + + + false + + + + + + + + wildfly8-remote-h2-mem + + + org.wildfly + wildfly-arquillian-container-remote + test + + + org.jacoco + org.jacoco.core + test + + + + + + + src/test/resources + + + src/test/resources-wildfly8-remote-h2-mem + + + ${project.build.directory}/generated-resources + + + + + + de.jpdigital + hibernate4-ddl-maven-plugin + + + h2 + mysql5_innodb + postgresql9 + + + org.libreccm + + true + + + + + gen-ddl + + process-classes + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.18.1 + + always + 999 + true + + org.jboss.logmanager.LogManager + ${project.basedir}/target/wildfly-8.2.0.Final + ${project.basedir}/target/wildfly-8.2.0.Final/modules + + false + + org.libreccm.tests.categories.UnitTest, + org.libreccm.tests.categories.IntegrationTest + + + + + + + + + wildfly8-remote-pgsql + + + org.wildfly + wildfly-arquillian-container-remote + test + + + org.jacoco + org.jacoco.core + test + + + + + + + src/test/resources + + + src/test/resources-wildfly8-remote-pgsql + + + ${project.build.directory}/generated-resources + + + + + + de.jpdigital + hibernate4-ddl-maven-plugin + + + h2 + mysql5_innodb + postgresql9 + + + org.libreccm + + true + + + + + gen-ddl + + process-classes + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.18.1 + + always + 999 + true + + org.jboss.logmanager.LogManager + ${project.basedir}/target/wildfly-8.2.0.Final + ${project.basedir}/target/wildfly-8.2.0.Final/modules + + false + + org.libreccm.tests.categories.UnitTest, + org.libreccm.tests.categories.IntegrationTest + + + + + + + + diff --git a/ccm-test-bundle/src/main/resources-wildfly8-remote-h2-mem/arquillian.xml b/ccm-test-bundle/src/main/resources-wildfly8-remote-h2-mem/arquillian.xml new file mode 100644 index 000000000..fd7c984a5 --- /dev/null +++ b/ccm-test-bundle/src/main/resources-wildfly8-remote-h2-mem/arquillian.xml @@ -0,0 +1,40 @@ + + + + + target/deployments + + + + + + java:/comp/env/jdbc/org/libreccm/ccm-test-bundle/h2-mem + + + NONE + + true + target + + + + json + org.dbunit.ext.h2.H2DataTypeFactory + true + true + + + + + + \ No newline at end of file diff --git a/ccm-test-bundle/src/main/resources-wildfly8-remote-h2-mem/scripts/clean_schema.sql b/ccm-test-bundle/src/main/resources-wildfly8-remote-h2-mem/scripts/clean_schema.sql new file mode 100644 index 000000000..08ee8967d --- /dev/null +++ b/ccm-test-bundle/src/main/resources-wildfly8-remote-h2-mem/scripts/clean_schema.sql @@ -0,0 +1,6 @@ +-- Used by the org.libreccm.core.modules.CcmModulesTest to clean up the +-- schema before the test + +DROP SCHEMA IF EXISTS ccm_core; + +DROP SEQUENCE IF EXISTS hibernate_sequence; \ No newline at end of file diff --git a/ccm-test-bundle/src/main/resources-wildfly8-remote-h2-mem/test-persistence.xml b/ccm-test-bundle/src/main/resources-wildfly8-remote-h2-mem/test-persistence.xml new file mode 100644 index 000000000..9d279e870 --- /dev/null +++ b/ccm-test-bundle/src/main/resources-wildfly8-remote-h2-mem/test-persistence.xml @@ -0,0 +1,40 @@ + + + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + + java:/comp/env/jdbc/org/libreccm/ccm-test-bundle/h2-mem + + + + + + + + + + + + \ No newline at end of file diff --git a/ccm-test-bundle/src/main/resources-wildfly8-remote-pgsql/arquillian.xml b/ccm-test-bundle/src/main/resources-wildfly8-remote-pgsql/arquillian.xml new file mode 100644 index 000000000..f94d6fd9c --- /dev/null +++ b/ccm-test-bundle/src/main/resources-wildfly8-remote-pgsql/arquillian.xml @@ -0,0 +1,39 @@ + + + + + target/deployments + + + + java:/comp/env/jdbc/org/libreccm/ccm-test-bundle/pgsql + + + + NONE + + true + target + + + + json + + true + true + + + + + + diff --git a/ccm-test-bundle/src/main/resources-wildfly8-remote-pgsql/scripts/clean_schema.sql b/ccm-test-bundle/src/main/resources-wildfly8-remote-pgsql/scripts/clean_schema.sql new file mode 100644 index 000000000..08ee8967d --- /dev/null +++ b/ccm-test-bundle/src/main/resources-wildfly8-remote-pgsql/scripts/clean_schema.sql @@ -0,0 +1,6 @@ +-- Used by the org.libreccm.core.modules.CcmModulesTest to clean up the +-- schema before the test + +DROP SCHEMA IF EXISTS ccm_core; + +DROP SEQUENCE IF EXISTS hibernate_sequence; \ No newline at end of file diff --git a/ccm-test-bundle/src/main/resources-wildfly8-remote-pgsql/test-persistence.xml b/ccm-test-bundle/src/main/resources-wildfly8-remote-pgsql/test-persistence.xml new file mode 100644 index 000000000..3d574f57f --- /dev/null +++ b/ccm-test-bundle/src/main/resources-wildfly8-remote-pgsql/test-persistence.xml @@ -0,0 +1,40 @@ + + + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + + java:/comp/env/jdbc/org/libreccm/ccm-test-bundle/pgsql + + + + + + + + + + + + \ No newline at end of file diff --git a/ccm-test-bundle/src/main/webapp/WEB-INF/web.xml b/ccm-test-bundle/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 000000000..f53ebe797 --- /dev/null +++ b/ccm-test-bundle/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,10 @@ + + + + LibreCCM Test Bundle + + diff --git a/ccm-test-bundle/src/test/java/org/libreccm/CcmModulesTest.java b/ccm-test-bundle/src/test/java/org/libreccm/CcmModulesTest.java new file mode 100644 index 000000000..3851dbf6d --- /dev/null +++ b/ccm-test-bundle/src/test/java/org/libreccm/CcmModulesTest.java @@ -0,0 +1,204 @@ +/* + * Copyright (C) 2015 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.libreccm; + +import java.io.File; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.sql.DataSource; + +import static org.hamcrest.CoreMatchers.*; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.arquillian.persistence.CreateSchema; +import org.jboss.arquillian.persistence.PersistenceTest; +import org.jboss.arquillian.transaction.api.annotation.TransactionMode; +import org.jboss.arquillian.transaction.api.annotation.Transactional; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import org.jboss.shrinkwrap.resolver.api.maven.PomEquippedResolveStage; +import org.junit.After; +import org.junit.AfterClass; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.libreccm.core.CcmCore; +import org.libreccm.core.modules.ModuleStatus; +import org.libreccm.tests.categories.IntegrationTest; + +/** + * + * @author Jens Pelzetter + */ +@Category(IntegrationTest.class) +@RunWith(Arquillian.class) +@PersistenceTest +@Transactional(TransactionMode.COMMIT) +@CreateSchema({"clean_schema.sql"}) +public class CcmModulesTest { + + @PersistenceContext(name = "LibreCCM") + private transient EntityManager entityManager; + + public CcmModulesTest() { + + } + + @BeforeClass + public static void setUpClass() { + } + + @AfterClass + public static void tearDownClass() { + } + + @Before + public void setUp() { + } + + @After + public void tearDown() { + } + + @Deployment + public static WebArchive createDeployment() { + final PomEquippedResolveStage pom = Maven + .resolver() + .loadPomFromFile("pom.xml"); + final PomEquippedResolveStage dependencies = pom + .importCompileAndRuntimeDependencies(); + final File[] libs = dependencies.resolve().withTransitivity().asFile(); + + for (File lib : libs) { + System.err.printf("Adding file '%s' to test archive...%n", + lib.getName()); + } + + return ShrinkWrap + .create(WebArchive.class, + "LibreCCM-org.libreccm.CcmModulesTest.war") + .addAsLibraries(libs) + .addAsWebInfResource("web.xml") + .addAsWebInfResource("test-persistence.xml") + .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); + } + + @Test + public void verifyModules() throws SQLException { + final Object dataSourceObj = entityManager.getEntityManagerFactory() + .getProperties().get("javax.persistence.jtaDataSource"); + assertThat(dataSourceObj, is(instanceOf(DataSource.class))); + + final DataSource dataSource = (DataSource) dataSourceObj; + final Connection connection = dataSource.getConnection(); + assertThat(connection, is(instanceOf(Connection.class))); + + final ResultSet ccmObjectTable = connection.getMetaData() + .getTables(null, "ccm_core", "ccm_objects", null); + if (!ccmObjectTable.next()) { + fail("No metadata for table ccm_core.ccm_objects returned. " + + "Table does not exist?"); + } + + final ResultSet installedModulesTable = connection.getMetaData() + .getTables(null, "ccm_core", "installed_modules", null); + if (!installedModulesTable.next()) { + fail("No metadata for table ccm_core.installed_modules returned. " + + "Table does not exist?"); + } + + final Statement statement = connection.createStatement(); + final ResultSet installedModules = statement.executeQuery( + "SELECT module_id, module_class_name, status " + + "FROM ccm_core.installed_modules" + + " ORDER BY module_class_name"); + final List modulesData = new ArrayList<>(); + while (installedModules.next()) { + createInstalledModuleListEntry(installedModules, modulesData); + } + + assertThat(modulesData.size(), is(1)); + + assertThat(Integer.toString(modulesData.get(0).getModuleId()), + is(equalTo(Integer.toString(CcmCore.class.getName(). + hashCode())))); + assertThat(modulesData.get(0).getModuleClassName(), + is(equalTo(CcmCore.class.getName()))); + assertThat(modulesData.get(0).getStatus(), + is(equalTo(ModuleStatus.INSTALLED.toString()))); + } + + private void createInstalledModuleListEntry( + final ResultSet resultSet, final List modulesData) + throws SQLException { + + final InstalledModuleData moduleData = new InstalledModuleData(); + moduleData.setModuleId(resultSet.getInt("module_id")); + moduleData.setModuleClassName(resultSet.getString("module_class_name")); + moduleData.setStatus(resultSet.getString("status")); + + modulesData.add(moduleData); + } + + private class InstalledModuleData { + + private int moduleId; + private String moduleClassName; + private String status; + + public int getModuleId() { + return moduleId; + } + + public void setModuleId(final int moduleId) { + this.moduleId = moduleId; + } + + public String getModuleClassName() { + return moduleClassName; + } + + public void setModuleClassName(final String moduleClassName) { + this.moduleClassName = moduleClassName; + } + + public String getStatus() { + return status; + } + + public void setStatus(final String status) { + this.status = status; + } + + } +} diff --git a/pom.xml b/pom.xml index 91d89cf48..b3ffcdb7a 100644 --- a/pom.xml +++ b/pom.xml @@ -1,8 +1,5 @@ - + 4.0.0 @@ -42,7 +39,8 @@ ccm-shortcuts ccm-testutils ccm-docrepo - + ccm-test-bundle +