Author: sergiykarpenko
Date: 2009-11-10 05:53:27 -0500 (Tue, 10 Nov 2009)
New Revision: 545
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/cacheloader/IndexerCacheLoader.java
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/IndexerCacheLoaderTest.java
Log:
EXOJCR-202: IndexerCacheLoaderTest tests updated
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/cacheloader/IndexerCacheLoader.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/cacheloader/IndexerCacheLoader.java 2009-11-10
10:46:45 UTC (rev 544)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/cacheloader/IndexerCacheLoader.java 2009-11-10
10:53:27 UTC (rev 545)
@@ -98,10 +98,13 @@
for (Modification m : modifications)
{
- String uuid = parseUUID(m.getFqn());
+ // check do we need skip modification
+ // $NODES ,$PROPS cache-node modification and child cache-node
(/$NODES/nodeUUID/[]childNodeName) are skipped
+ // we process only modifications with Fqn like /[$NODES | $PROPS]/UUID
+ if (m.getFqn().size() == 2)
+ {
+ String uuid = parseUUID(m.getFqn());
- if (uuid != null)
- {
switch (m.getType())
{
case PUT_DATA :
@@ -130,7 +133,6 @@
break;
case PUT_KEY_VALUE :
- // must be never called
// update node
if (isNode(m.getFqn()))
{
@@ -149,7 +151,6 @@
// update node
if (isNode(m.getFqn()))
{
- addedNodes.add(uuid);
removedNodes.add(uuid);
}
else
@@ -162,7 +163,10 @@
// removed property - do update node
if (isNode(m.getFqn()))
{
- updateNodes.add(uuid);
+ if (!removedNodes.contains(uuid))
+ {
+ updateNodes.add(uuid);
+ }
}
else
{
Modified:
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/IndexerCacheLoaderTest.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/IndexerCacheLoaderTest.java 2009-11-10
10:46:45 UTC (rev 544)
+++
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/IndexerCacheLoaderTest.java 2009-11-10
10:53:27 UTC (rev 545)
@@ -36,6 +36,7 @@
import java.io.IOException;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -88,9 +89,15 @@
modification.addAll(addNode(newNode));
modification.addAll(addProperty(newProperty));
indexerCacheLoader.put(modification);
- assertNotNull(searchManager.getAddedNodes());
- assertNotNull(searchManager.getRemovedNodes());
+
+ //check
+ assertFalse(searchManager.getAddedNodes().isEmpty());
assertTrue(searchManager.getRemovedNodes().isEmpty());
+
+ Set<String> expectedAddUUID = new HashSet<String>();
+ expectedAddUUID.add("n123456");
+ assertEquals(expectedAddUUID.size(), searchManager.getAddedNodes().size());
+ assertTrue(expectedAddUUID.containsAll(searchManager.getAddedNodes()));
}
public void testRemoveNode() throws Exception
@@ -109,11 +116,144 @@
modification.addAll(removeProperty(prop));
indexerCacheLoader.put(modification);
assertTrue(searchManager.getAddedNodes().isEmpty());
- assertNotNull(searchManager.getRemovedNodes());
assertFalse(searchManager.getRemovedNodes().isEmpty());
+ Set<String> expectedRemUUID = new HashSet<String>();
+ expectedRemUUID.add("n123456");
+ assertEquals(searchManager.getRemovedNodes().size(), expectedRemUUID.size());
+ assertTrue(expectedRemUUID.containsAll(searchManager.getRemovedNodes()));
}
+ public void testUpdateProperty() throws Exception
+ {
+ // two updates on same node
+ QPath node1path = QPath.parse("[]:1[]node:1");
+ QPath prop1path = QPath.makeChildPath(node1path, Constants.JCR_PRIMARYTYPE);
+ QPath prop2path = QPath.makeChildPath(node1path, new
InternalQName(Constants.NS_JCR_URI, "myType"));
+ PropertyData prop1 = new TransientPropertyData(prop1path, "p111123456",
0, PropertyType.NAME, "n123456", false);
+ PropertyData prop2 = new TransientPropertyData(prop2path, "p222123456",
0, PropertyType.STRING, "n123456", false);
+
+ // one update on another node
+ QPath node2path = QPath.parse("[]:1[]node:1");
+ QPath prop3path = QPath.makeChildPath(node1path, Constants.JCR_PRIMARYTYPE);
+ PropertyData prop3 = new TransientPropertyData(prop1path, "p333123456",
0, PropertyType.NAME, "n2123456", false);
+ List<Modification> modification = new ArrayList<Modification>();
+
+ modification.addAll(updateProperty(prop1));
+ modification.addAll(updateProperty(prop2));
+ modification.addAll(updateProperty(prop3));
+ indexerCacheLoader.put(modification);
+ assertFalse(searchManager.getAddedNodes().isEmpty());
+ assertFalse(searchManager.getRemovedNodes().isEmpty());
+
+ Set<String> expectedRemUUID = new HashSet<String>();
+ expectedRemUUID.add("n123456");
+ expectedRemUUID.add("n2123456");
+ assertEquals(searchManager.getRemovedNodes().size(), expectedRemUUID.size());
+ assertTrue(expectedRemUUID.containsAll(searchManager.getRemovedNodes()));
+
+ Set<String> expectedAddUUID = new HashSet<String>();
+ expectedAddUUID.add("n123456");
+ expectedAddUUID.add("n2123456");
+ assertEquals(searchManager.getAddedNodes().size(), expectedAddUUID.size());
+ assertTrue(expectedAddUUID.containsAll(searchManager.getAddedNodes()));
+ }
+
+ public void testAddNewPropertyUpdate() throws Exception
+ {
+ QPath node1path = QPath.parse("[]:1[]node:1");
+
+ QPath prop1path = QPath.makeChildPath(node1path, new
InternalQName(Constants.NS_JCR_URI, "myProp"));
+ PropertyData prop1 = new TransientPropertyData(prop1path, "p222123456",
0, PropertyType.STRING, "n123456", false);
+
+ List<Modification> modification = new ArrayList<Modification>();
+
+ modification.addAll(addProperty(prop1));
+ indexerCacheLoader.put(modification);
+
+ assertFalse(searchManager.getAddedNodes().isEmpty());
+ assertFalse(searchManager.getRemovedNodes().isEmpty());
+
+ Set<String> expectedRemUUID = new HashSet<String>();
+ expectedRemUUID.add("n123456");
+ assertEquals(searchManager.getRemovedNodes().size(), expectedRemUUID.size());
+ assertTrue(expectedRemUUID.containsAll(searchManager.getRemovedNodes()));
+
+ Set<String> expectedAddUUID = new HashSet<String>();
+ expectedAddUUID.add("n123456");
+ assertEquals(searchManager.getAddedNodes().size(), expectedAddUUID.size());
+ assertTrue(expectedAddUUID.containsAll(searchManager.getAddedNodes()));
+ }
+
+ public void testRemovePropertyUpdate() throws Exception
+ {
+ QPath node1path = QPath.parse("[]:1[]node:1");
+
+ QPath prop1path = QPath.makeChildPath(node1path, new
InternalQName(Constants.NS_JCR_URI, "myProp"));
+ PropertyData prop1 = new TransientPropertyData(prop1path, "p222123456",
0, PropertyType.STRING, "n123456", false);
+
+ List<Modification> modification = new ArrayList<Modification>();
+
+ modification.addAll(this.removeProperty(prop1));
+ indexerCacheLoader.put(modification);
+
+ assertFalse(searchManager.getAddedNodes().isEmpty());
+ assertFalse(searchManager.getRemovedNodes().isEmpty());
+
+ Set<String> expectedRemUUID = new HashSet<String>();
+ expectedRemUUID.add("n123456");
+ assertEquals(searchManager.getRemovedNodes().size(), expectedRemUUID.size());
+ assertTrue(expectedRemUUID.containsAll(searchManager.getRemovedNodes()));
+
+ Set<String> expectedAddUUID = new HashSet<String>();
+ expectedAddUUID.add("n123456");
+ assertEquals(searchManager.getAddedNodes().size(), expectedAddUUID.size());
+ assertTrue(expectedAddUUID.containsAll(searchManager.getAddedNodes()));
+ }
+
+ public void testMoveNode() throws Exception
+ {
+ QPath srcpath = QPath.parse("[]:1[]node:1");
+ QPath destpath = QPath.parse("[]:1[]nodeDest:1");
+ NodeData srcNode =
+ new TransientNodeData(srcpath, "n123456", 1,
Constants.NT_UNSTRUCTURED, new InternalQName[0], 0,
+ Constants.ROOT_UUID, new AccessControlList());
+
+ QPath prop1path = QPath.makeChildPath(srcpath, Constants.JCR_PRIMARYTYPE);
+ PropertyData srcProperty =
+ new TransientPropertyData(prop1path, "p123456", 0, PropertyType.NAME,
"n123456", false);
+
+ NodeData destNode =
+ new TransientNodeData(destpath, "n222222", 1,
Constants.NT_UNSTRUCTURED, new InternalQName[0], 0,
+ Constants.ROOT_UUID, new AccessControlList());
+
+ QPath prop2path = QPath.makeChildPath(destpath, Constants.JCR_PRIMARYTYPE);
+ PropertyData destProperty =
+ new TransientPropertyData(prop2path, "p222222", 0, PropertyType.NAME,
"n222222", false);
+
+ List<Modification> modification = new ArrayList<Modification>();
+
+ modification.addAll(addNode(destNode));
+ modification.addAll(addProperty(destProperty));
+ modification.addAll(removeNode(srcNode));
+ modification.addAll(removeProperty(srcProperty));
+ indexerCacheLoader.put(modification);
+
+ //check
+ assertFalse(searchManager.getAddedNodes().isEmpty());
+ assertFalse(searchManager.getRemovedNodes().isEmpty());
+
+ Set<String> expectedAddUUID = new HashSet<String>();
+ expectedAddUUID.add("n222222");
+ assertEquals(searchManager.getAddedNodes().size(), expectedAddUUID.size());
+ assertTrue(expectedAddUUID.containsAll(searchManager.getAddedNodes()));
+
+ Set<String> expectedRemoveUUID = new HashSet<String>();
+ expectedRemoveUUID.add("n123456");
+ assertEquals(searchManager.getRemovedNodes().size(), expectedRemoveUUID.size());
+ assertTrue(expectedRemoveUUID.containsAll(searchManager.getRemovedNodes()));
+ }
+
private class DummySearchManager implements SearchManager
{