private void assertContentInWorkspace( JcrRepository newRepository, String workspaceName, String... paths) throws RepositoryException { JcrSession session = workspaceName != null ? newRepository.login(workspaceName) : newRepository.login(); try { session.getRootNode(); session.getNode("/Cars"); session.getNode("/Cars/Hybrid"); session.getNode("/Cars/Hybrid/Toyota Prius"); session.getNode("/Cars/Hybrid/Toyota Highlander"); session.getNode("/Cars/Hybrid/Nissan Altima"); session.getNode("/Cars/Sports/Aston Martin DB9"); session.getNode("/Cars/Sports/Infiniti G37"); session.getNode("/Cars/Luxury/Cadillac DTS"); session.getNode("/Cars/Luxury/Bentley Continental"); session.getNode("/Cars/Luxury/Lexus IS350"); session.getNode("/Cars/Utility/Land Rover LR2"); session.getNode("/Cars/Utility/Land Rover LR3"); session.getNode("/Cars/Utility/Hummer H3"); session.getNode("/Cars/Utility/Ford F-150"); session.getNode("/Cars/Utility/Toyota Land Cruiser"); for (String path : paths) { session.getNode(path); } } finally { session.logout(); } }
@Test public void shouldBackupRepositoryWithMultipleWorkspaces() throws Exception { loadContent(); Problems problems = session().getWorkspace().getRepositoryManager().backupRepository(backupDirectory); assertNoProblems(problems); // Make some changes that will not be in the backup ... session().getRootNode().addNode("node-not-in-backup"); session().save(); assertContentInWorkspace(repository(), "default", "/node-not-in-backup"); assertContentInWorkspace(repository(), "ws2"); assertContentInWorkspace(repository(), "ws3"); // Start up a new repository ((LocalEnvironment) environment).setShared(true); RepositoryConfiguration config = RepositoryConfiguration.read("config/restore-repo-config.json").with(environment); JcrRepository newRepository = new JcrRepository(config); try { newRepository.start(); // And restore it from the contents ... JcrSession newSession = newRepository.login(); try { Problems restoreProblems = newSession.getWorkspace().getRepositoryManager().restoreRepository(backupDirectory); assertNoProblems(restoreProblems); } finally { newSession.logout(); } // Check that the node that was added *after* the backup is not there ... assertContentNotInWorkspace(newRepository, "default", "/node-not-in-backup"); // Before we assert the content, create a backup of it (for comparison purposes when // debugging) ... newSession = newRepository.login(); try { Problems backupProblems = newSession.getWorkspace().getRepositoryManager().backupRepository(backupDirectory2); assertNoProblems(backupProblems); } finally { newSession.logout(); } assertWorkspaces(newRepository, "default", "ws2", "ws3"); assertContentInWorkspace(newRepository, null); assertContentInWorkspace(newRepository, "ws2"); assertContentInWorkspace(newRepository, "ws3"); queryContentInWorkspace(newRepository, null); } finally { newRepository.shutdown().get(10, TimeUnit.SECONDS); } }
private void assertContentNotInWorkspace( JcrRepository newRepository, String workspaceName, String... paths) throws RepositoryException { JcrSession session = workspaceName != null ? newRepository.login(workspaceName) : newRepository.login(); try { session.getRootNode(); for (String path : paths) { try { session.getNode(path); fail("Should not have found '" + path + "'"); } catch (PathNotFoundException e) { // expected } } } finally { session.logout(); } }
private void queryContentInWorkspace(JcrRepository newRepository, String workspaceName) throws RepositoryException { JcrSession session = newRepository.login(); try { String statement = "SELECT [car:model], [car:year], [car:msrp] FROM [car:Car] AS car"; Query query = session.getWorkspace().getQueryManager().createQuery(statement, Query.JCR_SQL2); QueryResult results = query.execute(); assertThat(results.getRows().getSize(), is(13L)); } finally { session.logout(); } }
private void assertWorkspaces(JcrRepository newRepository, String... workspaceNames) throws RepositoryException { Set<String> expectedNames = new HashSet<String>(); for (String expectedName : workspaceNames) { expectedNames.add(expectedName); } Set<String> actualNames = new HashSet<String>(); JcrSession session = newRepository.login(); try { for (String actualName : session.getWorkspace().getAccessibleWorkspaceNames()) { actualNames.add(actualName); } } finally { session.logout(); } assertThat(actualNames, is(expectedNames)); }