use of javax.jcr.Workspace in project jackrabbit by apache.
the class ShareableNodeTest method testDetectShareCycleOnTransientMove.
/**
* Verify that a share cycle is detected (6.13.13) when a node is
* transiently moved.
*/
public void testDetectShareCycleOnTransientMove() throws Exception {
// setup parent nodes and first child
Node a1 = testRootNode.addNode("a1");
Node a2 = testRootNode.addNode("a2");
Node b1 = a1.addNode("b1");
testRootNode.getSession().save();
// add mixin
ensureMixinType(b1, mixShareable);
b1.save();
// clone
Session session = b1.getSession();
Workspace workspace = session.getWorkspace();
workspace.clone(workspace.getName(), b1.getPath(), a2.getPath() + "/b2", false);
// add child node
Node c = b1.addNode("c");
b1.save();
Node[] shared = getSharedSet(b1);
assertEquals(2, shared.length);
// move node
try {
session.move(testRootNode.getPath() + "/a2", c.getPath());
fail("Share cycle not detected on transient move.");
} catch (RepositoryException e) {
// expected
}
}
use of javax.jcr.Workspace in project jackrabbit by apache.
the class ShareableNodeTest method testSessionImportSystemViewCollision.
/**
* Verify system view import via session (6.13.14). Export a system view
* containing a shareable node and verify, that reimporting underneath
* a different parent adds another member to the shared set and does not
* duplicate children nodes.
*/
public void testSessionImportSystemViewCollision() throws Exception {
// setup parent nodes and first child
Node a1 = testRootNode.addNode("a1");
Node a2 = testRootNode.addNode("a2");
Node a3 = testRootNode.addNode("a3");
Node b1 = a1.addNode("b1");
testRootNode.getSession().save();
// add mixin
ensureMixinType(b1, mixShareable);
b1.save();
// clone
Session session = b1.getSession();
Workspace workspace = session.getWorkspace();
workspace.clone(workspace.getName(), b1.getPath(), a2.getPath() + "/b2", false);
// add child c to shareable nodes b1 & b2
b1.addNode("c");
b1.save();
// create temp file
File tmpFile = File.createTempFile("test", null);
tmpFile.deleteOnExit();
// export system view of /a1/b1
OutputStream out = new FileOutputStream(tmpFile);
try {
session.exportSystemView(b1.getPath(), out, false, false);
} finally {
out.close();
}
// and import again underneath /a3
InputStream in = new FileInputStream(tmpFile);
try {
session.importXML(a3.getPath(), in, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW);
session.save();
} finally {
try {
in.close();
} catch (IOException ignore) {
}
}
// verify there's another element in the shared set
Node[] shared = getSharedSet(b1);
assertEquals(3, shared.length);
// verify child c has not been duplicated
Node[] children = toArray(b1.getNodes());
assertEquals(1, children.length);
}
use of javax.jcr.Workspace in project jackrabbit by apache.
the class ShareableNodeTest method testCloneMultipleTimes.
/**
* Clone a mix:shareable node to the same workspace multiple times, remove
* all parents and save. Exposes an error that occurred when having more
* than two members in a shared set and parents were removed in the same
* order they were created.
*/
public void testCloneMultipleTimes() throws Exception {
final int count = 10;
Node[] parents = new Node[count];
// setup parent nodes and first child
for (int i = 0; i < parents.length; i++) {
parents[i] = testRootNode.addNode("a" + (i + 1));
}
Node b = parents[0].addNode("b");
testRootNode.getSession().save();
// add mixin
ensureMixinType(b, mixShareable);
b.save();
Workspace workspace = b.getSession().getWorkspace();
// clone to all other nodes
for (int i = 1; i < parents.length; i++) {
workspace.clone(workspace.getName(), b.getPath(), parents[i].getPath() + "/b", false);
}
// remove all parents and save
for (int i = 0; i < parents.length; i++) {
parents[i].remove();
}
testRootNode.getSession().save();
}
use of javax.jcr.Workspace in project jackrabbit by apache.
the class ShareableNodeTest method testModifyDescendantAndRemoveShareAndSave.
/**
* Verify that invoking save() on a share-ancestor will save changes in
* all share-descendants.
*/
public void testModifyDescendantAndRemoveShareAndSave() throws Exception {
// setup parent nodes and first child
Node a1 = testRootNode.addNode("a1");
Node a2 = testRootNode.addNode("a2");
Node b1 = a1.addNode("b1");
testRootNode.getSession().save();
// add mixin
ensureMixinType(b1, mixShareable);
b1.save();
// clone
Workspace workspace = b1.getSession().getWorkspace();
workspace.clone(workspace.getName(), b1.getPath(), a2.getPath() + "/b2", false);
// add child node c to b1
Node c = b1.addNode("c");
b1.save();
// add child d to c, this modifies c
c.addNode("d");
// remove share b2 from a2
a2.getNode("b2").removeShare();
// save a2 (having path /testroot/a2): this should save c as well
// since one of the paths to c was /testroot/a2/b2/c
a2.save();
assertFalse("Saving share-ancestor should save share-descendants", c.isModified());
}
use of javax.jcr.Workspace in project jackrabbit by apache.
the class ShareableNodeTest method testGetPath.
/**
* Verify that Node.getPath returns the correct path in a shareable
* node (6.13).
*/
public void testGetPath() throws Exception {
// setup parent nodes and first child
Node a1 = testRootNode.addNode("a1");
Node a2 = testRootNode.addNode("a2");
Node b1 = a1.addNode("b1");
testRootNode.getSession().save();
// add mixin
ensureMixinType(b1, mixShareable);
b1.save();
// clone
Workspace workspace = b1.getSession().getWorkspace();
workspace.clone(workspace.getName(), b1.getPath(), a2.getPath() + "/b2", false);
Node[] shared = getSharedSet(b1);
assertEquals(2, shared.length);
b1 = shared[0];
Node b2 = shared[1];
// verify paths of nodes b1/b2 in shared set
String testRootNodePath = testRootNode.getPath();
assertEquals(testRootNodePath + "/a1/b1", b1.getPath());
assertEquals(testRootNodePath + "/a2/b2", b2.getPath());
}
Aggregations