@Test public void shouldNavigateChildrenFromPagedConnector() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.PAGED_DOC_LOCATION, "federated1"); Node doc1Federated = session.getNode("/testRoot/federated1"); NodeIterator nodesIterator = doc1Federated.getNodes(); assertEquals(3, nodesIterator.getSize()); List<String> childrenNames = new ArrayList<String>(3); while (nodesIterator.hasNext()) { childrenNames.add(nodesIterator.nextNode().getName()); } assertEquals(Arrays.asList("federated4", "federated5", "federated6"), childrenNames); }
@Test( expected = IllegalArgumentException.class ) public void shouldNotRemoveProjectionUsingRootPath() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "federated1"); federationManager.removeProjection("/"); }
@Test( expected = RepositoryException.class ) public void shouldNotAllowWritesIfReadonly() throws Exception { federationManager.createProjection("/testRoot", "mock-source-readonly", MockConnector.DOC1_LOCATION, "federated1"); Node doc1Federated = session.getNode("/testRoot/federated1"); Node externalNode1 = doc1Federated.addNode("federated1_1", null); externalNode1.addNode("federated1_1_1", null); session.save(); }
@Test( expected = PathNotFoundException.class ) public void shouldNotRemoveProjectionIfPathInvalid() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "federated1"); federationManager.removeProjection("/testRoot/federated"); }
public void create( Node parentNode, String childName ) throws RepositoryException { Session session = (Session)parentNode.getSession(); FederationManager fedMgr = session.getWorkspace().getFederationManager(); fedMgr.createProjection(parentNode.getPath(), getName(), "/", childName); }
@Test public void removeProjectionViaFederationManagerShouldNotDeleteExternalNode() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC2_LOCATION, "projection1"); federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC2_LOCATION, "projection2"); federationManager.removeProjection("/testRoot/projection1"); assertNodeFound("/testRoot/projection2/federated3"); }
@Test @FixFor( "MODE-1976" ) public void shouldNotCopyIfSourceSubgraphContainsExternalNodesWhichDoNotMatchTargetSource() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "fed1"); federationManager.createProjection("/testRoot", "mock-source-non-queryable", MockConnector.DOC1_LOCATION, "fed_nq1"); federationManager.createProjection("/testRoot", "mock-source-non-queryable", MockConnector.DOC2_LOCATION, "fed2"); try { jcrSession().getWorkspace().copy("/testRoot", "/testRoot/fed2/fed_mixed"); fail("Should not allow copy if source subgraph contains nodes which don't belong to the same source as the target"); } catch (RepositoryException e) { // expected if (print) { e.printStackTrace(); } } }
@Test public void shouldRemoveProjectionViaFederationManager() throws Exception { testRoot.addNode("child1"); session.save(); federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "federated1"); federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC2_LOCATION, "federated2"); federationManager.removeProjection("/testRoot/federated2"); assertNodeFound("/testRoot/federated1"); assertNodeFound("/testRoot/child1"); assertNodeNotFound("/testRoot/federated2"); federationManager.removeProjection("/testRoot/federated1"); assertNodeNotFound("/testRoot/federation1"); assertNodeFound("/testRoot/child1"); }
@Test @FixFor( "MODE-1976" ) public void shouldAllowCopyWithinSameSource() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "fed1"); federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC2_LOCATION, "fed2"); jcrSession().getWorkspace().copy("/testRoot/fed1", "/testRoot/fed2/fed1"); assertNodeFound("/testRoot/fed2/fed1"); assertNodeFound("/testRoot/fed2/federated3"); }
@Test @FixFor( "MODE-1977" ) public void shouldNotAllowMoveIfSourceAndTargetBelongToDifferentSources() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "fed1"); federationManager.createProjection("/testRoot", "mock-source-non-queryable", MockConnector.DOC2_LOCATION, "fed2"); try { session.move("/testRoot/fed1", "/testRoot/fed2"); fail("Should not allow move if source and target don't belong to the same source"); } catch (RepositoryException e) { // expected if (print) { e.printStackTrace(); } } }
@Test @FixFor( "MODE-1975" ) public void shouldNotCloneEntireWorkspacesIfExternalNodesExist() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC2_LOCATION, "fed2"); Session ws1Session = jcrSessionTo("ws1"); ws1Session.getRootNode().addNode("testRoot"); ws1Session.save(); ((Workspace)ws1Session.getWorkspace()).getFederationManager().createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC2_LOCATION, "ws1Fed2"); try { ws1Session.getWorkspace().clone("default", "/", "/", false); fail("Expected an ItemExistsException because the target workspace already contains an external node"); } catch (ItemExistsException e) { // expected if (print) { e.printStackTrace(); } } finally { ws1Session.logout(); } }
@Test public void shouldUpdateExternalNodeProperties() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "federated1"); Node doc1Federated = session.getNode("/testRoot/federated1"); Node externalNode1 = doc1Federated.addNode("federated1_1", null); externalNode1.setProperty("prop1", "a value"); externalNode1.setProperty("prop2", "a value 2"); session.save(); externalNode1.setProperty("prop1", "edited value"); assertEquals("a value 2", externalNode1.getProperty("prop2").getString()); externalNode1.getProperty("prop2").remove(); externalNode1.setProperty("prop3", "a value 3"); session.save(); Node federated1_1 = doc1Federated.getNode("federated1_1"); assertEquals("edited value", federated1_1.getProperty("prop1").getString()); assertEquals("a value 3", federated1_1.getProperty("prop3").getString()); try { federated1_1.getProperty("prop2"); fail("Property was not removed from external node"); } catch (PathNotFoundException e) { // expected } }
@Test public void removingProjectionViaNodeRemoveShouldDeleteExternalNodes() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC2_LOCATION, "projection1"); federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC2_LOCATION, "projection2"); Node projection1 = assertNodeFound("/testRoot/projection1/federated3"); assertNodeFound("/testRoot/projection2/federated3"); projection1.remove(); session.save(); assertNodeNotFound("/testRoot/projection2/federated3"); }
@Test @FixFor( "MODE-1976" ) public void shouldNotCopyIfSourceAndTargetSourcesDoNotMatch() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "fed1"); federationManager.createProjection("/testRoot", "mock-source-non-queryable", MockConnector.DOC2_LOCATION, "fed2"); try { jcrSession().getWorkspace().copy("/testRoot/fed1", "/testRoot/fed2/fed1"); fail("Should not allow copy if source and target don't belong to the same source"); } catch (RepositoryException e) { // expected if (print) { e.printStackTrace(); } } }
@BeforeClass public static void beforeAll() throws Exception { loadGitRepositoryData(); RepositoryConfiguration config = RepositoryConfiguration.read("config/repo-config-git-federation.json"); startRepository(config); Session session = getSession(); Node testRoot = session.getRootNode().addNode("repos"); session.save(); FederationManager fedMgr = session.getWorkspace().getFederationManager(); fedMgr.createProjection(testRoot.getPath(), "remote-git-repo", "/", "git-modeshape-remote"); fedMgr.createProjection(testRoot.getPath(), "local-git-repo", "/", "git-modeshape-local"); }
@Test public void shouldReorderExternalNodes() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "federated1"); Node doc1Federated = session.getNode("/testRoot/federated1"); Node parent1 = doc1Federated.addNode("parent1", null); parent1.addNode("child1"); parent1.addNode("child2"); parent1.addNode("child3"); session.save(); assertExternalNodeHasChildren("/testRoot/federated1/parent1", "child1", "child2", "child3"); parent1.orderBefore("child1", "child2"); session.save(); assertExternalNodeHasChildren("/testRoot/federated1/parent1", "child2", "child1", "child3"); }
@Test public void shouldMoveExternalNode() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "federated1"); Node doc1Federated = session.getNode("/testRoot/federated1"); Node parent1 = doc1Federated.addNode("parent1", null); parent1.addNode("child1"); parent1.addNode("childX"); parent1.addNode("child2"); Node parent2 = doc1Federated.addNode("parent2", null); parent2.addNode("child3"); parent2.addNode("child4"); session.save(); assertExternalNodeHasChildren("/testRoot/federated1/parent1", "child1", "childX", "child2"); assertExternalNodeHasChildren("/testRoot/federated1/parent2", "child3", "child4"); ((Workspace)session.getWorkspace()).move("/testRoot/federated1/parent1/childX", "/testRoot/federated1/parent2/childX"); assertExternalNodeHasChildren("/testRoot/federated1/parent1", "child1", "child2"); assertExternalNodeHasChildren("/testRoot/federated1/parent2", "child3", "child4", "childX"); }
@Test @FixFor( "MODE-1976" ) public void shouldCopyFromNonFederatedSourceToFederatedTargetSameWs() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "fed1"); jcrSession().getNode("/testRoot/fed1").addNode("federated1"); jcrSession().getRootNode().addNode("testRoot2").addNode("nonFederated2"); jcrSession().save(); jcrSession().getWorkspace().copy("/testRoot2", "/testRoot/fed1/federated2"); assertNodeFound("/testRoot/fed1/federated2"); assertNodeFound("/testRoot/fed1/federated2/nonFederated2"); assertEquals(2, jcrSession().getNode("/testRoot/fed1").getNodes().getSize()); }
@Test @FixFor( "MODE-1975" ) public void shouldCloneEntireWorkspaces() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC2_LOCATION, "fed2"); Session ws1Session = jcrSessionTo("ws1"); try { ws1Session.getWorkspace().clone("default", "/", "/", true); assertNodeFound("/testRoot", ws1Session); Node fed2 = assertNodeFound("/testRoot/fed2", ws1Session); assertNodeFound("/testRoot/fed2/federated3", ws1Session); // add an external node in the 2nd workspace and check that it was added via the connector (i.e. the projection was // correctly cloned) fed2.addNode("federated2_1"); ws1Session.save(); //sleep a bit to make sure the events which clear the ws cache have reached the other session Thread.sleep(100L); assertNodeFound("/testRoot/fed2/federated2_1"); } finally { ws1Session.logout(); } }
@Test @FixFor( "MODE-1975" ) public void shouldAllowCloneOnlyIfEntireWsAreUsed() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "fed1"); Session ws1Session = jcrSessionTo("ws1"); try { ws1Session.getWorkspace().clone("default", "/testRoot", "/testRoot", true); fail("Should only be able to clone between workspaces if the entire workspace is used"); } catch (RepositoryException e) { // expected if (print) { e.printStackTrace(); } } finally { ws1Session.logout(); } }