[exo-jcr-commits] exo-jcr SVN: r5252 - in jcr/trunk/exo.jcr.component.core/src: test/java/org/exoplatform/services/jcr/impl and 1 other directory.
do-not-reply at jboss.org
do-not-reply at jboss.org
Thu Dec 1 10:02:40 EST 2011
Author: tolusha
Date: 2011-12-01 10:02:40 -0500 (Thu, 01 Dec 2011)
New Revision: 5252
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java
Log:
EXOJCR-1664: Added the ability to check if an item is its own parent to the JCRConsistencyTool
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java 2011-12-01 13:27:39 UTC (rev 5251)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java 2011-12-01 15:02:40 UTC (rev 5252)
@@ -19,6 +19,7 @@
package org.exoplatform.services.jcr.impl.storage.jdbc;
import org.exoplatform.commons.utils.SecurityHelper;
+import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.jcr.impl.InspectionLog;
import org.exoplatform.services.jcr.impl.InspectionLog.InspectionStatus;
import org.exoplatform.services.jcr.impl.storage.value.ValueDataNotFoundException;
@@ -203,6 +204,14 @@
DBConstants.COLUMN_VORDERNUM},
"Reference records that linked to unexisted nodes. Can be normal for some usecases.", InspectionStatus.WARN));
+ // an item is its own parent.
+ queries.add(new InspectionQuery(jdbcDataContainer.multiDb
+ ? "select * from JCR_MITEM I where I.ID = I.PARENT_ID and I.NAME <> '" + Constants.ROOT_PARENT_NAME + "'"
+ : "select * from JCR_SITEM I where I.ID = I.PARENT_ID and I.CONTAINER_NAME='"
+ + jdbcDataContainer.containerName + "' and I.NAME <> '" + Constants.ROOT_PARENT_NAME + "'", new String[]{
+ DBConstants.COLUMN_ID, DBConstants.COLUMN_PARENTID, DBConstants.COLUMN_NAME}, "An item is its own parent.",
+ InspectionStatus.ERR));
+
// using existing DataSource to get a JDBC Connection.
Connection jdbcConn = jdbcDataContainer.getConnectionFactory().getJdbcConnection();
Modified: jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java 2011-12-01 13:27:39 UTC (rev 5251)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java 2011-12-01 15:02:40 UTC (rev 5252)
@@ -309,8 +309,61 @@
checkController.getLastLogFile().delete();
}
+ /**
+ * Usecase: property doens't have have parent node.
+ */
+ public void testDBUsecasesTheParentIdIsIdOfThisNodeSingleDB() throws Exception
+ {
+ checkDBUsecasesTheParentIdIsIdOfThisNode(helper.createRepository(container, false, false));
+ }
/**
+ * Usecase: property doens't have have parent node.
+ */
+ public void testDBUsecasesTheParentIdIsIdOfThisNodeMultiDB() throws Exception
+ {
+ checkDBUsecasesTheParentIdIsIdOfThisNode(helper.createRepository(container, true, false));
+ }
+
+ private void checkDBUsecasesTheParentIdIsIdOfThisNode(ManageableRepository repository) throws Exception
+ {
+ // create repository and add property
+ SessionImpl session =
+ (SessionImpl)repository.login(credentials, repository.getConfiguration().getSystemWorkspaceName());
+ NodeImpl node = (NodeImpl)session.getRootNode().addNode("testNode");
+ PropertyImpl prop = (PropertyImpl)node.setProperty("prop", "test");
+ session.save();
+ session.logout();
+
+ // repository is consistent
+ checkController = new RepositoryCheckController(repository);
+ assertTrue(checkController.checkRepositoryDataBaseConsistency().startsWith("Repository data is consistent"));
+ checkController.getLastLogFile().delete();
+
+ WorkspaceEntry wsEntry = repository.getConfiguration().getWorkspaceEntries().get(0);
+ boolean isMultiDb = wsEntry.getContainer().getParameterBoolean(JDBCWorkspaceDataContainer.MULTIDB);
+
+ // change ITEM table
+ String sourceName = wsEntry.getContainer().getParameterValue(JDBCWorkspaceDataContainer.SOURCE_NAME);
+
+ Connection conn = ((DataSource)new InitialContext().lookup(sourceName)).getConnection();
+
+ conn.prepareStatement("DROP INDEX JCR_IDX_" + (isMultiDb ? "M" : "S") + "ITEM_PARENT").execute();
+ conn.prepareStatement("DROP INDEX JCR_IDX_" + (isMultiDb ? "M" : "S") + "ITEM_PARENT_NAME").execute();
+ conn.prepareStatement(
+ "UPDATE JCR_" + (isMultiDb ? "M" : "S") + "ITEM SET PARENT_ID = '" + (isMultiDb ? "" : wsEntry.getName())
+ + node.getInternalIdentifier() + "' WHERE ID='" + (isMultiDb ? "" : wsEntry.getName())
+ + node.getInternalIdentifier() + "'").execute();
+
+ conn.commit();
+ conn.close();
+
+ // repository is inconsistent
+ assertTrue(checkController.checkRepositoryDataBaseConsistency().startsWith("Repository data is inconsistent"));
+ checkController.getLastLogFile().delete();
+ }
+
+ /**
* Usecase: property doens't have have parent node.
*/
public void testDBUsecasesPropertyWithoutParentSingleDB() throws Exception
More information about the exo-jcr-commits
mailing list