@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 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 = 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(); }
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( expected = IllegalArgumentException.class ) public void shouldNotRemoveProjectionUsingRootPath() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "federated1"); federationManager.removeProjection("/"); }
@Test( expected = PathNotFoundException.class ) public void shouldNotRemoveProjectionIfPathInvalid() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "federated1"); federationManager.removeProjection("/testRoot/federated"); }
@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 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"); }
@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 @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 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 public void shouldCreateProjectionWithoutAlias() throws Exception { // link the first external document federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, null); assertEquals(1, testRoot.getNodes().getSize()); Node doc1Federated = assertNodeFound("/testRoot" + MockConnector.DOC1_LOCATION); assertEquals(testRoot.getIdentifier(), doc1Federated.getParent().getIdentifier()); assertEquals("a string", doc1Federated.getProperty("federated1_prop1").getString()); assertEquals(12, doc1Federated.getProperty("federated1_prop2").getLong()); }
@Test @FixFor( "MODE-1977" ) public void shouldAllowMoveIfSourceIsNotFederatedAndTargetIsNotFederated() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "fed1"); ((Node)session.getRootNode()).addNode("testRoot2").addNode("a"); session.save(); session.move("/testRoot2", "/testRoot"); session.save(); assertNodeFound("/testRoot[1]/fed1"); assertNodeFound("/testRoot[2]/a"); }
@Test @FixFor( "MODE-1964" ) public void shouldSendRemovedPropertiesToConnector() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "federated1"); Node doc1Federated = session.getNode("/testRoot/federated1"); Property doc1FederatedProperty = doc1Federated.getProperty("federated1_prop2"); doc1FederatedProperty.remove(); session.save(); try { ((Node)session.getNode("/testRoot/federated1")).getProperty("federated1_prop2"); fail("Property was not removed by connector"); } catch (PathNotFoundException e) { // exception } }
@BeforeClass public static void beforeAll() throws Exception { initTestDatabase(); RepositoryConfiguration config = RepositoryConfiguration.read("config/repo-config-jdbc-meta-federation.json"); startRepository(config); Session session = getSession(); Node testRoot = session.getRootNode().addNode("testRoot"); session.save(); FederationManager fedMgr = session.getWorkspace().getFederationManager(); fedMgr.createProjection(testRoot.getPath(), "jdbc-meta", "/", "database"); }
@Test @FixFor( "MODE-1975" ) public void shouldNotAllowCloneWithinTheSameWs() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "fed1"); try { jcrSession().getWorkspace().clone(jcrSession().getWorkspace().getName(), "/testRoot", "/testRoot1", false); fail("Should not be able to clone in the same ws if external nodes are involved"); } catch (RepositoryException e) { // expected if (print) { e.printStackTrace(); } } }
@Test public void shouldRemoveExternalNode() throws Exception { federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC1_LOCATION, "federated1"); Node doc1Federated = session.getNode("/testRoot/federated1"); doc1Federated.addNode("federated1_1", null); session.save(); Node externalNode = session.getNode("/testRoot/federated1/federated1_1"); externalNode.remove(); session.save(); assertNodeNotFound("/testRoot/federated1/federated1_1"); }
@Test public void shouldNotAllowACLsOnExternalNodes() throws Exception { AccessControlManager acm = session.getAccessControlManager(); federationManager.createProjection("/testRoot", SOURCE_NAME, MockConnector.DOC2_LOCATION, "fed1"); session.getNode("/testRoot/fed1"); AccessControlList acl = acl("/testRoot/fed1"); try { acm.setPolicy("/testRoot/fed1", acl); fail("Should not allow ACLs on external nodes"); } catch (RepositoryException e) { // expected } }
@Test(expected = ConstraintViolationException.class) @FixFor( "MODE-2109" ) public void shouldNotAllowProjections() throws Exception { session.getRootNode().addNode("col", "test:smallCollection"); session.save(); session.getWorkspace().getFederationManager().createProjection("/col", "dummy", "/", "dummy"); }