diff --git a/source/test-java/org/alfresco/Repository01TestSuite.java b/source/test-java/org/alfresco/Repository01TestSuite.java index ab3e29d016..387130018c 100644 --- a/source/test-java/org/alfresco/Repository01TestSuite.java +++ b/source/test-java/org/alfresco/Repository01TestSuite.java @@ -116,11 +116,6 @@ public class Repository01TestSuite extends TestSuite suite.addTest(org.alfresco.repo.audit.AuditTestSuite.suite()); } - static void tests12(TestSuite suite) - { - suite.addTest(org.alfresco.repo.avm.AVMTestSuite.suite()); - } - static void tests13(TestSuite suite) { suite.addTest(new JUnit4TestAdapter(org.alfresco.repo.blog.BlogServiceImplTest.class)); @@ -156,16 +151,6 @@ public class Repository01TestSuite extends TestSuite suite.addTestSuite(org.alfresco.repo.copy.CopyServiceImplTest.class); } - static void tests19(TestSuite suite) // fails if not on own - tests="3" time="5.6" - { - suite.addTestSuite(org.alfresco.repo.deploy.ASRDeploymentTest.class); - } - - static void tests20(TestSuite suite) // fails if not on own - tests="9" time="170.012" - { - suite.addTestSuite(org.alfresco.repo.deploy.DeploymentServiceImplFSTest.class); - } - static void tests21(TestSuite suite) { suite.addTestSuite(org.alfresco.repo.descriptor.DescriptorServiceTest.class); @@ -264,7 +249,6 @@ public class Repository01TestSuite extends TestSuite static void tests36(TestSuite suite) // Fails with previous tests { suite.addTestSuite(org.alfresco.repo.node.getchildren.GetChildrenCannedQueryTest.class); - suite.addTestSuite(org.alfresco.repo.node.index.AVMRemoteSnapshotTrackerTest.class); suite.addTestSuite(org.alfresco.repo.node.index.FullIndexRecoveryComponentTest.class); suite.addTestSuite(org.alfresco.repo.node.index.IndexTransactionTrackerTest.class); } @@ -372,11 +356,6 @@ public class Repository01TestSuite extends TestSuite suite.addTestSuite(org.alfresco.repo.tagging.TaggingServiceImplTest.class); } - static void tests54(TestSuite suite) - { - suite.addTestSuite(org.alfresco.repo.template.AVMTemplateNodeTest.class); - } - static void tests55(TestSuite suite) { suite.addTestSuite(org.alfresco.repo.template.TemplateServiceImplTest.class); diff --git a/source/test-java/org/alfresco/Repository12TestSuite.java b/source/test-java/org/alfresco/Repository12TestSuite.java deleted file mode 100644 index d6902cf5de..0000000000 --- a/source/test-java/org/alfresco/Repository12TestSuite.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2005-2014 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * See {@link RepositoryMisc01TestSuite} - * - * @Author Alan Davis - */ -public class Repository12TestSuite extends TestSuite -{ - public static Test suite() - { - TestSuite suite = new TestSuite(); - Repository01TestSuite.tests12(suite); - return suite; - } -} diff --git a/source/test-java/org/alfresco/Repository19TestSuite.java b/source/test-java/org/alfresco/Repository19TestSuite.java deleted file mode 100644 index 6c2f5ea877..0000000000 --- a/source/test-java/org/alfresco/Repository19TestSuite.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2005-2014 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * See {@link RepositoryMisc01TestSuite} - * - * @Author Alan Davis - */ -public class Repository19TestSuite extends TestSuite -{ - public static Test suite() - { - TestSuite suite = new TestSuite(); - Repository01TestSuite.tests19(suite); - return suite; - } -} diff --git a/source/test-java/org/alfresco/Repository20TestSuite.java b/source/test-java/org/alfresco/Repository20TestSuite.java deleted file mode 100644 index 86bfb64e39..0000000000 --- a/source/test-java/org/alfresco/Repository20TestSuite.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2005-2014 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * See {@link RepositoryMisc01TestSuite} - * - * @Author Alan Davis - */ -public class Repository20TestSuite extends TestSuite -{ - public static Test suite() - { - TestSuite suite = new TestSuite(); - Repository01TestSuite.tests20(suite); - return suite; - } -} diff --git a/source/test-java/org/alfresco/Repository54TestSuite.java b/source/test-java/org/alfresco/Repository54TestSuite.java deleted file mode 100644 index bc201b79d2..0000000000 --- a/source/test-java/org/alfresco/Repository54TestSuite.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2005-2014 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * See {@link RepositoryMisc01TestSuite} - * - * @Author Alan Davis - */ -public class Repository54TestSuite extends TestSuite -{ - public static Test suite() - { - TestSuite suite = new TestSuite(); - Repository01TestSuite.tests54(suite); - return suite; - } -} diff --git a/source/test-java/org/alfresco/repo/avm/AVMChildNamePatternMatchPerformanceTest.java b/source/test-java/org/alfresco/repo/avm/AVMChildNamePatternMatchPerformanceTest.java deleted file mode 100644 index 900acaebcf..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMChildNamePatternMatchPerformanceTest.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.repo.avm; - -import java.util.SortedMap; - -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; -import org.alfresco.service.cmr.avm.AVMNodeDescriptor; -import org.alfresco.test_category.LegacyCategory; -import org.alfresco.util.GUID; -import org.junit.experimental.categories.Category; - -@Category(LegacyCategory.class) -public class AVMChildNamePatternMatchPerformanceTest extends AVMServiceTestBase -{ - - public void test_1000() throws Exception - { - fTransactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback() - { - - public Object execute() throws Throwable - { - try - { - fService.createStore("StagingArea"); - fService.createStore("SandBox"); - - fService.createDirectory("StagingArea:/", "www"); - fService.createLayeredDirectory("StagingArea:/www", "SandBox:/", "www"); - - for (int i = 0; i < 500; i++) - { - String name = GUID.generate(); - if (i % 100 == 0) - { - name = "A" + name; - } - if(name.startsWith("a")) - { - name = "G"+name; - } - fService.createFile("SandBox:/www", name).close(); - } - System.out.println("Create SandBox:/www"); - - - for (int i = 0; i < 500; i++) - { - String name = GUID.generate(); - if (i % 100 == 0) - { - name = "A" + name; - } - if(name.startsWith("a")) - { - name = "G"+name; - } - fService.createFile("StagingArea:/www", name).close(); - } - System.out.println("Create StagingArea:/www"); - - long start = System.nanoTime(); - AVMNodeDescriptor dir = fService.lookup(-1, "SandBox:/www"); - SortedMap result = fService.getDirectoryListing(dir, "A*"); - assertEquals(10, result.size()); - long end = System.nanoTime(); - System.out.println("Pattern in " + ((end - start) / 1000000000.0f)); - } - finally - { - fService.purgeStore("StagingArea"); - fService.purgeStore("SandBox"); - } - return null; - } - }); - - } -} diff --git a/source/test-java/org/alfresco/repo/avm/AVMCrawlTestP.java b/source/test-java/org/alfresco/repo/avm/AVMCrawlTestP.java deleted file mode 100644 index 07e3e5aad6..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMCrawlTestP.java +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . */ - -package org.alfresco.repo.avm; - -import java.util.ArrayList; -import java.util.List; - -import net.sf.acegisecurity.Authentication; - -import org.alfresco.repo.avm.util.BulkLoader; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.test_category.LegacyCategory; -import org.junit.experimental.categories.Category; - - -/** - * Another performance test that runs simultaneous crawlers that - * do operations with locality of reference. - * @author britt - */ -@Category(LegacyCategory.class) -public class AVMCrawlTestP extends AVMServiceTestBase -{ - /* - public void xtestCrawlA() - { - testCrawl(1, - getSourceFolder() + "/org/alfresco/repo/avm/actions", // relative from .../repository - 1, - 30000); // 30 secs - } - */ - - public void testCrawlB() - { - testCrawl(2, - getSourceFolder() + "/org/alfresco/repo/avm/actions", // relative from .../repository - 2, - 30000); // 30 secs - } - - /* - public void xtestCrawlC() - { - testCrawl(10, - getSourceFolder() + "/org/alfresco/repo/avm", // relative from .../repository - 2, - 60000); // 1 min - } - */ - - /* - public void xtestCrawlZ() - { - testCrawl(8, - "source", // relative from .../repository - 2, - 28800000); // 8 hours - } - */ - - /** - * Do the crawl test - * - * @param n Number of threads - * @param fsPath The path in the filesystem to load (tree of stuff) from - * @param m How many multiples of content to start with - * @param runTime Min run time (in msecs) - */ - private void testCrawl(int n, String fsPath, int m, long runTime) - { - try - { - Authentication authentication = AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.SYSTEM_USER_NAME); - try - { - if (m < 1) - { - fail("Must have at least one 1 copy of content"); - } - - BulkLoader loader = new BulkLoader(); - loader.setAvmService(fService); - for (int i = 0; i < m; i++) - { - fService.createStore("d" + i); - loader.recursiveLoad(fsPath, "d" + i + ":/"); - fService.createSnapshot("d" + i, null, null); - } - long startTime = System.currentTimeMillis(); - List crawlers = new ArrayList(); - List threads = new ArrayList(); - for (int i = 0; i < n; i++) - { - crawlers.add(new AVMCrawler(fService, authentication)); - threads.add(new Thread(crawlers.get(i))); - threads.get(i).start(); - } - while (true) - { - try - { - Thread.sleep(5000); - // Check that none of the crawlers has errored out. - for (AVMCrawler crawler : crawlers) - { - if (crawler.getError()) - { - for (AVMCrawler craw : crawlers) - { - craw.setDone(); - } - for (Thread thread : threads) - { - try - { - thread.join(); - } - catch (InterruptedException ie) - { - // Do nothing. - } - } - //fail(); - System.err.println("Crawler error"); - } - } - } - catch (InterruptedException ie) - { - // Do nothing. - } - long now = System.currentTimeMillis(); - if (now - startTime > runTime) - { - break; - } - } - for (AVMCrawler crawler : crawlers) - { - crawler.setDone(); - } - for (Thread thread : threads) - { - try - { - thread.join(); - } - catch (InterruptedException ie) - { - // Do nothing. - } - } - long ops = 0L; - int errorCnt = 0; - for (AVMCrawler crawler : crawlers) - { - ops += crawler.getOpCount(); - errorCnt += (crawler.getError() ? 1 : 0); - } - - long time = System.currentTimeMillis() - startTime; - System.out.println("Ops/Sec: " + (ops * 1000L / time)); - - if (errorCnt > 0) - { - StringBuffer errorStack = new StringBuffer(); - errorStack.append("Crawler errors: ").append(errorCnt).append(" out of ").append(crawlers.size()).append(" are in error state"); - - for (AVMCrawler crawler : crawlers) - { - if (crawler.getError()) - { - errorStack.append("\n\n").append(crawler.getErrorStackTrace()); - } - } - - fail(errorStack.toString()); - } - } - finally - { - for (int i = 0; i < m; i++) - { - if (fService.getStore("d" + i) != null) - { - fService.purgeStore("d" + i); - } - } - } - } - finally - { - AuthenticationUtil.clearCurrentSecurityContext(); - } - } -} diff --git a/source/test-java/org/alfresco/repo/avm/AVMDeploymentAttemptCleanerTest.java b/source/test-java/org/alfresco/repo/avm/AVMDeploymentAttemptCleanerTest.java deleted file mode 100644 index 6b696b2676..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMDeploymentAttemptCleanerTest.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.repo.avm; - - -import junit.framework.TestCase; - -import org.alfresco.repo.importer.ImporterBootstrap; -import org.alfresco.service.ServiceRegistry; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.cmr.search.SearchService; -import org.alfresco.service.transaction.TransactionService; -import org.alfresco.test_category.LegacyCategory; -import org.junit.experimental.categories.Category; -import org.springframework.context.ApplicationContext; - -/** - * @see org.alfresco.repo.avm.AVMDeploymentAttemptCleaner - * - * @author gavinc - */ -@Category(LegacyCategory.class) -public class AVMDeploymentAttemptCleanerTest extends TestCase -{ - private static ApplicationContext ctx = AVMTestSuite.getContext(); - - private AVMDeploymentAttemptCleaner cleaner; - - @Override - public void setUp() throws Exception - { - ServiceRegistry serviceRegistry = (ServiceRegistry) ctx.getBean("ServiceRegistry"); - ImporterBootstrap importerBootstrap = (ImporterBootstrap)ctx.getBean("spacesBootstrap"); - NodeService nodeService = serviceRegistry.getNodeService(); - SearchService searchService = serviceRegistry.getSearchService(); - TransactionService transactionService = serviceRegistry.getTransactionService(); - this.cleaner = new AVMDeploymentAttemptCleaner(); - this.cleaner.setNodeService(nodeService); - this.cleaner.setSearchService(searchService); - this.cleaner.setTransactionService(transactionService); - this.cleaner.setImporterBootstrap(importerBootstrap); -// this.cleaner.setMaxAge(30); - } - - public void testProcessor() throws Exception - { - this.cleaner.execute(); - } -} diff --git a/source/test-java/org/alfresco/repo/avm/AVMDiffPerformanceTest.java b/source/test-java/org/alfresco/repo/avm/AVMDiffPerformanceTest.java deleted file mode 100644 index 406a60219d..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMDiffPerformanceTest.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . */ - -package org.alfresco.repo.avm; - -import java.util.List; - -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; -import org.alfresco.service.cmr.avmsync.AVMDifference; -import org.alfresco.test_category.LegacyCategory; -import org.alfresco.util.GUID; -import org.junit.experimental.categories.Category; - -@Category(LegacyCategory.class) -public class AVMDiffPerformanceTest extends AVMServiceTestBase -{ - public void testSetup() throws Exception - { - super.testSetup(); - } - - public void test_1000() throws Exception - { - runTest(1000); - } - - public void xtest_2000() throws Exception - { - runTest(2000); - } - - /* - public void xtest_10000() throws Exception - { - runTest(10000); - } - */ - - private void runTest(final int cnt) throws Exception - { - fTransactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback() { - - public Object execute() throws Throwable - { - try - { - fService.createStore("StagingArea"); - fService.createStore("SandBox"); - - fService.createDirectory("StagingArea:/", "www"); - fService.createDirectory("StagingArea:/www", "test"); - fService.createLayeredDirectory("StagingArea:/www", "SandBox:/", "www"); - - long start = System.nanoTime(); - for(int i = 0; i < cnt; i++) - { - String name = GUID.generate(); - fService.createFile("SandBox:/www", name).close(); - } - long end = System.nanoTime(); - System.out.println("Create SandBox:/www in "+( (end-start)/1000000000.0f)); - - start = System.nanoTime(); - for(int i = 0; i < cnt; i++) - { - String name = GUID.generate(); - fService.createFile("SandBox:/www/test", name).close(); - } - end = System.nanoTime(); - System.out.println("Create SandBox:/www/test in "+( (end-start)/1000000000.0f)); - - start = System.nanoTime(); - for(int i = 0; i < cnt; i++) - { - String name = GUID.generate(); - fService.createFile("StagingArea:/www", name).close(); - } - end = System.nanoTime(); - System.out.println("Create StagingArea:/www in "+( (end-start)/1000000000.0f)); - - start = System.nanoTime(); - for(int i = 0; i < cnt; i++) - { - String name = GUID.generate(); - fService.createFile("StagingArea:/www/test", name).close(); - } - end = System.nanoTime(); - System.out.println("Create StagingArea:/www/test in "+( (end-start)/1000000000.0f)); - - start = System.nanoTime(); - List diffs = fSyncService.compare(-1, "SandBox:/www", -1, "StagingArea:/www", null); - end = System.nanoTime(); - System.out.println("Diff in "+( (end-start)/1000000000.0f)); - - assertEquals(cnt*2, diffs.size()); - } - finally - { - fService.purgeStore("StagingArea"); - fService.purgeStore("SandBox"); - } - return null; - }}); - - } -} \ No newline at end of file diff --git a/source/test-java/org/alfresco/repo/avm/AVMExpiredContentTest.java b/source/test-java/org/alfresco/repo/avm/AVMExpiredContentTest.java deleted file mode 100644 index f6357ca905..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMExpiredContentTest.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.repo.avm; - -import junit.framework.TestCase; - -import org.alfresco.service.ServiceRegistry; -import org.alfresco.service.cmr.avm.AVMService; -import org.alfresco.service.cmr.avmsync.AVMSyncService; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.cmr.search.SearchService; -import org.alfresco.service.cmr.security.PermissionService; -import org.alfresco.service.cmr.security.PersonService; -import org.alfresco.service.cmr.workflow.WorkflowService; -import org.alfresco.service.transaction.TransactionService; -import org.alfresco.test_category.LegacyCategory; -import org.junit.experimental.categories.Category; -import org.springframework.context.ApplicationContext; - -/** - * @see org.alfresco.repo.avm.AVMEXpiredContentProcessor - * - * @author gavinc - */ -@Category(LegacyCategory.class) -public class AVMExpiredContentTest extends TestCase -{ - private static ApplicationContext ctx = AVMTestSuite.getContext(); - - private AVMExpiredContentProcessor processor; - - @Override - public void setUp() throws Exception - { - ServiceRegistry serviceRegistry = (ServiceRegistry) ctx.getBean("ServiceRegistry"); - AVMService avmService = serviceRegistry.getAVMService(); - AVMSyncService avmSyncService = serviceRegistry.getAVMSyncService(); - NodeService nodeService = serviceRegistry.getNodeService(); - PermissionService permissionService = serviceRegistry.getPermissionService(); - PersonService personService = serviceRegistry.getPersonService(); - TransactionService transactionService = serviceRegistry.getTransactionService(); - WorkflowService workflowService = serviceRegistry.getWorkflowService(); - SearchService searchService = serviceRegistry.getSearchService(); - - // construct the test processor - this.processor = new AVMExpiredContentProcessor(); - this.processor.setAvmService(avmService); - this.processor.setAvmSyncService(avmSyncService); - this.processor.setNodeService(nodeService); - this.processor.setPermissionService(permissionService); - this.processor.setPersonService(personService); - this.processor.setTransactionService(transactionService); - this.processor.setWorkflowService(workflowService); - this.processor.setSearchService(searchService); - } - - public void testProcessor() throws Exception - { - this.processor.execute(); - } -} diff --git a/source/test-java/org/alfresco/repo/avm/AVMFileFolderPerformanceTester.java b/source/test-java/org/alfresco/repo/avm/AVMFileFolderPerformanceTester.java deleted file mode 100644 index e2b8617d0c..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMFileFolderPerformanceTester.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.repo.avm; - -import org.alfresco.repo.model.filefolder.FileFolderPerformanceTester; -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.cmr.repository.StoreRef; -import org.alfresco.test_category.LegacyCategory; -import org.junit.experimental.categories.Category; - -/** - * @see FileFolderPerformanceTester - */ -@Category(LegacyCategory.class) -public class AVMFileFolderPerformanceTester extends FileFolderPerformanceTester -{ - @Override - protected NodeService getNodeService() - { - // note: vanilla AVM stores are defined as indexed by default, hence - // use "avmLockingAwareNodeService" for now (which, unlike "avmNodeService", is also indexing aware) - // so that index is created when store is created (else config check will fail on restart) - return (NodeService)ctx.getBean("avmLockingAwareNodeService"); - } - - protected NodeRef getOrCreateRootFolder() - { - RetryingTransactionCallback callback = new RetryingTransactionCallback() - { - public NodeRef execute() throws Throwable - { - String storeName = "AVMFileFolderPerformanceTester-"+System.currentTimeMillis(); - StoreRef storeRef = nodeService.createStore(StoreRef.PROTOCOL_AVM, storeName); - return nodeService.getRootNode(storeRef); - } - }; - return retryingTransactionHelper.doInTransaction(callback); - } -} diff --git a/source/test-java/org/alfresco/repo/avm/AVMNodeConverterTest.java b/source/test-java/org/alfresco/repo/avm/AVMNodeConverterTest.java deleted file mode 100644 index 24ec1f5bad..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMNodeConverterTest.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . */ - -package org.alfresco.repo.avm; - -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.test_category.LegacyCategory; -import org.alfresco.util.Pair; -import org.junit.experimental.categories.Category; - -import junit.framework.TestCase; - -/** - * Tester of the converter from NodeRef, StoreRef space to AVM space. - * @author britt - */ -@Category(LegacyCategory.class) -public class AVMNodeConverterTest extends TestCase -{ - /** - * Test Going betwwen a NodeRef and a version, path pair. - */ - public void testTranslate() - { - String avmPath = "main:/"; - int version = 2; - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(version, avmPath); - System.out.println(nodeRef); - Pair backOut = AVMNodeConverter.ToAVMVersionPath(nodeRef); - assertEquals(2, backOut.getFirst().intValue()); - assertEquals(avmPath, backOut.getSecond()); - avmPath = "main:/fista/mista/wisticuff"; - version = -1; - nodeRef = AVMNodeConverter.ToNodeRef(version, avmPath); - System.out.println(nodeRef); - backOut = AVMNodeConverter.ToAVMVersionPath(nodeRef); - assertEquals(-1, backOut.getFirst().intValue()); - assertEquals(avmPath, backOut.getSecond()); - } -} diff --git a/source/test-java/org/alfresco/repo/avm/AVMScaleTestP.java b/source/test-java/org/alfresco/repo/avm/AVMScaleTestP.java deleted file mode 100644 index 74d6b3ca77..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMScaleTestP.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ - -package org.alfresco.repo.avm; - -import org.alfresco.repo.avm.util.BulkLoader; -import org.alfresco.repo.avm.util.BulkReader; -import org.alfresco.test_category.LegacyCategory; -import org.junit.experimental.categories.Category; - -/** - * Test of scaling out to large numbers of files. - * @author britt - */ -@Category(LegacyCategory.class) -public class AVMScaleTestP extends AVMServiceTestBase -{ - public void testScaleA() - { - testScaling(1, - getSourceFolder() + "/org/alfresco/repo/avm/actions", // relative from .../repository - 1); - } - - public void testScaleB() - { - testScaling(2, - getSourceFolder() + "/org/alfresco/repo/avm", // relative from .../repository - 2); - } - - /* - public void xtestScaleZ() - { - testScaling(250, - "/Users/britt/hibernate-3.1", - 10); - } - */ - - /** - * Do the scale test - * - * @param n Number of bulkloads to do - * @param fsPath The path in the filesystem to load (tree of stuff) from - * @param futzCount The number of post snapshot modifications to make after each load - */ - private void testScaling(int n, String fsPath, int futzCount) - { - try - { - BulkLoader loader = new BulkLoader(); - loader.setAvmService(fService); - loader.setPropertyCount(50); - BulkReader reader = new BulkReader(); - reader.setAvmService(fService); - long lastTime = System.currentTimeMillis(); - for (int i = 0; i < n; i++) - { - System.out.println("Round " + (i + 1)); - fService.createStore("store" + i); - loader.recursiveLoad(fsPath, "store" + i + ":/"); - fService.createSnapshot("store" + i, null, null); - long now = System.currentTimeMillis(); - System.out.println("Load Time: " + (now - lastTime) + "ms"); - lastTime = now; - reader.recursiveFutz("store" + i, "store" + i + ":/", futzCount); - now = System.currentTimeMillis(); - System.out.println("Read Time: " + (now - lastTime) + "ms"); - System.out.flush(); - lastTime = now; - } - } - finally - { - for (int i = 0; i < n; i++) - { - if (fService.getStore("store" + i) != null) - { - fService.purgeStore("store" + i); - } - } - } - } -} diff --git a/source/test-java/org/alfresco/repo/avm/AVMServiceConcurrentTest.java b/source/test-java/org/alfresco/repo/avm/AVMServiceConcurrentTest.java deleted file mode 100644 index 6a5ac094b8..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMServiceConcurrentTest.java +++ /dev/null @@ -1,659 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ - -package org.alfresco.repo.avm; - -import java.util.List; -import java.util.SortedMap; - -import javax.transaction.UserTransaction; - -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; -import org.alfresco.service.cmr.avm.AVMNodeDescriptor; -import org.alfresco.service.cmr.avmsync.AVMDifference; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.cmr.repository.StoreRef; -import org.alfresco.service.cmr.search.ResultSet; -import org.alfresco.service.cmr.search.ResultSetRow; -import org.alfresco.service.cmr.search.SearchService; -import org.alfresco.service.namespace.NamespaceService; -import org.alfresco.test_category.LegacyCategory; -import org.junit.experimental.categories.Category; - -/** - * AVM concurrency and search - * - * @author andyh, janv - */ -@Category(LegacyCategory.class) -public class AVMServiceConcurrentTest extends AVMServiceTestBase -{ - public void testSetup() throws Exception - { - super.testSetup(); - } - - public void test_CreateDelete() throws Exception - { - int threads= 4; - int loops = 10; - - int snapshotsPerLoop = 4; - - assertEquals(1, fService.getStoreVersions("main").size()); - - fService.createDirectory("main:/", "test"); - - int startVersion = fService.createSnapshot("main", null, null).get("main"); - - assertEquals(2, fService.getStoreVersions("main").size()); - - assertEquals(0, fService.getDirectoryListing(-1, "main:/test").size()); - - UserTransaction testTX = fTransactionService.getUserTransaction(); - testTX.begin(); - - StoreRef storeRef = AVMNodeConverter.ToStoreRef("main"); - SearchService searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef("main"), true); - ResultSet results = searchService.query(storeRef, "lucene", "PATH:\"/test/*\""); - assertEquals(0, results.length()); - results.close(); - - testTX.commit(); - - Thread runner = null; - for (int i = 0; i < threads; i++) - { - runner = new Nester("Concurrent-" + i, runner, false, snapshotsPerLoop, Nester.Mode.CREATE, loops); - } - - if (runner != null) - { - runner.start(); - - try - { - runner.join(); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - } - - System.out.println("Snapshot count: "+fService.getStoreVersions("main").size()); - - SortedMap listing = fService.getDirectoryListing(-1, "main:/test"); - assertEquals(loops, listing.size()); - - for(AVMNodeDescriptor node : listing.values()) - { - System.out.println("Listed: "+node.getPath()+" "+node.getVersionID()); - } - List diffs = fSyncService.compare(startVersion, "main:/", -1, "main:/", null); - assertEquals(loops, diffs.size()); - for(AVMDifference diff : diffs) - { - AVMNodeDescriptor desc = fService.lookup(diff.getDestinationVersion(), diff.getDestinationPath(), true); - assertFalse(desc.isDeleted()); - } - - testTX = fTransactionService.getUserTransaction(); - testTX.begin(); - try - { - - searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef("main"), true); - results = searchService.query(storeRef, "lucene", "PATH:\"/test/*\""); - for(ResultSetRow row : results) - { - System.out.println("Found: "+row.getNodeRef()); - } - assertEquals(loops, results.length()); - results.close(); - - } - finally - { - try { testTX.commit(); } catch (Exception e) {} - } - - // delete - - runner = null; - for (int i = 0; i < threads; i++) - { - runner = new Nester("Concurrent-" + i, runner, false, snapshotsPerLoop, Nester.Mode.DELETE, loops); - } - if (runner != null) - { - runner.start(); - - try - { - runner.join(); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - } - - assertEquals(0, fService.getDirectoryListing(-1, "main:/test").size()); - - System.out.println("Snapshot count: "+fService.getStoreVersions("main").size()); - - /* - for(org.alfresco.service.cmr.avm.VersionDescriptor v : fService.getStoreVersions("main")) - { - System.out.println(v); - } - */ - - testTX = fTransactionService.getUserTransaction(); - testTX.begin(); - - searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef("main"), true); - results = searchService.query(storeRef, "lucene", "PATH:\"/test/*\""); - for(ResultSetRow row : results) - { - System.out.println("Found: "+row.getNodeRef()); - } - assertEquals(0, results.length()); - results.close(); - - testTX.commit(); - } - - public synchronized void test_ALF_14979() throws Exception - { - String name = "test" + System.currentTimeMillis(); - - fService.createDirectory("main:/", name); - - // Now create many, many orphans - int peerCount = 1000; - for (int i = 0; i < peerCount; i++) - { - fService.createDirectory("main:/", name + "-" + i); - } - - StoreRef storeRef = AVMNodeConverter.ToStoreRef("main"); - NodeService fNodeService = (NodeService) fContext.getBean("NodeService"); - NodeRef rootNodeRef = fNodeService.getRootNode(storeRef); - - SearchService fSearchService = (SearchService) fContext.getBean("SearchService"); - NamespaceService fNamespaceService = (NamespaceService) fContext.getBean("NamespaceService"); - - // Now look it up - long before = System.nanoTime(); - List nodeRefs = fSearchService.selectNodes( - rootNodeRef, - "/cm:" + name, - null, fNamespaceService, false); - assertEquals("Expected to find a result", 1, nodeRefs.size()); - long after = System.nanoTime(); - System.out.println("Took " + (after-before)/1E6 + "ms to find entry out of " + peerCount); - } - - public void test_ALF_786() throws Exception - { - int threads= 4; - int loops = 10; - - int snapshotsPerLoop = 4; - - fService.createDirectory("main:/", "test"); - - int startVersion = fService.createSnapshot("main", null, null).get("main"); - - assertEquals(0, fService.getDirectoryListing(-1, "main:/test").size()); - - UserTransaction testTX = fTransactionService.getUserTransaction(); - testTX.begin(); - - StoreRef storeRef = AVMNodeConverter.ToStoreRef("main"); - SearchService searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef("main"), true); - ResultSet results = searchService.query(storeRef, "lucene", "PATH:\"/test/*\""); - assertEquals(0, results.length()); - results.close(); - - testTX.commit(); - - // create - - Thread runner = null; - for (int i = 0; i < threads; i++) - { - runner = new Nester("Concurrent-" + i, runner, false, snapshotsPerLoop, Nester.Mode.CREATE, loops); - } - - if (runner != null) - { - runner.start(); - - try - { - runner.join(); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - } - - SortedMap listing = fService.getDirectoryListing(-1, "main:/test"); - assertEquals(loops, listing.size()); - - for(AVMNodeDescriptor node : listing.values()) - { - System.out.println("Listed: "+node.getPath()+" "+node.getVersionID()); - } - List diffs = fSyncService.compare(startVersion, "main:/", -1, "main:/", null); - assertEquals(loops, diffs.size()); - for(AVMDifference diff : diffs) - { - AVMNodeDescriptor desc = fService.lookup(diff.getDestinationVersion(), diff.getDestinationPath(), true); - assertFalse(desc.isDeleted()); - } - - testTX = fTransactionService.getUserTransaction(); - testTX.begin(); - try - { - searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef("main"), true); - results = searchService.query(storeRef, "lucene", "PATH:\"/test/*\""); - for(ResultSetRow row : results) - { - System.out.println("Found: "+row.getNodeRef()); - } - assertEquals(loops, results.length()); - results.close(); - } - finally - { - try { testTX.commit(); } catch (Exception e) {} - } - - // update - - runner = null; - for (int i = 0; i < threads; i++) - { - runner = new Nester("Concurrent-" + i, runner, false, snapshotsPerLoop, Nester.Mode.UPDATE, loops); - } - - if (runner != null) - { - runner.start(); - - try - { - runner.join(); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - } - - testTX = fTransactionService.getUserTransaction(); - testTX.begin(); - - searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef("main"), true); - results = searchService.query(storeRef, "lucene", "PATH:\"/test/*\""); - for(ResultSetRow row : results) - { - System.out.println("Found: "+row.getNodeRef()); - } - assertEquals(loops, results.length()); - - results.close(); - testTX.commit(); - - // delete - - runner = null; - for (int i = 0; i < threads; i++) - { - runner = new Nester("Concurrent-" + i, runner, false, snapshotsPerLoop, Nester.Mode.DELETE, loops); - } - if (runner != null) - { - runner.start(); - - try - { - runner.join(); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - } - - assertEquals(0, fService.getDirectoryListing(-1, "main:/test").size()); - - testTX = fTransactionService.getUserTransaction(); - testTX.begin(); - - searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef("main"), true); - results = searchService.query(storeRef, "lucene", "PATH:\"/test/*\""); - for(ResultSetRow row : results) - { - System.out.println("Found: "+row.getNodeRef()); - } - assertEquals(0, results.length()); - results.close(); - - testTX.commit(); - - // recreate - - runner = null; - for (int i = 0; i < threads; i++) - { - runner = new Nester("Concurrent-" + i, runner, false, snapshotsPerLoop, Nester.Mode.CREATE, loops); - } - if (runner != null) - { - runner.start(); - - try - { - runner.join(); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - } - - testTX = fTransactionService.getUserTransaction(); - testTX.begin(); - - searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef("main"), true); - results = searchService.query(storeRef, "lucene", "PATH:\"/test/*\""); - for(ResultSetRow row : results) - { - System.out.println("Found: "+row.getNodeRef()); - } - assertEquals(loops, results.length()); - results.close(); - - testTX.commit(); - - // move - - runner = null; - for (int i = 0; i < threads; i++) - { - runner = new Nester("Concurrent-" + i, runner, false, snapshotsPerLoop, Nester.Mode.MOVE, loops); - } - if (runner != null) - { - runner.start(); - - try - { - runner.join(); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - } - - testTX = fTransactionService.getUserTransaction(); - testTX.begin(); - - searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef("main"), true); - results = searchService.query(storeRef, "lucene", "PATH:\"/test/*\""); - for(ResultSetRow row : results) - { - System.out.println("Found: "+row.getNodeRef()); - } - assertEquals(loops, results.length()); - results.close(); - - testTX.commit(); - } - - public void xtest_ALF_786_PLUS() throws Exception - { - int startVersion; - UserTransaction testTX = fTransactionService.getUserTransaction(); - testTX.begin(); - fService.createDirectory("main:/", "test"); - startVersion = fService.createSnapshot("main", null, null).get("main"); - - testTX.commit(); - testTX = fTransactionService.getUserTransaction(); - testTX.begin(); - - StoreRef storeRef = AVMNodeConverter.ToStoreRef("main"); - SearchService searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef("main"), true); - ResultSet results = searchService.query(storeRef, "lucene", "PATH:\"/test/*\""); - assertEquals(0, results.length()); - results.close(); - testTX.commit(); - - Thread runner = null; - - for (int i = 0; i < 10; i++) - { - runner = new Nester("Concurrent-" + i, runner, true, 10, Nester.Mode.CREATE, 10 ); - } - if (runner != null) - { - runner.start(); - - try - { - runner.join(); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - } - - testTX = fTransactionService.getUserTransaction(); - testTX.begin(); - // snap - testTX.commit(); - - testTX = fTransactionService.getUserTransaction(); - testTX.begin();; - SortedMap listing = fService.getDirectoryListing(-1, "main:/test"); - assertEquals(100, listing.size()); - for(AVMNodeDescriptor node : listing.values()) - { - System.out.println("Listed: "+node.getPath()+" "+node.getVersionID()); - } - List diffs = fSyncService.compare(startVersion, "main:/", -1, "main:/", null); - assertEquals(100, diffs.size()); - for(AVMDifference diff : diffs) - { - AVMNodeDescriptor desc = fService.lookup(diff.getDestinationVersion(), diff.getDestinationPath(), true); - assertFalse(desc.isDeleted()); - } - - - - searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef("main"), true); - results = searchService.query(storeRef, "lucene", "PATH:\"/test/*\""); - for(ResultSetRow row : results) - { - System.out.println("Found: "+row.getNodeRef()); - } - assertEquals(100, results.length()); - results.close(); - testTX.commit(); - } - - static class Nester extends Thread - { - enum Mode {CREATE, UPDATE, DELETE, MOVE}; - - Thread waiter; - - int i; - - boolean multiThread; - - int snapshotCount; - - Mode mode; - - int loopCount; - - Nester(String name, Thread waiter, boolean multiThread, int snapshotCount, Mode mode, int loopCount) - { - super(name); - this.setDaemon(true); - this.waiter = waiter; - this.multiThread = multiThread; - this.snapshotCount = snapshotCount; - this.mode = mode; - this.loopCount = loopCount; - } - - public void run() - { - fAuthenticationComponent.setSystemUserAsCurrentUser(); - if (waiter != null) - { - waiter.start(); - } - try - { - //System.out.println("Start " + this.getName()); - - for(i = 0; i < loopCount; i++) - { - RetryingTransactionCallback create = new RetryingTransactionCallback() - { - public Void execute() throws Throwable - { - System.out.println("Create file: " + "main:/test/" + getName()+"-"+i); - - fService.createFile("main:/test", getName()+"-"+i).close(); - - return null; - } - }; - RetryingTransactionCallback update = new RetryingTransactionCallback() - { - public Void execute() throws Throwable - { - System.out.println("Update file mime type: " + "main:/test/" + getName()+"-"+i); - - fService.setMimeType("main:/test/"+getName()+"-"+i, "text/plain"); - - return null; - } - }; - RetryingTransactionCallback delete = new RetryingTransactionCallback() - { - public Void execute() throws Throwable - { - System.out.println("Remove file: " + "main:/test/" + getName()+"-"+i); - - fService.removeNode("main:/test/"+getName()+"-"+i); - - return null; - } - }; - RetryingTransactionCallback move = new RetryingTransactionCallback() - { - public Void execute() throws Throwable - { - System.out.println("Rename file: " + "main:/test/" + getName()+"-"+i); - - fService.rename("main:/test/", getName()+"-"+i, "main:/test/", "MOVED-"+getName()+"-"+i); - - return null; - } - }; - if(multiThread || (waiter == null)) - { - // only one thread creates for 786 - switch(mode) - { - case CREATE: - fRetryingTransactionHelper.doInTransaction(create); - break; - case UPDATE: - fRetryingTransactionHelper.doInTransaction(update); - break; - case DELETE: - fRetryingTransactionHelper.doInTransaction(delete); - break; - case MOVE: - fRetryingTransactionHelper.doInTransaction(move); - break; - default: - } - - } - - RetryingTransactionCallback snap = new RetryingTransactionCallback() - { - public Void execute() throws Throwable - { - //System.out.println("Snap: main:/"); - - fService.createSnapshot("main", null, null); - - return null; - } - }; - for(int s = 0; s < snapshotCount; s++) - { - fRetryingTransactionHelper.doInTransaction(snap); - } - } - - //System.out.println("End " + this.getName()); - } - catch (Exception e) - { - System.out.println("End " + this.getName() + " with error " + e.getMessage()); - e.printStackTrace(); - } - finally - { - fAuthenticationComponent.clearCurrentSecurityContext(); - } - if (waiter != null) - { - try - { - waiter.join(); - System.out.println("Waited for " + waiter.getName()+" by "+this.getName()); - } - catch (InterruptedException e) - { - } - } - } - } -} diff --git a/source/test-java/org/alfresco/repo/avm/AVMServiceIndexTest.java b/source/test-java/org/alfresco/repo/avm/AVMServiceIndexTest.java deleted file mode 100644 index bbea19a3a4..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMServiceIndexTest.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . */ - -package org.alfresco.repo.avm; - -import javax.transaction.UserTransaction; - -import org.alfresco.repo.search.IndexMode; -import org.alfresco.repo.search.Indexer; -import org.alfresco.repo.search.impl.lucene.AVMLuceneIndexer; -import org.alfresco.service.cmr.repository.StoreRef; -import org.alfresco.service.cmr.search.ResultSet; -import org.alfresco.service.cmr.search.SearchService; -import org.alfresco.test_category.LegacyCategory; -import org.alfresco.util.TriggerBeanSPI; -import org.junit.experimental.categories.Category; -import org.springframework.beans.factory.DisposableBean; -import org.springframework.beans.factory.InitializingBean; - -/** - * Test AVMService indexing - */ -@Category(LegacyCategory.class) -public class AVMServiceIndexTest extends AVMServiceTestBase -{ - /* - private final static long SLEEP = 180000; // 3 mins (default, where startDelay & repeatInterval are both 1 min) - private final static long START_DELAY_MSECS = 1000 * 60; - private final static long REPEAT_INTERVAL_MSECS = 1000 * 60; - */ - - private final static long SLEEP = 20000; - private final static long START_DELAY_MSECS = 2000; - private final static long REPEAT_INTERVAL_MSECS = 2000; - - @Override - protected void setUp() throws Exception - { - super.setUp(); - - // - // override default schedule to speed up this unit test (by reducing the sleep time) - // - DisposableBean dispBean = (DisposableBean)fContext.getBean("ftsIndexerTrigger"); - InitializingBean initBean = (InitializingBean)fContext.getBean("ftsIndexerTrigger"); - TriggerBeanSPI triggerBeanSPI = (TriggerBeanSPI)fContext.getBean("ftsIndexerTrigger"); - - dispBean.destroy(); // unschedule - - triggerBeanSPI.setStartDelay(START_DELAY_MSECS); - triggerBeanSPI.setRepeatInterval(REPEAT_INTERVAL_MSECS); - - initBean.afterPropertiesSet(); // re-schedule - } - - /** - * Test async indexing. - * - * @throws Exception - */ - public void testAsyncIndex() throws Exception - { - try - { - // Make sure the slate is clean ... - UserTransaction tx = fTransactionService.getUserTransaction(); - tx.begin(); - if (fService.getStore("avmAsynchronousTest") != null) - { - assertTrue(fIndexingInterceptor.hasIndexBeenCreated("avmAsynchronousTest")); - fService.purgeStore("avmAsynchronousTest"); - assertTrue(fIndexingInterceptor.hasIndexBeenCreated("avmAsynchronousTest")); - assertFalse(fIndexingInterceptor.hasIndexBeenCreated("bananaStoreWoof")); - } - else - { - assertFalse(fIndexingInterceptor.hasIndexBeenCreated("avmAsynchronousTest")); - } - StoreRef storeRef = AVMNodeConverter.ToStoreRef("avmAsynchronousTest"); - Indexer indexer = fIndexerAndSearcher.getIndexer(storeRef); - if (indexer instanceof AVMLuceneIndexer) - { - AVMLuceneIndexer avmIndexer = (AVMLuceneIndexer) indexer; - avmIndexer.deleteIndex("avmAsynchronousTest", IndexMode.SYNCHRONOUS); - } - tx.commit(); - - tx = fTransactionService.getUserTransaction(); - tx.begin(); - assertEquals(-1, fIndexingInterceptor.getLastIndexedSnapshot("bananaStoreWoof")); - assertEquals(-1, fIndexingInterceptor.getLastIndexedSnapshot("avmAsynchronousTest")); - tx.commit(); - - // TODO: Suspend and resume indexing in case we are really unlucky and hit an index before we expect it. - - SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true); - ResultSet results; - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(0, results.length()); - results.close(); - - fService.createStore("avmAsynchronousTest"); - - tx = fTransactionService.getUserTransaction(); - tx.begin(); - assertEquals(0, fIndexingInterceptor.getLastIndexedSnapshot("avmAsynchronousTest")); - tx.commit(); - - fService.createSnapshot("avmAsynchronousTest", null, null); - - tx = fTransactionService.getUserTransaction(); - tx.begin(); - assertEquals(0, fIndexingInterceptor.getLastIndexedSnapshot("avmAsynchronousTest")); - tx.commit(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(1, results.length()); - results.close(); - - fService.createDirectory("avmAsynchronousTest:/", "a"); - fService.createDirectory("avmAsynchronousTest:/a", "b"); - fService.createDirectory("avmAsynchronousTest:/a/b", "c"); - - tx = fTransactionService.getUserTransaction(); - tx.begin(); - assertEquals(0, fIndexingInterceptor.getLastIndexedSnapshot("avmAsynchronousTest")); - assertTrue(fIndexingInterceptor.isIndexUpToDate("avmAsynchronousTest")); - tx.commit(); - - fService.createSnapshot("avmAsynchronousTest", null, null); - - tx = fTransactionService.getUserTransaction(); - tx.begin(); - assertEquals(1, fIndexingInterceptor.getLastIndexedSnapshot("avmAsynchronousTest")); - assertTrue(fIndexingInterceptor.isIndexUpToDate("avmAsynchronousTest")); - assertFalse(fIndexingInterceptor.isIndexUpToDateAndSearchable("avmAsynchronousTest")); - assertEquals(IndexMode.ASYNCHRONOUS, fIndexingInterceptor.getIndexMode("avmAsynchronousTest")); - assertEquals(IndexMode.SYNCHRONOUS, fIndexingInterceptor.getIndexMode("main")); - assertTrue(fIndexingInterceptor.isSnapshotIndexed("avmAsynchronousTest", 0)); - assertTrue(fIndexingInterceptor.isSnapshotIndexed("avmAsynchronousTest", 1)); - assertFalse(fIndexingInterceptor.isSnapshotIndexed("avmAsynchronousTest", 2)); - tx.commit(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(1, results.length()); - results.close(); - - Thread.sleep(SLEEP); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(4, results.length()); - results.close(); - - tx = fTransactionService.getUserTransaction(); - tx.begin(); - assertEquals(1, fIndexingInterceptor.getLastIndexedSnapshot("avmAsynchronousTest")); - assertTrue(fIndexingInterceptor.isIndexUpToDate("avmAsynchronousTest")); - assertTrue(fIndexingInterceptor.isIndexUpToDateAndSearchable("avmAsynchronousTest")); - tx.commit(); - - fService.purgeStore("avmAsynchronousTest"); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(0, results.length()); - results.close(); - - fService.createStore("avmAsynchronousTest"); - fService.createSnapshot("avmAsynchronousTest", null, null); - fService.createDirectory("avmAsynchronousTest:/", "a"); - fService.createDirectory("avmAsynchronousTest:/a", "b"); - fService.createDirectory("avmAsynchronousTest:/a/b", "c"); - fService.createSnapshot("avmAsynchronousTest", null, null); - fService.purgeStore("avmAsynchronousTest"); - fService.createStore("avmAsynchronousTest"); - fService.createSnapshot("avmAsynchronousTest", null, null); - fService.createDirectory("avmAsynchronousTest:/", "a"); - fService.createDirectory("avmAsynchronousTest:/a", "b"); - fService.createDirectory("avmAsynchronousTest:/a/b", "c"); - fService.createSnapshot("avmAsynchronousTest", null, null); - - Thread.sleep(SLEEP); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(4, results.length()); - results.close(); - } - finally - { - fService.purgeStore("avmAsynchronousTest"); - } - } -} diff --git a/source/test-java/org/alfresco/repo/avm/AVMServiceLocalTest.java b/source/test-java/org/alfresco/repo/avm/AVMServiceLocalTest.java deleted file mode 100644 index e06f585ebf..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMServiceLocalTest.java +++ /dev/null @@ -1,3877 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . */ - -package org.alfresco.repo.avm; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.PrintStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.SortedMap; - -import junit.framework.TestCase; - -import org.alfresco.model.ContentModel; -import org.alfresco.repo.avm.util.RemoteBulkLoader; -import org.alfresco.repo.domain.PropertyValue; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.service.cmr.avm.AVMNodeDescriptor; -import org.alfresco.service.cmr.avm.AVMNotFoundException; -import org.alfresco.service.cmr.avm.AVMStoreDescriptor; -import org.alfresco.service.cmr.avm.VersionDescriptor; -import org.alfresco.service.cmr.avmsync.AVMDifference; -import org.alfresco.service.cmr.avmsync.AVMSyncException; -import org.alfresco.service.cmr.avmsync.AVMSyncService; -import org.alfresco.service.cmr.dictionary.DataTypeDefinition; -import org.alfresco.service.cmr.remote.AVMRemote; -import org.alfresco.service.cmr.security.AuthenticationService; -import org.alfresco.service.namespace.QName; -import org.alfresco.test_category.LegacyCategory; -import org.alfresco.util.NameMatcher; -import org.alfresco.util.Pair; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.junit.experimental.categories.Category; -import org.springframework.context.ApplicationContext; - -/** - * Local unit tests of AVM (AVMSyncService & AVMService) - */ -@Category(LegacyCategory.class) -public class AVMServiceLocalTest extends TestCase -{ - private static Log logger = LogFactory.getLog(AVMServiceLocalTest.class); - - /** - * The application context. - */ - protected static ApplicationContext fContext; - - /** - * The AVMRemote - can be local (AVMRemoteLocal) or remote (AVMRemote) - */ - protected static AVMRemote fService; - - /** - * The AVMSyncService - can be local (AVMSyncService) or remote (AVMSyncServiceRemote) - */ - protected static AVMSyncService fSyncService; - - protected static NameMatcher excluder; - - - @Override - protected void setUp() throws Exception - { - if (fContext == null) - { - // local (embedded) test setup - fContext = AVMTestSuite.getContext(); - fService = (AVMRemote)fContext.getBean("avmRemote"); - fSyncService = (AVMSyncService)fContext.getBean("AVMSyncService"); - excluder = (NameMatcher) fContext.getBean("globalPathExcluder"); - - AuthenticationService authService = (AuthenticationService)fContext.getBean("AuthenticationService"); - authService.authenticate(AuthenticationUtil.getAdminUserName(), "admin".toCharArray()); - } - - if (fService.getStore("main") == null) - { - fService.createStore("main"); - } - if (fService.getStore("layer") == null) - { - fService.createStore("layer"); - } - } - - @Override - protected void tearDown() throws Exception - { - fService.purgeStore("main"); - fService.purgeStore("layer"); - } - - public void testSetup() throws Exception - { - setUp(); - } - - public void testGetAPath() throws Exception - { - try - { - fService.createStore("test2932"); - fService.createDirectory("test2932:/", "a"); - fService.createFile("test2932:/a", "foo.txt").close(); - AVMNodeDescriptor found = fService.lookup(-1, "test2932:/a/foo.txt"); - Pair path = fService.getAPath(found); - assertEquals(path.getSecond(), "test2932:/a/foo.txt"); - explorePaths("test2932:/"); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - finally - { - fService.purgeStore("test2932"); - } - } - - /** - * Do a simple hello world test. - */ - public void testSimple() throws Throwable - { - try - { - List stores = fService.getStores(); - - for (AVMStoreDescriptor store : stores) - { - if (logger.isDebugEnabled()) { logger.debug(store); } - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - protected void explorePaths(String path) throws Exception - { - Map listing = fService.getDirectoryListing(-1, path); - for (Map.Entry entry : listing.entrySet()) - { - Pair childPath = fService.getAPath(entry.getValue()); - if (logger.isDebugEnabled()) { logger.debug(childPath); } - if (entry.getValue().isDirectory()) - { - explorePaths(entry.getValue().getPath()); - } - } - } - - /** - * Test reading and writing. - */ - public void testReadWrite() throws Throwable - { - try - { - // Create a test store. - fService.createStore("test2933"); - // Create a directory. - fService.createDirectory("test2933:/", "a"); - // Write out a file. - OutputStream out = - fService.createFile("test2933:/a", "foo.txt"); - byte [] buff = "This is a plain old text file.\n".getBytes(); - out.write(buff); - buff = "It contains text.\n".getBytes(); - out.write(buff); - out.close(); - // Read back that file. - InputStream in = - fService.getFileInputStream(-1, "test2933:/a/foo.txt"); - buff = new byte[1024]; - assertEquals(49, in.read(buff)); - if (logger.isDebugEnabled()) { logger.debug(new String(buff)); } - assertEquals(-1, in.read(buff)); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("test2933"); - } - } - - /** - * Another test of reading. - */ - public void testRead() throws Throwable - { - try - { - fService.createStore("froo"); - // Create a file. - byte [] buff = new byte[64]; - for (int i = 0; i < 64; i++) - { - buff[i] = (byte)i; - } - OutputStream out = - fService.createFile("froo:/", "foo.dat"); - out.write(buff, 32, 32); - out.close(); - // Read it back in. - InputStream in = - fService.getFileInputStream(-1, "froo:/foo.dat"); - buff = new byte[1024]; - assertEquals(32, in.read(buff)); - in.close(); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("froo"); - } - } - - /** - * Test a call that should return null; - */ - public void testErrorState() throws Throwable - { - try - { - assertNull(fService.lookup(-1, "main:/fizz/fazz")); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - - /** - * Test update to branch - */ - public void testSimpleUpdateBR() throws Throwable - { - try - { - // Create a store. - fService.createStore("froo"); - // Create a directory. - fService.createDirectory("froo:/", "a"); - // Create a file. - fService.createFile("froo:/a", "foo").close(); - // Create another store. - fService.createStore("broo"); - // Create a branch. - fService.createBranch(-1, "froo:/a", "broo:/", "a"); - List diffs = fSyncService.compare(-1, "froo:/a", -1, "broo:/a", null); - assertEquals(0, diffs.size()); - fService.createFile("froo:/a", "bar").close(); - diffs = fSyncService.compare(-1, "froo:/a", -1, "broo:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[froo:/a/bar[-1] > broo:/a/bar[-1]]", diffs.toString()); - // Update. - fSyncService.update(diffs, null, false, false, false, false, "flippy", "Stuff"); - diffs = fSyncService.compare(-1, "froo:/a", -1, "broo:/a", null); - assertEquals(0, diffs.size()); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - finally - { - fService.purgeStore("broo"); - fService.purgeStore("froo"); - } - } - - // - // Test updates to layered directories - // - - public void testSimpleUpdateLD1() throws Throwable - { - try - { - List diffs = fSyncService.compare(-1, "main:/", -1, "main:/", null); - assertEquals(0, diffs.size()); - - diffs = fSyncService.compare(-1, "layer:/", -1, "main:/", null); - assertEquals(0, diffs.size()); - - // create file f-a in main root dir - fService.createFile("main:/", "f-a").close(); - - diffs = fSyncService.compare(-1, "layer:/", -1, "main:/", null); - assertEquals("[layer:/f-a[-1] < main:/f-a[-1]]", diffs.toString()); - assertEquals(1, diffs.size()); - - fService.createLayeredDirectory("main:/", "layer:/", "layer"); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(0, diffs.size()); - - // create file f-b in main root dir - fService.createFile("main:/", "f-b").close(); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(0, diffs.size()); - - // edit file f-b in layer - fService.getFileOutputStream("layer:/layer/f-b").close(); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals("[layer:/layer/f-b[-1] > main:/f-b[-1]]", diffs.toString()); - assertEquals(1, diffs.size()); - - // update main from layer - fSyncService.update(diffs, null, false, false, false, false, null, null); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(0, diffs.size()); - } - catch (Throwable t) - { - t.printStackTrace(); - throw t; - } - } - - public void testSimpleUpdateLD2() throws Throwable - { - try - { - // create directories base/d-a and file f-aa in main - fService.createDirectory("main:/", "base"); - fService.createDirectory("main:/base", "d-a"); - fService.createFile("main:/base/d-a", "f-aa").close(); - - List diffs = fSyncService.compare(-1, "layer" + ":/", -1, "main:/", null); - assertEquals("[layer:/base[-1] < main:/base[-1]]", diffs.toString()); - assertEquals(1, diffs.size()); - - fService.createLayeredDirectory("main:/base", "layer:/", "layer-to-base"); - - diffs = fSyncService.compare(-1, "layer:/layer-to-base", -1, "main:/base", null); - assertEquals(0, diffs.size()); - - // edit file f-aa in main - fService.getFileOutputStream("main:/base/d-a/f-aa").close(); - - diffs = fSyncService.compare(-1, "layer:/layer-to-base", -1, "main:/base", null); - assertEquals(0, diffs.size()); - - // edit file f-aa in layer - fService.getFileOutputStream("layer:/layer-to-base/d-a/f-aa").close(); - - diffs = fSyncService.compare(-1, "layer:/layer-to-base", -1, "main:/base", null); - assertEquals("[layer:/layer-to-base/d-a/f-aa[-1] > main:/base/d-a/f-aa[-1]]", diffs.toString()); - assertEquals(1, diffs.size()); - - // update main from layer - fSyncService.update(diffs, null, false, false, false, false, null, null); - - diffs = fSyncService.compare(-1, "layer:/layer-to-base", -1, "main:/base", null); - assertEquals(0, diffs.size()); - } - catch (Throwable t) - { - t.printStackTrace(); - throw t; - } - } - - public void testSimpleUpdateLD3() throws Throwable - { - try - { - fService.createDirectory("main:/", "base"); - - fService.createLayeredDirectory("main:/base", "layer:/", "layer-to-base"); - - List diffs = fSyncService.compare(-1, "layer:/layer-to-base", -1, "main:/base", null); - assertEquals(0, diffs.size()); - - // create directory d-a and file f-aa in layer - fService.createDirectory("layer:/layer-to-base", "d-a"); - fService.createFile("layer:/layer-to-base/d-a", "f-aa").close(); - - diffs = fSyncService.compare(-1, "layer:/layer-to-base", -1, "main:/base", null); - assertEquals("[layer:/layer-to-base/d-a[-1] > "+"main:/base/d-a[-1]]", diffs.toString()); - assertEquals(1, diffs.size()); - - // update main from layer - fSyncService.update(diffs, null, false, false, false, false, null, null); - - diffs = fSyncService.compare(-1, "layer:/layer-to-base", -1, "main:/base", null); - assertEquals(0, diffs.size()); - } - catch (Throwable t) - { - t.printStackTrace(); - throw t; - } - } - - public void testSimpleUpdateLD4() throws Exception - { - try - { - fService.createLayeredDirectory("main:/", "layer:/", "layer"); - - // create directory b and file foo in layer - fService.createDirectory("layer:/layer", "b"); - fService.createFile("layer:/layer/b", "foo").close(); - - List diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(1, diffs.size()); - assertEquals("[layer:/layer/b[-1] > main:/b[-1]]", diffs.toString()); - - fService.createSnapshot("layer", null, null); - - fSyncService.update(diffs, null, false, false, false, false, null, null); - - fService.createSnapshot("main", null, null); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(0, diffs.size()); - - fSyncService.flatten("layer:/layer", "main:/"); - - fService.createStore("layer2"); - fService.createLayeredDirectory("layer:/layer", "layer2:/", "layer"); - - // create directory c and file foo in layer2 - fService.createDirectory("layer2:/layer/", "c"); - fService.createFile("layer2:/layer/c", "foo").close(); - - fService.createSnapshot("layer2", null, null); - - diffs = fSyncService.compare(-1, "layer2:/layer", -1, "layer:/layer", null); - assertEquals(1, diffs.size()); - assertEquals("[layer2:/layer/c[-1] > layer:/layer/c[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, null, null); - - diffs = fSyncService.compare(-1, "layer2:/layer", -1, "layer:/layer", null); - assertEquals(0, diffs.size()); - - fSyncService.flatten("layer2:/layer", "layer:/layer"); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(1, diffs.size()); - assertEquals("[layer:/layer/c[-1] > main:/c[-1]]", diffs.toString()); - - recursiveList("main"); - recursiveList("layer"); - recursiveList("layer2"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("layer2"); - } - } - - public void testSimpleUpdateLD5() throws Exception - { - try - { - logger.debug("start: testSimpleUpdateLD5"); - - logger.debug("created 2 stores: main, layer"); - - recursiveList("main"); - recursiveList("layer"); - - fService.createLayeredDirectory("main:/", "layer:/", "layer"); - - logger.debug("created layered dir: layer:/layer -> main:/"); - - recursiveList("main"); - recursiveList("layer"); - - fService.createDirectory("layer:/layer", "b"); - - logger.debug("created dir in layer: layer:/layer/b"); - - recursiveList("main"); - recursiveList("layer"); - - List diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(1, diffs.size()); - assertEquals("[layer:/layer/b[-1] > main:/b[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, null, null); - - logger.debug("updated: created directory: main:/b"); - - recursiveList("main"); - recursiveList("layer"); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(0, diffs.size()); - - fSyncService.flatten("layer:/layer", "main:/"); - - logger.debug("flattened: created directory: main:/b"); - - recursiveList("main"); - recursiveList("layer"); - - fService.createFile("layer:/layer/b", "foo").close(); - - logger.debug("created file: layer:/layer/b/foo"); - - recursiveList("main"); - recursiveList("layer"); - - fService.createFile("layer:/layer/b", "bar").close(); - - logger.debug("created file: layer:/layer/b/bar"); - - recursiveList("main"); - recursiveList("layer"); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(2, diffs.size()); - assertEquals("[layer:/layer/b/bar[-1] > main:/b/bar[-1], layer:/layer/b/foo[-1] > main:/b/foo[-1]]", diffs.toString()); - - // submit only first diff - List selected = new ArrayList(1); - selected.add(diffs.get(1)); - - assertEquals("[layer:/layer/b/foo[-1] > main:/b/foo[-1]]", selected.toString()); - - fSyncService.update(selected, null, false, false, false, false, null, null); - - logger.debug("updated: created file: main:/b/foo"); - - recursiveList("main"); - recursiveList("layer"); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(1, diffs.size()); - assertEquals("[layer:/layer/b/bar[-1] > main:/b/bar[-1]]", diffs.toString()); - - fSyncService.flatten("layer:/layer", "main:/"); - - logger.debug("flattened: created file: main:/b/foo"); - - recursiveList("main"); - recursiveList("layer"); - - fService.removeNode("layer:/layer", "b"); - - logger.debug("removed dir in layer: layer:/layer/b"); - - recursiveList("main"); - recursiveList("layer"); - - fService.createSnapshot("layer", null, null); - - logger.debug("snapshot: layer"); - - recursiveList("main"); - recursiveList("layer"); - - // ETWOTWO-1266 - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(1, diffs.size()); - assertEquals("[layer:/layer/b[-1] > main:/b[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, null, null); - - logger.debug("updated: deleted dir: main:/b"); - - recursiveList("main"); - recursiveList("layer"); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(0, diffs.size()); - - fSyncService.flatten("layer:/layer", "main:/"); - - logger.debug("flattened: deleted dir: main:/b"); - - recursiveList("main"); - recursiveList("layer"); - - logger.debug("finish: testSimpleUpdateLD5"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - public void testSimpleUpdateLD6() throws Exception - { - try - { - logger.debug("created 2 stores: main, layer"); - - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - - logger.debug("created dirs: main:/a, main:/a/b"); - - fService.createLayeredDirectory("main:/", "layer:/", "layer"); - - logger.debug("created layered dir: layer:/layer -> main:/"); - - List diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(0, diffs.size()); - - fService.createDirectory("layer:/layer/a", "xyz"); - fService.createFile("layer:/layer/a/xyz", "index.html").close(); - - logger.debug("created: layer:/layer/a/xyz, layer:/layer/a/xyz/index.html"); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(1, diffs.size()); - assertEquals("[layer:/layer/a/xyz[-1] > main:/a/xyz[-1]]", diffs.toString()); - - fService.createStore("main--workflow1"); - - logger.debug("created store: main--workflow1"); - - fService.createLayeredDirectory("main:/a", "main--workflow1:/", "a"); - - logger.debug("created layered dir: main--workflow1:/a -> main:/a"); - - diffs = fSyncService.compare(-1, "main--workflow1:/a", -1, "main:/a", null); - assertEquals(0, diffs.size()); - - diffs = new ArrayList(1); - diffs.add(new AVMDifference(-1, "layer:/layer/a/xyz/index.html", -1, "main--workflow1:/a/xyz/index.html", AVMDifference.NEWER)); - diffs.add(new AVMDifference(-1, "layer:/layer/a/xyz", -1, "main--workflow1:/a/xyz", AVMDifference.NEWER)); - - // ETHREEOH-2057 - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - - logger.debug("updated: added: main--workflow1:/a/xyz, main--workflow1:/a/xyz/index.html"); - - diffs = fSyncService.compare(-1, "layer:/layer/a", -1, "main:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[layer:/layer/a/xyz[-1] > main:/a/xyz[-1]]", diffs.toString()); - - diffs = fSyncService.compare(-1, "main--workflow1:/a", -1, "main:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[main--workflow1:/a/xyz[-1] > main:/a/xyz[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, true, true, "two", "two"); - fSyncService.flatten("main--workflow1:/a", "main:/a"); - - logger.debug("updated & flattened"); - - diffs = fSyncService.compare(-1, "main--workflow1:/a", -1, "main:/a", null); - assertEquals(0, diffs.size()); - - diffs = fSyncService.compare(-1, "main--workflow1:/a", -1, "layer:/layer/a", null); - assertEquals(0, diffs.size()); - - recursiveList("main"); - recursiveList("layer"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - if (fService.getStore("main--workflow1") != null) { fService.purgeStore("main--workflow1"); } - } - } - - public void testDeleteLD1() throws Exception - { - try - { - logger.debug("created 2 stores: main, layer"); - - fService.createDirectory("main:/", "a"); - - OutputStream o = fService.createFile("main:/a", "foo"); - PrintStream out = new PrintStream(o); - out.println("I am main:/a/foo"); - out.close(); - - logger.debug("created file in main: main:/a/foo"); - - fService.createLayeredDirectory("main:/a", "layer:/", "a"); - - logger.debug("created layered dir: layer:/a -> main:/a"); - - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "layer:/a/foo"))); - String line = reader.readLine(); - reader.close(); - assertEquals("I am main:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/a/foo", line); - - out = new PrintStream(fService.getFileOutputStream("layer:/a/foo")); - out.println("I am layer:/a/foo"); - out.close(); - - logger.debug("update file in layer: layer:/a/foo"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "layer:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am layer:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/a/foo", line); - - List diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[layer:/a/foo[-1] > main:/a/foo[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, null, null); - - diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals(0, diffs.size()); - - fSyncService.flatten("layer:/a", "main:/a"); - - logger.debug("updated & flattened: updated file: main:/a/foo"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "layer:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am layer:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am layer:/a/foo", line); - - fService.removeNode("main:/", "a"); - fService.createSnapshot("main", null, null); - - logger.debug("remove directory in main & snapshot: main:/a"); - - assertNotNull(fService.lookup(-1, "layer:/a")); - assertNull(fService.lookup(-1, "layer:/a/foo")); - - try - { - fService.getFileInputStream(-1, "layer:/a/foo"); - fail(); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - try - { - fService.getFileOutputStream("layer:/a/foo"); - fail(); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - recursiveList("main"); - recursiveList("layer"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - public void testDeleteLD2() throws Exception - { - try - { - logger.debug("created 2 stores: main, layer"); - - fService.createDirectory("main:/", "a"); - - OutputStream o = fService.createFile("main:/a", "foo"); - PrintStream out = new PrintStream(o); - out.println("I am main:/a/foo"); - out.close(); - - logger.debug("created file in main: main:/a/foo"); - - fService.createLayeredDirectory("main:/a", "layer:/", "a"); - - logger.debug("created layered dir: layer:/a -> main:/a"); - - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "layer:/a/foo"))); - String line = reader.readLine(); - reader.close(); - assertEquals("I am main:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/a/foo", line); - - out = new PrintStream(fService.getFileOutputStream("layer:/a/foo")); - out.println("I am layer:/a/foo"); - out.close(); - - logger.debug("update file in layer: layer:/a/foo"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "layer:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am layer:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/a/foo", line); - - fService.removeNode("main:/", "a"); - - logger.debug("remove directory in main: main:/a"); - - fService.createSnapshot("main", null, null); - - logger.debug("snapshot: main:/a"); - - assertNull(fService.lookup(-1, "main:/a")); - assertNull(fService.lookup(-1, "main:/a/foo")); - - try - { - fService.getFileInputStream(-1, "main:/a/foo"); - fail(); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - assertNotNull(fService.lookup(-1, "layer:/a")); - assertNotNull(fService.lookup(-1, "layer:/a/foo")); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "layer:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am layer:/a/foo", line); - - out = new PrintStream(fService.getFileOutputStream("layer:/a/foo")); - out.println("I am layer:/a/foo V2"); - out.close(); - - List diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[layer:/a[-1] > main:/a[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, null, null); - - diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals(0, diffs.size()); - - logger.debug("updated: updated dir & file: main:/a/foo"); - - fSyncService.flatten("layer:/a", "main:/a"); - - logger.debug("flattened: layer:/a -> main:/a"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "layer:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am layer:/a/foo V2", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am layer:/a/foo V2", line); - - recursiveList("main"); - recursiveList("layer"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - public void testDeleteLD3() throws Exception - { - try - { - fService.createStore("mainB"); - fService.createStore("mainB--layer"); - fService.createDirectory("mainB:/", "a"); - fService.createSnapshot("mainB", null, null); - - SortedMap directoryListing = fService.getDirectoryListing(-1, "mainB:/a"); - assertTrue(directoryListing.isEmpty()); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - fService.createFile("mainB--layer:/a", "testfile.txt"); - fService.createDirectory("mainB--layer:/a", "testfolder"); - fService.createSnapshot("mainB--layer", null, null); - - List diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(2, diffs.size()); - assertEquals("[mainB--layer:/a/testfile.txt[-1] > mainB:/a/testfile.txt[-1], mainB--layer:/a/testfolder[-1] > mainB:/a/testfolder[-1]]", diffs.toString()); - - // ALF-1948 - fService.removeNode("mainB--layer:/a", "testfile.txt"); - fService.createSnapshot("mainB--layer", null, null); - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB--layer:/a/testfolder[-1] > mainB:/a/testfolder[-1]]", diffs.toString()); - - fService.removeNode("mainB--layer:/a", "testfolder"); - fService.createSnapshot("mainB--layer", null, null); - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(0, diffs.size()); - - directoryListing = fService.getDirectoryListing(-1, "mainB--layer:/a"); - assertTrue(directoryListing.isEmpty()); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - finally - { - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - } - } - - public void testDeleteLD4() throws Exception - { - try - { - logger.debug("created 2 stores: main, layer"); - - fService.createDirectory("main:/", "a"); - - fService.createLayeredDirectory("main:/a", "layer:/", "a"); - - logger.debug("created layered dir: layer:/a -> main:/a"); - - List diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals(0, diffs.size()); - - fService.createStore("layer2"); - - logger.debug("created store: layer2"); - - fService.createLayeredDirectory("layer:/a", "layer2:/", "a"); - - logger.debug("created layered dir: layer2:/a -> layer:/a"); - - OutputStream o = fService.createFile("layer2:/a", "foo"); - PrintStream out = new PrintStream(o); - out.println("I am layer2:/a/foo"); - out.close(); - - diffs = fSyncService.compare(-1, "layer2:/a", -1, "layer:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[layer2:/a/foo[-1] > layer:/a/foo[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, null, null); - - diffs = fSyncService.compare(-1, "layer2:/a", -1, "layer:/a", null); - assertEquals(0, diffs.size()); - - diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[layer:/a/foo[-1] > main:/a/foo[-1]]", diffs.toString()); - - // ALF-1948 - fService.removeNode("layer:/a", "foo"); - - logger.debug("remove file in layer: layer:/a/foo"); - - diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals(0, diffs.size()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - if (fService.getStore("layer2") != null) { fService.purgeStore("layer2"); } - } - } - - /** - * Test bulk update (using layered directory). - */ - public void testBulkUpdateLD() throws Exception - { - //String LOAD_DIR = "config/alfresco/bootstrap"; - String LOAD_DIR = System.getProperty("alfresco.java.sources.dir", "source/java") + - "/org/alfresco/repo/avm/actions"; - - String[] split = LOAD_DIR.split("/"); - String DIR = split[split.length-1]; - - try - { - RemoteBulkLoader loader = new RemoteBulkLoader(); - loader.setAvmRemoteService(fService); - - fService.createLayeredDirectory("main:/", "layer:/", "layer"); - - loader.recursiveLoad(LOAD_DIR, "layer:/layer"); - - - - List diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(1, diffs.size()); - assertEquals("[layer:/layer/"+DIR+"[-1] > main:/"+DIR+"[-1]]", diffs.toString()); - - fService.createSnapshot("layer", null, null); - fSyncService.update(diffs, null, false, false, false, false, null, null); - fService.createSnapshot("main", null, null); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(0, diffs.size()); - - fSyncService.flatten("layer:/layer", "main:/"); - recursiveList("layer"); - recursiveList("main"); - fService.createStore("layer2"); - fService.createLayeredDirectory("layer:/layer", "layer2:/", "layer"); - - loader.recursiveLoad(LOAD_DIR, "layer2:/layer/"+DIR); - - fService.createSnapshot("layer2", null, null); - diffs = fSyncService.compare(-1, "layer2:/layer", -1, "layer:/layer", null); - assertEquals(1, diffs.size()); - assertEquals("[layer2:/layer/"+DIR+"/"+DIR+"[-1] > layer:/layer/"+DIR+"/"+DIR+"[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, null, null); - diffs = fSyncService.compare(-1, "layer2:/layer", -1, "layer:/layer", null); - assertEquals(0, diffs.size()); - - fSyncService.flatten("layer2:/layer", "layer:/layer"); - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(1, diffs.size()); - assertEquals("[layer:/layer/"+DIR+"/"+DIR+"[-1] > main:/"+DIR+"/"+DIR+"[-1]]", diffs.toString()); - - recursiveList("layer2"); - recursiveList("layer"); - recursiveList("main"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - if (fService.getStore("layer2") != null) { fService.purgeStore("layer2"); } - } - } - - /** - * Test the flatten operation, with a little bit of compare and update. - */ - public void testFlatten() throws Exception - { - try - { - setupBasicTree(); - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - recursiveList("main"); - // Change some stuff. - fService.createFile("main:/layer/b", "fig").close(); - fService.getFileOutputStream("main:/layer/b/c/foo").close(); - fService.createSnapshot("main", null, null); - recursiveList("main"); - // Do a compare. - List diffs = fSyncService.compare(-1, "main:/layer", -1, "main:/a", null); - assertEquals(2, diffs.size()); - assertEquals("[main:/layer/b/c/foo[-1] > main:/a/b/c/foo[-1], main:/layer/b/fig[-1] > main:/a/b/fig[-1]]", diffs.toString()); - // Update. - fSyncService.update(diffs, null, false, false, false, false, null, null); - recursiveList("main"); - // Flatten. - fSyncService.flatten("main:/layer", "main:/a"); - recursiveList("main"); - // Compare again. - diffs = fSyncService.compare(-1, "main:/layer", -1, "main:/a", null); - assertEquals(0, diffs.size()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test partial flatten. - */ - public void testPartialFlatten() throws Exception - { - try - { - setupBasicTree(); - fService.createLayeredDirectory("main:/a", "layer:/", "a"); - fService.getFileOutputStream("layer:/a/b/c/foo").close(); - fService.createFile("layer:/a/b", "bing").close(); - List diffs = new ArrayList(); - diffs.add(new AVMDifference(-1, "layer:/a/b/c/foo", -1, "main:/a/b/c/foo", AVMDifference.NEWER)); - fSyncService.update(diffs, null, false, false, false, false, null, null); - fSyncService.flatten("layer:/a", "main:/a"); - AVMNodeDescriptor b = fService.lookup(-1, "layer:/a/b"); - assertTrue(b.isLayeredDirectory()); - AVMNodeDescriptor c = fService.lookup(-1, "layer:/a/b/c"); - assertTrue(c.isPlainDirectory()); - diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[layer:/a/b/bing[-1] > main:/a/b/bing[-1]]", diffs.toString()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test AVMSyncService resetLayer. - */ - public void testResetLayer() throws Exception - { - try - { - setupBasicTree(); - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createFile("main:/layer", "figs").close(); - assertFalse(recursiveContents("main:/a", -1, true).equals(recursiveContents("main:/layer", -1, true))); - recursiveList("main"); - fSyncService.resetLayer("main:/layer"); - assertEquals(recursiveContents("main:/a", -1, true), recursiveContents("main:/layer", -1, true)); - recursiveList("main"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test AVMSyncService update. - */ - public void testUpdate() throws Exception - { - try - { - setupBasicTree(); - // Try branch to branch update. - fService.createBranch(-1, "main:/a", "main:/", "abranch"); - fService.createFile("main:/abranch", "monkey").close(); - fService.createFile("main:/abranch", "#foo").close(); - fService.createFile("main:/abranch", "figs.tmp").close(); - fService.getFileOutputStream("main:/abranch/b/c/foo").close(); - recursiveList("main"); - List cmp = fSyncService.compare(-1, "main:/abranch", -1, "main:/a", excluder); - assertEquals(2, cmp.size()); - assertEquals("[main:/abranch/b/c/foo[-1] > main:/a/b/c/foo[-1], main:/abranch/monkey[-1] > main:/a/monkey[-1]]", cmp.toString()); - List diffs = new ArrayList(); - diffs.add(new AVMDifference(-1, "main:/abranch/monkey", -1, "main:/a/monkey", AVMDifference.NEWER)); - diffs.add(new AVMDifference(-1, "main:/abranch/b/c/foo", -1, "main:/a/b/c/foo", AVMDifference.NEWER)); - fSyncService.update(diffs, null, false, false, false, false, null, null); - fService.createSnapshot("main", null, null); - recursiveList("main"); - assertEquals(fService.lookup(-1, "main:/abranch/monkey").getId(), fService.lookup(-1, "main:/a/monkey").getId()); - assertEquals(fService.lookup(-1, "main:/abranch/b/c/foo").getId(), fService.lookup(-1, "main:/a/b/c/foo").getId()); - // Try updating a deletion. - fService.removeNode("main:/abranch", "monkey"); - recursiveList("main"); - cmp = fSyncService.compare(-1, "main:/abranch", -1, "main:/a", excluder); - assertEquals(1, cmp.size()); - assertEquals("[main:/abranch/monkey[-1] > main:/a/monkey[-1]]", cmp.toString()); - diffs.clear(); - diffs.add(new AVMDifference(-1, "main:/abranch/monkey", -1, "main:/a/monkey", AVMDifference.NEWER)); - fSyncService.update(diffs, null, false, false, false, false, null, null); - assertEquals(0, fSyncService.compare(-1, "main:/abranch", -1, "main:/a", excluder).size()); - fService.createSnapshot("main", null, null); - recursiveList("main"); - assertEquals(fService.lookup(-1, "main:/abranch/monkey", true).getId(), fService.lookup(-1, "main:/a/monkey", true).getId()); - // Try one that should fail. - fService.createFile("main:/abranch", "monkey").close(); - cmp = fSyncService.compare(-1, "main:/abranch", -1, "main:/a", excluder); - assertEquals(1, cmp.size()); - assertEquals("[main:/abranch/monkey[-1] > main:/a/monkey[-1]]", cmp.toString()); - diffs.clear(); - diffs.add(new AVMDifference(-1, "main:/a/monkey", -1, "main:/abranch/monkey", AVMDifference.NEWER)); - try - { - fSyncService.update(diffs, null, false, false, false, false, null, null); - fail(); - } - catch (AVMSyncException se) - { - // Do nothing. - } - // Get synced again by doing an override older. - recursiveList("main"); - diffs.clear(); - diffs.add(new AVMDifference(-1, "main:/a/monkey", -1, "main:/abranch/monkey", AVMDifference.NEWER)); - fSyncService.update(diffs, null, false, false, false, true, null, null); - assertEquals(0, fSyncService.compare(-1, "main:/abranch", -1, "main:/a", excluder).size()); - fService.createSnapshot("main", null, null); - recursiveList("main"); - assertEquals(fService.lookup(-1, "main:/a/monkey", true).getId(), fService.lookup(-1, "main:/abranch/monkey", true).getId()); - // Cleanup for layered tests. - fService.purgeStore("main"); - fService.createStore("main"); - setupBasicTree(); - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createFile("main:/layer", "monkey").close(); - fService.getFileOutputStream("main:/layer/b/c/foo").close(); - cmp = fSyncService.compare(-1, "main:/layer", -1, "main:/a", excluder); - assertEquals(2, cmp.size()); - assertEquals("[main:/layer/b/c/foo[-1] > main:/a/b/c/foo[-1], main:/layer/monkey[-1] > main:/a/monkey[-1]]", cmp.toString()); - recursiveList("main"); - diffs.clear(); - diffs.add(new AVMDifference(-1, "main:/layer/monkey", -1, "main:/a/monkey", AVMDifference.NEWER)); - diffs.add(new AVMDifference(-1, "main:/layer/b/c/foo", -1, "main:/a/b/c/foo", AVMDifference.NEWER)); - fSyncService.update(diffs, null, false, false, false, false, null, null); - assertEquals(0, fSyncService.compare(-1, "main:/layer", -1, "main:/a", excluder).size()); - fService.createSnapshot("main", null, null); - recursiveList("main"); - assertEquals(fService.lookup(-1, "main:/layer/monkey").getId(), fService.lookup(-1, "main:/a/monkey").getId()); - assertEquals(fService.lookup(-1, "main:/layer/b/c/foo").getId(), fService.lookup(-1, "main:/a/b/c/foo").getId()); - // Try updating a deletion. - fService.removeNode("main:/layer", "monkey"); - recursiveList("main"); - cmp = fSyncService.compare(-1, "main:/layer", -1, "main:/a", excluder); - assertEquals(1, cmp.size()); - assertEquals("[main:/layer/monkey[-1] > main:/a/monkey[-1]]", cmp.toString()); - diffs.clear(); - diffs.add(new AVMDifference(-1, "main:/layer/monkey", -1, "main:/a/monkey", AVMDifference.NEWER)); - fSyncService.update(diffs, null, false, false, false, false, null, null); - assertEquals(0, fSyncService.compare(-1, "main:/layer", -1, "main:/a", excluder).size()); - fService.createSnapshot("main", null, null); - recursiveList("main"); - assertEquals(fService.lookup(-1, "main:/layer/monkey", true).getId(), fService.lookup(-1, "main:/a/monkey", true).getId()); - // Try one that should fail. - fService.createFile("main:/layer", "monkey").close(); - cmp = fSyncService.compare(-1, "main:/layer", -1, "main:/a", excluder); - assertEquals(1, cmp.size()); - assertEquals("[main:/layer/monkey[-1] > main:/a/monkey[-1]]", cmp.toString()); - diffs.clear(); - diffs.add(new AVMDifference(-1, "main:/a/monkey", -1, "main:/layer/monkey", AVMDifference.NEWER)); - try - { - fSyncService.update(diffs, null, false, false, false, false, null, null); - fail(); - } - catch (AVMSyncException se) - { - // Do nothing. - } - // Get synced again by doing an override older. - recursiveList("main"); - diffs.clear(); - diffs.add(new AVMDifference(-1, "main:/a/monkey", -1, "main:/layer/monkey", AVMDifference.NEWER)); - fSyncService.update(diffs, null, false, false, false, true, null, null); - assertEquals(0, fSyncService.compare(-1, "main:/layer", -1, "main:/a", excluder).size()); - fService.createSnapshot("main", null, null); - recursiveList("main"); - assertEquals(fService.lookup(-1, "main:/a/monkey", true).getId(), fService.lookup(-1, "main:/layer/monkey", true).getId()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test that an update forces a snapshot on the source. - */ - public void testUpdateSnapshot() throws Exception - { - try - { - setupBasicTree(); - fService.createStore("branch"); - fService.createBranch(-1, "main:/", "branch:/", "branch"); - // Modify some things in the branch. - fService.createFile("branch:/branch/a/b", "fing").close(); - fService.getFileOutputStream("branch:/branch/a/b/c/foo").close(); - fService.removeNode("branch:/branch/a/b/c", "bar"); - List diffs = fSyncService.compare(-1, "branch:/branch", -1, "main:/", null); - assertEquals(3, diffs.size()); - assertEquals("[branch:/branch/a/b/c/bar[-1] > main:/a/b/c/bar[-1], branch:/branch/a/b/c/foo[-1] > main:/a/b/c/foo[-1], branch:/branch/a/b/fing[-1] > main:/a/b/fing[-1]]", diffs.toString()); - // Now update. - fSyncService.update(diffs, null, false, false, false, false, null, null); - diffs = fSyncService.compare(-1, "branch:/branch", -1, "main:/", null); - assertEquals(0, diffs.size()); - fService.getFileOutputStream("branch:/branch/a/b/fing").close(); - assertTrue(fService.lookup(-1, "branch:/branch/a/b/fing").getId() != fService.lookup(-1, "main:/a/b/fing").getId()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("branch"); - } - } - - /** - * Test a noodle update. - */ - public void testNoodleUpdate() throws Exception - { - try - { - setupBasicTree(); - fService.createStore("staging"); - List diffs = fSyncService.compare(-1, "main:/", -1, "staging:/", null); - assertEquals(2, diffs.size()); - assertEquals("[main:/a[-1] > staging:/a[-1], main:/d[-1] > staging:/d[-1]]", diffs.toString()); - List noodle = new ArrayList(); - noodle.add(new AVMDifference(-1, "main:/a/b/c/foo", -1, "staging:/a/b/c/foo", AVMDifference.NEWER)); - noodle.add(new AVMDifference(-1, "main:/d", -1, "staging:/d", AVMDifference.NEWER)); - fSyncService.update(noodle, null, false, false, false, false, null, null); - diffs = fSyncService.compare(-1, "main:/", -1, "staging:/", null); - assertEquals(1, diffs.size()); - assertEquals("[main:/a/b/c/bar[-1] > staging:/a/b/c/bar[-1]]", diffs.toString()); - assertEquals("main:/a/b/c/bar", diffs.get(0).getSourcePath()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("staging"); - } - } - - public void testRename1() throws Exception - { - try - { - setupBasicTree(); - fService.createLayeredDirectory("main:/a", "layer:/", "a"); - fService.rename("layer:/a/b", "c", "layer:/a/b", "z"); - recursiveContents("layer:/"); - List diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals(2, diffs.size()); - assertEquals("[layer:/a/b/c[-1] > main:/a/b/c[-1], layer:/a/b/z[-1] > main:/a/b/z[-1]]", diffs.toString()); - fSyncService.update(diffs, null, false, false, false, false, null, null); - recursiveContents("layer:/"); - recursiveContents("main:/"); - fSyncService.flatten("layer:/a", "main:/a"); - recursiveContents("layer:/"); - recursiveContents("main:/"); - fService.createFile("layer:/a/b/z", "fudge").close(); - fService.rename("layer:/a/b", "z", "layer:/a/b", "y"); - recursiveContents("layer:/"); - diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals(2, diffs.size()); - assertEquals("[layer:/a/b/y[-1] > main:/a/b/y[-1], layer:/a/b/z[-1] > main:/a/b/z[-1]]", diffs.toString()); - fSyncService.update(diffs, null, false, false, false, false, null, null); - recursiveContents("layer:/"); - recursiveContents("main:/"); - fSyncService.flatten("layer:/a", "main:/a"); - recursiveContents("layer:/"); - recursiveContents("main:/"); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - } - - public void testRename2() throws Exception - { - String fileLower = "foo"; - String fileUpper = "FOO"; - - try - { - logger.debug("created 2 stores: main, layer"); - - fService.createDirectory("main:/", "a"); - fService.createFile("main:/a", fileLower); - - logger.debug("created: main:/a/"+fileLower); - - AVMNodeDescriptor desc = fService.lookup(-1, "main:/a/"+fileLower); - assertNotNull(desc); - assertEquals("main:/a/"+fileLower, desc.getPath()); - - fService.createLayeredDirectory("main:/a", "layer:/", "a"); - - logger.debug("created: layer:/a/"+fileLower+" -> main:/a/"+fileLower); - - assertNotNull(fService.lookup(-1, "layer:/a/"+fileLower)); - - List diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals(0, diffs.size()); - - fService.rename("layer:/a/", fileLower, "layer:/a", fileUpper); - - logger.debug("rename: layer:/a/"+fileLower+" -> layer:/a/"+fileUpper); - - diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals("[layer:/a/"+fileUpper+"[-1] > main:/a/"+fileUpper+"[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, null, null); - - logger.debug("update: layer:/a/"+fileUpper+" -> main:/a/"+fileUpper); - - diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals(0, diffs.size()); - - fSyncService.flatten("layer:/a", "main:/a"); - - logger.debug("flatten: layer:/a -> main:/a"); - - desc = fService.lookup(-1, "main:/a/"+fileLower); - assertNotNull(desc); - assertEquals("main:/a/"+fileUpper, desc.getPath()); - - desc = fService.lookup(-1, "main:/a/"+fileUpper); - assertNotNull(desc); - assertEquals("main:/a/"+fileUpper, desc.getPath()); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - } - - public void testRename3() throws Exception - { - try - { - logger.debug("created 2 stores: main, layer"); - - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createDirectory("main:/a/b", "c"); - - logger.debug("created: main:/a/b/c"); - - fService.createLayeredDirectory("main:/a", "layer:/", "a"); - - logger.debug("created: layer:/a -> main:/a"); - - List diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals(0, diffs.size()); - - AVMNodeDescriptor desc = fService.lookup(-1, "main:/a/b"); - assertNotNull(desc); - assertEquals("main:/a/b", desc.getPath()); - - desc = fService.lookup(-1, "main:/a/B"); - assertNotNull(desc); - assertEquals("main:/a/b", desc.getPath()); - - desc = fService.lookup(-1, "layer:/a/b"); - assertNotNull(desc); - assertEquals("layer:/a/b", desc.getPath()); - - fService.rename("layer:/a/", "b", "layer:/a", "B"); - - logger.debug("rename: layer:/a/b -> layer:/a/B"); - - desc = fService.lookup(-1, "main:/a/b"); - assertNotNull(desc); - assertEquals("main:/a/b", desc.getPath()); - - desc = fService.lookup(-1, "layer:/a/B"); - assertNotNull(desc); - assertEquals("layer:/a/B", desc.getPath()); - - desc = fService.lookup(-1, "layer:/a/b"); - assertNotNull(desc); - assertEquals("layer:/a/B", desc.getPath()); - - diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals("[layer:/a/B[-1] > main:/a/B[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, null, null); - - logger.debug("update: layer:/a/B -> main:/a/B"); - - diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals(0, diffs.size()); - - fSyncService.flatten("layer:/a", "main:/a"); - - logger.debug("flatten: layer:/a -> main:/a"); - - desc = fService.lookup(-1, "main:/a/b"); - assertNotNull(desc); - assertEquals("main:/a/B", desc.getPath()); - - desc = fService.lookup(-1, "main:/a/B"); - assertNotNull(desc); - assertEquals("main:/a/B", desc.getPath()); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - } - - - /** - * Test file properties update ... - */ - public void testUpdateFileTitleAndDescription() throws Exception - { - try - { - fService.createLayeredDirectory("main:/", "layer:/", "layer"); - fService.createDirectory("layer:/layer", "b"); - fService.createFile("layer:/layer/b", "foo").close(); - - List diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals("[layer:/layer/b[-1] > main:/b[-1]]", diffs.toString()); - - fService.createSnapshot("layer", null, null); - fSyncService.update(diffs, null, false, false, false, false, null, null); - fService.createSnapshot("main", null, null); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(0, diffs.size()); - - fSyncService.flatten("layer:/layer", "main:/"); - - assertEquals(0, fService.getNodeProperties(-1, "main:/b/foo").size()); - assertEquals(0, fService.getNodeProperties(-1, "layer:/layer/b/foo").size()); - - Map properties = new HashMap(); - properties.put(ContentModel.PROP_TITLE, new PropertyValue(DataTypeDefinition.TEXT, "foo title")); - properties.put(ContentModel.PROP_DESCRIPTION, new PropertyValue(DataTypeDefinition.TEXT, "foo descrip")); - fService.setNodeProperties("layer:/layer/b/foo", properties); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals("[layer:/layer/b/foo[-1] > main:/b/foo[-1]]", diffs.toString()); - - fService.createSnapshot("layer", null, null); - fSyncService.update(diffs, null, false, false, false, false, null, null); - fService.createSnapshot("main", null, null); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(0, diffs.size()); - - fSyncService.flatten("layer:/layer", "main:/"); - - assertEquals(2, fService.getNodeProperties(-1, "main:/b/foo").size()); - - assertEquals("foo title", fService.getNodeProperty(-1, "main:/b/foo", ContentModel.PROP_TITLE).getStringValue()); - assertEquals("foo descrip", fService.getNodeProperty(-1, "main:/b/foo", ContentModel.PROP_DESCRIPTION).getStringValue()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test directory properties update ... - */ - public void testUpdateDirectoryTitleAndDescription() throws Exception - { - try - { - fService.createLayeredDirectory("main:/", "layer:/", "layer"); - fService.createDirectory("layer:/layer", "b"); - fService.createFile("layer:/layer/b", "foo").close(); - - List diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals("[layer:/layer/b[-1] > main:/b[-1]]", diffs.toString()); - - fService.createSnapshot("layer", null, null); - fSyncService.update(diffs, null, false, false, false, false, null, null); - fService.createSnapshot("main", null, null); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(0, diffs.size()); - - fSyncService.flatten("layer:/layer", "main:/"); - - assertEquals(0, fService.getNodeProperties(-1, "main:/b").size()); - assertEquals(0, fService.getNodeProperties(-1, "layer:/layer/b").size()); - - Map properties = new HashMap(); - properties.put(ContentModel.PROP_TITLE, new PropertyValue(DataTypeDefinition.TEXT, "b title")); - properties.put(ContentModel.PROP_DESCRIPTION, new PropertyValue(DataTypeDefinition.TEXT, "b descrip")); - fService.setNodeProperties("layer:/layer/b", properties); - - assertEquals(0, fService.getNodeProperties(-1, "main:/b").size()); - assertEquals(2, fService.getNodeProperties(-1, "layer:/layer/b").size()); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals("[layer:/layer/b[-1] > main:/b[-1]]", diffs.toString()); - - fService.createSnapshot("layer", null, null); - fSyncService.update(diffs, null, false, false, false, false, null, null); - fService.createSnapshot("main", null, null); - - assertEquals(2, fService.getNodeProperties(-1, "main:/b").size()); - assertEquals(2, fService.getNodeProperties(-1, "layer:/layer/b").size()); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(0, diffs.size()); - - fSyncService.flatten("layer:/layer", "main:/"); - - assertEquals(2, fService.getNodeProperties(-1, "main:/b").size()); - assertEquals(2, fService.getNodeProperties(-1, "layer:/layer/b").size()); - - assertEquals("b title", fService.getNodeProperty(-1, "main:/b", ContentModel.PROP_TITLE).getStringValue()); - assertEquals("b descrip", fService.getNodeProperty(-1, "main:/b", ContentModel.PROP_DESCRIPTION).getStringValue()); - - fService.setNodeProperty("layer:/layer/b", ContentModel.PROP_TITLE, new PropertyValue(DataTypeDefinition.TEXT, "b title2")); - fService.setNodeProperty("layer:/layer/b", ContentModel.PROP_DESCRIPTION, new PropertyValue(DataTypeDefinition.TEXT, "b descrip2")); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals("[layer:/layer/b[-1] > main:/b[-1]]", diffs.toString()); - - fService.createSnapshot("layer", null, null); - fSyncService.update(diffs, null, false, false, false, false, null, null); - fService.createSnapshot("main", null, null); - - diffs = fSyncService.compare(-1, "layer:/layer", -1, "main:/", null); - assertEquals(0, diffs.size()); - - fSyncService.flatten("layer:/layer", "main:/"); - - assertEquals(2, fService.getNodeProperties(-1, "main:/b").size()); - assertEquals(2, fService.getNodeProperties(-1, "layer:/layer/b").size()); - - assertEquals("b title2", fService.getNodeProperty(-1, "main:/b", ContentModel.PROP_TITLE).getStringValue()); - assertEquals("b descrip2", fService.getNodeProperty(-1, "main:/b", ContentModel.PROP_DESCRIPTION).getStringValue()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - public void testSimpleUpdateLF1() throws Exception - { - try - { - List snapshots = fService.getStoreVersions("main"); - assertEquals(1, snapshots.size()); - assertEquals(0, snapshots.get(0).getVersionID()); - - snapshots = fService.getStoreVersions("layer"); - assertEquals(1, snapshots.size()); - assertEquals(0, snapshots.get(0).getVersionID()); - - fService.createDirectory("main:/", "a"); - fService.createDirectory("layer:/", "a"); - - logger.debug("created 2 plain dirs: main:/a, layer:/a"); - - fService.createFile("main:/a", "foo"); - - assertEquals(1, fService.lookup(-1, "main:/a/foo").getVersionID()); - - PrintStream out = new PrintStream(fService.getFileOutputStream("main:/a/foo")); - out.println("I am main:/a/foo"); - out.close(); - - AVMNodeDescriptor node = fService.lookup(-1, "main:/a/foo"); - assertEquals(1, node.getVersionID()); - List history = fService.getHistory(node, -1); - assertEquals(0, history.size()); - - fService.createSnapshot("main", null, null); - - snapshots = fService.getStoreVersions("main"); - assertEquals(2, snapshots.size()); - assertEquals(1, snapshots.get(snapshots.size()-1).getVersionID()); - - snapshots = fService.getStoreVersions("layer"); - assertEquals(1, snapshots.size()); - assertEquals(0, snapshots.get(0).getVersionID()); - - assertEquals(1, fService.lookup(-1, "main:/a/foo").getVersionID()); - assertEquals(1, fService.lookup(1, "main:/a/foo").getVersionID()); - - logger.debug("created plain file: main:/a/foo"); - - fService.createLayeredFile("main:/a/foo", "layer:/a", "foo"); - - assertEquals(1, fService.lookup(-1, "layer:/a/foo").getVersionID()); - - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "layer:/a/foo"))); - String line = reader.readLine(); - reader.close(); - assertEquals("I am main:/a/foo", line); - - node = fService.lookup(-1, "layer:/a/foo"); - assertEquals(1, node.getVersionID()); - - history = fService.getHistory(node, -1); - assertEquals(0, history.size()); - - fService.createSnapshot("layer", null, null); - - snapshots = fService.getStoreVersions("main"); - assertEquals(2, snapshots.size()); - assertEquals(1, snapshots.get(snapshots.size()-1).getVersionID()); - - snapshots = fService.getStoreVersions("layer"); - assertEquals(2, snapshots.size()); - assertEquals(1, snapshots.get(snapshots.size()-1).getVersionID()); - - assertEquals(1, fService.lookup(-1, "layer:/a/foo").getVersionID()); - assertEquals(1, fService.lookup(1, "layer:/a/foo").getVersionID()); - - List diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals(0, diffs.size()); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "layer:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/a/foo", line); - - logger.debug("created layered file: layer:/a/foo -> main:/a/foo"); - - out = new PrintStream(fService.getFileOutputStream("layer:/a/foo")); - out.println("I am layer:/a/foo"); - out.close(); - - logger.debug("modified file: layer:/a/foo"); - - assertEquals(2, fService.lookup(-1, "layer:/a/foo").getVersionID()); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/a/foo", line); - - diffs = fSyncService.compare(-1, "layer:/a", -1, "main:/a", null); - assertEquals(1, diffs.size()); - - // TODO - review behaviour - assertEquals("[layer:/a/foo[-1] > main:/a/foo[-1]]", diffs.toString()); - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - - // update will implicitly snapshot (src and dst) - snapshots = fService.getStoreVersions("main"); - assertEquals(3, snapshots.size()); - assertEquals(2, snapshots.get(snapshots.size()-1).getVersionID()); - - snapshots = fService.getStoreVersions("layer"); - assertEquals(3, snapshots.size()); - assertEquals(2, snapshots.get(snapshots.size()-1).getVersionID()); - - node = fService.lookup(-1, "layer:/a/foo"); - assertEquals(2, node.getVersionID()); - history = fService.getHistory(node, -1); - - assertEquals(1, history.size()); - assertEquals(1, history.get(0).getVersionID()); - - assertEquals(1, fService.lookup(1, "layer:/a/foo").getVersionID()); - assertEquals(2, fService.lookup(2, "layer:/a/foo").getVersionID()); - - logger.debug("submitted/updated file: layer:/a/foo -> main:/a/foo"); - - fSyncService.flatten("layer:/a", "main:/a"); - - logger.debug("flatten dir: layer:/a -> main:/a"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "layer:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am layer:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am layer:/a/foo", line); - - snapshots = fService.getStoreVersions("main"); - assertEquals(3, snapshots.size()); - assertEquals(2, snapshots.get(snapshots.size()-1).getVersionID()); - - snapshots = fService.getStoreVersions("layer"); - assertEquals(3, snapshots.size()); - assertEquals(2, snapshots.get(snapshots.size()-1).getVersionID()); - - recursiveList("main"); - recursiveList("layer"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - public void testSimpleUpdateLF2() throws Exception - { - try - { - fService.createStore("mainA"); - fService.createStore("mainB"); - fService.createStore("mainB--layer"); - - List snapshots = fService.getStoreVersions("mainA"); - assertEquals(1, snapshots.size()); - assertEquals(0, snapshots.get(0).getVersionID()); - - snapshots = fService.getStoreVersions("mainB"); - assertEquals(1, snapshots.size()); - assertEquals(0, snapshots.get(0).getVersionID()); - - snapshots = fService.getStoreVersions("mainB--layer"); - assertEquals(1, snapshots.size()); - assertEquals(0, snapshots.get(0).getVersionID()); - - logger.debug("created 3 stores: mainA, mainB, mainB-layer"); - - fService.createDirectory("mainA:/", "a"); - fService.createDirectory("mainB:/", "a"); - - logger.debug("created 2 plain dirs: mainA:/a, mainB:/a"); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - logger.debug("created layered dir: mainB--layer:/a -> mainB:/a"); - - // note: unlike WCM, edit staging directly (ie. don't bother with mainA--layer for now) - fService.createFile("mainA:/a", "foo"); - - assertEquals(1, fService.lookup(-1, "mainA:/a/foo").getVersionID()); - assertNull(fService.lookup(-1, "mainB:/a/foo")); - assertNull(fService.lookup(-1, "mainB--layer:/a/foo")); - - PrintStream out = new PrintStream(fService.getFileOutputStream("mainA:/a/foo")); - out.println("I am mainA:/a/foo"); - out.close(); - - logger.debug("created plain file: mainA:/a/foo"); - - fService.createSnapshot("mainA", null, null); - - assertEquals(1, fService.lookup(-1, "mainA:/a/foo").getVersionID()); - assertNull(fService.lookup(-1, "mainB:/a/foo")); - assertNull(fService.lookup(-1, "mainB--layer:/a/foo")); - - snapshots = fService.getStoreVersions("mainA"); - assertEquals(2, snapshots.size()); - assertEquals(1, snapshots.get(snapshots.size()-1).getVersionID()); - - logger.debug("created snapshot: mainA"); - - // note: WCM does not expose layered file (between web project staging sandboxes) - fService.createLayeredFile("mainA:/a/foo", "mainB:/a", "foo"); - - assertEquals(1, fService.lookup(-1, "mainA:/a/foo").getVersionID()); - assertEquals(1, fService.lookup(-1, "mainB:/a/foo").getVersionID()); - assertEquals(1, fService.lookup(-1, "mainB--layer:/a/foo").getVersionID()); - - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/foo"))); - String line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainA:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - logger.debug("created layered file: mainB:/a/foo -> mainA:/a/foo"); - - // modify file in user's sandbox - out = new PrintStream(fService.getFileOutputStream("mainB--layer:/a/foo")); - out.println("I am mainB--layer:/a/foo"); - out.close(); - - assertEquals(1, fService.lookup(-1, "mainA:/a/foo").getVersionID()); - assertEquals(1, fService.lookup(-1, "mainB:/a/foo").getVersionID()); - assertEquals(2, fService.lookup(-1, "mainB--layer:/a/foo").getVersionID()); - - logger.debug("modified file: mainB--layer:/a/foo"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainB--layer:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainA:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - List diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - - // TODO - review behaviour - assertEquals("[mainB--layer:/a/foo[-1] > mainB:/a/foo[-1]]", diffs.toString()); - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - assertEquals(1, fService.lookup(-1, "mainA:/a/foo").getVersionID()); - assertEquals(2, fService.lookup(-1, "mainB:/a/foo").getVersionID()); - assertEquals(2, fService.lookup(-1, "mainB--layer:/a/foo").getVersionID()); - - snapshots = fService.getStoreVersions("mainB--layer"); - assertEquals(2, snapshots.size()); - assertEquals(1, snapshots.get(snapshots.size()-1).getVersionID()); - - snapshots = fService.getStoreVersions("mainB"); - assertEquals(3, snapshots.size()); - assertEquals(2, snapshots.get(snapshots.size()-1).getVersionID()); - - logger.debug("submit/update file: mainB--layer:/a/foo -> mainB:/a/foo"); - - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - logger.debug("flatten dir: mainB--layer:/a/foo -> mainB:/a/foo"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainB--layer:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainB--layer:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainA:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("mainA"); - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - } - } - - public void testSimpleUpdateLF3() throws Exception - { - try - { - fService.createStore("mainA"); - fService.createStore("mainB"); - fService.createStore("mainB--layer"); - - List snapshots = fService.getStoreVersions("mainA"); - assertEquals(1, snapshots.size()); - assertEquals(0, snapshots.get(0).getVersionID()); - - snapshots = fService.getStoreVersions("mainB"); - assertEquals(1, snapshots.size()); - assertEquals(0, snapshots.get(0).getVersionID()); - - snapshots = fService.getStoreVersions("mainB--layer"); - assertEquals(1, snapshots.size()); - assertEquals(0, snapshots.get(0).getVersionID()); - - logger.debug("created 3 stores: mainA, mainB, mainB-layer"); - - fService.createDirectory("mainA:/", "a"); - fService.createDirectory("mainB:/", "a"); - - logger.debug("created 2 plain dirs: mainA:/a, mainB:/a"); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - logger.debug("created layered dir: mainB--layer:/a -> mainB:/a"); - - // note: unlike WCM, edit staging directly (ie. don't bother with mainA--layer for now) - fService.createFile("mainA:/a", "foo"); - - assertEquals(1, fService.lookup(-1, "mainA:/a/foo").getVersionID()); - assertNull(fService.lookup(-1, "mainB:/a/foo")); - assertNull(fService.lookup(-1, "mainB--layer:/a/foo")); - - PrintStream out = new PrintStream(fService.getFileOutputStream("mainA:/a/foo")); - out.println("I am mainA:/a/foo"); - out.close(); - - logger.debug("created plain file: mainA:/a/foo"); - - fService.createSnapshot("mainA", null, null); - - assertEquals(1, fService.lookup(-1, "mainA:/a/foo").getVersionID()); - assertNull(fService.lookup(-1, "mainB:/a/foo")); - assertNull(fService.lookup(-1, "mainB--layer:/a/foo")); - - snapshots = fService.getStoreVersions("mainA"); - assertEquals(2, snapshots.size()); - assertEquals(1, snapshots.get(snapshots.size()-1).getVersionID()); - - logger.debug("created snapshot: mainA"); - - // note: WCM does not expose layered file (between web project staging sandboxes) - fService.createLayeredFile("mainA:/a/foo", "mainB:/a", "foo"); - - assertEquals(1, fService.lookup(-1, "mainA:/a/foo").getVersionID()); - assertEquals(1, fService.lookup(-1, "mainB:/a/foo").getVersionID()); - - AVMNodeDescriptor foo = fService.lookup(-1, "mainB--layer:/a/foo"); - assertEquals(1, foo.getVersionID()); - assertTrue(foo.isLayeredFile()); - - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/foo"))); - String line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainA:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - logger.debug("created layered file: mainB:/a/foo -> mainA:/a/foo"); - - // add dir in user's sandbox - fService.createDirectory("mainB--layer:/a", "b"); - - assertEquals(1, fService.lookup(-1, "mainA:/a/foo").getVersionID()); - assertEquals(1, fService.lookup(-1, "mainB:/a/foo").getVersionID()); - assertEquals(1, fService.lookup(-1, "mainB--layer:/a/b").getVersionID()); - - foo = fService.lookup(-1, "mainB--layer:/a/foo"); - assertEquals(1, foo.getVersionID()); - assertTrue(foo.isLayeredFile()); - - logger.debug("created dir: mainB--layer:/a/b"); - - List diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - - foo = fService.lookup(-1, "mainB--layer:/a/foo"); - assertTrue(foo.isLayeredFile()); - - assertEquals("[mainB--layer:/a/b[-1] > mainB:/a/b[-1]]", diffs.toString()); - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - - foo = fService.lookup(-1, "mainB--layer:/a/foo"); - assertTrue(foo.isLayeredFile()); - - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - foo = fService.lookup(-1, "mainB--layer:/a/foo"); - assertTrue(foo.isLayeredFile()); - - assertEquals(1, fService.lookup(-1, "mainA:/a/foo").getVersionID()); - assertEquals(2, fService.lookup(-1, "mainB:/a/foo").getVersionID()); - assertEquals(2, fService.lookup(-1, "mainB--layer:/a/foo").getVersionID()); - - snapshots = fService.getStoreVersions("mainB--layer"); - assertEquals(2, snapshots.size()); - assertEquals(1, snapshots.get(snapshots.size()-1).getVersionID()); - - snapshots = fService.getStoreVersions("mainB"); - assertEquals(3, snapshots.size()); - assertEquals(2, snapshots.get(snapshots.size()-1).getVersionID()); - - logger.debug("submitted dir: mainB--layer:/a/b -> mainB:/a/b"); - - foo = fService.lookup(-1, "mainB--layer:/a/foo"); - assertEquals(2, foo.getVersionID()); - assertTrue(foo.isLayeredFile()); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainA:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("mainA"); - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - } - } - - public void testLayeredFolder1() throws Exception - { - try - { - fService.createStore("mainA"); - fService.createStore("mainB"); - - fService.createDirectory("mainA:/", "a"); - fService.createDirectory("mainA:/a", "b"); - - fService.createDirectory("mainB:/", "a"); - - fService.createStore("mainB--layer"); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - // note: short-cut - created directly in "staging" area (don't bother with sandbox mainA--layer for now) - fService.createFile("mainA:/a/b", "foo"); - - PrintStream out = new PrintStream(fService.getFileOutputStream("mainA:/a/b/foo")); - out.println("I am mainA:/a/b/foo"); - out.close(); - - logger.debug("created file: mainA:/a/b/foo"); - - // create equivalent of WCM layered folder between web project staging sandboxes (mainB:/a/b pointing to mainA:/a/b) - fService.createLayeredDirectory("mainA:/a/b", "mainB:/a", "b"); - - fService.createSnapshot("mainA", null, null); - fService.createSnapshot("mainB", null, null); - - assertTrue(fService.lookup(-1, "mainB--layer:/a/b").isLayeredDirectory()); - - logger.debug("created layered directory: mainB:/a/b -> mainA:/a/b"); - - fService.createDirectory("mainB--layer:/a", "c"); - - fService.createSnapshot("mainB--layer", null, null); - - logger.debug("created dir: mainB--layer:/a/c"); - - List diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB--layer:/a/c[-1] > mainB:/a/c[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - logger.debug("updated: created dir: mainB:/a/c"); - - assertTrue(fService.lookup(-1, "mainB--layer:/a/b").isLayeredDirectory()); - - fService.createDirectory("mainB--layer:/a/b", "c"); - - assertTrue(fService.lookup(-1, "mainB--layer:/a/b").isLayeredDirectory()); - - fService.createSnapshot("mainB--layer", null, null); - - logger.debug("created dir: mainB--layer:/a/b/c"); - - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB--layer:/a/b/c[-1] > mainB:/a/b/c[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - logger.debug("updated: created dir: mainB:/a/b/c"); - - assertTrue(fService.lookup(-1, "mainB--layer:/a/b").isLayeredDirectory()); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("mainA"); - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - } - } - - public void testLayeredFolder2() throws Exception - { - try - { - fService.createStore("mainA"); - fService.createStore("mainB"); - - fService.createDirectory("mainA:/", "a"); - fService.createDirectory("mainA:/a", "b"); - - fService.createDirectory("mainB:/", "a"); - - fService.createStore("mainB--layer"); - - List snapshots = fService.getStoreVersions("mainA"); - assertEquals(1, snapshots.size()); - assertEquals(0, snapshots.get(0).getVersionID()); - - snapshots = fService.getStoreVersions("mainB"); - assertEquals(1, snapshots.size()); - assertEquals(0, snapshots.get(0).getVersionID()); - - snapshots = fService.getStoreVersions("mainB--layer"); - assertEquals(1, snapshots.size()); - assertEquals(0, snapshots.get(0).getVersionID()); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - // note: short-cut - created directly in "staging" area (don't bother with sandbox mainA--layer for now) - fService.createFile("mainA:/a/b", "foo"); - - PrintStream out = new PrintStream(fService.getFileOutputStream("mainA:/a/b/foo")); - out.println("I am mainA:/a/b/foo"); - out.close(); - - logger.debug("created file: mainA:/a/b/foo"); - - // create equivalent of WCM layered folder between web project staging sandboxes (mainB:/a/b pointing to mainA:/a/b) - fService.createLayeredDirectory("mainA:/a/b", "mainB:/a", "b"); - - logger.debug("created layered directory: mainB:/a/b -> mainA:/a/b"); - - fService.createFile("mainB--layer:/a/b", "bar"); - - out = new PrintStream(fService.getFileOutputStream("mainB--layer:/a/b/bar")); - out.println("I am mainB--layer:/a/b/bar"); - out.close(); - - logger.debug("created file: mainB--layer:/a/b/bar"); - - List diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB--layer:/a/b/bar[-1] > mainB:/a/b/bar[-1]]", diffs.toString()); - - snapshots = fService.getStoreVersions("mainB"); - assertEquals(1, snapshots.size()); - - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - - snapshots = fService.getStoreVersions("mainB"); - assertEquals(3, snapshots.size()); - - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - logger.debug("updated: created file: mainB:/a/b/bar"); - - snapshots = fService.getStoreVersions("mainB"); - assertEquals(3, snapshots.size()); - assertEquals(2, snapshots.get(snapshots.size()-1).getVersionID()); - - // note: short-cut - created directly in "staging" area (don't bother with sandbox mainA--layer for now) - fService.createFile("mainA:/a/b", "baz"); - - out = new PrintStream(fService.getFileOutputStream("mainA:/a/b/baz")); - out.println("I am mainA:/a/b/baz"); - out.close(); - - logger.debug("created file: mainA:/a/b/baz"); - - fService.createSnapshot("mainB", "two", "two"); - - logger.debug("snapshot: mainB"); - - snapshots = fService.getStoreVersions("mainB"); - assertEquals(4, snapshots.size()); - assertEquals(3, snapshots.get(snapshots.size()-1).getVersionID()); - - // ETHREEOH-3340 - diffs = fSyncService.compare(2, "mainB:/a", 3, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB:/a/b/baz[2] < mainB:/a/b/baz[3]]", diffs.toString()); - - logger.debug("list mainB [2]"); - - recursiveList("mainB", 2); - - logger.debug("list mainB [3]"); - - recursiveList("mainB", 3); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("mainA"); - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - } - } - - public void testLayeredFolder3() throws Exception - { - try - { - fService.createStore("mainA"); - fService.createStore("mainB"); - fService.createStore("mainB--layer"); - - logger.debug("created stores: mainA, mainB and mainB--layer"); - - fService.createDirectory("mainA:/", "a"); - fService.createDirectory("mainA:/a", "b"); - fService.createDirectory("mainB:/", "a"); - - logger.debug("created directories: mainA:/a/b and mainB:/a"); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - logger.debug("created layered directory: mainB--layer:/a -> mainB:/a"); - - // create equivalent of WCM layered folder between web project staging sandboxes (mainB:/a/b pointing to mainA:/a/b) - fService.createLayeredDirectory("mainA:/a/b", "mainB:/a", "b"); - - logger.debug("created layered directory: mainB:/a/b -> mainA:/a/b"); - - fService.createDirectory("mainB--layer:/a/b", "c"); - - logger.debug("created directory: mainB--layer:/a/b/c"); - - fService.createFile("mainB--layer:/a/b/c", "foo"); - - PrintStream out = new PrintStream(fService.getFileOutputStream("mainB--layer:/a/b/c/foo")); - out.println("I am mainB--layer:/a/b/c/foo"); - out.close(); - - logger.debug("created file: mainB--layer:/a/b/c/foo"); - - List diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB--layer:/a/b/c[-1] > mainB:/a/b/c[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - - logger.debug("updated: mainB--layer:/a/b/c (including 'foo') to mainB:/a/b/c"); - - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(0, diffs.size()); - - diffs = fSyncService.compare(-1, "mainB:/a", -1, "mainA:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB:/a/b/c[-1] > mainA:/a/b/c[-1]]", diffs.toString()); - - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - logger.debug("flattened: mainB--layer:/a to mainB:/a"); - - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(0, diffs.size()); - - diffs = fSyncService.compare(-1, "mainB:/a", -1, "mainA:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB:/a/b/c[-1] > mainA:/a/b/c[-1]]", diffs.toString()); - - // ETHREEOH-3643 - out = new PrintStream(fService.getFileOutputStream("mainB--layer:/a/b/c/foo")); - out.println("I am mainB--layer:/a/b/c/foo V2"); - out.close(); - - logger.debug("updated file: mainB--layer:/a/b/c/foo"); - - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB--layer:/a/b/c/foo[-1] > mainB:/a/b/c/foo[-1]]", diffs.toString()); - - logger.debug("updated: mainB:/a/b/c/foo"); - - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB--layer:/a/b/c/foo[-1] > mainB:/a/b/c/foo[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, "two", "two"); - - logger.debug("updated: mainB--layer:/a/b/c/foo to mainB:/a/b/c/foo"); - - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - logger.debug("flattened: mainB--layer:/a to mainB:/a"); - - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(0, diffs.size()); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("mainA"); - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - } - } - - public void testLayeredFolder4() throws Exception - { - try - { - logger.debug("start: testLayeredFolder4"); - - fService.createStore("mainA"); - fService.createStore("mainB"); - fService.createStore("mainB--layer"); - - logger.debug("created stores: mainA, mainB and mainB--layer"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - - fService.createDirectory("mainA:/", "a"); - fService.createDirectory("mainA:/a", "b"); - fService.createDirectory("mainA:/a/b", "c"); - fService.createDirectory("mainB:/", "a"); - - logger.debug("created directories: mainA:/a/b/c and mainB:/a"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - logger.debug("created layered directory: mainB--layer:/a -> mainB:/a"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - - // create equivalent of WCM layered folder between web project staging sandboxes (mainB:/a/b pointing to mainA:/a/b) - fService.createLayeredDirectory("mainA:/a/b", "mainB:/a", "b"); - - logger.debug("created layered directory: mainB:/a/b -> mainA:/a/b"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - - fService.createDirectory("mainB--layer:/a/b/c", "d"); - - logger.debug("created directory: mainB--layer:/a/b/c/d"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - - List diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB--layer:/a/b/c/d[-1] > mainB:/a/b/c/d[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - - logger.debug("updated: mainB--layer:/a/b/c/d to mainB:/a/b/c/d"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - logger.debug("flattened: mainB--layer:/a to mainB:/a"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - - fService.createFile("mainB--layer:/a/b/c/d", "foo"); - - PrintStream out = new PrintStream(fService.getFileOutputStream("mainB--layer:/a/b/c/d/foo")); - out.println("I am mainB--layer:/a/b/c/d/foo"); - out.close(); - - logger.debug("created file: mainB--layer:/a/b/c/foo"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - - fService.createStore("mainB--workflow1"); - - logger.debug("created store: mainB--workflow1"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - recursiveList("mainB--workflow1"); - - fService.createLayeredDirectory("mainB:/a", "mainB--workflow1:/", "a"); - - logger.debug("created layered dir: mainB--workflow1:/a -> mainB:/a"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - recursiveList("mainB--workflow1"); - - diffs = fSyncService.compare(-1, "mainB--workflow1:/a", -1, "mainB:/a", null); - assertEquals(0, diffs.size()); - - diffs = new ArrayList(1); - diffs.add(new AVMDifference(-1, "mainB--layer:/a/b/c/d/foo", -1, "mainB--workflow1:/a/b/c/d/foo", AVMDifference.NEWER)); - - assertNotNull(fService.lookup(-1, "mainB--workflow1:/a/b/c/d")); - - // ETHREEOH-3763 - fSyncService.update(diffs, null, false, false, false, false, null, null); - - logger.debug("updated: added file: mainB--workflow1:/a/b/c/d/foo"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - recursiveList("mainB--workflow1"); - - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals("[mainB--layer:/a/b/c/d/foo[-1] > mainB:/a/b/c/d/foo[-1]]", diffs.toString()); - - diffs = fSyncService.compare(-1, "mainB--workflow1:/a", -1, "mainB:/a", null); - assertEquals("[mainB--workflow1:/a/b/c/d/foo[-1] > mainB:/a/b/c/d/foo[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, true, true, "two", "two"); - - logger.debug("updated: added file: mainB:/a/b/c/d/foo"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - recursiveList("mainB--workflow1"); - - fSyncService.flatten("mainB--workflow1:/a", "mainB:/a"); - - logger.debug("flattened: added file: mainB:/a/b/c/d/foo"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - recursiveList("mainB--workflow1"); - - diffs = fSyncService.compare(-1, "mainB--workflow1:/a", -1, "mainB:/a", null); - assertEquals(0, diffs.size()); - - diffs = fSyncService.compare(-1, "mainB--workflow1:/a", -1, "mainB--layer:/a", null); - assertEquals(0, diffs.size()); - - logger.debug("finish: testLayeredFolder4"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("mainA"); - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - if (fService.getStore("mainB--workflow1") != null) { fService.purgeStore("mainB--workflow1"); } - } - } - - public void testLayeredFolderDelete1() throws Exception - { - try - { - fService.createStore("mainA"); - fService.createStore("mainB"); - - fService.createDirectory("mainA:/", "a"); - fService.createDirectory("mainA:/a", "b"); - - fService.createDirectory("mainB:/", "a"); - - fService.createStore("mainB--layer"); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - // note: short-cut - created directly in "staging" area (don't bother with sandbox mainA--layer for now) - fService.createFile("mainA:/a/b", "foo"); - - PrintStream out = new PrintStream(fService.getFileOutputStream("mainA:/a/b/foo")); - out.println("I am mainA:/a/b/foo"); - out.close(); - - logger.debug("created file: mainA:/a/b/foo"); - - // create equivalent of WCM layered folder between web project staging sandboxes (mainB:/a/b pointing to ,mainA:/a/b) - fService.createLayeredDirectory("mainA:/a/b", "mainB:/a", "b"); - - fService.createSnapshot("mainA", null, null); - fService.createSnapshot("mainB", null, null); - - logger.debug("created layered directory: mainB:/a/b -> mainA:/a/b"); - - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/b/foo"))); - String line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/b/foo", line); - - out = new PrintStream(fService.getFileOutputStream("mainB--layer:/a/b/foo")); - out.println("I am mainB--layer:/a/b/foo"); - out.close(); - - fService.createSnapshot("mainB--layer", null, null); - - logger.debug("updated file: mainB--layer:/a/b/foo"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainA:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/b/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/b/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainB--layer:/a/b/foo", line); - - List diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB--layer:/a/b/foo[-1] > mainB:/a/b/foo[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - logger.debug("updated: created file: mainB:/a/b/foo"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainB--layer:/a/b/foo", line); - - // delete file - note: short-cut - removed directly from "staging" area (don't bother with sandbox mainA--layer for now) - fService.removeNode("mainA:/a/b", "foo"); - fService.createSnapshot("mainA", null, null); - - logger.debug("removed file & snapshot: mainA:/a/b/foo"); - - // ETHREEOH-2297 - fService.removeNode("mainB--layer:/a/b", "foo"); - fService.createSnapshot("mainB--layer", null, null); - - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB--layer:/a/b/foo[-1] > mainB:/a/b/foo[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - fService.createSnapshot("mainB", null, null); - - logger.debug("updated: removed file: mainB:/a/b/foo"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("mainA"); - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - } - } - - public void testLayeredFolderDelete2() throws Exception - { - try - { - fService.createStore("mainA"); - fService.createStore("mainB"); - - fService.createDirectory("mainA:/", "a"); - fService.createDirectory("mainA:/a", "b"); - - fService.createDirectory("mainB:/", "a"); - - fService.createStore("mainB--layer"); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - // note: short-cut - created directly in "staging" area (don't bother with sandbox mainA--layer for now) - fService.createFile("mainA:/a/b", "foo"); - - PrintStream out = new PrintStream(fService.getFileOutputStream("mainA:/a/b/foo")); - out.println("I am mainA:/a/b/foo"); - out.close(); - - logger.debug("created file: mainA:/a/b/foo"); - - // create equivalent of WCM layered folder between web project staging sandboxes (mainB:/a/b pointing to ,mainA:/a/b) - fService.createLayeredDirectory("mainA:/a/b", "mainB:/a", "b"); - - fService.createSnapshot("mainA", null, null); - fService.createSnapshot("mainB", null, null); - - logger.debug("created layered directory: mainB:/a/b -> mainA:/a/b"); - - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/b/foo"))); - String line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/b/foo", line); - - out = new PrintStream(fService.getFileOutputStream("mainB--layer:/a/b/foo")); - out.println("I am mainB--layer:/a/b/foo"); - out.close(); - - fService.createSnapshot("mainB--layer", null, null); - - logger.debug("updated file: mainB--layer:/a/b/foo"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainA:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/b/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/b/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainB--layer:/a/b/foo", line); - - List diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB--layer:/a/b/foo[-1] > mainB:/a/b/foo[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - logger.debug("updated: created file: mainB:/a/b/foo"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainB--layer:/a/b/foo", line); - - // delete folder - note: short-cut - remove directly from "staging" area (don't bother with sandbox mainA--layer for now) - fService.removeNode("mainA:/a", "b"); - fService.createSnapshot("mainA", null, null); - - logger.debug("removed folder & snapshot: mainA:/a/b"); - - fService.removeNode("mainB--layer:/a/b", "foo"); - fService.createSnapshot("mainB--layer", null, null); - - logger.debug("removed file & snapshot: mainB--layer:/a/b/foo"); - - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB--layer:/a/b/foo[-1] > mainB:/a/b/foo[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - logger.debug("updated & flattened: removed file: mainB:/a/b/foo"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("mainA"); - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - } - } - - public void testLayeredFolderDelete3() throws Exception - { - try - { - fService.createStore("mainA"); - fService.createStore("mainB"); - - fService.createDirectory("mainA:/", "a"); - fService.createDirectory("mainA:/a", "b"); - - fService.createDirectory("mainB:/", "a"); - - fService.createStore("mainB--layer"); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - // note: short-cut - created directly in "staging" area (don't bother with sandbox mainA--layer for now) - fService.createFile("mainA:/a/b", "foo"); - - PrintStream out = new PrintStream(fService.getFileOutputStream("mainA:/a/b/foo")); - out.println("I am mainA:/a/b/foo"); - out.close(); - - logger.debug("created file: mainA:/a/b/foo"); - - // create equivalent of WCM layered folder between web project staging sandboxes (mainB:/a/b pointing to ,mainA:/a/b) - fService.createLayeredDirectory("mainA:/a/b", "mainB:/a", "b"); - - fService.createSnapshot("mainA", null, null); - fService.createSnapshot("mainB", null, null); - - logger.debug("created layered directory: mainB:/a/b -> mainA:/a/b"); - - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/b/foo"))); - String line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/b/foo", line); - - out = new PrintStream(fService.getFileOutputStream("mainB--layer:/a/b/foo")); - out.println("I am mainB--layer:/a/b/foo"); - out.close(); - - logger.debug("updated file: mainB--layer:/a/b/foo"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainA:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/b/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/b/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainB--layer:/a/b/foo", line); - - List diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB--layer:/a/b/foo[-1] > mainB:/a/b/foo[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - logger.debug("updated: created file: mainB:/a/b/foo"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainB--layer:/a/b/foo", line); - - // delete folder - note: short-cut - remove directly from "staging" area (don't bother with sandbox mainA--layer for now) - fService.removeNode("mainA:/a", "b"); - fService.createSnapshot("mainA", null, null); - - logger.debug("removed folder & snapshot: mainA:/a/b"); - - fService.createFile("mainB--layer:/a/b", "bar"); - - out = new PrintStream(fService.getFileOutputStream("mainB--layer:/a/b/bar")); - out.println("I am mainB--layer:/a/b/bar"); - out.close(); - - logger.debug("created file: mainB--layer:/a/b/bar"); - - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB--layer:/a/b/bar[-1] > mainB:/a/b/bar[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, "two", "two"); - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - logger.debug("updated & flattened: created file: mainB:/a/b/bar"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("mainA"); - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - } - } - - public void testLayeredFolderDelete4() throws Exception - { - try - { - fService.createStore("mainA"); - fService.createStore("mainB"); - - fService.createDirectory("mainA:/", "a"); - fService.createDirectory("mainA:/a", "b"); - - fService.createDirectory("mainB:/", "a"); - - fService.createStore("mainB--layer"); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - // note: short-cut - created directly in "staging" area (don't bother with sandbox mainA--layer for now) - fService.createFile("mainA:/a/b", "foo"); - - PrintStream out = new PrintStream(fService.getFileOutputStream("mainA:/a/b/foo")); - out.println("I am mainA:/a/b/foo"); - out.close(); - - logger.debug("created file: mainA:/a/b/foo"); - - // create equivalent of WCM layered folder between web project staging sandboxes (mainB:/a/b pointing to ,mainA:/a/b) - fService.createLayeredDirectory("mainA:/a/b", "mainB:/a", "b"); - - fService.createSnapshot("mainA", null, null); - fService.createSnapshot("mainB", null, null); - - logger.debug("created layered directory: mainB:/a/b -> mainA:/a/b"); - - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/b/foo"))); - String line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/b/foo", line); - - out = new PrintStream(fService.getFileOutputStream("mainB--layer:/a/b/foo")); - out.println("I am mainB--layer:/a/b/foo"); - out.close(); - - logger.debug("updated file: mainB--layer:/a/b/foo"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainA:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/b/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/b/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainB--layer:/a/b/foo", line); - - List diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB--layer:/a/b/foo[-1] > mainB:/a/b/foo[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - logger.debug("updated & flattened: updated file: mainB:/a/b/foo"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainB--layer:/a/b/foo", line); - - // delete folder - note: short-cut - remove directly from "staging" area (don't bother with sandbox mainA--layer for now) - fService.removeNode("mainA:/a", "b"); - fService.createSnapshot("mainA", null, null); - - logger.debug("removed folder & snapshot: mainA:/a/b"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainB--layer:/a/b/foo", line); - - out = new PrintStream(fService.getFileOutputStream("mainB--layer:/a/b/foo")); - out.println("I am mainB--layer:/a/b/foo V2"); - out.close(); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainB--layer:/a/b/foo V2", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainB--layer:/a/b/foo", line); - - logger.debug("updated file: mainB--layer:/a/b/foo"); - - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB--layer:/a/b/foo[-1] > mainB:/a/b/foo[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, "two", "two"); - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - logger.debug("updated & flattened: updated file: mainB:/a/b/foo"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainB--layer:/a/b/foo V2", line); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("mainA"); - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - } - } - - public void testLayeredFileDeleteFile1() throws Exception - { - try - { - fService.createStore("mainA"); - fService.createStore("mainB"); - fService.createStore("mainB--layer"); - - logger.debug("created 3 stores: mainA, mainB, mainB--layer"); - - fService.createDirectory("mainA:/", "a"); - fService.createDirectory("mainB:/", "a"); - - logger.debug("created 2 plain dirs: mainA:/a and mainB:/a"); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - logger.debug("created layered dir: mainB--layer:/a -> mainB:/a"); - - // note: short-cut - created directly in "staging" area (don't bother with sandbox mainA--layer for now) - fService.createFile("mainA:/a", "foo"); - - PrintStream out = new PrintStream(fService.getFileOutputStream("mainA:/a/foo")); - out.println("I am mainA:/a/foo"); - out.close(); - - logger.debug("created file: mainA:/a/foo"); - - // create equivalent of WCM layered folder between web project staging sandboxes (mainB:/a/b pointing to ,mainA:/a/b) - fService.createLayeredFile("mainA:/a/foo", "mainB:/a", "foo"); - - logger.debug("created layered file: mainB:/a/foo -> mainA:/a/foo"); - - fService.createSnapshot("mainA", null, null); - fService.createSnapshot("mainB", null, null); - - logger.debug("created 2 snapshots: mainA and mainB"); - - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/foo"))); - String line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainA:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - List diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(0, diffs.size()); - - fService.removeNode("mainB--layer:/a", "foo"); - fService.createSnapshot("mainB--layer", null, null); - - logger.debug("removed file & snapshot: mainB--layer:/a/foo"); - - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals("[mainB--layer:/a/foo[-1] > mainB:/a/foo[-1]]", diffs.toString()); - - /* - // For testing ALF-4800 (testLayeredFileDelete1 / testLayeredFileDelete2 - error in dispatchUpdate) - // In addition to sleep below, increase frequency of OrphanReaper (eg. set startDelay/repeatInterval to 2000/500 msecs) - logger.debug("start sleep"); - Thread.sleep(30000); - logger.debug("finish sleep"); - */ - - // ETHREEOH-2844 - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - logger.debug("updated & flattened: removed file: mainB:/a/foo"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("mainA"); - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - } - } - - public void testLayeredFileDeleteFile2() throws Exception - { - try - { - fService.createStore("mainA"); - fService.createStore("mainB"); - fService.createStore("mainB--layer"); - - logger.debug("created 3 stores: mainA, mainB, mainB--layer"); - - fService.createDirectory("mainA:/", "a"); - fService.createDirectory("mainB:/", "a"); - - logger.debug("created 2 plain dirs: mainA:/a and mainB:/a"); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - logger.debug("created layered dir: mainB--layer:/a -> mainB:/a"); - - // note: short-cut - created directly in "staging" area (don't bother with sandbox mainA--layer for now) - fService.createFile("mainA:/a", "foo"); - - PrintStream out = new PrintStream(fService.getFileOutputStream("mainA:/a/foo")); - out.println("I am mainA:/a/foo"); - out.close(); - - logger.debug("created file: mainA:/a/foo"); - - // create equivalent of WCM layered folder between web project staging sandboxes (mainB:/a/b pointing to ,mainA:/a/b) - fService.createLayeredFile("mainA:/a/foo", "mainB:/a", "foo"); - - logger.debug("created layered file: mainB:/a/foo -> mainA:/a/foo"); - - fService.createSnapshot("mainA", null, null); - fService.createSnapshot("mainB", null, null); - - logger.debug("created 2 snapshots: mainA and mainB"); - - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/foo"))); - String line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainA:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - List diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(0, diffs.size()); - - // note: short-cut - removed directly from "staging" area (don't bother with sandbox mainA--layer for now) - fService.removeNode("mainA:/a", "foo"); - fService.createSnapshot("mainA", null, null); - - logger.debug("removed file & snapshot: mainA:/a/foo"); - - try - { - fService.getFileInputStream(-1, "mainA:/a/foo"); - fail("Unexpected"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - try - { - fService.getFileInputStream(-1, "mainB:/a/foo"); - fail("Unexpected"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - try - { - fService.getFileInputStream(-1, "mainB--layer:/a/foo"); - fail("Unexpected"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - fService.removeNode("mainB--layer:/a", "foo"); - fService.createSnapshot("mainB--layer", null, null); - - logger.debug("removed file & snapshot: mainB--layer:/a/foo"); - - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals("[mainB--layer:/a/foo[-1] > mainB:/a/foo[-1]]", diffs.toString()); - - /* - // For testing ALF-4800 (testLayeredFileDelete1 / testLayeredFileDelete2 - error in dispatchUpdate) - // In addition to sleep below, increase frequency of OrphanReaper (eg. set startDelay/repeatInterval to 2000/500 msecs) - logger.debug("start sleep"); - Thread.sleep(30000); - logger.debug("finish sleep"); - */ - - // ETHREEOH-2829 - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - logger.debug("updated & flattened: removed file: mainB:/a/foo"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("mainA"); - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - } - } - - public void testLayeredFileDeleteFile3() throws Exception - { - try - { - fService.createStore("mainB"); - fService.createStore("mainB--layer"); - - logger.debug("created 2 stores: mainB, mainB--layer"); - - fService.createDirectory("mainB:/", "a"); - - logger.debug("created plain dir: mainB:/a"); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - logger.debug("created layered dir: mainB--layer:/a -> mainB:/a"); - - // create equivalent of WCM layered file between web project staging sandboxes (mainB:/a/b/foo pointing to mainA:/a/b/foo) - fService.createLayeredFile("mainA:/a/foo", "mainB:/a", "foo"); // note: unbacked/stale here ... even store does not exist !! - - logger.debug("created layered file: mainB:/a/foo -> mainA:/a/foo"); - - List diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(0, diffs.size()); - - // create file - fService.createFile("mainB--layer:/a", "bar"); - - logger.debug("created file: mainB--layer:/a/bar"); - - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals("[mainB--layer:/a/bar[-1] > mainB:/a/bar[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - - logger.debug("updated: created file: mainB:/a/bar"); - - fSyncService.flatten("mainB--layer:/a", "mainB:/a"); - - logger.debug("flattened: created file: mainB:/a/bar"); - - // delete layered file (from mainB--layer) - fService.removeNode("mainB--layer:/a", "foo"); - fService.createSnapshot("mainB--layer", null, null); - - logger.debug("removed file & snapshot: mainB--layer:/a/foo"); - - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals("[mainB--layer:/a/foo[-1] > mainB:/a/foo[-1]]", diffs.toString()); - - fService.createStore("mainB--workflow1"); - - logger.debug("created store: mainB--workflow1"); - - recursiveList("mainB--workflow1"); - - fService.createLayeredDirectory("mainB:/a", "mainB--workflow1:/", "a"); - - logger.debug("created layered dir: mainB--workflow1:/a -> mainB:/a"); - - recursiveList("mainB"); - recursiveList("mainB--layer"); - recursiveList("mainB--workflow1"); - - diffs = fSyncService.compare(-1, "mainB--workflow1:/a", -1, "mainB:/a", null); - assertEquals(0, diffs.size()); - - diffs = new ArrayList(1); - diffs.add(new AVMDifference(-1, "mainB--layer:/a/foo", -1, "mainB--workflow1:/a/foo", AVMDifference.NEWER)); - - // ETHREEOH-2868 - fSyncService.update(diffs, null, false, false, false, false, null, null); - - logger.debug("updated: removed file: mainB--workflow1:/a/foo"); - - recursiveList("mainB"); - recursiveList("mainB--layer"); - recursiveList("mainB--workflow1"); - - diffs = fSyncService.compare(-1, "mainB--workflow1:/a", -1, "mainB:/a", null); - assertEquals("[mainB--workflow1:/a/foo[-1] > mainB:/a/foo[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, true, true, "one", "one"); - fSyncService.flatten("mainB--workflow1:/a", "mainB:/a"); - - logger.debug("updated & flattened: removed file: mainB:/a/foo"); - - diffs = fSyncService.compare(-1, "mainB--workflow1:/a", -1, "mainB:/a", null); - assertEquals(0, diffs.size()); - - diffs = fSyncService.compare(-1, "mainB--workflow1:/a", -1, "mainB--layer:/a", null); - assertEquals(0, diffs.size()); - - fSyncService.update(diffs, null, true, true, false, false, null, null); - fSyncService.flatten("mainB--layer:/a", "mainB--workflow1:/a"); - - recursiveList("mainB"); - recursiveList("mainB--layer"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - if (fService.getStore("mainB--workflow1") != null) { fService.purgeStore("mainB--workflow1"); } - } - } - - public void testLayeredFileDeleteFile4() throws Exception - { - try - { - fService.createStore("mainA"); - fService.createStore("mainB"); - fService.createStore("mainB--layer"); - - logger.debug("created 3 stores: mainA, mainB, mainB--layer"); - - fService.createDirectory("mainA:/", "a"); - fService.createDirectory("mainB:/", "a"); - - logger.debug("created 2 plain dirs: mainA:/a and mainB:/a"); - - fService.createSnapshot("mainA", null, null); - fService.createSnapshot("mainB", null, null); - - logger.debug("created 2 snapshots: mainA and mainB"); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - logger.debug("created layered dir: mainB--layer:/a -> mainB:/a"); - - // note: short-cut - created directly in "staging" areas (don't bother with sandbox mainA--layer or mainB--layer for now) - fService.createDirectory("mainA:/a", "b"); - fService.createDirectory("mainB:/a", "b"); - - logger.debug("created directories: mainA:/a/b & mainB:/a/b"); - - fService.createFile("mainA:/a/b", "foo"); - - PrintStream out = new PrintStream(fService.getFileOutputStream("mainA:/a/b/foo")); - out.println("I am mainA:/a/b/foo"); - out.close(); - - logger.debug("created file: mainA:/a/b/foo"); - - // create equivalent of WCM layered file between web project staging sandboxes (mainB:/a/b/foo pointing to mainA:/a/b/foo) - fService.createLayeredFile("mainA:/a/b/foo", "mainB:/a/b", "foo"); - - logger.debug("created layered file: mainB:/a/b/foo -> mainA:/a/b/foo"); - - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/b/foo"))); - String line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/b/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/b/foo", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainA:/a/b/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/b/foo", line); - - List diffs = fSyncService.compare(-1, "mainB--layer:/a/b", -1, "mainB:/a/b", null); - assertEquals(0, diffs.size()); - - // create file - fService.createFile("mainB--layer:/a/b", "bar"); - - logger.debug("created file: mainB--layer:/a/b/bar"); - - diffs = fSyncService.compare(-1, "mainB--layer:/a/b", -1, "mainB:/a/b", null); - assertEquals("[mainB--layer:/a/b/bar[-1] > mainB:/a/b/bar[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, "one", "one"); - fSyncService.flatten("mainB--layer:/a/b", "mainB:/a/b"); - - logger.debug("updated & flattened: created file: mainB:/a/b/bar"); - - // delete layered file (from mainB--layer) - fService.removeNode("mainB--layer:/a/b", "foo"); - fService.createSnapshot("mainB--layer", null, null); - - logger.debug("removed file & snapshot: mainB--layer:/a/b/foo"); - - diffs = fSyncService.compare(-1, "mainB--layer:/a/b", -1, "mainB:/a/b", null); - assertEquals("[mainB--layer:/a/b/foo[-1] > mainB:/a/b/foo[-1]]", diffs.toString()); - - fService.createStore("mainB--workflow1"); - - fService.createLayeredDirectory("mainB:/a", "mainB--workflow1:/", "a"); - - logger.debug("created layered dir: mainB--workflow1:/a -> mainB:/a"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - recursiveList("mainB--workflow1"); - - diffs = fSyncService.compare(-1, "mainB--workflow1:/a/b", -1, "mainB:/a/b", null); - assertEquals(0, diffs.size()); - - diffs = new ArrayList(1); - diffs.add(new AVMDifference(-1, "mainB--layer:/a/b/foo", -1, "mainB--workflow1:/a/b/foo", AVMDifference.NEWER)); - - // ETHREEOH-2868 - fSyncService.update(diffs, null, false, false, false, false, null, null); - - logger.debug("updated: removed file: mainB--workflow1:/a/b/foo"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - recursiveList("mainB--workflow1"); - - diffs = fSyncService.compare(-1, "mainB--workflow1:/a/b", -1, "mainB:/a/b", null); - assertEquals("[mainB--workflow1:/a/b/foo[-1] > mainB:/a/b/foo[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, true, true, "one", "one"); - fSyncService.flatten("mainB--workflow1:/a/b", "mainB:/a/b"); - - logger.debug("updated & flattened: removed file: mainB:/a/b/foo"); - - diffs = fSyncService.compare(-1, "mainB--workflow1:/a/b", -1, "mainB:/a/b", null); - assertEquals(0, diffs.size()); - - diffs = fSyncService.compare(-1, "mainB--workflow1:/a/b", -1, "mainB--layer:/a/b", null); - assertEquals(0, diffs.size()); - - fSyncService.update(diffs, null, true, true, false, false, null, null); - fSyncService.flatten("mainB--layer:/a/b", "mainB--workflow1:/a/b"); - - recursiveList("mainA"); - recursiveList("mainB"); - recursiveList("mainB--layer"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("mainA"); - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - if (fService.getStore("mainB--workflow1") != null) { fService.purgeStore("mainB--workflow1"); } - } - } - - // ALF-1948 - public void testDeleteLD5() throws Exception - { - try - { - fService.createStore("mainB"); - fService.createStore("mainB--layer"); - fService.createDirectory("mainB:/", "a"); - fService.createSnapshot("mainB", null, null); - - SortedMap directoryListing = fService.getDirectoryListing(-1, "mainB:/a"); - assertTrue(directoryListing.isEmpty()); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - fService.createFile("mainB--layer:/a", "testfile.txt"); - fService.createDirectory("mainB--layer:/a", "testfolder"); - fService.createSnapshot("mainB--layer", null, null); - - List diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(2, diffs.size()); - assertEquals("[mainB--layer:/a/testfile.txt[-1] > mainB:/a/testfile.txt[-1], mainB--layer:/a/testfolder[-1] > mainB:/a/testfolder[-1]]", diffs.toString()); - - fService.removeNode("mainB--layer:/a", "testfile.txt"); - fService.createSnapshot("mainB--layer", null, null); - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[mainB--layer:/a/testfolder[-1] > mainB:/a/testfolder[-1]]", diffs.toString()); - - fService.removeNode("mainB--layer:/a", "testfolder"); - fService.createSnapshot("mainB--layer", null, null); - diffs = fSyncService.compare(-1, "mainB--layer:/a", -1, "mainB:/a", null); - assertEquals(0, diffs.size()); - - directoryListing = fService.getDirectoryListing(-1, "mainB--layer:/a"); - assertTrue(directoryListing.isEmpty()); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - finally - { - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - } - } - - // ALF-1948 - public void testDeleteLD6() throws Exception - { - try - { - fService.createStore("mainB"); - fService.createStore("mainB--layer"); - fService.createDirectory("mainB:/", "a"); - fService.createSnapshot("mainB", null, null); - - SortedMap directoryListing = fService.getDirectoryListing(-1, "mainB:/a"); - assertTrue(directoryListing.isEmpty()); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - performDeletion(100); - fSyncService.resetLayer("mainB--layer:/a"); - performDeletion(500); - fSyncService.resetLayer("mainB--layer:/a"); - performDeletion(500); - fSyncService.resetLayer("mainB--layer:/a"); - performDeletion(1000); - fSyncService.resetLayer("mainB--layer:/a"); - performDeletion(2000); - fSyncService.resetLayer("mainB--layer:/a"); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - finally - { - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - } - } - - private void performDeletion(int objectsAmount) - { - SortedMap directoryListing; - String timestamp = String.valueOf(System.currentTimeMillis()); - for (int i = 0; i < objectsAmount; i++) - { - String commonPart = "-" + timestamp + "-" + i; - fService.createFile("mainB--layer:/a", ("testfile" + commonPart + ".txt")); - fService.createDirectory("mainB--layer:/a", ("testfolder" + commonPart)); - } - fService.createSnapshot("mainB--layer", null, null); - - List compare = fSyncService.compare(-1, "mainB:/a", -1, "mainB--layer:/a", null); - assertEquals(2 * objectsAmount, compare.size()); - - long time = System.currentTimeMillis(); - for (int i = 0; i < objectsAmount; i++) - { - String commonPart = "-" + timestamp + "-" + i; - fService.removeNode("mainB--layer:/a", ("testfile" + commonPart + ".txt")); - fService.removeNode("mainB--layer:/a", ("testfolder" + commonPart)); - } - fService.createSnapshot("mainB--layer", null, null); - logger.info("Time spent on deletion of " + compare.size() + " objects is " + (System.currentTimeMillis() - time)); - - directoryListing = fService.getDirectoryListing(-1, "mainB--layer:/a"); - assertTrue(directoryListing.isEmpty()); - } - - protected void recursiveContents(String path) - { - String contentsStr = recursiveContents(path, -1, true); - if (logger.isDebugEnabled()) - { - logger.debug(contentsStr); - } - } - - /** - * Get the recursive contents of the given path and version. - * @param path - * @param version - * @return A string representation of the contents. - */ - protected String recursiveContents(String path, int version, boolean followLinks) - { - String val = recursiveList(path, version, 0, followLinks); - return val.substring(val.indexOf('\n')); - } - - protected void recursiveList(String store) - { - recursiveList(store, -1); - } - - protected void recursiveList(String store, int version) - { - String list = recursiveList(store, version, true); - if (logger.isDebugEnabled()) - { - logger.debug("\n\n"+store+":"+"\n"+list+"\n"); - } - } - - /** - * Helper to write a recursive listing of an AVMStore at a given version. - * @param repoName The name of the AVMStore. - * @param version The version to look under. - */ - protected String recursiveList(String repoName, int version, boolean followLinks) - { - return recursiveList(repoName + ":/", version, 0, followLinks); - } - - /** - * Recursive list the given path. - * @param path The path. - * @param version The version. - * @param indent The current indent level. - */ - protected String recursiveList(String path, int version, int indent, boolean followLinks) - { - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < indent; i++) - { - builder.append(' '); - } - builder.append(path.substring(path.lastIndexOf('/') + 1)); - builder.append(' '); - AVMNodeDescriptor desc = fService.lookup(version, path, true); - builder.append(desc.toString()); - - List ancs = fService.getHistory(desc, -1); - for (AVMNodeDescriptor anc : ancs) - { - builder.append("--->").append(anc.toString()); - } - - builder.append('\n'); - if (desc.getType() == AVMNodeType.PLAIN_DIRECTORY || - (desc.getType() == AVMNodeType.LAYERED_DIRECTORY && followLinks)) - { - String basename = path.endsWith("/") ? path : path + "/"; - Map listing = fService.getDirectoryListing(version, path); - for (String name : listing.keySet()) - { - if (logger.isTraceEnabled()) { logger.trace(name); } - builder.append(recursiveList(basename + name, version, indent + 2, followLinks)); - } - List deletedList = fService.getDeleted(version, path); - for (String name : deletedList) - { - if (logger.isTraceEnabled()) { logger.trace(name); } - builder.append(recursiveList(basename + name, version, indent + 2, followLinks)); - } - } - return builder.toString(); - } - - /** - * Setup a basic tree. - */ - protected void setupBasicTree() - throws IOException - { - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createDirectory("main:/a/b", "c"); - fService.createDirectory("main:/", "d"); - fService.createDirectory("main:/d", "e"); - fService.createDirectory("main:/d/e", "f"); - - - OutputStream out = fService.createFile("main:/a/b/c", "foo"); - byte [] buff = "I am main:/a/b/c/foo".getBytes(); - out.write(buff); - out.close(); - - /* - fService.createFile("main:/a/b/c", "foo").close(); - ContentWriter writer = fService.getContentWriter("main:/a/b/c/foo"); - writer.setEncoding("UTF-8"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent("I am main:/a/b/c/foo"); - */ - - out = fService.createFile("main:/a/b/c", "bar"); - buff = "I am main:/a/b/c/bar".getBytes(); - out.write(buff); - out.close(); - - /* - fService.createFile("main:/a/b/c", "bar").close(); - writer = fService.getContentWriter("main:/a/b/c/bar"); - // Force a conversion - writer.setEncoding("UTF-16"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent("I am main:/a/b/c/bar"); - */ - - fService.createSnapshot("main", null, null); - } -} diff --git a/source/test-java/org/alfresco/repo/avm/AVMServicePerfTest.java b/source/test-java/org/alfresco/repo/avm/AVMServicePerfTest.java deleted file mode 100644 index 5a7451a62a..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMServicePerfTest.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . */ - -package org.alfresco.repo.avm; - -import java.io.PrintStream; - -import org.alfresco.test_category.LegacyCategory; -import org.junit.experimental.categories.Category; - -/** - * Performance test(s). - * @author britt - */ -@Category(LegacyCategory.class) -public class AVMServicePerfTest extends AVMServiceTestBase -{ - public void testSetup() throws Exception - { - super.testSetup(); - } - - public void testAdd100x10a() throws Throwable - { - add(100, 10); - } - - /* - public void xtestAdd100x10b() throws Throwable - { - add(100, 10); - } - - public void xtestAdd100x10c() throws Throwable - { - add(100, 10); - } - - public void xtestAdd100x10d() throws Throwable - { - add(100, 10); - } - - public void xtestAdd500x2e() throws Throwable - { - add(500, 2); - } - - public void xtestAdd500x4g() throws Throwable - { - add(500, 4); - } - */ - - /** - * Test adding 100 files to each of 10 directories. - */ - private void add(int fileCnt, int dirCnt) throws Throwable - { - try - { - if ((dirCnt < 1) || (dirCnt > 10)) - { - throw new Exception("Invalid ("+dirCnt+") - currently supports between 1 and 10 directories"); - } - - String [] dirs = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" }; - for (int j = 0; j < dirCnt; j++) - { - String dir = dirs[j]; - fService.createDirectory("main:/", dir); - String ndir = "main:/" + dir; - fService.createDirectory(ndir, dir); - ndir = ndir + "/" + dir; - for (int i = 0; i < fileCnt; i++) - { - PrintStream out = new PrintStream(fService.createFile(ndir, "file" + i)); - out.println("I am " + ndir + "/file" + i); - - //System.out.println(ndir + "/file" + i); - - out.close(); - } - fService.createSnapshot("main", null, null); - } - - // System.out.println(recursiveList("main", -1)); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } -} \ No newline at end of file diff --git a/source/test-java/org/alfresco/repo/avm/AVMServicePermissionsTest.java b/source/test-java/org/alfresco/repo/avm/AVMServicePermissionsTest.java deleted file mode 100644 index d2cbfd4bc4..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMServicePermissionsTest.java +++ /dev/null @@ -1,4093 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ - -package org.alfresco.repo.avm; - -import java.io.IOException; -import java.io.Serializable; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.transaction.UserTransaction; - -import junit.framework.TestCase; - -import org.alfresco.config.JNDIConstants; -import org.alfresco.model.ContentModel; -import org.alfresco.repo.domain.permissions.AccessControlListDAO; -import org.alfresco.repo.domain.permissions.Acl; -import org.alfresco.repo.domain.permissions.AclDAO; -import org.alfresco.repo.security.authentication.AuthenticationComponent; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.security.authentication.MutableAuthenticationDao; -import org.alfresco.repo.security.permissions.PermissionReference; -import org.alfresco.repo.security.permissions.PermissionServiceSPI; -import org.alfresco.repo.security.permissions.impl.ModelDAO; -import org.alfresco.service.ServiceRegistry; -import org.alfresco.service.cmr.avm.AVMNodeDescriptor; -import org.alfresco.service.cmr.avm.AVMService; -import org.alfresco.service.cmr.avmsync.AVMDifference; -import org.alfresco.service.cmr.avmsync.AVMSyncService; -import org.alfresco.service.cmr.dictionary.DictionaryService; -import org.alfresco.service.cmr.repository.ContentReader; -import org.alfresco.service.cmr.repository.ContentService; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.cmr.repository.StoreRef; -import org.alfresco.service.cmr.security.AccessPermission; -import org.alfresco.service.cmr.security.AccessStatus; -import org.alfresco.service.cmr.security.AuthorityService; -import org.alfresco.service.cmr.security.MutableAuthenticationService; -import org.alfresco.service.cmr.security.PermissionService; -import org.alfresco.service.cmr.security.PersonService; -import org.alfresco.service.namespace.NamespacePrefixResolver; -import org.alfresco.service.namespace.NamespaceService; -import org.alfresco.service.namespace.QName; -import org.alfresco.service.transaction.TransactionService; -import org.alfresco.test_category.LegacyCategory; -import org.junit.experimental.categories.Category; -import org.springframework.context.ApplicationContext; -import org.springframework.orm.hibernate3.LocalSessionFactoryBean; - -/** - * Specifically test AVM permissions with the updated ACL schema - * - * @author andyh - */ -@Category(LegacyCategory.class) -public class AVMServicePermissionsTest extends TestCase -{ - private static ApplicationContext applicationContext = AVMTestSuite.getContext(); - - protected NodeService nodeService; - - protected DictionaryService dictionaryService; - - protected PermissionServiceSPI permissionService; - - protected MutableAuthenticationService authenticationService; - - private MutableAuthenticationDao authenticationDAO; - - protected LocalSessionFactoryBean sessionFactory; - - protected NodeRef rootNodeRef; - - protected NamespacePrefixResolver namespacePrefixResolver; - - protected ServiceRegistry serviceRegistry; - - protected NodeRef systemNodeRef; - - protected AuthenticationComponent authenticationComponent; - - protected ModelDAO permissionModelDAO; - - protected PersonService personService; - - protected AuthorityService authorityService; - - private AclDAO aclDaoComponent; - - private UserTransaction testTX; - - private TransactionService transactionService; - - private AVMService avmService; - - private AccessControlListDAO avmACLDAO; - - private AVMNodeDAO avmNodeDAO; - - private AVMSyncService avmSyncService; - - private ContentService contentService; - - public AVMServicePermissionsTest() - { - super(); - } - - @Override - protected void setUp() throws Exception - { - avmNodeDAO = (AVMNodeDAO) applicationContext.getBean("avmNodeDAO"); - - avmACLDAO = (AccessControlListDAO) applicationContext.getBean("avmNodeACLDAO"); - - aclDaoComponent = (AclDAO) applicationContext.getBean("aclDAO"); - avmService = (AVMService) applicationContext.getBean("avmService"); - avmSyncService = (AVMSyncService) applicationContext.getBean("AVMSyncService"); - - nodeService = (NodeService) applicationContext.getBean("nodeService"); - dictionaryService = (DictionaryService) applicationContext.getBean(ServiceRegistry.DICTIONARY_SERVICE.getLocalName()); - permissionService = (PermissionServiceSPI) applicationContext.getBean("permissionService"); - namespacePrefixResolver = (NamespacePrefixResolver) applicationContext.getBean(ServiceRegistry.NAMESPACE_SERVICE.getLocalName()); - authenticationService = (MutableAuthenticationService) applicationContext.getBean("authenticationService"); - authenticationComponent = (AuthenticationComponent) applicationContext.getBean("authenticationComponent"); - serviceRegistry = (ServiceRegistry) applicationContext.getBean(ServiceRegistry.SERVICE_REGISTRY); - permissionModelDAO = (ModelDAO) applicationContext.getBean("permissionsModelDAO"); - personService = (PersonService) applicationContext.getBean("personService"); - authorityService = (AuthorityService) applicationContext.getBean("authorityService"); - contentService = (ContentService) applicationContext.getBean("contentService"); - - authenticationComponent.setCurrentUser(authenticationComponent.getSystemUserName()); - authenticationDAO = (MutableAuthenticationDao) applicationContext.getBean("authenticationDao"); - transactionService = (TransactionService) applicationContext.getBean("transactionComponent"); - - testTX = transactionService.getUserTransaction(); - testTX.begin(); - this.authenticationComponent.setSystemUserAsCurrentUser(); - - StoreRef storeRef = nodeService.createStore(StoreRef.PROTOCOL_WORKSPACE, "Test_" + System.nanoTime()); - rootNodeRef = nodeService.getRootNode(storeRef); - - QName children = ContentModel.ASSOC_CHILDREN; - QName system = QName.createQName(NamespaceService.SYSTEM_MODEL_1_0_URI, "system"); - QName container = ContentModel.TYPE_CONTAINER; - QName types = QName.createQName(NamespaceService.SYSTEM_MODEL_1_0_URI, "people"); - - systemNodeRef = nodeService.createNode(rootNodeRef, children, system, container).getChildRef(); - NodeRef typesNodeRef = nodeService.createNode(systemNodeRef, children, types, container).getChildRef(); - Map props = createPersonProperties("andy"); - nodeService.createNode(typesNodeRef, children, ContentModel.TYPE_PERSON, container, props).getChildRef(); - props = createPersonProperties("lemur"); - nodeService.createNode(typesNodeRef, children, ContentModel.TYPE_PERSON, container, props).getChildRef(); - - // create an authentication object e.g. the user - if (authenticationDAO.userExists("andy")) - { - authenticationService.deleteAuthentication("andy"); - } - authenticationService.createAuthentication("andy", "andy".toCharArray()); - - if (authenticationDAO.userExists("lemur")) - { - authenticationService.deleteAuthentication("lemur"); - } - authenticationService.createAuthentication("lemur", "lemur".toCharArray()); - - if (authenticationDAO.userExists(AuthenticationUtil.getAdminUserName())) - { - authenticationService.deleteAuthentication(AuthenticationUtil.getAdminUserName()); - } - authenticationService.createAuthentication(AuthenticationUtil.getAdminUserName(), "admin".toCharArray()); - - if (authenticationDAO.userExists("manager")) - { - authenticationService.deleteAuthentication("manager"); - } - authenticationService.createAuthentication("manager", "manager".toCharArray()); - - if (authenticationDAO.userExists("publisher")) - { - authenticationService.deleteAuthentication("publisher"); - } - authenticationService.createAuthentication("publisher", "publisher".toCharArray()); - - if (authenticationDAO.userExists("contributor")) - { - authenticationService.deleteAuthentication("contributor"); - } - authenticationService.createAuthentication("contributor", "contributor".toCharArray()); - - if (authenticationDAO.userExists("reviewer")) - { - authenticationService.deleteAuthentication("reviewer"); - } - authenticationService.createAuthentication("reviewer", "reviewer".toCharArray()); - - authenticationComponent.clearCurrentSecurityContext(); - - removeStore("main"); - } - - @Override - protected void tearDown() throws Exception - { - - try - { - testTX.commit(); - } - catch (Throwable t) - { - t.printStackTrace(); - } - finally - { - AuthenticationUtil.clearCurrentSecurityContext(); - super.tearDown(); - } - } - - protected void runAs(String userName) - { - authenticationService.authenticate(userName, userName.toCharArray()); - assertNotNull(authenticationService.getCurrentUserName()); - // for(GrantedAuthority authority : woof.getAuthorities()) - // { - // System.out.println("Auth = "+authority.getAuthority()); - // } - - } - - private Map createPersonProperties(String userName) - { - HashMap properties = new HashMap(); - properties.put(ContentModel.PROP_USERNAME, userName); - return properties; - } - - protected PermissionReference getPermission(String permission) - { - return permissionModelDAO.getPermissionReference(null, permission); - } - - private void buildBaseStructure(String base) throws IOException - { - avmService.createStore(base); - avmService.createDirectory(base + ":/", "base"); - avmService.createDirectory(base + ":/base", "d-a"); - avmService.createDirectory(base + ":/base/d-a", "d-aa"); - avmService.createDirectory(base + ":/base/d-a", "d-ab"); - avmService.createDirectory(base + ":/base/d-a", "d-ac"); - avmService.createFile(base + ":/base/d-a", "f-aa").close(); - avmService.createDirectory(base + ":/base", "d-b"); - avmService.createDirectory(base + ":/base/d-b", "d-ba"); - avmService.createDirectory(base + ":/base/d-b", "d-bb"); - avmService.createDirectory(base + ":/base/d-b", "d-bc"); - avmService.createFile(base + ":/base/d-b", "f-ba").close(); - avmService.createDirectory(base + ":/base", "d-c"); - avmService.createDirectory(base + ":/base/d-c", "d-ca"); - avmService.createDirectory(base + ":/base/d-c", "d-cb"); - avmService.createDirectory(base + ":/base/d-c", "d-cc"); - avmService.createFile(base + ":/base/d-c", "f-ca").close(); - avmService.createFile(base + ":/base", "f-a").close(); - - avmService.createDirectory(base + ":/base", "d-d"); - avmService.createLayeredDirectory(base + ":/base/d-a", base + ":/base/d-d", "layer-d-a"); - avmService.createLayeredDirectory(base + ":/base/d-b", base + ":/base/d-d", "layer-d-b"); - avmService.createLayeredDirectory(base + ":/base/d-c", base + ":/base/d-d", "layer-d-c"); - avmService.createLayeredFile(base + ":/base/f-a", base + ":/base/d-d", "layer-fa"); - - avmService.createLayeredDirectory(base + ":/base", base + ":/", "layer"); - - String layeredStore1 = base + "-layer-base"; - avmService.createStore(layeredStore1); - avmService.createLayeredDirectory(base + ":/base", layeredStore1 + ":/", "layer-to-base"); - - String layeredStore2 = base + "-layer-a"; - avmService.createStore(layeredStore2); - avmService.createLayeredDirectory(base + ":/base/d-a", layeredStore2 + ":/", "layer-to-d-a"); - - String layeredStore3 = base + "-layer-b"; - avmService.createStore(layeredStore3); - avmService.createLayeredDirectory(base + ":/base/d-b", layeredStore3 + ":/", "layer-to-d-b"); - - String layeredStore4 = base + "-layer-c"; - avmService.createStore(layeredStore4); - avmService.createLayeredDirectory(base + ":/base/d-c", layeredStore4 + ":/", "layer-to-d-c"); - - String layeredStore5 = base + "-layer-d"; - avmService.createStore(layeredStore5); - avmService.createLayeredDirectory(base + ":/base/d-d", layeredStore5 + ":/", "layer-to-d-d"); - - String layeredStore6 = base + "-layer-layer-base"; - avmService.createStore(layeredStore6); - avmService.createLayeredDirectory(layeredStore1 + ":/layer-to-base", layeredStore6 + ":/", "layer-to-layer-to-base"); - - String layeredStore7 = base + "-layer-layer-layer-base"; - avmService.createStore(layeredStore7); - avmService.createLayeredDirectory(layeredStore6 + ":/layer-to-layer-to-base", layeredStore7 + ":/", "layer-to-layer-to-layer-to-base"); - } - - private boolean checkPermission(String user, String path, String permission, boolean allowed) - { - String curentUser = AuthenticationUtil.getRunAsUser(); - try - { - runAs(user); - AVMNodeDescriptor desc = avmService.lookup(-1, path); - AVMNode node = avmNodeDAO.getByID(desc.getId()); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, path); - AVMStore store = AVMDAOs.Instance().fAVMStoreDAO.getByName(nodeRef.getStoreRef().getIdentifier()); - boolean can = AVMRepository.GetInstance().can(store, node, permission, AVMRepository.GetInstance().lookup(-1, path, false).getDirectlyContained()); - return allowed ? can : !can; - } - finally - { - runAs(curentUser); - } - } - - private boolean checkCanPerformance(String user, String path, String permission, boolean allowed, int count) - { - String curentUser = AuthenticationUtil.getRunAsUser(); - try - { - runAs(user); - AVMNodeDescriptor desc = avmService.lookup(-1, path); - AVMNode node = avmNodeDAO.getByID(desc.getId()); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, path); - AVMStore store = AVMDAOs.Instance().fAVMStoreDAO.getByName(nodeRef.getStoreRef().getIdentifier()); - boolean can = AVMRepository.GetInstance().can(store, node, permission, AVMRepository.GetInstance().lookup(-1, path, false).getDirectlyContained()); - long start = System.nanoTime(); - for (int i = 0; i < count; i++) - { - can = AVMRepository.GetInstance().can(null, node, permission, AVMRepository.GetInstance().lookup(-1, path, false).getDirectlyContained()); - } - long end = System.nanoTime(); - System.out.println("Can in " + ((end - start) / 10e9f / count)); - System.out.println("Can per second " + (1 / ((end - start) / 10e9f / count))); - return allowed ? can : !can; - } - finally - { - runAs(curentUser); - } - } - - private boolean checkHasPermissionsPerformance(String user, String path, String permission, boolean allowed, int count) - { - String curentUser = AuthenticationUtil.getRunAsUser(); - try - { - runAs(user); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, path); - boolean can = permissionService.hasPermission(nodeRef, permission) == AccessStatus.ALLOWED; - long start = System.nanoTime(); - for (int i = 0; i < count; i++) - { - can = permissionService.hasPermission(nodeRef, permission) == AccessStatus.ALLOWED; - } - long end = System.nanoTime(); - System.out.println("Has Permission in " + ((end - start) / 10e9f / count)); - System.out.println("Has Permission per second " + (1 / ((end - start) / 10e9f / count))); - return allowed ? can : !can; - } - finally - { - runAs(curentUser); - } - } - - public boolean checkHasPermission(String user, NodeRef nodeRef, String permission, boolean allowed) - { - String curentUser = AuthenticationUtil.getRunAsUser(); - try - { - runAs(user); - boolean can = permissionService.hasPermission(nodeRef, permission) == AccessStatus.ALLOWED; - return allowed ? can : !can; - } - finally - { - runAs(curentUser); - } - } - - public void testSetup() throws Exception - { - // test setUp & tearDown - } - - - public void test_ETWOTWO_457_NPE1() throws Exception - { - try - { - // run as system (null) - authenticationService.clearCurrentSecurityContext(); - - avmService.createStore("main"); - avmService.createDirectory("main:/", "a"); - - // java.lang.NullPointerException - at org.alfresco.service.cmr.security.AuthorityType.getAuthorityType(AuthorityType.java:254) - Set perms = permissionService.getPermissions(AVMNodeConverter.ToNodeRef(-1, "main:/a")); - for (AccessPermission permission : perms) - { - System.out.println(permission); - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - avmService.purgeStore("main"); - } - } - - public void test_ETWOTWO_457_NPE2() throws Exception - { - try - { - // run as admin - authenticationService.authenticate("admin", "admin".toCharArray()); - - avmService.createStore("main"); - avmService.createDirectory("main:/", "a"); - - Set perms = permissionService.getPermissions(AVMNodeConverter.ToNodeRef(-1, "main:/a")); - for (AccessPermission permission : perms) - { - System.out.println(permission); - } - - // java.lang.NullPointerException - at org.alfresco.repo.domain.hibernate.AbstractPermissionsDaoComponentImpl.deletePermission(AbstractPermissionsDaoComponentImpl.java:383) - permissionService.deletePermission(AVMNodeConverter.ToNodeRef(-1, "main:/a"), PermissionService.ADMINISTRATOR_AUTHORITY, PermissionService.ALL_PERMISSIONS); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - avmService.purgeStore("main"); - } - } - - public void test_ETWOTWO_457_NPE3() throws Exception - { - try - { - // run as system (null) - authenticationService.clearCurrentSecurityContext(); - authenticationComponent.setSystemUserAsCurrentUser(); - - avmService.createStore("main"); - avmService.createFile("main:/", "foo").close(); - - permissionService.setPermission(AVMNodeConverter.ToNodeRef(-1, "main:/").getStoreRef(), PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true); - - // java.lang.NullPointerException - at org.alfresco.repo.security.permissions.impl.PermissionServiceImpl.hasPermission(PermissionServiceImpl.java:494) - ContentReader cr = contentService.getReader(AVMNodeConverter.ToNodeRef(-1, "main:/foo"), ContentModel.PROP_CONTENT); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - avmService.purgeStore("main"); - } - } - - - public void testStoreAcls() throws Exception - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - try - { - buildBaseStructure(storeName); - - AVMNodeDescriptor nodeDesc = avmService.lookup(-1, storeName + ":/base"); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, nodeDesc.getPath()); - permissionService.setPermission(nodeRef, PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true); - - assertTrue(checkPermission("andy", storeName + ":/base", PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkHasPermission("andy", nodeRef, PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkPermission("lemur", storeName + ":/base", PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkHasPermission("lemur", nodeRef, PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkPermission(AuthenticationUtil.getAdminUserName(), storeName + ":/base", PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkHasPermission(AuthenticationUtil.getAdminUserName(), nodeRef, PermissionService.ALL_PERMISSIONS, true)); - - permissionService.setPermission(nodeRef.getStoreRef(), "andy", PermissionService.ALL_PERMISSIONS, true); - - assertTrue(checkPermission("andy", storeName + ":/base", PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkHasPermission("andy", nodeRef, PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkPermission("lemur", storeName + ":/base", PermissionService.ALL_PERMISSIONS, false)); - assertTrue(checkHasPermission("lemur", nodeRef, PermissionService.ALL_PERMISSIONS, false)); - assertTrue(checkPermission(AuthenticationUtil.getAdminUserName(), storeName + ":/base", PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkHasPermission(AuthenticationUtil.getAdminUserName(), nodeRef, PermissionService.ALL_PERMISSIONS, true)); - - permissionService.deletePermission(nodeRef.getStoreRef(), "andy", PermissionService.ALL_PERMISSIONS); - - assertTrue(checkPermission("andy", storeName + ":/base", PermissionService.ALL_PERMISSIONS, false)); - assertTrue(checkHasPermission("andy", nodeRef, PermissionService.ALL_PERMISSIONS, false)); - assertTrue(checkPermission("lemur", storeName + ":/base", PermissionService.ALL_PERMISSIONS, false)); - assertTrue(checkHasPermission("lemur", nodeRef, PermissionService.ALL_PERMISSIONS, false)); - assertTrue(checkPermission(AuthenticationUtil.getAdminUserName(), storeName + ":/base", PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkHasPermission(AuthenticationUtil.getAdminUserName(), nodeRef, PermissionService.ALL_PERMISSIONS, true)); - - permissionService.deletePermissions(nodeRef.getStoreRef()); - - assertTrue(checkPermission("andy", storeName + ":/base", PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkHasPermission("andy", nodeRef, PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkPermission("lemur", storeName + ":/base", PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkHasPermission("lemur", nodeRef, PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkPermission(AuthenticationUtil.getAdminUserName(), storeName + ":/base", PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkHasPermission(AuthenticationUtil.getAdminUserName(), nodeRef, PermissionService.ALL_PERMISSIONS, true)); - - permissionService.setPermission(nodeRef.getStoreRef(), "andy", PermissionService.ALL_PERMISSIONS, true); - assertTrue(checkHasPermission("andy", nodeRef, PermissionService.ALL_PERMISSIONS, true)); - permissionService.setPermission(nodeRef.getStoreRef(), "andy", PermissionService.READ, true); - permissionService.setPermission(nodeRef.getStoreRef(), "lemur", PermissionService.ALL_PERMISSIONS, true); - - assertTrue(checkPermission("andy", storeName + ":/base", PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkHasPermission("andy", nodeRef, PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkPermission("lemur", storeName + ":/base", PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkHasPermission("lemur", nodeRef, PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkPermission(AuthenticationUtil.getAdminUserName(), storeName + ":/base", PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkHasPermission(AuthenticationUtil.getAdminUserName(), nodeRef, PermissionService.ALL_PERMISSIONS, true)); - assertEquals(permissionService.getAllSetPermissions(nodeRef.getStoreRef()).size(), 3); - - permissionService.clearPermission(nodeRef.getStoreRef(), "andy"); - - assertTrue(checkPermission("andy", storeName + ":/base", PermissionService.ALL_PERMISSIONS, false)); - assertTrue(checkHasPermission("andy", nodeRef, PermissionService.ALL_PERMISSIONS, false)); - assertTrue(checkPermission("lemur", storeName + ":/base", PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkHasPermission("lemur", nodeRef, PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkPermission(AuthenticationUtil.getAdminUserName(), storeName + ":/base", PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkHasPermission(AuthenticationUtil.getAdminUserName(), nodeRef, PermissionService.ALL_PERMISSIONS, true)); - assertEquals(permissionService.getAllSetPermissions(nodeRef.getStoreRef()).size(), 1); - - permissionService.clearPermission(nodeRef.getStoreRef(), "lemur"); - - assertTrue(checkPermission("andy", storeName + ":/base", PermissionService.ALL_PERMISSIONS, false)); - assertTrue(checkHasPermission("andy", nodeRef, PermissionService.ALL_PERMISSIONS, false)); - assertTrue(checkPermission("lemur", storeName + ":/base", PermissionService.ALL_PERMISSIONS, false)); - assertTrue(checkHasPermission("lemur", nodeRef, PermissionService.ALL_PERMISSIONS, false)); - assertTrue(checkPermission(AuthenticationUtil.getAdminUserName(), storeName + ":/base", PermissionService.ALL_PERMISSIONS, true)); - assertTrue(checkHasPermission(AuthenticationUtil.getAdminUserName(), nodeRef, PermissionService.ALL_PERMISSIONS, true)); - - } - finally - { - removeStore(storeName); - removeStore(storeName + "-layer-base"); - removeStore(storeName + "-layer-a"); - removeStore(storeName + "-layer-b"); - removeStore(storeName + "-layer-c"); - removeStore(storeName + "-layer-d"); - removeStore(storeName + "-layer-layer-base"); - removeStore(storeName + "-layer-layer-layer-base"); - - //System.out.println(avmService.getStores()); - } - - } - - public void testSimpleUpdate() throws Throwable - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - try - { - buildBaseStructure(storeName); - avmService.createDirectory(storeName + "-layer-base:/layer-to-base", "update-dir"); - avmService.createFile(storeName + "-layer-base:/layer-to-base/update-dir", "update-file").close(); - - AVMNodeDescriptor desc = avmService.lookup(-1, storeName + "-layer-base:/layer-to-base"); - AVMNode node = avmNodeDAO.getByID(desc.getId()); - Acl acl = node.getAcl(); - assertNotNull(acl); - acl = aclDaoComponent.getAcl(aclDaoComponent.getInheritedAccessControlList(acl.getId())); - assertNotNull(acl); - - desc = avmService.lookup(-1, storeName + "-layer-base:/layer-to-base/update-dir"); - node = avmNodeDAO.getByID(desc.getId()); - Acl dirAcl = node.getAcl(); - assertNotNull(dirAcl); - assertEquals(acl.getId(), dirAcl.getId()); - - desc = avmService.lookup(-1, storeName + "-layer-base:/layer-to-base/update-dir/update-file"); - node = avmNodeDAO.getByID(desc.getId()); - Acl fileAcl = node.getAcl(); - assertNotNull(fileAcl); - assertEquals(acl.getId(), fileAcl.getId()); - - avmService.createSnapshot(storeName, "store", "store"); - avmService.createSnapshot(storeName + "-layer-base", "store", "store"); - - List diffs = avmSyncService.compare(-1, storeName + "-layer-base:/layer-to-base", -1, storeName + ":/base", null); - assertEquals(1, diffs.size()); - assertEquals("[" + storeName + "-layer-base:/layer-to-base/update-dir[-1] > " + storeName + ":/base/update-dir[-1]]", diffs.toString()); - avmSyncService.update(diffs, null, false, false, false, false, "A", "A"); - - desc = avmService.lookup(-1, storeName + ":/base/update-dir"); - node = avmNodeDAO.getByID(desc.getId()); - dirAcl = node.getAcl(); - assertNull(dirAcl); - - desc = avmService.lookup(-1, storeName + ":/base/update-dir/update-file"); - node = avmNodeDAO.getByID(desc.getId()); - fileAcl = node.getAcl(); - assertNull(fileAcl); - - desc = avmService.lookup(-1, storeName + "-layer-base:/layer-to-base/update-dir"); - node = avmNodeDAO.getByID(desc.getId()); - dirAcl = node.getAcl(); - assertNotNull(dirAcl); - assertEquals(acl.getId(), dirAcl.getId()); - - desc = avmService.lookup(-1, storeName + "-layer-base:/layer-to-base/update-dir/update-file"); - node = avmNodeDAO.getByID(desc.getId()); - fileAcl = node.getAcl(); - assertNull(fileAcl); - } - catch (Throwable t) - { - t.printStackTrace(); - throw t; - } - finally - { - removeStore(storeName); - removeStore(storeName + "-layer-base"); - removeStore(storeName + "-layer-a"); - removeStore(storeName + "-layer-b"); - removeStore(storeName + "-layer-c"); - removeStore(storeName + "-layer-d"); - removeStore(storeName + "-layer-layer-base"); - removeStore(storeName + "-layer-layer-layer-base"); - } - } - - public void testUpdateWithPermissions() throws Exception - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - try - { - buildBaseStructure(storeName); - - AVMNodeDescriptor nodeDesc = avmService.lookup(-1, storeName + ":/base"); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, nodeDesc.getPath()); - permissionService.setPermission(nodeRef, PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true); - Long baseAcl = avmNodeDAO.getByID(nodeDesc.getId()).getAcl().getId(); - Long inheritedBaseAcl = aclDaoComponent.getInheritedAccessControlList(baseAcl); - - avmService.createDirectory(storeName + "-layer-base:/layer-to-base", "update-dir"); - avmService.createFile(storeName + "-layer-base:/layer-to-base/update-dir", "update-file").close(); - - AVMNodeDescriptor desc = avmService.lookup(-1, storeName + "-layer-base:/layer-to-base"); - AVMNode node = avmNodeDAO.getByID(desc.getId()); - Acl acl = node.getAcl(); - assertNotNull(acl); - acl = aclDaoComponent.getAcl(aclDaoComponent.getInheritedAccessControlList(acl.getId())); - assertNotNull(acl); - - desc = avmService.lookup(-1, storeName + "-layer-base:/layer-to-base/update-dir"); - node = avmNodeDAO.getByID(desc.getId()); - Acl dirAcl = node.getAcl(); - assertNotNull(dirAcl); - assertEquals(acl.getId(), dirAcl.getId()); - - desc = avmService.lookup(-1, storeName + "-layer-base:/layer-to-base/update-dir/update-file"); - node = avmNodeDAO.getByID(desc.getId()); - Acl fileAcl = node.getAcl(); - assertNotNull(fileAcl); - assertEquals(acl.getId(), fileAcl.getId()); - - avmService.createSnapshot(storeName, "store", "store"); - avmService.createSnapshot(storeName + "-layer-base", "store", "store"); - - List diffs = avmSyncService.compare(-1, storeName + "-layer-base:/layer-to-base", -1, storeName + ":/base", null); - assertEquals(1, diffs.size()); - assertEquals("[" + storeName + "-layer-base:/layer-to-base/update-dir[-1] > " + storeName + ":/base/update-dir[-1]]", diffs.toString()); - avmSyncService.update(diffs, null, false, false, false, false, "A", "A"); - - desc = avmService.lookup(-1, storeName + ":/base/update-dir"); - node = avmNodeDAO.getByID(desc.getId()); - dirAcl = node.getAcl(); - assertNotNull(dirAcl); - assertEquals(inheritedBaseAcl, dirAcl.getId()); - - desc = avmService.lookup(-1, storeName + ":/base/update-dir/update-file"); - node = avmNodeDAO.getByID(desc.getId()); - fileAcl = node.getAcl(); - assertNotNull(fileAcl); - assertEquals(inheritedBaseAcl, fileAcl.getId()); - - desc = avmService.lookup(-1, storeName + "-layer-base:/layer-to-base/update-dir"); - node = avmNodeDAO.getByID(desc.getId()); - dirAcl = node.getAcl(); - assertNotNull(dirAcl); - assertEquals(acl.getId(), dirAcl.getId()); - - desc = avmService.lookup(-1, storeName + "-layer-base:/layer-to-base/update-dir/update-file"); - node = avmNodeDAO.getByID(desc.getId()); - fileAcl = node.getAcl(); - assertNotNull(fileAcl); - assertEquals(inheritedBaseAcl, fileAcl.getId()); - } - finally - { - removeStore(storeName); - removeStore(storeName + "-layer-base"); - removeStore(storeName + "-layer-a"); - removeStore(storeName + "-layer-b"); - removeStore(storeName + "-layer-c"); - removeStore(storeName + "-layer-d"); - removeStore(storeName + "-layer-layer-base"); - removeStore(storeName + "-layer-layer-layer-base"); - } - } - - public void testComplexStore_AlterInheritance() throws IOException - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - try - { - buildBaseStructure(storeName); - - checkHeadPermissionNotSetForPath(storeName + ":/base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-base:/layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-a:/layer-to-d-a", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-b:/layer-to-d-b", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-c:/layer-to-d-c", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-d:/layer-to-d-d", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, - null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, - PermissionService.ALL_PERMISSIONS, true, null); - - AVMNodeDescriptor desc = avmService.lookup(-1, storeName + "-layer-base:/layer-to-base"); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true); - - assertTrue(checkPermission(AuthenticationUtil.getAdminUserName(), storeName + ":/base", PermissionService.READ, true)); - assertTrue(checkPermission(AuthenticationUtil.getAdminUserName(), storeName + "-layer-base:/layer-to-base", PermissionService.READ, true)); - assertTrue(checkPermission(AuthenticationUtil.getAdminUserName(), storeName + "-layer-base:/layer-to-base", PermissionService.ALL_PERMISSIONS, true)); - // True as unset defaults to allow - assertTrue(checkPermission("lemur", storeName + ":/base", PermissionService.READ, true)); - assertTrue(checkPermission("lemur", storeName + "-layer-base:/layer-to-base", PermissionService.READ, true)); - assertTrue(checkPermission("lemur", storeName + "-layer-base:/layer-to-base", PermissionService.ALL_PERMISSIONS, true)); - - desc = avmService.lookup(-1, storeName + ":/base"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true); - permissionService.deletePermission(nodeRef, PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS); - - assertTrue(checkPermission(AuthenticationUtil.getAdminUserName(), storeName + ":/base", PermissionService.READ, true)); - assertTrue(checkPermission(AuthenticationUtil.getAdminUserName(), storeName + "-layer-base:/layer-to-base", PermissionService.READ, true)); - assertTrue(checkPermission(AuthenticationUtil.getAdminUserName(), storeName + "-layer-base:/layer-to-base", PermissionService.ALL_PERMISSIONS, true)); - // True as unset defaults to allow - assertTrue(checkPermission("lemur", storeName + ":/base", PermissionService.READ, false)); - assertTrue(checkPermission("lemur", storeName + "-layer-base:/layer-to-base", PermissionService.READ, true)); - assertTrue(checkPermission("lemur", storeName + "-layer-base:/layer-to-base", PermissionService.ALL_PERMISSIONS, true)); - - // performance - - checkCanPerformance("lemur", storeName + ":/base", PermissionService.READ, false, 10000); - checkHasPermissionsPerformance("lemur", storeName + ":/base", PermissionService.READ, false, 10000); - - String[] excludeL = new String[] { storeName + "-layer-base:/layer-to-base/d-d/layer-d-a" }; - String[] excludeLL = new String[] { storeName + "-layer-layer-base:/layer-to-layer-to-base/d-d/layer-d-a" }; - String[] excludeLLL = new String[] { storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base/d-d/layer-d-a" }; - - checkHeadPermissionNotSetForPath(storeName + ":/base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-base:/layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, excludeL); - checkHeadPermissionNotSetForPath(storeName + "-layer-a:/layer-to-d-a", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-b:/layer-to-d-b", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-c:/layer-to-d-c", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-d:/layer-to-d-d", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, - excludeLL); - checkHeadPermissionForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, - PermissionService.ALL_PERMISSIONS, true, excludeLLL); - - desc = avmService.lookup(-1, storeName + "-layer-base:/layer-to-base/d-a"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setInheritParentPermissions(nodeRef, false); - - String[] excludeL2 = new String[] { storeName + "-layer-base:/layer-to-base/d-d/layer-d-a", storeName + "-layer-base:/layer-to-base/d-a" }; - String[] excludeLL2 = new String[] { storeName + "-layer-layer-base:/layer-to-layer-to-base/d-d/layer-d-a", storeName + "-layer-layer-base:/layer-to-layer-to-base/d-a" }; - String[] excludeLLL2 = new String[] { storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base/d-d/layer-d-a", - storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base/d-a" }; - - checkHeadPermissionNotSetForPath(storeName + ":/base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-base:/layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, excludeL2); - checkHeadPermissionNotSetForPath(storeName + "-layer-base:/layer-to-base/d-a", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-a:/layer-to-d-a", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-b:/layer-to-d-b", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-c:/layer-to-d-c", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-d:/layer-to-d-d", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, - excludeLL2); - checkHeadPermissionForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, - PermissionService.ALL_PERMISSIONS, true, excludeLLL2); - - desc = avmService.lookup(-1, storeName + "-layer-base:/layer-to-base/d-a"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setInheritParentPermissions(nodeRef, true); - - checkHeadPermissionNotSetForPath(storeName + ":/base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-base:/layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, excludeL); - checkHeadPermissionNotSetForPath(storeName + "-layer-a:/layer-to-d-a", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-b:/layer-to-d-b", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-c:/layer-to-d-c", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-d:/layer-to-d-d", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, - excludeLL); - checkHeadPermissionForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, - PermissionService.ALL_PERMISSIONS, true, excludeLLL); - - } - finally - { - removeStore(storeName); - removeStore(storeName + "-layer-base"); - removeStore(storeName + "-layer-a"); - removeStore(storeName + "-layer-b"); - removeStore(storeName + "-layer-c"); - removeStore(storeName + "-layer-d"); - removeStore(storeName + "-layer-layer-base"); - removeStore(storeName + "-layer-layer-layer-base"); - } - } - - public void testComplexStore_AddPermissionsToMiddle() throws IOException - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - try - { - buildBaseStructure(storeName); - - checkHeadPermissionNotSetForPath(storeName + ":/base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-base:/layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-a:/layer-to-d-a", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-b:/layer-to-d-b", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-c:/layer-to-d-c", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-d:/layer-to-d-d", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, - null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, - PermissionService.ALL_PERMISSIONS, true, null); - - AVMNodeDescriptor desc = avmService.lookup(-1, storeName + "-layer-a:/layer-to-d-a"); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true); - - checkHeadPermissionNotSetForPath(storeName + ":/base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-base:/layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-a:/layer-to-d-a", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-b:/layer-to-d-b", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-c:/layer-to-d-c", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-d:/layer-to-d-d", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, - null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, - PermissionService.ALL_PERMISSIONS, true, null); - - desc = avmService.lookup(-1, storeName + "-layer-base:/layer-to-base"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - - // debugPermissions(storeName + ":/base"); - // debugPermissions(storeName + "-layer-base:/layer-to-base"); - // - // Acl acl = avmACLDAO.getAccessControlList(nodeRef); - // List nodes = aclDaoComponent.getAvmNodesByACL(acl.getId()); - // for (Long id : nodes) - // { - // AVMNodeDescriptor layerDesc = new AVMNodeDescriptor(null, null, 0, null, null, null, 0, 0, 0, id, null, - // 0, null, 0, false, 0, false, 0, 0); - // List> paths = avmService.getHeadPaths(layerDesc); - // for(Pair path : paths) - // { - // NodeRef testRef = AVMNodeConverter.ToNodeRef(-1, path.getSecond()); - // System.out.println("--> "+id +" "+path.getSecond()+ " "+path.getFirst()+ " - // "+avmACLDAO.getAccessControlList(testRef)); - // } - // } - - permissionService.setPermission(nodeRef, "loon", PermissionService.ALL_PERMISSIONS, true); - - // debugPermissions(storeName + ":/base"); - // debugPermissions(storeName + "-layer-base:/layer-to-base"); - // - // acl = avmACLDAO.getAccessControlList(nodeRef); - // nodes = aclDaoComponent.getAvmNodesByACL(acl.getId()); - // for (Long id : nodes) - // { - // AVMNodeDescriptor layerDesc = new AVMNodeDescriptor(null, null, 0, null, null, null, 0, 0, 0, id, null, - // 0, null, 0, false, 0, false, 0, 0); - // List> paths = avmService.getHeadPaths(layerDesc); - // for(Pair path : paths) - // { - // NodeRef testRef = AVMNodeConverter.ToNodeRef(-1, path.getSecond()); - // System.out.println("--> "+id +" "+path.getSecond()+ " "+path.getFirst()+ " - // "+avmACLDAO.getAccessControlList(testRef)); - // } - // } - // - - checkHeadPermissionNotSetForPath(storeName + ":/base", "loon", PermissionService.ALL_PERMISSIONS, true, null); - String[] excludeL = new String[] { storeName + "-layer-base:/layer-to-base/d-d/layer-d-a" }; - checkHeadPermissionForPath(storeName + "-layer-base:/layer-to-base", "loon", PermissionService.ALL_PERMISSIONS, true, excludeL); - checkHeadPermissionNotSetForPath(storeName + "-layer-a:/layer-to-d-a", "loon", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-b:/layer-to-d-b", "loon", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-c:/layer-to-d-c", "loon", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-d:/layer-to-d-d", "loon", PermissionService.ALL_PERMISSIONS, true, null); - String[] excludeLL = new String[] { storeName + "-layer-layer-base:/layer-to-layer-to-base/d-d/layer-d-a" }; - checkHeadPermissionForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", "loon", PermissionService.ALL_PERMISSIONS, true, excludeLL); - String[] excludeLLL = new String[] { storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base/d-d/layer-d-a" }; - checkHeadPermissionForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", "loon", PermissionService.ALL_PERMISSIONS, true, excludeLLL); - - desc = avmService.lookup(-1, storeName + "-layer-base:/layer-to-base"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "monkey", PermissionService.ALL_PERMISSIONS, true); - - debugPermissions(storeName + ":/base"); - debugPermissions(storeName + "-layer-base:/layer-to-base"); - - // acl = avmACLDAO.getAccessControlList(nodeRef); - // nodes = aclDaoComponent.getAvmNodesByACL(acl.getId()); - // for (Long id : nodes) - // { - // // need to fix up inheritance as is has changed - // AVMNodeDescriptor layerDesc = new AVMNodeDescriptor(null, null, 0, null, null, null, 0, 0, 0, id, null, - // 0, null, 0, false, 0, false, 0, 0); - // List> paths = avmService.getHeadPaths(layerDesc); - // for(Pair path : paths) - // { - // NodeRef testRef = AVMNodeConverter.ToNodeRef(-1, path.getSecond()); - // System.out.println("--> "+id +" "+path.getSecond()+ " "+path.getFirst()+ " - // "+avmACLDAO.getAccessControlList(testRef)); - // } - // } - - checkHeadPermissionNotSetForPath(storeName + ":/base", "monkey", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-base:/layer-to-base", "monkey", PermissionService.ALL_PERMISSIONS, true, excludeL); - checkHeadPermissionNotSetForPath(storeName + "-layer-a:/layer-to-d-a", "monkey", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-b:/layer-to-d-b", "monkey", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-c:/layer-to-d-c", "monkey", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-d:/layer-to-d-d", "monkey", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", "monkey", PermissionService.ALL_PERMISSIONS, true, excludeLL); - checkHeadPermissionForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", "monkey", PermissionService.ALL_PERMISSIONS, true, excludeLLL); - - debugPermissions(storeName + ":/base"); - debugPermissions(storeName + "-layer-base:/layer-to-base"); - - // acl = avmACLDAO.getAccessControlList(nodeRef); - // nodes = aclDaoComponent.getAvmNodesByACL(acl.getId()); - // for (Long id : nodes) - // { - // // need to fix up inheritance as is has changed - // AVMNodeDescriptor layerDesc = new AVMNodeDescriptor(null, null, 0, null, null, null, 0, 0, 0, id, null, - // 0, null, 0, false, 0, false, 0, 0); - // List> paths = avmService.getHeadPaths(layerDesc); - // for(Pair path : paths) - // { - // NodeRef testRef = AVMNodeConverter.ToNodeRef(-1, path.getSecond()); - // System.out.println("--> "+id +" "+path.getSecond()+ " "+path.getFirst()+ " - // "+avmACLDAO.getAccessControlList(testRef)); - // } - // } - // - desc = avmService.lookup(-1, storeName + ":/base"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "base", PermissionService.ALL_PERMISSIONS, true); - - debugPermissions(storeName + ":/base"); - debugPermissions(storeName + "-layer-base:/layer-to-base"); - checkHeadPermissionForPath(storeName + ":/base", "base", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-base:/layer-to-base", "base", PermissionService.ALL_PERMISSIONS, true, excludeL); - checkHeadPermissionNotSetForPath(storeName + "-layer-a:/layer-to-d-a", "base", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-b:/layer-to-d-b", "base", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-c:/layer-to-d-c", "base", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-d:/layer-to-d-d", "base", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", "base", PermissionService.ALL_PERMISSIONS, true, excludeLL); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", "base", PermissionService.ALL_PERMISSIONS, true, excludeLLL); - - } - finally - { - removeStore(storeName); - removeStore(storeName + "-layer-base"); - removeStore(storeName + "-layer-a"); - removeStore(storeName + "-layer-b"); - removeStore(storeName + "-layer-c"); - removeStore(storeName + "-layer-d"); - removeStore(storeName + "-layer-layer-base"); - removeStore(storeName + "-layer-layer-layer-base"); - } - } - - public void testComplexStore_AddPermissionsToBottom() throws IOException - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - try - { - buildBaseStructure(storeName); - - checkHeadPermissionNotSetForPath(storeName + ":/base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-base:/layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-a:/layer-to-d-a", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-b:/layer-to-d-b", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-c:/layer-to-d-c", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-d:/layer-to-d-d", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, - null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, - PermissionService.ALL_PERMISSIONS, true, null); - - AVMNodeDescriptor desc = avmService.lookup(-1, storeName + ":/base"); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true); - - checkHeadPermissionForPath(storeName + ":/base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-base:/layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-a:/layer-to-d-a", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-b:/layer-to-d-b", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-c:/layer-to-d-c", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-d:/layer-to-d-d", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, - PermissionService.ALL_PERMISSIONS, true, null); - - permissionService.setPermission(nodeRef, "squid", PermissionService.ALL_PERMISSIONS, true); - - checkHeadPermissionForPath(storeName + ":/base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-base:/layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-a:/layer-to-d-a", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-b:/layer-to-d-b", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-c:/layer-to-d-c", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-d:/layer-to-d-d", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, - PermissionService.ALL_PERMISSIONS, true, null); - - checkHeadPermissionForPath(storeName + ":/base", "squid", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-base:/layer-to-base", "squid", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-a:/layer-to-d-a", "squid", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-b:/layer-to-d-b", "squid", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-c:/layer-to-d-c", "squid", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-d:/layer-to-d-d", "squid", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", "squid", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", "squid", PermissionService.ALL_PERMISSIONS, true, null); - - permissionService.deletePermission(nodeRef, PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS); - - checkHeadPermissionNotSetForPath(storeName + ":/base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-base:/layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-a:/layer-to-d-a", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-b:/layer-to-d-b", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-c:/layer-to-d-c", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-d:/layer-to-d-d", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, - null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, - PermissionService.ALL_PERMISSIONS, true, null); - - permissionService.setPermission(nodeRef, "me", PermissionService.ALL_PERMISSIONS, true); - - checkHeadPermissionNotSetForPath(storeName + ":/base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-base:/layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-a:/layer-to-d-a", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-b:/layer-to-d-b", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-c:/layer-to-d-c", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-d:/layer-to-d-d", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, - null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, - PermissionService.ALL_PERMISSIONS, true, null); - - checkHeadPermissionForPath(storeName + ":/base", "me", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-base:/layer-to-base", "me", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-a:/layer-to-d-a", "me", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-b:/layer-to-d-b", "me", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-c:/layer-to-d-c", "me", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-d:/layer-to-d-d", "me", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", "me", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", "me", PermissionService.ALL_PERMISSIONS, true, null); - - desc = avmService.lookup(-1, storeName + ":/base/d-a"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "lemon", PermissionService.READ, true); - - checkHeadPermissionNotSetForPath(storeName + ":/base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-base:/layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-a:/layer-to-d-a", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-b:/layer-to-d-b", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-c:/layer-to-d-c", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-d:/layer-to-d-d", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true, - null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", PermissionService.ALL_AUTHORITIES, - PermissionService.ALL_PERMISSIONS, true, null); - - checkHeadPermissionForPath(storeName + ":/base", "me", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-base:/layer-to-base", "me", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-a:/layer-to-d-a", "me", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-b:/layer-to-d-b", "me", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-c:/layer-to-d-c", "me", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-d:/layer-to-d-d", "me", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base", "me", PermissionService.ALL_PERMISSIONS, true, null); - checkHeadPermissionForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base", "me", PermissionService.ALL_PERMISSIONS, true, null); - - checkHeadPermissionForPath(storeName + ":/base/d-a", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + ":/base/d-b", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + ":/base/d-c", "lemon", PermissionService.READ, true, null); - checkHeadPermissionForPath(storeName + ":/base/d-d/layer-d-a", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + ":/base/d-d/layer-d-b", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + ":/base/d-d/layer-d-c", "lemon", PermissionService.READ, true, null); - checkHeadPermissionForPath(storeName + "-layer-base:/layer-to-base/d-a", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-base:/layer-to-base/d-b", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-base:/layer-to-base/d-c", "lemon", PermissionService.READ, true, null); - checkHeadPermissionForPath(storeName + "-layer-base:/layer-to-base/d-d/layer-d-a", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-base:/layer-to-base/d-d/layer-d-b", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-base:/layer-to-base/d-d/layer-d-c", "lemon", PermissionService.READ, true, null); - - checkHeadPermissionForPath(storeName + "-layer-a:/layer-to-d-a", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-b:/layer-to-d-b", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-c:/layer-to-d-c", "lemon", PermissionService.READ, true, null); - checkHeadPermissionForPath(storeName + "-layer-d:/layer-to-d-d/layer-d-a", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-d:/layer-to-d-d/layer-d-b", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-d:/layer-to-d-d/layer-d-c", "lemon", PermissionService.READ, true, null); - - checkHeadPermissionForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base/d-a", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base/d-b", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base/d-c", "lemon", PermissionService.READ, true, null); - checkHeadPermissionForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base/d-d/layer-d-a", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base/d-d/layer-d-b", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-base:/layer-to-layer-to-base/d-d/layer-d-c", "lemon", PermissionService.READ, true, null); - - checkHeadPermissionForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base/d-a", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base/d-b", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base/d-c", "lemon", PermissionService.READ, true, null); - checkHeadPermissionForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base/d-d/layer-d-a", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base/d-d/layer-d-b", "lemon", PermissionService.READ, true, null); - checkHeadPermissionNotSetForPath(storeName + "-layer-layer-layer-base:/layer-to-layer-to-layer-to-base/d-d/layer-d-c", "lemon", PermissionService.READ, true, null); - } - finally - { - removeStore(storeName); - removeStore(storeName + "-layer-base"); - removeStore(storeName + "-layer-a"); - removeStore(storeName + "-layer-b"); - removeStore(storeName + "-layer-c"); - removeStore(storeName + "-layer-d"); - removeStore(storeName + "-layer-layer-base"); - removeStore(storeName + "-layer-layer-layer-base"); - } - - } - - /* - * create directories & file in main - * set file permission in layer - * update back to main - * flatten - */ - public void testSimpleFilePermissionDiff() throws Throwable - { - runAs(AuthenticationUtil.getAdminUserName()); - - String prefix = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - String baseStore = prefix+"-main"; - String layeredStore = prefix+"-layer"; - - try - { - System.out.println("create store: " + baseStore); - avmService.createStore(baseStore); - - // create directories and file in main - System.out.println("create D: " + baseStore + ":/base"); - avmService.createDirectory(baseStore + ":/", "base"); - System.out.println("create D: " + baseStore + ":/base/d-a"); - avmService.createDirectory(baseStore + ":/base", "d-a"); - System.out.println("create F: " + baseStore + ":/base/d-a/f-aa"); - avmService.createFile(baseStore + ":/base/d-a", "f-aa").close(); - - AVMNodeDescriptor baseNodeDesc = avmService.lookup(-1, baseStore + ":/base/d-a/f-aa"); - checkHeadPermissionNotSet(baseNodeDesc, "andy", PermissionService.DELETE, true); - - System.out.println("create store: " + layeredStore); - avmService.createStore(layeredStore); - - System.out.println("create LD: " + layeredStore + ":/layer-to-base -> " + baseStore + ":/base"); - avmService.createLayeredDirectory(baseStore + ":/base", layeredStore + ":/", "layer-to-base"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - List diffs = avmSyncService.compare(-1, layeredStore + ":/layer-to-base", -1, baseStore + ":/base", null); - assertEquals(0, diffs.size()); - - AVMNodeDescriptor layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer-to-base/d-a/f-aa"); - NodeRef layeredNodeRef = AVMNodeConverter.ToNodeRef(-1, layeredNodeDesc.getPath()); - - // set DELETE permission on file in layer - System.out.println("set P (DELETE): " + layeredStore + ":/layer-to-base/d-a/f-aa"); - checkHeadPermissionNotSet(layeredNodeDesc, "andy", PermissionService.DELETE, true); - permissionService.setPermission(layeredNodeRef, "andy", PermissionService.DELETE, true); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer-to-base", -1, baseStore + ":/base", null); - assertEquals("["+layeredStore+":/layer-to-base/d-a/f-aa[-1] > "+baseStore+":/base/d-a/f-aa[-1]]", diffs.toString()); - assertEquals(1, diffs.size()); - - baseNodeDesc = avmService.lookup(-1, baseStore + ":/base/d-a/f-aa"); - checkHeadPermissionNotSet(baseNodeDesc, "andy", PermissionService.DELETE, true); - - // update main from layer - System.out.println("update: main from layer"); - avmSyncService.update(diffs, null, false, false, false, false, null, null); - - baseNodeDesc = avmService.lookup(-1, baseStore + ":/base/d-a/f-aa"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.DELETE, true); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer-to-base", -1, baseStore + ":/base", null); - assertEquals(0, diffs.size()); - - // flatten - System.out.println("flatten: layer to main"); - avmSyncService.flatten(layeredStore + ":/layer-to-base", baseStore + ":/base"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer-to-base", -1, baseStore + ":/base", null); - assertEquals(0, diffs.size()); - - // check that the DELETE permission is still set in main & layer - baseNodeDesc = avmService.lookup(-1, baseStore + ":/base/d-a/f-aa"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.DELETE, true); - - layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer-to-base/d-a/f-aa"); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - - // check that file in layer is the same as the one from main - assertEquals(baseNodeDesc, layeredNodeDesc); - } - catch (Throwable t) - { - t.printStackTrace(); - throw t; - } - finally - { - removeStore(baseStore); - removeStore(layeredStore); - } - } - - /* - * create directory in main - * set directory permission in main - */ - public void testSimpleDirectoryPermissionDiff0() throws Throwable - { - runAs(AuthenticationUtil.getAdminUserName()); - - String prefix = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - String baseStore = prefix+"-main"; - String layeredStore = prefix+"-layer"; - - try - { - System.out.println("create store: " + baseStore); - avmService.createStore(baseStore); - - // create directory in main - System.out.println("create D: " + baseStore + ":/d-a"); - avmService.createDirectory(baseStore + ":/", "d-a"); - - AVMNodeDescriptor baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermissionNotSet(baseNodeDesc, "andy", PermissionService.DELETE, true); - - System.out.println("create store: " + layeredStore); - avmService.createStore(layeredStore); - - System.out.println("create LD: " + layeredStore + ":/layer -> " + baseStore + ":/"); - avmService.createLayeredDirectory(baseStore + ":/", layeredStore + ":/", "layer"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - List diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - NodeRef baseNodeRef = AVMNodeConverter.ToNodeRef(-1, baseNodeDesc.getPath()); - - // set DELETE permission on directory in main - System.out.println("set P (DELETE): " + baseStore + ":/d-a"); - checkHeadPermissionNotSet(baseNodeDesc, "andy", PermissionService.DELETE, true); - permissionService.setPermission(baseNodeRef, "andy", PermissionService.DELETE, true); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.DELETE, true); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - // update main from layer - NOOP - System.out.println("update: main from layer"); - avmSyncService.update(diffs, null, false, false, false, false, null, null); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - // flatten - NOOP - System.out.println("flatten: layer to main"); - avmSyncService.flatten(layeredStore + ":/layer", baseStore + ":/"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - // check that the DELETE permission is still set in main (and appears in layer) - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.DELETE, true); - - AVMNodeDescriptor layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - - // check that directory in layer is the same as the one from main - assertEquals(baseNodeDesc, layeredNodeDesc); - } - catch (Throwable t) - { - t.printStackTrace(); - throw t; - } - finally - { - removeStore(baseStore); - removeStore(layeredStore); - } - } - - /* - * create directory in main - * set directory permission in layer - * update back to main - * flatten - */ - public void testSimpleDirectoryPermissionDiff1() throws Throwable - { - runAs(AuthenticationUtil.getAdminUserName()); - - String prefix = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - String baseStore = prefix+"-main"; - String layeredStore = prefix+"-layer"; - - try - { - System.out.println("create store: " + baseStore); - avmService.createStore(baseStore); - - // create directory in main - System.out.println("create D: " + baseStore + ":/d-a"); - avmService.createDirectory(baseStore + ":/", "d-a"); - - AVMNodeDescriptor baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermissionNotSet(baseNodeDesc, "andy", PermissionService.DELETE, true); - - System.out.println("create store: " + layeredStore); - avmService.createStore(layeredStore); - - System.out.println("create LD: " + layeredStore + ":/layer -> " + baseStore + ":/"); - avmService.createLayeredDirectory(baseStore + ":/", layeredStore + ":/", "layer"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - List diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - AVMNodeDescriptor layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - NodeRef layeredNodeRef = AVMNodeConverter.ToNodeRef(-1, layeredNodeDesc.getPath()); - - // set DELETE permission on directory in layer - System.out.println("set P (DELETE): " + layeredStore + ":/layer/d-a"); - checkHeadPermissionNotSet(layeredNodeDesc, "andy", PermissionService.DELETE, true); - permissionService.setPermission(layeredNodeRef, "andy", PermissionService.DELETE, true); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals("["+layeredStore+":/layer/d-a[-1] > "+baseStore+":/d-a[-1]]", diffs.toString()); - assertEquals(1, diffs.size()); - - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermissionNotSet(baseNodeDesc, "andy", PermissionService.DELETE, true); - - // update main from layer - System.out.println("update: main from layer"); - avmSyncService.update(diffs, null, false, false, false, false, null, null); - - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.DELETE, true); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - // flatten - System.out.println("flatten: layer to main"); - avmSyncService.flatten(layeredStore + ":/layer", baseStore + ":/"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - // check that the DELETE permission is still set in main (and appears in layer) - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.DELETE, true); - - layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - - // check that directory in layer is the same as the one from main - assertEquals(baseNodeDesc, layeredNodeDesc); - } - catch (Throwable t) - { - t.printStackTrace(); - throw t; - } - finally - { - removeStore(baseStore); - removeStore(layeredStore); - } - } - - /* - * create directory in layer - * set directory permission in layer - * update back to main - * flatten - */ - public void testSimpleDirectoryPermissionDiff2() throws Throwable - { - runAs(AuthenticationUtil.getAdminUserName()); - - String prefix = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - String baseStore = prefix+"-main"; - String layeredStore = prefix+"-layer"; - - try - { - System.out.println("create store: " + baseStore); - avmService.createStore(baseStore); - - System.out.println("create store: " + layeredStore); - avmService.createStore(layeredStore); - - System.out.println("create LD: " + layeredStore + ":/layer -> " + baseStore + ":/"); - avmService.createLayeredDirectory(baseStore + ":/", layeredStore + ":/", "layer"); - - // create directory in layer - System.out.println("create D: " + layeredStore + ":/layer/d-a"); - avmService.createDirectory(layeredStore + ":/layer", "d-a"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - AVMNodeDescriptor layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - AVMNodeDescriptor baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - NodeRef layeredNodeRef = AVMNodeConverter.ToNodeRef(-1, layeredNodeDesc.getPath()); - - // set DELETE permission on directory in layer - System.out.println("set P (DELETE): " + layeredStore + ":/layer/d-a"); - checkHeadPermissionNotSet(layeredNodeDesc, "andy", PermissionService.DELETE, true); - permissionService.setPermission(layeredNodeRef, "andy", PermissionService.DELETE, true); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - - List diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals("["+layeredStore+":/layer/d-a[-1] > "+baseStore+":/d-a[-1]]", diffs.toString()); - assertEquals(1, diffs.size()); - - recursiveList(baseStore); - recursiveList(layeredStore); - - // update main from layer - System.out.println("update: main from layer"); - avmSyncService.update(diffs, null, false, false, false, false, null, null); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - // check that the DELETE permission is now set in main - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.DELETE, true); - - layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - layeredNodeRef = AVMNodeConverter.ToNodeRef(-1, layeredNodeDesc.getPath()); - - // flatten - System.out.println("flatten: layer to main"); - avmSyncService.flatten(layeredStore + ":/layer", baseStore + ":/"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - // check that the DELETE permission is still set in main (and appears in layer) - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.DELETE, true); - - layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - - // check that directory in layer is the same as the one from main - assertEquals(baseNodeDesc, layeredNodeDesc); - } - catch (Throwable t) - { - t.printStackTrace(); - throw t; - } - finally - { - removeStore(baseStore); - removeStore(layeredStore); - } - } - - /* - * create directory in layer - * set directory permission in layer - * update back to main - * flatten - * set another directory permission in layer - * update back to main - * flatten - */ - public void testSimpleDirectoryPermissionDiff3() throws Throwable - { - runAs(AuthenticationUtil.getAdminUserName()); - - String prefix = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - String baseStore = prefix+"-main"; - String layeredStore = prefix+"-layer"; - - try - { - System.out.println("create store: " + baseStore); - avmService.createStore(baseStore); - - System.out.println("create store: " + layeredStore); - avmService.createStore(layeredStore); - - System.out.println("create LD: " + layeredStore + ":/layer -> " + baseStore + ":/"); - avmService.createLayeredDirectory(baseStore + ":/", layeredStore + ":/", "layer"); - - // create directory in layer - System.out.println("create D: " + layeredStore + ":/layer/d-a"); - avmService.createDirectory(layeredStore + ":/layer", "d-a"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - AVMNodeDescriptor layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - AVMNodeDescriptor baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - NodeRef layeredNodeRef = AVMNodeConverter.ToNodeRef(-1, layeredNodeDesc.getPath()); - - // set DELETE permission on directory in layer - System.out.println("set P (DELETE): " + layeredStore + ":/layer/d-a"); - checkHeadPermissionNotSet(layeredNodeDesc, "andy", PermissionService.DELETE, true); - permissionService.setPermission(layeredNodeRef, "andy", PermissionService.DELETE, true); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - - List diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals("["+layeredStore+":/layer/d-a[-1] > "+baseStore+":/d-a[-1]]", diffs.toString()); - assertEquals(1, diffs.size()); - - recursiveList(baseStore); - recursiveList(layeredStore); - - // update main from layer - System.out.println("update: main from layer"); - avmSyncService.update(diffs, null, false, false, false, false, null, null); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - // check that the DELETE permission is now set in main - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.DELETE, true); - - // flatten - System.out.println("flatten: layer to main"); - avmSyncService.flatten(layeredStore + ":/layer", baseStore + ":/"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - // check that the DELETE permission is still set in main (and appears in layer) - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.DELETE, true); - - layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - - // check that directory in layer is the same as the one from main - layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - assertEquals(baseNodeDesc, layeredNodeDesc); - - // repeat with another directory permission - - // set WRITE directory permission in layer - System.out.println("set P (WRITE): " + layeredStore + ":/layer/d-a"); - checkHeadPermissionNotSet(layeredNodeDesc, "andy", PermissionService.WRITE, true); - permissionService.setPermission(layeredNodeRef, "andy", PermissionService.WRITE, true); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.WRITE, true); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals("["+layeredStore+":/layer/d-a[-1] > "+baseStore+":/d-a[-1]]", diffs.toString()); - assertEquals(1, diffs.size()); - - // update main from layer - System.out.println("update: main from layer"); - avmSyncService.update(diffs, null, false, false, false, false, null, null); - - recursiveList(baseStore); - recursiveList(layeredStore); - - // check that the WRITE permission is now set in main - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.WRITE, true); - - // flatten - System.out.println("flatten: layer to main"); - avmSyncService.flatten(layeredStore + ":/layer", baseStore + ":/"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - // check that the WRITE and DELETE permissions are still set in main (and appears in layer) - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.DELETE, true); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.WRITE, true); - - layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.WRITE, true); - - // check that directory in layer is the same as the one from main - assertEquals(baseNodeDesc, layeredNodeDesc); - } - catch (Throwable t) - { - t.printStackTrace(); - throw t; - } - finally - { - removeStore(baseStore); - removeStore(layeredStore); - } - } - - /* - * create directory in layer - * set directory permission in layer - * snapshot layer, update back to main, snapshot main - * create file in layer - * snapshot layer, update back to main, snapshot main - * flatten - * set another directory permission in layer - * snapshot layer, update back to main, snapshot main - * flatten - */ - public void testSimpleDirectoryPermissionDiff4() throws Throwable - { - runAs(AuthenticationUtil.getAdminUserName()); - - String prefix = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - String baseStore = prefix+"-main"; - String layeredStore = prefix+"-layer"; - - try - { - System.out.println("create store: " + baseStore); - avmService.createStore(baseStore); - - System.out.println("create store: " + layeredStore); - avmService.createStore(layeredStore); - - System.out.println("create LD: " + layeredStore + ":/layer -> " + baseStore + ":/"); - avmService.createLayeredDirectory(baseStore + ":/", layeredStore + ":/", "layer"); - - // create directory in layer - System.out.println("create D: " + layeredStore + ":/layer/d-a"); - avmService.createDirectory(layeredStore + ":/layer", "d-a"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - AVMNodeDescriptor layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - AVMNodeDescriptor baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - NodeRef layeredNodeRef = AVMNodeConverter.ToNodeRef(-1, layeredNodeDesc.getPath()); - - // set DELETE permission on directory in layer - System.out.println("set P (DELETE): " + layeredStore + ":/layer/d-a"); - checkHeadPermissionNotSet(layeredNodeDesc, "andy", PermissionService.DELETE, true); - permissionService.setPermission(layeredNodeRef, "andy", PermissionService.DELETE, true); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - - List diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals("["+layeredStore+":/layer/d-a[-1] > "+baseStore+":/d-a[-1]]", diffs.toString()); - assertEquals(1, diffs.size()); - - recursiveList(baseStore); - recursiveList(layeredStore); - - // snapshot layer, update main from layer, snapshot main - System.out.println("snapshot: layer"); - avmService.createSnapshot(layeredStore, null, null); - System.out.println("update: main from layer"); - avmSyncService.update(diffs, null, false, false, false, false, null, null); - System.out.println("snapshot: main"); - avmService.createSnapshot(baseStore, null, null); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - // check that the DELETE permission is now set in main - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.DELETE, true); - - // create file in layer - System.out.println("create F: " + layeredStore + ":/layer/d-a/f-aa"); - avmService.createFile(layeredStore + ":/layer/d-a", "f-aa").close(); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals("["+layeredStore+":/layer/d-a/f-aa[-1] > "+baseStore+":/d-a/f-aa[-1]]", diffs.toString()); - assertEquals(1, diffs.size()); - - // snapshot layer, update main from layer, snapshot main - System.out.println("snapshot: layer"); - avmService.createSnapshot(layeredStore, null, null); - System.out.println("update: main from layer"); - avmSyncService.update(diffs, null, false, false, false, false, null, null); - System.out.println("snapshot: main"); - avmService.createSnapshot(baseStore, null, null); - - recursiveList(baseStore); - recursiveList(layeredStore); - - // flatten - System.out.println("flatten: layer to main"); - avmSyncService.flatten(layeredStore + ":/layer", baseStore + ":/"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - // check that the DELETE permission is still set in main (and appears in layer) - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.DELETE, true); - - layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - - // check that directory in layer is the same as the one from main - layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - assertEquals(baseNodeDesc, layeredNodeDesc); - - // set another directory permission - - // set WRITE directory permission in layer - System.out.println("set P (WRITE): " + layeredStore + ":/layer/d-a"); - checkHeadPermissionNotSet(layeredNodeDesc, "andy", PermissionService.WRITE, true); - permissionService.setPermission(layeredNodeRef, "andy", PermissionService.WRITE, true); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.WRITE, true); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals("["+layeredStore+":/layer/d-a[-1] > "+baseStore+":/d-a[-1]]", diffs.toString()); - assertEquals(1, diffs.size()); - - // snapshot layer, update main from layer, snapshot main - System.out.println("snapshot: layer"); - avmService.createSnapshot(layeredStore, null, null); - System.out.println("update: main from layer"); - avmSyncService.update(diffs, null, false, false, false, false, null, null); - System.out.println("snapshot: main"); - avmService.createSnapshot(baseStore, null, null); - - recursiveList(baseStore); - recursiveList(layeredStore); - - // check that the WRITE permission is now set in main - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.WRITE, true); - - // flatten - System.out.println("flatten: layer to main"); - avmSyncService.flatten(layeredStore + ":/layer", baseStore + ":/"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - // check that the WRITE and DELETE permissions are still set in main (and appears in layer) - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.DELETE, true); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.WRITE, true); - - layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.WRITE, true); - - // check that directory in layer is the same as the one from main - assertEquals(baseNodeDesc, layeredNodeDesc); - } - catch (Throwable t) - { - t.printStackTrace(); - throw t; - } - finally - { - removeStore(baseStore); - removeStore(layeredStore); - } - } - - /* - * create directory in layer - * set two directory permissions in layer - * snapshot layer, update back to main, snapshot main - * flatten - * remove one of the directory permissions in layer - * snapshot layer, update back to main, snapshot main - * flatten - */ - public void testSimpleDirectoryPermissionDiff5() throws Throwable - { - runAs(AuthenticationUtil.getAdminUserName()); - - String prefix = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - String baseStore = prefix+"-main"; - String layeredStore = prefix+"-layer"; - - try - { - System.out.println("create store: " + baseStore); - avmService.createStore(baseStore); - - System.out.println("create store: " + layeredStore); - avmService.createStore(layeredStore); - - System.out.println("create LD: " + layeredStore + ":/layer -> " + baseStore + ":/"); - avmService.createLayeredDirectory(baseStore + ":/", layeredStore + ":/", "layer"); - - // create directory in layer - System.out.println("create D: " + layeredStore + ":/layer/d-a"); - avmService.createDirectory(layeredStore + ":/layer", "d-a"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - AVMNodeDescriptor layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - AVMNodeDescriptor baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - NodeRef layeredNodeRef = AVMNodeConverter.ToNodeRef(-1, layeredNodeDesc.getPath()); - - // set DELETE permission on directory in layer - System.out.println("set P (DELETE): " + layeredStore + ":/layer/d-a"); - checkHeadPermissionNotSet(layeredNodeDesc, "andy", PermissionService.DELETE, true); - permissionService.setPermission(layeredNodeRef, "andy", PermissionService.DELETE, true); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - - // set WRITE permission on directory in layer - System.out.println("set P (WRITE): " + layeredStore + ":/layer/d-a"); - checkHeadPermissionNotSet(layeredNodeDesc, "andy", PermissionService.WRITE, true); - permissionService.setPermission(layeredNodeRef, "andy", PermissionService.WRITE, true); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.WRITE, true); - - List diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals("["+layeredStore+":/layer/d-a[-1] > "+baseStore+":/d-a[-1]]", diffs.toString()); - assertEquals(1, diffs.size()); - - recursiveList(baseStore); - recursiveList(layeredStore); - - // snapshot layer, update main from layer, snapshot main - System.out.println("snapshot: layer"); - avmService.createSnapshot(layeredStore, null, null); - System.out.println("update: main from layer"); - avmSyncService.update(diffs, null, false, false, false, false, null, null); - System.out.println("snapshot: main"); - avmService.createSnapshot(baseStore, null, null); - - recursiveList(baseStore); - recursiveList(layeredStore); - - // flatten - System.out.println("flatten: layer to main"); - avmSyncService.flatten(layeredStore + ":/layer", baseStore + ":/"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - // check that the WRITE and DELETE permissions are still set in main (and appears in layer) - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.DELETE, true); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.WRITE, true); - - layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.WRITE, true); - - // check that directory in layer is the same as the one from main - assertEquals(baseNodeDesc, layeredNodeDesc); - - // remove one of the directory permissions - - // delete DELETE directory permission in layer - System.out.println("delete P (DELETE): " + layeredStore + ":/layer/d-a"); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - permissionService.deletePermission(layeredNodeRef, "andy", PermissionService.DELETE); - checkHeadPermissionNotSet(layeredNodeDesc, "andy", PermissionService.DELETE, true); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals("["+layeredStore+":/layer/d-a[-1] > "+baseStore+":/d-a[-1]]", diffs.toString()); - assertEquals(1, diffs.size()); - - // snapshot layer, update main from layer, snapshot main - System.out.println("snapshot: layer"); - avmService.createSnapshot(layeredStore, null, null); - System.out.println("update: main from layer"); - avmSyncService.update(diffs, null, false, false, false, false, null, null); - System.out.println("snapshot: main"); - avmService.createSnapshot(baseStore, null, null); - - recursiveList(baseStore); - recursiveList(layeredStore); - - // check that the DELETE permission is no longer set in main - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermissionNotSet(baseNodeDesc, "andy", PermissionService.DELETE, true); - - // flatten - System.out.println("flatten: layer to main"); - avmSyncService.flatten(layeredStore + ":/layer", baseStore + ":/"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - // check that the WRITE permission is still set in main (and appears in layer) - // check that the DELETE permission is not set in main (or layer) - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.WRITE, true); - checkHeadPermissionNotSet(baseNodeDesc, "andy", PermissionService.DELETE, true); - - layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.WRITE, true); - checkHeadPermissionNotSet(layeredNodeDesc, "andy", PermissionService.DELETE, true); - - // check that directory in layer is the same as the one from main - assertEquals(baseNodeDesc, layeredNodeDesc); - } - catch (Throwable t) - { - t.printStackTrace(); - throw t; - } - finally - { - removeStore(baseStore); - removeStore(layeredStore); - } - } - - /* - * create directory in layer - * set two directory permissions in layer - * snapshot layer, update back to main, snapshot main - * flatten - * remove one of the existing directory permissions in layer - * set a different directory permission in layer - * snapshot layer, update back to main, snapshot main - * flatten - */ - public void testSimpleDirectoryPermissionDiff6() throws Throwable - { - runAs(AuthenticationUtil.getAdminUserName()); - - String prefix = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - String baseStore = prefix+"-main"; - String layeredStore = prefix+"-layer"; - - try - { - System.out.println("create store: " + baseStore); - avmService.createStore(baseStore); - - System.out.println("create store: " + layeredStore); - avmService.createStore(layeredStore); - - System.out.println("create LD: " + layeredStore + ":/layer -> " + baseStore + ":/"); - avmService.createLayeredDirectory(baseStore + ":/", layeredStore + ":/", "layer"); - - // create directory in layer - System.out.println("create D: " + layeredStore + ":/layer/d-a"); - avmService.createDirectory(layeredStore + ":/layer", "d-a"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - AVMNodeDescriptor layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - AVMNodeDescriptor baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - NodeRef layeredNodeRef = AVMNodeConverter.ToNodeRef(-1, layeredNodeDesc.getPath()); - - // set DELETE permission on directory in layer - System.out.println("set P (DELETE): " + layeredStore + ":/layer/d-a"); - checkHeadPermissionNotSet(layeredNodeDesc, "andy", PermissionService.DELETE, true); - permissionService.setPermission(layeredNodeRef, "andy", PermissionService.DELETE, true); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - - // set WRITE permission on directory in layer - System.out.println("set P (WRITE): " + layeredStore + ":/layer/d-a"); - checkHeadPermissionNotSet(layeredNodeDesc, "andy", PermissionService.WRITE, true); - permissionService.setPermission(layeredNodeRef, "andy", PermissionService.WRITE, true); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.WRITE, true); - - List diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals("["+layeredStore+":/layer/d-a[-1] > "+baseStore+":/d-a[-1]]", diffs.toString()); - assertEquals(1, diffs.size()); - - recursiveList(baseStore); - recursiveList(layeredStore); - - // snapshot layer, update main from layer, snapshot main - System.out.println("snapshot: layer"); - avmService.createSnapshot(layeredStore, null, null); - System.out.println("update: main from layer"); - avmSyncService.update(diffs, null, false, false, false, false, null, null); - System.out.println("snapshot: main"); - avmService.createSnapshot(baseStore, null, null); - - recursiveList(baseStore); - recursiveList(layeredStore); - - // flatten - System.out.println("flatten: layer to main"); - avmSyncService.flatten(layeredStore + ":/layer", baseStore + ":/"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - // check that the WRITE and DELETE permissions are still set in main (and appears in layer) - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.DELETE, true); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.WRITE, true); - - layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.WRITE, true); - - // check that directory in layer is the same as the one from main - assertEquals(baseNodeDesc, layeredNodeDesc); - - // remove one of the directory permissions - - // delete DELETE directory permission in layer - System.out.println("delete P (DELETE): " + layeredStore + ":/layer/d-a"); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.DELETE, true); - permissionService.deletePermission(layeredNodeRef, "andy", PermissionService.DELETE); - checkHeadPermissionNotSet(layeredNodeDesc, "andy", PermissionService.DELETE, true); - - // set READ permission on directory in layer - System.out.println("set P (READ): " + layeredStore + ":/layer/d-a"); - checkHeadPermissionNotSet(layeredNodeDesc, "andy", PermissionService.READ, true); - permissionService.setPermission(layeredNodeRef, "andy", PermissionService.READ, true); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.READ, true); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals("["+layeredStore+":/layer/d-a[-1] > "+baseStore+":/d-a[-1]]", diffs.toString()); - assertEquals(1, diffs.size()); - - // snapshot layer, update main from layer, snapshot main - System.out.println("snapshot: layer"); - avmService.createSnapshot(layeredStore, null, null); - System.out.println("update: main from layer"); - avmSyncService.update(diffs, null, false, false, false, false, null, null); - System.out.println("snapshot: main"); - avmService.createSnapshot(baseStore, null, null); - - recursiveList(baseStore); - recursiveList(layeredStore); - - // check that the DELETE permission is no longer set in main - // check that the READ permission is now set in main - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermissionNotSet(baseNodeDesc, "andy", PermissionService.DELETE, true); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.READ, true); - - // flatten - System.out.println("flatten: layer to main"); - avmSyncService.flatten(layeredStore + ":/layer", baseStore + ":/"); - - recursiveList(baseStore); - recursiveList(layeredStore); - - diffs = avmSyncService.compare(-1, layeredStore + ":/layer", -1, baseStore + ":/", null); - assertEquals(0, diffs.size()); - - // check that the WRITE & READ permissions are set in main (and appear in layer) - // check that the DELETE permission is not set in main (or layer) - baseNodeDesc = avmService.lookup(-1, baseStore + ":/d-a"); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.WRITE, true); - checkHeadPermission(baseNodeDesc, "andy", PermissionService.READ, true); - checkHeadPermissionNotSet(baseNodeDesc, "andy", PermissionService.DELETE, true); - - layeredNodeDesc = avmService.lookup(-1, layeredStore + ":/layer/d-a"); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.WRITE, true); - checkHeadPermission(layeredNodeDesc, "andy", PermissionService.WRITE, true); - checkHeadPermissionNotSet(layeredNodeDesc, "andy", PermissionService.DELETE, true); - - // check that directory in layer is the same as the one from main - assertEquals(baseNodeDesc, layeredNodeDesc); - } - catch (Throwable t) - { - t.printStackTrace(); - throw t; - } - finally - { - removeStore(baseStore); - removeStore(layeredStore); - } - } - - private void checkHeadPermissionForPath(String path, String authority, String permission, boolean allow, String[] excludes) - { - AVMNodeDescriptor desc = avmService.lookup(-1, path); - checkHeadPermission(desc, authority, permission, allow); - if (desc.isDirectory()) - { - Map children = avmService.getDirectoryListing(desc); - for (String child : children.keySet()) - { - String newPath = path + "/" + child; - if (excludes != null) - { - for (String exclude : excludes) - { - if (newPath.startsWith(exclude)) - { - return; - } - } - } - checkHeadPermissionForPath(newPath, authority, permission, allow, excludes); - } - } - } - - private void checkHeadPermissionNotSetForPath(String path, String authority, String permission, boolean allow, String[] excludes) - { - AVMNodeDescriptor desc = avmService.lookup(-1, path); - checkHeadPermissionNotSet(desc, authority, permission, allow); - if (desc.isDirectory()) - { - Map children = avmService.getDirectoryListing(desc); - for (String child : children.keySet()) - { - String newPath = path + "/" + child; - if (excludes != null) - { - for (String exclude : excludes) - { - if (newPath.startsWith(exclude)) - { - return; - } - } - } - checkHeadPermissionNotSetForPath(newPath, authority, permission, allow, excludes); - } - } - } - - private void checkHeadPermission(AVMNodeDescriptor desc, String authority, String permission, boolean allow) - { - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - Set set = permissionService.getAllSetPermissions(nodeRef); - for (AccessPermission p : set) - { - if (p.getAuthority().equals(authority)) - { - if (p.getPermission().equals(permission)) - { - // debugPermissions(desc.getPath()); - return; - } - } - } - debugPermissions(desc.getPath()); - fail("Permisssions not found at " + desc.getPath()); - // System.err.println("Permisssions not found at "+desc.getPath()); - } - - private void checkHeadPermissionNotSet(AVMNodeDescriptor desc, String authority, String permission, boolean allow) - { - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - Set set = permissionService.getAllSetPermissions(nodeRef); - for (AccessPermission p : set) - { - if (p.getAuthority().equals(authority)) - { - if (p.getPermission().equals(permission)) - { - debugPermissions(desc.getPath()); - fail("Permisssions found at " + desc.getPath()); - } - } - } - // debugPermissions(desc.getPath()); - // fail("Permisssions not found at "+desc.getPath()); - // System.err.println("Permisssions not found at "+desc.getPath()); - } - - public void testRedirectLayeredDirectory() throws IOException - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - try - { - avmService.createStore(storeName); - avmService.createDirectory(storeName + ":/", "www"); - avmService.createDirectory(storeName + ":/www", "avm-web-apps"); - avmService.createFile(storeName + ":/www", "dog").close(); - avmService.createDirectory(storeName + ":/www/avm-web-apps", "ROOT"); - avmService.createFile(storeName + ":/www/avm-web-apps", "cat").close(); - - AVMNodeDescriptor desc = avmService.lookup(-1, storeName + ":/www"); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, PermissionService.ALL_AUTHORITIES, PermissionService.READ, true); - assertTrue(checkPermission("lemur", storeName + ":/www", PermissionService.READ, true)); - assertTrue(checkPermission("manager", storeName + ":/www", PermissionService.READ, true)); - assertTrue(checkPermission("publisher", storeName + ":/www", PermissionService.READ, true)); - assertTrue(checkPermission("contributor", storeName + ":/www", PermissionService.READ, true)); - assertTrue(checkPermission("reviewer", storeName + ":/www", PermissionService.READ, true)); - assertTrue(checkPermission("lemur", storeName + ":/www", "Coordinator", false)); - assertTrue(checkPermission("manager", storeName + ":/www", "Coordinator", false)); - assertTrue(checkPermission("publisher", storeName + ":/www", "Coordinator", false)); - assertTrue(checkPermission("contributor", storeName + ":/www", "Coordinator", false)); - assertTrue(checkPermission("reviewer", storeName + ":/www", "Coordinator", false)); - assertTrue(checkPermission("lemur", storeName + ":/www", "Collaborator", false)); - assertTrue(checkPermission("manager", storeName + ":/www", "Collaborator", false)); - assertTrue(checkPermission("publisher", storeName + ":/www", "Collaborator", false)); - assertTrue(checkPermission("contributor", storeName + ":/www", "Collaborator", false)); - assertTrue(checkPermission("reviewer", storeName + ":/www", "Collaborator", false)); - assertTrue(checkPermission("lemur", storeName + ":/www", "Contributor", false)); - assertTrue(checkPermission("manager", storeName + ":/www", "Contributor", false)); - assertTrue(checkPermission("publisher", storeName + ":/www", "Contributor", false)); - assertTrue(checkPermission("contributor", storeName + ":/www", "Contributor", false)); - assertTrue(checkPermission("reviewer", storeName + ":/www", "Contributor", false)); - assertTrue(checkPermission("lemur", storeName + ":/www", "Editor", false)); - assertTrue(checkPermission("manager", storeName + ":/www", "Editor", false)); - assertTrue(checkPermission("publisher", storeName + ":/www", "Editor", false)); - assertTrue(checkPermission("contributor", storeName + ":/www", "Editor", false)); - assertTrue(checkPermission("reviewer", storeName + ":/www", "Editor", false)); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "manager", "ContentManager", true); - assertTrue(checkPermission("lemur", storeName + ":/www/avm-web-apps", PermissionService.READ, true)); - assertTrue(checkPermission("manager", storeName + ":/www/avm-web-apps", PermissionService.READ, true)); - assertTrue(checkPermission("publisher", storeName + ":/www/avm-web-apps", PermissionService.READ, true)); - assertTrue(checkPermission("contributor", storeName + ":/www/avm-web-apps", PermissionService.READ, true)); - assertTrue(checkPermission("reviewer", storeName + ":/www/avm-web-apps", PermissionService.READ, true)); - assertTrue(checkPermission("lemur", storeName + ":/www/avm-web-apps", "ContentManager", false)); - assertTrue(checkPermission("manager", storeName + ":/www/avm-web-apps", "ContentManager", true)); - assertTrue(checkPermission("publisher", storeName + ":/www/avm-web-apps", "ContentManager", false)); - assertTrue(checkPermission("contributor", storeName + ":/www/avm-web-apps", "ContentManager", false)); - assertTrue(checkPermission("reviewer", storeName + ":/www/avm-web-apps", "ContentManager", false)); - assertTrue(checkPermission("lemur", storeName + ":/www/avm-web-apps", "ContentPublisher", false)); - assertTrue(checkPermission("manager", storeName + ":/www/avm-web-apps", "ContentPublisher", true)); - assertTrue(checkPermission("publisher", storeName + ":/www/avm-web-apps", "ContentPublisher", false)); - assertTrue(checkPermission("contributor", storeName + ":/www/avm-web-apps", "ContentPublisher", false)); - assertTrue(checkPermission("reviewer", storeName + ":/www/avm-web-apps", "ContentPublisher", false)); - assertTrue(checkPermission("lemur", storeName + ":/www/avm-web-apps", "ContentContributor", false)); - assertTrue(checkPermission("manager", storeName + ":/www/avm-web-apps", "ContentContributor", true)); - assertTrue(checkPermission("publisher", storeName + ":/www/avm-web-apps", "ContentContributor", false)); - assertTrue(checkPermission("contributor", storeName + ":/www/avm-web-apps", "ContentContributor", false)); - assertTrue(checkPermission("reviewer", storeName + ":/www/avm-web-apps", "ContentContributor", false)); - assertTrue(checkPermission("lemur", storeName + ":/www/avm-web-apps", "ContentReviewer", false)); - assertTrue(checkPermission("manager", storeName + ":/www/avm-web-apps", "ContentReviewer", true)); - assertTrue(checkPermission("publisher", storeName + ":/www/avm-web-apps", "ContentReviewer", false)); - assertTrue(checkPermission("contributor", storeName + ":/www/avm-web-apps", "ContentReviewer", false)); - assertTrue(checkPermission("reviewer", storeName + ":/www/avm-web-apps", "ContentReviewer", false)); - desc = avmService.lookup(-1, storeName + ":/www/dog"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "publisher", "Collaborator", true); - assertTrue(checkPermission("lemur", storeName + ":/www/dog", PermissionService.READ, true)); - assertTrue(checkPermission("manager", storeName + ":/www/dog", PermissionService.READ, true)); - assertTrue(checkPermission("publisher", storeName + ":/www/dog", PermissionService.READ, true)); - assertTrue(checkPermission("contributor", storeName + ":/www/dog", PermissionService.READ, true)); - assertTrue(checkPermission("reviewer", storeName + ":/www/dog", PermissionService.READ, true)); - assertTrue(checkPermission("lemur", storeName + ":/www/dog", "Coordinator", false)); - assertTrue(checkPermission("manager", storeName + ":/www/dog", "Coordinator", false)); - assertTrue(checkPermission("publisher", storeName + ":/www/dog", "Coordinator", false)); - assertTrue(checkPermission("contributor", storeName + ":/www/dog", "Coordinator", false)); - assertTrue(checkPermission("reviewer", storeName + ":/www/dog", "Coordinator", false)); - assertTrue(checkPermission("lemur", storeName + ":/www/dog", "Collaborator", false)); - assertTrue(checkPermission("manager", storeName + ":/www/dog", "Collaborator", false)); - assertTrue(checkPermission("publisher", storeName + ":/www/dog", "Collaborator", true)); - assertTrue(checkPermission("contributor", storeName + ":/www/dog", "Collaborator", false)); - assertTrue(checkPermission("reviewer", storeName + ":/www/dog", "Collaborator", false)); - assertTrue(checkPermission("lemur", storeName + ":/www/dog", "Contributor", false)); - assertTrue(checkPermission("manager", storeName + ":/www/dog", "Contributor", false)); - assertTrue(checkPermission("publisher", storeName + ":/www/dog", "Contributor", true)); - assertTrue(checkPermission("contributor", storeName + ":/www/dog", "Contributor", false)); - assertTrue(checkPermission("reviewer", storeName + ":/www/dog", "Contributor", false)); - assertTrue(checkPermission("lemur", storeName + ":/www/dog", "Editor", false)); - assertTrue(checkPermission("manager", storeName + ":/www/dog", "Editor", false)); - assertTrue(checkPermission("publisher", storeName + ":/www/dog", "Editor", true)); - assertTrue(checkPermission("contributor", storeName + ":/www/dog", "Editor", false)); - assertTrue(checkPermission("reviewer", storeName + ":/www/dog", "Editor", false)); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "contributor", "Coordinator", true); - assertTrue(checkPermission("lemur", storeName + ":/www/avm-web-apps/ROOT", PermissionService.READ, true)); - assertTrue(checkPermission("manager", storeName + ":/www/avm-web-apps/ROOT", PermissionService.READ, true)); - assertTrue(checkPermission("publisher", storeName + ":/www/avm-web-apps/ROOT", PermissionService.READ, true)); - assertTrue(checkPermission("contributor", storeName + ":/www/avm-web-apps/ROOT", PermissionService.READ, true)); - assertTrue(checkPermission("reviewer", storeName + ":/www/avm-web-apps/ROOT", PermissionService.READ, true)); - assertTrue(checkPermission("lemur", storeName + ":/www/avm-web-apps/ROOT", "Coordinator", false)); - assertTrue(checkPermission("manager", storeName + ":/www/avm-web-apps/ROOT", "Coordinator", true)); - assertTrue(checkPermission("publisher", storeName + ":/www/avm-web-apps/ROOT", "Coordinator", false)); - assertTrue(checkPermission("contributor", storeName + ":/www/avm-web-apps/ROOT", "Coordinator", true)); - assertTrue(checkPermission("reviewer", storeName + ":/www/avm-web-apps/ROOT", "Coordinator", false)); - assertTrue(checkPermission("lemur", storeName + ":/www/avm-web-apps/ROOT", "Collaborator", false)); - assertTrue(checkPermission("manager", storeName + ":/www/avm-web-apps/ROOT", "Collaborator", true)); - assertTrue(checkPermission("publisher", storeName + ":/www/avm-web-apps/ROOT", "Collaborator", false)); - assertTrue(checkPermission("contributor", storeName + ":/www/avm-web-apps/ROOT", "Collaborator", true)); - assertTrue(checkPermission("reviewer", storeName + ":/www/avm-web-apps/ROOT", "Collaborator", false)); - assertTrue(checkPermission("lemur", storeName + ":/www/avm-web-apps/ROOT", "Contributor", false)); - assertTrue(checkPermission("manager", storeName + ":/www/avm-web-apps/ROOT", "Contributor", true)); - assertTrue(checkPermission("publisher", storeName + ":/www/avm-web-apps/ROOT", "Contributor", false)); - assertTrue(checkPermission("contributor", storeName + ":/www/avm-web-apps/ROOT", "Contributor", true)); - assertTrue(checkPermission("reviewer", storeName + ":/www/avm-web-apps/ROOT", "Contributor", false)); - assertTrue(checkPermission("lemur", storeName + ":/www/avm-web-apps/ROOT", "Editor", false)); - assertTrue(checkPermission("manager", storeName + ":/www/avm-web-apps/ROOT", "Editor", true)); - assertTrue(checkPermission("publisher", storeName + ":/www/avm-web-apps/ROOT", "Editor", false)); - assertTrue(checkPermission("contributor", storeName + ":/www/avm-web-apps/ROOT", "Editor", true)); - assertTrue(checkPermission("reviewer", storeName + ":/www/avm-web-apps/ROOT", "Editor", false)); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/cat"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "reviewer", "Editor", true); - assertTrue(checkPermission("lemur", storeName + ":/www/avm-web-apps/cat", PermissionService.READ, true)); - assertTrue(checkPermission("manager", storeName + ":/www/avm-web-apps/cat", PermissionService.READ, true)); - assertTrue(checkPermission("publisher", storeName + ":/www/avm-web-apps/cat", PermissionService.READ, true)); - assertTrue(checkPermission("contributor", storeName + ":/www/avm-web-apps/cat", PermissionService.READ, true)); - assertTrue(checkPermission("reviewer", storeName + ":/www/avm-web-apps/cat", PermissionService.READ, true)); - assertTrue(checkPermission("lemur", storeName + ":/www/avm-web-apps/cat", "Coordinator", false)); - assertTrue(checkPermission("manager", storeName + ":/www/avm-web-apps/cat", "Coordinator", true)); - assertTrue(checkPermission("publisher", storeName + ":/www/avm-web-apps/cat", "Coordinator", false)); - assertTrue(checkPermission("contributor", storeName + ":/www/avm-web-apps/cat", "Coordinator", false)); - assertTrue(checkPermission("reviewer", storeName + ":/www/avm-web-apps/cat", "Coordinator", false)); - assertTrue(checkPermission("lemur", storeName + ":/www/avm-web-apps/cat", "Collaborator", false)); - assertTrue(checkPermission("manager", storeName + ":/www/avm-web-apps/cat", "Collaborator", true)); - assertTrue(checkPermission("publisher", storeName + ":/www/avm-web-apps/cat", "Collaborator", false)); - assertTrue(checkPermission("contributor", storeName + ":/www/avm-web-apps/cat", "Collaborator", false)); - assertTrue(checkPermission("reviewer", storeName + ":/www/avm-web-apps/cat", "Collaborator", false)); - assertTrue(checkPermission("lemur", storeName + ":/www/avm-web-apps/cat", "Contributor", false)); - assertTrue(checkPermission("manager", storeName + ":/www/avm-web-apps/cat", "Contributor", true)); - assertTrue(checkPermission("publisher", storeName + ":/www/avm-web-apps/cat", "Contributor", false)); - assertTrue(checkPermission("contributor", storeName + ":/www/avm-web-apps/cat", "Contributor", false)); - assertTrue(checkPermission("reviewer", storeName + ":/www/avm-web-apps/cat", "Contributor", false)); - assertTrue(checkPermission("lemur", storeName + ":/www/avm-web-apps/cat", "Editor", false)); - assertTrue(checkPermission("manager", storeName + ":/www/avm-web-apps/cat", "Editor", true)); - assertTrue(checkPermission("publisher", storeName + ":/www/avm-web-apps/cat", "Editor", false)); - assertTrue(checkPermission("contributor", storeName + ":/www/avm-web-apps/cat", "Editor", false)); - assertTrue(checkPermission("reviewer", storeName + ":/www/avm-web-apps/cat", "Editor", true)); - - avmService.createSnapshot(storeName, null, null); - avmService.createLayeredDirectory(storeName + ":/www", storeName + ":/", "layer"); - - desc = avmService.lookup(-1, storeName + ":/layer"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/layer/dog"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/cat"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - - avmService.retargetLayeredDirectory(storeName + ":/layer", storeName + ":/www/avm-web-apps"); - - desc = avmService.lookup(-1, storeName + ":/layer"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/layer/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/layer/cat"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - - avmService.retargetLayeredDirectory(storeName + ":/layer", storeName + ":/www"); - - desc = avmService.lookup(-1, storeName + ":/layer"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/layer/dog"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/cat"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - - desc = avmService.lookup(-1, storeName + ":/layer"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "monkey", PermissionService.READ, true); - avmService.createDirectory(storeName + ":/layer", "l-d"); - desc = avmService.lookup(-1, storeName + ":/layer/l-d"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "directory-monkey", PermissionService.READ, true); - avmService.createFile(storeName + ":/layer", "l-f").close(); - desc = avmService.lookup(-1, storeName + ":/layer/l-f"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "file-monkey", PermissionService.READ, true); - - desc = avmService.lookup(-1, storeName + ":/layer"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/layer/l-d"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/layer/l-f"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/layer/dog"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 4); - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/cat"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 4); - debugPermissions(storeName + ":/layer/avm-web-apps/cat"); - - // As we have set permissions on this node it has done COW and now defined its own permissions. - // Changing the target does not change the permissions just the content and locations - // Some underlying nodes have not been COWed - and so pick up underlygin changes - // - it is only layer and its direct children that will now hace fixed permissions. - // Joy all round - - // Note copy on writed nodes will move taking context.... so cat appears in two places - // / over layed as cat .... and also as avm-web-apps from the previous copy on write and then move .... - - avmService.retargetLayeredDirectory(storeName + ":/layer", storeName + ":/www/avm-web-apps"); - - desc = avmService.lookup(-1, storeName + ":/layer"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/layer/l-d"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/layer/l-f"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/layer/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 4); - desc = avmService.lookup(-1, storeName + ":/layer/cat"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 4); - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/cat"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 4); - - avmService.retargetLayeredDirectory(storeName + ":/layer", storeName + ":/www"); - - desc = avmService.lookup(-1, storeName + ":/layer"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/layer/l-d"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/layer/l-f"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/layer/dog"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 4); - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/cat"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 4); - - } - finally - { - removeStore(storeName); - } - } - - public void testCopy() - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - try - { - avmService.createStore(storeName); - avmService.createDirectory(storeName + ":/", "www"); - avmService.createDirectory(storeName + ":/www", "avm-web-apps"); - avmService.createDirectory(storeName + ":/www/avm-web-apps", "ROOT"); - AVMNodeDescriptor desc = avmService.lookup(-1, storeName + ":/www"); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - Map s1 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - permissionService.setPermission(nodeRef, PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true); - Map s2 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - permissionService.setPermission(nodeRef, "manager", "ContentManager", true); - Map s3 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - permissionService.setPermission(nodeRef, "publisher", "ContentPublisher", true); - Map s4 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - permissionService.setPermission(nodeRef, "contributor", "ContentContributor", true); - Map s5 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - permissionService.setPermission(nodeRef, "reviewer", "ContentReviewer", true); - Map s6 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - - avmService.copy(-1, storeName + ":/www", storeName + ":/", "head"); - desc = avmService.lookup(-1, storeName + ":/head"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - desc = avmService.lookup(-1, storeName + ":/head/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - - avmService.copy(s1.get(storeName), storeName + ":/www", storeName + ":/", "s1"); - desc = avmService.lookup(-1, storeName + ":/s1"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 0); - desc = avmService.lookup(-1, storeName + ":/s1/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 0); - - avmService.copy(s2.get(storeName), storeName + ":/www", storeName + ":/", "s2"); - desc = avmService.lookup(-1, storeName + ":/s2"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - desc = avmService.lookup(-1, storeName + ":/s2/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.copy(s3.get(storeName), storeName + ":/www", storeName + ":/", "s3"); - desc = avmService.lookup(-1, storeName + ":/s3"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/s3/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - - avmService.copy(s4.get(storeName), storeName + ":/www", storeName + ":/", "s4"); - desc = avmService.lookup(-1, storeName + ":/s4"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/s4/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - - avmService.copy(s5.get(storeName), storeName + ":/www", storeName + ":/", "s5"); - desc = avmService.lookup(-1, storeName + ":/s5"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 4); - desc = avmService.lookup(-1, storeName + ":/s5/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 4); - - avmService.copy(s6.get(storeName), storeName + ":/www", storeName + ":/", "s6"); - desc = avmService.lookup(-1, storeName + ":/s6"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - desc = avmService.lookup(-1, storeName + ":/s6/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "monkey", "ContentReviewer", true); - - avmService.copy(s6.get(storeName), storeName + ":/www", storeName + ":/", "s6"); - desc = avmService.lookup(-1, storeName + ":/s6"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - desc = avmService.lookup(-1, storeName + ":/s6/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "monkey", "ContentReviewer", true); - - avmService.copy(s6.get(storeName), storeName + ":/www", storeName + ":/", "s6"); - desc = avmService.lookup(-1, storeName + ":/s6"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - desc = avmService.lookup(-1, storeName + ":/s6/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - - } - finally - { - removeStore(storeName); - } - } - - public void testBranches() - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - try - { - avmService.createStore(storeName); - avmService.createDirectory(storeName + ":/", "www"); - avmService.createDirectory(storeName + ":/www", "avm-web-apps"); - avmService.createDirectory(storeName + ":/www/avm-web-apps", "ROOT"); - AVMNodeDescriptor desc = avmService.lookup(-1, storeName + ":/www"); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - Map s1 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - permissionService.setPermission(nodeRef, PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true); - Map s2 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - permissionService.setPermission(nodeRef, "manager", "ContentManager", true); - Map s3 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - permissionService.setPermission(nodeRef, "publisher", "ContentPublisher", true); - Map s4 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - permissionService.setPermission(nodeRef, "contributor", "ContentContributor", true); - Map s5 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - permissionService.setPermission(nodeRef, "reviewer", "ContentReviewer", true); - Map s6 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - - avmService.createBranch(-1, storeName + ":/www", storeName + ":/", "head"); - desc = avmService.lookup(-1, storeName + ":/head"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - desc = avmService.lookup(-1, storeName + ":/head/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - - avmService.createBranch(s1.get(storeName), storeName + ":/www", storeName + ":/", "s1"); - desc = avmService.lookup(-1, storeName + ":/s1"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 0); - desc = avmService.lookup(-1, storeName + ":/s1/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 0); - - avmService.createBranch(s2.get(storeName), storeName + ":/www", storeName + ":/", "s2"); - desc = avmService.lookup(-1, storeName + ":/s2"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - desc = avmService.lookup(-1, storeName + ":/s2/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.createBranch(s3.get(storeName), storeName + ":/www", storeName + ":/", "s3"); - desc = avmService.lookup(-1, storeName + ":/s3"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/s3/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - - avmService.createBranch(s4.get(storeName), storeName + ":/www", storeName + ":/", "s4"); - desc = avmService.lookup(-1, storeName + ":/s4"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/s4/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - - avmService.createBranch(s5.get(storeName), storeName + ":/www", storeName + ":/", "s5"); - desc = avmService.lookup(-1, storeName + ":/s5"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 4); - desc = avmService.lookup(-1, storeName + ":/s5/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 4); - - avmService.createBranch(s6.get(storeName), storeName + ":/www", storeName + ":/", "s6"); - desc = avmService.lookup(-1, storeName + ":/s6"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - desc = avmService.lookup(-1, storeName + ":/s6/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "monkey", "ContentReviewer", true); - - avmService.createBranch(s6.get(storeName), storeName + ":/www", storeName + ":/", "s6"); - desc = avmService.lookup(-1, storeName + ":/s6"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - desc = avmService.lookup(-1, storeName + ":/s6/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "monkey", "ContentReviewer", true); - - avmService.createBranch(s6.get(storeName), storeName + ":/www", storeName + ":/", "s6"); - desc = avmService.lookup(-1, storeName + ":/s6"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - desc = avmService.lookup(-1, storeName + ":/s6/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - - } - finally - { - removeStore(storeName); - } - } - - @SuppressWarnings("unused") - public void testWCMStyleTemplateAsBranch() - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - String branchName = storeName + "-Branch"; - try - { - avmService.createStore(storeName); - avmService.createDirectory(storeName + ":/", "www"); - avmService.createDirectory(storeName + ":/www", "avm-web-apps"); - avmService.createDirectory(storeName + ":/www/avm-web-apps", "ROOT"); - AVMNodeDescriptor desc = avmService.lookup(-1, storeName + ":/www"); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - Map s1 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - permissionService.setPermission(nodeRef, PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true); - Map s2 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - permissionService.setPermission(nodeRef, "manager", "ContentManager", true); - Map s3 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - permissionService.setPermission(nodeRef, "publisher", "ContentPublisher", true); - Map s4 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - permissionService.setPermission(nodeRef, "contributor", "ContentContributor", true); - Map s5 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - permissionService.setPermission(nodeRef, "reviewer", "ContentReviewer", true); - Map s6 = avmService.createSnapshot(storeName, null, null); - desc = avmService.lookup(-1, storeName + ":/www"); - - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - - avmService.createStore(branchName); - avmService.createBranch(-1, storeName + ":/www", branchName + ":/", "www"); - avmService.createSnapshot(branchName, null, null); - - - desc = avmService.lookup(-1, branchName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - desc = avmService.lookup(-1, branchName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - - - // Check the branch remains unchanged when the template is changed - - debugPermissions(storeName + ":/www"); - debugPermissions(branchName + ":/www"); - debugPermissions(branchName + ":/www/avm-web-apps"); - - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "template", "ContentReviewer", true); - - desc = avmService.lookup(-1, branchName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - desc = avmService.lookup(-1, branchName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - - debugPermissions(storeName + ":/www"); - debugPermissions(branchName + ":/www"); - debugPermissions(branchName + ":/www/avm-web-apps"); - - desc = avmService.lookup(-1, branchName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "new", "ContentReviewer", true); - - desc = avmService.lookup(-1, branchName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - desc = avmService.lookup(-1, branchName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - debugPermissions(storeName + ":/www"); - debugPermissions(branchName + ":/www"); - debugPermissions(branchName + ":/www/avm-web-apps"); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - - - } - finally - { - removeStore(storeName); - removeStore(branchName); - } - } - - /* - * Test the basic permission model where - */ - public void testSimpleExternalLayer() throws Exception - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - try - { - avmService.createStore(storeName); - avmService.createDirectory(storeName + ":/", "www"); - avmService.createDirectory(storeName + ":/www", "avm-web-apps"); - avmService.createDirectory(storeName + ":/www/avm-web-apps", "ROOT"); - AVMNodeDescriptor desc = avmService.lookup(-1, storeName + ":/www"); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - Long definingId = avmACLDAO.getAccessControlList(nodeRef).getId(); - String definingGuid = aclDaoComponent.getAccessControlListProperties(definingId).getAclId(); - - permissionService.setPermission(nodeRef, "manager", "ContentManager", true); - permissionService.setPermission(nodeRef, "publisher", "ContentPublisher", true); - permissionService.setPermission(nodeRef, "contributor", "ContentContributor", true); - permissionService.setPermission(nodeRef, "reviewer", "ContentReviewer", true); - - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(definingId, avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(aclDaoComponent.getInheritedAccessControlList(definingId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(aclDaoComponent.getInheritedAccessControlList(definingId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - avmService.createDirectory(storeName + ":/www/avm-web-apps/ROOT", "directory"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/directory"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(aclDaoComponent.getInheritedAccessControlList(definingId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - avmService.createFile(storeName + ":/www/avm-web-apps/ROOT", "file").close(); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/file"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(aclDaoComponent.getInheritedAccessControlList(definingId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - // simple layer - - avmService.createSnapshot(storeName, null, null); - avmService.createStore(storeName + "-a-"); - avmService.createLayeredDirectory(storeName + ":/www", storeName + "-a-:/", "www"); - avmService.createSnapshot(storeName, null, null); - avmService.createSnapshot(storeName + "-a-", null, null); - - desc = avmService.lookup(-1, storeName + "-a-:/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - - desc = avmService.lookup(-1, storeName + "-a-:/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(aclDaoComponent.getInheritedAccessControlList(definingId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + "-a-:/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(aclDaoComponent.getInheritedAccessControlList(definingId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + "-a-:/www/avm-web-apps/ROOT/directory"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(aclDaoComponent.getInheritedAccessControlList(definingId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + "-a-:/www/avm-web-apps/ROOT/file"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(aclDaoComponent.getInheritedAccessControlList(definingId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - // Add permissions beneath and check they appear up - // Check version has not moved and the id is the same as they are in the same TX and will not have COWed - - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - - // debugPermissionsut.println("BEFORE:"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT/file"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT/directory"); - // debugPermissions(storeName + "-a-:/"); - // debugPermissions(storeName + "-a-:/www"); - // debugPermissions(storeName + "-a-:/www/avm-web-apps"); - // debugPermissions(storeName + "-a-:/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + "-a-:/www/avm-web-apps/ROOT/file"); - // debugPermissions(storeName + "-a-:/www/avm-web-apps/ROOT/directory"); - - testTX.commit(); - testTX = transactionService.getUserTransaction(); - testTX.begin(); - - permissionService.setPermission(nodeRef, "andy", "ContentReviewer", true); - - // System.out.println("AFTER:"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT/file"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT/directory"); - // debugPermissions(storeName + "-a-:/"); - // debugPermissions(storeName + "-a-:/www"); - // debugPermissions(storeName + "-a-:/www/avm-web-apps"); - // debugPermissions(storeName + "-a-:/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + "-a-:/www/avm-web-apps/ROOT/file"); - // debugPermissions(storeName + "-a-:/www/avm-web-apps/ROOT/directory"); - - Long newId = avmACLDAO.getAccessControlList(nodeRef).getId(); - assertFalse(newId.equals(definingId)); - assertEquals(definingGuid, aclDaoComponent.getAccessControlListProperties(newId).getAclId()); - assertEquals(aclDaoComponent.getAccessControlListProperties(definingId).getAclVersion().longValue() + 1, aclDaoComponent.getAccessControlListProperties(newId) - .getAclVersion().longValue()); - - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(newId, avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/directory"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/file"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + "-a-:/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - - desc = avmService.lookup(-1, storeName + "-a-:/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + "-a-:/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + "-a-:/www/avm-web-apps/ROOT/directory"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + "-a-:/www/avm-web-apps/ROOT/file"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - // Add permissions to the layer - - desc = avmService.lookup(-1, storeName + "-a-:/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "bob", "ContentReviewer", true); - - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(newId, avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/directory"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/file"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + "-a-:/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 7); - newId = avmACLDAO.getAccessControlList(nodeRef).getId(); - - desc = avmService.lookup(-1, storeName + "-a-:/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 7); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + "-a-:/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 7); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + "-a-:/www/avm-web-apps/ROOT/directory"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 7); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + "-a-:/www/avm-web-apps/ROOT/file"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 7); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - } - finally - { - removeStore(storeName); - removeStore(storeName + "-a-"); - - } - } - - // Comment-out for now due to intermittent failure: expected:<6> but was:<7> - public void x_testSimpleInternalLayer() throws IOException - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - try - { - avmService.createStore(storeName); - avmService.createDirectory(storeName + ":/", "www"); - avmService.createDirectory(storeName + ":/www", "avm-web-apps"); - avmService.createDirectory(storeName + ":/www/avm-web-apps", "ROOT"); - AVMNodeDescriptor desc = avmService.lookup(-1, storeName + ":/www"); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - Long definingId = avmACLDAO.getAccessControlList(nodeRef).getId(); - String definingGuid = aclDaoComponent.getAccessControlListProperties(definingId).getAclId(); - - permissionService.setPermission(nodeRef, "manager", "ContentManager", true); - permissionService.setPermission(nodeRef, "publisher", "ContentPublisher", true); - permissionService.setPermission(nodeRef, "contributor", "ContentContributor", true); - permissionService.setPermission(nodeRef, "reviewer", "ContentReviewer", true); - - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(definingId, avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(aclDaoComponent.getInheritedAccessControlList(definingId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(aclDaoComponent.getInheritedAccessControlList(definingId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - avmService.createDirectory(storeName + ":/www/avm-web-apps/ROOT", "directory"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/directory"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(aclDaoComponent.getInheritedAccessControlList(definingId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - avmService.createFile(storeName + ":/www/avm-web-apps/ROOT", "file").close(); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/file"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(aclDaoComponent.getInheritedAccessControlList(definingId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - // simple layer - - avmService.createSnapshot(storeName, null, null); - - avmService.createLayeredDirectory(storeName + ":/www", storeName + ":/", "layer"); - avmService.createSnapshot(storeName, null, null); - avmService.createSnapshot(storeName, null, null); - - desc = avmService.lookup(-1, storeName + ":/layer"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(aclDaoComponent.getInheritedAccessControlList(definingId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(aclDaoComponent.getInheritedAccessControlList(definingId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/ROOT/directory"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(aclDaoComponent.getInheritedAccessControlList(definingId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/ROOT/file"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - assertEquals(aclDaoComponent.getInheritedAccessControlList(definingId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - // Add permissions beneath and check they appear up - // Check version has not moved and the id is the same as they are in the same TX and will not have COWed - - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - - // System.out.println("BEFORE:"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT/file"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT/directory"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/layer"); - // debugPermissions(storeName + ":/layer/avm-web-apps"); - // debugPermissions(storeName + ":/layer/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/layer/avm-web-apps/ROOT/file"); - // debugPermissions(storeName + ":/layer/avm-web-apps/ROOT/directory"); - - permissionService.setPermission(nodeRef, "andy", "ContentReviewer", true); - - // System.out.println("AFTER:"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT/file"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT/directory"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/layer"); - // debugPermissions(storeName + ":/layer/avm-web-apps"); - // debugPermissions(storeName + ":/layer/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/layer/avm-web-apps/ROOT/file"); - // debugPermissions(storeName + ":/layer/avm-web-apps/ROOT/directory"); - - Long newId = avmACLDAO.getAccessControlList(nodeRef).getId(); - assertFalse(newId.equals(definingId)); - assertEquals(definingGuid, aclDaoComponent.getAccessControlListProperties(newId).getAclId()); - assertEquals(aclDaoComponent.getAccessControlListProperties(definingId).getAclVersion().longValue() + 1, aclDaoComponent.getAccessControlListProperties(newId) - .getAclVersion().longValue()); - - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(newId, avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/directory"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/file"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/layer"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/ROOT/directory"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/ROOT/file"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - // Add permissions to the layer - - desc = avmService.lookup(-1, storeName + ":/layer"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "bob", "ContentReviewer", true); - - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(newId, avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/directory"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/file"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 6); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/layer"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 7); - newId = avmACLDAO.getAccessControlList(nodeRef).getId(); - - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 7); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 7); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/ROOT/directory"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 7); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - desc = avmService.lookup(-1, storeName + ":/layer/avm-web-apps/ROOT/file"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 7); - assertEquals(aclDaoComponent.getInheritedAccessControlList(newId), avmACLDAO.getAccessControlList(nodeRef).getId()); - - } - finally - { - removeStore(storeName); - } - } - - private void debugPermissions(String path) - { - AVMNodeDescriptor desc = avmService.lookup(-1, path); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - Acl acl = avmACLDAO.getAccessControlList(nodeRef); - System.out.println(path); - System.out.println("\t => Ind=" - + desc.getIndirection() + ",Deleted=" + desc.isDeleted() + ",LD=" + desc.isLayeredDirectory() + ",LF=" + desc.isLayeredFile() + ",PD=" + desc.isPlainDirectory() - + ",PF=" + desc.isPlainFile() + ",Primary=" + desc.isPrimary()); - System.out.println("\t => " + acl); - } - - public void testMutationsWithSimpleLayers() throws IOException - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - try - { - avmService.createStore(storeName); - avmService.createDirectory(storeName + ":/", "www"); - avmService.createDirectory(storeName + ":/www", "avm-web-apps"); - avmService.createDirectory(storeName + ":/www/avm-web-apps", "ROOT"); - - AVMNodeDescriptor desc = avmService.lookup(-1, storeName + ":/www"); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - - // debugPermissions(storeName + ":/"); - // /debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - permissionService.setPermission(nodeRef, PermissionService.ALL_AUTHORITIES, PermissionService.ALL_PERMISSIONS, true); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - permissionService.setPermission(nodeRef, "manager", "ContentManager", true); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - permissionService.setPermission(nodeRef, "publisher", "ContentPublisher", true); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - permissionService.setPermission(nodeRef, "contributor", "ContentContributor", true); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - permissionService.setPermission(nodeRef, "reviewer", "ContentReviewer", true); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - - avmService.createSnapshot(storeName, null, null); - - // System.out.println("Snapshot"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - - avmService.createStore(storeName + "-a-"); - avmService.createLayeredDirectory(storeName + ":/www", storeName + "-a-:/", "www"); - - // System.out.println("Layered"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - - avmService.createDirectory(storeName + ":/www/avm-web-apps/ROOT", "directory"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/directory"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - // System.out.println("New Dir"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT/directory"); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - - avmService.createDirectory(storeName + "-a-:/www/avm-web-apps/ROOT", "directory2"); - desc = avmService.lookup(-1, storeName + "-a-:/www/avm-web-apps/ROOT/directory2"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 5); - - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - // System.out.println("Before Andy"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT/directory"); - permissionService.setPermission(nodeRef, "andy", "ContentReviewer", true); - // System.out.println("Before Lemur"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT/directory"); - permissionService.setPermission(nodeRef, "lemur", "ContentReviewer", true); - // System.out.println("After"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - - desc = avmService.lookup(-1, storeName + "-a-:/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "bob", "ContentReviewer", true); - permissionService.setPermission(nodeRef, "jim", "ContentReviewer", true); - permissionService.setPermission(nodeRef, "dave", "ContentReviewer", true); - - avmService.createFile(storeName + ":/www/avm-web-apps/ROOT", "file").close(); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/file"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - // TODO: Check this - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 7); - - avmService.createFile(storeName + "-a-:/www/avm-web-apps/ROOT", "file2").close(); - desc = avmService.lookup(-1, storeName + "-a-:/www/avm-web-apps/ROOT/file2"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 10); - - } - finally - { - removeStore(storeName); - removeStore(storeName + "-a-"); - } - } - - public void testRenamePlainDirectory() - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - try - { - AVMNodeDescriptor desc; - NodeRef nodeRef; - - avmService.createStore(storeName); - - avmService.createDirectory(storeName + ":/", "www"); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "one", PermissionService.ALL_PERMISSIONS, true); - // System.out.println("After One"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.createDirectory(storeName + ":/www", "avm-web-apps"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "two", PermissionService.ALL_PERMISSIONS, true); - // System.out.println("After Two"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.createDirectory(storeName + ":/www/avm-web-apps", "ROOT"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "three", PermissionService.ALL_PERMISSIONS, true); - // System.out.println("After Three"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.createDirectory(storeName + ":/www/avm-web-apps/ROOT", "test"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/test"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "four", PermissionService.ALL_PERMISSIONS, true); - // System.out.println("After Four"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT/test"); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 4); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.rename(storeName + ":/www/avm-web-apps/ROOT", "test", storeName + ":/www/avm-web-apps/ROOT", "lemon"); - // System.out.println("After Rename to lemon"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT/lemon"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/lemon"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 4); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.rename(storeName + ":/www/avm-web-apps/ROOT", "lemon", storeName + ":/www/avm-web-apps", "orange"); - // System.out.println("After move up and rename 1"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/www/avm-web-apps/orange"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/orange"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - - avmService.rename(storeName + ":/www/avm-web-apps", "orange", storeName + ":/www", "blue"); - // System.out.println("After move up and rename 2"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/www/blue"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/orange"); - desc = avmService.lookup(-1, storeName + ":/www/blue"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - - } - finally - { - removeStore(storeName); - } - } - - public void testRenamePlainFile() throws IOException - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - try - { - AVMNodeDescriptor desc; - NodeRef nodeRef; - - avmService.createStore(storeName); - - avmService.createDirectory(storeName + ":/", "www"); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "one", PermissionService.ALL_PERMISSIONS, true); - // System.out.println("After One"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.createDirectory(storeName + ":/www", "avm-web-apps"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "two", PermissionService.ALL_PERMISSIONS, true); - // System.out.println("After Two"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.createDirectory(storeName + ":/www/avm-web-apps", "ROOT"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "three", PermissionService.ALL_PERMISSIONS, true); - // System.out.println("After Three"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.createFile(storeName + ":/www/avm-web-apps/ROOT", "test").close(); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/test"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "four", PermissionService.ALL_PERMISSIONS, true); - // System.out.println("After Four"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT/test"); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 4); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.rename(storeName + ":/www/avm-web-apps/ROOT", "test", storeName + ":/www/avm-web-apps/ROOT", "lemon"); - // System.out.println("After Rename to lemon"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT/lemon"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/lemon"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 4); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.rename(storeName + ":/www/avm-web-apps/ROOT", "lemon", storeName + ":/www/avm-web-apps", "orange"); - // System.out.println("After move up and rename 1"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/www/avm-web-apps/orange"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/orange"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - - avmService.rename(storeName + ":/www/avm-web-apps", "orange", storeName + ":/www", "blue"); - // System.out.println("After move up and rename 2"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/www/blue"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/orange"); - desc = avmService.lookup(-1, storeName + ":/www/blue"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - } - finally - { - removeStore(storeName); - } - } - - public void testRenamePlainDirectoryIntoLayer() - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - try - { - AVMNodeDescriptor desc; - NodeRef nodeRef; - - avmService.createStore(storeName); - - avmService.createDirectory(storeName + ":/", "www"); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "one", PermissionService.ALL_PERMISSIONS, true); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.createDirectory(storeName + ":/www", "avm-web-apps"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "two", PermissionService.ALL_PERMISSIONS, true); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.createDirectory(storeName + ":/www/avm-web-apps", "ROOT"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "three", PermissionService.ALL_PERMISSIONS, true); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.createDirectory(storeName + ":/www/avm-web-apps/ROOT", "test"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/test"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "four", PermissionService.ALL_PERMISSIONS, true); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 4); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.createSnapshot(storeName, null, null); - avmService.createStore(storeName + "-a-"); - avmService.createLayeredDirectory(storeName + ":/www", storeName + "-a-:/", "www"); - - avmService.rename(storeName + "-a-:/www/avm-web-apps/ROOT", "test", storeName + "-a-:/www/avm-web-apps/ROOT", "banana"); - // System.out.println("In Source"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT/test"); - // System.out.println("In Layer"); - // debugPermissions(storeName + "-a-:/"); - // debugPermissions(storeName + "-a-:/www"); - // debugPermissions(storeName + "-a-:/www/avm-web-apps"); - // debugPermissions(storeName + "-a-:/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + "-a-:/www/avm-web-apps/ROOT/banana"); - } - finally - { - removeStore(storeName); - removeStore(storeName + "-a-"); - } - } - - public void testRenamePlainFileIntoLayer() throws IOException - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - try - { - AVMNodeDescriptor desc; - NodeRef nodeRef; - - avmService.createStore(storeName); - - avmService.createDirectory(storeName + ":/", "www"); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "one", PermissionService.ALL_PERMISSIONS, true); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.createDirectory(storeName + ":/www", "avm-web-apps"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "two", PermissionService.ALL_PERMISSIONS, true); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.createDirectory(storeName + ":/www/avm-web-apps", "ROOT"); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "three", PermissionService.ALL_PERMISSIONS, true); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.createFile(storeName + ":/www/avm-web-apps/ROOT", "test").close(); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT/test"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - permissionService.setPermission(nodeRef, "four", PermissionService.ALL_PERMISSIONS, true); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 4); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps/ROOT"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 3); - desc = avmService.lookup(-1, storeName + ":/www/avm-web-apps"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 2); - desc = avmService.lookup(-1, storeName + ":/www"); - nodeRef = AVMNodeConverter.ToNodeRef(-1, desc.getPath()); - assertEquals(permissionService.getSetPermissions(nodeRef).getPermissionEntries().size(), 1); - - avmService.createSnapshot(storeName, null, null); - avmService.createStore(storeName + "-a-"); - avmService.createLayeredDirectory(storeName + ":/www", storeName + "-a-:/", "www"); - - avmService.rename(storeName + "-a-:/www/avm-web-apps/ROOT", "test", storeName + "-a-:/www/avm-web-apps/ROOT", "banana"); - // System.out.println("File In Source"); - // debugPermissions(storeName + ":/"); - // debugPermissions(storeName + ":/www"); - // debugPermissions(storeName + ":/www/avm-web-apps"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + ":/www/avm-web-apps/ROOT/test"); - // System.out.println("File In Layer"); - // debugPermissions(storeName + "-a-:/"); - // debugPermissions(storeName + "-a-:/www"); - // debugPermissions(storeName + "-a-:/www/avm-web-apps"); - // debugPermissions(storeName + "-a-:/www/avm-web-apps/ROOT"); - // debugPermissions(storeName + "-a-:/www/avm-web-apps/ROOT/banana"); - } - finally - { - removeStore(storeName); - removeStore(storeName + "-a-"); - } - } - - /** - * Helper to write a recursive listing of latest version of an AVMStore. - * @param repoName The name of the AVMStore. - */ - protected void recursiveList(String store) - { - String list = recursiveList(store, -1, true); - System.out.println(store+":"); - System.out.println(list); - } - - /** - * Helper to write a recursive listing of an AVMStore at a given version. - * @param repoName The name of the AVMStore. - * @param version The version to look under. - */ - protected String recursiveList(String repoName, int version, boolean followLinks) - { - return recursiveList(repoName + ":/", version, 0, followLinks); - } - - /** - * Recursive list the given path. - * @param path The path. - * @param version The version. - * @param indent The current indent level. - */ - protected String recursiveList(String path, int version, int indent, boolean followLinks) - { - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < indent; i++) - { - builder.append(' '); - } - builder.append(path.substring(path.lastIndexOf('/') + 1)); - builder.append(' '); - AVMNodeDescriptor desc = avmService.lookup(version, path, true); - builder.append(desc.toString()); - builder.append(" - "); - - AVMNode layeredNode = avmNodeDAO.getByID(desc.getId()); - Acl acl = layeredNode.getAcl(); - builder.append(acl); - - builder.append('\n'); - if (desc.getType() == AVMNodeType.PLAIN_DIRECTORY || - (desc.getType() == AVMNodeType.LAYERED_DIRECTORY && followLinks)) - { - String basename = path.endsWith("/") ? path : path + "/"; - Map listing = avmService.getDirectoryListing(version, path); - for (String name : listing.keySet()) - { - builder.append(recursiveList(basename + name, version, indent + 2, followLinks)); - } - } - return builder.toString(); - } - - - private static final String FILE_NAME = "fileForExport"; - private static final String ROOT = "ROOT"; - - private void createStagingWithSnapshots(String storeName) throws IOException - { - removeStore(storeName); - - avmService.createStore(storeName); - assertNotNull(avmService.getStore(storeName)); - - avmService.createDirectory(storeName + ":/", JNDIConstants.DIR_DEFAULT_WWW); - avmService.createSnapshot(storeName, "first", "first"); - assertNotNull(avmService.lookup(-1, storeName + ":/" + JNDIConstants.DIR_DEFAULT_WWW)); - avmService.createDirectory(storeName + ":/" + JNDIConstants.DIR_DEFAULT_WWW, JNDIConstants.DIR_DEFAULT_APPBASE); - avmService.createSnapshot(storeName, "second", "second"); - assertNotNull(avmService.lookup(-1, storeName + ":/" + JNDIConstants.DIR_DEFAULT_WWW + "/" + JNDIConstants.DIR_DEFAULT_APPBASE)); - avmService.createDirectory(storeName + ":/" + JNDIConstants.DIR_DEFAULT_WWW + "/" + JNDIConstants.DIR_DEFAULT_APPBASE, ROOT); - avmService.createSnapshot(storeName, "third", "third"); - assertNotNull(avmService.lookup(-1, storeName + ":/" + JNDIConstants.DIR_DEFAULT_WWW + "/" + JNDIConstants.DIR_DEFAULT_APPBASE + "/" + ROOT)); - avmService.createFile(storeName + ":/" + JNDIConstants.DIR_DEFAULT_WWW + "/" + JNDIConstants.DIR_DEFAULT_APPBASE + "/" + ROOT, FILE_NAME).close(); - avmService.createSnapshot(storeName, "fourth", "fourth"); - assertNotNull(avmService.lookup(-1, storeName + ":/" + JNDIConstants.DIR_DEFAULT_WWW + "/" + JNDIConstants.DIR_DEFAULT_APPBASE + "/" + ROOT + "/" + FILE_NAME)); - - } - - private void removeStore(String storeName) - { - if (avmService.getStore(storeName) != null) - { - avmService.purgeStore(storeName); - } - assertNull(avmService.getStore(storeName)); - } - - public void testSetInheritParentPermissions() throws Exception - { - runAs(AuthenticationUtil.getAdminUserName()); - String storeName = "PermissionsTest-" + getName() + "-" + (new Date().getTime()); - try - { - createStagingWithSnapshots(storeName); - - AVMNodeDescriptor nodeDescriptor = avmService.lookup(-1, storeName + ":/" + JNDIConstants.DIR_DEFAULT_WWW + "/" + JNDIConstants.DIR_DEFAULT_APPBASE + "/" + ROOT + "/" - + FILE_NAME); - assertNotNull(nodeDescriptor); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, nodeDescriptor.getPath()); - assertNotNull(nodeRef); - - permissionService.setInheritParentPermissions(nodeRef, false); - assertFalse(permissionService.getInheritParentPermissions(nodeRef)); - permissionService.setInheritParentPermissions(nodeRef, true); - assertTrue(permissionService.getInheritParentPermissions(nodeRef)); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - finally - { - removeStore(storeName); - } - } -} diff --git a/source/test-java/org/alfresco/repo/avm/AVMServiceRemoteSystemTest.java b/source/test-java/org/alfresco/repo/avm/AVMServiceRemoteSystemTest.java deleted file mode 100644 index 48f281b2ce..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMServiceRemoteSystemTest.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . */ - -package org.alfresco.repo.avm; - -import org.alfresco.repo.remote.ClientTicketHolder; -import org.alfresco.service.cmr.avmsync.AVMSyncService; -import org.alfresco.service.cmr.remote.AVMRemote; -import org.alfresco.service.cmr.security.AuthenticationService; -import org.alfresco.test_category.LegacyCategory; -import org.alfresco.util.NameMatcher; -import org.junit.experimental.categories.Category; -import org.springframework.context.support.FileSystemXmlApplicationContext; - -/** - * Remote system tests of AVM (AVMSyncService & AVMService) - requires running repo - */ -@Category(LegacyCategory.class) -public class AVMServiceRemoteSystemTest extends AVMServiceLocalTest -{ - private final static String ADMIN_UN = "admin"; - private final static String ADMIN_PW = "admin"; - - @Override - protected void setUp() throws Exception - { - if (fContext == null) - { - // remote (non-embedded) test setup - fContext = new FileSystemXmlApplicationContext("config/alfresco/remote-avm-test-context.xml"); - fService = (AVMRemote)fContext.getBean("avmRemote"); - fSyncService = (AVMSyncService)fContext.getBean("avmSyncService"); - excluder = (NameMatcher) fContext.getBean("globalPathExcluder"); - - AuthenticationService authService = (AuthenticationService)fContext.getBean("authenticationService"); - authService.authenticate(ADMIN_UN, ADMIN_PW.toCharArray()); - String ticket = authService.getCurrentTicket(); - ((ClientTicketHolder)fContext.getBean("clientTicketHolder")).setTicket(ticket); - } - - super.setUp(); - } -} diff --git a/source/test-java/org/alfresco/repo/avm/AVMServiceTest.java b/source/test-java/org/alfresco/repo/avm/AVMServiceTest.java deleted file mode 100644 index 5591503e29..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMServiceTest.java +++ /dev/null @@ -1,6772 +0,0 @@ -/* - * Copyright (C) 2005-2012 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ - -package org.alfresco.repo.avm; - -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.PrintStream; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; - -import org.alfresco.config.JNDIConstants; -import org.alfresco.model.ContentModel; -import org.alfresco.model.WCMModel; -import org.alfresco.repo.action.ActionImpl; -import org.alfresco.repo.avm.actions.AVMRevertListAction; -import org.alfresco.repo.avm.actions.AVMRevertStoreAction; -import org.alfresco.repo.avm.actions.AVMRevertToVersionAction; -import org.alfresco.repo.avm.actions.AVMUndoSandboxListAction; -import org.alfresco.repo.avm.actions.SimpleAVMPromoteAction; -import org.alfresco.repo.avm.actions.SimpleAVMSubmitAction; -import org.alfresco.repo.avm.util.BulkLoader; -import org.alfresco.repo.content.MimetypeMap; -import org.alfresco.repo.domain.PropertyValue; -import org.alfresco.repo.search.impl.lucene.AbstractLuceneQueryParser; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.transaction.RetryingTransactionHelper; -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; -import org.alfresco.service.cmr.avm.AVMBadArgumentException; -import org.alfresco.service.cmr.avm.AVMCycleException; -import org.alfresco.service.cmr.avm.AVMException; -import org.alfresco.service.cmr.avm.AVMExistsException; -import org.alfresco.service.cmr.avm.AVMNodeDescriptor; -import org.alfresco.service.cmr.avm.AVMNotFoundException; -import org.alfresco.service.cmr.avm.AVMService; -import org.alfresco.service.cmr.avm.AVMStoreDescriptor; -import org.alfresco.service.cmr.avm.LayeringDescriptor; -import org.alfresco.service.cmr.avm.VersionDescriptor; -import org.alfresco.service.cmr.avmsync.AVMDifference; -import org.alfresco.service.cmr.dictionary.DataTypeDefinition; -import org.alfresco.service.cmr.model.FileFolderService; -import org.alfresco.service.cmr.remote.RepoRemote; -import org.alfresco.service.cmr.repository.ContentData; -import org.alfresco.service.cmr.repository.ContentWriter; -import org.alfresco.service.cmr.repository.CrossRepositoryCopyService; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.cmr.repository.StoreRef; -import org.alfresco.service.cmr.search.ResultSet; -import org.alfresco.service.cmr.search.ResultSetRow; -import org.alfresco.service.cmr.search.SearchService; -import org.alfresco.service.cmr.security.AccessPermission; -import org.alfresco.service.cmr.security.PermissionService; -import org.alfresco.service.namespace.NamespaceService; -import org.alfresco.service.namespace.QName; -import org.alfresco.service.transaction.TransactionService; -import org.alfresco.test_category.LegacyCategory; -import org.alfresco.util.GUID; -import org.alfresco.util.Pair; -import org.alfresco.util.SearchLanguageConversion; -import org.alfresco.wcm.sandbox.SandboxConstants; -import org.junit.experimental.categories.Category; - -/** - * Big test of AVM behavior. - * - * @author britt - */ -@Category(LegacyCategory.class) -public class AVMServiceTest extends AVMServiceTestBase -{ - public void testSetup() throws Exception - { - super.testSetup(); - } - - public void testSetupAndQueriesAgainstBasicTree() throws Exception - { - setupBasicTree(); - runQueriesAgainstBasicTree("main"); - } - - public void testDiffOrder() throws IOException - { - try - { - fService.createStore("Bottom"); - fService.createStore("Top"); - - fService.createDirectory("Bottom:/", "www"); - fService.createLayeredDirectory("Bottom:/www", "Top:/", "www"); - - fService.createFile("Bottom:/www", "newInBottom").close(); - fService.createSnapshot("Bottom", null, null); - fService.createFile("Top:/www", "newInTop").close(); - fService.createSnapshot("Top", null, null); - fService.createFile("Bottom:/www", "file").close(); - fService.createSnapshot("Bottom", null, null); - fService.forceCopy("Top:/www/file"); - fService.createSnapshot("Top", null, null); - fService.forceCopy("Bottom:/www/file"); - fService.createSnapshot("Bottom", null, null); - - - List diffs = fSyncService.compare(-1, "Top:/", -1, "Bottom:/", null); - assertEquals( - 2, diffs.size()); - Collections.sort(diffs); - AVMDifference last = null; - for(AVMDifference current : diffs) - { - if(last != null) - { - assert(last.getOrderValue() < current.getOrderValue()); - } - last = current; - } - - diffs.add(new AVMDifference(1, null, -1, null, 0)); - diffs.add(new AVMDifference(1, null, -1, null, 1)); - diffs.add(new AVMDifference(1, null, -1, null, 2)); - diffs.add(new AVMDifference(1, null, -1, null, 3)); - diffs.add(new AVMDifference(1, null, -1, null, 4)); - diffs.add(new AVMDifference(1, null, -1, null, 5)); - diffs.add(new AVMDifference(1, null, -1, null, 6)); - - Collections.sort(diffs); - last = null; - for(AVMDifference current : diffs) - { - if(last != null) - { - assert(last.getOrderValue() < current.getOrderValue()); - } - last = current; - } - } - finally - { - fService.purgeStore("Bottom"); - fService.purgeStore("Top"); - } - - } - - private enum DiffActionEnum - { - CREATION, MODIFICATION, DELETION, DELETION_AND_MODIFICATION - } - - /** - * Test is related to ALF-4098 - * - * @throws Exception - */ - public void testDiffOfNewItems() throws Exception - { - try - { - performeDiffTesting(DiffActionEnum.CREATION); - } - finally - { - fService.purgeStore("testStore"); - fService.purgeStore("submitStore"); - } - } - - /** - * Test is related to ALF-4098 - * - * @throws Exception - */ - public void testDiffOfModifiedItems() throws Exception - { - try - { - performeDiffTesting(DiffActionEnum.MODIFICATION); - } - finally - { - fService.purgeStore("testStore"); - fService.purgeStore("submitStore"); - } - } - - /** - * Test is related to ALF-4098 - * - * @throws Exception - */ - public void testDiffOfDeletedItems() throws Exception - { - try - { - performeDiffTesting(DiffActionEnum.DELETION); - } - finally - { - fService.purgeStore("testStore"); - fService.purgeStore("submitStore"); - } - } - - public void testDiffOfDeletedItemsInModifiedDirectory() throws Exception - { - try - { - performeDiffTesting(DiffActionEnum.DELETION_AND_MODIFICATION); - } - finally - { - fService.purgeStore("testStore"); - fService.purgeStore("submitStore"); - } - } - - private void performeDiffTesting(DiffActionEnum action) throws IOException - { - fService.createStore("testStore"); - fService.createStore("submitStore"); - - fService.createDirectory("submitStore:/", "root"); - fService.createLayeredDirectory("submitStore:/root", "testStore:/", "root"); - fService.createSnapshot("testStore", null, null); - - fService.createDirectory("testStore:/root", "test"); - - for (int i = 0; i < 10; i++) - { - fService.createFile("testStore:/root/test", ("testFileN" + i + ".txt")).close(); - } - - List diffs = fSyncService.compare(-1, "testStore:/root/", -1, "submitStore:/root/", null); - if (DiffActionEnum.CREATION != action) - { - fSyncService.update(diffs, null, true, true, false, true, null, null); - fSyncService.flatten("testStore:/root/", "submitStore:/root/"); - diffs = fSyncService.compare(-1, "testStore:/root/", -1, "submitStore:/root/", null); - } - - List actual = fSyncService.compare(-1, "testStore:/root/", -1, "submitStore:/root/", null, true); - - if (DiffActionEnum.CREATION == action) - { - assertEquals(11, actual.size()); - - assertEquals(1, diffs.size()); - List newDiff = fSyncService.compare(-1, "testStore:/root/", -1, "submitStore:/root/", null, false); - assertEquals(diffs.toString(), newDiff.toString()); - } - else - { - assertEquals(0, actual.size()); - assertEquals(0, diffs.size()); - } - - String parentPath = "testStore:/root/test/"; - if (DiffActionEnum.CREATION == action) - { - fService.createDirectory(parentPath, "inner"); - parentPath += "inner/"; - } - - int start = (DiffActionEnum.DELETION == action) ? (1) : (0); - int incrementingStep = start + 1; - - for (int i = start; i < 10; i += incrementingStep) - { - String name = "testFileN" + i + ".txt"; - String path = parentPath + name; - - switch (action) - { - case CREATION: - { - fService.createFile(parentPath, name).close(); - break; - } - case MODIFICATION: - { - fService.setNodeProperty(path, WCMModel.PROP_REVERTED_ID, new PropertyValue(WCMModel.PROP_REVERTED_ID, null)); - break; - } - default: - { - fService.removeNode(path); - } - } - } - - int actualModificationsCount = (DiffActionEnum.DELETION == action) ? (5) : ((DiffActionEnum.CREATION == action) ? (22) : (10)); - int diffModificationsCount = (DiffActionEnum.DELETION == action) ? (5) : ((DiffActionEnum.CREATION == action) ? (1) : (10)); - - actual = fSyncService.compare(-1, "testStore:/root", -1, "submitStore:/root", null, true); - diffs = fSyncService.compare(-1, "testStore:/root", -1, "submitStore:/root", null); - - assertEquals(actualModificationsCount, actual.size()); - assertEquals(diffModificationsCount, diffs.size()); - - if (DiffActionEnum.CREATION != action) - { - assertDiffsList(AVMDifference.NEWER, diffs); - assertEquals(diffs.toString(), actual.toString()); - } - - if (DiffActionEnum.CREATION != action) - { - if (DiffActionEnum.DELETION == action) - { - fService.removeNode("testStore:/root/test"); - } - else - { - fService.setNodeProperty("testStore:/root/test", WCMModel.PROP_REVERTED_ID, new PropertyValue(WCMModel.PROP_REVERTED_ID, null)); - } - - actual = fSyncService.compare(-1, "testStore:/root/", -1, "submitStore:/root/", null, true); - diffs = fSyncService.compare(-1, "testStore:/root/", -1, "submitStore:/root/", null); - - actualModificationsCount = (DiffActionEnum.DELETION == action) ? (1) : (actualModificationsCount + 1); - - assertEquals(actualModificationsCount, actual.size()); - assertEquals(1, diffs.size()); - - assertDiffsList(AVMDifference.NEWER, actual); - assertDiffsList(AVMDifference.NEWER, diffs); - } - } - - private void assertDiffsList(int expectedCode, List actual) - { - for (AVMDifference diff : actual) - { - assertNotNull(diff); - assertTrue(diff.isValid()); - assertEquals(expectedCode, diff.getDifferenceCode()); - } - } - - public void test_ETWOTWO_570() throws Exception - { - // Check that read-write methods are properly intercepted - RetryingTransactionCallback readOnlyCallback = new RetryingTransactionCallback() - { - public Object execute() throws Throwable - { - String storeName = "StagingArea" + "-" + getName() + "-" + System.currentTimeMillis(); - fService.createStore(storeName); - fService.purgeStore(storeName); - return null; - } - }; - fTransactionService.getRetryingTransactionHelper().doInTransaction(readOnlyCallback, false, true); - } - - public void test_WCM_949() throws Exception - { - try - { - fService.createStore("StagingArea"); - fService.createStore("SandBox"); - - fService.createDirectory("StagingArea:/", "www"); - fService.createLayeredDirectory("StagingArea:/www", "SandBox:/", "www"); - - fService.createDirectory("SandBox:/www", "TestFolder"); - fService.createFile("SandBox:/www/TestFolder", "test1").close(); - - List diffs = fSyncService.compare(-1, "SandBox:/www", -1, "StagingArea:/www", null); - assertEquals(1, diffs.size()); - assertEquals("[SandBox:/www/TestFolder[-1] > StagingArea:/www/TestFolder[-1]]", diffs.toString()); - fSyncService.update(diffs, null, true, true, false, false, "one", "one"); - fSyncService.flatten("SandBox:/www", "StagingArea:/www"); - - StoreRef storeRef = AVMNodeConverter.ToStoreRef("StagingArea"); - SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true); - ResultSet results = searchService.query(storeRef, "lucene", "@cm\\:name:test1"); - assertEquals(1, results.length()); - results.close(); - - fService.removeNode("SandBox:/www/TestFolder"); - - diffs = fSyncService.compare(-1, "SandBox:/www", -1, "StagingArea:/www", null); - assertEquals(1, diffs.size()); - assertEquals("[SandBox:/www/TestFolder[-1] > StagingArea:/www/TestFolder[-1]]", diffs.toString()); - fSyncService.update(diffs, null, true, true, false, false, "one", "one"); - fSyncService.flatten("SandBox:/www", "StagingArea:/www"); - - results = searchService.query(storeRef, "lucene", "@cm\\:name:test1"); - assertEquals(0, results.length()); - results.close(); - - fService.createDirectory("SandBox:/www", "TestFolder"); - fService.createFile("SandBox:/www/TestFolder", "test1").close(); - - diffs = fSyncService.compare(-1, "SandBox:/www", -1, "StagingArea:/www", null); - assertEquals(1, diffs.size()); - assertEquals("[SandBox:/www/TestFolder[-1] > StagingArea:/www/TestFolder[-1]]", diffs.toString()); - fSyncService.update(diffs, null, true, true, false, false, "one", "one"); - fSyncService.flatten("SandBox:/www", "StagingArea:/www"); - - results = searchService.query(storeRef, "lucene", "@cm\\:name:test1"); - assertEquals(1, results.length()); - results.close(); - } - finally - { - fService.purgeStore("StagingArea"); - fService.purgeStore("SandBox"); - } - - } - - public void testPathEncoding() throws Throwable - { - try - { - setupBasicTree(); - fService.createFile("main:/", "2007").close(); - fService.createFile("main:/", "meep meep").close(); - fService.createDirectory("main:/", "my space"); - fService.createFile("main:/my space", "my file").close(); - fService.createDirectory("main:/", "2001"); - fService.createFile("main:/2001", "2002").close(); - fService.createSnapshot("main", null, null); - - StoreRef storeRef = AVMNodeConverter.ToStoreRef("main"); - SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true); - ResultSet results = searchService.query(storeRef, "lucene", "PATH:\"/meep_x0020_meep\""); - assertEquals(1, results.length()); - System.out.println(results.getNodeRef(0)); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/_x0032_007\""); - assertEquals(1, results.length()); - System.out.println(results.getNodeRef(0)); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/my_x0020_space/my_x0020_file\""); - assertEquals(1, results.length()); - System.out.println(results.getNodeRef(0)); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/_x0032_001/_x0032_002\""); - assertEquals(1, results.length()); - System.out.println(results.getNodeRef(0)); - results.close(); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - } - - public void testSpacesInStoreNames() throws Exception - { - try - { - fService.createStore("I have spaces"); - fService.createFile("I have spaces:/", "in my name.txt").close(); - assertNotNull(fService.lookup(-1, "I have spaces:/in my name.txt")); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - finally - { - fService.purgeStore("I have spaces"); - } - } - - public void testHeadPathsInLayers() throws Exception - { - try - { - setupBasicTree(); - fService.createStore("user"); - fService.createLayeredDirectory("main:/a", "user:/", "a"); - fService.createStore("sandbox"); - fService.createLayeredDirectory("main:/a", "sandbox:/", "a"); - fService.createDirectory("user:/a/b", "newdir"); - fService.createFile("user:/a/b/newdir", "bibble.txt").close(); - List diffs = fSyncService.compare(-1, "user:/a", -1, "sandbox:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[user:/a/b/newdir[-1] > sandbox:/a/b/newdir[-1]]", diffs.toString()); - fSyncService.update(diffs, null, false, false, false, false, null, null); - AVMNodeDescriptor dir = fService.lookup(-1, "user:/a/b/newdir"); - List> paths = fService.getHeadPaths(dir); - System.out.println(paths); - AVMNodeDescriptor file = fService.lookup(-1, "user:/a/b/newdir/bibble.txt"); - paths = fService.getHeadPaths(file); - System.out.println(paths); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - finally - { - fService.purgeStore("user"); - fService.purgeStore("sandbox"); - } - } - - - /** - * Test version by date lookup. - */ - public void testVersionByDate() throws Exception - { - try - { - ArrayList times = new ArrayList(); - BulkLoader loader = new BulkLoader(); - loader.setAvmService(fService); - - assertEquals(1, fService.getStoreVersions("main").size()); - - loader.recursiveLoad(getSourceFolder()+"/org/alfresco/repo/avm/actions", "main:/"); - - long time = System.currentTimeMillis(); - times.add(time); - while(! (System.currentTimeMillis() > time)) { } - - assertEquals(1, fService.createSnapshot("main", null, null).get("main").intValue()); - - loader.recursiveLoad(getSourceFolder()+"/org/alfresco/repo/avm/ibatis", "main:/"); - - time = System.currentTimeMillis(); - times.add(time); - while(! (System.currentTimeMillis() > time)) { } - - assertEquals(2, fService.createSnapshot("main", null, null).get("main").intValue()); - - loader.recursiveLoad(getSourceFolder()+"/org/alfresco/repo/avm/locking", "main:/"); - - time = System.currentTimeMillis(); - times.add(time); - while(! (System.currentTimeMillis() > time)) { } - - assertEquals(3, fService.createSnapshot("main", null, null).get("main").intValue()); - - assertEquals(4, fService.getStoreVersions("main").size()); - - assertEquals(1, fService.getStoreVersions("main", null, new Date(times.get(0))).size()); - assertEquals(3, fService.getStoreVersions("main", new Date(times.get(0)), null).size()); - assertEquals(2, fService.getStoreVersions("main", new Date(times.get(1)), new Date(System.currentTimeMillis())).size()); - - // TO - assertEquals(1, fService.getStoreVersionsTo("main", 0).size()); - assertEquals(0, fService.getStoreVersionsTo("main", 0).get(0).getVersionID()); - assertEquals(2, fService.getStoreVersionsTo("main", 1).size()); - assertEquals(0, fService.getStoreVersionsTo("main", 1).get(0).getVersionID()); - assertEquals(1, fService.getStoreVersionsTo("main", 1).get(1).getVersionID()); - assertEquals(3, fService.getStoreVersionsTo("main", 2).size()); - assertEquals(0, fService.getStoreVersionsTo("main", 2).get(0).getVersionID()); - assertEquals(1, fService.getStoreVersionsTo("main", 2).get(1).getVersionID()); - assertEquals(2, fService.getStoreVersionsTo("main", 2).get(2).getVersionID()); - assertEquals(4, fService.getStoreVersionsTo("main", 3).size()); - assertEquals(0, fService.getStoreVersionsTo("main", 3).get(0).getVersionID()); - assertEquals(1, fService.getStoreVersionsTo("main", 3).get(1).getVersionID()); - assertEquals(2, fService.getStoreVersionsTo("main", 3).get(2).getVersionID()); - assertEquals(3, fService.getStoreVersionsTo("main", 3).get(3).getVersionID()); - - // FROM - - assertEquals(4, fService.getStoreVersionsFrom("main", 0).size()); - assertEquals(0, fService.getStoreVersionsFrom("main", 0).get(0).getVersionID()); - assertEquals(1, fService.getStoreVersionsFrom("main", 0).get(1).getVersionID()); - assertEquals(2, fService.getStoreVersionsFrom("main", 0).get(2).getVersionID()); - assertEquals(3, fService.getStoreVersionsFrom("main", 0).get(3).getVersionID()); - assertEquals(3, fService.getStoreVersionsFrom("main", 1).size()); - assertEquals(1, fService.getStoreVersionsFrom("main", 1).get(0).getVersionID()); - assertEquals(2, fService.getStoreVersionsFrom("main", 1).get(1).getVersionID()); - assertEquals(3, fService.getStoreVersionsFrom("main", 1).get(2).getVersionID()); - assertEquals(2, fService.getStoreVersionsFrom("main", 2).size()); - assertEquals(2, fService.getStoreVersionsFrom("main", 2).get(0).getVersionID()); - assertEquals(3, fService.getStoreVersionsFrom("main", 2).get(1).getVersionID()); - assertEquals(1, fService.getStoreVersionsFrom("main", 3).size()); - assertEquals(3, fService.getStoreVersionsFrom("main", 3).get(0).getVersionID()); - assertEquals(0, fService.getStoreVersionsFrom("main", 4).size()); - - // BETWEEN - - assertEquals(1, fService.getStoreVersionsBetween("main", 0, 0).size()); - assertEquals(0, fService.getStoreVersionsBetween("main", 0, 0).get(0).getVersionID()); - assertEquals(1, fService.getStoreVersionsBetween("main", 1, 1).size()); - assertEquals(1, fService.getStoreVersionsBetween("main", 1, 1).get(0).getVersionID()); - assertEquals(1, fService.getStoreVersionsBetween("main", 2, 2).size()); - assertEquals(2, fService.getStoreVersionsBetween("main", 2, 2).get(0).getVersionID()); - assertEquals(1, fService.getStoreVersionsBetween("main", 3, 3).size()); - assertEquals(3, fService.getStoreVersionsBetween("main", 3, 3).get(0).getVersionID()); - assertEquals(0, fService.getStoreVersionsBetween("main", 4, 4).size()); - - - assertEquals(2, fService.getStoreVersionsBetween("main", 1, 2).size()); - assertEquals(1, fService.getStoreVersionsBetween("main", 1, 2).get(0).getVersionID()); - assertEquals(2, fService.getStoreVersionsBetween("main", 1, 2).get(1).getVersionID()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test (node) properties. - */ - public void testProperties() throws Exception - { - try - { - setupBasicTree(); - - StoreRef storeRef = AVMNodeConverter.ToStoreRef("main"); - SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true); - ResultSet results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@{silly.uri}SillyProperty") + ":\"Silly\""); - assertEquals(0, results.length()); - results.close(); - - QName name = QName.createQName("silly.uri", "SillyProperty"); - PropertyValue value = new PropertyValue(DataTypeDefinition.TEXT, "Silly Property Value"); - fService.setNodeProperty("main:/a/b/c/foo", name, value); - fService.createSnapshot("main", null, null); - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@{silly.uri}SillyProperty") + ":\"Silly\""); - assertEquals(1, results.length()); - results.close(); - PropertyValue returned = fService.getNodeProperty(-1, "main:/a/b/c/foo", name); - assertEquals(value.toString(), returned.toString()); - Map props = fService.getNodeProperties(-1, "main:/a/b/c/foo"); - assertEquals(1, props.size()); - assertEquals(value.toString(), props.get(name).toString()); - - props = new HashMap(); - QName n1 = QName.createQName("silly.uri", "Prop1"); - PropertyValue p1 = new PropertyValue(DataTypeDefinition.DATETIME, new Date(System.currentTimeMillis())); - props.put(n1, p1); - QName n2 = QName.createQName("silly.uri", "Prop2"); - PropertyValue p2 = new PropertyValue(DataTypeDefinition.TEXT, "A String Property."); - props.put(n2, p2); - QName n3 = QName.createQName("silly.uri", "Prop3"); - PropertyValue p3 = new PropertyValue(DataTypeDefinition.INT, 42); - props.put(n3, p3); - QName n4 = QName.createQName("silly.uri", "Prop4"); - PropertyValue p4 = new PropertyValue(null, new Boolean(false)); - props.put(n4, p4); - QName n5 = QName.createQName("silly.uri", "Prop5"); - List strList = new ArrayList(2); - strList.add("hello"); - strList.add("world"); - PropertyValue p5 = new PropertyValue(DataTypeDefinition.TEXT, (Serializable)strList); - props.put(n5, p5); - fService.setNodeProperties("main:/a/b/c/bar", props); - fService.createSnapshot("main", null, null); - props = fService.getNodeProperties(-1, "main:/a/b/c/bar"); - assertEquals(5, props.size()); - assertEquals(p1.toString(), props.get(n1).toString()); - assertEquals(p2.toString(), props.get(n2).toString()); - assertEquals(p3.toString(), props.get(n3).toString()); - assertEquals(p4.toString(), props.get(n4).toString()); - assertEquals(p5.toString(), props.get(n5).toString()); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@{silly.uri}Prop1") + ":\"" + props.get(n1).getStringValue() + "\""); - assertEquals(1, results.length()); - results.close(); - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@{silly.uri}Prop2") + ":\"" + props.get(n2).getStringValue() + "\""); - assertEquals(1, results.length()); - results.close(); - - props = new HashMap(); - n1 = QName.createQName("silly.uri", "Prop1"); - p1 = new PropertyValue(DataTypeDefinition.DATETIME, new Date(System.currentTimeMillis())); - props.put(n1, p1); - n2 = QName.createQName("silly.uri", "Prop2"); - p2 = new PropertyValue(DataTypeDefinition.TEXT, "A String Property - updated."); - props.put(n2, p2); - n3 = QName.createQName("silly.uri", "Prop3"); - p3 = new PropertyValue(DataTypeDefinition.INT, -42); - props.put(n3, p3); - n4 = QName.createQName("silly.uri", "Prop4"); - p4 = new PropertyValue(null, new Boolean(true)); - props.put(n4, p4); - n5 = QName.createQName("silly.uri", "Prop5"); - strList = new ArrayList(2); - strList.add("goodbye"); - strList.add("world"); - p5 = new PropertyValue(DataTypeDefinition.TEXT, (Serializable)strList); - props.put(n5, p5); - fService.setNodeProperties("main:/a/b/c/bar", props); - fService.createSnapshot("main", null, null); - props = fService.getNodeProperties(-1, "main:/a/b/c/bar"); - assertEquals(5, props.size()); - assertEquals(p1.toString(), props.get(n1).toString()); - assertEquals(p2.toString(), props.get(n2).toString()); - assertEquals(p3.toString(), props.get(n3).toString()); - assertEquals(p4.toString(), props.get(n4).toString()); - assertEquals(p5.toString(), props.get(n5).toString()); - - fService.deleteNodeProperty("main:/a/b/c/bar", n1); - fService.createSnapshot("main", null, null); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@{silly.uri}Prop1") + ":\"" + props.get(n1).getStringValue() + "\""); - assertEquals(0, results.length()); - results.close(); - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@{silly.uri}Prop2") + ":\"" + props.get(n2).getStringValue() + "\""); - assertEquals(1, results.length()); - results.close(); - - props = fService.getNodeProperties(-1, "main:/a/b/c/bar"); - assertEquals(4, props.size()); - assertEquals(p2.toString(), props.get(n2).toString()); - assertEquals(p3.toString(), props.get(n3).toString()); - assertEquals(p4.toString(), props.get(n4).toString()); - assertEquals(p5.toString(), props.get(n5).toString()); - fService.deleteNodeProperties("main:/a/b/c/bar"); - fService.createSnapshot("main", null, null); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@{silly.uri}Prop1") + ":\"" + p1.getStringValue() + "\""); - assertEquals(0, results.length()); - results.close(); - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@{silly.uri}Prop2") + ":\"" + props.get(n2).getStringValue() + "\""); - assertEquals(0, results.length()); - results.close(); - - props = fService.getNodeProperties(-1, "main:/a/b/c/bar"); - assertEquals(0, props.size()); - - fService.removeNode("main:/a/b/c/foo"); - assertEquals(1, fService.getNodeProperties(-1, "main:/a/b/c/foo").size()); - fService.setNodeProperty("main:/a/b/c/foo", QName.createQName("silly.uri", "Prop1"), new PropertyValue(null, 42)); - assertEquals(2, fService.getNodeProperties(-1, "main:/a/b/c/foo").size()); - - fService.createSnapshot("main", null, null); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@{silly.uri}Prop1") + ":\"" + p1.getStringValue() + "\""); - assertEquals(0, results.length()); - results.close(); - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@{silly.uri}Prop2") + ":\"" + p2.getStringValue() + "\""); - assertEquals(0, results.length()); - results.close(); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test getStoreVersionRootPaths(). - */ - public void testGetStoreVersionRootPaths() throws Exception - { - try - { - setupBasicTree(); - AVMNodeDescriptor desc = fService.lookup(-1, "main:/a/b/c/foo"); - List paths = fService.getPathsInStoreVersion(desc, "main", 1); - assertEquals(1, paths.size()); - assertEquals("main:/a/b/c/foo", paths.get(0)); - fService.getFileOutputStream("main:/a/b/c/foo").close(); - fService.createSnapshot("main", null, null); - fService.getFileOutputStream("main:/a/b/c/foo").close(); - fService.createSnapshot("main", null, null); - fService.getFileOutputStream("main:/a/b/c/foo").close(); - fService.createSnapshot("main", null, null); - fService.getFileOutputStream("main:/a/b/c/foo").close(); - fService.createSnapshot("main", null, null); - fService.getFileOutputStream("main:/a/b/c/foo").close(); - fService.createSnapshot("main", null, null); - fService.getFileOutputStream("main:/a/b/c/foo").close(); - fService.createSnapshot("main", null, null); - fService.getFileOutputStream("main:/a/b/c/foo").close(); - fService.createSnapshot("main", null, null); - fService.getFileOutputStream("main:/a/b/c/foo").close(); - fService.createSnapshot("main", null, null); - paths = fService.getPathsInStoreVersion(desc, "main", 1); - assertEquals(1, paths.size()); - assertEquals("main:/a/b/c/foo", paths.get(0)); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - } - - public void testForceCopyDeleted() throws Exception - { - try - { - setupBasicTree(); - fService.removeNode("main:/a/b/c/foo"); - fService.createSnapshot("main", null, null); - AVMNodeDescriptor desc = fService.forceCopy("main:/a/b/c/foo"); - assertTrue(desc.isDeleted()); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - } - - public void testLayerSnapshots() throws Exception - { - try - { - // Layers are not yet indexed - setupBasicTree(); - assertEquals(1, fService.createSnapshot("main", null, null).get("main").intValue()); - runQueriesAgainstBasicTree("main"); - fService.createStore("layer"); - fService.createLayeredDirectory("main:/a", "layer:/", "a"); - fService.createSnapshot("layer", null, null); - runQueriesAgainstBasicTree("main"); - fService.createFile("main:/a", "Xander").close(); - fService.createSnapshot("layer", null, null); - - assertEquals(2, fService.lookup(2, "layer:/a").getIndirectionVersion()); - Map listing =fService.getDirectoryListing(2, "layer:/"); - assertEquals(1, listing.size()); - assertEquals(2, listing.values().iterator().next().getIndirectionVersion()); - assertEquals(fService.lookup(2, "main:/a/Xander").getId(), fService.lookup(2, "layer:/a/Xander").getId()); - - assertNull(fService.lookup(1, "layer:/a/Xander")); - listing = fService.getDirectoryListing(1, "layer:/"); - assertEquals(1, listing.size()); - assertEquals(1, listing.values().iterator().next().getIndirectionVersion()); - - assertEquals(-1, fService.lookup(-1, "layer:/a").getIndirectionVersion()); - listing = fService.getDirectoryListing(-1, "layer:/"); - assertEquals(1, listing.size()); - assertEquals(-1, listing.values().iterator().next().getIndirectionVersion()); - assertEquals(fService.lookup(-1, "main:/a/Xander").getId(), fService.lookup(-1, "layer:/a/Xander").getId()); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - finally - { - fService.purgeStore("layer"); - } - } - - public void testBranchLayerSnapshot() throws Exception - { - try - { - // layers are not yet indexed - setupBasicTree(); - fService.createStore("layer"); - fService.createDirectory("layer:/", "root"); - fService.createLayeredDirectory("main:/a", "layer:/root", "layer"); - fService.createSnapshot("layer", null, null); - fService.createFile("main:/a", "dummy").close(); - fService.createFile("layer:/root/layer", "pygmy").close(); - fService.createSnapshot("layer", null, null); - fService.createStore("branch"); - fService.createBranch(1, "layer:/root", "branch:/", "branch"); - fService.createSnapshot("branch", null, null); - fService.getFileOutputStream("main:/a/b/c/foo").close(); - System.out.println("main 1"); - System.out.println(recursiveList("main", 1, true)); - System.out.println("branch 1"); - System.out.println(recursiveList("branch", 1, true)); - assertEquals(fService.lookup(1, "main:/a/b/c/foo").getId(), fService.lookup(1, "branch:/branch/layer/b/c/foo").getId()); - System.out.println("main -1"); - System.out.println(recursiveList("main", -1, true)); - System.out.println("branch -1"); - System.out.println(recursiveList("branch", -1, true)); - assertEquals(fService.lookup(-1, "main:/a/b/c/foo").getId(), fService.lookup(-1, "branch:/branch/layer/b/c/foo").getId()); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - finally - { - fService.purgeStore("layer"); - fService.purgeStore("branch"); - } - } - - /** - * Test Deployment. - */ -/* - public void testDeployment() throws Exception - { - try - { - final DeploymentService depService = (DeploymentService) fContext.getBean("DeploymentService"); - NameMatcher matcher = (NameMatcher) fContext.getBean("globalPathExcluder"); - setupBasicTree(); - fService.addAspect("main:/a", ContentModel.ASPECT_REFERENCEABLE); - fService.addAspect("main:/a/b", ContentModel.ASPECT_REFERENCEABLE); - fService.addAspect("main:/a/b/c", ContentModel.ASPECT_REFERENCEABLE); - fService.addAspect("main:/a/b/c/foo", ContentModel.ASPECT_REFERENCEABLE); - fService.addAspect("main:/a/b/c/bar", ContentModel.ASPECT_REFERENCEABLE); - fService.createFile("main:/a/b", "snarl.bak").close(); - // TestDeploymentCallback callback = new TestDeploymentCallback(); - fService.createStore("target"); - DeploymentReport report = depService.deployDifference(-1, "main:/a", "localhost", 50500, "admin", "admin", "target:/a", matcher, false, false, false, null); - assertNull(fService.lookup(-1, "target:/a/b/snarl.bak")); - runQueriesAgainstBasicTreeWithAOnly("target"); - System.out.println(report); - ActionService actionService = depService.getRemoteActionService("localhost", 50500, "admin", "admin"); - Map params = new HashMap(); - params.put("property", ContentModel.PROP_ADDRESSEE); - params.put("value", "Santa Claus"); - assertEquals(fService.lookup(-1, "main:/a/b/c/foo").getGuid(), fService.lookup(-1, "target:/a/b/c/foo").getGuid()); - assertEquals(fService.lookup(-1, "main:/a/b/c/bar").getGuid(), fService.lookup(-1, "target:/a/b/c/bar").getGuid()); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, "target:/a/b/c/foo"); - Action action = new ActionImpl(nodeRef, "set-property-value", "set-property-value", params); - actionService.executeAction(action, nodeRef, false, false); - assertEquals("Santa Claus", fService.getNodeProperty(-1, "target:/a/b/c/foo", ContentModel.PROP_ADDRESSEE).getStringValue()); - ContentData srcCD = fService.getContentDataForRead(-1, "main:/a/b/c/bar"); - ContentData dstCD = fService.getContentDataForRead(-1, "target:/a/b/c/bar"); - assertEquals(srcCD.getMimetype(), dstCD.getMimetype()); - fService.createFile("main:/a/b", "biz").close(); - report = depService.deployDifference(-1, "main:/a", "localhost", 50500, "admin", "admin", "target:/a", matcher, false, false, true, null); - // Nothing was done - runQueriesAgainstBasicTreeWithAOnly("target"); - System.out.println(report); - System.out.println(recursiveList("target", -1, true)); - assertNull(fService.lookup(-1, "target:/a/b/biz")); - report = depService.deployDifference(-1, "main:/a", "localhost", 50500, "admin", "admin", "target:/a", matcher, false, false, false, null); - System.out.println(report); - runQueriesForCreateAndDeploy("target"); - assertEquals(fService.lookup(-1, "main:/a/b/biz").getGuid(), fService.lookup(-1, "target:/a/b/biz").getGuid()); - fService.removeNode("main:/a/b/c/foo"); - fService.createFile("main:/a/b/c", "Foo").close(); - ContentWriter writer = fService.getContentWriter("main:/a/b/c/Foo"); - writer.setEncoding("UTF-8"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent("I am main:/a/b/c/foo"); - report = depService.deployDifference(-1, "main:/a", "localhost", 50500, "admin", "admin", "target:/a", matcher, false, false, false, null); - System.out.println(report); - assertEquals(DeploymentEvent.Type.UPDATED, report.iterator().next().getType()); - fService.removeNode("main:/a/b/c/foo"); - report = depService.deployDifference(-1, "main:/a", "localhost", 50500, "admin", "admin", "target:/a", matcher, false, true, false, null); - runQueriesForCreateAndDeploy("target"); - System.out.println(report); - assertNotNull(fService.lookup(-1, "target:/a/b/c/foo")); - report = depService.deployDifference(-1, "main:/a", "localhost", 50500, "admin", "admin", "target:/a", matcher, false, false, false, null); - System.out.println(report); - runQueriesForRemoveAndDelpoy("target"); - assertNull(fService.lookup(-1, "target:/a/b/c/foo")); - fService.removeNode("main:/a/b/c/bar"); - fService.createDirectory("main:/a/b/c", "bar"); - report = depService.deployDifference(-1, "main:/a", "localhost", 50500, "admin", "admin", "target:/a", matcher, false, false, false, null); - System.out.println(report); - runQueriesForRemoveFileAndCreateDirectoryAndDeploy("target"); - report = depService.deployDifference(-1, "main:/a", "localhost", 50500, "admin", "admin", "target:/a", matcher, false, false, false, null); - depService.deployDifference(-1, "main:/a", "localhost", 50500, "admin", "admin", "target2:/wiggly/diggly", matcher, true, false, false, null); - System.out.println(report); - fService.createStore("source"); - RetryingTransactionHelper.RetryingTransactionCallback cb = new RetryingTransactionHelper.RetryingTransactionCallback() - { - public Object execute() throws Exception - { - BulkLoader loader = new BulkLoader(); - loader.setAvmService(fService); - loader.recursiveLoad(getSourceFolder()+"/org/alfresco/repo/avm", "source:/"); - return null; - } - }; - RetryingTransactionHelper helper = (RetryingTransactionHelper) fContext.getBean("retryingTransactionHelper"); - helper.doInTransaction(cb); - fService.createStore("dest"); - depService.deployDifference(-1, "source:/avm", "localhost", 50500, "admin", "admin", "dest:/avm", null, true, false, false, null); - Runnable runner = new Runnable() - { - public void run() - { - depService.deployDifference(-1, "source:/avm", "localhost", 50500, "admin", "admin", "dest:/avm", null, true, false, false, null); - } - }; - Thread thread = new Thread(runner); - thread.start(); - thread.join(); - report = depService.deployDifference(-1, "source:/avm", "localhost", 50500, "admin", "admin", "dest:/avm", null, true, false, false, null); - System.out.println(report); - assertEquals("", report.toString()); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - } -*/ - protected void runQueriesForCreateAndDeploy(String store) throws Exception - { - StoreRef storeRef = AVMNodeConverter.ToStoreRef(store); - - // Text index - SearchService searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef(store), true); - ResultSet results = searchService.query(storeRef, "lucene", "TEXT:\"I am main\""); - assertEquals(2, results.length()); - results.close(); - - // Basic properties - - // Note "a" is a stop word and therefore not findable ... - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":\"foo\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":foo"); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":biz"); - assertEquals(1, results.length()); - results.close(); - - // TODO: Fix auth in AVMDiskDriver and more?? - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_CREATOR) + ":admin"); - assertEquals(7, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_MODIFIER) + ":admin"); - assertEquals(7, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_OWNER) + ":admin"); - assertEquals(7, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NODE_UUID) + ":unknown"); - assertEquals(7, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_PROTOCOL) + ":avm"); - assertEquals(7, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_IDENTIFIER) + ":" + store); - assertEquals(7, results.length()); - results.close(); - - // Basic paths - - results = searchService.query(storeRef, "lucene", "PATH:\"/\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/biz\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/foo\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/bar\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/f\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(7, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//*\""); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//.\""); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//*\""); - assertEquals(5, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//c/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*\""); - assertEquals(0, results.length()); - results.close(); - } - - protected void runQueriesForRemoveAndDelpoy(String store) - { - StoreRef storeRef = AVMNodeConverter.ToStoreRef(store); - - // Text index - SearchService searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef(store), true); - ResultSet results = searchService.query(storeRef, "lucene", "TEXT:\"I am main\""); - assertEquals(1, results.length()); - results.close(); - - // Basic properties - - // Note "a" is a stop word and therefore not findable ... - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":\"foo\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":foo"); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":biz"); - assertEquals(1, results.length()); - results.close(); - - // TODO: Fix auth in AVMDiskDriver and more?? - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_CREATOR) + ":admin"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_MODIFIER) + ":admin"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_OWNER) + ":admin"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NODE_UUID) + ":unknown"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_PROTOCOL) + ":avm"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_IDENTIFIER) + ":" + store); - assertEquals(6, results.length()); - results.close(); - - // Basic paths - - results = searchService.query(storeRef, "lucene", "PATH:\"/\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/biz\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/foo\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/bar\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/f\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//*\""); - assertEquals(5, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//.\""); - assertEquals(5, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//*\""); - assertEquals(4, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//c/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*\""); - assertEquals(0, results.length()); - results.close(); - } - - protected void runQueriesForRemoveFileAndCreateDirectoryAndDeploy(String store) - { - StoreRef storeRef = AVMNodeConverter.ToStoreRef(store); - - // Text index - SearchService searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef(store), true); - ResultSet results = searchService.query(storeRef, "lucene", "TEXT:\"I am main\""); - assertEquals(0, results.length()); - results.close(); - - // Basic properties - - // Note "a" is a stop word and therefore not findable ... - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":\"foo\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":\"bar\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":foo"); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":biz"); - assertEquals(1, results.length()); - results.close(); - - // TODO: Fix auth in AVMDiskDriver and more?? - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_CREATOR) + ":admin"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_MODIFIER) + ":admin"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_OWNER) + ":admin"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NODE_UUID) + ":unknown"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_PROTOCOL) + ":avm"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_IDENTIFIER) + ":" + store); - assertEquals(6, results.length()); - results.close(); - - // Basic paths - - results = searchService.query(storeRef, "lucene", "PATH:\"/\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/biz\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/foo\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/bar\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/f\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//*\""); - assertEquals(5, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//.\""); - assertEquals(5, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//*\""); - assertEquals(4, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//c/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*\""); - assertEquals(0, results.length()); - results.close(); - } - - /** - * Test of GUIDs on AVM Nodes. - */ - public void testGuids() throws Exception - { - try - { - setupBasicTree(); - System.out.println(fService.lookup(-1, "main:/a/b/c/foo").getGuid()); - String guid = GUID.generate(); - fService.setGuid("main:/a/b/c/foo", guid); - assertEquals(guid, fService.lookup(-1, "main:/a/b/c/foo").getGuid()); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - } - - /** - * Test the revert to version action. - */ - public void testRevertToVersionAction() throws Exception - { - try - { - setupBasicTree(); - - ContentWriter writer = fService.getContentWriter("main:/a/b/c/foo", true); - writer.setEncoding("UTF-8"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent("I am main:/a/b/c/foo V1"); - fService.createSnapshot("main", "v1", null); - - writer = fService.getContentWriter("main:/a/b/c/foo", true); - writer.setEncoding("UTF-8"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent("I am main:/a/b/c/foo V2"); - fService.createSnapshot("main", "v2", null); - - writer = fService.getContentWriter("main:/a/b/c/foo", true); - writer.setEncoding("UTF-8"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent("I am main:/a/b/c/foo V3"); - fService.createSnapshot("main", "v3", null); - - writer = fService.getContentWriter("main:/a/b/c/foo", true); - writer.setEncoding("UTF-8"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent("I am main:/a/b/c/foo V4"); - fService.createSnapshot("main", "v4", null); - - writer = fService.getContentWriter("main:/a/b/c/foo", true); - writer.setEncoding("UTF-8"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent("I am main:/a/b/c/foo V5"); - fService.createSnapshot("main", "v5", null); - - writer = fService.getContentWriter("main:/a/b/c/foo", true); - writer.setEncoding("UTF-8"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent("I am main:/a/b/c/foo HEAD"); - - StoreRef storeRef = AVMNodeConverter.ToStoreRef("main"); - - SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true); - - ResultSet results = searchService.query(storeRef, "lucene", "TEXT:\"HEAD\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "TEXT:\"V5\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "TEXT:\"V2\""); - assertEquals(0, results.length()); - results.close(); - - AVMNodeDescriptor desc = fService.lookup(-1, "main:/a/b/c/foo"); - List history = fService.getHistory(desc, 100); - AVMNodeDescriptor toRevert = history.get(3); - - final ActionImpl action = new ActionImpl(null, GUID.generate(), AVMRevertToVersionAction.NAME); - action.setParameterValue(AVMRevertToVersionAction.TOREVERT, toRevert); - final AVMRevertToVersionAction revert = (AVMRevertToVersionAction) fContext.getBean("avm-revert-to-version"); - class TxnWork implements RetryingTransactionCallback - { - public Object execute() throws Exception - { - // note: including implicit snapshot - revert.execute(action, AVMNodeConverter.ToNodeRef(-1, "main:/a/b/c/foo")); - return null; - } - }; - - TransactionService transactionService = (TransactionService) fContext.getBean("transactionService"); - transactionService.getRetryingTransactionHelper().doInTransaction(new TxnWork()); - - results = searchService.query(storeRef, "lucene", "TEXT:\"HEAD\""); - assertEquals(0, results.length()); - results.close(); - results = searchService.query(storeRef, "lucene", "TEXT:\"V5\""); - assertEquals(0, results.length()); - results.close(); - results = searchService.query(storeRef, "lucene", "TEXT:\"V2\""); - assertEquals(1, results.length()); - results.close(); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - } - - /** - * Test version numbering. - */ - public void testVersionNumbering() throws Exception - { - try - { - setupBasicTree(); - AVMNodeDescriptor desc = fService.lookup(-1, "main:/a/b/c/foo"); - assertEquals(1, desc.getVersionID()); - fService.getFileOutputStream("main:/a/b/c/foo").close(); - desc = fService.lookup(-1, "main:/a/b/c/foo"); - assertEquals(2, desc.getVersionID()); - desc = fService.lookup(-1, "main:/a/b"); - assertEquals(2, desc.getVersionID()); - fService.createSnapshot("main", null, null); - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - fService.getFileOutputStream("main:/layer/b/c/bar").close(); - desc = fService.lookup(-1, "main:/layer/b/c/bar"); - assertEquals(2, desc.getVersionID()); - desc = fService.lookup(-1, "main:/layer/b/c"); - assertEquals(3, desc.getVersionID()); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - } - - /** - * Test relinking of nodes to history. - */ - public void testHistoryRelink() throws Exception - { - try - { - setupBasicTree(); - fService.createStore("branch"); - fService.createBranch(-1, "main:/a", "branch:/", "a"); - fService.removeNode("branch:/a/b/c/foo"); - List diffs = fSyncService.compare(-1, "branch:/a", -1, "main:/a", null); - assertEquals(1, diffs.size()); - assertEquals(AVMDifference.NEWER, diffs.get(0).getDifferenceCode()); - assertEquals("[branch:/a/b/c/foo[-1] > main:/a/b/c/foo[-1]]", diffs.toString()); - fService.createFile("branch:/a/b/c", "foo").close(); - diffs = fSyncService.compare(-1, "branch:/a", -1, "main:/a", null); - assertEquals(1, diffs.size()); - assertEquals(AVMDifference.NEWER, diffs.get(0).getDifferenceCode()); - assertEquals("[branch:/a/b/c/foo[-1] > main:/a/b/c/foo[-1]]", diffs.toString()); - fSyncService.update(diffs, null, false, false, false, false, null, null); - fService.removeNode("branch:/a/b/c/bar"); - fService.createFile("branch:/a/b/c", "pismo").close(); - fService.rename("branch:/a/b/c", "pismo", "branch:/a/b/c", "bar"); - diffs = fSyncService.compare(-1, "branch:/a", -1, "main:/a", null); - assertEquals(1, diffs.size()); - assertEquals(AVMDifference.NEWER, diffs.get(0).getDifferenceCode()); - assertEquals("[branch:/a/b/c/bar[-1] > main:/a/b/c/bar[-1]]", diffs.toString()); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - finally - { - fService.purgeStore("branch"); - } - } - - /** - * Test renaming a store. - */ - public void testRenameStore() throws Exception - { - try - { - setupBasicTree(); - assertNotNull(fService.lookup(-1, "main:/a/b")); - fService.renameStore("main", "foo"); - assertNotNull(fService.getStore("foo")); - assertNotNull(fService.lookup(-1, "foo:/a/b")); - runQueriesAgainstBasicTree("foo"); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - finally - { - fService.purgeStore("foo"); - } - } - - /** - * Test copy. - */ - public void testCopy() throws Exception - { - try - { - setupBasicTree(); - // Copy a file. - fService.copy(-1, "main:/a/b/c/foo", "main:/d", "fooCopy"); - AVMNodeDescriptor desc = fService.lookup(-1, "main:/d/fooCopy"); - assertTrue(desc.isFile()); - fService.createSnapshot("main", null, null); - runQueriesAgainstBasicTreePlusFileCopy("main"); - - // Copy a whole tree - fService.copy(-1, "main:/a", "main:/d/e", "aCopy"); - desc = fService.lookup(-1, "main:/d/e/aCopy"); - assertTrue(desc.isDirectory()); - desc = fService.lookup(-1, "main:/a/b/c/bar"); - AVMNodeDescriptor desc2 = fService.lookup(-1, "main:/d/e/aCopy/b/c/bar"); - assertTrue(desc2.isFile()); - assertEquals(desc.getLength(), desc2.getLength()); - fService.createSnapshot("main", null, null); - runQueriesAgainstBasicTreePlusFileCopyAndDirectoryCopy("main"); - - // Check that it rejects infinite copies. - try - { - fService.copy(-1, "main:/", "main://d/e", "illegal"); - fail(); - } - catch (AVMException ae) - { - // This is a success. - } - - StoreRef storeRef = AVMNodeConverter.ToStoreRef("main"); - SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true); - ResultSet results = searchService.query(storeRef, "lucene", "@" + SearchLanguageConversion.escapeLuceneQuery(ContentModel.PROP_NAME.toString()) + ":\"guest\""); - assertEquals(0, results.length()); - results.close(); - - CrossRepositoryCopyService copyService = (CrossRepositoryCopyService) fContext.getBean("CrossRepositoryCopyService"); - RepoRemote remoteService = (RepoRemote) fContext.getBean("RepoRemoteService"); - Pair toCopy = remoteService.lookup(remoteService.getRoot(), "Guest Home"); - copyService.copy(toCopy.getFirst(), AVMNodeConverter.ToNodeRef(-1, "main:/"), "Guest Home"); - desc = fService.lookup(-1, "main:/Guest Home"); - assertTrue(desc.isDirectory()); - System.out.println(this.recursiveList("main", -1, true)); - - fService.createSnapshot("main", null, null); - searchService = fIndexerAndSearcher.getSearcher(storeRef, true); - results = searchService.query(storeRef, "lucene", "@" + SearchLanguageConversion.escapeLuceneQuery(ContentModel.PROP_NAME.toString()) + ":\"guest\""); - assertEquals(1, results.length()); - results.close(); - - StoreRef spacesStore = new StoreRef("workspace", "SpacesStore"); - - searchService = fIndexerAndSearcher.getSearcher(spacesStore, true); - results = searchService.query(spacesStore, "lucene", "PATH:\"//.\""); - int count = results.length(); - results.close(); - - copyService.copy(AVMNodeConverter.ToNodeRef(-1, "main:/a"), toCopy.getFirst(), "a"); - Pair theCopy = remoteService.lookup(toCopy.getFirst(), "a"); - assertTrue(theCopy.getSecond()); - - results = searchService.query(spacesStore, "lucene", "PATH:\"//.\""); - assertEquals(count + 5, results.length()); - results.close(); - - results = searchService.query(spacesStore, "lucene", "PATH:\"//.\""); - assertEquals(count + 5, results.length()); - results.close(); - - results = searchService.query(spacesStore, "lucene", "@cm\\:name:foo"); - assertEquals(1, results.length()); - results.close(); - - remoteService.removeNode(theCopy.getFirst()); - - results = searchService.query(spacesStore, "lucene", "PATH:\"//.\""); - assertEquals(count, results.length()); - results.close(); - - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - } - - public void testCopy_ALF_835() throws Exception - { - try - { - fService.createStore("mainA"); - - fService.createDirectory("mainA:/", "a"); - fService.createDirectory("mainA:/a", "www"); - - AVMNodeDescriptor desc = fService.lookup(-1, "mainA:/a/www"); - assertTrue(desc.isDirectory()); - - desc = fService.lookup(-1, "mainA:/a/www/www"); - assertNull(desc); - - // copy empty directory into itself - fService.copy(-1, "mainA:/a/www", "mainA:/a/www", "www"); - - desc = fService.lookup(-1, "mainA:/a/www/www"); - assertTrue(desc.isDirectory()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("mainA"); - } - } - - protected void runQueriesAgainstBasicTreePlusFileCopy(String store) - { - StoreRef storeRef = AVMNodeConverter.ToStoreRef(store); - - // Text index - SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true); - ResultSet results = searchService.query(storeRef, "lucene", "TEXT:\"I am main\""); - assertEquals(3, results.length()); - results.close(); - - // Basic properties - - // Note "a" is a stop word and therefore not findable ... - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":\"foo\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":foo"); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":\"fooCopy\""); - assertEquals(1, results.length()); - results.close(); - - // TODO: Fix auth in AVMDiskDriver and more?? - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_CREATOR) + ":admin"); - assertEquals(10, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_MODIFIER) + ":admin"); - assertEquals(10, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_OWNER) + ":admin"); - assertEquals(10, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NODE_UUID) + ":unknown"); - assertEquals(10, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_PROTOCOL) + ":avm"); - assertEquals(10, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_IDENTIFIER) + ":" + store); - assertEquals(10, results.length()); - results.close(); - - // Basic paths - - results = searchService.query(storeRef, "lucene", "PATH:\"/\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/foo\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/bar\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/fooCopy\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/f\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(10, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//*\""); - assertEquals(9, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//.\""); - assertEquals(5, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//*\""); - assertEquals(4, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//c/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*\""); - assertEquals(3, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*\""); - assertEquals(0, results.length()); - results.close(); - } - - protected void runQueriesAgainstBasicTreePlusFileCopyAndDirectoryCopy(String store) - { - StoreRef storeRef = AVMNodeConverter.ToStoreRef(store); - - // Text index - SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true); - ResultSet results = searchService.query(storeRef, "lucene", "TEXT:\"I am main\""); - assertEquals(5, results.length()); - results.close(); - - // Basic properties - - // Note "a" is a stop word and therefore not findable ... - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":\"foo\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":foo"); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":\"fooCopy\""); - assertEquals(1, results.length()); - results.close(); - - // TODO: Fix auth in AVMDiskDriver and more?? - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_CREATOR) + ":admin"); - assertEquals(15, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_MODIFIER) + ":admin"); - assertEquals(15, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_OWNER) + ":admin"); - assertEquals(15, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NODE_UUID) + ":unknown"); - assertEquals(15, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_PROTOCOL) + ":avm"); - assertEquals(15, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_IDENTIFIER) + ":" + store); - assertEquals(15, results.length()); - results.close(); - - // Basic paths - - results = searchService.query(storeRef, "lucene", "PATH:\"/\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/foo\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/bar\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/fooCopy\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/f\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/aCopy\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/aCopy/b\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/aCopy/b/c\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/aCopy/b/c/foo\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/aCopy/b/c/bar\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(15, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//*\""); - assertEquals(14, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//.\""); - assertEquals(5, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//*\""); - assertEquals(4, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//c/*\""); - assertEquals(4, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*\""); - assertEquals(3, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*\""); - assertEquals(3, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*\""); - assertEquals(3, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*/*/*\""); - assertEquals(0, results.length()); - results.close(); - } - - /** - * Test cyclic behaviour (when creating layered directories) - */ - public void testCircularLayering() throws Exception - { - try - { - fService.createLayeredDirectory("main:/c", "main:/", "b"); // note: unbacked - - fService.createLayeredDirectory("main:/b", "main:/", "c"); - fail(); - } - catch (AVMCycleException e) - { - // expected - } - - try - { - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - - fService.createLayeredDirectory("main:/a", "main:/a/b", "c"); - fail(); - } - catch (AVMCycleException e) - { - // expected - } - - try - { - fService.createStore("a"); - fService.createStore("b"); - - fService.createDirectory("a:/", "a"); - - fService.createDirectory("b:/", "a"); - fService.createLayeredDirectory("a:/a/b", "b:/a", "b"); // note: unbacked - - fService.createLayeredDirectory("b:/a/b", "a:/a", "b"); - fail(); - } - catch (AVMCycleException e) - { - // expected - } - finally - { - fService.purgeStore("a"); - fService.purgeStore("b"); - } - - try - { - fService.createStore("test1"); - fService.createStore("test2"); - - fService.createDirectory("test1:/", "test1folder"); - fService.createDirectory("test2:/", "test2folder"); - - fService.createLayeredDirectory("test2:/test2folder", "test1:/test1folder", "test2"); - - fService.createLayeredDirectory("test1:/test1folder", "test2:/test2folder", "test1"); - fail(); - } - catch (AVMCycleException e) - { - // expected - } - finally - { - fService.purgeStore("test1"); - fService.purgeStore("test2"); - } - - try - { - fService.createStore("a"); - fService.createStore("b"); - fService.createStore("c"); - - fService.createDirectory("a:/", "a"); - - fService.createDirectory("b:/", "a"); - fService.createLayeredDirectory("a:/a/b", "b:/a", "b"); // note: unbacked - - fService.createDirectory("c:/", "a"); - fService.createLayeredDirectory("b:/a/b", "c:/a", "b"); - - fService.createLayeredDirectory("c:/a/b", "a:/a", "b"); - fail(); - } - catch (AVMCycleException e) - { - // expected - } - finally - { - fService.purgeStore("a"); - fService.purgeStore("b"); - fService.purgeStore("c"); - } - - try - { - fService.createStore("a"); - fService.createStore("b"); - - fService.createDirectory("a:/", "a"); - fService.createDirectory("a:/a", "b"); - - fService.createDirectory("b:/", "a"); - fService.createLayeredDirectory("a:/a", "b:/a", "b"); - - fService.createLayeredDirectory("b:/a", "a:/a/b", "c"); - fail(); - } - catch (AVMCycleException e) - { - // expected - } - finally - { - fService.purgeStore("a"); - fService.purgeStore("b"); - } - } - - /** - * Test getting all paths for a node. - */ - public void testGetPaths() throws Exception - { - try - { - setupBasicTree(); - fService.createBranch(-1, "main:/a", "main:/", "abranch"); - fService.createSnapshot("main", null, null); - fService.createBranch(-1, "main:/a/b", "main:/", "bbranch"); - List> paths = fService.getPaths(fService.lookup(-1, "main:/a/b/c/foo")); - for (Pair path : paths) - { - System.out.println(path.getFirst() + " " + path.getSecond()); - } - paths = fService.getHeadPaths(fService.lookup(-1, "main:/a/b/c/foo")); - System.out.println("------------------------------"); - for (Pair path : paths) - { - System.out.println(path.getFirst() + " " + path.getSecond()); - } - paths = fService.getPathsInStoreHead(fService.lookup(-1, "main:/a/b/c/foo"), "main"); - System.out.println("------------------------------"); - for (Pair path : paths) - { - System.out.println(path.getFirst() + " " + path.getSecond()); - } - assertNotNull(fService.getAPath(fService.lookup(-1, "main:/a/b/c/foo"))); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test getIndirection. - */ - public void testGetIndirection() throws Exception - { - try - { - setupBasicTree(); - fService.createStore("layer"); - fService.createLayeredDirectory("main:/a", "layer:/", "layer"); - fService.createFile("layer:/layer/b", "figs").close(); - assertEquals("main:/a", fService.getIndirectionPath(-1, "layer:/layer")); - assertEquals("main:/a/b", fService.getIndirectionPath(-1, "layer:/layer/b")); - assertEquals("main:/a/b/c", fService.getIndirectionPath(-1, "layer:/layer/b/c")); - assertEquals("main:/a/b/c/foo", fService.getIndirectionPath(-1, "layer:/layer/b/c/foo")); - fService.createLayeredDirectory("main:/d", "layer:/layer/b", "dlayer"); - assertEquals("main:/d", fService.getIndirectionPath(-1, "layer:/layer/b/dlayer")); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("layer"); - } - } - - /** - * Test the revert list action. - * - * @deprecated - */ - public void testRevertListAction() throws Exception - { - try - { - setupBasicTree(); - fService.createStore("area"); - fService.createLayeredDirectory("main:/a", "area:/", "a"); - fService.getFileOutputStream("area:/a/b/c/foo").close(); - List diffs = fSyncService.compare(-1, "area:/a", -1, "main:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[area:/a/b/c/foo[-1] > main:/a/b/c/foo[-1]]", diffs.toString()); - fSyncService.update(diffs, null, false, false, false, false, null, null); - fService.getFileOutputStream("area:/a/b/c/bar").close(); - diffs = fSyncService.compare(-1, "area:/a", -1, "main:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[area:/a/b/c/bar[-1] > main:/a/b/c/bar[-1]]", diffs.toString()); - final ActionImpl action = new ActionImpl(null, GUID.generate(), AVMRevertListAction.NAME); - List paths = new ArrayList(); - paths.add("area:/a/b"); - action.setParameterValue(AVMRevertListAction.PARAM_VERSION, fService.getLatestSnapshotID("area")); - action.setParameterValue(AVMRevertListAction.PARAM_NODE_LIST, (Serializable) paths); - final AVMRevertListAction revert = (AVMRevertListAction) fContext.getBean("avm-revert-list"); - class TxnWork implements RetryingTransactionCallback - { - public Object execute() throws Exception - { - revert.execute(action, null); - return null; - } - } - ; - TransactionService transactionService = (TransactionService) fContext.getBean("transactionService"); - transactionService.getRetryingTransactionHelper().doInTransaction(new TxnWork()); - - diffs = fSyncService.compare(-1, "area:/a", -1, "main:/a", null); - assertEquals(0, diffs.size()); - System.out.println(recursiveList("area", -1, true)); - System.out.println(recursiveList("main", -1, true)); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - finally - { - fService.purgeStore("area"); - } - } - - /** - * Test the revert store action. - * - * @deprecated see org.alfresco.wcm.actions.WCMSandboxRevertSnapshotAction or org.alfresco.wcm.SandboxService.revertSnapshot - */ - public void testRevertStoreAction() throws Exception - { - try - { - setupBasicTree(); - - fService.createStore("area"); - fService.createLayeredDirectory("main:/a", "area:/", "a"); - - fService.getFileOutputStream("area:/a/b/c/foo").close(); - - List diffs = fSyncService.compare(-1, "area:/a", -1, "main:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[area:/a/b/c/foo[-1] > main:/a/b/c/foo[-1]]", diffs.toString()); - - fSyncService.update(diffs, null, false, false, false, false, null, null); - - diffs = fSyncService.compare(-1, "area:/a", -1, "main:/a", null); - assertEquals(0, diffs.size()); - - fService.getFileOutputStream("area:/a/b/c/bar").close(); - - diffs = fSyncService.compare(-1, "area:/a", -1, "main:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[area:/a/b/c/bar[-1] > main:/a/b/c/bar[-1]]", diffs.toString()); - - final ActionImpl action = new ActionImpl(null, GUID.generate(), AVMRevertStoreAction.NAME); - action.setParameterValue(AVMRevertStoreAction.PARAM_VERSION, fService.getLatestSnapshotID("area")); - - final AVMRevertStoreAction revert = (AVMRevertStoreAction)fContext.getBean("avm-revert-store"); - - class TxnWork implements RetryingTransactionCallback - { - public Object execute() throws Exception - { - revert.execute(action, AVMNodeConverter.ToNodeRef(-1, "area:/")); - return null; - } - }; - - TransactionService transactionService = (TransactionService) fContext.getBean("transactionService"); - transactionService.getRetryingTransactionHelper().doInTransaction(new TxnWork()); - - diffs = fSyncService.compare(-1, "area:/a", -1, "main:/a", null); - assertEquals(0, diffs.size()); - - System.out.println(recursiveList("area", -1, true)); - System.out.println(recursiveList("main", -1, true)); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - finally - { - fService.purgeStore("area"); - } - } - - /** - * Test the undo list action. - * - * @deprecated see org.alfresco.wcm.actions.WCMSandboxUndoAction or org.alfresco.wcm.SandboxService.revertList - */ - public void testUndoListAction() throws Exception - { - try - { - setupBasicTree(); - fService.createStore("area"); - fService.createLayeredDirectory("main:/a", "area:/", "a"); - fService.getFileOutputStream("area:/a/b/c/foo").close(); - List diffs = fSyncService.compare(-1, "area:/a", -1, "main:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[area:/a/b/c/foo[-1] > main:/a/b/c/foo[-1]]", diffs.toString()); - fSyncService.update(diffs, null, false, false, false, false, null, null); - fService.getFileOutputStream("area:/a/b/c/bar").close(); - diffs = fSyncService.compare(-1, "area:/a", -1, "main:/a", null); - assertEquals(1, diffs.size()); - assertEquals("[area:/a/b/c/bar[-1] > main:/a/b/c/bar[-1]]", diffs.toString()); - final ActionImpl action = new ActionImpl(null, GUID.generate(), AVMUndoSandboxListAction.NAME); - List> versionPaths = new ArrayList>(); - versionPaths.add(new Pair(-1, "area:/a/b/c/bar")); - action.setParameterValue(AVMUndoSandboxListAction.PARAM_NODE_LIST, (Serializable) versionPaths); - final AVMUndoSandboxListAction revert = (AVMUndoSandboxListAction) fContext.getBean("avm-undo-list"); - class TxnWork implements RetryingTransactionCallback - { - public Object execute() throws Exception - { - revert.execute(action, null); - return null; - } - } - ; - TransactionService transactionService = (TransactionService) fContext.getBean("transactionService"); - transactionService.getRetryingTransactionHelper().doInTransaction(new TxnWork()); - - diffs = fSyncService.compare(-1, "area:/a", -1, "main:/a", null); - assertEquals(0, diffs.size()); - System.out.println(recursiveList("area", -1, true)); - System.out.println(recursiveList("main", -1, true)); - } - catch (Exception e) - { - e.printStackTrace(); - throw e; - } - finally - { - fService.purgeStore("area"); - } - } - - /** - * Test the promote action. - * - * @deprecated - */ - public void testPromoteAction() throws Exception - { - try - { - setupBasicTree(); - fService.createDirectory("main:/", JNDIConstants.DIR_DEFAULT_WWW); - fService.rename("main:/", "a", "main:/" + JNDIConstants.DIR_DEFAULT_WWW, "a"); - fService.rename("main:/", "d", "main:/" + JNDIConstants.DIR_DEFAULT_WWW, "d"); - fService.createSnapshot("main", null, null); - fService.createStore("source"); - fService.createLayeredDirectory("main:/" + JNDIConstants.DIR_DEFAULT_WWW, "source:/", JNDIConstants.DIR_DEFAULT_WWW); - fService.getFileOutputStream("source:/" + JNDIConstants.DIR_DEFAULT_WWW + "/a/b/c/foo").close(); - final ActionImpl action = new ActionImpl(AVMNodeConverter.ToNodeRef(-1, "source:/" + JNDIConstants.DIR_DEFAULT_WWW + "/a"), GUID.generate(), - SimpleAVMPromoteAction.NAME); - action.setParameterValue(SimpleAVMPromoteAction.PARAM_TARGET_STORE, "main"); - final SimpleAVMPromoteAction promote = (SimpleAVMPromoteAction) fContext.getBean("simple-avm-promote"); - class TxnWork implements RetryingTransactionCallback - { - public Object execute() throws Exception - { - promote.execute(action, AVMNodeConverter.ToNodeRef(-1, "source:/" + JNDIConstants.DIR_DEFAULT_WWW + "/a")); - return null; - } - } - ; - TransactionService transactionService = (TransactionService) fContext.getBean("transactionService"); - transactionService.getRetryingTransactionHelper().doInTransaction(new TxnWork()); - - assertEquals(0, fSyncService.compare(-1, "source:/" + JNDIConstants.DIR_DEFAULT_WWW, -1, "main:/" + JNDIConstants.DIR_DEFAULT_WWW, null).size()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("source"); - } - } - - /** - * Test the SimpleAVMSubmitAction. - * - * @deprecated see org.alfresco.wcm.actions.WCMSandboxSubmitAction or org.alfesco.wcm.SandboxService.submit - */ - public void testSubmitAction() throws Exception - { - // NOTE: it is implied that the sandboxes follow WCM naming conventions - final String STAGING = "foo"; - final String SANDBOX = "foo--sandbox"; - - try - { - fService.createStore(STAGING); - fService.createDirectory(STAGING+":/", JNDIConstants.DIR_DEFAULT_WWW); - fService.createDirectory(STAGING+":/" + JNDIConstants.DIR_DEFAULT_WWW, "a"); - fService.createDirectory(STAGING+":/" + JNDIConstants.DIR_DEFAULT_WWW + "/a", "b"); - fService.createDirectory(STAGING+":/" + JNDIConstants.DIR_DEFAULT_WWW + "/a/b", "c"); - fService.createFile(STAGING+":/" + JNDIConstants.DIR_DEFAULT_WWW + "/a/b/c", "foo").close(); - fService.createFile(STAGING+":/" + JNDIConstants.DIR_DEFAULT_WWW + "/a/b/c", "bar").close(); - - fService.createStore(SANDBOX); - fService.setStoreProperty(SANDBOX, SandboxConstants.PROP_WEBSITE_NAME, new PropertyValue(null, STAGING)); // note: it is implied that the website name is the same as staging name - fService.createLayeredDirectory(STAGING+":/" + JNDIConstants.DIR_DEFAULT_WWW, SANDBOX+":/", JNDIConstants.DIR_DEFAULT_WWW); - fService.createFile(SANDBOX+":/" + JNDIConstants.DIR_DEFAULT_WWW, "figs").close(); - fService.getFileOutputStream(SANDBOX+":/" + JNDIConstants.DIR_DEFAULT_WWW + "/a/b/c/foo").close(); - fService.removeNode(SANDBOX+":/" + JNDIConstants.DIR_DEFAULT_WWW + "/a/b/c/bar"); - - List diffs = fSyncService.compare(-1, SANDBOX+":/" + JNDIConstants.DIR_DEFAULT_WWW, -1, STAGING+":/" + JNDIConstants.DIR_DEFAULT_WWW, null); - assertEquals(3, diffs.size()); - assertEquals("["+SANDBOX+":/www/a/b/c/bar[-1] > "+STAGING+":/www/a/b/c/bar[-1], "+SANDBOX+":/www/a/b/c/foo[-1] > "+STAGING+":/www/a/b/c/foo[-1], "+SANDBOX+":/www/figs[-1] > "+STAGING+":/www/figs[-1]]", diffs.toString()); - - final SimpleAVMSubmitAction action = (SimpleAVMSubmitAction) fContext.getBean("simple-avm-submit"); - class TxnWork implements RetryingTransactionCallback - { - public Object execute() throws Exception - { - action.execute(null, AVMNodeConverter.ToNodeRef(-1, SANDBOX+":/" + JNDIConstants.DIR_DEFAULT_WWW)); - return null; - } - }; - - TransactionService transactionService = (TransactionService) fContext.getBean("transactionService"); - transactionService.getRetryingTransactionHelper().doInTransaction(new TxnWork()); - - diffs = fSyncService.compare(-1, SANDBOX+":/" + JNDIConstants.DIR_DEFAULT_WWW, -1, STAGING+":/" + JNDIConstants.DIR_DEFAULT_WWW, null); - - assertEquals(0, diffs.size()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore(STAGING); - fService.purgeStore(SANDBOX); - } - } - - /** - * Test one argument remove. - */ - public void testOneArgRemove() throws Exception - { - try - { - setupBasicTree(); - fService.removeNode("main:/a/b/c/foo/"); - fService.removeNode("main:/d"); - fService.createSnapshot("main", null, null); - - StoreRef storeRef = AVMNodeConverter.ToStoreRef("main"); - - // Text index - SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true); - ResultSet results = searchService.query(storeRef, "lucene", "TEXT:\"I am main\""); - assertEquals(1, results.length()); - results.close(); - - // Basic properties - - // Note "a" is a stop word and therefore not findable ... - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":\"foo\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":foo"); - assertEquals(0, results.length()); - results.close(); - - // TODO: Fix auth in AVMDiskDriver and more?? - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_CREATOR) + ":admin"); - if (results.length() == 7) - { - for (ResultSetRow row : results) - { - System.out.println(row.getNodeRef()); - } - } - assertEquals(5, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_MODIFIER) + ":admin"); - assertEquals(5, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_OWNER) + ":admin"); - assertEquals(5, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NODE_UUID) + ":unknown"); - assertEquals(5, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_PROTOCOL) + ":avm"); - assertEquals(5, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_IDENTIFIER) + ":" + "main"); - assertEquals(5, results.length()); - results.close(); - - // Basic paths - - results = searchService.query(storeRef, "lucene", "PATH:\"/\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/foo\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/bar\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/f\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(5, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//*\""); - assertEquals(4, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//.\""); - assertEquals(4, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//*\""); - assertEquals(3, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//c/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*\""); - assertEquals(0, results.length()); - results.close(); - - try - { - fService.removeNode("main://"); - fail(); - } - catch (AVMException e) - { - // Do nothing. - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - } - } - - /** - * Test that non head version sources are update correctly. - */ - public void testVersionUpdate() throws Exception - { - //String LOAD_DIR1 = "config/alfresco/bootstrap"; - //String LOAD_DIR2 = "config/alfresco/extension"; - - String LOAD_DIR1 = getSourceFolder()+"/org/alfresco/repo/avm/actions"; - String LOAD_DIR2 = getSourceFolder()+"/org/alfresco/repo/avm/ibatis"; - - String[] split1 = LOAD_DIR1.split("/"); - String DIR1 = split1[split1.length-1]; - - String[] split2 = LOAD_DIR2.split("/"); - String DIR2 = split2[split2.length-1]; - - - try - { - BulkLoader loader = new BulkLoader(); - loader.setAvmService(fService); - fService.createStore("source"); - fService.createStore("dest"); - - loader.recursiveLoad(LOAD_DIR1, "source:/"); - int version1 = fService.createSnapshot("source", null, null).get("source"); - loader.recursiveLoad(LOAD_DIR2, "source:/"); - int version2 = fService.createSnapshot("source", null, null).get("source"); - List diffs = fSyncService.compare(version1, "source:/", -1, "dest:/", null); - fService.createSnapshot("dest", null, null); - assertEquals(1, diffs.size()); - assertEquals("[source:/"+DIR1+"[1] > dest:/"+DIR1+"[-1]]", diffs.toString()); - fSyncService.update(diffs, null, false, false, false, false, null, null); - diffs = fSyncService.compare(version1, "source:/", -1, "dest:/", null); - assertEquals(0, diffs.size()); - diffs = fSyncService.compare(version2, "source:/", -1, "dest:/", null); - assertEquals(1, diffs.size()); - assertEquals("[source:/"+DIR2+"[2] > dest:/"+DIR2+"[-1]]", diffs.toString()); - fSyncService.update(diffs, null, false, false, false, false, null, null); - fService.createSnapshot("dest", null, null); - diffs = fSyncService.compare(version2, "source:/", -1, "dest:/", null); - assertEquals(0, diffs.size()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("source"); - fService.purgeStore("dest"); - } - } - - /** - * Test that branching forces a snapshot on the source repository. - */ - public void testBranchSnapshot() throws Exception - { - try - { - setupBasicTree(); - fService.getFileOutputStream("main:/a/b/c/foo").close(); - fService.createBranch(-1, "main:/a", "main:/", "abranch"); - assertEquals(fService.lookup(-1, "main:/a/b/c/foo").getId(), fService.lookup(-1, "main:/abranch/b/c/foo").getId()); - fService.getFileOutputStream("main:/a/b/c/foo").close(); - assertTrue(fService.lookup(-1, "main:/a/b/c/foo").getId() != fService.lookup(-1, "main:/abranch/b/c/foo").getId()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test of Descriptor indirection field. - */ - public void testDescriptorIndirection() throws Exception - { - try - { - setupBasicTree(); - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createFile("main:/layer/b/c", "bambino").close(); - AVMNodeDescriptor desc = fService.lookup(-1, "main:/layer"); - assertEquals("main:/a", desc.getIndirection()); - Map list = fService.getDirectoryListing(-1, "main:/"); - assertEquals("main:/a", list.get("layer").getIndirection()); - desc = fService.lookup(-1, "main:/layer/b"); - assertEquals("main:/a/b", desc.getIndirection()); - list = fService.getDirectoryListing(-1, "main:/layer"); - assertEquals("main:/a/b", list.get("b").getIndirection()); - list = fService.getDirectoryListingDirect(-1, "main:/layer"); - assertEquals("main:/a/b", list.get("b").getIndirection()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test link AVMService call. - */ - public void testLink() throws Exception - { - try - { - setupBasicTree(); - // Just try linking /a/b/c/foo into /a/b - fService.link("main:/a/b", "foo", fService.lookup(-1, "main:/a/b/c/foo")); - assertEquals(fService.lookup(-1, "main:/a/b/c/foo").getId(), fService.lookup(-1, "main:/a/b/foo").getId()); - // Try linking /a/b/c/bar to /a/b/foo. It should fail. - System.out.println(recursiveList("main", -1, true)); - try - { - fService.link("main:/a/b", "foo", fService.lookup(-1, "main:/a/b/c/bar")); - fail(); - } - catch (AVMExistsException e) - { - // Do nothing. It's OK. - } - // Delete /a/b/foo, and link /a/b/c/foo into /a/b. This checks that - // a deleted node is no impediment. - fService.removeNode("main:/a/b", "foo"); - fService.link("main:/a/b", "foo", fService.lookup(-1, "main:/a/b/c/foo")); - assertEquals(fService.lookup(-1, "main:/a/b/c/foo").getId(), fService.lookup(-1, "main:/a/b/foo").getId()); - // Delete /a/b/foo again in prep for layer tests. - fService.removeNode("main:/a/b", "foo"); - System.out.println(recursiveList("main", -1, true)); - fService.createSnapshot("main", null, null); - // Create a layer do a link from /layer/b/c/bar to /layer/b - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.link("main:/layer/b", "bar", fService.lookup(-1, "main:/layer/b/c/bar")); - assertEquals(fService.lookup(-1, "main:/layer/b/c/bar").getId(), fService.lookup(-1, "main:/layer/b/bar").getId()); - System.out.println(recursiveList("main", -1, true)); - // Now link /layer/b/c/foo into /layer/b. - fService.link("main:/layer/b", "foo", fService.lookup(-1, "main:/layer/b/c/foo")); - assertEquals(fService.lookup(-1, "main:/layer/b/c/foo").getId(), fService.lookup(-1, "main:/layer/b/foo").getId()); - // Make sure that the underlying layer is not mucked up. - assertTrue(fService.lookup(-1, "main:/a/b/foo", true).isDeleted()); - System.out.println(recursiveList("main", -1, true)); - // Try to link /layer/b/c/bar to /layer/b/c. It should fail. - try - { - fService.link("main:/layer/b", "bar", fService.lookup(-1, "main:/layer/b/c/bar")); - fail(); - } - catch (AVMExistsException e) - { - // Do nothing. - } - // Try to link /layer/b to /frinx. It should fail. - try - { - fService.link("main:/", "frinx", fService.lookup(-1, "main:/layer/b")); - fail(); - } - catch (AVMBadArgumentException ba) - { - // Do nothing. - } - // Delete /layer/b/bar and redo. It should work. - fService.removeNode("main:/layer/b", "bar"); - fService.link("main:/layer/b", "bar", fService.lookup(-1, "main:/layer/b/c/bar")); - assertEquals(fService.lookup(-1, "main:/layer/b/c/bar").getId(), fService.lookup(-1, "main:/layer/b/bar").getId()); - System.out.println(recursiveList("main", -1, true)); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test goofy paths. - */ - public void testGoofyPaths() throws Exception - { - try - { - setupBasicTree(); - fService.getFileInputStream(-1, "main://a/b/c/foo").close(); - fService.getDirectoryListing(-1, "main:/a/"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test getting deleted names. - */ - public void testGetDeleted() throws Exception - { - try - { - setupBasicTree(); - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - List deleted = fService.getDeleted(-1, "main:/layer/b/c"); - assertEquals(0, deleted.size()); - fService.removeNode("main:/a/b/c", "foo"); - fService.createSnapshot("main", null, null); - deleted = fService.getDeleted(-1, "main:/a/b/c"); - assertEquals(0, deleted.size()); - fService.removeNode("main:/layer/b/c", "bar"); - fService.createSnapshot("main", null, null); - deleted = fService.getDeleted(-1, "main:/layer/b/c"); - assertEquals(1, deleted.size()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test directly contained listing. - */ - public void testListingDirect() throws Exception - { - try - { - setupBasicTree(); - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - Map listing = fService.getDirectoryListingDirect(-1, "main:/layer"); - assertEquals(0, listing.size()); - listing = fService.getDirectoryListingDirect(-1, "main:/layer/b"); - assertEquals(0, listing.size()); - fService.createFile("main:/layer/b/c", "sigmoid").close(); - fService.createSnapshot("main", null, null); - listing = fService.getDirectoryListingDirect(-1, "main:/layer"); - assertEquals(1, listing.size()); - fService.createFile("main:/layer", "lepton").close(); - fService.createSnapshot("main", null, null); - listing = fService.getDirectoryListingDirect(-1, "main:/layer"); - assertEquals(2, listing.size()); - listing = fService.getDirectoryListingDirect(-1, "main:/layer/b/c"); - assertEquals(1, listing.size()); - listing = fService.getDirectoryListingDirect(-1, "main:/a/b/c"); - assertEquals(2, listing.size()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test layering info. - */ - public void testLayeringInfo() throws Exception - { - try - { - setupBasicTree(); - fService.createStore("layer"); - fService.createLayeredDirectory("main:/a", "layer:/", "alayer"); - fService.createSnapshot("layer", null, null); - LayeringDescriptor info = fService.getLayeringInfo(-1, "layer:/alayer"); - assertFalse(info.isBackground()); - assertEquals("layer", info.getPathAVMStore().getName()); - assertEquals("layer", info.getNativeAVMStore().getName()); - info = fService.getLayeringInfo(-1, "layer:/alayer/b/c"); - assertTrue(info.isBackground()); - assertEquals("layer", info.getPathAVMStore().getName()); - assertEquals("main", info.getNativeAVMStore().getName()); - fService.createFile("layer:/alayer/b", "figs").close(); - fService.createSnapshot("layer", null, null); - info = fService.getLayeringInfo(-1, "layer:/alayer/b/figs"); - assertFalse(info.isBackground()); - assertEquals("layer", info.getPathAVMStore().getName()); - assertEquals("layer", info.getNativeAVMStore().getName()); - info = fService.getLayeringInfo(-1, "layer:/alayer/b/c"); - assertTrue(info.isBackground()); - assertEquals("layer", info.getPathAVMStore().getName()); - assertEquals("main", info.getNativeAVMStore().getName()); - fService.createLayeredDirectory("layer:/alayer/b", "layer:/", "blayer"); - fService.createSnapshot("layer", null, null); - System.err.println(recursiveList("main", -1, true)); - System.err.println(recursiveList("layer", -1, true)); - info = fService.getLayeringInfo(-1, "layer:/blayer/c"); - assertEquals("main", info.getNativeAVMStore().getName()); - info = fService.getLayeringInfo(-1, "layer:/blayer/figs"); - assertEquals("layer", info.getNativeAVMStore().getName()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("layer"); - } - } - - /** - * Another test of renaming in a layer. - */ - public void testRenameLayer2() throws Exception - { - try - { - TreeMap history = new TreeMap(); - // Set up a basic hierarchy. - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createDirectory("main:/a", "c"); - fService.createFile("main:/a/b", "foo", new ByteArrayInputStream("I am foo.".getBytes())); - fService.createFile("main:/a/c", "bar", new ByteArrayInputStream("I am bar.".getBytes())); - fService.createSnapshot("main", null, null); - // History is unchanged. - checkHistory(history, "main"); - // Make a layer to a. - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - // History is unchanged. - checkHistory(history, "main"); - // /a and /layer should have identical contents. - assertEquals(recursiveContents("main:/a", -1, true), recursiveContents("main:/layer", -1, true)); - // Now rename /layer/c/bar to /layer/b/bar - fService.rename("main:/layer/c", "bar", "main:/layer/b", "bar"); - fService.createSnapshot("main", null, null); - // History is unchanged. - checkHistory(history, "main"); - // /layer/c should be empty. - Map listing = fService.getDirectoryListing(-1, "main:/layer/c"); - assertEquals(0, listing.size()); - // /layer/b should contain fao and bar - listing = fService.getDirectoryListing(-1, "main:/layer/b"); - assertEquals(2, listing.size()); - List list = new ArrayList(listing.keySet()); - assertEquals("bar", list.get(0)); - assertEquals("foo", list.get(1)); - // /a/b should contain foo. - listing = fService.getDirectoryListing(-1, "main:/a/b"); - assertEquals(1, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("foo", list.get(0)); - // /a/c should contain bar. - listing = fService.getDirectoryListing(-1, "main:/a/c"); - assertEquals(1, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("bar", list.get(0)); - // Now make a file in /a/b - fService.createFile("main:/a/b", "baz").close(); - fService.createSnapshot("main", null, null); - // History is unchanged. - checkHistory(history, "main"); - // /a/b should contain baz and foo. - listing = fService.getDirectoryListing(-1, "main:/a/b"); - assertEquals(2, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("baz", list.get(0)); - assertEquals("foo", list.get(1)); - // /layer/b should contain foo, bar, and baz. - listing = fService.getDirectoryListing(-1, "main:/layer/b"); - System.out.println(recursiveList("main", -1, true)); - assertEquals(3, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("bar", list.get(0)); - assertEquals("baz", list.get(1)); - assertEquals("foo", list.get(2)); - // Remove baz from /layer/b - fService.removeNode("main:/layer/b", "baz"); - fService.createSnapshot("main", null, null); - // History is unchanged. - checkHistory(history, "main"); - System.out.println(recursiveList("main", -1, true)); - // /layer/b should have bar and foo. - listing = fService.getDirectoryListing(-1, "main:/layer/b"); - assertEquals(2, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("bar", list.get(0)); - assertEquals("foo", list.get(1)); - // /a/b should contain baz and foo as before. - listing = fService.getDirectoryListing(-1, "main:/a/b"); - assertEquals(2, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("baz", list.get(0)); - assertEquals("foo", list.get(1)); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Yet another test around rename in layers. - */ - public void testRenameLayer3() throws Exception - { - try - { - TreeMap history = new TreeMap(); - // Set up a handy hierarchy. - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createFile("main:/a/b", "foo").close(); - fService.createFile("main:/a/b", "bar").close(); - fService.createDirectory("main:/", "c"); - fService.createDirectory("main:/c", "d"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Make a layer over /a - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Move /c/d to /layer - fService.rename("main:/c", "d", "main:/layer", "d"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Now make a file in /layer/d - fService.createFile("main:/layer/d", "baz").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Make /a/d/figs and see the wackiness. - fService.createDirectory("main:/a", "d"); - fService.createFile("main:/a/d", "figs").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /layer/d should no contain baz and figs. - Map listing = fService.getDirectoryListing(-1, "main:/layer/d"); - assertEquals(2, listing.size()); - List list = new ArrayList(listing.keySet()); - assertEquals("baz", list.get(0)); - assertEquals("figs", list.get(1)); - for (String val : history.values()) - { - System.out.println(val); - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test the uncover operation. - */ - public void testUncover() throws Exception - { - try - { - TreeMap history = new TreeMap(); - // Set up a handy hierarchy. - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a/", "b"); - fService.createFile("main:/a/b", "foo").close(); - fService.createFile("main:/a/b", "bar").close(); - fService.createDirectory("main:/", "c"); - fService.createDirectory("main:/c", "d"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Make a layer over /a - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Move /c/d to /layer - fService.rename("main:/c", "d", "main:/layer", "d"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Make a file in /layer/d - fService.createFile("main:/layer/d", "baz").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Make /a/d/figs and see the wackiness. - fService.createDirectory("main:/a", "d"); - fService.createFile("main:/a/d", "figs").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /layer/d should now contain baz and figs. - Map listing = fService.getDirectoryListing(-1, "main:/layer/d"); - assertEquals(2, listing.size()); - List list = new ArrayList(listing.keySet()); - assertEquals("baz", list.get(0)); - assertEquals("figs", list.get(1)); - // Rename /layer/d to /layer/e and uncover /layer/d - System.out.println(recursiveContents("main:/", -1, true)); - fService.rename("main:/layer", "d", "main:/layer", "e"); - fService.uncover("main:/layer", "d"); - fService.createSnapshot("main", null, null); - System.out.println(recursiveContents("main:/", -1, true)); - // History unchanged. - checkHistory(history, "main"); - // /layer/d contains figs. - listing = fService.getDirectoryListing(-1, "main:/layer/d"); - assertEquals(1, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("figs", list.get(0)); - // /layer/e contains baz and figs. - listing = fService.getDirectoryListing(-1, "main:/layer/e"); - assertEquals(2, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("baz", list.get(0)); - assertEquals("figs", list.get(1)); - for (String val : history.values()) - { - System.out.println(val); - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Another test of renaming in a layer. - */ - public void testRenameLayer4() throws Exception - { - try - { - TreeMap history = new TreeMap(); - // Set up a handy hierarchy. - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createFile("main:/a/b", "foo").close(); - fService.createFile("main:/a/b", "bar").close(); - fService.createDirectory("main:/", "c"); - fService.createDirectory("main:/c", "d"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Make a layer over /a - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Move /layer/b to /b - fService.rename("main:/layer", "b", "main:/", "b"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Add something to /a/b and it should show up in /b. - fService.createFile("main:/a/b", "baz").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /b should have foo and bar and baz. - Map listing = fService.getDirectoryListing(-1, "main:/b"); - assertEquals(3, listing.size()); - List list = new ArrayList(listing.keySet()); - assertEquals("bar", list.get(0)); - assertEquals("baz", list.get(1)); - assertEquals("foo", list.get(2)); - // Add something to /a and it will show up in /layer. - fService.createFile("main:/a", "figs").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /layer should have figs in it. - listing = fService.getDirectoryListing(-1, "main:/layer"); - assertEquals(1, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("figs", list.get(0)); - for (String val : history.values()) - { - System.out.println(val); - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test branching within branches. - */ - public void testBranchesInBranches() throws Exception - { - try - { - TreeMap history = new TreeMap(); - // Set up a hierarchy. - setupBasicTree(); - // History unchanged. - checkHistory(history, "main"); - // Make a branch from /a - fService.createBranch(-1, "main:/a", "main:/", "abranch"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Make a branch in something that has been branched. - fService.createBranch(-1, "main:/a/b", "main:/a", "bbranch"); - fService.createSnapshot("main", null, null); - // History unchanged - checkHistory(history, "main"); - // Everything under /abranch should be identical in this version - // and the previous. - int version = fService.getNextVersionID("main"); - assertEquals(recursiveContents("main:/abranch", version - 1, true), recursiveContents("main:/abranch", version - 2, true)); - // Make a branch within a branch. - fService.createBranch(-1, "main:/abranch/b/c", "main:/abranch/b", "cbranch"); - fService.createSnapshot("main", null, null); - // History unchanged - checkHistory(history, "main"); - // Everything under /a should be unchanged between this version and the last. - version = fService.getNextVersionID("main"); - assertEquals(recursiveContents("main:/a", version - 1, true), recursiveContents("main:/a", version - 2, true)); - // Make a branch to something outside of a branch inside a branch. - fService.createBranch(-1, "main:/d", "main:/abranch", "dbranch"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Make something ind /abranch/dbranch. - fService.createFile("main:/abranch/dbranch/e/f", "baz").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // d should not have changed since the previous version. - version = fService.getNextVersionID("main"); - assertEquals(recursiveContents("main:/d", version - 1, true), recursiveContents("main:/d", version - 2, true)); - for (String val : history.values()) - { - System.out.println(val); - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test layers inside of layers. - */ - public void testLayersInLayers() throws Exception - { - try - { - TreeMap history = new TreeMap(); - setupBasicTree(); - // History unchanged. - checkHistory(history, "main"); - // Create a layer to /a - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Make a layer inside of a layer pointing to d. - fService.createLayeredDirectory("main:/d", "main:/layer", "under"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Create a file in /layer/under/e/f. - fService.createFile("main:/layer/under/e/f", "baz").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Create a file in /d/e. - fService.createFile("main:/d/e", "bow").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /layer/under/e should contain bow and f. - Map listing = fService.getDirectoryListing(-1, "main:/layer/under/e"); - assertEquals(2, listing.size()); - List list = new ArrayList(listing.keySet()); - assertEquals("bow", list.get(0)); - assertEquals("f", list.get(1)); - // Put a new set of dirs in to be made into a layering under d. - fService.createDirectory("main:/", "g"); - fService.createDirectory("main:/g", "h"); - fService.createDirectory("main:/g/h", "i"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Make a layer in /d to /g. - fService.createLayeredDirectory("main:/g", "main:/d", "gover"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /d/gover should be identical to /layer/under/gover - assertEquals(recursiveContents("main:/d/gover", -1, true), recursiveContents("main:/layer/under/gover", -1, true)); - // Create a file in /layer/under/gover/h/i - fService.createFile("main:/layer/under/gover/h/i", "moo").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /d should be unchanged before this version and the last - // and /g should be unchanged between this version and the last. - int version = fService.getNextVersionID("main"); - // TODO Need an equivalent test that won't mind the version number change - // assertEquals(recursiveContents("main:/d", version - 1, true), - // recursiveContents("main:/d", version - 2, true)); - // assertEquals(recursiveContents("main:/g", version - 1, true), - // recursiveContents("main:/g", version - 2, true)); - // Add a file through /d/gover/h/i - fService.createFile("main:/d/gover/h/i", "cow").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /g should not have changed since its last version. - version = fService.getNextVersionID("main"); - assertEquals(recursiveContents("main:/g", version - 1, true), recursiveContents("main:/g", version - 2, true)); - // /layer/under/gover/h/i shows both moo and cow. - listing = fService.getDirectoryListing(-1, "main:/layer/under/gover/h/i"); - assertEquals(2, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("cow", list.get(0)); - assertEquals("moo", list.get(1)); - // Rename /layer/under/gover to /layer/b/gover and see what happens. - fService.rename("main:/layer/under", "gover", "main:/layer/b", "gover"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // moo should be in /layer/b/gover/h/i - listing = fService.getDirectoryListing(-1, "main:/layer/b/gover/h/i"); - assertEquals(1, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("moo", list.get(0)); - // Add a new file to /layer/b/gover/h/i - fService.createFile("main:/layer/b/gover/h/i", "oink").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /layer/b/gover/h/i should contain moo, oink. - listing = fService.getDirectoryListing(-1, "main:/layer/b/gover/h/i"); - assertEquals(2, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("moo", list.get(0)); - assertEquals("oink", list.get(1)); - for (String val : history.values()) - { - System.out.println(val); - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test behavior when one branches a layer. - */ - public void testLayerAndBranch() throws Exception - { - try - { - TreeMap history = new TreeMap(); - // Create a basic tree. - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createDirectory("main:/a/b", "c"); - fService.createFile("main:/a/b/c", "foo").close(); - fService.createFile("main:/a/b/c", "bar").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Create a layer over /a - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /a and /layer should have identical contents. - assertEquals(recursiveContents("main:/a", -1, true), recursiveContents("main:/layer", -1, true)); - // Make a modification in /layer - fService.createFile("main:/layer/b", "baz").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Branch off layer. - fService.createBranch(-1, "main:/layer", "main:/", "branch"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /layer/b and /branch/b should have identical contents. - assertEquals(recursiveContents("main:/layer/b", -1, true), recursiveContents("main:/branch/b", -1, true)); - // Create /branch/b/c/foo - fService.createFile("main:/branch/b/c", "baz").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /layer should not have changed. - int version = fService.getNextVersionID("main"); - assertEquals(recursiveContents("main:/layer", version - 1, true), recursiveContents("main:/layer", version - 2, true)); - // Change something in /layer - fService.createFile("main:/layer/b/c", "fig").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /branch should not have changed. - version = fService.getNextVersionID("main"); - assertEquals(recursiveContents("main:/branch", version - 1, true), recursiveContents("main:/branch", version - 2, true)); - // Create another layer on /a - fService.createLayeredDirectory("main:/a", "main:/", "layer2"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Branch from /layer2/b. - fService.createBranch(-1, "main:/layer2/b", "main:/", "branch2"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Create something in the branch. - fService.createFile("main:/branch2", "goofy").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /layer2 should be unchanged. - version = fService.getNextVersionID("main"); - assertEquals(recursiveContents("main:/layer2", version - 1, true), recursiveContents("main:/layer2", version - 2, true)); - // Remove something from /layer2 - fService.removeNode("main:/layer2/b/c", "foo"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /branch2 is unchanged. - version = fService.getNextVersionID("main"); - assertEquals(recursiveContents("main:/branch2", version - 1, true), recursiveContents("main:/branch2", version - 2, true)); - // /a is unchanged. - assertEquals(recursiveContents("main:/a", version - 1, true), recursiveContents("main:/a", version - 2, true)); - for (String val : history.values()) - { - System.out.println(val); - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test scenario in which something is renamed from inside one independent layer to another. - */ - public void testRenameLayerToLayer() throws Exception - { - try - { - TreeMap history = new TreeMap(); - // Set up two trees - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createDirectory("main:/a/b", "c"); - fService.createFile("main:/a/b/c", "foo").close(); - fService.createFile("main:/a/b/c", "bar").close(); - fService.createDirectory("main:/", "d"); - fService.createDirectory("main:/d", "e"); - fService.createDirectory("main:/d/e", "f"); - fService.createFile("main:/d/e/f", "moo").close(); - fService.createFile("main:/d/e/f", "cow").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Make a layer to /a and a layer to /d - fService.createLayeredDirectory("main:/a", "main:/", "la"); - fService.createLayeredDirectory("main:/d", "main:/", "ld"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Move /la/b/c to /ld/e/c. - fService.rename("main:/la/b", "c", "main:/ld/e", "c"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Create file /ld/e/c/baz. - fService.createFile("main:/ld/e/c", "baz").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Here's the thing we'd like to assert. - assertEquals("main:/a/b/c", fService.lookup(-1, "main:/ld/e/c").getIndirection()); - for (String val : history.values()) - { - System.out.println(val); - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test Nothing. Just make sure set up works. - */ - public void testNothing() throws Exception - { - } - - /** - * Test making a simple directory. - */ - public void testCreateDirectory() throws Exception - { - try - { - fService.createDirectory("main:/", "testdir"); - fService.createSnapshot("main", null, null); - assertEquals(AVMNodeType.PLAIN_DIRECTORY, fService.lookup(-1, "main:/").getType()); - - StoreRef storeRef = AVMNodeConverter.ToStoreRef("main"); - - // Text index - SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true); - ResultSet results = searchService.query(storeRef, "lucene", "@cm\\:name:testdir"); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(2, results.length()); - results.close(); - - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test creating a file. - */ - public void testCreateFile() throws Exception - { - try - { - testCreateDirectory(); - fService.createFile("main:/testdir", "testfile").close(); - fService.createFile("main:/", "testfile2").close(); - fService.createSnapshot("main", null, null); - - StoreRef storeRef = AVMNodeConverter.ToStoreRef("main"); - - // Text index - SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true); - ResultSet results = searchService.query(storeRef, "lucene", "@cm\\:name:testfile"); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "@cm\\:name:testfile2"); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "TEXT:\"This is testdir/testfile\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "TEXT:\"This is testfile2\""); - assertEquals(0, results.length()); - results.close(); - - ContentWriter writer = fService.getContentWriter("main:/testdir/testfile", true); - writer.setEncoding("UTF-8"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - PrintStream out = new PrintStream(writer.getContentOutputStream()); - out.println("This is testdir/testfile"); - out.close(); - - out = new PrintStream(fService.getFileOutputStream("main:/testfile2")); - - writer = fService.getContentWriter("main:/testfile2", true); - writer.setEncoding("UTF-8"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - out = new PrintStream(writer.getContentOutputStream()); - out.println("This is testfile2"); - out.close(); - fService.createSnapshot("main", null, null); - - results = searchService.query(storeRef, "lucene", "TEXT:\"This is testdir/testfile\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "TEXT:\"This is testfile2\""); - assertEquals(1, results.length()); - results.close(); - - List versions = fService.getStoreVersions("main"); - for (VersionDescriptor version : versions) - { - System.out.println("V:" + version.getVersionID()); - System.out.println(recursiveList("main", version.getVersionID(), true)); - } - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/testdir/testfile"))); - String line = reader.readLine(); - assertEquals("This is testdir/testfile", line); - reader.close(); - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/testfile2"))); - line = reader.readLine(); - assertEquals("This is testfile2", line); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test creating a branch. - */ - public void testCreateBranch() throws Exception - { - try - { - setupBasicTree(); - fService.createBranch(-1, "main:/a", "main:/d/e", "abranch"); - fService.createSnapshot("main", null, null); - List versions = fService.getStoreVersions("main"); - for (VersionDescriptor version : versions) - { - System.out.println("V:" + version.getVersionID()); - System.out.println(recursiveList("main", version.getVersionID(), true)); - } - String original = recursiveList("main:/a", -1, 0, true); - original = original.substring(original.indexOf('\n')); - String branch = recursiveList("main:/d/e/abranch", -1, 0, true); - branch = branch.substring(branch.indexOf('\n')); - assertEquals(original, branch); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test creating a layer. - */ - public void testCreateLayer() throws Exception - { - try - { - setupBasicTree(); - fService.createLayeredDirectory("main:/a", "main:/d/e", "alayer"); - fService.createSnapshot("main", null, null); - System.out.println(recursiveList("main", -1, true)); - assertEquals("main:/a", fService.getIndirectionPath(-1, "main:/d/e/alayer")); - assertEquals(recursiveContents("main:/a", -1, true), recursiveContents("main:/d/e/alayer", -1, true)); - PrintStream out = new PrintStream(fService.getFileOutputStream("main:/d/e/alayer/b/c/foo")); - out.println("I am main:/d/e/alayer/b/c/foo"); - out.close(); - fService.createSnapshot("main", null, null); - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/a/b/c/foo"))); - String line = reader.readLine(); - reader.close(); - assertEquals("I am main:/a/b/c/foo", line); - System.out.println(recursiveList("main", -1, true)); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test creating a layered file. - */ - public void testLayeredFile1() throws Exception - { - try - { - setupBasicTree(); - fService.createLayeredFile("main:/a/b/c/foo", "main:/d", "lfoo"); - assertTrue(fService.lookup(-1, "main:/d/lfoo").isLayeredFile()); - fService.createSnapshot("main", null, null); - System.out.println(recursiveList("main", -1, true)); - assertEquals("main:/a/b/c/foo", fService.lookup(-1, "main:/d/lfoo").getIndirection()); - assertTrue(fService.lookup(-1, "main:/d/lfoo").isLayeredFile()); - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/d/lfoo"))); - String line = reader.readLine(); - reader.close(); - assertEquals("I am main:/a/b/c/foo", line); - PrintStream out = new PrintStream(fService.getFileOutputStream("main:/d/lfoo")); - out.println("I am main:/d/lfoo"); - out.close(); - assertFalse(fService.lookup(-1, "main:/d/lfoo").isLayeredFile()); - fService.createSnapshot("main", null, null); - System.out.println(recursiveList("main", -1, true)); - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/a/b/c/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/a/b/c/foo", line); - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/d/lfoo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/d/lfoo", line); - assertFalse(fService.lookup(-1, "main:/d/lfoo").isLayeredFile()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - public void testLayeredFile2() throws Exception - { - try - { - AVMNodeDescriptor desc = fService.lookup(-1, "main:/foo"); - assertNull(desc); - - try - { - fService.getFileOutputStream("main:/foo"); - fail("Unexpected"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - try - { - fService.getFileInputStream(-1, "main:/foo"); - fail("Unexpected"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - // create plain file - fService.createFile("main:/", "foo").close(); - - assertEquals(1, fService.lookup(-1, "main:/foo").getVersionID()); - - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/foo"))); - String line = reader.readLine(); - reader.close(); - assertNull(line); - - PrintStream out = new PrintStream(fService.getFileOutputStream("main:/foo")); - out.println("I am main:/foo V1a"); - out.close(); - - // update plain file - - out = new PrintStream(fService.getFileOutputStream("main:/foo")); - out.println("I am main:/foo V1b"); - out.close(); - - out = new PrintStream(fService.getFileOutputStream("main:/foo")); - out.println("I am main:/foo V1c"); - out.close(); - - assertEquals(1, fService.lookup(-1, "main:/foo").getVersionID()); - - fService.createSnapshot("main", null, null); - - assertEquals(1, fService.lookup(-1, "main:/foo").getVersionID()); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V1c", line); - - // update plain file - - out = new PrintStream(fService.getFileOutputStream("main:/foo")); - out.println("I am main:/foo V2a"); - out.close(); - - assertEquals(2, fService.lookup(-1, "main:/foo").getVersionID()); - - out = new PrintStream(fService.getFileOutputStream("main:/foo")); - out.println("I am main:/foo V2b"); - out.close(); - - assertEquals(2, fService.lookup(-1, "main:/foo").getVersionID()); - - fService.createSnapshot("main", null, null); - - assertEquals(2, fService.lookup(-1, "main:/foo").getVersionID()); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V2b", line); - - // update plain file - out = new PrintStream(fService.getFileOutputStream("main:/foo")); - out.println("I am main:/foo V3"); - out.close(); - - assertEquals(3, fService.lookup(-1, "main:/foo").getVersionID()); - - fService.createSnapshot("main", null, null); - - assertEquals(3, fService.lookup(-1, "main:/foo").getVersionID()); - - try - { - fService.createLayeredFile("main:/foo", "main:/", "foo"); - fail("Unexpected"); - } - catch (AVMExistsException ee) - { - // expected - } - - // create layered file - fService.createLayeredFile("main:/foo", "main:/", "lfoo"); - - assertEquals(3, fService.lookup(-1, "main:/foo").getVersionID()); - assertEquals(1, fService.lookup(-1, "main:/lfoo").getVersionID()); - assertTrue(fService.lookup(-1, "main:/lfoo").isLayeredFile()); - - assertEquals("main:/foo", fService.lookup(-1, "main:/lfoo").getIndirection()); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V3", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/lfoo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V3", line); - - fService.createSnapshot("main", null, null); - - assertEquals(3, fService.lookup(-1, "main:/foo").getVersionID()); - assertEquals(1, fService.lookup(-1, "main:/lfoo").getVersionID()); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V3", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/lfoo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V3", line); - - // update plain file - out = new PrintStream(fService.getFileOutputStream("main:/foo")); - out.println("I am main:/foo V4"); - out.close(); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V4", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/lfoo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V4", line); - - assertEquals(4, fService.lookup(-1, "main:/foo").getVersionID()); - assertEquals(1, fService.lookup(-1, "main:/lfoo").getVersionID()); - - fService.createSnapshot("main", null, null); - - assertEquals(4, fService.lookup(-1, "main:/foo").getVersionID()); - assertEquals(2, fService.lookup(-1, "main:/lfoo").getVersionID()); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V4", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/lfoo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V4", line); - - // update plain file - - out = new PrintStream(fService.getFileOutputStream("main:/foo")); - out.println("I am main:/foo V5a"); - out.close(); - - out = new PrintStream(fService.getFileOutputStream("main:/foo")); - out.println("I am main:/foo V5b"); - out.close(); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V5b", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/lfoo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V5b", line); - - assertEquals(5, fService.lookup(-1, "main:/foo").getVersionID()); - assertEquals(2, fService.lookup(-1, "main:/lfoo").getVersionID()); - - fService.createSnapshot("main", null, null); - - assertEquals(5, fService.lookup(-1, "main:/foo").getVersionID()); - assertEquals(3, fService.lookup(-1, "main:/lfoo").getVersionID()); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V5b", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/lfoo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V5b", line); - - // update plain file - out = new PrintStream(fService.getFileOutputStream("main:/foo")); - out.println("I am main:/foo V6"); - out.close(); - - assertEquals(6, fService.lookup(-1, "main:/foo").getVersionID()); - assertEquals(3, fService.lookup(-1, "main:/lfoo").getVersionID()); - - fService.createSnapshot("main", null, null); - - assertEquals(6, fService.lookup(-1, "main:/foo").getVersionID()); - assertEquals(4, fService.lookup(-1, "main:/lfoo").getVersionID()); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V6", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/lfoo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V6", line); - - // update layered file - out = new PrintStream(fService.getFileOutputStream("main:/lfoo")); - out.println("I am main:/lfoo V1"); - out.close(); - - assertEquals(6, fService.lookup(-1, "main:/foo").getVersionID()); - assertEquals(5, fService.lookup(-1, "main:/lfoo").getVersionID()); - assertFalse(fService.lookup(-1, "main:/lfoo").isLayeredFile()); - - fService.createSnapshot("main", null, null); - - assertEquals(6, fService.lookup(-1, "main:/foo").getVersionID()); - assertEquals(5, fService.lookup(-1, "main:/lfoo").getVersionID()); - assertFalse(fService.lookup(-1, "main:/lfoo").isLayeredFile()); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V6", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/lfoo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/lfoo V1", line); - - // update layered file - out = new PrintStream(fService.getFileOutputStream("main:/lfoo")); - out.println("I am main:/lfoo V2"); - out.close(); - - assertEquals(6, fService.lookup(-1, "main:/foo").getVersionID()); - assertEquals(6, fService.lookup(-1, "main:/lfoo").getVersionID()); - assertFalse(fService.lookup(-1, "main:/lfoo").isLayeredFile()); - - fService.createSnapshot("main", null, null); - - assertEquals(6, fService.lookup(-1, "main:/foo").getVersionID()); - assertEquals(6, fService.lookup(-1, "main:/lfoo").getVersionID()); - assertFalse(fService.lookup(-1, "main:/lfoo").isLayeredFile()); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V6", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/lfoo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/lfoo V2", line); - - // remove plain file - fService.removeNode("main:/foo"); - - desc = fService.lookup(-1, "main:/foo"); - assertNull(desc); - - try - { - fService.getFileOutputStream("main:/foo"); - fail("Unexpected"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - try - { - fService.getFileInputStream(-1, "main:/foo"); - fail("Unexpected"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - fService.createSnapshot("main", null, null); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/lfoo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/lfoo V2", line); - - assertEquals(6, fService.lookup(-1, "main:/lfoo").getVersionID()); - - // remove layered file - fService.removeNode("main:/lfoo"); - - desc = fService.lookup(-1, "main:/lfoo"); - assertNull(desc); - - try - { - fService.getFileOutputStream("main:/lfoo"); - fail("Unexpected"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - try - { - fService.getFileInputStream(-1, "main:/lfoo"); - fail("Unexpected"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - fService.createSnapshot("main", null, null); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - public void testLayeredFile3() throws Exception - { - try - { - AVMNodeDescriptor desc = fService.lookup(-1, "main:/foo"); - assertNull(desc); - - try - { - fService.getFileOutputStream("main:/foo"); - fail("Unexpected"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - try - { - fService.getFileInputStream(-1, "main:/foo"); - fail("Unexpected"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - // create layered file (pointing nowhere) - fService.createLayeredFile("main:/foo", "main:/", "lfoo"); - - assertEquals(1, fService.lookup(-1, "main:/lfoo").getVersionID()); - - fService.createSnapshot("main", null, null); - - try - { - fService.getFileOutputStream("main:/lfoo"); - fail("Unexpected"); - } - catch (AVMException e) - { - // TODO - review - } - - try - { - fService.getFileInputStream(-1, "main:/lfoo"); - fail("Unexpected"); - } - catch (AVMException e) - { - // TODO - review - } - - // create plain file - fService.createFile("main:/", "foo").close(); - - assertEquals(1, fService.lookup(-1, "main:/foo").getVersionID()); - assertEquals(1, fService.lookup(-1, "main:/lfoo").getVersionID()); - - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/foo"))); - String line = reader.readLine(); - reader.close(); - assertNull(line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/lfoo"))); - line = reader.readLine(); - reader.close(); - assertNull(line); - - // update plain file - PrintStream out = new PrintStream(fService.getFileOutputStream("main:/foo")); - out.println("I am main:/foo V1"); - out.close(); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V1", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/lfoo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V1", line); - - assertEquals(1, fService.lookup(-1, "main:/foo").getVersionID()); - assertEquals(1, fService.lookup(-1, "main:/lfoo").getVersionID()); - - fService.createSnapshot("main", null, null); - - assertEquals(1, fService.lookup(-1, "main:/foo").getVersionID()); - assertEquals(2, fService.lookup(-1, "main:/lfoo").getVersionID()); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V1", line); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/lfoo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/foo V1", line); - - // remove plain file - fService.removeNode( "main:/foo"); - - desc = fService.lookup(-1, "main:/foo"); - assertNull(desc); - - try - { - fService.getFileOutputStream("main:/foo"); - fail("Unexpected"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - try - { - fService.getFileInputStream(-1, "main:/foo"); - fail("Unexpected"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - assertEquals(2, fService.lookup(-1, "main:/lfoo").getVersionID()); - - try - { - fService.getFileInputStream(-1, "main:/lfoo"); - fail("Unexpected"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - fService.createSnapshot("main", null, null); - - assertEquals(3, fService.lookup(-1, "main:/lfoo").getVersionID()); - - try - { - fService.getFileInputStream(-1, "main:/lfoo"); - fail("Unexpected"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - assertTrue(fService.lookup(-1, "main:/lfoo").isLayeredFile()); - assertFalse(fService.lookup(-1, "main:/lfoo").isPlainFile()); - - try - { - fService.getFileOutputStream("main:/lfoo"); - fail(); - } - catch (AVMException e) - { - // TODO - review - } - - // remove layered file - fService.removeNode("main:/lfoo"); - - fService.createSnapshot("main", null, null); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - public void testLayeredFile4() throws Exception - { - try - { - fService.createStore("mainA"); - fService.createStore("mainB"); - fService.createStore("mainB--layer"); - - fService.createDirectory("mainA:/", "a"); - fService.createDirectory("mainB:/", "a"); - - fService.createLayeredDirectory("mainB:/a", "mainB--layer:/", "a"); - - // note: unlike WCM, edit staging directly (ie. don't bother with mainA--layer for now) - fService.createFile("mainA:/a", "foo").close(); - - PrintStream out = new PrintStream(fService.getFileOutputStream("mainA:/a/foo")); - out.println("I am mainA:/a/foo"); - out.close(); - - fService.createSnapshot("mainA", null, null); - - // note: WCM does not expose layered file (between web project staging sandboxes) - fService.createLayeredFile("mainA:/a/foo", "mainB:/a", "foo"); - - - AVMNodeDescriptor foo = fService.lookup(-1, "mainB--layer:/a/foo"); - assertEquals(1, foo.getVersionID()); - assertTrue(foo.isLayeredFile()); - - ContentData cData = fService.getContentDataForRead(foo); - assertNotNull(cData); - - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB--layer:/a/foo"))); - String line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - - foo = fService.lookup(-1, "mainB:/a/foo"); - assertEquals(1, foo.getVersionID()); - assertTrue(foo.isLayeredFile()); - - cData = fService.getContentDataForRead(foo); - assertNotNull(cData); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainB:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - - - foo = fService.lookup(-1, "mainA:/a/foo"); - assertEquals(1, foo.getVersionID()); - assertTrue(foo.isPlainFile()); - - cData = fService.getContentDataForRead(foo); - assertNotNull(cData); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "mainA:/a/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am mainA:/a/foo", line); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("mainA"); - fService.purgeStore("mainB"); - fService.purgeStore("mainB--layer"); - } - } - - - /** - * Test rename. - */ - public void testRename() throws Exception - { - try - { - setupBasicTree(); - - // -ve test - try - { - // note: without trailing "/" - fService.rename("main:/a", "b", "main:/a/b", "b"); - fail("Renaming folder into itself should cause cycle exception"); - } - catch (AVMCycleException ace) - { - // ignore - expected - } - - // -ve test - try - { - // note: with trailing "/" - fService.rename("main:/a/", "b", "main:/a/b/", "b"); - fail("Renaming folder into itself should cause cycle exception"); - } - catch (AVMCycleException ace) - { - // ignore - expected - } - - // -ve test - try - { - fService.rename("main:/", "a", "main:/a/b", "c"); - fail("Renaming folder tree into itself should cause cycle exception"); - } - catch (AVMCycleException ace) - { - // ignore - expected - } - - fService.rename("main:/a", "b", "main:/d/e", "brenamed"); - fService.createSnapshot("main", null, null); - System.out.println(recursiveList("main", -1, true)); - assertEquals(recursiveContents("main:/a/b", 1, true), recursiveContents("main:/d/e/brenamed", 2, true)); - - // Test inedx update - - StoreRef storeRef = AVMNodeConverter.ToStoreRef("main"); - - // Text index - SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true); - ResultSet results = searchService.query(storeRef, "lucene", "TEXT:\"I am main\""); - assertEquals(2, results.length()); - results.close(); - - // Basic properties - - // Note "a" is a stop word and therefore not findable ... - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":\"foo\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":foo"); - assertEquals(1, results.length()); - results.close(); - - // TODO: Fix auth in AVMDiskDriver and more?? - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_CREATOR) + ":admin"); - - assertEquals(9, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_MODIFIER) + ":admin"); - assertEquals(9, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_OWNER) + ":admin"); - assertEquals(9, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NODE_UUID) + ":unknown"); - assertEquals(9, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_PROTOCOL) + ":avm"); - assertEquals(9, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_IDENTIFIER) + ":main"); - assertEquals(9, results.length()); - results.close(); - - // Basic paths - - results = searchService.query(storeRef, "lucene", "PATH:\"/\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/brenamed\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/brenamed/c\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/brenamed/c/foo\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/brenamed/c/bar\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/f\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(9, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//*\""); - assertEquals(8, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//.\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//*\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/*\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//c/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*/*\""); - assertEquals(0, results.length()); - results.close(); - - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test remove. - */ - public void testRemove() throws Exception - { - try - { - setupBasicTree(); - TreeMap history = new TreeMap(); - checkHistory(history, "main"); - System.out.println(history.get(0)); - fService.removeNode("main:/a/b/c", "foo"); - fService.createSnapshot("main", null, null); - checkHistory(history, "main"); - System.out.println(history.get(1)); - Map l = fService.getDirectoryListing(-1, "main:/a/b/c"); - assertEquals(1, l.size()); - fService.removeNode("main:/d", "e"); - fService.createSnapshot("main", null, null); - checkHistory(history, "main"); - System.out.println(history.get(2)); - l = fService.getDirectoryListing(-1, "main:/d"); - assertEquals(0, l.size()); - - // Text index - StoreRef storeRef = AVMNodeConverter.ToStoreRef("main"); - SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true); - ResultSet results = searchService.query(storeRef, "lucene", "TEXT:\"I am main\""); - assertEquals(1, results.length()); - results.close(); - - // Basic properties - - // Note "a" is a stop word and therefore not findable ... - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":\"foo\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NAME) + ":foo"); - assertEquals(0, results.length()); - results.close(); - - // TODO: Fix auth in AVMDiskDriver and more?? - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_CREATOR) + ":admin"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_MODIFIER) + ":admin"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_OWNER) + ":admin"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NODE_UUID) + ":unknown"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_PROTOCOL) + ":avm"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_IDENTIFIER) + ":" + "main"); - assertEquals(6, results.length()); - results.close(); - - // Basic paths - - results = searchService.query(storeRef, "lucene", "PATH:\"/\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/foo\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/bar\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/f\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//*\""); - assertEquals(5, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//.\""); - assertEquals(4, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//*\""); - assertEquals(3, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//c/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*\""); - assertEquals(0, results.length()); - results.close(); - - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test branching from one AVMStore to another. - */ - public void testBranchAcross() throws Exception - { - try - { - setupBasicTree(); - fService.createStore("second"); - List repos = fService.getStores(); - assertTrue(checkStoreExists("main", repos)); - assertTrue(checkStoreExists("second", repos)); - fService.createBranch(-1, "main:/", "second:/", "main"); - fService.createSnapshot("second", null, null); - System.out.println(recursiveList("second", -1, true)); - assertEquals(recursiveContents("main:/", -1, true), recursiveContents("second:/main", -1, true)); - // Now make sure nothing happens to the branched from place, - // if the branch is modified. - PrintStream out = new PrintStream(fService.getFileOutputStream("second:/main/a/b/c/foo")); - out.println("I am second:/main/a/b/c/foo"); - out.close(); - fService.createSnapshot("second", null, null); - System.out.println(recursiveList("second", -1, true)); - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/a/b/c/foo"))); - String line = reader.readLine(); - reader.close(); - assertEquals("I am main:/a/b/c/foo", line); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("second"); - } - } - - private boolean checkStoreExists(String storeName, List stores) - { - for (AVMStoreDescriptor store : stores) - { - if (store.getName().equals(storeName)) - { - return true; - } - } - return false; - } - - /** - * Test creating a layer across AVMStores. - */ - public void testLayerAcross() throws Exception - { - try - { - setupBasicTree(); - fService.createStore("second"); - fService.createLayeredDirectory("main:/", "second:/", "main"); - fService.createSnapshot("second", null, null); - System.out.println(recursiveList("second", -1, true)); - assertEquals(recursiveContents("main:/", -1, true), recursiveContents("second:/main", -1, true)); - // Now make sure that a copy on write will occur and - // that the underlying stuff doesn't get changed. - PrintStream out = new PrintStream(fService.getFileOutputStream("second:/main/a/b/c/foo")); - out.println("I am second:/main/a/b/c/foo"); - out.close(); - fService.createSnapshot("second", null, null); - System.out.println(recursiveList("second", -1, true)); - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "second:/main/a/b/c/foo"))); - String line = reader.readLine(); - reader.close(); - assertEquals("I am second:/main/a/b/c/foo", line); - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/a/b/c/foo"))); - line = reader.readLine(); - reader.close(); - assertEquals("I am main:/a/b/c/foo", line); - fService.purgeStore("second"); - fService.purgeVersion(1, "main"); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test rename across AVMStores. - */ - public void testRenameAcross() throws Exception - { - try - { - setupBasicTree(); - fService.createStore("second"); - fService.rename("main:/a/b", "c", "second:/", "cmoved"); - ArrayList toSnapshot = new ArrayList(); - toSnapshot.add("main"); - toSnapshot.add("second"); - System.out.println(recursiveList("main", -1, true)); - System.out.println(recursiveList("second", -1, true)); - // Check that the moved thing has identical contents to the thing it - // was moved from. - assertEquals(recursiveContents("main:/a/b/c", 1, true), recursiveContents("second:/cmoved", -1, true)); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("second"); - } - } - - /** - * Test COW in various circumstances. - */ - public void testDeepCOW() throws Exception - { - try - { - // Makes a layer on top of a layer on top of a plain directory. - // Assures that the correct layers are copied when files - // are added in the two layers. - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createSnapshot("main", null, null); - Map listing = fService.getDirectoryListing(-1, "main:/a"); - assertEquals(1, listing.size()); - List list = new ArrayList(listing.keySet()); - assertEquals("b", list.get(0)); - fService.createLayeredDirectory("main:/a", "main:/", "c"); - fService.createLayeredDirectory("main:/c", "main:/", "d"); - fService.createFile("main:/d/b", "foo.txt").close(); - fService.createSnapshot("main", null, null); - System.out.println(recursiveList("main", -1, true)); - listing = fService.getDirectoryListing(-1, "main:/d/b"); - assertEquals(1, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("foo.txt", list.get(0)); - fService.createFile("main:/c/b", "bar.txt").close(); - fService.createSnapshot("main", null, null); - System.out.println(recursiveList("main", -1, true)); - listing = fService.getDirectoryListing(-1, "main:/c/b"); - assertEquals(1, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("bar.txt", list.get(0)); - listing = fService.getDirectoryListing(-1, "main:/d/b"); - assertEquals(2, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("bar.txt", list.get(0)); - assertEquals("foo.txt", list.get(1)); - AVMNodeDescriptor[] arrayListing = fService.getDirectoryListingArray(-1, "main:/d/b", false); - assertEquals("bar.txt", arrayListing[0].getName()); - assertEquals("foo.txt", arrayListing[1].getName()); - fService.rename("main:/", "c", "main:/", "e"); - fService.createSnapshot("main", null, null); - System.out.println(recursiveList("main", -1, true)); - listing = fService.getDirectoryListing(-1, "main:/d/b"); - assertEquals(1, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("foo.txt", list.get(0)); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test branching and layering interaction. - */ - public void testBranchAndLayer() throws Exception - { - try - { - // Create a simple directory hierarchy. - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createFile("main:/a/b", "c.txt").close(); - fService.createFile("main:/a/b", "d.txt").close(); - fService.createFile("main:/a", "e.txt").close(); - fService.createSnapshot("main", null, null); - // Make a branch off of a. - fService.createBranch(-1, "main:/a", "main:/", "branch"); - fService.createSnapshot("main", null, null); - // The branch should contain exactly the same things as the thing - // it branched from. - assertEquals(recursiveContents("main:/a", -1, true), recursiveContents("main:/branch", -1, true)); - // Make a layer pointing to /branch/b - fService.createLayeredDirectory("main:/branch/b", "main:/", "layer"); - fService.createSnapshot("main", null, null); - // The new layer should contain exactly the same things as the thing it is layered to. - assertEquals(recursiveContents("main:/branch/b", -1, true), recursiveContents("main:/layer", -1, true)); - // Make a modification in /a/b, the original branch. - PrintStream out = new PrintStream(fService.getFileOutputStream("main:/a/b/c.txt")); - out.println("I am c, modified in main:/a/b."); - out.close(); - fService.createSnapshot("main", null, null); - // The layer should still have identical content to /branch/b. - assertEquals(recursiveContents("main:/branch/b", -1, true), recursiveContents("main:/layer", -1, true)); - // But the layer won't have contents identical to /a/b's - assertFalse(recursiveContents("main:/a/b", -1, true).equals(recursiveContents("main:/layer", -1, true))); - // Make a modification in /branch/b - out = new PrintStream(fService.getFileOutputStream("main:/branch/b/d.txt")); - out.println("I am d, modified in main:/branch/b"); - out.close(); - fService.createSnapshot("main", null, null); - // The layer contents should be identical to the latest contents of /branch/b. - assertEquals(recursiveContents("main:/branch/b", -1, true), recursiveContents("main:/layer", -1, true)); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test basic Layering. - */ - public void testLayering() throws Exception - { - try - { - // Make some directories; - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createDirectory("main:/a/b", "c"); - fService.createDirectory("main:/a/b/c", "d"); - fService.createSnapshot("main", null, null); - // Now make some layers. Three to be precise. - fService.createLayeredDirectory("main:/a", "main:/", "e"); - fService.createLayeredDirectory("main:/e", "main:/", "f"); - fService.createLayeredDirectory("main:/f", "main:/", "g"); - fService.createSnapshot("main", null, null); - // e, f, g should all have the same contents as a. - String a = recursiveContents("main:/a", -1, true); - String e = recursiveContents("main:/e", -1, true); - String f = recursiveContents("main:/f", -1, true); - String g = recursiveContents("main:/g", -1, true); - assertEquals(a, e); - assertEquals(a, f); - assertEquals(a, g); - // Now make a file in /g/b/c/d and /f/b/c/d - fService.createFile("main:/g/b/c/d", "foo").close(); - fService.createFile("main:/f/b/c/d", "bar").close(); - fService.createSnapshot("main", null, null); - // /g/b/c/d should contain foo and bar. - Map listing = fService.getDirectoryListing(-1, "main:/g/b/c/d"); - assertEquals(2, listing.size()); - List list = new ArrayList(listing.keySet()); - assertEquals("bar", list.get(0)); - assertEquals("foo", list.get(1)); - // /f/b/c/d should contain just bar. - listing = fService.getDirectoryListing(-1, "main:/f/b/c/d"); - assertEquals(1, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("bar", list.get(0)); - // Now do something in the bottom layer. - fService.createFile("main:/a/b/c", "baz").close(); - fService.createSnapshot("main", null, null); - // /e/b/c should contain baz and d - listing = fService.getDirectoryListing(-1, "main:/e/b/c"); - assertEquals(2, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("baz", list.get(0)); - assertEquals("d", list.get(1)); - // Now add something in the e layer. - fService.createFile("main:/e/b/c/d", "bing").close(); - fService.createSnapshot("main", null, null); - // /f/b/c/d should now contain bar and bing. - listing = fService.getDirectoryListing(-1, "main:/f/b/c/d"); - assertEquals(2, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("bar", list.get(0)); - assertEquals("bing", list.get(1)); - System.out.println(recursiveList("main", -1, true)); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test rename within a layer. - */ - public void testRenameInLayer() throws Exception - { - try - { - // Setup a base hierarchy. - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createDirectory("main:/a/b", "c"); - fService.createDirectory("main:/a", "d"); - fService.createSnapshot("main", null, null); - // Now make a layer to a. - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - // /layer should have the same contents as /a at this point. - assertEquals(recursiveContents("main:/a", -1, true), recursiveContents("main:/layer", -1, true)); - // Now we will rename /layer/d to /layer/moved - fService.rename("main:/layer", "d", "main:/layer", "moved"); - fService.createSnapshot("main", null, null); - // /layer should contain b and moved - Map listing = fService.getDirectoryListing(-1, "main:/layer"); - assertEquals(2, listing.size()); - List list = new ArrayList(listing.keySet()); - assertEquals("b", list.get(0)); - assertEquals("moved", list.get(1)); - // Now rename moved back to d. - fService.rename("main:/layer", "moved", "main:/layer", "d"); - fService.createSnapshot("main", null, null); - // /layer should contain b and d. - listing = fService.getDirectoryListing(-1, "main:/layer"); - assertEquals(2, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("b", list.get(0)); - assertEquals("d", list.get(1)); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test behavior of multiply layers not in register. - */ - public void testMultiLayerUnregistered() throws Exception - { - try - { - TreeMap history = new TreeMap(); - setupBasicTree(); - // History unchanged. - checkHistory(history, "main"); - // Create layered directory /d/e/f/ to /a - fService.createLayeredDirectory("main:/a", "main:/d/e/f", "l0"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Create layered directory /d/l1 to /d/e/f. - fService.createLayeredDirectory("main:/d/e/f", "main:/d", "l1"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Create layered directory /l2 to /d - fService.createLayeredDirectory("main:/d", "main:/", "l2"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Create /l2/l1/l0/a/foo. - fService.createFile("main:/l2/l1/l0/b", "foo").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /l2/l1/l0 should now point at /d/l1/l0 - assertEquals("main:/d/l1/l0", fService.lookup(-1, "main:/l2/l1/l0").getIndirection()); - // /l2/l1/l0/b should now point at /d/l1/l0/b - assertEquals("main:/d/l1/l0/b", fService.lookup(-1, "main:/l2/l1/l0/b").getIndirection()); - for (String val : history.values()) - { - System.out.println(val); - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test makePrimary. - */ - public void testMakePrimary() throws Exception - { - try - { - TreeMap history = new TreeMap(); - setupBasicTree(); - // History unchanged. - checkHistory(history, "main"); - // Make a layer to /a - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Make /layer/b/c primary. - fService.makePrimary("main:/layer/b/c"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Rename /layer/b/c to /layer/c - fService.rename("main:/layer/b", "c", "main:/layer", "c"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /a/b/c should have identical contents to /layer/c - assertEquals(recursiveContents("main:/a/b/c", -1, true), recursiveContents("main:/layer/c", -1, true)); - // Create /layer2 to /a. - fService.createLayeredDirectory("main:/a", "main:/", "layer2"); - // Make a file down in /layer2/b/c - fService.createFile("main:/layer2/b/c", "baz").close(); - // make /layer2/b/c primary. - fService.makePrimary("main:/layer2/b/c"); - // Rename /layer2/b/c to /layer2/c - fService.rename("main:/layer2/b", "c", "main:/layer2", "c"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /layer2/c should contain foo bar and baz. - Map listing = fService.getDirectoryListing(-1, "main:/layer2/c"); - assertEquals(3, listing.size()); - List list = new ArrayList(listing.keySet()); - assertEquals("bar", list.get(0)); - assertEquals("baz", list.get(1)); - assertEquals("foo", list.get(2)); - for (String val : history.values()) - { - System.out.println(val); - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test retargeting a directory. - */ - public void testRetarget() throws Exception - { - try - { - TreeMap history = new TreeMap(); - setupBasicTree(); - // History unchanged. - checkHistory(history, "main"); - // Make a layer to /a - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Retarget /layer/b/c to /d. - fService.retargetLayeredDirectory("main:/layer/b/c", "main:/d"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /layer/b/c should contain e. - Map listing = fService.getDirectoryListing(-1, "main:/layer/b/c"); - assertEquals(1, listing.size()); - List list = new ArrayList(listing.keySet()); - assertEquals("e", list.get(0)); - // Rename /layer/b/c to /layer/c - fService.rename("main:/layer/b", "c", "main:/layer", "c"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /d should have identical contents to /layer/c - assertEquals(recursiveContents("main:/d", -1, true), recursiveContents("main:/layer/c", -1, true)); - // Create /layer2 to /a. - fService.createLayeredDirectory("main:/a", "main:/", "layer2"); - // Make a file down in /layer2/b/c - fService.createFile("main:/layer2/b/c", "baz").close(); - // make /layer2/b/c primary. - fService.retargetLayeredDirectory("main:/layer2/b/c", "main:/d"); - // Rename /layer2/b/c to /layer2/c - fService.rename("main:/layer2/b", "c", "main:/layer2", "c"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /layer2/c should have baz and e in it. - listing = fService.getDirectoryListing(-1, "main:/layer2/c"); - assertEquals(2, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("baz", list.get(0)); - assertEquals("e", list.get(1)); - for (String val : history.values()) - { - System.out.println(val); - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test rename between branches. - */ - public void testRenameBranchToBranch() throws Exception - { - try - { - TreeMap history = new TreeMap(); - // Set up two trees - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createDirectory("main:/a/b", "c"); - fService.createFile("main:/a/b/c", "foo").close(); - fService.createFile("main:/a/b/c", "bar").close(); - fService.createDirectory("main:/", "d"); - fService.createDirectory("main:/d", "e"); - fService.createDirectory("main:/d/e", "f"); - fService.createFile("main:/d/e/f", "moo").close(); - fService.createFile("main:/d/e/f", "cow").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Make branches. - fService.createBranch(-1, "main:/a/b", "main:/", "abranch"); - fService.createBranch(-1, "main:/d/e", "main:/", "dbranch"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Move /abranch/c/foo /dbranch/foo - fService.rename("main:/abranch/c", "foo", "main:/dbranch", "foo"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Confirm that /a and /d are unchanged. - int version = fService.getNextVersionID("main"); - assertEquals(recursiveContents("main:/a", version - 1, true), recursiveContents("main:/a", version - 2, true)); - assertEquals(recursiveContents("main:/d", version - 1, true), recursiveContents("main:/d", version - 2, true)); - // Move /dbranch/f to /abranch/c/f - fService.rename("main:/dbranch", "f", "main:/abranch/c", "f"); - fService.createSnapshot("main", null, null); - // Confirm that /a and /d are unchanged. - version = fService.getNextVersionID("main"); - assertEquals(recursiveContents("main:/a", version - 1, true), recursiveContents("main:/a", version - 2, true)); - assertEquals(recursiveContents("main:/d", version - 1, true), recursiveContents("main:/d", version - 2, true)); - // History unchanged. - checkHistory(history, "main"); - for (String val : history.values()) - { - System.out.println(val); - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test a branch being created in a layer. - */ - public void testBranchIntoLayer() throws Exception - { - try - { - TreeMap history = new TreeMap(); - // Set up two trees - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createDirectory("main:/a/b", "c"); - fService.createFile("main:/a/b/c", "foo").close(); - fService.createFile("main:/a/b/c", "bar").close(); - fService.createDirectory("main:/", "d"); - fService.createDirectory("main:/d", "e"); - fService.createDirectory("main:/d/e", "f"); - fService.createFile("main:/d/e/f", "moo").close(); - fService.createFile("main:/d/e/f", "cow").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Create a layer to /a - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Now create a branch from /d in /layer/a/b. - fService.createBranch(-1, "main:/d", "main:/layer/b", "branch"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Now modify /layer/b/branch/e/f/moo. - PrintStream out = new PrintStream(fService.getFileOutputStream("main:/layer/b/branch/e/f/moo")); - out.println("moo modified."); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /layer/b/branch/e/f should contain moo and cow. - Map listing = fService.getDirectoryListing(-1, "main:/layer/b/branch/e/f"); - assertEquals(2, listing.size()); - List list = new ArrayList(listing.keySet()); - assertEquals("cow", list.get(0)); - assertEquals("moo", list.get(1)); - for (String val : history.values()) - { - System.out.println(val); - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test renaming into a layer. - */ - public void testRenameIntoLayer() throws Exception - { - try - { - TreeMap history = new TreeMap(); - // Set up two trees - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createDirectory("main:/a/b", "c"); - fService.createFile("main:/a/b/c", "foo").close(); - fService.createFile("main:/a/b/c", "bar").close(); - fService.createDirectory("main:/", "d"); - fService.createDirectory("main:/d", "e"); - fService.createDirectory("main:/d/e", "f"); - fService.createFile("main:/d/e/f", "moo").close(); - fService.createFile("main:/d/e/f", "cow").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Create a layer to /a - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Now rename /d into /layer/a/b. - fService.rename("main:/", "d", "main:/layer/b", "d"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Now modify /layer/b/branch/e/f/moo. - PrintStream out = new PrintStream(fService.getFileOutputStream("main:/layer/b/d/e/f/moo")); - out.println("moo modified."); - out.close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /layer/b/branch/e/f should contain moo and cow. - Map listing = fService.getDirectoryListing(-1, "main:/layer/b/d/e/f"); - assertEquals(2, listing.size()); - List list = new ArrayList(listing.keySet()); - assertEquals("cow", list.get(0)); - assertEquals("moo", list.get(1)); - for (String val : history.values()) - { - System.out.println(val); - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test proper indirection behavior. - */ - public void testIndirectionBehavior() throws Exception - { - try - { - TreeMap history = new TreeMap(); - // Setup the stage. - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createDirectory("main:/a/b", "c"); - fService.createDirectory("main:/a/b/c", "d"); - fService.createDirectory("main:/a/b/c/d", "e"); - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - fService.createDirectory("main:/", "f"); - fService.createDirectory("main:/f", "g"); - fService.createDirectory("main:/f/g", "h"); - fService.createLayeredDirectory("main:/f", "main:/", "flayer"); - fService.createLayeredDirectory("main:/flayer", "main:/layer/b/c", "fover"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - fService.createDirectory("main:/", "i"); - fService.createDirectory("main:/i", "j"); - fService.createDirectory("main:/i/j", "k"); - fService.createLayeredDirectory("main:/i", "main:/f/g/h", "iover"); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - fService.createFile("main:/layer/b/c/fover/g/h/iover/j/k", "foo").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // Make a file in /i/j/k - fService.createFile("main:/i/j/k", "pismo").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /layer/b/c/fover/g/h/iover/j/k should contain pismo and foo. - Map listing = fService.getDirectoryListing(-1, "main:/layer/b/c/fover/g/h/iover/j/k"); - assertEquals(2, listing.size()); - List list = new ArrayList(listing.keySet()); - assertEquals("foo", list.get(0)); - assertEquals("pismo", list.get(1)); - // Make a file in /flayer/g/h/iover/j/k - fService.createFile("main:/flayer/g/h/iover/j/k", "zuma").close(); - fService.createSnapshot("main", null, null); - // History unchanged. - checkHistory(history, "main"); - // /layer/b/c/fover/g/h/iover/j/k should contain foo, pismo, and zuma. - listing = fService.getDirectoryListing(-1, "main:/layer/b/c/fover/g/h/iover/j/k"); - assertEquals(3, listing.size()); - list = new ArrayList(listing.keySet()); - assertEquals("foo", list.get(0)); - assertEquals("pismo", list.get(1)); - assertEquals("zuma", list.get(2)); - for (String val : history.values()) - { - System.out.println(val); - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test reading of versioned content via a layer. - */ - public void testVersionedRead() throws Exception - { - try - { - PrintStream out = new PrintStream(fService.createFile("main:/", "foo")); - out.print("version1"); - out.close(); - fService.createLayeredFile("main:/foo", "main:/", "afoo"); - fService.createSnapshot("main", null, null); - assertEquals(8, fService.lookup(-1, "main:/foo").getLength()); - out = new PrintStream(fService.getFileOutputStream("main:/foo")); - out.print("version2"); - out.close(); - fService.createSnapshot("main", null, null); - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(1, "main:/afoo"))); - assertEquals("version1", reader.readLine()); - reader.close(); - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(2, "main:/afoo"))); - assertEquals("version2", reader.readLine()); - reader.close(); - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/afoo"))); - assertEquals("version2", reader.readLine()); - reader.close(); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - public void testVersionedRead2() throws Exception - { - try - { - assertNull(fService.lookup(-1, "main:/foo")); - assertNull(fService.lookup(-1, "main:/afoo")); - - try - { - fService.getFileInputStream(-1, "main:/afoo"); - fail(); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - PrintStream out = new PrintStream(fService.createFile("main:/", "foo")); - out.print("version1"); - out.close(); - - BufferedReader reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/foo"))); - assertEquals("version1", reader.readLine()); - reader.close(); - - fService.createLayeredFile("main:/foo", "main:/", "afoo"); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, "main:/afoo"))); - assertEquals("version1", reader.readLine()); - reader.close(); - - fService.createSnapshot("main", null, null); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(1, "main:/foo"))); - assertEquals("version1", reader.readLine()); - reader.close(); - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(1, "main:/afoo"))); - assertEquals("version1", reader.readLine()); - reader.close(); - - assertEquals(8, fService.lookup(-1, "main:/foo").getLength()); - - out = new PrintStream(fService.getFileOutputStream("main:/foo")); - out.print("version2"); - out.close(); - - fService.createSnapshot("main", null, null); - - fService.createSnapshot("main", null, null); - - fService.removeNode("main:/foo"); - - fService.createSnapshot("main", null, null); - - // check versions of the plain file (main:/foo) - - try - { - fService.getFileInputStream(0, "main:/foo"); - fail(); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(1, "main:/foo"))); - assertEquals("version1", reader.readLine()); - reader.close(); - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(2, "main:/foo"))); - assertEquals("version2", reader.readLine()); - reader.close(); - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(3, "main:/foo"))); - assertEquals("version2", reader.readLine()); - reader.close(); - - try - { - fService.getFileInputStream(4, "main:/foo"); - fail(); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - try - { - fService.getFileInputStream(-1, "main:/foo"); - fail(); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - // check versions of the layered file (main:/afoo) - - try - { - fService.getFileInputStream(0, "main:/afoo"); - fail(); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(1, "main:/afoo"))); - assertEquals("version1", reader.readLine()); - reader.close(); - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(2, "main:/afoo"))); - assertEquals("version2", reader.readLine()); - reader.close(); - reader = new BufferedReader(new InputStreamReader(fService.getFileInputStream(3, "main:/afoo"))); - assertEquals("version2", reader.readLine()); - reader.close(); - - try - { - fService.getFileInputStream(4, "main:/afoo"); - fail(); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - try - { - fService.getFileInputStream(-1, "main:/afoo"); - fail(); - } - catch (AVMNotFoundException nfe) - { - // expected - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test rename of an overlayed directory contained in an overlayed directory. - */ - public void testRenameLayerInLayer() throws Exception - { - try - { - // Make some directories. - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createDirectory("main:/a/b", "c"); - fService.createSnapshot("main", null, null); - // Make a layer to /a. - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - // Force a copy on write in the layer. - fService.createFile("main:/layer/b/c", "foo").close(); - fService.createSnapshot("main", null, null); - assertEquals("main:/a/b/c", fService.lookup(-1, "main:/layer/b/c").getIndirection()); - // Now rename. - fService.rename("main:/layer/b", "c", "main:/layer/b", "d"); - fService.createSnapshot("main", null, null); - assertEquals("main:/a/b/d", fService.lookup(-1, "main:/layer/b/d").getIndirection()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Yet another rename from layer to layer test. - */ - public void testAnotherRename() throws Exception - { - try - { - // Make two directory trees. - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createDirectory("main:/a/b", "c"); - fService.createDirectory("main:/", "d"); - fService.createDirectory("main:/d", "e"); - fService.createDirectory("main:/d/e", "f"); - fService.createSnapshot("main", null, null); - runQueriesForInitialRenameStructure("main"); - // Make a layer over each. - fService.createLayeredDirectory("main:/a", "main:/", "la"); - fService.createLayeredDirectory("main:/d", "main:/", "ld"); - fService.createSnapshot("main", null, null); - // TODO: Sort out paths to layers .... - // runQueriesForInitialRenameStructureAndInitialLayers("main"); - // rename from down in one layer to another. - fService.rename("main:/ld/e", "f", "main:/la/b", "f"); - fService.createSnapshot("main", null, null); - AVMNodeDescriptor desc = fService.lookup(-1, "main:/la/b/f"); - assertTrue(desc.isPrimary()); - assertEquals("main:/d/e/f", desc.getIndirection()); - // Now rename in in the layer. - fService.rename("main:/la/b", "f", "main:/la/b/c", "f"); - fService.createSnapshot("main", null, null); - desc = fService.lookup(-1, "main:/la/b/c/f"); - assertTrue(desc.isPrimary()); - assertEquals("main:/d/e/f", desc.getIndirection()); - // Now create a directory in the layered f. - fService.createDirectory("main:/la/b/c/f", "dir"); - fService.createSnapshot("main", null, null); - desc = fService.lookup(-1, "main:/la/b/c/f/dir"); - assertFalse(desc.isPrimary()); - assertEquals("main:/d/e/f/dir", desc.getIndirection()); - // Now rename that and see where it points. - fService.rename("main:/la/b/c/f", "dir", "main:/la/b", "dir"); - fService.createSnapshot("main", null, null); - desc = fService.lookup(-1, "main:/la/b/dir"); - assertFalse(desc.isPrimary()); - assertEquals("main:/a/b/dir", desc.getIndirection()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - protected void runQueriesForInitialRenameStructure(String store) throws Exception - { - StoreRef storeRef = AVMNodeConverter.ToStoreRef(store); - - SearchService searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef(store), true); - - // Note "a" is a stop word and therefore not findable ... - - ResultSet results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_CREATOR) + ":admin"); - assertEquals(7, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_MODIFIER) + ":admin"); - assertEquals(7, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_OWNER) + ":admin"); - assertEquals(7, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NODE_UUID) + ":unknown"); - assertEquals(7, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_PROTOCOL) + ":avm"); - assertEquals(7, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_IDENTIFIER) + ":" + store); - assertEquals(7, results.length()); - results.close(); - - // Basic paths - - results = searchService.query(storeRef, "lucene", "PATH:\"/\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/f\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(7, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//*\""); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//.\""); - assertEquals(3, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//c/*\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*\""); - assertEquals(0, results.length()); - results.close(); - } - - protected void runQueriesForInitialRenameStructureAndInitialLayers(String store) - { - StoreRef storeRef = AVMNodeConverter.ToStoreRef(store); - - SearchService searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef(store), true); - - // Note "a" is a stop word and therefore not findable ... - - ResultSet results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_CREATOR) + ":admin"); - assertEquals(9, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_MODIFIER) + ":admin"); - assertEquals(7, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_OWNER) + ":admin"); - assertEquals(7, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_NODE_UUID) + ":unknown"); - assertEquals(7, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_PROTOCOL) + ":avm"); - assertEquals(7, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@" + ContentModel.PROP_STORE_IDENTIFIER) + ":" + store); - assertEquals(7, results.length()); - results.close(); - - // Basic paths - - results = searchService.query(storeRef, "lucene", "PATH:\"/\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/f\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(7, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//*\""); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//.\""); - assertEquals(3, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//c/*\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*\""); - assertEquals(0, results.length()); - results.close(); - } - - /** - * Test rename behavior of an overlayed file withing a layer. - */ - public void testFileRenameLayer() throws Exception - { - try - { - // Make a set of directories. - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createDirectory("main:/a/b", "c"); - fService.createFile("main:/", "foo").close(); - fService.createSnapshot("main", null, null); - // Make a layer. - fService.createLayeredDirectory("main:/a", "main:/", "la"); - fService.createSnapshot("main", null, null); - // Make a layered file. - fService.createLayeredFile("main:/foo", "main:/la/b", "foo"); - fService.createSnapshot("main", null, null); - AVMNodeDescriptor desc = fService.lookup(-1, "main:/la/b/foo"); - assertEquals("main:/foo", desc.getIndirection()); - // Now rename it. It should still point at the same place. - fService.rename("main:/la/b", "foo", "main:/la", "foo"); - fService.createSnapshot("main", null, null); - desc = fService.lookup(-1, "main:/la/foo"); - assertEquals("main:/foo", desc.getIndirection()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * The random access. - */ - /* - * public void testRandomAccess() { try { setupBasicTree(); RandomAccessFile file = fService.getRandomAccess(1, - * "main:/a/b/c/foo", "r"); byte [] buff = new byte[256]; assertTrue(file.read(buff) >= 20); file.close(); file = - * fService.getRandomAccess(-1, "main:/a/b/c/bar", "rw"); for (int i = 0; i < 256; i++) { buff[i] = (byte)i; } - * file.write(buff); file.close(); fService.createSnapshot("main", null, null); } catch (Exception e) { - * e.printStackTrace(System.err); throw e; } } - */ - - /** - * Test COW during long operations. - */ - public void testCOWLongOps() throws Exception - { - try - { - setupBasicTree(); - // Create a layer to a. - fService.createLayeredDirectory("main:/a", "main:/d/e/f", "layer"); - // Create a layer to /d - fService.createLayeredDirectory("main:/d", "main:/", "l2"); - // Force a copy on write on l2 - fService.createFile("main:/l2", "baz").close(); - // Force a copy on write on /d/e/f/layer/b/c - fService.createFile("main:/d/e/f/layer/b/c", "fink").close(); - // Create /l2/e/f/layer/b/c/nottle - fService.createFile("main:/l2/e/f/layer/b/c", "nottle").close(); - fService.createSnapshot("main", null, null); - System.out.println(recursiveList("main", -1, true)); - assertFalse(fService.lookup(-1, "main:/d/e/f/layer/b/c").getId() == fService.lookup(-1, "main:/l2/e/f/layer/b/c").getId()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test new lookup methods. - */ - public void testLookup() throws Exception - { - try - { - setupBasicTree(); - AVMNodeDescriptor desc = fService.getStoreRoot(-1, "main"); - assertNotNull(desc); - System.out.println(desc.toString()); - AVMNodeDescriptor child = fService.lookup(desc, "a"); - assertNotNull(child); - System.out.println(child.toString()); - child = fService.lookup(child, "b"); - assertNotNull(child); - System.out.println(child.toString()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test AVMStore functions. - */ - public void testAVMStore() throws Exception - { - try - { - // First check that we get the right error when we try to create an - // AVMStore that exists. - try - { - fService.createStore("main"); - fail(); - } - catch (AVMExistsException ae) - { - // Do nothing. - } - // Now make sure getRepository() works. - AVMStoreDescriptor desc = fService.getStore("main"); - assertNotNull(desc); - System.out.println(desc); - fService.purgeStore("main"); - assertNull(fService.getStore("main")); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test opacity and manipulations. - */ - public void testOpacity() throws Exception - { - try - { - setupBasicTree(); - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - fService.createSnapshot("main", null, null); - fService.createFile("main:/layer/b/c", "baz").close(); - fService.createFile("main:/layer/b/c", "fig").close(); - fService.createSnapshot("main", null, null); - Map listing = fService.getDirectoryListing(-1, "main:/layer/b/c"); - assertEquals(4, listing.size()); - System.out.println(recursiveList("main", -1, true)); - // Setting the opacity of layer to true will make no difference to what we see through - // main:/layer/b/c. - fService.setOpacity("main:/layer", true); - fService.createSnapshot("main", null, null); - assertTrue(fService.lookup(-1, "main:/layer").getOpacity()); - assertEquals(4, fService.getDirectoryListing(-1, "main:/layer/b/c").size()); - System.out.println(recursiveList("main", -1, true)); - // If main:/layer/b/c is opaque, however, we'll only see two items in it. - fService.setOpacity("main:/layer", false); - fService.setOpacity("main:/layer/b/c", true); - fService.createSnapshot("main", null, null); - assertFalse(fService.lookup(-1, "main:/layer").getOpacity()); - assertTrue(fService.lookup(-1, "main:/layer/b/c").getOpacity()); - assertEquals(2, fService.getDirectoryListing(-1, "main:/layer/b/c").size()); - System.out.println(recursiveList("main", -1, true)); - // Gratuitous test of retarget. - fService.retargetLayeredDirectory("main:/layer", "main:/d"); - fService.setOpacity("main:/layer/b/c", false); - fService.createSnapshot("main", null, null); - assertFalse(fService.lookup(-1, "main:/layer/b/c").getOpacity()); - assertEquals(2, fService.getDirectoryListing(-1, "main:/layer/b/c").size()); - // This is just testing that opacity setting works on latent - // layered directories. - fService.setOpacity("main:/layer/e/f", true); - System.out.println(recursiveList("main", -1, true)); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test common ancestor. - */ - public void testCommonAncestor() throws Exception - { - try - { - setupBasicTree(); - fService.createBranch(-1, "main:/a", "main:/", "branch"); - fService.createSnapshot("main", null, null); - AVMNodeDescriptor ancestor = fService.lookup(-1, "main:/a/b/c/foo"); - fService.getFileOutputStream("main:/a/b/c/foo").close(); - fService.getFileOutputStream("main:/branch/b/c/foo").close(); - fService.createSnapshot("main", null, null); - AVMNodeDescriptor main = fService.lookup(-1, "main:/a/b/c/foo"); - AVMNodeDescriptor branch = fService.lookup(-1, "main:/branch/b/c/foo"); - AVMNodeDescriptor ca = fService.getCommonAncestor(main, branch); - assertEquals(ancestor, ca); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test properties on stores. - */ - public void testStoreProperties() throws Exception - { - try - { - Map props = fService.getStoreProperties("main"); - assertEquals(2, props.size()); - assertEquals(AuthenticationUtil.getAdminUserName(), props.get(ContentModel.PROP_CREATOR).getStringValue()); - assertNotNull(props.get(ContentModel.PROP_CREATED)); - System.out.println(props.toString()); - - QName name = QName.createQName("silly.uri", "SillyProperty"); - PropertyValue value = new PropertyValue(DataTypeDefinition.TEXT, "Silly Property Value"); - fService.setStoreProperty("main", name, value); - PropertyValue found = fService.getStoreProperty("main", name); - assertEquals(value.toString(), found.toString()); - props = fService.getStoreProperties("main"); - assertEquals(3, props.size()); - - props = new HashMap(5); - QName n1 = QName.createQName("silly.uri", "Prop1"); - PropertyValue p1 = new PropertyValue(null, new Date(System.currentTimeMillis())); - props.put(n1, p1); - QName n2 = QName.createQName("silly.uri", "Prop2"); - PropertyValue p2 = new PropertyValue(null, "A String Property."); - props.put(n2, p2); - QName n3 = QName.createQName("silly.uri", "Prop3"); - PropertyValue p3 = new PropertyValue(null, 42); - props.put(n3, p3); - QName n4 = QName.createQName("silly.uri", "Prop4"); - PropertyValue p4 = new PropertyValue(null, new Boolean(false)); - props.put(n4, p4); - QName n5 = QName.createQName("silly.uri", "Prop5"); - List strList = new ArrayList(2); - strList.add("hello"); - strList.add("world"); - PropertyValue p5 = new PropertyValue(DataTypeDefinition.TEXT, (Serializable)strList); - props.put(n5, p5); - fService.setStoreProperties("main", props); - - props = fService.getStoreProperties("main"); - System.out.println(props.toString()); - assertEquals(8, props.size()); - assertEquals(p1.toString(), props.get(n1).toString()); - assertEquals(p2.toString(), props.get(n2).toString()); - assertEquals(p3.toString(), props.get(n3).toString()); - assertEquals(p4.toString(), props.get(n4).toString()); - assertEquals(p5.toString(), props.get(n5).toString()); - - props = new HashMap(5); - n1 = QName.createQName("silly.uri", "Prop1"); - p1 = new PropertyValue(null, new Date(System.currentTimeMillis())); - props.put(n1, p1); - n2 = QName.createQName("silly.uri", "Prop2"); - p2 = new PropertyValue(null, "A String Property - updated."); - props.put(n2, p2); - n3 = QName.createQName("silly.uri", "Prop3"); - p3 = new PropertyValue(null, -42); - props.put(n3, p3); - n4 = QName.createQName("silly.uri", "Prop4"); - p4 = new PropertyValue(null, new Boolean(true)); - props.put(n4, p4); - n5 = QName.createQName("silly.uri", "Prop5"); - strList = new ArrayList(2); - strList.add("goodbye"); - strList.add("world"); - p5 = new PropertyValue(DataTypeDefinition.TEXT, (Serializable)strList); - props.put(n5, p5); - fService.setStoreProperties("main", props); - - props = fService.getStoreProperties("main"); - System.out.println(props.toString()); - assertEquals(8, props.size()); - assertEquals(p1.toString(), props.get(n1).toString()); - assertEquals(p2.toString(), props.get(n2).toString()); - assertEquals(p3.toString(), props.get(n3).toString()); - assertEquals(p4.toString(), props.get(n4).toString()); - assertEquals(p5.toString(), props.get(n5).toString()); - - fService.deleteStoreProperty("main", name); - props = fService.getStoreProperties("main"); - assertEquals(7, props.size()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test Aspect Name storage. - */ - public void testAspectNames() throws Exception - { - try - { - setupBasicTree(); - - StoreRef storeRef = AVMNodeConverter.ToStoreRef("main"); - SearchService searchService = fIndexerAndSearcher.getSearcher(storeRef, true); - ResultSet results = searchService.query(storeRef, "lucene", "ASPECT:\"" + ContentModel.ASPECT_TITLED.toString() + "\""); - assertEquals(0, results.length()); - results.close(); - results = searchService.query(storeRef, "lucene", "ASPECT:\"" + ContentModel.ASPECT_AUDITABLE.toString() + "\""); - assertEquals(0, results.length()); - results.close(); - - fService.addAspect("main:/a/b/c/foo", ContentModel.ASPECT_TITLED); - fService.addAspect("main:/a/b/c/foo", ContentModel.ASPECT_AUDITABLE); - Map properties = new HashMap(); - properties.put(ContentModel.PROP_ACCESSED, new PropertyValue(DataTypeDefinition.DATETIME, new Date(System.currentTimeMillis()))); - properties.put(ContentModel.PROP_CREATED, new PropertyValue(DataTypeDefinition.DATETIME, new Date(System.currentTimeMillis()))); - properties.put(ContentModel.PROP_MODIFIED, new PropertyValue(DataTypeDefinition.DATETIME, new Date(System.currentTimeMillis()))); - properties.put(ContentModel.PROP_CREATOR, new PropertyValue(DataTypeDefinition.TEXT, "Giles")); - properties.put(ContentModel.PROP_MODIFIER, new PropertyValue(DataTypeDefinition.TEXT, "Quentin")); - fService.setNodeProperties("main:/a/b/c/foo", properties); - fService.createSnapshot("main", null, null); - - results = searchService.query(storeRef, "lucene", "ASPECT:\"" + ContentModel.ASPECT_TITLED.toString() + "\""); - assertEquals(1, results.length()); - results.close(); - results = searchService.query(storeRef, "lucene", "ASPECT:\"" + ContentModel.ASPECT_AUDITABLE.toString() + "\""); - assertEquals(1, results.length()); - results.close(); - - fService.removeNode("main:/a/b/c/bar"); - fService.addAspect("main:/a/b/c/bar", ContentModel.ASPECT_TITLED); - Set names = fService.getAspects(-1, "main:/a/b/c/foo"); - assertEquals(2, names.size()); - assertTrue(fService.hasAspect(-1, "main:/a/b/c/foo", ContentModel.ASPECT_TITLED)); - assertFalse(fService.hasAspect(-1, "main:/a/b/c/foo", ContentModel.ASPECT_AUTHOR)); - assertTrue(fService.hasAspect(-1, "main:/a/b/c/foo", ContentModel.ASPECT_TITLED)); - fService.removeAspect("main:/a/b/c/foo", ContentModel.ASPECT_TITLED); - fService.createSnapshot("main", null, null); - - results = searchService.query(storeRef, "lucene", "ASPECT:\"" + ContentModel.ASPECT_TITLED.toString() + "\""); - assertEquals(0, results.length()); - results.close(); - results = searchService.query(storeRef, "lucene", "ASPECT:\"" + ContentModel.ASPECT_AUDITABLE.toString() + "\""); - assertEquals(1, results.length()); - results.close(); - - fService.getFileOutputStream("main:/a/b/c/foo").close(); - assertFalse(fService.hasAspect(-1, "main:/a/b/c/foo", ContentModel.ASPECT_TITLED)); - assertTrue(fService.hasAspect(-1, "main:/a/b/c/foo", ContentModel.ASPECT_AUDITABLE)); - Map props = fService.getNodeProperties(-1, "main:/a/b/c/foo"); - assertEquals(5, props.size()); - fService.removeAspect("main:/a/b/c/foo", ContentModel.ASPECT_AUDITABLE); - props = fService.getNodeProperties(-1, "main:/a/b/c/foo"); - assertEquals(0, props.size()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test case insensitivity. - */ - public void testCaseInsensitive() throws Exception - { - String storeName = "caseIn"; - String storeNameUpper = storeName.toUpperCase(); - String storeNameLower = storeName.toLowerCase(); - - try - { - fService.createStore(storeName); - - try - { - fService.createStore(storeNameUpper); - fail(); - } - catch (AVMExistsException e) - { - // Do nothing. - } - - AVMStoreDescriptor storeDesc1 = fService.getStore(storeNameUpper); - assertNotNull(storeDesc1); - assertEquals(storeName, storeDesc1.getName()); - - AVMStoreDescriptor storeDesc2 = fService.getStore(storeNameLower); - assertNotNull(storeDesc2); - assertEquals(storeName, storeDesc2.getName()); - - assertEquals(storeDesc1, storeDesc2); // same id - - fService.createDirectory(storeName+":/", "a"); - fService.createDirectory(storeName+":/a", "B"); - fService.createDirectory(storeName+":/a/B", "c"); - fService.createFile(storeName+":/a/B/c", "Foo").close(); - - AVMNodeDescriptor desc1 = fService.lookup(-1, storeNameUpper+":/A/B/C/FOO"); - assertNotNull(desc1); - assertEquals(storeName+":/a/B/c/Foo", desc1.getPath()); - - try - { - fService.createFile(storeName+":/a/B/c", "FoO").close(); - fail(); - } - catch (AVMExistsException e) - { - // Do nothing. - } - - AVMNodeDescriptor desc2 = fService.lookup(-1, storeNameLower+":/a/b/c/foo"); - assertNotNull(desc2); - assertEquals(storeName+":/a/B/c/Foo", desc2.getPath()); - - assertEquals(desc1, desc2); // same id - - desc1 = fService.lookup(-1, storeNameUpper+":/A/B/C"); - assertNotNull(desc1); - assertEquals(storeName+":/a/B/c", desc1.getPath()); - - try - { - fService.createFile(storeName+":/a/b", "C").close(); - fail(); - } - catch (AVMExistsException e) - { - // Do nothing. - } - - desc2 = fService.lookup(-1, storeNameLower+":/a/b/c"); - assertNotNull(desc2); - assertEquals(storeName+":/a/B/c", desc2.getPath()); - - assertEquals(desc1, desc2); // same id - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore(storeName); - } - } - - /** - * Test ACLs. - */ - public void testACLs() throws Exception - { - try - { - setupBasicTree(); - PermissionService perm = (PermissionService) fContext.getBean("PermissionService"); - // AuthenticationService ac = (AuthenticationService)fContext.getBean("AuthenticationService"); - // ac.authenticate("admin", "admin".toCharArray()); - perm.setPermission(AVMNodeConverter.ToNodeRef(-1, "main:/a/b/c/foo"), PermissionService.ADMINISTRATOR_AUTHORITY, PermissionService.ALL_PERMISSIONS, true); - fService.createSnapshot("main", null, null); - fService.getFileOutputStream("main:/a/b/c/foo").close(); - Set perms = perm.getPermissions(AVMNodeConverter.ToNodeRef(-1, "main:/a/b/c/foo")); - for (AccessPermission permission : perms) - { - System.out.println(permission); - } - assertTrue(perms.size() > 0); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test FileFolderService with AVM. - */ - public void testFileFolderService() throws Exception - { - try - { - setupBasicTree(); - FileFolderService ffs = (FileFolderService) fContext.getBean("FileFolderService"); - // AuthenticationComponent ac = (AuthenticationComponent)fContext.getBean("authenticationComponent"); - // ac.authenticate("admin", "admin".toCharArray()); - assertTrue(ffs.create(AVMNodeConverter.ToNodeRef(-1, "main:/a/b/c/"), "banana", WCMModel.TYPE_AVM_PLAIN_CONTENT) != null); - assertTrue(ffs.create(AVMNodeConverter.ToNodeRef(-1, "main://"), "banana", WCMModel.TYPE_AVM_PLAIN_CONTENT) != null); - assertTrue(ffs.create(AVMNodeConverter.ToNodeRef(-1, "main:/a/b/c"), "apples", WCMModel.TYPE_AVM_PLAIN_FOLDER) != null); - NodeService ns = (NodeService) fContext.getBean("NodeService"); - Map properties = new HashMap(); - properties.put(WCMModel.PROP_AVM_DIR_INDIRECTION, AVMNodeConverter.ToNodeRef(-1, "main:/a")); - assertTrue(ns.createNode(AVMNodeConverter.ToNodeRef(-1, "main:/"), ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.APP_MODEL_1_0_URI, "layer"), - WCMModel.TYPE_AVM_LAYERED_FOLDER, properties) != null); - assertTrue(ns.getProperty(AVMNodeConverter.ToNodeRef(-1, "main:/layer"), WCMModel.PROP_AVM_DIR_INDIRECTION) != null); - properties.clear(); - properties.put(WCMModel.PROP_AVM_FILE_INDIRECTION, AVMNodeConverter.ToNodeRef(-1, "main:/a/b/c/foo")); - assertTrue(ns.createNode(AVMNodeConverter.ToNodeRef(-1, "main:/"), ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.APP_MODEL_1_0_URI, "foo"), - WCMModel.TYPE_AVM_LAYERED_CONTENT, properties) != null); - assertTrue(ns.getProperty(AVMNodeConverter.ToNodeRef(-1, "main:/foo"), WCMModel.PROP_AVM_FILE_INDIRECTION) != null); - fService.createSnapshot("main", null, null); - System.out.println(recursiveList("main", -1, true)); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test overwriting without snapshots in between. - */ - public void testOverwrite() throws Exception - { - try - { - setupBasicTree(); - class TxnCallback implements RetryingTransactionHelper.RetryingTransactionCallback - { - public Object execute() throws Exception - { - try - { - AVMService service = (AVMService) fContext.getBean("avmService"); - service.createLayeredDirectory("main:/a", "main:/", "layer"); - // Modify something in an ordinary directory 3 times. - service.getFileOutputStream("main:/a/b/c/foo").close(); - service.getFileOutputStream("main:/a/b/c/foo").close(); - service.getFileOutputStream("main:/a/b/c/foo").close(); - service.createFile("main:/a/b/c", "pint").close(); - service.createFile("main:/a/b/c", "quart").close(); - // Modify another file in the same directory. - service.getFileOutputStream("main:/a/b/c/bar").close(); - service.getFileOutputStream("main:/a/b/c/bar").close(); - service.lookup(-1, "main:/a/b/c"); - service.createFile("main:/a/b/c", "figment").close(); - // Repeat in a layer. - service.getFileOutputStream("main:/layer/b/c/foo").close(); - service.getFileOutputStream("main:/layer/b/c/foo").close(); - service.getFileOutputStream("main:/layer/b/c/foo").close(); - service.createFile("main:/layer/b/c", "gallon").close(); - service.createFile("main:/layer/b/c", "dram").close(); - service.getFileOutputStream("main:/layer/b/c/bar").close(); - service.getFileOutputStream("main:/layer/b/c/bar").close(); - try - { - service.lookup(-1, "main:/a/b/c/froo"); - } - catch (AVMException ae) - { - // Do nothing. - } - service.createDirectory("main:/a/b/c", "froo"); - service.createFile("main:/a/b/c/froo", "franistan").close(); - try - { - service.lookup(-1, "main:/layer/b/c/groo"); - } - catch (AVMException ae) - { - // Do nothing. - } - service.createDirectory("main:/layer/b/c", "groo"); - service.createFile("main:/layer/b/c/groo", "granistan").close(); - return null; - } - catch (IOException e) - { - e.printStackTrace(); - throw e; - } - } - } - TransactionService transactionService = (TransactionService) fContext.getBean("transactionService"); - RetryingTransactionHelper helper = transactionService.getRetryingTransactionHelper(); - helper.doInTransaction(new TxnCallback(), false); - assertNotNull(fService.lookup(-1, "main:/layer/b/c/groo")); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test creating a file over a ghost. - */ - public void testCreateOverDeleted() throws Exception - { - try - { - setupBasicTree(); - fService.removeNode("main:/a/b/c", "foo"); - fService.createFile("main:/a/b/c", "foo").close(); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test lookup and listing of deleted files. - */ - public void testDeleted() throws Exception - { - try - { - setupBasicTree(); - fService.createLayeredDirectory("main:/a", "main:/", "layer"); - // Delete something in regular directory. - fService.removeNode("main:/a/b/c", "foo"); - AVMNodeDescriptor desc = fService.lookup(-1, "main:/a/b/c/foo", true); - assertTrue(desc.isDeleted()); - assertTrue(desc.isDeletedFile()); - Map listing = fService.getDirectoryListing(-1, "main:/a/b/c", true); - assertEquals(2, listing.size()); - assertTrue(listing.get("foo").isDeleted()); - AVMNodeDescriptor dir = fService.lookup(-1, "main:/a/b/c", true); - desc = fService.lookup(dir, "foo", true); - assertTrue(desc.isDeleted()); - listing = fService.getDirectoryListing(dir, true); - assertEquals(2, listing.size()); - assertTrue(listing.get("foo").isDeleted()); - desc = fService.lookup(-1, "main:/layer/b/c/foo", true); - assertTrue(desc.isDeleted()); - listing = fService.getDirectoryListing(-1, "main:/layer/b/c", true); - assertEquals(2, listing.size()); - assertTrue(listing.get("foo").isDeleted()); - dir = fService.lookup(-1, "main:/layer/b/c", true); - listing = fService.getDirectoryListing(dir, true); - assertEquals(2, listing.size()); - assertTrue(listing.get("foo").isDeleted()); - // Delete something in a layer. - fService.removeNode("main:/layer/b/c", "bar"); - desc = fService.lookup(-1, "main:/layer/b/c/bar", true); - assertTrue(desc.isDeleted()); - assertTrue(desc.isDeletedFile()); - listing = fService.getDirectoryListing(-1, "main:/layer/b/c", true); - assertEquals(2, listing.size()); - assertTrue(listing.get("foo").isDeleted()); - assertTrue(listing.get("bar").isDeleted()); - listing = fService.getDirectoryListingDirect(-1, "main:/layer/b/c", true); - assertEquals(1, listing.size()); - assertTrue(listing.get("bar").isDeleted()); - dir = fService.lookup(-1, "main:/layer/b/c", true); - desc = fService.lookup(dir, "bar", true); - assertTrue(desc.isDeleted()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - - } - } - - /** - * Test Store property querying. - */ - public void testStorePropertyQuerying() throws Exception - { - try - { - fService.setStoreProperty("main", QName.createQName(null, SandboxConstants.PROP_DNS+"alice--preview"), new PropertyValue(null, "alice-preview")); - fService.setStoreProperty("main", QName.createQName("", ".other.property"), new PropertyValue(null, "other value")); - Map result = fService.queryStorePropertyKey("main", QName.createQName("", SandboxConstants.PROP_DNS+"%")); - assertEquals(1, result.size()); - - fService.createStore("second"); - fService.setStoreProperty("second", QName.createQName("", SandboxConstants.PROP_DNS+"alice"), new PropertyValue(null, "alice-space")); - Map> matches = fService.queryStoresPropertyKeys(QName.createQName("", SandboxConstants.PROP_DNS+"%")); - assertEquals(1, matches.get("main").size()); - assertEquals(1, matches.get("second").size()); - assertEquals("alice-preview", matches.get("main").get(QName.createQName(null, SandboxConstants.PROP_DNS+"alice--preview")).getStringValue()); - assertEquals("alice-space", matches.get("second").get(QName.createQName(null, SandboxConstants.PROP_DNS+"alice")).getStringValue()); - - fService.createStore("third"); - fService.setStoreProperty("third", QName.createQName("", SandboxConstants.PROP_DNS+"someUPPERcase"), new PropertyValue(null, "someUPPERcase-space")); - matches = fService.queryStoresPropertyKeys(QName.createQName("", SandboxConstants.PROP_DNS+"someuppercase%")); - assertNotNull(matches.get("third")); - assertEquals(1, matches.get("third").size()); - assertEquals("someUPPERcase-space", matches.get("third").get(QName.createQName(null, SandboxConstants.PROP_DNS+"someUPPERcase")).getStringValue()); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - finally - { - fService.purgeStore("second"); - fService.purgeStore("third"); - } - } - - -} diff --git a/source/test-java/org/alfresco/repo/avm/AVMServiceTestBase.java b/source/test-java/org/alfresco/repo/avm/AVMServiceTestBase.java deleted file mode 100644 index 5f4cb295a1..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMServiceTestBase.java +++ /dev/null @@ -1,584 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . */ - -package org.alfresco.repo.avm; - -import java.io.IOException; -import java.util.Map; -import java.util.TreeMap; - -import junit.framework.TestCase; - -import org.alfresco.model.ContentModel; -import org.alfresco.repo.content.MimetypeMap; -import org.alfresco.repo.search.AVMSnapShotTriggeredIndexingMethodInterceptor; -import org.alfresco.repo.search.IndexerAndSearcher; -import org.alfresco.repo.search.impl.lucene.AbstractLuceneQueryParser; -import org.alfresco.repo.security.authentication.AuthenticationComponent; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.transaction.RetryingTransactionHelper; -import org.alfresco.service.cmr.avm.AVMNodeDescriptor; -import org.alfresco.service.cmr.avm.AVMService; -import org.alfresco.service.cmr.avm.locking.AVMLockingService; -import org.alfresco.service.cmr.avmsync.AVMSyncService; -import org.alfresco.service.cmr.repository.ContentWriter; -import org.alfresco.service.cmr.repository.StoreRef; -import org.alfresco.service.cmr.search.ResultSet; -import org.alfresco.service.cmr.search.ResultSetRow; -import org.alfresco.service.cmr.search.SearchService; -import org.alfresco.service.cmr.security.AuthenticationService; -import org.alfresco.service.transaction.TransactionService; -import org.alfresco.test_category.LegacyCategory; -import org.alfresco.util.SearchLanguageConversion; -import org.junit.experimental.categories.Category; -import org.springframework.context.ApplicationContext; - -/** - * Base class for AVMService tests. - * @author britt - */ -@Category(LegacyCategory.class) -public class AVMServiceTestBase extends TestCase -{ - /** - * The AVMService we are testing. - */ - protected static AVMService fService; - - /** - * The reaper thread. - */ - protected static OrphanReaper fReaper; - - /** - * The AVMSyncService. - */ - protected static AVMSyncService fSyncService; - /** - * The application context. - */ - protected static ApplicationContext fContext; - - /** - * The start time of actual work for a test. - */ - private long fStartTime; - - protected static RetryingTransactionHelper fRetryingTransactionHelper; - - protected static AuthenticationComponent fAuthenticationComponent; - - protected static AVMSnapShotTriggeredIndexingMethodInterceptor fIndexingInterceptor; - - protected static TransactionService fTransactionService; - - protected static IndexerAndSearcher fIndexerAndSearcher; - - protected static AVMLockingService fLockingService; - - protected static AuthenticationService fAuthService; - - - public void testSetup() throws Exception - { - } - - /** - * Setup for AVM tests. Note that we set the polling - * interval for the reaper to 4 seconds so that tests will - * finish reasonably quickly. - */ - @Override - protected void setUp() throws Exception - { - if (fContext == null) - { - fContext = AVMTestSuite.getContext(); - - fService = (AVMService)fContext.getBean("AVMService"); - fReaper = (OrphanReaper)fContext.getBean("orphanReaper"); - fSyncService = (AVMSyncService)fContext.getBean("AVMSyncService"); - fIndexerAndSearcher = (IndexerAndSearcher)fContext.getBean("indexerAndSearcherFactory"); - fTransactionService = (TransactionService)fContext.getBean("transactionComponent"); - fLockingService = (AVMLockingService)fContext.getBean("AVMLockingService"); - fIndexingInterceptor = (AVMSnapShotTriggeredIndexingMethodInterceptor)fContext.getBean("avmSnapShotTriggeredIndexingMethodInterceptor"); - fAuthService = (AuthenticationService)fContext.getBean("AuthenticationService"); - fAuthenticationComponent = (AuthenticationComponent) fContext.getBean("authenticationComponent"); - fRetryingTransactionHelper = (RetryingTransactionHelper) fContext.getBean("retryingTransactionHelper"); - - CreateStoreTxnListener cstl = (CreateStoreTxnListener)fContext.getBean("createStoreTxnListener"); - cstl.addCallback( - new CreateStoreCallback() - { - public void storeCreated(String name) - { - //System.err.println("Store created: " + name); - } - } - ); - PurgeStoreTxnListener pstl = (PurgeStoreTxnListener)fContext.getBean("purgeStoreTxnListener"); - pstl.addCallback( - new PurgeStoreCallback() - { - public void storePurged(String name) - { - //System.err.println("Store purged: " + name); - } - } - ); - CreateVersionTxnListener cvtl = (CreateVersionTxnListener)fContext.getBean("createVersionTxnListener"); - cvtl.addCallback( - new CreateVersionCallback() - { - public void versionCreated(String name, int versionID) - { - //System.err.println("Version created: " + name + " " + versionID); - } - } - ); - PurgeVersionTxnListener pvtl = (PurgeVersionTxnListener)fContext.getBean("purgeVersionTxnListener"); - pvtl.addCallback( - new PurgeVersionCallback() - { - public void versionPurged(String name, int versionID) - { - //System.err.println("Version purged: " + name + " " + versionID); - } - } - ); - } - - fAuthService.authenticate(AuthenticationUtil.getAdminUserName(), "admin".toCharArray()); - - if (fService.getStore("main") != null) - { - fService.purgeStore("main"); - } - fService.createStore("main"); - - if (fService.getStore("layer") != null) - { - fService.purgeStore("layer"); - } - - fStartTime = System.currentTimeMillis(); - } - - /** - * Cleanup after a test. Purge main store. - */ - @Override - protected void tearDown() throws Exception - { - long now = System.currentTimeMillis(); - System.out.println("Timing: " + (now - fStartTime) + "ms"); - - if (fService.getStore("main") != null) { fService.purgeStore("main"); } - - // Move alf_data directory aside. - // fContext.close(); - // File alfData = new File("alf_data"); - // File target = new File("alf_data" + now); - // alfData.renameTo(target); - - AuthenticationUtil.clearCurrentSecurityContext(); - } - - /** - * Get the recursive contents of the given path and version. - * @param path - * @param version - * @return A string representation of the contents. - */ - protected String recursiveContents(String path, int version, boolean followLinks) - { - String val = recursiveList(path, version, 0, followLinks); - return val.substring(val.indexOf('\n')); - } - - - /** - * Helper to write a recursive listing of an AVMStore at a given version. - * @param repoName The name of the AVMStore. - * @param version The version to look under. - */ - protected String recursiveList(String repoName, int version, boolean followLinks) - { - return recursiveList(repoName + ":/", version, 0, followLinks); - } - - /** - * Recursive list the given path. - * @param path The path. - * @param version The version. - * @param indent The current indent level. - */ - protected String recursiveList(String path, int version, int indent, boolean followLinks) - { - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < indent; i++) - { - builder.append(' '); - } - builder.append(path.substring(path.lastIndexOf('/') + 1)); - builder.append(' '); - AVMNodeDescriptor desc = fService.lookup(version, path, true); - builder.append(desc.toString()); - builder.append('\n'); - if (desc.getType() == AVMNodeType.PLAIN_DIRECTORY || - (desc.getType() == AVMNodeType.LAYERED_DIRECTORY && followLinks)) - { - String basename = path.endsWith("/") ? path : path + "/"; - Map listing = fService.getDirectoryListing(version, path, true); - for (String name : listing.keySet()) - { - System.err.println(name); - builder.append(recursiveList(basename + name, version, indent + 2, followLinks)); - } - } - return builder.toString(); - } - - /** - * Setup a basic tree. - */ - protected void setupBasicTree0() - throws IOException - { - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createDirectory("main:/a/b", "c"); - fService.createDirectory("main:/", "d"); - fService.createDirectory("main:/d", "e"); - fService.createDirectory("main:/d/e", "f"); - - fService.createFile("main:/a/b/c", "foo").close(); - ContentWriter writer = fService.getContentWriter("main:/a/b/c/foo", true); - writer.setEncoding("UTF-8"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent("I am main:/a/b/c/foo"); - - fService.createFile("main:/a/b/c", "bar").close(); - writer = fService.getContentWriter("main:/a/b/c/bar", true); - /* - // Force a conversion - writer.setEncoding("UTF-16"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent(new ByteArrayInputStream("I am main:/a/b/c/bar".getBytes("UTF-16"))); - */ - writer.setEncoding("UTF-8"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent("I am main:/a/b/c/bar"); - - fService.createSnapshot("main", null, null); - } - - protected void setupBasicTree() - throws IOException - { - setupBasicTree0(); - } - - protected void runQueriesAgainstBasicTree(String store) - { - StoreRef storeRef = AVMNodeConverter.ToStoreRef(store); - - // Text index - SearchService searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef(store), true); - ResultSet results = searchService.query(storeRef, "lucene", "TEXT:\"I am main\""); - assertEquals(2, results.length()); - results.close(); - - // Basic properties - - // Note "a" is a stop word and therefore not findable ... - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@"+ContentModel.PROP_NAME)+":\"foo\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@"+ContentModel.PROP_NAME)+":foo"); - assertEquals(1, results.length()); - results.close(); - - // TODO: Fix auth in AVMDiskDriver and more?? - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@"+ContentModel.PROP_CREATOR)+":admin"); - - assertEquals(9, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@"+ContentModel.PROP_MODIFIER)+":admin"); - assertEquals(9, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@"+ContentModel.PROP_OWNER)+":admin"); - assertEquals(9, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@"+ContentModel.PROP_NODE_UUID)+":unknown"); - assertEquals(9, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@"+ContentModel.PROP_STORE_PROTOCOL)+":avm"); - assertEquals(9, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@"+ContentModel.PROP_STORE_IDENTIFIER)+":"+store); - assertEquals(9, results.length()); - results.close(); - - // Basic paths - - results = searchService.query(storeRef, "lucene", "PATH:\"/\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/foo\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/bar\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/f\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(9, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//*\""); - assertEquals(8, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//.\""); - assertEquals(5, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//*\""); - assertEquals(4, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//c/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*\""); - assertEquals(0, results.length()); - results.close(); - } - - protected void runQueriesAgainstBasicTreeWithAOnly(String store) - { - StoreRef storeRef = AVMNodeConverter.ToStoreRef(store); - - // Text index - SearchService searchService = fIndexerAndSearcher.getSearcher(AVMNodeConverter.ToStoreRef(store), true); - ResultSet results = searchService.query(storeRef, "lucene", "TEXT:\"I am main\""); - assertEquals(2, results.length()); - results.close(); - - // Basic properties - - // Note "a" is a stop word and therefore not findable ... - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@"+ContentModel.PROP_NAME)+":\"foo\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@"+ContentModel.PROP_NAME)+":foo"); - assertEquals(1, results.length()); - results.close(); - - // TODO: Fix auth in AVMDiskDriver and more?? - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@"+ContentModel.PROP_CREATOR)+":admin"); - if(results.length() == 10) - { - for (ResultSetRow row : results) - { - System.out.println(row.getNodeRef()); - } - } - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@"+ContentModel.PROP_MODIFIER)+":admin"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@"+ContentModel.PROP_OWNER)+":admin"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@"+ContentModel.PROP_NODE_UUID)+":unknown"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@"+ContentModel.PROP_STORE_PROTOCOL)+":avm"); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", SearchLanguageConversion.escapeLuceneQuery("@"+ContentModel.PROP_STORE_IDENTIFIER)+":"+store); - assertEquals(6, results.length()); - results.close(); - - // Basic paths - - results = searchService.query(storeRef, "lucene", "PATH:\"/\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/foo\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/b/c/bar\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/d/e/f\""); - assertEquals(0, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//.\""); - assertEquals(6, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//*\""); - assertEquals(5, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//.\""); - assertEquals(5, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a//*\""); - assertEquals(4, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/a/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"//c/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*\""); - assertEquals(1, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*\""); - assertEquals(2, results.length()); - results.close(); - - results = searchService.query(storeRef, "lucene", "PATH:\"/*/*/*/*/*\""); - assertEquals(0, results.length()); - results.close(); - } - - /** - * Check that history has not been screwed up. - */ - protected void checkHistory(TreeMap history, String repName) - { - for (Integer i : history.keySet()) - { - assertEquals(history.get(i), recursiveList(repName, i, false)); - } - int latest = fService.getNextVersionID(repName); - history.put(latest - 1, recursiveList(repName, -1, false)); - } - - protected String getSourceFolder() - { - return System.getProperty("alfresco.java.sources.dir", "source/java"); - } -} diff --git a/source/test-java/org/alfresco/repo/avm/AVMStressTestP.java b/source/test-java/org/alfresco/repo/avm/AVMStressTestP.java deleted file mode 100644 index 0c934374c9..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMStressTestP.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . */ - -package org.alfresco.repo.avm; - -import java.util.ArrayList; -import java.util.List; - -import org.alfresco.repo.avm.util.BulkLoader; -import org.alfresco.test_category.LegacyCategory; -import org.junit.experimental.categories.Category; - -/** - * This is a stress test for the AVM repository. - * @author britt - */ -@Category(LegacyCategory.class) -public class AVMStressTestP extends AVMServiceTestBase -{ - /* - public void xtestStressA() throws Throwable - { - testNThreads( 1, // nThreads - getSourceFolder() + "/org/alfresco/repo/avm/actions", // relative dir to load from (.../repository) - 1, // nCopies - 1, // create file - 1, // create dir - 0, // rename - 0, // create layered dir - 0, // create layered file - 0, // remove node - 0, // modify file - 50, // read file - 0, // snapshot - 100); // # ops (for each thread) - } - */ - - public void testStressB() throws Throwable - { - testNThreads( 2, // nThreads - getSourceFolder() + "/org/alfresco/repo/avm/actions", // relative dir to load from (.../repository) - 1, // nCopies - 10, // create file - 2, // create dir - 2, // rename - 2, // create layered dir // TODO pending ETWOTWO-715 (is 2 in 2.1.x) - 2, // create layered file // TODO pending ETWOTWO-715 (is 2 in 2.1.x) - 5, // remove node - 10, // modify file - 50, // read file - 5, // snapshot - 200); // # ops (for each thread) - } - - /* - public void xtestStressZ() - { - testNThreads( 4, // nThreads - "source", // relative dir to load from (.../repository) - 8, // nCopies - 400, // create file - 20, // create dir - 5, // rename - 5, // create layered dir - 5, // create layered file - 10, // remove node - 20, // modify file - 3200, // read file - 10, // snapshot - 40000); // # ops - } - */ - - /** - * Test N threads - */ - private void testNThreads(int nThreads, - String fsPath, - int nCopies, - int createFile, - int createDir, - int rename, - int createLayeredDir, - int createLayeredFile, - int removeNode, - int modifyFile, - int readFile, - int snapshot, - int opCount) throws Throwable - { - try - { - BulkLoader loader = new BulkLoader(); - loader.setAvmService(fService); - long start = System.currentTimeMillis(); - for (int i = 0; i < nCopies; i++) - { - fService.createDirectory("main:/", "" + i); - loader.recursiveLoad(fsPath, "main:/" + i); - fService.createSnapshot("main", null, null); - } - System.out.println("Load time: " + (System.currentTimeMillis() - start)); - List testers = new ArrayList(); - List threads = new ArrayList(); - for (int i = 0; i < nThreads; i++) - { - AVMTester tester - = new AVMTester(createFile, - createDir, - rename, - createLayeredDir, - createLayeredFile, - removeNode, - modifyFile, - readFile, - snapshot, - opCount, - fService); - tester.refresh(); - Thread thread = new Thread(tester); - testers.add(tester); - threads.add(thread); - } - for (Thread thread : threads) - { - thread.start(); - } - int exited = 0; - // long sampStart = System.currentTimeMillis(); - while (exited != nThreads) - { - try - { - Thread.sleep(2000); - for (int i = 0; i < nThreads; i++) - { - if (threads.get(i) == null) - { - continue; - } - threads.get(i).join(1000); - if (!threads.get(i).isAlive()) - { - threads.set(i, null); - if (testers.get(i).getError()) - { - for (AVMTester tester : testers) - { - tester.setExit(); - } - //fail(); - System.err.println("Stress tester error"); - } - exited++; - } - } - } - catch (InterruptedException e) - { - // Do nothing. - } - } - - int errorCnt = 0; - for (AVMTester tester : testers) - { - errorCnt += (tester.getError() ? 1 : 0); - } - - if (errorCnt > 0) - { - StringBuffer errorStack = new StringBuffer(); - errorStack.append("Stress tester errors: ").append(errorCnt).append(" out of ").append(testers.size()).append(" are in error state"); - - for (AVMTester tester : testers) - { - if (tester.getError()) - { - errorStack.append("\n\n").append(tester.getErrorStackTrace()); - } - } - - fail(errorStack.toString()); - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } -} diff --git a/source/test-java/org/alfresco/repo/avm/AVMTestSuite.java b/source/test-java/org/alfresco/repo/avm/AVMTestSuite.java deleted file mode 100644 index 474be4ab51..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMTestSuite.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.repo.avm; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.alfresco.repo.avm.locking.AVMLockingServiceTest; -import org.alfresco.repo.avm.util.VersionPathTest; -import org.alfresco.test_category.LegacyCategory; -import org.alfresco.util.ApplicationContextHelper; -import org.junit.experimental.categories.Category; -import org.springframework.context.ApplicationContext; - -/** - * AVM test suite - * - * @author brittp, janv - */ -@Category(LegacyCategory.class) -public class AVMTestSuite extends TestSuite -{ - public static ApplicationContext getContext() - { - //ApplicationContextHelper.setUseLazyLoading(false); - //ApplicationContextHelper.setNoAutoStart(true); - - /* - return ApplicationContextHelper.getApplicationContext( - new String[] { "classpath:alfresco/minimal-context.xml" } - ); - */ - - return ApplicationContextHelper.getApplicationContext(); - } - - /** - * Creates the test suite - * - * @return the test suite - */ - public static Test suite() - { - // Setup the context - getContext(); - - TestSuite suite = new TestSuite(); - - - // Add the tests to be run - - suite.addTestSuite(AVMNodeConverterTest.class); - suite.addTestSuite(AVMExpiredContentTest.class); - suite.addTestSuite(AVMDeploymentAttemptCleanerTest.class); - - suite.addTestSuite(PurgeTestP.class); - - suite.addTestSuite(AVMServiceTestBase.class); - suite.addTestSuite(AVMServiceTest.class); - - suite.addTestSuite(AVMServiceLocalTest.class); - suite.addTestSuite(AVMLockingServiceTest.class); - - suite.addTestSuite(AVMServicePermissionsTest.class); - suite.addTestSuite(AVMServiceIndexTest.class); - suite.addTestSuite(AVMServicePerfTest.class); - - suite.addTestSuite(AVMDiffPerformanceTest.class); - suite.addTestSuite(AVMChildNamePatternMatchPerformanceTest.class); - - suite.addTestSuite(VersionPathTest.class); - suite.addTestSuite(WCMInheritPermissionsTest.class); - - suite.addTestSuite(AVMServiceConcurrentTest.class); - - suite.addTestSuite(AVMCrawlTestP.class); - suite.addTestSuite(AVMScaleTestP.class); - suite.addTestSuite(AVMStressTestP.class); - suite.addTestSuite(SimultaneousLoadTest.class); - - /* - // note:to test remotely need running repo (otherwise effectively repeats AVMServiceLocalTest) - suite.addTestSuite(AVMServiceRemoteSystemTest.class); - */ - - return suite; - } -} diff --git a/source/test-java/org/alfresco/repo/avm/AVMTester.java b/source/test-java/org/alfresco/repo/avm/AVMTester.java deleted file mode 100644 index fed84e6ea5..0000000000 --- a/source/test-java/org/alfresco/repo/avm/AVMTester.java +++ /dev/null @@ -1,661 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . */ - -package org.alfresco.repo.avm; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.io.PrintStream; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.Set; - -import org.alfresco.service.cmr.avm.AVMException; -import org.alfresco.service.cmr.avm.AVMNodeDescriptor; -import org.alfresco.service.cmr.avm.AVMService; -import org.alfresco.service.cmr.repository.ContentIOException; -import org.alfresco.test_category.LegacyCategory; -import org.junit.experimental.categories.Category; - -/** - * This is a Runnable which randomly performs operations on an AVM Repository. - * It's purpose is to act as a single thread in a multithreaded stress tester. - * @author britt - */ -@Category(LegacyCategory.class) -class AVMTester implements Runnable -{ - // Operation codes. - private static final int CREATE_FILE = 0; - private static final int CREATE_DIR = 1; - private static final int RENAME = 2; - private static final int CREATE_LAYERED_DIR = 3; - private static final int CREATE_LAYERED_FILE = 4; - private static final int REMOVE_NODE = 5; - private static final int MODIFY_FILE = 6; - private static final int READ_FILE = 7; - private static final int SNAPSHOT = 8; - - private List fAllPaths; - private List fAllDirectories; - private List fAllFiles; - - private static int fgOpCount = 0; - - /** - * The operation table. - */ - private int [] fOpTable; - - /** - * The number of operations to perform. - */ - private int fOpCount; - - /** - * The AVMService instance. - */ - private AVMService fService; - - /** - * The random number generators. - */ - private static Random fgRandom = new Random(); - - /** - * Names for nodes. - */ - private String[] fNames; - - /** - * Flag for whether this thread errored out. - */ - private boolean fError; - private String fErrorStackTrace = null; - - /** - * Flag for whether this thread should exit. - */ - private boolean fExit; - - /** - * Initialize this with the relative frequencies of differents operations. - * @param createFile - * @param createDir - * @param rename - * @param createLayeredDir - * @param createLayeredFile - * @param removeNode - * @param modifyFile - * @param readFile - * @param snapshot - * @param opCount The number of operations to perform. - * @param service The instance of AVMService. - */ - public AVMTester(int createFile, - int createDir, - int rename, - int createLayeredDir, - int createLayeredFile, - int removeNode, - int modifyFile, - int readFile, - int snapshot, - int opCount, - AVMService service) - { - fError = false; - fExit = false; - fService = service; - fOpCount = opCount; - int count = createFile + createDir + rename + createLayeredDir + - createLayeredFile + removeNode + modifyFile + readFile + - snapshot; - fOpTable = new int[count]; - int off = 0; - for (int i = 0; i < createFile; i++) - { - fOpTable[off + i] = CREATE_FILE; - } - off += createFile; - for (int i = 0; i < createDir; i++) - { - fOpTable[off + i] = CREATE_DIR; - } - off += createDir; - for (int i = 0; i < rename; i++) - { - fOpTable[off + i] = RENAME; - } - off += rename; - for (int i = 0; i < createLayeredDir; i++) - { - fOpTable[off + i] = CREATE_LAYERED_DIR; - } - off += createLayeredDir; - for (int i = 0; i < createLayeredFile; i++) - { - fOpTable[off + i] = CREATE_LAYERED_FILE; - } - off += createLayeredFile; - for (int i = 0; i < removeNode; i++) - { - fOpTable[off + i] = REMOVE_NODE; - } - off += removeNode; - for (int i = 0; i < modifyFile; i++) - { - fOpTable[off + i] = MODIFY_FILE; - } - off += modifyFile; - for (int i = 0; i < readFile; i++) - { - fOpTable[off + i] = READ_FILE; - } - off += readFile; - for (int i = 0; i < snapshot; i++) - { - fOpTable[off + i] = SNAPSHOT; - } - off += snapshot; - // Generate a bunch of names. - String [] letters = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", - "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", - "u", "v", "w", "x", "y", "z" }; - fNames = new String[26 * 26]; - for (int i = 0; i < 26; i++) - { - for (int j = 0; j < 26; j++) - { - fNames[i * 26 + j] = letters[i] + letters[j]; - } - } - } - - /** - * It's off. - */ - public void run() - { - try - { - long threadID = Thread.currentThread().getId(); - long startTime = System.currentTimeMillis(); - for (int i = 0; i < fOpCount; i++) - { - if (fExit) - { - return; - } - System.out.print(threadID + ":" + i + ":"); - int which = fgRandom.nextInt(fOpTable.length); - - try - { - switch (fOpTable[which]) - { - case CREATE_FILE : - createFile(); - break; - case CREATE_DIR : - createDirectory(); - break; - case RENAME : - rename(); - break; - case CREATE_LAYERED_DIR : - createLayeredDir(); - break; - case CREATE_LAYERED_FILE : - createLayeredFile(); - break; - case REMOVE_NODE : - removeNode(); - break; - case MODIFY_FILE : - modifyFile(); - break; - case READ_FILE : - readFile(); - break; - case SNAPSHOT : - snapshot(); - break; - } - IncCount(); - } - catch (Exception e) - { - e.printStackTrace(System.err); - if (e instanceof AVMException) - { - continue; - } - if (e instanceof ContentIOException) - { - continue; - } - throw new AVMException("Failure", e); - } - } - System.out.println(fAllPaths.size() + " fses in " + (System.currentTimeMillis() - startTime) + - "ms"); - } - catch (Throwable t) - { - t.printStackTrace(); - - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - t.printStackTrace(pw); - - fError = true; - fErrorStackTrace = sw.toString(); - } - } - - private void createFile() - { - String name = "PF" + fNames[fgRandom.nextInt(26 * 26)]; - String path = randomDirectory(); - if (path != null) - { - try - { - System.out.println("create " + path + " " + name); - PrintStream out = new PrintStream(fService.createFile(path, name)); - out.println(path + "/" + name); - out.close(); - addFile(appendPath(path, name)); - } - catch (Exception e) - { - handleException(e); - } - } - } - - private void createDirectory() - { - String name = "PD" + fNames[fgRandom.nextInt(26 * 26)]; - String path = randomDirectory(); - if (path != null) - { - try - { - System.out.println("mkdir " + path + " " + name); - fService.createDirectory(path, name); - addDirectory(appendPath(path, name)); - } - catch (Exception e) - { - handleException(e); - } - } - } - - private void rename() - { - String name = fNames[fgRandom.nextInt(26 * 26)]; - String path = randomPath(); - if (path == null) - { - return; - } - AVMNodeDescriptor desc = fService.lookup(-1, path); - if (desc == null) - { - return; - } - if (path.equals("main:/")) - { - return; - } - int lastSlash = path.lastIndexOf('/'); - String srcPath = path.substring(0, lastSlash); - if (srcPath.equals("main:")) - { - srcPath = srcPath + "/"; - } - String srcName = path.substring(lastSlash + 1); - String dstPath = randomDirectory(); - if (dstPath != null) - { - try - { - System.out.println("rename " + srcPath + " " + srcName + " " + dstPath + " " + name); - fService.rename(srcPath, srcName, dstPath, name); - removePath(path); - if (desc.isDirectory()) - { - addDirectory(appendPath(dstPath, name)); - } - else - { - addFile(appendPath(dstPath, name)); - } - } - catch (Exception e) - { - handleException(e); - } - } - } - - private void createLayeredDir() - { - String name = "LD" + fNames[fgRandom.nextInt(26 * 26)]; - String path = randomDirectory(); - String target = randomDirectory(); - if ((path != null) && (target != null)) - { - try - { - System.out.println("mklayereddir " + path + " " + name + " " + target); - fService.createLayeredDirectory(target, path, name); - addDirectory(appendPath(path, name)); - } - catch (Exception e) - { - handleException(e); - } - } - } - - private void createLayeredFile() - { - String name = "LF" + fNames[fgRandom.nextInt(26 * 26)]; - String path = randomDirectory(); - String target = randomFile(); - if ((path != null) && (target != null)) - { - try - { - System.out.println("createlayered " + path + " " + name + " " + target); - fService.createLayeredFile(target, path, name); - addFile(appendPath(path, name)); - } - catch (Exception e) - { - handleException(e); - } - } - } - - private void removeNode() - { - String target = randomPath(); - if (target == null) - { - return; - } - int lastSlash = target.lastIndexOf('/'); - String path = target.substring(0, lastSlash); - if (path.equals("main:")) - { - path = path + "/"; - } - String name = target.substring(lastSlash + 1); - try - { - System.out.println("remove " + target); - fService.removeNode(path, name); - removePath(target); - } - catch (Exception e) - { - handleException(e); - } - } - - private void modifyFile() - { - String path = randomFile(); - if (path != null) - { - try - { - System.out.println("modify " + path); - PrintStream out = - new PrintStream(fService.getFileOutputStream(path)); - out.println("I am " + path); - out.close(); - } - catch (Exception e) - { - handleException(e); - } - } - } - - private void readFile() - { - String path = randomFile(); - if (path != null) - { - try - { - System.out.println("read " + path); - BufferedReader reader = - new BufferedReader(new InputStreamReader(fService.getFileInputStream(-1, path))); - String line = reader.readLine(); - System.out.println(line); - reader.close(); - } - catch (Exception e) - { - handleException(e); - } - } - } - - public void refresh() - { - System.out.println("refresh"); - fAllPaths = new ArrayList(); - fAllDirectories = new ArrayList(); - fAllFiles = new ArrayList(); - fAllPaths.add("main:/"); - fAllDirectories.add("main:/"); - Set visited = new HashSet(); - AVMNodeDescriptor root = fService.getStoreRoot(-1, "main"); - recursiveRefresh(root, visited); - } - - private void recursiveRefresh(AVMNodeDescriptor dir, Set visited) - { - try - { - String baseName = dir.getPath().endsWith("/") ? dir.getPath() : dir.getPath() + "/"; - Map listing = fService.getDirectoryListing(dir); - for (String name : listing.keySet()) - { - String path = baseName + name; - AVMNodeDescriptor desc = listing.get(name); - switch (desc.getType()) - { - case AVMNodeType.LAYERED_DIRECTORY : - case AVMNodeType.PLAIN_DIRECTORY : - { - if (visited.contains(desc.getId())) - { - continue; - } - visited.add(desc.getId()); - fAllPaths.add(path); - fAllDirectories.add(path); - recursiveRefresh(desc, visited); - break; - } - case AVMNodeType.LAYERED_FILE : - case AVMNodeType.PLAIN_FILE : - { - fAllPaths.add(path); - fAllFiles.add(path); - break; - } - } - } - } - catch (Exception e) - { - handleException(e); - } - } - - private void snapshot() - { - System.out.println("snapshot"); - try - { - fService.createSnapshot("main", null, null); - } - catch (Exception e) - { - handleException(e); - } - } - - /** - * Is this thread in an error state. - */ - public boolean getError() - { - return fError; - } - - /** - * Get error stack trace - */ - public String getErrorStackTrace() - { - return fErrorStackTrace; - } - - public void setExit() - { - fExit = true; - } - - private void addDirectory(String path) - { - fAllDirectories.add(path); - fAllPaths.add(path); - } - - private void addFile(String path) - { - fAllFiles.add(path); - fAllPaths.add(path); - } - - private void removePath(String path) - { - List allPaths = new ArrayList(); - List allDirectories = new ArrayList(); - List allFiles = new ArrayList(); - for (String p : fAllPaths) - { - if (p.indexOf(path) != 0) - { - allPaths.add(p); - } - } - for (String p : fAllDirectories) - { - if (p.indexOf(path) != 0) - { - allDirectories.add(p); - } - } - for (String p : fAllFiles) - { - if (p.indexOf(path) != 0) - { - allFiles.add(p); - } - } - fAllPaths = allPaths; - fAllDirectories = allDirectories; - fAllFiles = allFiles; - } - - private String appendPath(String path, String name) - { - return path.endsWith("/") ? path + name : path + "/" + name; - } - - private String randomDirectory() - { - if (fAllDirectories.size() == 0) - { - System.out.println("cannot select random directory since no directories"); - return null; - } - return fAllDirectories.get(fgRandom.nextInt(fAllDirectories.size())); - } - - private String randomFile() - { - if (fAllFiles.size() == 0) - { - System.out.println("cannot select random file since no files"); - return null; - } - return fAllFiles.get(fgRandom.nextInt(fAllFiles.size())); - } - - private String randomPath() - { - if (fAllPaths.size() == 0) - { - System.out.println("cannot select random path since no paths"); - return null; - } - return fAllPaths.get(fgRandom.nextInt(fAllPaths.size())); - } - - private static synchronized void IncCount() - { - ++fgOpCount; - } - - public static synchronized int GetCount() - { - return fgOpCount; - } - - private void handleException(Exception e) - { - e.printStackTrace(System.err); - if (e instanceof AVMException) - { - return; - } - if (e instanceof ContentIOException) - { - return; - } - throw new AVMException("Naughty Exception.", e); - } -} diff --git a/source/test-java/org/alfresco/repo/avm/PurgeTestP.java b/source/test-java/org/alfresco/repo/avm/PurgeTestP.java deleted file mode 100644 index 7fd42df0c3..0000000000 --- a/source/test-java/org/alfresco/repo/avm/PurgeTestP.java +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . */ - -package org.alfresco.repo.avm; - -import org.alfresco.error.AlfrescoRuntimeException; -import org.alfresco.repo.avm.util.BulkLoader; -import org.alfresco.test_category.LegacyCategory; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.junit.experimental.categories.Category; - -/** - * Test the purge thread. - * @author britt - */ -@Category(LegacyCategory.class) -public class PurgeTestP extends AVMServiceTestBase -{ - private static Log logger = LogFactory.getLog(PurgeTestP.class); - - @Override - public void setUp() throws Exception - { - super.setUp(); - - runOrphanReaper(1000, 0); - } - - public void testRemoveNodes() throws Throwable - { - try - { - logger.info("testRemoveNodes"); - - int fileCount = 10; - - logger.info("Create "+fileCount+" files ..."); - - for (int i = 1; i <= fileCount; i++) - { - fService.createFile("main:/", "file"+i).close(); - } - - logger.info("Remove "+fileCount+" files ..."); - - for (int i = 1; i <= fileCount; i++) - { - fService.removeNode("main:/", "file"+i); - } - - runOrphanReaper(); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test purging a version. - */ - public void testPurgeVersion() throws Throwable - { - try - { - logger.info("testPurgeVersion"); - - setupBasicTree(); - BulkLoader loader = new BulkLoader(); - loader.setAvmService(fService); - long start = System.currentTimeMillis(); - - - //loader.recursiveLoad("source/web", "main:/"); - loader.recursiveLoad(getSourceFolder() + "/org/alfresco/repo/avm", "main:/"); - - - logger.info("Load time: " + (System.currentTimeMillis() - start) + "ms"); - fService.createSnapshot("main", null, null); - logger.info("Load time + snapshot: " + (System.currentTimeMillis() - start) + "ms"); - fService.purgeVersion(2, "main"); - - runOrphanReaper(); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test purging a version that's not the latest. - */ - public void testPurgeOlderVersion() throws Throwable - { - try - { - logger.info("testPurgeOlderVersion"); - - setupBasicTree(); - BulkLoader loader = new BulkLoader(); - loader.setAvmService(fService); - long start = System.currentTimeMillis(); - - - //loader.recursiveLoad("source", "main:/"); - loader.recursiveLoad(getSourceFolder() + "/org/alfresco/repo/avm", "main:/"); - - - logger.info("Load time: " + (System.currentTimeMillis() - start) + "ms"); - fService.createSnapshot("main", null, null); - logger.info("Load time + snapshot: " + (System.currentTimeMillis() - start) + "ms"); - - - //fService.removeNode("main:/source/java/org/alfresco", "repo"); - fService.removeNode("main:/avm", "actions"); - - - fService.createSnapshot("main", null, null); - fService.purgeVersion(2, "main"); - - runOrphanReaper(); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - /** - * Test purging an entire store. - */ - public void testPurgeStore() throws Throwable - { - try - { - logger.info("testPurgeStore"); - - setupBasicTree(); - - BulkLoader loader = new BulkLoader(); - loader.setAvmService(fService); - long start = System.currentTimeMillis(); - - - //loader.recursiveLoad("source", "main:/"); - loader.recursiveLoad(getSourceFolder() + "/org/alfresco/repo/avm", "main:/"); - - - logger.info("Load time: " + (System.currentTimeMillis() - start) + "ms"); - fService.createSnapshot("main", null, null); - logger.info("Load time + snapshot: " + (System.currentTimeMillis() - start) + "ms"); - - - //fService.createLayeredDirectory("main:/source", "main:/", "layer"); - //fService.removeNode("main:/layer/java/org/alfresco", "repo"); - //fService.createFile("main:/layer/java/org/alfresco", "goofy").close(); - fService.createLayeredDirectory("main:/avm", "main:/", "layer"); - fService.removeNode("main:/layer", "actions"); - fService.createFile("main:/layer", "goofy").close(); - - fService.createSnapshot("main", null, null); - - fService.purgeStore("main"); - - runOrphanReaper(); - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - private void runOrphanReaper() - { - // use configured defaults (eg. 50, 1000, 1000) - runOrphanReaper(-1, -1); - } - - private void runOrphanReaper(int batchSize, int activeBaseSleep) - { - logger.info("Reaper started"); - - if (batchSize != -1) - { - fReaper.setBatchSize(batchSize); - } - - if (activeBaseSleep != -1) - { - fReaper.setActiveBaseSleep(activeBaseSleep); - } - - fReaper.activate(); - fReaper.execute(); - - final int maxCycles = 100; - - int cycles = 0; - while (fReaper.isActive() && (cycles <= maxCycles)) - { - try - { - logger.info("Cycle: "+cycles); - Thread.sleep(2000); - } - catch (InterruptedException e) - { - // Do nothing. - logger.warn("OrphanReaper was interrupted - do nothing: "+e); - } - - cycles++; - } - - if (cycles > maxCycles) - { - throw new AlfrescoRuntimeException("Orphan reaper still active - failed to clean orphans in "+cycles+" wait cycles (max "+maxCycles+")"); - } - - if (batchSize != -1) - { - fReaper.setBatchSize(50); - } - - if (activeBaseSleep != -1) - { - fReaper.setActiveBaseSleep(1000); - } - - logger.info("Reaper finished (in "+cycles+" wait cycles)"); - } -} diff --git a/source/test-java/org/alfresco/repo/avm/SimultaneousLoadTest.java b/source/test-java/org/alfresco/repo/avm/SimultaneousLoadTest.java deleted file mode 100644 index b0784c334b..0000000000 --- a/source/test-java/org/alfresco/repo/avm/SimultaneousLoadTest.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . */ - -package org.alfresco.repo.avm; - -import org.alfresco.repo.avm.util.BulkLoader; -import org.alfresco.test_category.LegacyCategory; -import org.junit.experimental.categories.Category; - -/** - * This tests loading content simultaneously. - * @author britt - */ -@Category(LegacyCategory.class) -public class SimultaneousLoadTest extends AVMServiceTestBase -{ - /* - public void xtestSimulLoadA() throws Throwable - { - testSimultaneousLoad(1,1); - } - */ - - public void testSimulLoadB() throws Throwable - { - testSimultaneousLoad(5,3); - } - - /** - * Test loading content simultaneously. - */ - private void testSimultaneousLoad(int n, int m) throws Throwable - { - try - { - fReaper.setActiveBaseSleep(60000); - for (int i = 0; i < n; i++) - { - fService.createDirectory("main:/", "d" + i); - } - fService.createSnapshot("main", null, null); - Thread [] threads = new Thread[n]; - for (int i = 0; i < n; i++) - { - //Loader loader = new Loader("/Users/britt/stuff/" + i, "main:/d" + i, m); - Loader loader = new Loader("source/java/org/alfresco/repo/avm/actions", "main:/d" + i, m); - - threads[i] = new Thread(loader); - threads[i].start(); - } - for (int i = 0; i < n; i++) - { - threads[i].join(); - } - } - catch (Exception e) - { - e.printStackTrace(System.err); - throw e; - } - } - - private class Loader implements Runnable - { - /** - * The BulkLoader. - */ - private BulkLoader fLoader; - - /** - * The source directory. - */ - private String fSource; - - /** - * The destination path. - */ - private String fDestination; - - /** - * The number of copies of stuff to make serially. - */ - private int fCount; - - /** - * Set up. - * @param source Source directory. - * @param destination Destination path. - */ - public Loader(String source, String destination, int count) - { - fLoader = new BulkLoader(); - fLoader.setAvmService(fService); - fSource = source; - fDestination = destination; - fCount = count; - } - - public void run() - { - for (int i = 0; i < fCount; i++) - { - fService.createDirectory(fDestination, "" + i); - fLoader.recursiveLoad(fSource, fDestination + "/" + i); - } - } - } -} diff --git a/source/test-java/org/alfresco/repo/avm/TestDeploymentCallback.java b/source/test-java/org/alfresco/repo/avm/TestDeploymentCallback.java deleted file mode 100644 index da6d5f24ca..0000000000 --- a/source/test-java/org/alfresco/repo/avm/TestDeploymentCallback.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ - -package org.alfresco.repo.avm; - -import org.alfresco.service.cmr.avm.deploy.DeploymentCallback; -import org.alfresco.service.cmr.avm.deploy.DeploymentEvent; -import org.alfresco.test_category.LegacyCategory; -import org.junit.experimental.categories.Category; - -/** - * Trivial deployment callback for testing. - * @author britt - */ -@Category(LegacyCategory.class) -public class TestDeploymentCallback implements DeploymentCallback -{ - public void eventOccurred(DeploymentEvent event) - { - System.out.println(event); - } -} diff --git a/source/test-java/org/alfresco/repo/avm/WCMInheritPermissionsTest.java b/source/test-java/org/alfresco/repo/avm/WCMInheritPermissionsTest.java deleted file mode 100644 index 6a7077a9a0..0000000000 --- a/source/test-java/org/alfresco/repo/avm/WCMInheritPermissionsTest.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.repo.avm; - -import java.io.IOException; - -import org.alfresco.config.JNDIConstants; -import org.alfresco.service.cmr.avm.AVMNodeDescriptor; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.security.PermissionService; -import org.alfresco.test_category.LegacyCategory; -import org.junit.experimental.categories.Category; - -@Category(LegacyCategory.class) -public class WCMInheritPermissionsTest extends AVMServiceTestBase -{ - private static final String FILE_NAME = "fileForExport"; - private static final String STORE_NAME = "TestStore1"; - private static final String ROOT = "ROOT"; - - protected PermissionService permissionService; - - @Override - protected void setUp() throws Exception - { - super.setUp(); - - permissionService = (PermissionService)fContext.getBean("permissionService"); - } - - private void createStagingWithSnapshots(String storeName) throws IOException - { - if (fService.getStore(storeName) != null) - { - fService.purgeStore(storeName); - } - - fService.createStore(storeName); - assertNotNull(fService.getStore(storeName)); - - fService.createDirectory(storeName + ":/", JNDIConstants.DIR_DEFAULT_WWW); - fService.createSnapshot(storeName, "first", "first"); - assertNotNull(fService.lookup(-1, storeName + ":/" + JNDIConstants.DIR_DEFAULT_WWW)); - fService.createDirectory(storeName + ":/" + JNDIConstants.DIR_DEFAULT_WWW, JNDIConstants.DIR_DEFAULT_APPBASE); - fService.createSnapshot(storeName, "second", "second"); - assertNotNull(fService.lookup(-1, storeName + ":/" + JNDIConstants.DIR_DEFAULT_WWW + "/" + JNDIConstants.DIR_DEFAULT_APPBASE)); - fService.createDirectory(storeName + ":/" + JNDIConstants.DIR_DEFAULT_WWW + "/" + JNDIConstants.DIR_DEFAULT_APPBASE, ROOT); - fService.createSnapshot(storeName, "third", "third"); - assertNotNull(fService.lookup(-1, storeName + ":/" + JNDIConstants.DIR_DEFAULT_WWW + "/" + JNDIConstants.DIR_DEFAULT_APPBASE + "/" + ROOT)); - fService.createFile(storeName + ":/" + JNDIConstants.DIR_DEFAULT_WWW + "/" + JNDIConstants.DIR_DEFAULT_APPBASE + "/" + ROOT, FILE_NAME).close(); - fService.createSnapshot(storeName, "fourth", "fourth"); - assertNotNull(fService.lookup(-1, storeName + ":/" + JNDIConstants.DIR_DEFAULT_WWW + "/" + JNDIConstants.DIR_DEFAULT_APPBASE + "/" + ROOT + "/" + FILE_NAME)); - } - - private void removeStore(String storeName) - { - fService.purgeStore(storeName); - assertNull(fService.getStore(storeName)); - } - - public void testSetInheritParentPermissions() throws IOException - { - createStagingWithSnapshots(STORE_NAME); - - AVMNodeDescriptor nodeDescriptor = fService.lookup(-1, STORE_NAME + ":/" + JNDIConstants.DIR_DEFAULT_WWW + "/" + JNDIConstants.DIR_DEFAULT_APPBASE + "/" + ROOT + "/" - + FILE_NAME); - assertNotNull(nodeDescriptor); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, nodeDescriptor.getPath()); - assertNotNull(nodeRef); - - permissionService.setInheritParentPermissions(nodeRef, false); - assertFalse(permissionService.getInheritParentPermissions(nodeRef)); - permissionService.setInheritParentPermissions(nodeRef, true); - assertTrue(permissionService.getInheritParentPermissions(nodeRef)); - - removeStore(STORE_NAME); - } -} diff --git a/source/test-java/org/alfresco/repo/avm/locking/AVMLockingServiceTest.java b/source/test-java/org/alfresco/repo/avm/locking/AVMLockingServiceTest.java deleted file mode 100644 index 550576b0ca..0000000000 --- a/source/test-java/org/alfresco/repo/avm/locking/AVMLockingServiceTest.java +++ /dev/null @@ -1,428 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.repo.avm.locking; - -import java.io.IOException; -import java.io.Serializable; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import junit.framework.TestCase; - -import org.alfresco.model.ContentModel; -import org.alfresco.model.WCMAppModel; -import org.alfresco.repo.avm.util.BulkLoader; -import org.alfresco.repo.content.MimetypeMap; -import org.alfresco.repo.domain.PropertyValue; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.transaction.RetryingTransactionHelper; -import org.alfresco.service.cmr.avm.AVMService; -import org.alfresco.service.cmr.avm.locking.AVMLockingException; -import org.alfresco.service.cmr.avm.locking.AVMLockingService; -import org.alfresco.service.cmr.avmsync.AVMDifference; -import org.alfresco.service.cmr.avmsync.AVMSyncService; -import org.alfresco.service.cmr.dictionary.DataTypeDefinition; -import org.alfresco.service.cmr.remote.RepoRemote; -import org.alfresco.service.cmr.repository.ContentWriter; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.cmr.security.AuthorityService; -import org.alfresco.service.cmr.security.AuthorityType; -import org.alfresco.service.cmr.security.MutableAuthenticationService; -import org.alfresco.service.cmr.security.PersonService; -import org.alfresco.service.namespace.NamespaceService; -import org.alfresco.service.namespace.QName; -import org.alfresco.test_category.LegacyCategory; -import org.alfresco.util.ApplicationContextHelper; -import org.alfresco.wcm.sandbox.SandboxConstants; -import org.alfresco.wcm.util.WCMUtil; -import org.junit.experimental.categories.Category; -import org.springframework.context.ApplicationContext; - -/** - * Tests for WCM (web project) locking - AVMLockingService & AVMLockingAwareService - * - * @author Derek Hulley, janv - */ -@Category(LegacyCategory.class) -public class AVMLockingServiceTest extends TestCase -{ - private static String[] TESTUSERS = {"Buffy", "Willow", "Xander", "Tara", "Spike"}; - private static String[] TESTAUTHORITIES = {"GROUP_Scoobies", "ROLE_SUPER_POWERED", "GROUP_vampires"}; - - private ApplicationContext ctx = null; - - private static AVMLockingService lockingService; - private static AVMService avmService; - private static AVMSyncService syncService; - private static PersonService personService; - private static AuthorityService authorityService; - private static MutableAuthenticationService authenticationService; - private static NodeService nodeService; - private static RepoRemote repoRemoteService; - - private static final String testWP1 = "alfresco-"+System.currentTimeMillis(); - private NodeRef testWP1NodeRef; - - @Override - protected void setUp() throws Exception - { - ctx = ApplicationContextHelper.getApplicationContext(); - lockingService = (AVMLockingService)ctx.getBean("AVMLockingService"); - avmService = (AVMService) ctx.getBean("AVMLockingAwareService"); - syncService = (AVMSyncService)ctx.getBean("AVMSyncService"); - personService = (PersonService)ctx.getBean("PersonService"); - authorityService = (AuthorityService)ctx.getBean("AuthorityService"); - authenticationService = (MutableAuthenticationService)ctx.getBean("AuthenticationService"); - nodeService = (NodeService)ctx.getBean("NodeService"); - repoRemoteService = (RepoRemote)ctx.getBean("RepoRemoteService"); - - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName()); - - // Set up a fake web project. - NodeRef root = repoRemoteService.getRoot(); - Map properties = new HashMap(); - properties.put(WCMAppModel.PROP_AVMSTORE, testWP1); - testWP1NodeRef = nodeService.createNode(root, ContentModel.ASSOC_CONTAINS, - QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, testWP1), - WCMAppModel.TYPE_AVMWEBFOLDER, properties).getChildRef(); - - // Set up sample users groups and roles. - - cleanUsersAndGroups(); - - authenticationService.createAuthentication("Buffy", "Buffy".toCharArray()); - personService.getPerson("Buffy"); - authorityService.createAuthority(AuthorityType.GROUP, "Scoobies"); - authorityService.addAuthority("GROUP_Scoobies", "Buffy"); - authorityService.createAuthority(AuthorityType.ROLE, "SUPER_POWERED"); - authorityService.addAuthority("ROLE_SUPER_POWERED", "Buffy"); - - authenticationService.createAuthentication("Willow", "Willow".toCharArray()); - personService.getPerson("Willow"); - authorityService.addAuthority("GROUP_Scoobies", "Willow"); - - authenticationService.createAuthentication("Xander", "Xander".toCharArray()); - personService.getPerson("Xander"); - authorityService.addAuthority("GROUP_Scoobies", "Xander"); - - authenticationService.createAuthentication("Tara", "Tara".toCharArray()); - personService.getPerson("Tara"); - - authenticationService.createAuthentication("Spike", "Spike".toCharArray()); - personService.getPerson("Spike"); - authorityService.addAuthority("ROLE_SUPER_POWERED", "Spike"); - authorityService.createAuthority(AuthorityType.GROUP, "vampires"); - authorityService.addAuthority("GROUP_vampires", "Spike"); - } - - @Override - protected void tearDown() throws Exception - { - lockingService.removeLocks(testWP1); - cleanUsersAndGroups(); - nodeService.deleteNode(testWP1NodeRef); - } - - private void cleanUsersAndGroups() - { - for (String testUser : TESTUSERS) - { - if (authenticationService.authenticationExists(testUser)) - { - authenticationService.deleteAuthentication(testUser); - } - - if (personService.personExists(testUser)) - { - personService.deletePerson(testUser); - } - } - - for (String testAuthority : TESTAUTHORITIES) - { - if (authorityService.authorityExists(testAuthority)) - { - authorityService.deleteAuthority(testAuthority); - } - } - } - - private static final Map EMPTY_MAP = Collections.emptyMap(); - - public void testAll() throws Exception - { - lockingService.lock(testWP1, "Revello Drive/1630", TESTUSERS[0], EMPTY_MAP); - assertEquals(lockingService.getLockOwner(testWP1, "Revello Drive/1630"), TESTUSERS[0]); - lockingService.removeLock(testWP1, "Revello Drive/1630"); - assertNull(lockingService.getLockOwner(testWP1, "Revello Drive/1630")); - - lockingService.lock(testWP1, "UC Sunnydale/Stevenson Hall", TESTUSERS[0], EMPTY_MAP); - assertEquals(lockingService.getLockOwner(testWP1, "UC Sunnydale/Stevenson Hall"), TESTUSERS[0]); - - try - { - lockingService.lock(testWP1, "UC Sunnydale/Stevenson Hall", TESTUSERS[1], EMPTY_MAP); - fail("Failed to detect existing lock"); - } - catch (AVMLockingException e) - { - // Expected - } - } - - @SuppressWarnings("deprecation") - public void testRoleBasedLocking() - { - Map lockData = Collections.singletonMap(WCMUtil.LOCK_KEY_STORE_NAME, "Sunnydale"); - - // lock owner = "ROLE_SUPER_POWERED" - lockingService.lock(testWP1, "TheInitiative/Adam/plans.txt", TESTAUTHORITIES[1], lockData); - - assertTrue(lockingService.hasAccess(testWP1, "Sunnydale:/TheInitiative/Adam/plans.txt", "Buffy")); - assertTrue(lockingService.hasAccess(testWP1, "Sunnydale:/TheInitiative/Adam/plans.txt", "Spike")); - assertFalse(lockingService.hasAccess(testWP1, "Sunnydale:/TheInitiative/Adam/plans.txt", "Willow")); - assertFalse(lockingService.hasAccess(testWP1, "Sunnydale:/TheInitiative/Adam/plans.txt", "Tara")); // Tara does not belong to ROLE_SUPER_POWERED - assertFalse(lockingService.hasAccess(testWP1, "Sunnydale:/TheInitiative/Adam/plans.txt", "Xander")); - - assertFalse(lockingService.hasAccess(testWP1, "LA:/TheInitiative/Adam/plans.txt", "Buffy")); - assertFalse(lockingService.hasAccess(testWP1, "LA:/TheInitiative/Adam/plans.txt", "Spike")); - assertFalse(lockingService.hasAccess(testWP1, "LA:/TheInitiative/Adam/plans.txt", "Willow")); - assertFalse(lockingService.hasAccess(testWP1, "LA:/TheInitiative/Adam/plans.txt", "Tara")); - assertFalse(lockingService.hasAccess(testWP1, "LA:/TheInitiative/Adam/plans.txt", "Xander")); - } - - @SuppressWarnings("deprecation") - public void testGroupBasedLocking() - { - Map lockData = Collections.singletonMap(WCMUtil.LOCK_KEY_STORE_NAME, "Sunnydale"); - - // lock owner = "GROUP_Scoobies" - lockingService.lock(testWP1, "TheInitiative/Adam/plans.txt", TESTAUTHORITIES[0], lockData); - - assertTrue(lockingService.hasAccess(testWP1, "Sunnydale:/TheInitiative/Adam/plans.txt", "Buffy")); - assertFalse(lockingService.hasAccess(testWP1, "Sunnydale:/TheInitiative/Adam/plans.txt", "Spike")); - assertTrue(lockingService.hasAccess(testWP1, "Sunnydale:/TheInitiative/Adam/plans.txt", "Willow")); - assertFalse(lockingService.hasAccess(testWP1, "Sunnydale:/TheInitiative/Adam/plans.txt", "Tara")); // Tara does not belong to GROUP_Scoobies - assertTrue(lockingService.hasAccess(testWP1, "Sunnydale:/TheInitiative/Adam/plans.txt", "Xander")); - - assertFalse(lockingService.hasAccess(testWP1, "LA:/TheInitiative/Adam/plans.txt", "Buffy")); - assertFalse(lockingService.hasAccess(testWP1, "LA:/TheInitiative/Adam/plans.txt", "Spike")); - assertFalse(lockingService.hasAccess(testWP1, "LA:/TheInitiative/Adam/plans.txt", "Willow")); - assertFalse(lockingService.hasAccess(testWP1, "LA:/TheInitiative/Adam/plans.txt", "Tara")); - assertFalse(lockingService.hasAccess(testWP1, "LA:/TheInitiative/Adam/plans.txt", "Xander")); - } - - @SuppressWarnings("deprecation") - public void testLockModification() - { - Map lockData = Collections.singletonMap(WCMUtil.LOCK_KEY_STORE_NAME, "Sunnydale"); - - // lock owner = "GROUP_Scoobies" - lockingService.lock(testWP1, "TheInitiative/Adam/plans.txt", TESTAUTHORITIES[0], lockData); - - assertTrue(lockingService.hasAccess(testWP1, "Sunnydale:/TheInitiative/Adam/plans.txt", "Buffy")); - assertFalse(lockingService.hasAccess(testWP1, "Sunnydale:/TheInitiative/Adam/plans.txt", "Spike")); - assertTrue(lockingService.hasAccess(testWP1, "Sunnydale:/TheInitiative/Adam/plans.txt", "Willow")); - assertFalse(lockingService.hasAccess(testWP1, "Sunnydale:/TheInitiative/Adam/plans.txt", "Tara")); // Tara does not belong to GROUP_Scoobies - assertTrue(lockingService.hasAccess(testWP1, "Sunnydale:/TheInitiative/Adam/plans.txt", "Xander")); - - assertFalse(lockingService.hasAccess(testWP1, "LA:/TheInitiative/Adam/plans.txt", "Buffy")); - assertFalse(lockingService.hasAccess(testWP1, "LA:/TheInitiative/Adam/plans.txt", "Spike")); - assertFalse(lockingService.hasAccess(testWP1, "LA:/TheInitiative/Adam/plans.txt", "Willow")); - assertFalse(lockingService.hasAccess(testWP1, "LA:/TheInitiative/Adam/plans.txt", "Tara")); - assertFalse(lockingService.hasAccess(testWP1, "LA:/TheInitiative/Adam/plans.txt", "Xander")); - - lockData = Collections.singletonMap(WCMUtil.LOCK_KEY_STORE_NAME, "Sunnydale"); - - // lock owner = "GROUP_Scoobies" - lockingService.modifyLock( - testWP1, "TheInitiative/Adam/plans.txt", TESTAUTHORITIES[0], - testWP1, "ScrapHeap/Adam/plans.txt", lockData); - - assertTrue(lockingService.hasAccess(testWP1, "Sunnydale:/ScrapHeap/Adam/plans.txt", "Buffy")); - assertFalse(lockingService.hasAccess(testWP1, "Sunnydale:/ScrapHeap/Adam/plans.txt", "Spike")); - assertTrue(lockingService.hasAccess(testWP1, "Sunnydale:/ScrapHeap/Adam/plans.txt", "Willow")); - assertFalse(lockingService.hasAccess(testWP1, "Sunnydale:/ScrapHeap/Adam/plans.txt", "Tara")); // Tara does not belong to GROUP_Scoobies - assertTrue(lockingService.hasAccess(testWP1, "Sunnydale:/ScrapHeap/Adam/plans.txt", "Xander")); - - lockData = Collections.singletonMap(WCMUtil.LOCK_KEY_STORE_NAME, "LA"); - - lockingService.modifyLock( - testWP1, "ScrapHeap/Adam/plans.txt", TESTAUTHORITIES[0], - testWP1, "ScrapHeap/Adam/plans.txt", lockData); - - assertTrue(lockingService.hasAccess(testWP1, "LA:/ScrapHeap/Adam/plans.txt", "Buffy")); - assertFalse(lockingService.hasAccess(testWP1, "LA:/ScrapHeap/Adam/plans.txt", "Spike")); - assertTrue(lockingService.hasAccess(testWP1, "LA:/ScrapHeap/Adam/plans.txt", "Willow")); - assertFalse(lockingService.hasAccess(testWP1, "LA:/ScrapHeap/Adam/plans.txt", "Tara")); // Tara does not belong to GROUP_Scoobies - assertTrue(lockingService.hasAccess(testWP1, "LA:/ScrapHeap/Adam/plans.txt", "Xander")); - - assertFalse(lockingService.hasAccess(testWP1, "Sunnydale:/ScrapHeap/Adam/plans.txt", "Buffy")); - assertFalse(lockingService.hasAccess(testWP1, "Sunnydale:/ScrapHeap/Adam/plans.txt", "Spike")); - assertFalse(lockingService.hasAccess(testWP1, "Sunnydale:/ScrapHeap/Adam/plans.txt", "Willow")); - assertFalse(lockingService.hasAccess(testWP1, "Sunnydale:/ScrapHeap/Adam/plans.txt", "Tara")); - assertFalse(lockingService.hasAccess(testWP1, "Sunnydale:/ScrapHeap/Adam/plans.txt", "Xander")); - } - - /** - * Minimal testing of Locking Aware service. - */ - public void testLockingAwareService() throws Exception - { - try - { - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - if (avmService.getStore("main") == null) - { - avmService.createStore("main"); - } - - // note: locking applies to WCM web projects, hence relies on WCM sandbox conventions (naming and properties) - avmService.setStoreProperty("main", SandboxConstants.PROP_WEB_PROJECT_NODE_REF, new PropertyValue(DataTypeDefinition.NODE_REF, new NodeRef("workspace://SpacesStore/dummy"))); - - if (avmService.getStore("main--admin") == null) - { - avmService.createStore("main--admin"); - } - - setupBasicTree0(); - - List diffs = syncService.compare(-1, "main:/", -1, "main--admin:/", null); - assertEquals(2, diffs.size()); - assertEquals("[main:/a[-1] > main--admin:/a[-1], main:/d[-1] > main--admin:/d[-1]]", diffs.toString()); - - syncService.update(diffs, null, false, false, false, false, null, null); - - RetryingTransactionHelper.RetryingTransactionCallback cb = new RetryingTransactionHelper.RetryingTransactionCallback() - { - public Object execute() throws Exception - { - BulkLoader loader = new BulkLoader(); - loader.setAvmService(avmService); - loader.recursiveLoad( - System.getProperty("alfresco.java.sources.dir", "source/java") + "/org/alfresco/repo/avm", - "main--admin:/"); - return null; - } - }; - RetryingTransactionHelper helper = (RetryingTransactionHelper) ctx.getBean("retryingTransactionHelper"); - helper.doInTransaction(cb); - } - finally - { - lockingService.removeLocks("main"); - - avmService.purgeStore("main--admin"); - avmService.purgeStore("main"); - - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName()); - } - } - - // Minimal test of locking with file 'rename' across web projects - @SuppressWarnings("deprecation") - public void testLockingAwareServiceFileRename() throws Exception - { - lockingService.removeLocks("wpA"); - lockingService.removeLocks("wpB"); - try - { - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - avmService.createStore("wpA"); - avmService.createStore("wpA--admin"); - - avmService.createStore("wpB"); - avmService.createStore("wpB--admin"); - - // note: locking applies to WCM web projects, hence relies on WCM sandbox conventions (naming and properties) - avmService.setStoreProperty("wpA", SandboxConstants.PROP_WEB_PROJECT_NODE_REF, new PropertyValue(DataTypeDefinition.NODE_REF, new NodeRef("workspace://SpacesStore/dummyA"))); - avmService.setStoreProperty("wpB", SandboxConstants.PROP_WEB_PROJECT_NODE_REF, new PropertyValue(DataTypeDefinition.NODE_REF, new NodeRef("workspace://SpacesStore/dummyB"))); - - assertNull(lockingService.getLockOwner("wpA", "/file1.txt")); - assertTrue(lockingService.hasAccess("wpA", "wpA--admin:/file1.txt", "admin")); - - avmService.createFile("wpA--admin:/", "file1.txt").close(); - - assertNotNull(lockingService.getLockOwner("wpA", "/file1.txt")); - assertEquals("admin", lockingService.getLockOwner("wpA", "/file1.txt")); - assertTrue(lockingService.hasAccess("wpA", "wpA--admin:/file1.txt", "admin")); - - assertNull(lockingService.getLockOwner("wpB", "/file1.txt")); - assertTrue(lockingService.hasAccess("wpB", "wpB--admin:/file1.txt", "admin")); - - // ETHREEOH-1544 - avmService.rename("wpA--admin:/", "file1.txt", "wpB--admin:/", "file1.txt"); - - assertNull(lockingService.getLockOwner("wpA", "/file1.txt")); - assertTrue(lockingService.hasAccess("wpA", "wpA--admin:/file1.txt", "admin")); - - assertNotNull(lockingService.getLockOwner("wpB", "/file1.txt")); - assertEquals("admin", lockingService.getLockOwner("wpB", "/file1.txt")); - assertTrue(lockingService.hasAccess("wpB", "wpB--admin:/file1.txt", "admin")); - } - finally - { - try { lockingService.removeLocks("wpA"); } catch (Exception e) {} - - if (avmService.getStore("wpA--admin") != null) { avmService.purgeStore("wpA--admin"); } - if (avmService.getStore("wpA") != null) { avmService.purgeStore("wpA"); } - - try { lockingService.removeLocks("wpB"); } catch (Exception e) {} - - if (avmService.getStore("wpB--admin") != null) { avmService.purgeStore("wpB--admin"); } - if (avmService.getStore("wpB") != null) { avmService.purgeStore("wpB"); } - - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName()); - } - } - - /** - * Setup a basic tree. - */ - protected void setupBasicTree0() - throws IOException - { - avmService.createDirectory("main:/", "a"); - avmService.createDirectory("main:/a", "b"); - avmService.createDirectory("main:/a/b", "c"); - avmService.createDirectory("main:/", "d"); - avmService.createDirectory("main:/d", "e"); - avmService.createDirectory("main:/d/e", "f"); - - avmService.createFile("main:/a/b/c", "foo").close(); - ContentWriter writer = avmService.getContentWriter("main:/a/b/c/foo", true); - writer.setEncoding("UTF-8"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent("I am main:/a/b/c/foo"); - - avmService.createFile("main:/a/b/c", "bar").close(); - writer = avmService.getContentWriter("main:/a/b/c/bar", true); - // Force a conversion - writer.setEncoding("UTF-16"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent("I am main:/a/b/c/bar"); - - avmService.createSnapshot("main", null, null); - } -} diff --git a/source/test-java/org/alfresco/repo/avm/util/VersionPathTest.java b/source/test-java/org/alfresco/repo/avm/util/VersionPathTest.java deleted file mode 100644 index ca55f49558..0000000000 --- a/source/test-java/org/alfresco/repo/avm/util/VersionPathTest.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.repo.avm.util; - -import java.util.List; - -import org.alfresco.repo.avm.AVMNodeConverter; -import org.alfresco.test_category.LegacyCategory; -import org.alfresco.util.Pair; -import org.junit.experimental.categories.Category; - -import junit.framework.TestCase; - -/** - * Test out stuffing and unstuffing Version/Paths - * @author britt - */ -@Category(LegacyCategory.class) -public class VersionPathTest extends TestCase -{ - public void testVersionPath() - { - VersionPathStuffer stuffer = new VersionPathStuffer(); - stuffer.add(-1, "figs:/bottom/top"); - stuffer.add(1, "piggy:/back/ride"); - stuffer.add(2, "main:/boring/path/to/nowhere"); - String stuffed = stuffer.toString(); - VersionPathUnstuffer unstuffer = new VersionPathUnstuffer(stuffed); - List> items = unstuffer.getVersionPaths(); - assertEquals(3, items.size()); - assertEquals(-1, (int)items.get(0).getFirst()); - assertEquals("figs:/bottom/top", items.get(0).getSecond()); - assertEquals(1, (int)items.get(1).getFirst()); - assertEquals("piggy:/back/ride", items.get(1).getSecond()); - assertEquals(2, (int)items.get(2).getFirst()); - assertEquals("main:/boring/path/to/nowhere", items.get(2).getSecond()); - stuffer = new VersionPathStuffer(); - for (Pair item : items) - { - stuffer.add(AVMNodeConverter.ToNodeRef(item.getFirst(), item.getSecond())); - } - String stuffed2 = stuffer.toString(); - assertEquals(stuffed, stuffed2); - System.out.println(stuffed2); - } -} diff --git a/source/test-java/org/alfresco/repo/deploy/ASRDeploymentTest.java b/source/test-java/org/alfresco/repo/deploy/ASRDeploymentTest.java deleted file mode 100644 index b0602c72de..0000000000 --- a/source/test-java/org/alfresco/repo/deploy/ASRDeploymentTest.java +++ /dev/null @@ -1,311 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ - -package org.alfresco.repo.deploy; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.alfresco.repo.avm.AVMServiceTestBase; -import org.alfresco.repo.content.MimetypeMap; -import org.alfresco.repo.domain.PropertyValue; -import org.alfresco.service.cmr.avm.AVMException; -import org.alfresco.service.cmr.avm.AVMNodeDescriptor; -import org.alfresco.service.cmr.avm.AVMNotFoundException; -import org.alfresco.service.cmr.avm.deploy.DeploymentCallback; -import org.alfresco.service.cmr.avm.deploy.DeploymentEvent; -import org.alfresco.service.cmr.avm.deploy.DeploymentReport; -import org.alfresco.service.cmr.avm.deploy.DeploymentReportCallback; -import org.alfresco.service.cmr.avm.deploy.DeploymentService; -import org.alfresco.service.cmr.repository.ContentReader; -import org.alfresco.service.cmr.repository.ContentWriter; -import org.alfresco.service.namespace.QName; -import org.alfresco.test_category.LegacyCategory; -import org.alfresco.util.NameMatcher; -import org.junit.experimental.categories.Category; - -/** - * End to end test of deployment to an alfresco system receiver (ASR). - * @author britt - * @author mrogers - */ -@Category(LegacyCategory.class) -public class ASRDeploymentTest extends AVMServiceTestBase -{ - - DeploymentService service = null; - - - @Override - protected void setUp() throws Exception - { - super.setUp(); - - service = (DeploymentService)fContext.getBean("DeploymentService"); - - } - - protected void tearDown() throws Exception - { - super.tearDown(); - - } - - public void testBasic() - throws Exception - { - - NameMatcher matcher = (NameMatcher)fContext.getBean("globalPathExcluder"); - - String destStore = "ASRDeploymentTest"; - try - { - fService.purgeStore(destStore); - } - catch (AVMNotFoundException e) - { - // nothing to do - store did not exist - } - /** - * set up our test tree - */ - fService.createDirectory("main:/", "a"); - - String rootText = "Angel is an American television series, a spin-off of the television series Buffy the Vampire Slayer. The series was created by Buffy's creator, Joss Whedon, in collaboration with David Greenwalt, and first aired on October 5, 1999. Like Buffy, it was produced by Whedon's production company, Mutant Enemy."; - fService.createFile("main:/", "rootFile").close(); - ContentWriter writer = fService.getContentWriter("main:/rootFile", true); - - // Force a conversion - writer.setEncoding("UTF-16"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent(rootText); - - fService.createDirectory("main:/a", "b"); - fService.createDirectory("main:/a/b", "c"); - fService.createDirectory("main:/", "d"); - fService.createDirectory("main:/d", "e"); - fService.createDirectory("main:/d/e", "f"); - - fService.createFile("main:/a/b/c", "foo").close(); - String fooText="I am main:/a/b/c/foo"; - writer = fService.getContentWriter("main:/a/b/c/foo", true); - writer.setEncoding("UTF-8"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent("I am main:/a/b/c/foo"); - - fService.createFile("main:/a/b/c", "bar").close(); - writer = fService.getContentWriter("main:/a/b/c/bar", true); - // Force a conversion - writer.setEncoding("UTF-16"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent("I am main:/a/b/c/bar"); - - String buffyText = "This is test data: Buffy the Vampire Slayer is an Emmy Award-winning and Golden Globe-nominated American cult television series that aired from March 10, 1997 until May 20, 2003. The series was created in 1997 by writer-director Joss Whedon under his production tag, Mutant Enemy Productions with later co-executive producers being Jane Espenson, David Fury, and Marti Noxon. The series narrative follows Buffy Summers (played by Sarah Michelle Gellar), the latest in a line of young women chosen by fate to battle against vampires, demons, and the forces of darkness as the Slayer. Like previous Slayers, Buffy is aided by a Watcher, who guides and trains her. Unlike her predecessors, Buffy surrounds herself with a circle of loyal friends who become known as the Scooby Gang."; - fService.createFile("main:/a/b", "buffy").close(); - writer = fService.getContentWriter("main:/a/b/buffy", true); - - // Force a conversion - writer.setEncoding("UTF-16"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent(buffyText); - - fService.createFile("main:/a/b", "fudge.bak").close(); - DeploymentReport report = new DeploymentReport(); - List callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - - /** - * Do our first deployment - should deploy the basic tree defined above - * fudge.bak should be excluded due to the matcher. - */ - String destRef = destStore + ":/www/avm_webapps"; - service.deployDifference(-1, "main:/", "localhost", 50500, "admin", "admin", destRef, matcher, true, false, false, callbacks); - - - Set firstDeployment = new HashSet(); - firstDeployment.addAll(report.getEvents()); - // validate the deployment report - assertTrue("first deployment no start", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.START, null, destRef))); - assertTrue("first deployment no finish", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.END, null, destRef))); - assertTrue("first deployment wrong size", firstDeployment.size() == 12); - assertTrue("Update missing: /a", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, destRef + "/a"))); - assertTrue("Update missing: /rootFile", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, destRef + "/rootFile"))); - assertTrue("Update missing: /a/b", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, destRef + "/a/b"))); - assertTrue("Update missing: /a/b/c", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, destRef + "/a/b/c"))); - assertTrue("Update missing: /d/e", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, destRef + "/d/e"))); - assertTrue("Update missing: /a/b/c/foo", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, destRef + "/a/b/c/foo"))); - assertTrue("Update missing: /a/b/c/bar", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, destRef + "/a/b/c/bar"))); - assertTrue("Update missing: /a/b/buffy", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, destRef + "/a/b/buffy"))); - assertFalse("Fudge has not been excluded", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, destRef + "/a/b/fudge.bak"))); - - // Check that files exist in the destination AVM Store - { - fService.getNodeProperties(-1, destRef + "/a"); - - Map props = fService.getNodeProperties(-1, destRef + "/a/b/buffy"); - ContentReader reader = fService.getContentReader(-1, destRef + "/a/b/buffy"); - assertNotNull("content reader is null", reader); - assertTrue("UTF-16 buffy text is not correct", reader.getContentString().equals(buffyText)); - } - - /** - * Now do the same deployment again - should just get start and end events. - */ - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - service.deployDifference(-1, "main:/", "localhost", 50500, "admin", "admin", destRef, matcher, true, false, false, callbacks); - int count = 0; - for (DeploymentEvent event : report) - { - System.out.println(event); - count++; - } - assertEquals(2, count); - - /** - * now remove a single file in a deployment - */ - fService.removeNode("main:/a/b/c", "bar"); - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - service.deployDifference(-1, "main:/", "localhost", 50500, "admin", "admin", destRef, matcher, true, false, false, callbacks); - Set smallUpdate = new HashSet(); - smallUpdate.addAll(report.getEvents()); - for (DeploymentEvent event : report) - { - System.out.println(event); - } -// assertEquals(3, smallUpdate.size()); - assertTrue("Bar not deleted", smallUpdate.contains(new DeploymentEvent(DeploymentEvent.Type.DELETED, null, destRef + "/a/b/c/bar"))); - - // Check that files exist in the destination AVM Store - { - fService.getNodeProperties(-1, destRef + "/a/b/buffy"); - ContentReader reader = fService.getContentReader(-1, destRef + "/a/b/buffy"); - assertNotNull("content reader is null", reader); - assertTrue("UTF-16 buffy text is not correct", reader.getContentString().equals(buffyText)); - } - - /** - * Now create a new dir and file and remove a node in a single deployment - */ - fService.createFile("main:/d", "jonathan").close(); - fService.removeNode("main:/a/b"); - - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - - service.deployDifference(-1, "main:/", "localhost", 50500, "admin", "admin", destRef, matcher, true, false, false, callbacks); - count = 0; - for (DeploymentEvent event : report) - { - System.out.println(event); - count++; - } - assertEquals(4, count); - - /** - * Replace a single directory with a file - */ - fService.removeNode("main:/d/e"); - fService.createFile("main:/d", "e").close(); - - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - - service.deployDifference(-1, "main:/", "localhost", 50500, "admin", "admin", destRef, matcher, true, false, false, callbacks); - count = 0; - for (DeploymentEvent event : report) - { - System.out.println(event); - count++; - } - assertEquals(3, count); - - // Check that files exist in the destination AVM Store - { - - AVMNodeDescriptor desc = fService.lookup(-1, destRef + "/d/e"); - assertTrue("e is not a file", desc.isFile()); - - } - - - /** - * Create a few files - */ - fService.removeNode("main:/d/e"); - fService.createDirectory("main:/d", "e"); - fService.createFile("main:/d/e", "Warren.txt").close(); - fService.createFile("main:/d/e", "It's a silly name.txt").close(); - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - - service.deployDifference(-1, "main:/", "localhost", 50500, "admin", "admin", destRef, matcher, true, false, false, callbacks); - count = 0; - for (DeploymentEvent event : report) - { - System.out.println(event); - count++; - } - assertEquals(5, count); - - try - { - fService.purgeStore(destStore); - } - catch (AVMNotFoundException e) - { - // nothing to do - store did not exist - } - - } - - /** - * Wrong password - * Negative test - */ - public void testWrongPassword() - { - NameMatcher matcher = (NameMatcher)fContext.getBean("globalPathExcluder"); - String destStore = "Junk"; - String destRef = destStore + ":/www/avm_webapps"; - - - try { - service.deployDifference(-1, "main:/", "localhost", 50500, "admin", "wronky", destRef, matcher, true, false, false, null); - - fail("Wrong password should throw exception"); - } - catch (AVMException de) - { - // pass - de.printStackTrace(); - } - } - -} diff --git a/source/test-java/org/alfresco/repo/deploy/DeploymentServiceImplFSTest.java b/source/test-java/org/alfresco/repo/deploy/DeploymentServiceImplFSTest.java deleted file mode 100644 index 4b5b161570..0000000000 --- a/source/test-java/org/alfresco/repo/deploy/DeploymentServiceImplFSTest.java +++ /dev/null @@ -1,588 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ - -package org.alfresco.repo.deploy; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.alfresco.repo.avm.AVMServiceTestBase; -import org.alfresco.repo.avm.util.BulkLoader; -import org.alfresco.repo.content.MimetypeMap; -import org.alfresco.service.cmr.avm.AVMException; -import org.alfresco.service.cmr.avm.deploy.DeploymentCallback; -import org.alfresco.service.cmr.avm.deploy.DeploymentEvent; -import org.alfresco.service.cmr.avm.deploy.DeploymentReport; -import org.alfresco.service.cmr.avm.deploy.DeploymentReportCallback; -import org.alfresco.service.cmr.avm.deploy.DeploymentService; -import org.alfresco.service.cmr.repository.ContentWriter; -import org.alfresco.test_category.LegacyCategory; -import org.alfresco.util.Deleter; -import org.alfresco.util.NameMatcher; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.junit.experimental.categories.Category; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -/** - * End to end test of deployment to a file system receiver (FSR). - * @author britt - * @author mrogers - */ -@Category(LegacyCategory.class) -public class DeploymentServiceImplFSTest extends AVMServiceTestBase -{ - private File log = null; - private File metadata = null; - private File data = null; - private File target = null; - - private String TEST_USER = "Giles"; - private String TEST_PASSWORD = "Watcher"; - private String TEST_TARGET = "sampleTarget"; - - DeploymentService service = null; - - private static Log logger = LogFactory.getLog(DeploymentServiceImplFSTest.class); - - - @Override - protected void setUp() throws Exception - { - super.setUp(); - log = new File("deplog"); - log.mkdir(); - metadata = new File("depmetadata"); - metadata.mkdir(); - data = new File("depdata"); - data.mkdir(); - target = new File("sampleTarget"); - target.mkdir(); - - /** - * Start the FSR - */ - @SuppressWarnings("unused") - ClassPathXmlApplicationContext receiverContext = - new ClassPathXmlApplicationContext("application-context.xml"); // Fetch application context from deployment - - service = (DeploymentService)fContext.getBean("DeploymentService"); - } - - protected void tearDown() throws Exception - { - super.tearDown(); - - if(log != null) - { - Deleter.Delete(log); - } - if(data != null) - { - Deleter.Delete(data); - } - if(metadata != null) - { - Deleter.Delete(metadata); - } - if(target != null) - { - Deleter.Delete(target); - } - - File dot = new File("."); - String[] listing = dot.list(); - for (String name : listing) - { - if (name.startsWith("dep-record-")) - { - File file = new File(name); - file.delete(); - } - } - } - - public void testBasic() - throws Exception - { - - NameMatcher matcher = (NameMatcher)fContext.getBean("globalPathExcluder"); - - /** - * set up our test tree - */ - fService.createDirectory("main:/", "a"); - - fService.createDirectory("main:/a", "b"); - fService.createDirectory("main:/a/b", "c"); - - fService.createDirectory("main:/", "d"); - fService.createDirectory("main:/d", "e"); - fService.createDirectory("main:/d/e", "f"); - - fService.createFile("main:/a/b/c", "foo").close(); - String fooText="I am main:/a/b/c/foo"; - ContentWriter writer = fService.getContentWriter("main:/a/b/c/foo", true); - writer.setEncoding("UTF-8"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent("I am main:/a/b/c/foo"); - - fService.createFile("main:/a/b/c", "bar").close(); - writer = fService.getContentWriter("main:/a/b/c/bar", true); - // Force a conversion - writer.setEncoding("UTF-16"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.putContent("I am main:/a/b/c/bar"); - - String buffyText = "This is test data: Buffy the Vampire Slayer is an Emmy Award-winning and Golden Globe-nominated American cult television series that aired from March 10, 1997 until May 20, 2003. The series was created in 1997 by writer-director Joss Whedon under his production tag, Mutant Enemy Productions with later co-executive producers being Jane Espenson, David Fury, and Marti Noxon. The series narrative follows Buffy Summers (played by Sarah Michelle Gellar), the latest in a line of young women chosen by fate to battle against vampires, demons, and the forces of darkness as the Slayer. Like previous Slayers, Buffy is aided by a Watcher, who guides and trains her. Unlike her predecessors, Buffy surrounds herself with a circle of loyal friends who become known as the Scooby Gang."; - fService.createFile("main:/a/b", "buffy").close(); - writer = fService.getContentWriter("main:/a/b/buffy", true); - // Force a conversion - writer.setEncoding("UTF-16"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - - writer.putContent(buffyText); - - fService.createFile("main:/a/b", "fudge.bak").close(); - DeploymentReport report = new DeploymentReport(); - List callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - - /** - * Do our first deployment - should deploy the basic tree defined above - * fudge.bak should be excluded due to the matcher. - */ - service.deployDifferenceFS(-1, "main:/", "default", "localhost", 44100, TEST_USER, TEST_PASSWORD, TEST_TARGET, matcher, false, false, false, callbacks); - Set firstDeployment = new HashSet(); - firstDeployment.addAll(report.getEvents()); - // validate the deployment report - assertTrue("first deployment no start", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.START, null, TEST_TARGET))); - assertTrue("first deployment no finish", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.END, null, TEST_TARGET))); - assertTrue("first deployment wrong size", firstDeployment.size() == 11); - assertTrue("Update missing: /a", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, "/a"))); - assertTrue("Update missing: /a/b", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, "/a/b"))); - assertTrue("Update missing: /a/b/c", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, "/a/b/c"))); - assertTrue("Update missing: /d/e", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, "/d/e"))); - assertTrue("Update missing: /a/b/c/foo", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, "/a/b/c/foo"))); - assertTrue("Update missing: /a/b/c/bar", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, "/a/b/c/bar"))); - assertTrue("Update missing: /a/b/buffy", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, "/a/b/buffy"))); - assertFalse("Fudge has not been excluded", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, "/a/b/fudge.bak"))); - - // Check that files exist on target - File target = new File("sampleTarget"); - assertTrue("target dir does not extist", target.exists()); - assertTrue("target dir is not a directory", target.isDirectory()); - - { - File buffyFile = new File(target.getAbsolutePath()+ File.separator + "a" + File.separator+ "b" + File.separator + "buffy"); - assertTrue("buffy file not created", buffyFile.exists()); - assertTrue("buffy file is not a file", buffyFile.isFile()); - BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(buffyFile), "UTF-16")); - String text = reader.readLine(); - assertTrue("UTF-16 buffy text is not correct", buffyText.equals(text)); - } - - { - File fooFile = new File(target.getAbsolutePath()+ File.separator + "a" + File.separator+ "b" + File.separator + "c" + File.separator + "foo"); - assertTrue("foo file not created", fooFile.exists()); - assertTrue("foo file is not a file", fooFile.isFile()); - BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fooFile), "UTF-8")); - String text = reader.readLine(); - assertTrue("UTF-8 foo text is not correct", fooText.equals(text)); - } - - - for (DeploymentEvent event : report) - { - System.out.println(event); - } - - /** - * Now do the same deployment again - should just get start and end events. - */ - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - service.deployDifferenceFS(-1, "main:/", "default", "localhost", 44100, TEST_USER, TEST_PASSWORD, TEST_TARGET, matcher, false, false, false, callbacks); - int count = 0; - for (DeploymentEvent event : report) - { - System.out.println(event); - count++; - } - assertEquals(2, count); - - /** - * now remove a single file in a deployment - */ - fService.removeNode("main:/a/b/c", "bar"); - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - service.deployDifferenceFS(-1, "main:/", "default", "localhost", 44100, TEST_USER, TEST_PASSWORD, TEST_TARGET, matcher, false, false, false, callbacks); - Set smallUpdate = new HashSet(); - smallUpdate.addAll(report.getEvents()); - for (DeploymentEvent event : report) - { - System.out.println(event); - } - assertEquals(3, smallUpdate.size()); - assertTrue("Bar not deleted", smallUpdate.contains(new DeploymentEvent(DeploymentEvent.Type.DELETED, null, "/a/b/c/bar"))); - - /** - * Now create a new dir and file and remove a node in a single deployment - */ - fService.createFile("main:/d", "jonathan").close(); - fService.removeNode("main:/a/b"); - - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - - - service.deployDifferenceFS(-1, "main:/", "default", "localhost", 44100, TEST_USER, TEST_PASSWORD, TEST_TARGET, matcher, false, false, false, callbacks); - count = 0; - for (DeploymentEvent event : report) - { - System.out.println(event); - count++; - } - assertEquals(4, count); - - /** - * Replace a single directory with a file - */ - fService.removeNode("main:/d/e"); - fService.createFile("main:/d", "e").close(); - - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - - service.deployDifferenceFS(-1, "main:/", "default", "localhost", 44100, TEST_USER, TEST_PASSWORD, TEST_TARGET, matcher, false, false, false, callbacks); - count = 0; - for (DeploymentEvent event : report) - { - System.out.println(event); - count++; - } - assertEquals(3, count); - - /** - * Create a few files - */ - fService.removeNode("main:/d/e"); - fService.createDirectory("main:/d", "e"); - fService.createFile("main:/d/e", "Warren.txt").close(); - fService.createFile("main:/d/e", "It's a silly name.txt").close(); - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - - service.deployDifferenceFS(-1, "main:/", "default", "localhost", 44100, TEST_USER, TEST_PASSWORD, TEST_TARGET, matcher, false, false, false, callbacks); - count = 0; - for (DeploymentEvent event : report) - { - System.out.println(event); - count++; - } - assertEquals(5, count); - - - - } - - /** - * Test for ETWOTWO-507 - * 1. In a web project, create files called test01.html and test03.html. - * 3. Deploy using the FSR. - * 5. Add a new file called test02.html. - * 6. Delete the file called test03.html. - * 8. Deploy using the FSR. - */ - public void testEtwoTwo507() throws Exception - { - DeploymentReport report = new DeploymentReport(); - List callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - - fService.createDirectory("main:/", "a"); - fService.createFile("main:/a", "test01.html").close(); - fService.createFile("main:/a", "test03.html").close(); - service.deployDifferenceFS(-1, "main:/", "default", "localhost", 44100, TEST_USER, TEST_PASSWORD, TEST_TARGET, null, false, false, false, callbacks); - for (DeploymentEvent event : report) - { - System.out.println(event); - } - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - fService.createFile("main:/a", "test02.html").close(); - fService.removeNode("main:/a", "test03.html"); - - service.deployDifferenceFS(-1, "main:/", "default", "localhost", 44100, TEST_USER, TEST_PASSWORD, TEST_TARGET, null, false, false, false, callbacks); - Set firstDeployment = new HashSet(); - firstDeployment.addAll(report.getEvents()); - - assertTrue("Update missing: /a/test02.html", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, "/a/test02.html"))); - assertTrue("delete missing: /a/test03.html", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.DELETED, null, "/a/test03.html"))); - for (DeploymentEvent event : report) - { - System.out.println(event); - } - - - } - - /** - * Test for ETWOTWO-1236 - * 1. create a file in a Web Project called "CamelCase.txt" - * 2. submit the file to staging - * 3. deploy it to an FSR, ideally on a *nix OS (the issues are more severe on *nix than on Windows) - * 4. rename the file to "cAMELcASE.TXT" - * 5. submit the change to staging - * 6. deploy it to the same FSR - */ - - public void testCaseSensitivity() throws Exception - { - DeploymentReport report = new DeploymentReport(); - List callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - - /** - * Deploy CamelCase.txt - */ - fService.createFile("main:/", "CamelCase.txt").close(); - service.deployDifferenceFS(-1, "main:/", "default", "localhost", 44100, TEST_USER, TEST_PASSWORD, TEST_TARGET, null, false, false, false, callbacks); - for (DeploymentEvent event : report) - { - System.out.println(event); - } - Set firstDeployment = new HashSet(); - firstDeployment.addAll(report.getEvents()); - assertTrue("Create missing: /CamelCase.txt", firstDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, "/CamelCase.txt"))); - - - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - - //fService.rename("main:/", "CamelCase.txt", "main:/", "cAMELcASE.TXT"); - fService.removeNode("main:/", "CamelCase.txt"); - fService.createFile("main:/", "cAMELcASE.TXT").close(); - - - service.deployDifferenceFS(-1, "main:/", "default", "localhost", 44100, TEST_USER, TEST_PASSWORD, TEST_TARGET, null, false, false, false, callbacks); - Set secondDeployment = new HashSet(); - secondDeployment.addAll(report.getEvents()); - for (DeploymentEvent event : report) - { - System.out.println(event); - } - - assertTrue("delete missing: /CamelCase.txt", secondDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.DELETED, null, "/CamelCase.txt"))); - assertTrue("Create missing: /cAMELcASE.TXT", secondDeployment.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, "/cAMELcASE.TXT"))); - - } - - - - - /** - * Wrong password - * Negative test - */ - public void testWrongPassword() - { - logger.debug("Start testWrongPassword"); - - try { - service.deployDifferenceFS(-1, "main:/", "default", "localhost", 44100, TEST_USER, "Wrong!", TEST_TARGET, null, false, false, false, null); - fail("Wrong password should throw exception"); - } - catch (AVMException de) - { - // pass - de.printStackTrace(); - } - } - - /** - * Wrong target - * Negative test - */ - public void testWrongTarget() - { - logger.debug("Start testWrongTarget"); - try { - service.deployDifferenceFS(-1, "main:/", "default", "localhost", 44100, TEST_USER, TEST_PASSWORD, "crapTarget", null, false, false, false, null); - fail("Wrong target should have thrown an exception"); - } - catch (AVMException de) - { - // pass - } - } - - /** - * Now do the same deployment again - without the matcher - should deploy fudge.bak - */ - public void testNoExclusionFilter() throws Exception - { - logger.debug("Start testNoExclusionFilter"); - DeploymentReport report = new DeploymentReport(); - List callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createFile("main:/a/b", "fudge.bak").close(); - service.deployDifferenceFS(-1, "main:/", "default", "localhost", 44100, TEST_USER, TEST_PASSWORD, TEST_TARGET, null, false, false, false, callbacks); - Set smallUpdate = new HashSet(); - smallUpdate.addAll(report.getEvents()); - - for (DeploymentEvent event : report) - { - System.out.println(event); - } - assertTrue("Update missing", smallUpdate.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, "/a/b/fudge.bak"))); - assertEquals(5, smallUpdate.size()); - } - - /** - * Deploy a website, update it, then revert to the first version - */ - public void testRevertToPreviousVersion() throws Exception - { - logger.debug("Start testRevertToPreviousVersion"); - DeploymentReport report = new DeploymentReport(); - List callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - - fService.createDirectory("main:/", "a"); - fService.createDirectory("main:/a", "b"); - fService.createFile("main:/a/b", "Zander").close(); - fService.createFile("main:/a/b", "Cordelia").close(); - fService.createFile("main:/a/b", "Buffy").close(); - service.deployDifferenceFS(-1, "main:/", "default", "localhost", 44100, TEST_USER, TEST_PASSWORD, TEST_TARGET, null, false, false, false, callbacks); - int version = report.getEvents().get(0).getSource().getFirst(); - assertTrue("version is not set", version > 0); - - // Now do some updates - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - fService.createFile("main:/a/b", "Master").close(); - fService.createFile("main:/a/b", "Drusilla").close(); - fService.removeNode("main:/a/b", "Zander"); - service.deployDifferenceFS(-1, "main:/", "default", "localhost", 44100, TEST_USER, TEST_PASSWORD, TEST_TARGET, null, false, false, false, callbacks); - - // now do the restore to previous version - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - service.deployDifferenceFS(version, "main:/", "default", "localhost", 44100, TEST_USER, TEST_PASSWORD, TEST_TARGET, null, false, false, false, callbacks); - Set smallUpdate = new HashSet(); - smallUpdate.addAll(report.getEvents()); - for (DeploymentEvent event : report) - { - System.out.println(event); - } - assertTrue("Update missing", smallUpdate.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, "/a/b/Zander"))); - assertTrue("Update missing", smallUpdate.contains(new DeploymentEvent(DeploymentEvent.Type.DELETED, null, "/a/b/Drusilla"))); - assertTrue("Update missing", smallUpdate.contains(new DeploymentEvent(DeploymentEvent.Type.DELETED, null, "/a/b/Master"))); - assertEquals(5, smallUpdate.size()); - - - - - } - - /** - * Now load a large number of files. - * Do a deployment - should load successfully - * - * Remove a node and update a file - * Do a deployment - should only see start and end events and the two above. - */ - public void testBulkLoad() throws Exception - { - logger.debug("Start testBulkLoad"); - DeploymentReport report = new DeploymentReport(); - List callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - - BulkLoader loader = new BulkLoader(); - loader.setAvmService(fService); - loader.recursiveLoad(getSourceFolder() + "/org/alfresco/repo/avm", "main:/"); - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - service.deployDifferenceFS(-1, "main:/", "default", "localhost", 44100, TEST_USER, TEST_PASSWORD, TEST_TARGET, null, false, false, false, callbacks); - Set bigUpdate = new HashSet(); - bigUpdate.addAll(report.getEvents()); - assertTrue("big update no start", bigUpdate.contains(new DeploymentEvent(DeploymentEvent.Type.START, null, TEST_TARGET))); - assertTrue("big update no finish", bigUpdate.contains(new DeploymentEvent(DeploymentEvent.Type.END, null, TEST_TARGET))); - assertTrue("big update too small", bigUpdate.size() > 100); - assertTrue("Update missing /avm/AVMServiceImpl.java", bigUpdate.contains(new DeploymentEvent(DeploymentEvent.Type.CREATED, null, "/avm/AVMServiceImpl.java"))); - - /** - * Now do a smaller update and check that just a few files update - * Start - * Delete /avm/ibatis - * Update /avm/AVMServiceImpl.java - * End - */ - fService.removeNode("main:/avm/ibatis"); - fService.getFileOutputStream("main:/avm/AVMServiceImpl.java").close(); - report = new DeploymentReport(); - callbacks = new ArrayList(); - callbacks.add(new DeploymentReportCallback(report)); - service.deployDifferenceFS(-1, "main:/", "default", "localhost", 44100, TEST_USER, TEST_PASSWORD, TEST_TARGET, null, false, false, false, callbacks); - - Set smallUpdate = new HashSet(); - smallUpdate.addAll(report.getEvents()); - for (DeploymentEvent event : report) - { - System.out.println(event); - } - - assertEquals(4, smallUpdate.size()); - assertTrue("Start missing", smallUpdate.contains(new DeploymentEvent(DeploymentEvent.Type.START, null, TEST_TARGET))); - assertTrue("End missing", smallUpdate.contains(new DeploymentEvent(DeploymentEvent.Type.DELETED, null, "/avm/ibatis"))); - assertTrue("Update missing", smallUpdate.contains(new DeploymentEvent(DeploymentEvent.Type.UPDATED, null, "/avm/AVMServiceImpl.java"))); - assertTrue("Delete Missing", smallUpdate.contains(new DeploymentEvent(DeploymentEvent.Type.END, null, TEST_TARGET))); - } - -} diff --git a/source/test-java/org/alfresco/repo/domain/avm/AVMStoreDAOTest.java b/source/test-java/org/alfresco/repo/domain/avm/AVMStoreDAOTest.java deleted file mode 100644 index dcb46435c9..0000000000 --- a/source/test-java/org/alfresco/repo/domain/avm/AVMStoreDAOTest.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.repo.domain.avm; - -import junit.framework.TestCase; - -import org.alfresco.repo.transaction.RetryingTransactionHelper; -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; -import org.alfresco.service.ServiceRegistry; -import org.alfresco.service.transaction.TransactionService; -import org.alfresco.util.ApplicationContextHelper; -import org.alfresco.util.GUID; -import org.alfresco.util.Pair; -import org.springframework.context.ApplicationContext; - -/** - * @see AVMStoreDAO - * - * @author janv - * @since 3.2 - */ -public class AVMStoreDAOTest extends TestCase -{ - private ApplicationContext ctx = ApplicationContextHelper.getApplicationContext(); - - private TransactionService transactionService; - private RetryingTransactionHelper txnHelper; - private AVMStoreDAO avmStoreDAO; - - @Override - public void setUp() throws Exception - { - ServiceRegistry serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY); - transactionService = serviceRegistry.getTransactionService(); - txnHelper = transactionService.getRetryingTransactionHelper(); - - avmStoreDAO = (AVMStoreDAO) ctx.getBean("newAvmStoreDAO"); - } - - private AVMStoreEntity get(final String avmStoreName, final boolean autoCreate, boolean expectSuccess) - { - RetryingTransactionCallback callback = new RetryingTransactionCallback() - { - public AVMStoreEntity execute() throws Throwable - { - AVMStoreEntity avmStoreEntity = null; - if (autoCreate) - { - avmStoreEntity = avmStoreDAO.createStore(avmStoreName); - } - else - { - avmStoreEntity = avmStoreDAO.getStore(avmStoreName); - } - return avmStoreEntity; - } - }; - try - { - return txnHelper.doInTransaction(callback, !autoCreate, false); - } - catch (Throwable e) - { - if (expectSuccess) - { - // oops - throw new RuntimeException("Expected to get avmStore '" + avmStoreName + "'.", e); - } - else - { - return null; - } - } - } - - public void testCreateWithCommit() throws Exception - { - // Create an avmStore - String avmStore = GUID.generate(); - AVMStoreEntity avmStoreEntity = get(avmStore, true, true); - // Check that it can be retrieved - AVMStoreEntity avmStoreCheck = get(avmStoreEntity.getName(), false, true); - assertEquals("avmStore ID changed", avmStoreEntity.getId(), avmStoreCheck.getId()); - } - - public void testCreateWithRollback() throws Exception - { - final String avmStore = GUID.generate(); - // Create an avmStore - RetryingTransactionCallback> callback = new RetryingTransactionCallback>() - { - public Pair execute() throws Throwable - { - get(avmStore, true, true); - // Now force a rollback - throw new RuntimeException("Forced"); - } - }; - try - { - txnHelper.doInTransaction(callback); - fail("Transaction didn't roll back"); - } - catch (RuntimeException e) - { - // Expected - } - // Check that it doesn't exist - get(avmStore, false, false); - } - - // TODO - review - public void testCaseInsensitivity() throws Exception - { - String avmStore = "AAA-" + GUID.generate(); - AVMStoreEntity lowercase = get(avmStore.toLowerCase(), true, true); - // Check that the same pair is retrievable using uppercase - AVMStoreEntity uppercase = get(avmStore.toUpperCase(), false, true); - assertNotNull(uppercase); - assertEquals( - "Upper and lowercase avmStore instance IDs were not the same", - lowercase.getId(), uppercase.getId()); - } - - public void testDelete() throws Exception - { - // Create an avmStore - String avmStore = GUID.generate(); - AVMStoreEntity avmStoreEntity = get(avmStore, true, true); - - getAndCheck(avmStoreEntity.getId(), avmStoreEntity); - - avmStoreDAO.deleteStore(avmStoreEntity.getId()); - try - { - getAndCheck(avmStoreEntity.getId(), avmStoreEntity); - fail("Entity still exists"); - } - catch (Throwable e) - { - // Expected - } - } - - public void testUpdate() throws Exception - { - // TODO - } - - /** - * Retrieves and checks the AVMStore for equality - */ - private void getAndCheck(final Long avmStoreId, AVMStoreEntity checkAVMStoreEntity) - { - RetryingTransactionCallback callback = new RetryingTransactionCallback() - { - public AVMStoreEntity execute() throws Throwable - { - AVMStoreEntity storeEntity = avmStoreDAO.getStore(avmStoreId); - return storeEntity; - } - }; - AVMStoreEntity result = txnHelper.doInTransaction(callback, true, false); - assertNotNull("Failed to find result for ID " + avmStoreId, result); - assertEquals("ContentData retrieved not the same as persisted: ", checkAVMStoreEntity, result); - } -} diff --git a/source/test-java/org/alfresco/repo/node/index/AVMRemoteSnapshotTrackerTest.java b/source/test-java/org/alfresco/repo/node/index/AVMRemoteSnapshotTrackerTest.java deleted file mode 100644 index 30309d0f49..0000000000 --- a/source/test-java/org/alfresco/repo/node/index/AVMRemoteSnapshotTrackerTest.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.repo.node.index; - -import java.util.concurrent.ThreadPoolExecutor; - -import javax.transaction.Status; -import javax.transaction.UserTransaction; - -import org.alfresco.repo.domain.node.NodeDAO; -import org.alfresco.repo.management.subsystems.ChildApplicationContextFactory; -import org.alfresco.repo.search.AVMSnapShotTriggeredIndexingMethodInterceptor; -import org.alfresco.repo.search.Indexer; -import org.alfresco.repo.search.impl.lucene.fts.FullTextSearchIndexer; -import org.alfresco.repo.security.authentication.AuthenticationComponent; -import org.alfresco.repo.transaction.TransactionServiceImpl; -import org.alfresco.service.ServiceRegistry; -import org.alfresco.service.cmr.avm.AVMService; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.cmr.search.SearchService; -import org.alfresco.service.transaction.TransactionService; -import org.alfresco.util.BaseSpringTest; - -/** - * Test that the index tracker catches up - * - * @author andyh - */ -public class AVMRemoteSnapshotTrackerTest extends BaseSpringTest -{ - - private AuthenticationComponent authenticationComponent; - - private AVMService avmService; - - private AVMSnapShotTriggeredIndexingMethodInterceptor avmSnapShotTriggeredIndexingMethodInterceptor; - - private TransactionService transactionService; - - private UserTransaction testTX; - - private SearchService searchService; - - private NodeService nodeService; - - private FullTextSearchIndexer ftsIndexer; - - private Indexer indexer; - - private NodeDAO nodeDAO; - - private ThreadPoolExecutor threadPoolExecutor; - - public AVMRemoteSnapshotTrackerTest() - { - // TODO Auto-generated constructor stub - } - - @Override - protected void onSetUpInTransaction() throws Exception - { - super.onSetUpInTransaction(); - ServiceRegistry serviceRegistry = (ServiceRegistry) applicationContext.getBean(ServiceRegistry.SERVICE_REGISTRY); - - avmService = (AVMService) applicationContext.getBean("AVMService"); - avmSnapShotTriggeredIndexingMethodInterceptor = (AVMSnapShotTriggeredIndexingMethodInterceptor) applicationContext.getBean("avmSnapShotTriggeredIndexingMethodInterceptor"); - transactionService = (TransactionService) applicationContext.getBean("transactionComponent"); - - searchService = serviceRegistry.getSearchService(); - nodeService = serviceRegistry.getNodeService(); - ftsIndexer = (FullTextSearchIndexer) applicationContext.getBean("LuceneFullTextSearchIndexer"); - indexer = (Indexer) applicationContext.getBean("indexerComponent"); - nodeDAO = (NodeDAO) applicationContext.getBean("nodeDAO"); - - ChildApplicationContextFactory luceneSubSystem = (ChildApplicationContextFactory) applicationContext.getBean("lucene"); - threadPoolExecutor = (ThreadPoolExecutor) luceneSubSystem.getApplicationContext().getBean("search.indexTrackerThreadPoolExecutor"); - - - testTX = transactionService.getUserTransaction(); - testTX.begin(); - authenticationComponent = (AuthenticationComponent) applicationContext.getBean("authenticationComponent"); - authenticationComponent.setSystemUserAsCurrentUser(); - - } - - @Override - protected void onTearDownInTransaction() throws Exception - { - if (testTX.getStatus() == Status.STATUS_ACTIVE) - { - testTX.rollback(); - } - try - - { - authenticationComponent.clearCurrentSecurityContext(); - } - catch (Throwable e) - { - // do nothing - } - super.onTearDownInTransaction(); - } - - public void testCatchUp() - { - assertFalse(avmSnapShotTriggeredIndexingMethodInterceptor.hasIndexBeenCreated("one")); - assertFalse(avmSnapShotTriggeredIndexingMethodInterceptor.hasIndexBeenCreated("two")); - assertFalse(avmSnapShotTriggeredIndexingMethodInterceptor.hasIndexBeenCreated("three")); - assertFalse(avmSnapShotTriggeredIndexingMethodInterceptor.hasIndexBeenCreated("four")); - - // initial state - avmService.createStore("one"); - //assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.hasIndexBeenCreated("one")); - avmService.createDirectory("one:/", "a"); - avmService.createSnapshot("one", null, null); - - avmService.createStore("two"); - avmService.createDirectory("two:/", "a"); - - avmService.createStore("three"); - - // Check state - - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.hasIndexBeenCreated("one")); - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.isIndexUpToDate("one")); - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.hasIndexBeenCreated("two")); - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.isIndexUpToDate("two")); - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.hasIndexBeenCreated("three")); - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.isIndexUpToDate("three")); - assertFalse(avmSnapShotTriggeredIndexingMethodInterceptor.hasIndexBeenCreated("four")); - - // Disable the indexer and do updates - - avmSnapShotTriggeredIndexingMethodInterceptor.setEnableIndexing(false); - - // one unchanged - - // two snap shot - avmService.createSnapshot("two", null, null); - - // three update and snapshot - - avmService.createDirectory("three:/", "a"); - avmService.createSnapshot("three", null, null); - - // four create - - avmService.createStore("four"); - avmService.createDirectory("four:/", "a"); - avmService.createSnapshot("four", null, null); - avmService.createDirectory("four:/", "b"); - avmService.createSnapshot("four", null, null); - - // - - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.hasIndexBeenCreated("one")); - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.isIndexUpToDate("one")); - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.hasIndexBeenCreated("two")); - assertFalse(avmSnapShotTriggeredIndexingMethodInterceptor.isIndexUpToDate("two")); - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.hasIndexBeenCreated("three")); - assertFalse(avmSnapShotTriggeredIndexingMethodInterceptor.isIndexUpToDate("three")); - assertFalse(avmSnapShotTriggeredIndexingMethodInterceptor.hasIndexBeenCreated("four")); - assertFalse(avmSnapShotTriggeredIndexingMethodInterceptor.isIndexUpToDate("four")); - - avmSnapShotTriggeredIndexingMethodInterceptor.setEnableIndexing(true); - - AVMRemoteSnapshotTracker tracker = new AVMRemoteSnapshotTracker(); - tracker.setAuthenticationComponent(authenticationComponent); - tracker.setAvmService(avmService); - tracker.setAvmSnapShotTriggeredIndexingMethodInterceptor(avmSnapShotTriggeredIndexingMethodInterceptor); - tracker.setTransactionService((TransactionServiceImpl) transactionService); - tracker.setFtsIndexer(ftsIndexer); - tracker.setIndexer(indexer); - tracker.setNodeDAO(nodeDAO); - tracker.setNodeService(nodeService); - tracker.setSearcher(searchService); - tracker.setThreadPoolExecutor(threadPoolExecutor); - - tracker.reindex(); - - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.hasIndexBeenCreated("one")); - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.isIndexUpToDate("one")); - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.hasIndexBeenCreated("two")); - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.isIndexUpToDate("two")); - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.hasIndexBeenCreated("three")); - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.isIndexUpToDate("three")); - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.hasIndexBeenCreated("four")); - assertTrue(avmSnapShotTriggeredIndexingMethodInterceptor.isIndexUpToDate("four")); - } - -} diff --git a/source/test-java/org/alfresco/repo/template/AVMTemplateNodeTest.java b/source/test-java/org/alfresco/repo/template/AVMTemplateNodeTest.java deleted file mode 100644 index 7d1c80fd5a..0000000000 --- a/source/test-java/org/alfresco/repo/template/AVMTemplateNodeTest.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.repo.template; - -import java.io.Serializable; -import java.util.Collection; -import java.util.Date; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import junit.framework.TestCase; - -import org.alfresco.repo.avm.AVMNodeConverter; -import org.alfresco.repo.domain.PropertyValue; -import org.alfresco.service.ServiceRegistry; -import org.alfresco.service.cmr.avm.AVMService; -import org.alfresco.service.cmr.dictionary.DataTypeDefinition; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.namespace.QName; -import org.alfresco.test_category.LegacyCategory; -import org.alfresco.util.ApplicationContextHelper; -import org.junit.experimental.categories.Category; -import org.springframework.context.ApplicationContext; - -/** - * @author Dmitry Velichkevich - */ -@Category(LegacyCategory.class) -public class AVMTemplateNodeTest extends TestCase -{ - private static final String TEST_WCM_NAMESPACE = "http://www.alfresco.org/model/testwcmmodel/1.0"; - - private static final QName ASPECT_AUTHORED = QName.createQName(TEST_WCM_NAMESPACE, "authored"); - private static final QName PROP_AUTHORED_DATE = QName.createQName(TEST_WCM_NAMESPACE, "dateAuthored"); - - private static final ApplicationContext APPLICATION_CONTEXT = ApplicationContextHelper.getApplicationContext(new String[] { "classpath:alfresco/application-context.xml", - "classpath:test/alfresco/wcm-template-node-test-context.xml" }); - private static final ServiceRegistry SERVICE_REGISTRY = (ServiceRegistry) APPLICATION_CONTEXT.getBean(ServiceRegistry.SERVICE_REGISTRY); - - private AVMService avmService = SERVICE_REGISTRY.getAVMService(); - - @Override - protected void setUp() throws Exception - { - avmService.createStore("main"); - avmService.createDirectory("main:/", "root"); - avmService.createFile("main:/root", "testfile.txt"); - } - - @Override - protected void tearDown() throws Exception - { - avmService.purgeStore("main"); - } - - @SuppressWarnings("unchecked") - public void testDatePropertiesConversion() throws Exception - { - assertNotNull("Aspect 'twcm:authored' is not in the set of compiled dictionary models", SERVICE_REGISTRY.getDictionaryService().getAspect(ASPECT_AUTHORED)); - - List values = new LinkedList(); - for (int i = 0; i < 5; i++) - { - values.add(new Date()); - } - PropertyValue value = new PropertyValue(DataTypeDefinition.TEXT, (Serializable) values); - - avmService.addAspect("main:/root/testfile.txt", ASPECT_AUTHORED); - avmService.setNodeProperty("main:/root/testfile.txt", PROP_AUTHORED_DATE, value); - NodeRef nodeRef = AVMNodeConverter.ToNodeRef(-1, "main:/root/testfile.txt"); - AVMTemplateNode templateNode = new AVMTemplateNode(nodeRef, SERVICE_REGISTRY, null); - - Map properties = templateNode.getProperties(); - assertNotNull(properties); - assertFalse(properties.isEmpty()); - assertTrue(properties.containsKey(PROP_AUTHORED_DATE)); - - Collection authoredDates = (Collection) properties.get(PROP_AUTHORED_DATE); - assertNotNull(authoredDates); - assertFalse(authoredDates.isEmpty()); - - for (Serializable date : authoredDates) - { - assertFalse(("Unexpected data type of 'twcm:authored' property values: " + ((null != date) ? (date.getClass().getName()) : ("null"))), date instanceof String); - } - } -} diff --git a/source/test-java/org/alfresco/wcm/AbstractWCMServiceImplTest.java b/source/test-java/org/alfresco/wcm/AbstractWCMServiceImplTest.java deleted file mode 100644 index 0561f7e738..0000000000 --- a/source/test-java/org/alfresco/wcm/AbstractWCMServiceImplTest.java +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.wcm; - -import java.util.List; - -import junit.framework.TestCase; - -import org.alfresco.model.ContentModel; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; -import org.alfresco.service.cmr.avm.locking.AVMLockingService; -import org.alfresco.service.cmr.security.MutableAuthenticationService; -import org.alfresco.service.cmr.security.PersonService; -import org.alfresco.service.transaction.TransactionService; -import org.alfresco.util.ApplicationContextHelper; -import org.alfresco.util.PropertyMap; -import org.alfresco.wcm.asset.AssetService; -import org.alfresco.wcm.sandbox.SandboxService; -import org.alfresco.wcm.util.WCMUtil; -import org.alfresco.wcm.webproject.WebProjectInfo; -import org.alfresco.wcm.webproject.WebProjectService; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -/** - * Abstract WCM Service implementation unit test - * - * @author janv - */ -public class AbstractWCMServiceImplTest extends TestCase -{ - protected static Log logger = LogFactory.getLog(AbstractWCMServiceImplTest.class); - - private static final String PREVIEW_CONFIG_LOCATION = "classpath:wcm/wcm-test-preview-context.xml"; - - // override jbpm.job.executor idleInterval to 1s (was 1.5m) for WCM unit tests - private static final String SUBMIT_CONFIG_LOCATION = "classpath:wcm/wcm-jbpm-context.xml"; - - protected static final long POLL_DELAY = 1500L; // (in millis) 1.5s - protected static final int POLL_MAX_ATTEMPTS = 200; - - // note: all tests share same context (when run via WCMTestSuite) - protected static ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] {ApplicationContextHelper.CONFIG_LOCATIONS[0], SUBMIT_CONFIG_LOCATION, PREVIEW_CONFIG_LOCATION});; - - // - // test data - // - - protected static final String TEST_RUN = ""+System.currentTimeMillis(); - protected static final boolean CLEAN = true; // cleanup during teardown - - // base web project - protected static final String TEST_WEBPROJ_DNS = "testWP-"+TEST_RUN; - - protected static final String TEST_WEBPROJ_NAME = "testSandbox Web Project Display Name - "+TEST_RUN; - protected static final String TEST_WEBPROJ_TITLE = "This is my title"; - protected static final String TEST_WEBPROJ_DESCRIPTION = "This is my description"; - protected static final String TEST_WEBPROJ_DEFAULT_WEBAPP = WCMUtil.DIR_ROOT; - protected static final boolean TEST_WEBPROJ_USE_AS_TEMPLATE = true; - protected static final boolean TEST_WEBPROJ_DONT_USE_AS_TEMPLATE = false; - - // base web users - protected static String USER_ADMIN; - - protected static final String TEST_USER = "testWebUser-"+TEST_RUN; - - protected static final String USER_ONE = TEST_USER+"-One"; - protected static final String USER_TWO = TEST_USER+"-Two"; - protected static final String USER_THREE = TEST_USER+"-Three"; - protected static final String USER_FOUR = TEST_USER+"-Four"; - - // - // services - // - - protected WebProjectService wpService; - protected SandboxService sbService; - protected AssetService assetService; - - protected MutableAuthenticationService authenticationService; - protected PersonService personService; - - protected TransactionService transactionService; - protected AVMLockingService avmLockingService; - - @Override - protected void setUp() throws Exception - { - // Get the required services - wpService = (WebProjectService)ctx.getBean("WebProjectService"); - sbService = (SandboxService)ctx.getBean("SandboxService"); - assetService = (AssetService)ctx.getBean("AssetService"); - - authenticationService = (MutableAuthenticationService)ctx.getBean("AuthenticationService"); - personService = (PersonService)ctx.getBean("PersonService"); - transactionService = (TransactionService)ctx.getBean("TransactionService"); - avmLockingService = (AVMLockingService)ctx.getBean("AVMLockingService"); - - // By default run as Admin - USER_ADMIN = AuthenticationUtil.getAdminUserName(); - AuthenticationUtil.setFullyAuthenticatedUser(USER_ADMIN); - - RetryingTransactionCallback createUsersCallback = new RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable - { - createUser(USER_ONE); - createUser(USER_TWO); - createUser(USER_THREE); - createUser(USER_FOUR); - return null; - } - }; - transactionService.getRetryingTransactionHelper().doInTransaction(createUsersCallback); - } - - @Override - protected void tearDown() throws Exception - { - if (CLEAN) - { - // Switch back to Admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - List webProjects = wpService.listWebProjects(); - for (final WebProjectInfo wpInfo : webProjects) - { - if (wpInfo.getStoreId().startsWith(TEST_WEBPROJ_DNS)) - { - // note: added retry for now, due to intermittent concurrent update (during tearDown) possibly due to OrphanReaper ? - // org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [org.alfresco.repo.avm.PlainFileNodeImpl#3752] - RetryingTransactionCallback deleteWebProjectWork = new RetryingTransactionCallback() - { - public Object execute() throws Exception - { - wpService.deleteWebProject(wpInfo.getNodeRef()); - return null; - } - }; - transactionService.getRetryingTransactionHelper().doInTransaction(deleteWebProjectWork); - } - } - - RetryingTransactionCallback deleteUsersCallback = new RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable - { - deleteUser(USER_ONE); - deleteUser(USER_TWO); - deleteUser(USER_THREE); - deleteUser(USER_FOUR); - return null; - } - }; - transactionService.getRetryingTransactionHelper().doInTransaction(deleteUsersCallback); - } - - AuthenticationUtil.clearCurrentSecurityContext(); - } - - protected void createUser(String userName) - { - if (! authenticationService.authenticationExists(userName)) - { - authenticationService.createAuthentication(userName, "PWD".toCharArray()); - } - - if (! personService.personExists(userName)) - { - PropertyMap ppOne = new PropertyMap(4); - ppOne.put(ContentModel.PROP_USERNAME, userName); - ppOne.put(ContentModel.PROP_FIRSTNAME, "firstName"); - ppOne.put(ContentModel.PROP_LASTNAME, "lastName"); - ppOne.put(ContentModel.PROP_EMAIL, "email@email.com"); - ppOne.put(ContentModel.PROP_JOBTITLE, "jobTitle"); - - personService.createPerson(ppOne); - } - } - - protected void deleteUser(String userName) - { - personService.deletePerson(userName); - } - - protected int pollForSnapshotCount(final String stagingStoreId, final int expectedCnt) throws InterruptedException - { - long start = System.currentTimeMillis(); - - String currentUser = AuthenticationUtil.getFullyAuthenticatedUser(); - - int attempts = 0; - - try - { - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - int cnt = 0; - - while (cnt != expectedCnt) - { - Thread.sleep(POLL_DELAY); - - cnt = sbService.listSnapshots(stagingStoreId, false).size(); - - attempts++; - - if (attempts == 1 && cnt > expectedCnt) - { - // There are already more snapshots - break; - } - else if (attempts > POLL_MAX_ATTEMPTS) - { - logger.error( - "Too many poll attempts: \n" + - " Store: " + stagingStoreId + "\n" + - " Time: " + (System.currentTimeMillis()-start) + "ms\n" + - " Attempts: " + attempts); - // This failure is too common - // throw new AlfrescoRuntimeException("Too many poll attempts: "+attempts); - break; - } - } - } - finally - { - AuthenticationUtil.setFullyAuthenticatedUser(currentUser); - } - - logger.debug("pollForSnapshotCount: "+stagingStoreId+" in "+(System.currentTimeMillis()-start)+" msecs ("+attempts+" attempts)"); - - return attempts; - } -} diff --git a/source/test-java/org/alfresco/wcm/WCMAspectTest.java b/source/test-java/org/alfresco/wcm/WCMAspectTest.java deleted file mode 100644 index 244359da5e..0000000000 --- a/source/test-java/org/alfresco/wcm/WCMAspectTest.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.wcm; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.alfresco.repo.dictionary.DictionaryDAO; -import org.alfresco.repo.dictionary.M2Aspect; -import org.alfresco.repo.dictionary.M2Model; -import org.alfresco.repo.dictionary.M2Property; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; -import org.alfresco.service.cmr.dictionary.DataTypeDefinition; -import org.alfresco.service.namespace.NamespaceService; -import org.alfresco.service.namespace.QName; -import org.alfresco.wcm.asset.AssetInfo; -import org.alfresco.wcm.asset.AssetService; -import org.alfresco.wcm.sandbox.SandboxInfo; -import org.alfresco.wcm.sandbox.SandboxService; -import org.alfresco.wcm.webproject.WebProjectInfo; -import org.alfresco.wcm.webproject.WebProjectService; - -public class WCMAspectTest extends AbstractWCMServiceImplTest -{ - - private AssetService assetService = null; - private WebProjectService wpService = null; - private SandboxService sbService = null; - private DictionaryDAO dictionaryDAO = null; - - private final static int SIZE = 1000; - private final static String ADMIN = "admin"; - - private static String TEST_TYPE_NAMESPACE = "http://www.alfresco.org/model/testaspectmodel/1.0"; - private static QName TEST_ASPECT_QNAME = QName.createQName(TEST_TYPE_NAMESPACE, "Aspect"); - private static QName PROP_QNAME = QName.createQName(TEST_TYPE_NAMESPACE, "applications"); - - @Override - protected void setUp() throws Exception - { - super.setUp(); - - wpService = (WebProjectService) ctx.getBean("WebProjectService"); - sbService = (SandboxService) ctx.getBean("SandboxService"); - assetService = (AssetService) ctx.getBean("AssetService"); - dictionaryDAO = (DictionaryDAO) ctx.getBean("dictionaryDAO"); - - } - - public void testAspect() throws Exception - { - try - { - AuthenticationUtil.setFullyAuthenticatedUser(ADMIN); - - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS + "-aspectSimple", TEST_WEBPROJ_NAME + "-aspectSimple", TEST_WEBPROJ_TITLE, - TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - - String wpStoreId = wpInfo.getStoreId(); - String defaultWebApp = wpInfo.getDefaultWebApp(); - - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); - String authorSandboxId = sbInfo.getSandboxId(); - - String authorSandboxPath = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - assetService.createFile(authorSandboxId, authorSandboxPath, "myFile", null); - - AssetInfo assetInfo = assetService.getAsset(authorSandboxId, authorSandboxPath + "/" + "myFile"); - attachAspect(assetInfo); - checkAspect(assetInfo); - } - finally - { - AuthenticationUtil.clearCurrentSecurityContext(); - } - } - - @SuppressWarnings("unchecked") - private void checkAspect(AssetInfo assetInfo) - { - assertTrue(assetService.hasAspect(assetInfo, TEST_ASPECT_QNAME)); - - Map properties = assetService.getAssetProperties(assetInfo); - - List list = (List) properties.get(PROP_QNAME); - assertEquals(list.size(), SIZE); - } - - private void attachAspect(final AssetInfo assetInfo) - { - M2Model model = M2Model.createModel("custom:custom"); - model.createNamespace(TEST_TYPE_NAMESPACE, "custom"); - model.createImport(NamespaceService.DICTIONARY_MODEL_1_0_URI, NamespaceService.DICTIONARY_MODEL_PREFIX); - model.createImport(NamespaceService.SYSTEM_MODEL_1_0_URI, NamespaceService.SYSTEM_MODEL_PREFIX); - model.createImport(NamespaceService.CONTENT_MODEL_1_0_URI, NamespaceService.CONTENT_MODEL_PREFIX); - - M2Aspect testMandatoryAspect = model.createAspect("custom:" + TEST_ASPECT_QNAME.getLocalName()); - - M2Property prop = testMandatoryAspect.createProperty("custom:" + PROP_QNAME.getLocalName()); - prop.setType("d:" + DataTypeDefinition.TEXT.getLocalName()); - prop.setMultiValued(true); - prop.setIndexed(true); - - dictionaryDAO.putModel(model); - - final Map aspectValues = new HashMap(); - List applications = new ArrayList(); - - for (int i = 0; i < SIZE; i++) - { - applications.add("Adding " + i); - } - - aspectValues.put(PROP_QNAME, (Serializable) applications); - - // takes about 150 milliseconds to commit - transactionService.getRetryingTransactionHelper().doInTransaction( - new RetryingTransactionCallback() - { - - @Override - public Object execute() throws Throwable - { - assetService.addAspect(assetInfo, TEST_ASPECT_QNAME, aspectValues); - return null; - } - - }); - } -} \ No newline at end of file diff --git a/source/test-java/org/alfresco/wcm/WCMConcurrentTest.java b/source/test-java/org/alfresco/wcm/WCMConcurrentTest.java deleted file mode 100644 index 1e25ca3e13..0000000000 --- a/source/test-java/org/alfresco/wcm/WCMConcurrentTest.java +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . */ - -package org.alfresco.wcm; - -import java.io.File; -import java.io.PrintWriter; -import java.io.StringWriter; - -import javax.transaction.UserTransaction; - -import org.alfresco.config.JNDIConstants; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.transaction.AlfrescoTransactionSupport; -import org.alfresco.wcm.asset.AssetService; -import org.alfresco.wcm.sandbox.SandboxService; - -/** - */ -public class WCMConcurrentTest extends AbstractWCMServiceImplTest -{ - private SandboxService sbService; - private AssetService assetService; - - private final static String ADMIN = "admin"; - - private final static String WP = TEST_WEBPROJ_DNS; - - private final static String SB_STG = WP; - private final static String SB_ADMIN = WP+"--"+ADMIN; - - private final static String AVM_WEBAPPS_PATH = JNDIConstants.DIR_DEFAULT_WWW+"/"+JNDIConstants.DIR_DEFAULT_APPBASE; - private final static String ROOT_PATH = AVM_WEBAPPS_PATH+"/"+"ROOT"; - - //protected static final boolean CLEAN = false; // cleanup during teardown - - @Override - protected void setUp() throws Exception - { - super.setUp(); - - // Get the required services - sbService = (SandboxService)ctx.getBean("SandboxService"); - assetService = (AssetService)ctx.getBean("AssetService"); - } - - - /** - */ - public void test_ETWOTWO_1224() throws Exception - { - try - { - AuthenticationUtil.setFullyAuthenticatedUser(ADMIN); - - wpService.createWebProject(WP, WP, "title", "description"); - - assertEquals(1, wpService.listWebApps(WP).size()); - - assertEquals(0, assetService.listAssets(SB_STG, ROOT_PATH, false).size()); - assertEquals(0, assetService.listAssets(SB_ADMIN, ROOT_PATH, false).size()); - - long start = System.currentTimeMillis(); - - logger.debug("Bulk import started ..."); - - // bulk import - - // ETWOTWO-1224 / WCM-948 - also fails with AVMNotFoundException !!! - int listingRepeat = 100; // listing web apps - String testFile = System.getProperty("user.dir") + "/source/test-resources/wcm/small-61-items.zip"; - - File zipFile = new File(testFile); - assetService.bulkImport(SB_ADMIN, ROOT_PATH, zipFile, false); - - int itemCount = assetService.listAssets(SB_ADMIN, ROOT_PATH, false).size(); - - logger.debug("Items below ROOT: "+itemCount); - - assert(itemCount > 0); - - logger.debug("... bulk import finished in "+(System.currentTimeMillis()-start)+" msecs"); - - assertEquals(0, assetService.listAssets(SB_STG, ROOT_PATH, false).size()); - assertEquals(itemCount, assetService.listAssets(SB_ADMIN, ROOT_PATH, false).size()); - - UserTransaction tx = transactionService.getUserTransaction(); - - tx.begin(); - - start = System.currentTimeMillis(); - - logger.debug("Submit initiation started ..."); - - // submit (from workflow sandbox to staging sandbox and also update user sandbox) - sbService.submitAll(SB_ADMIN , "s1", "s1"); - - tx.commit(); - - logger.debug("... submit initiation finished in "+(System.currentTimeMillis()-start)+" msecs"); - - - int threadCount = 1; - - Thread[] threads = new Thread[threadCount]; - - WCMConcurrentTestListing[] listings = new WCMConcurrentTestListing[threadCount]; - - for (int i = 0; i < threadCount; i++) - { - WCMConcurrentTestListing listing = new WCMConcurrentTestListing(i, listingRepeat); - listings[i] = listing; - threads[i] = new Thread(listing); - threads[i].start(); - } - - // join each thread so that we wait for them all to finish - for (int i = 0; i < threads.length; i++) - { - try - { - threads[i].join(); - - if (listings[i].getErrorStackTrace() != null) - { - throw new RuntimeException(listings[i].getErrorStackTrace()); - } - } - catch (InterruptedException e) - { - // not too serious - the worker threads are non-daemon - } - } - - assertEquals(1, wpService.listWebApps(WP).size()); - - assertEquals(itemCount, assetService.listAssets(SB_STG, ROOT_PATH, false).size()); - assertEquals(itemCount, assetService.listAssets(SB_ADMIN, ROOT_PATH, false).size()); - } - finally - { - AuthenticationUtil.clearCurrentSecurityContext(); - } - } - - private class WCMConcurrentTestListing implements Runnable - { - private int id; - private int repeat; - private String errorStackTrace = null; - - public WCMConcurrentTestListing(int id, int repeat) - { - this.id = id; - this.repeat = repeat; - } - - public String getErrorStackTrace() - { - return errorStackTrace; - } - - public void run() - { - UserTransaction tx = null; - try - { - AuthenticationUtil.setFullyAuthenticatedUser(ADMIN); - - long start = System.currentTimeMillis(); - - for (int i = 1; i <= repeat; i++) - { - tx = transactionService.getUserTransaction(); - - try - { - tx.begin(); - - logger.debug("Start: id: "+id+" - loop="+i+" ["+AlfrescoTransactionSupport.getTransactionId()+"]"); - - assertEquals(1, wpService.listWebApps(WP).size()); - - Thread.sleep(500); - - logger.debug("Finish: id: "+id+" - loop="+i+" ["+AlfrescoTransactionSupport.getTransactionId()+"]"); - - tx.commit(); - } - catch (Throwable t) - { - if (errorStackTrace == null) - { - StringWriter sw = new StringWriter(); - t.printStackTrace(new PrintWriter(sw)); - - errorStackTrace = sw.toString(); - } - - System.err.println("Failed: id: "+id+" - loop="+i+" ["+AlfrescoTransactionSupport.getTransactionId()+"] "+t.getMessage()); - - if (tx != null) { try { tx.rollback(); } catch(Exception e) { }} - } - } - - logger.debug("id: "+id+" finished (repeated "+repeat+" times) in "+(System.currentTimeMillis()-start)+" msecs"); - } - catch (Throwable t) - { - logger.debug(t.getMessage()); - - if (tx != null) { try { tx.rollback(); } catch(Exception e) { }} - - StringWriter sw = new StringWriter(); - t.printStackTrace(new PrintWriter(sw)); - - errorStackTrace = sw.toString(); - } - finally - { - AuthenticationUtil.clearCurrentSecurityContext(); - } - } - } -} diff --git a/source/test-java/org/alfresco/wcm/WCMTestSuite.java b/source/test-java/org/alfresco/wcm/WCMTestSuite.java deleted file mode 100644 index 130f0bd52e..0000000000 --- a/source/test-java/org/alfresco/wcm/WCMTestSuite.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.wcm; - -import junit.framework.Test; -import junit.framework.TestSuite; - -import org.alfresco.wcm.asset.AssetServiceImplTest; -import org.alfresco.wcm.preview.PreviewURIServiceImplTest; -import org.alfresco.wcm.sandbox.SandboxServiceImplTest; -import org.alfresco.wcm.webproject.WebProjectServiceImplTest; -import org.alfresco.wcm.webproject.script.ScriptWebProjectsTest; - -/** - * WCM test suite - * - * @author janv - */ -public class WCMTestSuite extends TestSuite -{ - /** - * Creates the test suite - * - * @return the test suite - */ - public static Test suite() - { - TestSuite suite = new TestSuite(); - - suite.addTestSuite(WCMAspectTest.class); - suite.addTestSuite(WebProjectServiceImplTest.class); - // TODO: re-instate test when intermittent issue is resolved - //suite.addTestSuite(AssetServiceImplTest.class); - suite.addTestSuite(SandboxServiceImplTest.class); - suite.addTestSuite(ScriptWebProjectsTest.class); - suite.addTestSuite(PreviewURIServiceImplTest.class); - suite.addTestSuite(WCMConcurrentTest.class); - return suite; - } -} diff --git a/source/test-java/org/alfresco/wcm/asset/AssetServiceImplTest.java b/source/test-java/org/alfresco/wcm/asset/AssetServiceImplTest.java deleted file mode 100644 index 90c9970fbc..0000000000 --- a/source/test-java/org/alfresco/wcm/asset/AssetServiceImplTest.java +++ /dev/null @@ -1,1396 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.wcm.asset; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.alfresco.model.ContentModel; -import org.alfresco.repo.content.MimetypeMap; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.security.permissions.AccessDeniedException; -import org.alfresco.service.cmr.avm.AVMNotFoundException; -import org.alfresco.service.cmr.repository.ContentReader; -import org.alfresco.service.cmr.repository.ContentWriter; -import org.alfresco.service.namespace.QName; -import org.alfresco.wcm.AbstractWCMServiceImplTest; -import org.alfresco.wcm.sandbox.SandboxInfo; -import org.alfresco.wcm.util.WCMUtil; -import org.alfresco.wcm.webproject.WebProjectInfo; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * Asset Service implementation unit test - * - * @author janv - */ -public class AssetServiceImplTest extends AbstractWCMServiceImplTest -{ - private static Log logger = LogFactory.getLog(AssetServiceImplTest.class); - - // test data - private static final String PREFIX = "created-by-admin-"; - private static final String FILE = "This is file1 - admin"; - - @Override - protected void setUp() throws Exception - { - super.setUp(); - } - - @Override - protected void tearDown() throws Exception - { - super.tearDown(); - } - - private void checkAssetInfo(AssetInfo assetInfo, String expectedName, String expectedPath, String expectedCreator, boolean expectedIsFile, boolean expectedIsFolder, boolean expectedIsDeleted, boolean expectedIsLocked, String expectedLockOwner) - { - assertNotNull(assetInfo); - - assertEquals(expectedName, assetInfo.getName()); - assertEquals(expectedPath, assetInfo.getPath()); - assertEquals(expectedCreator, assetInfo.getCreator()); - - assertEquals(expectedIsFile, assetInfo.isFile()); - assertEquals(expectedIsFolder, assetInfo.isFolder()); - assertEquals(expectedIsDeleted, assetInfo.isDeleted()); - - assertNotNull(assetInfo.getCreatedDate()); - - assertEquals(expectedIsLocked, assetInfo.isLocked()); - assertEquals(expectedLockOwner, assetInfo.getLockOwner()); - } - - public void testSimple() - { - // create web project (also creates staging sandbox and admin's author sandbox) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-assetSimple", TEST_WEBPROJ_NAME+"-assetSimple", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - - // get admin's author sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); - String sbStoreId = sbInfo.getSandboxId(); - - String path = sbInfo.getSandboxRootPath() + "/" + wpInfo.getDefaultWebApp(); - - // create folder - assetService.createFolder(sbStoreId, path, "myFolder1", null); - - // create (empty) file - assetService.createFile(sbStoreId, path+"/myFolder1", "myFile1", null); // ignore return - - // get assets - - AssetInfo myFolder1Asset = assetService.getAsset(sbStoreId, path+"/myFolder1"); - checkAssetInfo(myFolder1Asset, "myFolder1", path+"/myFolder1", AuthenticationUtil.getAdminUserName(), false, true, false, false, null); - - AssetInfo myFile1Asset = assetService.getAsset(sbStoreId, path+"/myFolder1/myFile1"); - checkAssetInfo(myFile1Asset, "myFile1", path+"/myFolder1/myFile1", AuthenticationUtil.getAdminUserName(), true, false, false, true, AuthenticationUtil.getAdminUserName()); - - // delete folder - assetService.deleteAsset(myFolder1Asset); // also deletes myFile1 - - // try to get assets (including deleted) - - myFolder1Asset = assetService.getAsset(sbStoreId, -1, path+"/myFolder1", true); - assertNull(myFolder1Asset); - - myFile1Asset = assetService.getAsset(sbStoreId, -1, path+"/myFolder1/myFile1", true); - assertNull(myFile1Asset); - } - - /** - * Test CRUD - create, retrieve (get, list), update and delete - */ - public void testCRUD() throws IOException - { - // create web project (also creates staging sandbox and admin's author sandbox) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-crud", TEST_WEBPROJ_NAME+"-crud", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - String defaultWebApp = wpInfo.getDefaultWebApp(); - - // invite web user and auto-create their (author) sandbox - wpService.inviteWebUser(wpInfo.getStoreId(), USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER, true); - - // switch to user - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // get user's author sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); - String sbStoreId = sbInfo.getSandboxId(); - - String path = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - // get non-existent assets - assertNull(assetService.getAsset(sbStoreId, path+"/myFolder1")); - assertNull(assetService.getAsset(sbStoreId, path+"/myFile1")); - assertNull(assetService.getAsset(sbStoreId, path+"/myFolder1/myFile2")); - - assertEquals(0, assetService.listAssets(sbStoreId, path, false).size()); - - // create folder - assetService.createFolder(sbStoreId, path, "myFolder1", null); - - assertEquals(1, assetService.listAssets(sbStoreId, path, false).size()); - assertEquals(0, assetService.listAssets(sbStoreId, path+"/myFolder1", false).size()); - - // create file (and add content) - final String MYFILE1 = "This is myFile1"; - ContentWriter writer = assetService.createFile(sbStoreId, path, "myFile1", null); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE1); - - assertEquals(2, assetService.listAssets(sbStoreId, path, false).size()); - - final String MYFILE2 = "This is myFile2"; - writer = assetService.createFile(sbStoreId, path+"/myFolder1", "myFile2", null); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE2); - - assertEquals(1, assetService.listAssets(sbStoreId, path+"/myFolder1", false).size()); - - // get assets (not including deleted) - - AssetInfo myFolder1Asset = assetService.getAsset(sbStoreId, path+"/myFolder1"); - checkAssetInfo(myFolder1Asset, "myFolder1", path+"/myFolder1", USER_ONE, false, true, false, false, null); - - AssetInfo myFile1Asset = assetService.getAsset(sbStoreId, path+"/myFile1"); - checkAssetInfo(myFile1Asset, "myFile1", path+"/myFile1", USER_ONE, true, false, false, true, USER_ONE); - - // get content - - ContentReader reader = assetService.getContentReader(myFile1Asset); - InputStream in = reader.getContentInputStream(); - byte[] buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(MYFILE1, new String(buff, 0, MYFILE1.length())); // assumes 1byte=1char - - AssetInfo myFile2Asset = assetService.getAsset(sbStoreId, path+"/myFolder1/myFile2"); - checkAssetInfo(myFile2Asset, "myFile2", path+"/myFolder1/myFile2", USER_ONE, true, false, false, true, USER_ONE); - - reader = assetService.getContentReader(myFile2Asset); - in = reader.getContentInputStream(); - buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(MYFILE2, new String(buff, 0, MYFILE2.length())); // assumes 1byte=1char - - // update content - - final String MYFILE2_MODIFIED = "This is myFile2 ... modified"; - writer = assetService.getContentWriter(myFile2Asset); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE2_MODIFIED); - - // get updated content - - reader = assetService.getContentReader(myFile2Asset); - in = reader.getContentInputStream(); - buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(MYFILE2_MODIFIED, new String(buff, 0, MYFILE2_MODIFIED.length())); // assumes 1byte=1char - - // delete folders and files - assetService.deleteAsset(myFile1Asset); - assetService.deleteAsset(myFolder1Asset); // also deletes myFile2 - - // try to get assets (including deleted) - - myFolder1Asset = assetService.getAsset(sbStoreId, -1, path+"/myFolder1", true); - assertNull(myFolder1Asset); - - myFile1Asset = assetService.getAsset(sbStoreId, -1, path+"/myFile1", true); - assertNull(myFile1Asset); - - myFile2Asset = assetService.getAsset(sbStoreId, -1, path+"/myFolder1/myFile2", true); - assertNull(myFile2Asset); - - assertEquals(0, assetService.listAssets(sbStoreId, path, false).size()); - - try - { - // -ve test - assertEquals(0, assetService.listAssets(sbStoreId, path+"/myFolder1", false).size()); - fail("Cannot list assets within non-existant folder"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - } - - /** - * Test CRUD in a webApp - create, retrieve (get, list), update and delete - */ - public void testCRUDinWebApp() throws IOException - { - // create web project (also creates staging sandbox and admin's author sandbox) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-crudwebapp", TEST_WEBPROJ_NAME+"-crudwebapp", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - - String myWebApp1 = "myWebApp1"; - wpService.createWebApp(wpInfo.getStoreId(), myWebApp1, null); - - // invite web user and auto-create their (author) sandbox - wpService.inviteWebUser(wpInfo.getStoreId(), USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER, true); - - // switch to user - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // get user's author sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); - String sbStoreId = sbInfo.getSandboxId(); - - // get non-existent assets - assertNull(assetService.getAssetWebApp(sbStoreId, myWebApp1, "/myFolder1")); - assertNull(assetService.getAssetWebApp(sbStoreId, myWebApp1, "/myFile1")); - assertNull(assetService.getAssetWebApp(sbStoreId, myWebApp1, "/myFolder1/myFile2")); - - assertEquals(0, assetService.listAssetsWebApp(sbStoreId, myWebApp1, "/", false).size()); - - // create folder - assetService.createFolderWebApp(sbStoreId, myWebApp1, "/", "myFolder1"); - - assertEquals(1, assetService.listAssetsWebApp(sbStoreId, myWebApp1, "/", false).size()); - assertEquals(0, assetService.listAssetsWebApp(sbStoreId, myWebApp1, "/myFolder1", false).size()); - - // create file (and add content) - final String MYFILE1 = "This is myFile1"; - ContentWriter writer = assetService.createFileWebApp(sbStoreId, myWebApp1, "/", "myFile1"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE1); - - assertEquals(2, assetService.listAssetsWebApp(sbStoreId, myWebApp1, "/", false).size()); - - final String MYFILE2 = "This is myFile2"; - writer = assetService.createFileWebApp(sbStoreId, myWebApp1, "/myFolder1", "myFile2"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE2); - - assertEquals(1, assetService.listAssetsWebApp(sbStoreId, myWebApp1, "/myFolder1", false).size()); - - // get assets (not including deleted) - String path = sbInfo.getSandboxRootPath() + "/" + myWebApp1; - AssetInfo myFolder1Asset = assetService.getAssetWebApp(sbStoreId, myWebApp1, "/myFolder1"); - checkAssetInfo(myFolder1Asset, "myFolder1", path+"/myFolder1", USER_ONE, false, true, false, false, null); - - AssetInfo myFile1Asset = assetService.getAssetWebApp(sbStoreId, myWebApp1, "/myFile1"); - checkAssetInfo(myFile1Asset, "myFile1", path+"/myFile1", USER_ONE, true, false, false, true, USER_ONE); - - // get content - - ContentReader reader = assetService.getContentReader(myFile1Asset); - InputStream in = reader.getContentInputStream(); - byte[] buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(MYFILE1, new String(buff, 0, MYFILE1.length())); // assumes 1byte=1char - - AssetInfo myFile2Asset = assetService.getAssetWebApp(sbStoreId, myWebApp1, "/myFolder1/myFile2"); - checkAssetInfo(myFile2Asset, "myFile2", path+"/myFolder1/myFile2", USER_ONE, true, false, false, true, USER_ONE); - - reader = assetService.getContentReader(myFile2Asset); - in = reader.getContentInputStream(); - buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(MYFILE2, new String(buff, 0, MYFILE2.length())); // assumes 1byte=1char - - // update content - - final String MYFILE2_MODIFIED = "This is myFile2 ... modified"; - writer = assetService.getContentWriter(myFile2Asset); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE2_MODIFIED); - - // get updated content - - reader = assetService.getContentReader(myFile2Asset); - in = reader.getContentInputStream(); - buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(MYFILE2_MODIFIED, new String(buff, 0, MYFILE2_MODIFIED.length())); // assumes 1byte=1char - - // delete folders and files - assetService.deleteAsset(myFile1Asset); - assetService.deleteAsset(myFolder1Asset); // also deletes myFile2 - - // try to get assets (including deleted) - - myFolder1Asset = assetService.getAssetWebApp(sbStoreId, myWebApp1, "/myFolder1", true); - assertNull(myFolder1Asset); - - myFile1Asset = assetService.getAssetWebApp(sbStoreId, myWebApp1, "/myFile1", true); - assertNull(myFile1Asset); - - myFile2Asset = assetService.getAssetWebApp(sbStoreId, myWebApp1, "/myFolder1/myFile2", true); - assertNull(myFile2Asset); - - assertEquals(0, assetService.listAssetsWebApp(sbStoreId, myWebApp1, "/", false).size()); - - try - { - // -ve test - assertEquals(0, assetService.listAssetsWebApp(sbStoreId, myWebApp1, "/myFolder1", false).size()); - fail("Cannot list assets within non-existant folder"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - } - - /** - * Test CRUD - create, retrieve (get, list), update and delete for each role - */ - public void testCRUDforRoles() throws IOException, InterruptedException - { - // create web project (also creates staging sandbox and admin's author sandbox) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-crudroles", TEST_WEBPROJ_NAME+"-crudroles", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - - String wpStoreId = wpInfo.getStoreId(); - String defaultWebApp = wpInfo.getDefaultWebApp(); - String stagingStoreId = wpInfo.getStagingStoreName(); - - // get admin sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); - String sbStoreId = sbInfo.getSandboxId(); - - // create some existing folders and files - String[] users = new String[]{USER_ONE, USER_TWO, USER_THREE, USER_FOUR}; - for (String user : users) - { - assetService.createFolderWebApp(sbStoreId, defaultWebApp, "/", PREFIX+user); - - // create file (and add content) - ContentWriter writer = assetService.createFileWebApp(sbStoreId, defaultWebApp, "/"+PREFIX+user, "fileA"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(FILE); - } - - sbService.submitWebApp(sbStoreId, defaultWebApp, "some existing folders and files", "some existing folders and files"); - - pollForSnapshotCount(stagingStoreId, 1); - - runCRUDforRoles(USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER, wpStoreId, defaultWebApp, true, true, true); - - // TODO - pending ETHREEOH-1314 (see below) if updating folder properties - runCRUDforRoles(USER_TWO, WCMUtil.ROLE_CONTENT_PUBLISHER, wpStoreId, defaultWebApp, true, true, false); - runCRUDforRoles(USER_THREE, WCMUtil.ROLE_CONTENT_REVIEWER, wpStoreId, defaultWebApp, false, true, false); - - runCRUDforRoles(USER_FOUR, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, wpStoreId, defaultWebApp, true, false, false); - } - - private void runCRUDforRoles(String user, String role, final String wpStoreId, String defaultWebApp, boolean canCreate, boolean canUpdateExisting, boolean canDeleteExisting) throws IOException, InterruptedException - { - // switch to user - content manager - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - // invite web user and auto-create their (author) sandbox - wpService.inviteWebUser(wpStoreId, user, role, true); - - // switch to user - AuthenticationUtil.setFullyAuthenticatedUser(user); - - // get staging sandbox - String stagingStoreId = sbService.getStagingSandbox(wpStoreId).getSandboxId(); - - // get user's author sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); - String sbStoreId = sbInfo.getSandboxId(); - String path = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; // for checks only - - if (canCreate) - { - // create folder - assetService.createFolderWebApp(sbStoreId, defaultWebApp, "/", user); - - // create file (and add content) - final String MYFILE1 = "This is myFile1 - "+user; - ContentWriter writer = assetService.createFileWebApp(sbStoreId, defaultWebApp, "/"+user, "fileA"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE1); - - // list assets - assertEquals(1, assetService.listAssetsWebApp(sbStoreId, defaultWebApp, "/"+user, false).size()); - - // get assets - AssetInfo myFolder1Asset = assetService.getAssetWebApp(sbStoreId, defaultWebApp, "/"+user); - checkAssetInfo(myFolder1Asset, user, path+"/"+user, user, false, true, false, false, null); - - AssetInfo myFile1Asset = assetService.getAssetWebApp(sbStoreId, defaultWebApp, "/"+user+"/fileA"); - checkAssetInfo(myFile1Asset, "fileA", path+"/"+user+"/fileA", user, true, false, false, true, user); - - // get content - - ContentReader reader = assetService.getContentReader(myFile1Asset); - InputStream in = reader.getContentInputStream(); - byte[] buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(MYFILE1, new String(buff, 0, MYFILE1.length())); // assumes 1byte=1char - - // update content - - final String MYFILE1_MODIFIED = "This is myFile1 ... modified"; - writer = assetService.getContentWriter(myFile1Asset); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE1_MODIFIED); - - // get updated content - - reader = assetService.getContentReader(myFile1Asset); - in = reader.getContentInputStream(); - buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(MYFILE1_MODIFIED, new String(buff, 0, MYFILE1_MODIFIED.length())); // assumes 1byte=1char - - // update folder properties - eg. title and description - - Map newProps = new HashMap(2); - newProps.put(ContentModel.PROP_TITLE, "folder title"); - newProps.put(ContentModel.PROP_DESCRIPTION, "folder description"); - - assetService.updateAssetProperties(myFolder1Asset, newProps); - Map props = assetService.getAssetProperties(myFolder1Asset); - assertEquals("folder title", props.get(ContentModel.PROP_TITLE)); - assertEquals("folder description", props.get(ContentModel.PROP_DESCRIPTION)); - - // Delete created file and folder - assetService.deleteAsset(myFile1Asset); - assetService.deleteAsset(myFolder1Asset); - } - else - { - try - { - // try to create folder (-ve test) - assetService.createFolderWebApp(sbStoreId, defaultWebApp, "/", user); - fail("User "+user+" with role "+role+" should not be able to create folder"); - } - catch (AccessDeniedException ade) - { - // expected - } - - try - { - // try to create file (-ve test) - assetService.createFileWebApp(sbStoreId, defaultWebApp, "/", "file-"+user); - fail("User "+user+" with role "+role+" should not be able to create file"); - } - catch (AccessDeniedException ade) - { - // expected - } - } - - // list existing assets - assertEquals(1, assetService.listAssetsWebApp(sbStoreId, defaultWebApp, "/"+PREFIX+user, false).size()); - - // get existing assets - AssetInfo existingFolder1Asset = assetService.getAssetWebApp(sbStoreId, defaultWebApp, "/"+PREFIX+user); - checkAssetInfo(existingFolder1Asset, PREFIX+user, path+"/"+PREFIX+user, AuthenticationUtil.getAdminUserName(), false, true, false, false, null); - - AssetInfo existingFile1Asset = assetService.getAssetWebApp(sbStoreId, defaultWebApp, "/"+PREFIX+user+"/fileA"); - checkAssetInfo(existingFile1Asset, "fileA", path+"/"+PREFIX+user+"/fileA", AuthenticationUtil.getAdminUserName(), true, false, false, false, null); - - // get existing content - - ContentReader reader = assetService.getContentReader(existingFile1Asset); - InputStream in = reader.getContentInputStream(); - byte[] buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(FILE, new String(buff, 0, FILE.length())); // assumes 1byte=1char - - if (canUpdateExisting) - { - // update content - - final String MYFILE1_MODIFIED = "This is myFile1 ... modified"; - ContentWriter writer = assetService.getContentWriter(existingFile1Asset); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE1_MODIFIED); - - // get updated content - - reader = assetService.getContentReader(existingFile1Asset); - in = reader.getContentInputStream(); - buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(MYFILE1_MODIFIED, new String(buff, 0, MYFILE1_MODIFIED.length())); // assumes 1byte=1char - - // update file properties - eg. title and description - - Map newProps = new HashMap(2); - newProps.put(ContentModel.PROP_TITLE, "file title"); - newProps.put(ContentModel.PROP_DESCRIPTION, "file description"); - - assetService.updateAssetProperties(existingFile1Asset, newProps); - Map props = assetService.getAssetProperties(existingFile1Asset); - assertEquals("file title", props.get(ContentModel.PROP_TITLE)); - assertEquals("file description", props.get(ContentModel.PROP_DESCRIPTION)); - - /* TODO - pending ETHREEOH-1314 - fails for content contributor / content publisher during submit if updating folder properties - */ - // update folder properties - eg. title and description - - newProps = new HashMap(2); - newProps.put(ContentModel.PROP_TITLE, "folder title"); - newProps.put(ContentModel.PROP_DESCRIPTION, "folder description"); - - assetService.updateAssetProperties(existingFolder1Asset, newProps); - props = assetService.getAssetProperties(existingFolder1Asset); - assertEquals("folder title", props.get(ContentModel.PROP_TITLE)); - assertEquals("folder description", props.get(ContentModel.PROP_DESCRIPTION)); - - - } - else - { - try - { - // try to update file (-ve test) - assetService.getContentWriter(existingFile1Asset); - fail("User "+user+" with role "+role+" should not be able to update existing file"); - } - catch (AccessDeniedException ade) - { - // expected - } - - try - { - // try to update file properties (-ve test) - Map newProps = new HashMap(2); - newProps.put(ContentModel.PROP_TITLE, "file title"); - newProps.put(ContentModel.PROP_DESCRIPTION, "file description"); - - assetService.updateAssetProperties(existingFile1Asset, newProps); - fail("User "+user+" with role "+role+" should not be able to update existing file properties"); - } - catch (AccessDeniedException ade) - { - // expected - } - - try - { - // try to update folder properties (-ve test) - Map newProps = new HashMap(2); - newProps.put(ContentModel.PROP_TITLE, "folder title"); - newProps.put(ContentModel.PROP_DESCRIPTION, "folder description"); - - assetService.updateAssetProperties(existingFolder1Asset, newProps); - fail("User "+user+" with role "+role+" should not be able to update existing folder properties"); - } - catch (AccessDeniedException ade) - { - // expected - } - } - - if (canDeleteExisting) - { - // Delete existing file and folder - assetService.deleteAsset(existingFile1Asset); - assetService.deleteAsset(existingFolder1Asset); - } - else - { - try - { - // try to delete file (-ve test) - assetService.deleteAsset(existingFile1Asset); - fail("User "+user+" with role "+role+" should not be able to delete existing file"); - } - catch (AVMNotFoundException nfe) - { - // expected - } - - try - { - // try to delete folder (-ve test) - assetService.deleteAsset(existingFolder1Asset); - fail("User "+user+" with role "+role+" should not be able to delete existing folder"); - } - catch (AVMNotFoundException ade) - { - // expected - } - } - - // switch to admin (content manager) - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - int snapCnt = sbService.listSnapshots(wpStoreId, false).size(); - - // switch to user - AuthenticationUtil.setFullyAuthenticatedUser(user); - - List changedAssets = sbService.listChangedWebApp(sbStoreId, defaultWebApp, true); - - if (changedAssets.size() > 0) - { - // submit the changes - sbService.submitWebApp(sbStoreId, defaultWebApp, "some updates by "+user, "some updates by "+user); - - snapCnt += (canUpdateExisting || canDeleteExisting) ? (1):(0); - pollForSnapshotCount(stagingStoreId, snapCnt); - - assertEquals(0, sbService.listChangedWebApp(sbStoreId, defaultWebApp, true).size()); - } - } - - public void testRenameFile() - { - // create web project (also creates staging sandbox and admin's author sandbox) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-renamefile", TEST_WEBPROJ_NAME+"-renamefile", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - String defaultWebApp = wpInfo.getDefaultWebApp(); - - // invite web user and auto-create their (author) sandbox - wpService.inviteWebUser(wpInfo.getStoreId(), USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER, true); - - // switch to user - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // get user's author sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); - String sbStoreId = sbInfo.getSandboxId(); - - String path = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - // create folders - assetService.createFolder(sbStoreId, path, "myFolder1", null); - assetService.createFolder(sbStoreId, path+"/myFolder1", "myFolder2", null); - - // create file - assetService.createFile(sbStoreId, path+"/myFolder1/myFolder2", "myFile1", null); - - // rename file - AssetInfo myFile1Asset = assetService.getAsset(sbStoreId, path+"/myFolder1/myFolder2/myFile1"); - checkAssetInfo(myFile1Asset, "myFile1", path+"/myFolder1/myFolder2/myFile1", USER_ONE, true, false, false, true, USER_ONE); - - myFile1Asset = assetService.renameAsset(myFile1Asset, "myFile1Renamed"); - checkAssetInfo(myFile1Asset, "myFile1Renamed", path+"/myFolder1/myFolder2/myFile1Renamed", USER_ONE, true, false, false, true, USER_ONE); - } - - public void testRenameFolder() - { - // create web project (also creates staging sandbox and admin's author sandbox) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-renamefolder", TEST_WEBPROJ_NAME+"-renamefolder", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - String defaultWebApp = wpInfo.getDefaultWebApp(); - - // invite web user and auto-create their (author) sandbox - wpService.inviteWebUser(wpInfo.getStoreId(), USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER, true); - - // switch to user - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // get user's author sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); - String sbStoreId = sbInfo.getSandboxId(); - - String path = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - // create folders - assetService.createFolder(sbStoreId, path, "myFolder1", null); - assetService.createFolder(sbStoreId, path+"/myFolder1", "myFolder2", null); - - AssetInfo myFolder1Asset = assetService.getAsset(sbStoreId, path+"/myFolder1"); - checkAssetInfo(myFolder1Asset, "myFolder1", path+"/myFolder1", USER_ONE, false, true, false, false, null); - - AssetInfo myFolder2Asset = assetService.getAsset(sbStoreId, path+"/myFolder1/myFolder2"); - checkAssetInfo(myFolder2Asset, "myFolder2", path+"/myFolder1/myFolder2", USER_ONE, false, true, false, false, null); - - // rename folder 1 - myFolder1Asset = assetService.renameAsset(myFolder1Asset, "myFolder1Renamed"); - checkAssetInfo(myFolder1Asset, "myFolder1Renamed", path+"/myFolder1Renamed", USER_ONE, false, true, false, false, null); - - // rename folder 2 - myFolder2Asset = assetService.getAsset(sbStoreId, path+"/myFolder1Renamed/myFolder2"); - checkAssetInfo(myFolder2Asset, "myFolder2", path+"/myFolder1Renamed/myFolder2", USER_ONE, false, true, false, false, null); - - myFolder2Asset = assetService.renameAsset(myFolder2Asset, "myFolder2Renamed"); - checkAssetInfo(myFolder2Asset, "myFolder2Renamed", path+"/myFolder1Renamed/myFolder2Renamed", USER_ONE, false, true, false, false, null); - } - - - public void testCopyFile() - { - // create web project (also creates staging sandbox and admin's author sandbox) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-copyfile", TEST_WEBPROJ_NAME+"-copyfile", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - String defaultWebApp = wpInfo.getDefaultWebApp(); - - // invite web user and auto-create their (author) sandbox - wpService.inviteWebUser(wpInfo.getStoreId(), USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER, true); - - // switch to user - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // get user's author sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); - String sbStoreId = sbInfo.getSandboxId(); - - String path = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - // create folders - assetService.createFolder(sbStoreId, path, "myFolder1", null); - assetService.createFolder(sbStoreId, path+"/myFolder1", "myFolder2", null); - - // create (non-empty) file - final String MYFILE1 = "This is myFile1"; - ContentWriter writer = assetService.createFile(sbStoreId, path+"/myFolder1/myFolder2", "myFile1", null); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE1); - - // copy file - note: must have content - AssetInfo myFile1Asset = assetService.getAsset(sbStoreId, path+"/myFolder1/myFolder2/myFile1"); - checkAssetInfo(myFile1Asset, "myFile1", path+"/myFolder1/myFolder2/myFile1", USER_ONE, true, false, false, true, USER_ONE); - - // TODO review - copied files are not locked ? - myFile1Asset = assetService.copyAsset(myFile1Asset, path+"/myFolder1"); - //checkAssetInfo(myFile1Asset, "myFile1", path+"/myFolder1/myFile1", USER_ONE, true, false, false, true, USER_ONE); - checkAssetInfo(myFile1Asset, "myFile1", path+"/myFolder1/myFile1", USER_ONE, true, false, false, false, null); - } - - public void testCopyFolder() - { - // create web project (also creates staging sandbox and admin's author sandbox) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-copyfolder", TEST_WEBPROJ_NAME+"-copyfolder", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - String defaultWebApp = wpInfo.getDefaultWebApp(); - - // invite web user and auto-create their (author) sandbox - wpService.inviteWebUser(wpInfo.getStoreId(), USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER, true); - - // switch to user - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // get user's author sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); - String sbStoreId = sbInfo.getSandboxId(); - - String path = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - // create folders - assetService.createFolder(sbStoreId, path, "myFolder1", null); - assetService.createFolder(sbStoreId, path+"/myFolder1", "myFolder2", null); - - // create (non-empty) file - final String MYFILE1 = "This is myFile1"; - ContentWriter writer = assetService.createFile(sbStoreId, path+"/myFolder1/myFolder2", "myFile1", null); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE1); - - AssetInfo myFile1Asset = assetService.getAsset(sbStoreId, path+"/myFolder1/myFolder2/myFile1"); - checkAssetInfo(myFile1Asset, "myFile1", path+"/myFolder1/myFolder2/myFile1", USER_ONE, true, false, false, true, USER_ONE); - - AssetInfo myFolder2Asset = assetService.getAsset(sbStoreId, path+"/myFolder1/myFolder2"); - checkAssetInfo(myFolder2Asset, "myFolder2", path+"/myFolder1/myFolder2", USER_ONE, false, true, false, false, null); - - // recursively copy folder - myFolder2Asset = assetService.copyAsset(myFolder2Asset, path); - - checkAssetInfo(myFolder2Asset, "myFolder2", path+"/myFolder2", USER_ONE, false, true, false, false, null); - - AssetInfo myCopiedFolder2Asset = assetService.getAsset(sbStoreId, path+"/myFolder2"); - checkAssetInfo(myCopiedFolder2Asset, "myFolder2", path+"/myFolder2", USER_ONE, false, true, false, false, null); - - AssetInfo myCopiedFile1Asset = assetService.getAsset(sbStoreId, path+"/myFolder2/myFile1"); - - // TODO review - copied files are not locked ? - //checkAssetInfo(myCopiedFile1Asset, "myFile1", path+"/myFolder2/myFile1", USER_ONE, true, false, false, true, USER_ONE); - checkAssetInfo(myCopiedFile1Asset, "myFile1", path+"/myFolder2/myFile1", USER_ONE, true, false, false, false, null); - } - - public void testMoveFile() - { - // create web project (also creates staging sandbox and admin's author sandbox) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-movefile", TEST_WEBPROJ_NAME+"-movefile", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - String defaultWebApp = wpInfo.getDefaultWebApp(); - - // invite web user and auto-create their (author) sandbox - wpService.inviteWebUser(wpInfo.getStoreId(), USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER, true); - - // switch to user - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // get user's author sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); - String sbStoreId = sbInfo.getSandboxId(); - - String path = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - // create folders - assetService.createFolder(sbStoreId, path, "myFolder1", null); - assetService.createFolder(sbStoreId, path+"/myFolder1", "myFolder2", null); - - // create (empty) file - assetService.createFile(sbStoreId, path+"/myFolder1/myFolder2", "myFile1", null); // ignore return - - // move file - AssetInfo myFile1Asset = assetService.getAsset(sbStoreId, path+"/myFolder1/myFolder2/myFile1"); - checkAssetInfo(myFile1Asset, "myFile1", path+"/myFolder1/myFolder2/myFile1", USER_ONE, true, false, false, true, USER_ONE); - - myFile1Asset = assetService.moveAsset(myFile1Asset, path+"/myFolder1"); - - // TODO review - moved files are not locked ? - checkAssetInfo(myFile1Asset, "myFile1", path+"/myFolder1/myFile1", USER_ONE, true, false, false, true, USER_ONE); - //checkAssetInfo(myFile1Asset, "myFile1", path+"/myFolder1/myFile1", USER_ONE, true, false, false, false, null); - } - - /* - // TODO lock issue ... - // org.alfresco.service.cmr.avm.AVMNotFoundException: Lock not found for testAsset-1228830920248-movefolder:/www/avm_webapps/ROOT/myFolder1/myFolder2 - // at org.alfresco.repo.avm.locking.AVMLockingServiceImpl.modifyLock(AVMLockingServiceImpl.java:490) - // at org.alfresco.repo.avm.AVMLockingAwareService.rename(AVMLockingAwareService.java:712) - */ - public void testMoveFolder() - { - // create web project (also creates staging sandbox and admin's author sandbox) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-movefolder", TEST_WEBPROJ_NAME+"-movefolder", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - String defaultWebApp = wpInfo.getDefaultWebApp(); - - // invite web user and auto-create their (author) sandbox - wpService.inviteWebUser(wpInfo.getStoreId(), USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER, true); - - // switch to user - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // get user's author sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); - String sbStoreId = sbInfo.getSandboxId(); - - String path = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - // create folders - assetService.createFolder(sbStoreId, path, "myFolder1", null); - assetService.createFolder(sbStoreId, path+"/myFolder1", "myFolder2", null); - - // create (empty) file - assetService.createFile(sbStoreId, path+"/myFolder1/myFolder2", "myFile1", null); // ignore return - - AssetInfo myFile1Asset = assetService.getAsset(sbStoreId, path+"/myFolder1/myFolder2/myFile1"); - checkAssetInfo(myFile1Asset, "myFile1", path+"/myFolder1/myFolder2/myFile1", USER_ONE, true, false, false, true, USER_ONE); - - AssetInfo myFolder2Asset = assetService.getAsset(sbStoreId, path+"/myFolder1/myFolder2"); - checkAssetInfo(myFolder2Asset, "myFolder2", path+"/myFolder1/myFolder2", USER_ONE, false, true, false, false, null); - - // recursively move folder - myFolder2Asset = assetService.moveAsset(myFolder2Asset, path); - - checkAssetInfo(myFolder2Asset, "myFolder2", path+"/myFolder2", USER_ONE, false, true, false, false, null); - - AssetInfo myMovedFolder2Asset = assetService.getAsset(sbStoreId, path+"/myFolder2"); - checkAssetInfo(myMovedFolder2Asset, "myFolder2", path+"/myFolder2", USER_ONE, false, true, false, false, null); - - AssetInfo myMovedFile1Asset = assetService.getAsset(sbStoreId, path+"/myFolder2/myFile1"); - - // TODO review - moved files are not locked ? - //checkAssetInfo(myMovedFile1Asset, "myFile1", path+"/myFolder2/myFile1", USER_ONE, true, false, false, true, USER_ONE); - checkAssetInfo(myMovedFile1Asset, "myFile1", path+"/myFolder2/myFile1", USER_ONE, true, false, false, false, null); - } - - public void testProperties() throws InterruptedException - { - // create web project (also creates staging sandbox and admin's author sandbox) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-properties", TEST_WEBPROJ_NAME+"-properties", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - String defaultWebApp = wpInfo.getDefaultWebApp(); - - // get staging sandbox id - String stagingStoreId = sbService.getStagingSandbox(wpInfo.getStoreId()).getSandboxId(); - - // invite web user and auto-create their (author) sandbox - wpService.inviteWebUser(wpInfo.getStoreId(), USER_ONE, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, true); - - // switch to user - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // get user's author sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); - String sbStoreId = sbInfo.getSandboxId(); - - String path = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - // create folder - assetService.createFolderWebApp(sbStoreId, defaultWebApp, "/", "myFolder1"); - AssetInfo myFolder1Asset = assetService.getAssetWebApp(sbStoreId, defaultWebApp, "/myFolder1"); - checkAssetInfo(myFolder1Asset, "myFolder1", path+"/myFolder1", USER_ONE, false, true, false, false, null); - - Map props = assetService.getAssetProperties(myFolder1Asset); - assertNotNull(props); - int countFolderInbuiltProps = props.size(); - - // create file - assetService.createFileWebApp(sbStoreId, defaultWebApp, "/myFolder1", "myFile1"); - AssetInfo myFile1Asset = assetService.getAssetWebApp(sbStoreId, defaultWebApp, "/myFolder1/myFile1"); - checkAssetInfo(myFile1Asset, "myFile1", path+"/myFolder1/myFile1", USER_ONE, true, false, false, true, USER_ONE); - - props = assetService.getAssetProperties(myFile1Asset); - assertNotNull(props); - int countFileInbuiltProps = props.size(); - - assertEquals(USER_ONE, assetService.getLockOwner(myFile1Asset)); - - sbService.submitWebApp(sbStoreId, defaultWebApp, "submit1 label", "submit1 comment"); - - pollForSnapshotCount(stagingStoreId, 1); - - assertNull(assetService.getLockOwner(myFile1Asset)); - - // update (or set, if not already set) specific properties - eg. title and description - - Map newProps = new HashMap(2); - newProps.put(ContentModel.PROP_TITLE, "folder title"); - newProps.put(ContentModel.PROP_DESCRIPTION, "folder description"); - - assetService.updateAssetProperties(myFolder1Asset, newProps); - props = assetService.getAssetProperties(myFolder1Asset); - assertEquals((countFolderInbuiltProps+2), props.size()); - - assertEquals("folder title", props.get(ContentModel.PROP_TITLE)); - assertEquals("folder description", props.get(ContentModel.PROP_DESCRIPTION)); - - // set all (or replace existing) properties - eg. just title - - newProps = new HashMap(1); - newProps.put(ContentModel.PROP_TITLE, "folder title2"); - - assetService.setAssetProperties(myFolder1Asset, newProps); - props = assetService.getAssetProperties(myFolder1Asset); - assertEquals((countFolderInbuiltProps+1), props.size()); - - assertEquals("folder title2", props.get(ContentModel.PROP_TITLE)); - assertNull(props.get(ContentModel.PROP_DESCRIPTION)); - - // set all (or replace existing) properties - eg. title and description - - newProps = new HashMap(2); - newProps.put(ContentModel.PROP_TITLE, "file title"); - newProps.put(ContentModel.PROP_DESCRIPTION, "file description"); - - assetService.setAssetProperties(myFile1Asset, newProps); - props = assetService.getAssetProperties(myFile1Asset); - assertEquals((countFileInbuiltProps+2), props.size()); - - assertEquals("file title", props.get(ContentModel.PROP_TITLE)); - assertEquals("file description", props.get(ContentModel.PROP_DESCRIPTION)); - - assertEquals(USER_ONE, assetService.getLockOwner(myFile1Asset)); - } - - public void testAspects() - { - // create web project (also creates staging sandbox and admin's author sandbox) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-aspects", TEST_WEBPROJ_NAME+"-aspects", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - String defaultWebApp = wpInfo.getDefaultWebApp(); - - // invite web user and auto-create their (author) sandbox - wpService.inviteWebUser(wpInfo.getStoreId(), USER_ONE, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, true); - - // switch to user - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // get user's author sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); - String sbStoreId = sbInfo.getSandboxId(); - - String path = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - // create folder - assetService.createFolderWebApp(sbStoreId, defaultWebApp, "/", "myFolder1"); - AssetInfo myFolder1Asset = assetService.getAssetWebApp(sbStoreId, defaultWebApp, "/myFolder1"); - checkAssetInfo(myFolder1Asset, "myFolder1", path+"/myFolder1", USER_ONE, false, true, false, false, null); - - int folderAspectCnt = assetService.getAspects(myFolder1Asset).size(); - - // create file - assetService.createFileWebApp(sbStoreId, defaultWebApp, "/myFolder1", "myFile1"); - AssetInfo myFile1Asset = assetService.getAssetWebApp(sbStoreId, defaultWebApp, "/myFolder1/myFile1"); - checkAssetInfo(myFile1Asset, "myFile1", path+"/myFolder1/myFile1", USER_ONE, true, false, false, true, USER_ONE); - - int fileAspectCnt = assetService.getAspects(myFile1Asset).size(); - - // add/remove aspect to/from folder - - assertFalse(assetService.hasAspect(myFolder1Asset, ContentModel.ASPECT_TITLED)); - - Map newProps = new HashMap(2); - newProps.put(ContentModel.PROP_TITLE, "folder title"); - newProps.put(ContentModel.PROP_DESCRIPTION, "folder description"); - - assetService.addAspect(myFolder1Asset, ContentModel.ASPECT_TITLED, newProps); - - assertEquals(folderAspectCnt+1, assetService.getAspects(myFolder1Asset).size()); - assertTrue(assetService.hasAspect(myFolder1Asset, ContentModel.ASPECT_TITLED)); - - assetService.removeAspect(myFolder1Asset, ContentModel.ASPECT_TITLED); - - assertEquals(folderAspectCnt, assetService.getAspects(myFolder1Asset).size()); - assertFalse(assetService.hasAspect(myFolder1Asset, ContentModel.ASPECT_TITLED)); - - // add/remove aspect to/from file - - assertFalse(assetService.hasAspect(myFile1Asset, ContentModel.ASPECT_TITLED)); - - newProps = new HashMap(2); - newProps.put(ContentModel.PROP_TITLE, "file title"); - newProps.put(ContentModel.PROP_DESCRIPTION, "file description"); - - assetService.addAspect(myFile1Asset, ContentModel.ASPECT_TITLED, newProps); - - assertEquals(fileAspectCnt+1, assetService.getAspects(myFile1Asset).size()); - assertTrue(assetService.hasAspect(myFile1Asset, ContentModel.ASPECT_TITLED)); - - assetService.removeAspect(myFile1Asset, ContentModel.ASPECT_TITLED); - - assertEquals(fileAspectCnt, assetService.getAspects(myFile1Asset).size()); - assertFalse(assetService.hasAspect(myFile1Asset, ContentModel.ASPECT_TITLED)); - } - - - public void testSimpleLockFile() throws InterruptedException - { - // create web project (also creates staging sandbox and admin's author sandbox) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-simpleLock", TEST_WEBPROJ_NAME+"-simpleLock", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - String defaultWebApp = wpInfo.getDefaultWebApp(); - - // get staging sandbox id - String stagingStoreId = sbService.getStagingSandbox(wpInfo.getStoreId()).getSandboxId(); - - // invite web users and auto-create their (author) sandboxs - wpService.inviteWebUser(wpInfo.getStoreId(), USER_ONE, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, true); - wpService.inviteWebUser(wpInfo.getStoreId(), USER_TWO, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, true); - wpService.inviteWebUser(wpInfo.getStoreId(), USER_THREE, WCMUtil.ROLE_CONTENT_MANAGER, true); - - // switch to user one - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // get user's author sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); - String sbStoreId = sbInfo.getSandboxId(); - - String path = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - // create file - assetService.createFileWebApp(sbStoreId, defaultWebApp, "/", "myFile1"); - AssetInfo myFile1Asset = assetService.getAssetWebApp(sbStoreId, defaultWebApp, "myFile1"); - checkAssetInfo(myFile1Asset, "myFile1", path+"/myFile1", USER_ONE, true, false, false, true, USER_ONE); - - assertEquals(USER_ONE, assetService.getLockOwner(myFile1Asset)); - assertTrue(assetService.hasLockAccess(myFile1Asset)); - - // switch to user two - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - assertEquals(USER_ONE, assetService.getLockOwner(myFile1Asset)); - assertFalse(assetService.hasLockAccess(myFile1Asset)); - - // switch to user three - AuthenticationUtil.setFullyAuthenticatedUser(USER_THREE); - - assertEquals(USER_ONE, assetService.getLockOwner(myFile1Asset)); - assertTrue(assetService.hasLockAccess(myFile1Asset)); // content manager - - // switch to user one - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - sbService.submitWebApp(sbStoreId, defaultWebApp, "submit1 label", "submit1 comment"); - - pollForSnapshotCount(stagingStoreId, 1); - - assertNull(assetService.getLockOwner(myFile1Asset)); - assertTrue(assetService.hasLockAccess(myFile1Asset)); - - // switch to user two - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - assertNull(assetService.getLockOwner(myFile1Asset)); - assertTrue(assetService.hasLockAccess(myFile1Asset)); - } - - public void testSimpleLockFile2() throws InterruptedException - { - AuthenticationUtil.setFullyAuthenticatedUser(USER_ADMIN); - - // create web project (also creates staging sandbox and admin's author sandbox) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-partialSubmitWithNewFolder", TEST_WEBPROJ_NAME+"-partialSubmitWithNewFolder", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - String defaultWebApp = wpInfo.getDefaultWebApp(); - - // get staging sandbox id - String stagingStoreId = sbService.getStagingSandbox(wpInfo.getStoreId()).getSandboxId(); - - // get admin's sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); - String sbStoreId = sbInfo.getSandboxId(); - - String path = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - // create folder - assetService.createFolderWebApp(sbStoreId, defaultWebApp, "/", "myDir1"); - AssetInfo myDir1Asset = assetService.getAssetWebApp(sbStoreId, defaultWebApp, "myDir1"); - checkAssetInfo(myDir1Asset, "myDir1", path+"/myDir1", USER_ADMIN, false, true, false, false, null); - - // note: folders do not get locked - assertNull(assetService.getLockOwner(myDir1Asset)); - assertTrue(assetService.hasLockAccess(myDir1Asset)); - - // create two files - assetService.createFileWebApp(sbStoreId, defaultWebApp, "/myDir1", "myFile1"); - assetService.createFileWebApp(sbStoreId, defaultWebApp, "/myDir1", "myFile2"); - - AssetInfo myFile1Asset = assetService.getAssetWebApp(sbStoreId, defaultWebApp, "myDir1/myFile1"); - checkAssetInfo(myFile1Asset, "myFile1", path+"/myDir1/myFile1", USER_ADMIN, true, false, false, true, USER_ADMIN); - - assertEquals(USER_ADMIN, assetService.getLockOwner(myFile1Asset)); - assertTrue(assetService.hasLockAccess(myFile1Asset)); - - AssetInfo myFile2Asset = assetService.getAssetWebApp(sbStoreId, defaultWebApp, "myDir1/myFile2"); - checkAssetInfo(myFile2Asset, "myFile2", path+"/myDir1/myFile2", USER_ADMIN, true, false, false, true, USER_ADMIN); - - assertEquals(USER_ADMIN, assetService.getLockOwner(myFile2Asset)); - assertTrue(assetService.hasLockAccess(myFile2Asset)); - - List changedAssets = sbService.listChangedWebApp(sbStoreId, defaultWebApp, false); - assertEquals(1, changedAssets.size()); - myDir1Asset = changedAssets.get(0); - checkAssetInfo(myDir1Asset, "myDir1", path+"/myDir1", USER_ADMIN, false, true, false, false, null); - - List selectedAssetsToSubmit = new ArrayList(1); - selectedAssetsToSubmit.add(myFile1Asset); - - // partial submit with new folder - sbService.submitListAssets(sbStoreId, selectedAssetsToSubmit, "submit1 label", "submit1 comment"); - - pollForSnapshotCount(stagingStoreId, 1); - - changedAssets = sbService.listChangedWebApp(sbStoreId, defaultWebApp, false); - assertEquals(1, changedAssets.size()); - myFile2Asset = changedAssets.get(0); - - // ETWOTWO-1265 - checkAssetInfo(myFile2Asset, "myFile2", path+"/myDir1/myFile2", USER_ADMIN, true, false, false, true, USER_ADMIN); - assertEquals(USER_ADMIN, assetService.getLockOwner(myFile2Asset)); - assertTrue(assetService.hasLockAccess(myFile2Asset)); - } - - // bulk import and submit all - public void testImportAndSubmit1() throws InterruptedException - { - // create web project (also creates staging sandbox and admin's author sandbox) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-simpleImport", TEST_WEBPROJ_NAME+"-simpleImport", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - String defaultWebApp = wpInfo.getDefaultWebApp(); - - // get staging sandbox - SandboxInfo stagingInfo = sbService.getStagingSandbox(wpInfo.getStoreId()); - String stagingStoreId = stagingInfo.getSandboxId(); - - // invite web user and auto-create their (author) sandbox - wpService.inviteWebUser(wpInfo.getStoreId(), USER_ONE, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, true); - - assertEquals(0, sbService.listSnapshots(stagingStoreId, false).size()); - - // switch to user - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // get user's author sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); - String sbStoreId = sbInfo.getSandboxId(); - - String path = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - assertEquals(0, assetService.listAssets(stagingStoreId, path, false).size()); - assertEquals(0, assetService.listAssets(sbStoreId, path, false).size()); - - assertEquals(0, sbService.listChanged(sbStoreId, path, false).size()); - - // create folder - assetService.createFolder(sbStoreId, path, "myFolder1", null); - AssetInfo myFolder1Asset = assetService.getAsset(sbStoreId, path+"/myFolder1"); - - assertEquals(1, sbService.listChanged(sbStoreId, path, false).size()); - - assertEquals(0, assetService.listAssets(stagingStoreId, path, false).size()); - assertEquals(1, assetService.listAssets(sbStoreId, path, false).size()); - assertEquals(0, assetService.listAssets(sbStoreId, path+"/myFolder1", false).size()); - - // bulk import - String testFile = System.getProperty("user.dir") + "/source/test-resources/module/test.war"; - - File zipFile = new File(testFile); - assetService.bulkImport(sbStoreId, myFolder1Asset.getPath(), zipFile, false); - - assertEquals(0, assetService.listAssets(stagingStoreId, path, false).size()); - assertEquals(1, assetService.listAssets(sbStoreId, path, false).size()); - assertEquals(9, assetService.listAssets(sbStoreId, path+"/myFolder1", false).size()); - - assertEquals(1, sbService.listChanged(sbStoreId, path, false).size()); - - sbService.submitWebApp(sbStoreId, defaultWebApp, "s1", "s1"); - - pollForSnapshotCount(stagingStoreId, 1); - - assertEquals(1, assetService.listAssets(stagingStoreId, path, false).size()); - assertEquals(9, assetService.listAssets(stagingStoreId, path+"/myFolder1", false).size()); - assertEquals(1, assetService.listAssets(sbStoreId, path, false).size()); - assertEquals(9, assetService.listAssets(sbStoreId, path+"/myFolder1", false).size()); - - assertEquals(0, sbService.listChanged(sbStoreId, path, false).size()); - - // switch to admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - assertEquals(1, sbService.listSnapshots(stagingStoreId, false).size()); - } - - // bulk import and submit 1-by-1 - public void testImportAndSubmit2() throws InterruptedException - { - long start = System.currentTimeMillis(); - - // create web project (also creates staging sandbox and admin's author sandbox) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-import", TEST_WEBPROJ_NAME+"-import", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - - logger.debug("create web project in "+(System.currentTimeMillis()-start)+" msecs"); - - String defaultWebApp = wpInfo.getDefaultWebApp(); - - // get staging sandbox - SandboxInfo stagingInfo = sbService.getStagingSandbox(wpInfo.getStoreId()); - String stagingStoreId = stagingInfo.getSandboxId(); - - // get admin user's author sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); - String sbStoreId = sbInfo.getSandboxId(); - - String path = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - assertEquals(0, assetService.listAssets(stagingStoreId, path, false).size()); - assertEquals(0, assetService.listAssets(sbStoreId, path, false).size()); - - assertEquals(0, sbService.listSnapshots(stagingStoreId, false).size()); - - // bulk import - //String testFile = System.getProperty("user.dir") + "/source/test-resources/wcm/1001_files.zip"; - String testFile = System.getProperty("user.dir") + "/source/test-resources/module/test.war"; - - start = System.currentTimeMillis(); - - File zipFile = new File(testFile); - assetService.bulkImport(sbStoreId, path, zipFile, false); - - logger.debug("bulk import in "+(System.currentTimeMillis()-start)+" msecs"); - - int totalCnt = assetService.listAssets(sbStoreId, path, false).size(); - int expectedChangeCnt = totalCnt; - int expectedSnapCnt = 0; - int expectedStageCnt = 0; - - for (int i = 1; i <= totalCnt; i++) - { - assertEquals(expectedStageCnt, assetService.listAssets(stagingStoreId, path, false).size()); - assertEquals(totalCnt, assetService.listAssets(sbStoreId, path, false).size()); - - assertEquals(expectedSnapCnt, sbService.listSnapshots(stagingStoreId, false).size()); - - List assets = sbService.listChanged(sbStoreId, path, false); - assertEquals(expectedChangeCnt, assets.size()); - - List submitAssets = new ArrayList(1); - submitAssets.add(assets.get(0)); - - start = System.currentTimeMillis(); - - sbService.submitListAssets(sbStoreId, submitAssets, "s1", "s1"); - - logger.debug("initiated submit of item "+i+" in "+(System.currentTimeMillis()-start)+" msecs"); - - start = System.currentTimeMillis(); - - expectedSnapCnt++; - - pollForSnapshotCount(stagingStoreId, expectedSnapCnt); - - expectedChangeCnt--; - expectedStageCnt++; - } - } - - // ALF-1948 - public void testDeleteFile() throws Exception - { - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS + "-import", TEST_WEBPROJ_NAME + "-import", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, - TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - - String defaultWebApp = wpInfo.getDefaultWebApp(); - - SandboxInfo stagingInfo = sbService.getStagingSandbox(wpInfo.getStoreId()); - String stagingStoreId = stagingInfo.getSandboxId(); - - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); - String sbStoreId = sbInfo.getSandboxId(); - - String path = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - assetService.createFile(sbStoreId, path, "testfile.txt", null); - assetService.createFolder(sbStoreId, path, "testfolder", null); - - List listAssets = assetService.listAssets(stagingStoreId, path, true); - assertEquals(0, listAssets.size()); - - listAssets = assetService.listAssets(sbStoreId, path, true); - assertEquals(2, listAssets.size()); - - int validAmount = listAssets.size() - 1; - for (AssetInfo asset : listAssets) - { - assetService.deleteAsset(asset); - List tempAssetsList = assetService.listAssets(sbStoreId, path, true); - assertNotNull(tempAssetsList); - assertEquals(validAmount--, tempAssetsList.size()); - } - - List listChanged = sbService.listChanged(sbStoreId, path, true); - assertEquals(0, listChanged.size()); - } -} diff --git a/source/test-java/org/alfresco/wcm/preview/PreviewURIServiceImplTest.java b/source/test-java/org/alfresco/wcm/preview/PreviewURIServiceImplTest.java deleted file mode 100644 index ddf1dc9f0b..0000000000 --- a/source/test-java/org/alfresco/wcm/preview/PreviewURIServiceImplTest.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.wcm.preview; - -import java.text.MessageFormat; -import java.util.Map; - -import org.alfresco.wcm.AbstractWCMServiceImplTest; -import org.alfresco.wcm.webproject.WebProjectInfo; - -/** - * Preview URI Service implementation unit test - * - * @author janv - */ -public class PreviewURIServiceImplTest extends AbstractWCMServiceImplTest -{ - // - // services - // - private PreviewURIServiceRegistry previewURIServiceRegistry; - private PreviewURIService prevService; - - @Override - protected void setUp() throws Exception - { - super.setUp(); - - // Get the required services - previewURIServiceRegistry = (PreviewURIServiceRegistry)ctx.getBean("previewURIServiceRegistry"); - prevService = (PreviewURIService)ctx.getBean("WCMPreviewURIService"); - } - - @Override - protected void tearDown() throws Exception - { - super.tearDown(); - } - - public void testSetup() - { - Map prevURIServiceProviders = previewURIServiceRegistry.getPreviewURIServiceProviders(); - - System.out.println(prevURIServiceProviders.keySet()); - } - - public void testDefaultAndNOOP() - { - // Create a web project - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-previewSimple", TEST_WEBPROJ_NAME+"-previewSimple", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - assertNotNull(wpInfo); - - String stagingPreviewURL = prevService.getPreviewURI(wpInfo.getStagingStoreName(), null); - assertNotNull(stagingPreviewURL); - - String expectedURL = MessageFormat.format(VirtualisationServerPreviewURIService.PREVIEW_SANDBOX_URL, - wpInfo.getStoreId(), - VirtualisationServerPreviewURIService.DEFAULT_VSERVER_IP, - ""+VirtualisationServerPreviewURIService.DEFAULT_VSERVER_PORT); - - assertEquals(expectedURL, stagingPreviewURL); - - String nullProvName = null; - Map prevURIServiceProviders = previewURIServiceRegistry.getPreviewURIServiceProviders(); - for (Map.Entry entry : prevURIServiceProviders.entrySet()) - { - PreviewURIServiceProvider prov = entry.getValue(); - if (prov instanceof NullPreviewURIService) - { - nullProvName = entry.getKey(); - break; - } - } - assertNotNull(nullProvName); - - wpInfo.setPreviewProviderName(nullProvName); - wpService.updateWebProject(wpInfo); - - stagingPreviewURL = prevService.getPreviewURI(wpInfo.getStagingStoreName(), null); // fails - returns 2 ? - assertNull(stagingPreviewURL); - } -} diff --git a/source/test-java/org/alfresco/wcm/sandbox/SandboxServiceImplTest.java b/source/test-java/org/alfresco/wcm/sandbox/SandboxServiceImplTest.java deleted file mode 100644 index ea3a673c42..0000000000 --- a/source/test-java/org/alfresco/wcm/sandbox/SandboxServiceImplTest.java +++ /dev/null @@ -1,2849 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.wcm.sandbox; - -import java.io.IOException; -import java.io.InputStream; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.alfresco.config.JNDIConstants; -import org.alfresco.repo.action.ActionImpl; -import org.alfresco.repo.avm.AVMNodeConverter; -import org.alfresco.repo.avm.AVMNodeType; -import org.alfresco.repo.content.MimetypeMap; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.security.permissions.AccessDeniedException; -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; -import org.alfresco.service.cmr.avm.AVMNodeDescriptor; -import org.alfresco.service.cmr.avm.AVMService; -import org.alfresco.service.cmr.avmsync.AVMDifference; -import org.alfresco.service.cmr.repository.ContentReader; -import org.alfresco.service.cmr.repository.ContentWriter; -import org.alfresco.service.namespace.QName; -import org.alfresco.service.transaction.TransactionService; -import org.alfresco.util.GUID; -import org.alfresco.wcm.AbstractWCMServiceImplTest; -import org.alfresco.wcm.actions.WCMSandboxRevertSnapshotAction; -import org.alfresco.wcm.actions.WCMSandboxSubmitAction; -import org.alfresco.wcm.actions.WCMSandboxUndoAction; -import org.alfresco.wcm.asset.AssetInfo; -import org.alfresco.wcm.util.WCMUtil; -import org.alfresco.wcm.webproject.WebProjectInfo; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * Sandbox Service implementation unit test - * - * @author janv - */ -public class SandboxServiceImplTest extends AbstractWCMServiceImplTest -{ - private static Log logger = LogFactory.getLog(SandboxServiceImplTest.class); - - // base sandbox - private static final String TEST_SANDBOX = TEST_WEBPROJ_DNS+"-sandbox"; - - private static final int SCALE_USERS = 5; - private static final int SCALE_WEBPROJECTS = 2; - - // - // services - // - - private AVMService avmService; // non-locking-aware - - //private AVMService avmLockingAwareService; - //private AVMService avmNonLockingAwareService; - - - @Override - protected void setUp() throws Exception - { - super.setUp(); - - // Get the required services - avmService = (AVMService)ctx.getBean("AVMService"); - - // WCM locking - //avmLockingAwareService = (AVMService)ctx.getBean("AVMLockingAwareService"); - - // without WCM locking - //avmNonLockingAwareService = (AVMService)ctx.getBean("AVMService"); - } - - @Override - protected void tearDown() throws Exception - { - if (CLEAN) - { - // Switch back to Admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - deleteUser(USER_ONE); - deleteUser(USER_TWO); - deleteUser(USER_THREE); - deleteUser(USER_FOUR); - } - - super.tearDown(); - } - - public void testSimple() - { - int storeCnt = avmService.getStores().size(); - - // create web project (also creates staging sandbox and admin's author sandbox) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-sandboxSimple", TEST_WEBPROJ_NAME+"-sandboxSimple", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - String wpStoreId = wpInfo.getStoreId(); - - // list 2 sandboxes - assertEquals(2, sbService.listSandboxes(wpStoreId).size()); - - // list 4 extra AVM stores (2 per sandbox) - assertEquals(storeCnt+4, avmService.getStores().size()); // 2x stating (main,preview), 2x admin author (main, preview) - - // get admin's sandbox - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); - assertNotNull(sbInfo); - - // get staging sandbox - sbInfo = sbService.getStagingSandbox(wpStoreId); - assertNotNull(sbInfo); - - // invite user one to the web project and do not implicitly create user one's sandbox - wpService.inviteWebUser(wpStoreId, USER_ONE, WCMUtil.ROLE_CONTENT_PUBLISHER, false); - assertEquals(2, sbService.listSandboxes(wpStoreId).size()); - - sbInfo = sbService.createAuthorSandbox(wpStoreId, USER_TWO); - assertEquals(3, sbService.listSandboxes(wpStoreId).size()); - - sbInfo = sbService.getSandbox(sbInfo.getSandboxId()); - sbService.deleteSandbox(sbInfo.getSandboxId()); - assertEquals(2, sbService.listSandboxes(wpStoreId).size()); - - // delete admin's sandbox - sbService.deleteSandbox(sbService.getAuthorSandbox(wpStoreId).getSandboxId()); - assertEquals(1, sbService.listSandboxes(wpStoreId).size()); - - // delete web project (also deletes staging sandbox) - wpService.deleteWebProject(wpStoreId); - - assertEquals(storeCnt, avmService.getStores().size()); - } - - public void testCreateAuthorSandbox() - { - // Create a web project - WebProjectInfo wpInfo1 = wpService.createWebProject(TEST_SANDBOX+"-create-author", TEST_WEBPROJ_NAME+"-author", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_DONT_USE_AS_TEMPLATE, null); - - String expectedUserSandboxId = TEST_SANDBOX+"-create-author" + "--" + AuthenticationUtil.getAdminUserName(); - - SandboxInfo sbInfo1 = sbService.getAuthorSandbox(wpInfo1.getStoreId()); - checkSandboxInfo(sbInfo1, expectedUserSandboxId, AuthenticationUtil.getAdminUserName(), AuthenticationUtil.getAdminUserName(), expectedUserSandboxId, SandboxConstants.PROP_SANDBOX_AUTHOR_MAIN); - - sbInfo1 = sbService.getAuthorSandbox(wpInfo1.getStoreId(), USER_ONE); - assertNull(sbInfo1); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - sbInfo1 = sbService.getAuthorSandbox(wpInfo1.getStoreId()); - assertNull(sbInfo1); - - // Switch back to admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - // Invite web user - wpService.inviteWebUser(wpInfo1.getStoreId(), USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER); - - // Create author sandbox for user one - admin is the creator - sbInfo1 = sbService.createAuthorSandbox(wpInfo1.getStoreId(), USER_ONE); - - expectedUserSandboxId = TEST_SANDBOX+"-create-author" + "--" + USER_ONE; - - sbInfo1 = sbService.getAuthorSandbox(wpInfo1.getStoreId(), USER_ONE); - checkSandboxInfo(sbInfo1, expectedUserSandboxId, USER_ONE, AuthenticationUtil.getAdminUserName(), expectedUserSandboxId, SandboxConstants.PROP_SANDBOX_AUTHOR_MAIN); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // Get author sandbox - sbInfo1 = sbService.getAuthorSandbox(wpInfo1.getStoreId()); - checkSandboxInfo(sbInfo1, expectedUserSandboxId, USER_ONE, AuthenticationUtil.getAdminUserName(), expectedUserSandboxId, SandboxConstants.PROP_SANDBOX_AUTHOR_MAIN); - - String userSandboxId = sbInfo1.getSandboxId(); - - // Get (author) sandbox - sbInfo1 = sbService.getSandbox(userSandboxId); - checkSandboxInfo(sbInfo1, expectedUserSandboxId, USER_ONE, AuthenticationUtil.getAdminUserName(), expectedUserSandboxId, SandboxConstants.PROP_SANDBOX_AUTHOR_MAIN); - - // Should return same as before - sbInfo1 = sbService.createAuthorSandbox(wpInfo1.getStoreId()); - checkSandboxInfo(sbInfo1, expectedUserSandboxId, USER_ONE, AuthenticationUtil.getAdminUserName(), expectedUserSandboxId, SandboxConstants.PROP_SANDBOX_AUTHOR_MAIN); - - // Switch to USER_TWO - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - try - { - // Try to create author sandbox as a non-web user (-ve test) - sbService.createAuthorSandbox(wpInfo1.getStoreId()); // ignore return - fail("Shouldn't be able to create author store since not a web user"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Switch back to admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - // Invite web user - wpService.inviteWebUser(wpInfo1.getStoreId(), USER_TWO, WCMUtil.ROLE_CONTENT_REVIEWER); - - // Switch to USER_TWO - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - // Get author sandbox - sbInfo1 = sbService.getAuthorSandbox(wpInfo1.getStoreId()); - assertNull(sbInfo1); - - expectedUserSandboxId = TEST_SANDBOX+"-create-author" + "--" + USER_TWO; - - // Create own sandbox - user two is the creator - sbInfo1 = sbService.createAuthorSandbox(wpInfo1.getStoreId()); - checkSandboxInfo(sbInfo1, expectedUserSandboxId, USER_TWO, USER_TWO, expectedUserSandboxId, SandboxConstants.PROP_SANDBOX_AUTHOR_MAIN); - } - - private void checkSandboxInfo(SandboxInfo sbInfo, String expectedStoreId, String expectedName, String expectedCreator, String expectedMainStoreName, QName expectedSandboxType) - { - assertNotNull(sbInfo); - assertEquals(expectedStoreId, sbInfo.getSandboxId()); - assertEquals(expectedName, sbInfo.getName()); - assertEquals(expectedCreator, sbInfo.getCreator()); - assertNotNull(sbInfo.getCreatedDate()); - assertEquals(expectedMainStoreName, sbInfo.getMainStoreName()); - assertEquals(expectedSandboxType, sbInfo.getSandboxType()); - } - - public void testListSandboxes() throws Exception - { - // Create web project - implicitly creates staging sandbox and also author sandbox for web project creator (in this case, admin) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-list", TEST_WEBPROJ_NAME+" list", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - String wpStoreId = wpInfo.getStoreId(); - - // Create ANOther web project - WebProjectInfo wpAnoInfo = wpService.createWebProject(TEST_SANDBOX+"-list ano", TEST_WEBPROJ_NAME+" list ano", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - String wpStoreAnoId = wpAnoInfo.getStoreId(); - - List sbInfos = sbService.listSandboxes(wpStoreId); - assertEquals(2, sbInfos.size()); // staging sandbox, author sandbox (for admin) - - assertEquals(2, sbService.listSandboxes(wpStoreAnoId).size()); - - String expectedUserSandboxId = TEST_SANDBOX+"-list" + "--" + AuthenticationUtil.getAdminUserName(); - - // Do detailed check of the sandbox info objects - for (SandboxInfo sbInfo : sbInfos) - { - QName sbType = sbInfo.getSandboxType(); - - if (sbType.equals(SandboxConstants.PROP_SANDBOX_STAGING_MAIN) == true) - { - checkSandboxInfo(sbInfo, TEST_SANDBOX+"-list", TEST_SANDBOX+"-list", AuthenticationUtil.getAdminUserName(), TEST_SANDBOX+"-list", SandboxConstants.PROP_SANDBOX_STAGING_MAIN); - } - else if (sbType.equals(SandboxConstants.PROP_SANDBOX_AUTHOR_MAIN) == true) - { - checkSandboxInfo(sbInfo, expectedUserSandboxId, AuthenticationUtil.getAdminUserName(), AuthenticationUtil.getAdminUserName(), expectedUserSandboxId, SandboxConstants.PROP_SANDBOX_AUTHOR_MAIN); - } - else - { - fail("The sandbox store id " + sbInfo.getSandboxId() + " is not recognised"); - } - } - - // test roles - - // Invite web users - wpService.inviteWebUser(wpStoreId, USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER, true); - wpService.inviteWebUser(wpStoreId, USER_TWO, WCMUtil.ROLE_CONTENT_PUBLISHER, true); - wpService.inviteWebUser(wpStoreId, USER_THREE, WCMUtil.ROLE_CONTENT_REVIEWER, true); - wpService.inviteWebUser(wpStoreId, USER_FOUR, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, true); - - // admin can list all sandboxes - sbInfos = sbService.listSandboxes(wpInfo.getStoreId()); - assertEquals(6, sbInfos.size()); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // content manager can list all sandboxes - sbInfos = sbService.listSandboxes(wpInfo.getStoreId()); - assertEquals(6, sbInfos.size()); - - // Switch to USER_TWO - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - // Content publisher - can list all sandboxes - sbInfos = sbService.listSandboxes(wpInfo.getStoreId()); - assertEquals(6, sbInfos.size()); - - // Switch to USER_THREE - AuthenticationUtil.setFullyAuthenticatedUser(USER_THREE); - - // Content reviewer - can only list own sandbox and staging - sbInfos = sbService.listSandboxes(wpInfo.getStoreId()); - assertEquals(2, sbInfos.size()); - - // Switch to USER_FOUR - AuthenticationUtil.setFullyAuthenticatedUser(USER_FOUR); - - // Content contributor - can only list own sandbox and staging - sbInfos = sbService.listSandboxes(wpInfo.getStoreId()); - assertEquals(2, sbInfos.size()); - } - - public void testGetSandbox() - { - // Get a sandbox that isn't there - SandboxInfo sbInfo = sbService.getSandbox(TEST_SANDBOX+"-get"); - assertNull(sbInfo); - - // Create web project - implicitly creates staging sandbox and also admin sandbox (author sandbox for web project creator) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-get", TEST_WEBPROJ_NAME+" get", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - String wpStoreId = wpInfo.getStoreId(); - - // Get staging sandbox - sbInfo = sbService.getStagingSandbox(wpInfo.getStoreId()); - checkSandboxInfo(sbInfo, TEST_SANDBOX+"-get", TEST_SANDBOX+"-get", AuthenticationUtil.getAdminUserName(), TEST_SANDBOX+"-get", SandboxConstants.PROP_SANDBOX_STAGING_MAIN); - - // Get (staging) sandbox - String stagingSandboxId = wpInfo.getStagingStoreName(); - sbInfo = sbService.getSandbox(stagingSandboxId); - checkSandboxInfo(sbInfo, TEST_SANDBOX+"-get", TEST_SANDBOX+"-get", AuthenticationUtil.getAdminUserName(), TEST_SANDBOX+"-get", SandboxConstants.PROP_SANDBOX_STAGING_MAIN); - - // Get (author) sandbox - sbInfo = sbService.getAuthorSandbox(wpStoreId); - sbInfo = sbService.getSandbox(sbInfo.getSandboxId()); - String userSandboxId = TEST_SANDBOX+"-get" + "--" + AuthenticationUtil.getAdminUserName(); - checkSandboxInfo(sbInfo, userSandboxId, AuthenticationUtil.getAdminUserName(), AuthenticationUtil.getAdminUserName(), userSandboxId, SandboxConstants.PROP_SANDBOX_AUTHOR_MAIN); - - // test roles - - // Invite web users - wpService.inviteWebUser(wpStoreId, USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER, true); - wpService.inviteWebUser(wpStoreId, USER_TWO, WCMUtil.ROLE_CONTENT_PUBLISHER, true); - wpService.inviteWebUser(wpStoreId, USER_THREE, WCMUtil.ROLE_CONTENT_REVIEWER, true); - wpService.inviteWebUser(wpStoreId, USER_FOUR, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, true); - - // admin can get any sandbox - userSandboxId = TEST_SANDBOX+"-get" + "--" + USER_THREE; - sbInfo = sbService.getSandbox(userSandboxId); - checkSandboxInfo(sbInfo, userSandboxId, USER_THREE, AuthenticationUtil.getAdminUserName(), userSandboxId, SandboxConstants.PROP_SANDBOX_AUTHOR_MAIN); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // content manager can get any (author) sandbox - userSandboxId = TEST_SANDBOX+"-get" + "--" + USER_THREE; - sbInfo = sbService.getSandbox(userSandboxId); - checkSandboxInfo(sbInfo, userSandboxId, USER_THREE, AuthenticationUtil.getAdminUserName(), userSandboxId, SandboxConstants.PROP_SANDBOX_AUTHOR_MAIN); - - // Switch to USER_TWO - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - // content publisher can get any (author) sandbox - userSandboxId = TEST_SANDBOX+"-get" + "--" + USER_THREE; - sbInfo = sbService.getSandbox(userSandboxId); - checkSandboxInfo(sbInfo, userSandboxId, USER_THREE, AuthenticationUtil.getAdminUserName(), userSandboxId, SandboxConstants.PROP_SANDBOX_AUTHOR_MAIN); - - // Switch to USER_THREE - AuthenticationUtil.setFullyAuthenticatedUser(USER_THREE); - - try - { - // Content reviewer - try to get another user's sandbox (-ve test) - userSandboxId = TEST_SANDBOX+"-get" + "--" + USER_TWO; - sbInfo = sbService.getSandbox(userSandboxId); - fail("Shouldn't be able to get another author's sandbox"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Switch to USER_FOUR - AuthenticationUtil.setFullyAuthenticatedUser(USER_FOUR); - - try - { - // Content contributor - try to get another user's sandbox (-ve test) - userSandboxId = TEST_SANDBOX+"-get" + "--" + USER_THREE; - sbInfo = sbService.getSandbox(userSandboxId); - fail("Shouldn't be able to get another author's sandbox"); - } - catch (AccessDeniedException exception) - { - // Expected - } - } - - public void testIsSandboxType() - { - // Get a sandbox that isn't there - SandboxInfo sbInfo = sbService.getSandbox(TEST_SANDBOX+"-is"); - assertNull(sbInfo); - - // Create web project - implicitly creates staging sandbox and also admin sandbox (author sandbox for web project creator) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-is", TEST_WEBPROJ_NAME+" is", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - - // Get staging sandbox - sbInfo = sbService.getStagingSandbox(wpInfo.getStoreId()); - - assertTrue(sbService.isSandboxType(sbInfo.getSandboxId(), SandboxConstants.PROP_SANDBOX_STAGING_MAIN)); - assertFalse(sbService.isSandboxType(sbInfo.getSandboxId(), SandboxConstants.PROP_SANDBOX_AUTHOR_MAIN)); - - // Get author sandbox - sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId()); - - assertTrue(sbService.isSandboxType(sbInfo.getSandboxId(), SandboxConstants.PROP_SANDBOX_AUTHOR_MAIN)); - assertFalse(sbService.isSandboxType(sbInfo.getSandboxId(), SandboxConstants.PROP_SANDBOX_STAGING_MAIN)); - } - - public void testDeleteSandbox() - { - // Create web project - implicitly creates staging sandbox and also admin sandbox (author sandbox for web project creator) - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-delete", TEST_WEBPROJ_NAME+" delete", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - String wpStoreId = wpInfo.getStoreId(); - - // Create ANOther web project - WebProjectInfo wpAnoInfo = wpService.createWebProject(TEST_SANDBOX+"-delete ano", TEST_WEBPROJ_NAME+" delete ano", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - String wpStoreAnoId = wpAnoInfo.getStoreId(); - - assertEquals(2, sbService.listSandboxes(wpStoreId).size()); - assertEquals(2, sbService.listSandboxes(wpStoreAnoId).size()); - - // Get staging sandbox - SandboxInfo sbInfo = sbService.getStagingSandbox(wpStoreId); - - try - { - // Try to delete staging sandbox (-ve test) - sbService.deleteSandbox(sbInfo.getSandboxId()); - fail("Shouldn't be able to delete staging sandbox"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - try - { - // Try to delete non-existant sandbox (-ve test) - sbService.deleteSandbox("some-random-staging-sandbox"); - fail("Shouldn't be able to delete non-existant sandbox"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Get admin author sandbox - sbInfo = sbService.getAuthorSandbox(wpStoreId); - sbService.deleteSandbox(sbInfo.getSandboxId()); - - assertEquals(1, sbService.listSandboxes(wpStoreId).size()); - assertEquals(2, sbService.listSandboxes(wpStoreAnoId).size()); - - // Invite web users - wpService.inviteWebUser(wpStoreId, USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER); - wpService.inviteWebUser(wpStoreId, USER_TWO, WCMUtil.ROLE_CONTENT_PUBLISHER); - wpService.inviteWebUser(wpStoreId, USER_THREE, WCMUtil.ROLE_CONTENT_REVIEWER, true); - - assertEquals(2, sbService.listSandboxes(wpStoreId).size()); - - sbService.createAuthorSandbox(wpStoreId, USER_ONE); - sbService.createAuthorSandbox(wpStoreId, USER_TWO); - - assertEquals(4, sbService.listSandboxes(wpStoreId).size()); - - // Switch to USER_TWO - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - assertEquals(4, sbService.listSandboxes(wpStoreId).size()); - - sbInfo = sbService.getAuthorSandbox(wpStoreId); - assertNotNull(sbInfo); - - String defaultWebApp = wpInfo.getDefaultWebApp(); - String authorSandboxId = sbInfo.getSandboxId(); - String authorSandboxPath = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - for (int i = 1; i <= 10; i++) - { - assetService.createFile(authorSandboxId, authorSandboxPath, "myFile-"+i, null); - - String relPath = authorSandboxPath + "/" + "myFile-"+i; - assertEquals(USER_TWO, avmLockingService.getLockOwner(wpStoreId, relPath)); - } - - // can delete own sandbox - sbService.deleteSandbox(sbInfo.getSandboxId()); - assertNull(sbService.getSandbox(sbInfo.getSandboxId())); - - // Check locks have been removed - for (int i = 1; i <= 10; i++) - { - String relPath = authorSandboxPath + "/" + "myFile-"+i; - assertNull("Lock still exists: "+relPath, avmLockingService.getLockOwner(wpStoreId, relPath)); - } - - assertEquals(3, sbService.listSandboxes(wpStoreId).size()); - - sbInfo = sbService.getAuthorSandbox(wpStoreId); - assertNull(sbInfo); - - // but not others - try - { - // Try to delete another author's sandbox as a non-content manager (-ve test) - sbService.deleteSandbox(wpInfo.getStoreId()+"--"+USER_THREE); - fail("Shouldn't be able to delete another author's sandbox"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - assertEquals(3, sbService.listSandboxes(wpStoreId).size()); - - // content manager can delete others - sbInfo = sbService.getAuthorSandbox(wpStoreId, USER_THREE); - sbService.deleteSandbox(sbInfo.getSandboxId()); - - assertEquals(2, sbService.listSandboxes(wpStoreId).size()); - } - - // list changed (in this test, new) assets in user sandbox compared to staging sandbox - public void testListNewItems1() - { - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-listNewItems1", TEST_WEBPROJ_NAME+" listNewItems1", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - String wpStoreId = wpInfo.getStoreId(); - - assertEquals(2, sbService.listSandboxes(wpStoreId).size()); - - // add web app (in addition to default ROOT web app) - String myWebApp = "myWebApp"; - wpService.createWebApp(wpStoreId, myWebApp, "this is my web app"); - - // Invite web users - wpService.inviteWebUser(wpStoreId, USER_ONE, WCMUtil.ROLE_CONTENT_CONTRIBUTOR); - SandboxInfo sbInfo = sbService.createAuthorSandbox(wpStoreId, USER_ONE); - String userOneSandboxId = sbInfo.getSandboxId(); - - wpService.inviteWebUser(wpStoreId, USER_TWO, WCMUtil.ROLE_CONTENT_PUBLISHER); - sbInfo = sbService.createAuthorSandbox(wpStoreId, USER_TWO); - String userTwoSandboxId = sbInfo.getSandboxId(); - - wpService.inviteWebUser(wpStoreId, USER_THREE, WCMUtil.ROLE_CONTENT_MANAGER); - sbService.createAuthorSandbox(wpStoreId, USER_THREE); - - wpService.inviteWebUser(wpStoreId, USER_FOUR, WCMUtil.ROLE_CONTENT_REVIEWER, true); - - assertEquals(6, sbService.listSandboxes(wpStoreId).size()); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - assertEquals(2, sbService.listSandboxes(wpStoreId).size()); - - sbInfo = sbService.getAuthorSandbox(wpStoreId); - String sbStoreId = sbInfo.getSandboxId(); - - // no changes yet - List assets = sbService.listChangedAll(sbStoreId, true); - assertEquals(0, assets.size()); - - String authorSandboxMyWebAppRelativePath = sbInfo.getSandboxRootPath() + "/" + myWebApp; // in this case, my web app is 'myWebApp' - String authorSandboxDefaultWebAppRelativePath = sbInfo.getSandboxRootPath() + "/" + wpInfo.getDefaultWebApp(); // in this case, default web app is 'ROOT' - - assetService.createFile(sbStoreId, authorSandboxMyWebAppRelativePath, "myFile1", null); - - assets = sbService.listChangedAll(sbStoreId, false); - assertEquals(1, assets.size()); - assertEquals("myFile1", assets.get(0).getName()); - - assetService.createFolder(sbStoreId, authorSandboxDefaultWebAppRelativePath, "myDir1", null); - assetService.createFile(sbStoreId, authorSandboxDefaultWebAppRelativePath+"/myDir1", "myFile2", null); - assetService.createFolder(sbStoreId, authorSandboxDefaultWebAppRelativePath+"/myDir1", "myDir2", null); - assetService.createFile(sbStoreId, authorSandboxDefaultWebAppRelativePath+"/myDir1/myDir2", "myFile3", null); - assetService.createFile(sbStoreId, authorSandboxDefaultWebAppRelativePath+"/myDir1/myDir2", "myFile4", null); - assetService.createFolder(sbStoreId, authorSandboxDefaultWebAppRelativePath+"/myDir1", "myDir3", null); - - assets = sbService.listChangedAll(sbStoreId, false); - assertEquals(2, assets.size()); // new dir with new dirs/files is returned as single change - - for (AssetInfo asset : assets) - { - if (asset.getName().equals("myFile1") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("myDir1") && asset.isFolder()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - - assets = sbService.listChangedWebApp(sbStoreId, wpInfo.getDefaultWebApp(), false); - assertEquals(1, assets.size()); - - for (AssetInfo asset : assets) - { - if (asset.getName().equals("myDir1") && asset.isFolder()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - - assets = sbService.listChanged(sbStoreId, authorSandboxDefaultWebAppRelativePath+"/myDir1", false); - assertEquals(1, assets.size()); - - for (AssetInfo asset : assets) - { - if (asset.getName().equals("myDir1") && asset.isFolder()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - - // test roles - - // Switch to AuthenticationUtil.getAdminUserName() - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - assertEquals(6, sbService.listSandboxes(wpStoreId).size()); - - // admin (Content Manager) should be able to list another user's changes - assets = sbService.listChangedAll(userOneSandboxId, true); - assertEquals(2, assets.size()); - - // Switch to USER_THREE - AuthenticationUtil.setFullyAuthenticatedUser(USER_THREE); - - assertEquals(6, sbService.listSandboxes(wpStoreId).size()); - - // Content Manager should be able to list another user's changes - assets = sbService.listChangedAll(userOneSandboxId, true); - assertEquals(2, assets.size()); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - try - { - // Content contributor - try to list changes in another user's sandbox (-ve test) - assets = sbService.listChangedAll(userTwoSandboxId, true); - fail("Shouldn't be able to list another author's sandbox changes"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Switch to USER_TWO - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - // Content Publisher should be able to list another user's changes - assets = sbService.listChangedAll(userOneSandboxId, true); - assertEquals(2, assets.size()); - - // Switch to USER_FOUR - AuthenticationUtil.setFullyAuthenticatedUser(USER_FOUR); - - try - { - // Content reviewer - try to list changes in another user's sandbox (-ve test) - assets = sbService.listChangedAll(userOneSandboxId, true); - fail("Shouldn't be able to list another author's sandbox changes"); - } - catch (AccessDeniedException exception) - { - // Expected - } - } - - // list changed (in this test, new) assets in two different user sandboxes compared to each other - public void testListNewItems2() - { - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-listNewItems2", TEST_WEBPROJ_NAME+" listNewItems2", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - String wpStoreId = wpInfo.getStoreId(); - - // Invite web users - wpService.inviteWebUser(wpStoreId, USER_ONE, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, true); - wpService.inviteWebUser(wpStoreId, USER_TWO, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, true); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - SandboxInfo sbInfo1 = sbService.getAuthorSandbox(wpStoreId); - String sbStoreId = sbInfo1.getSandboxId(); - - List assets = sbService.listChangedAll(sbStoreId, true); - assertEquals(0, assets.size()); - - assetService.createFile(sbStoreId, sbInfo1.getSandboxRootPath(), "myFile1", null); - - assets = sbService.listChangedAll(sbStoreId, false); - assertEquals(1, assets.size()); - assertEquals("myFile1", assets.get(0).getName()); - - // Switch to USER_TWO - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - SandboxInfo sbInfo2 = sbService.getAuthorSandbox(wpStoreId); - sbStoreId = sbInfo2.getSandboxId(); - - assets = sbService.listChangedAll(sbStoreId, true); - assertEquals(0, assets.size()); - - assetService.createFile(sbStoreId, sbInfo2.getSandboxRootPath(), "myFile2", null); - assetService.createFile(sbStoreId, sbInfo2.getSandboxRootPath(), "myFile3", null); - - assets = sbService.listChangedAll(sbStoreId, false); - assertEquals(2, assets.size()); - - for (AssetInfo asset : assets) - { - if (asset.getName().equals("myFile2") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("myFile3") && asset.isFile()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - - // Switch back to admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - sbInfo1 = sbService.getAuthorSandbox(wpStoreId, USER_ONE); - sbInfo2 = sbService.getAuthorSandbox(wpStoreId, USER_TWO); - - assets = sbService.listChanged(sbInfo1.getSandboxId(), sbInfo1.getSandboxRootPath(), sbInfo2.getSandboxId(), sbInfo2.getSandboxRootPath(), false); - assertEquals(1, assets.size()); - assertEquals("myFile1", assets.get(0).getName()); - - assets = sbService.listChanged(sbInfo2.getSandboxId(), sbInfo2.getSandboxRootPath(), sbInfo1.getSandboxId(), sbInfo1.getSandboxRootPath(), false); - assertEquals(2, assets.size()); - - for (AssetInfo asset : assets) - { - if (asset.getName().equals("myFile2") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("myFile3") && asset.isFile()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - } - - /* - // list changed (in this test, new) assets in two different user sandboxes compared to each other - without locking - public void testListNewItems3() - { - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-listNewItems2", TEST_WEBPROJ_NAME+" listNewItems2", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - String wpStoreId = wpInfo.getStoreId(); - - // Invite web users - wpService.inviteWebUser(wpStoreId, USER_ONE, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, true); - wpService.inviteWebUser(wpStoreId, USER_TWO, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, true); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - SandboxInfo sbInfo1 = sbService.getAuthorSandbox(wpStoreId); - String sbStoreId = sbInfo1.getSandboxId(); - - List assets = sbService.listChangedAll(sbStoreId, true); - assertEquals(0, assets.size()); - - String authorSandboxRootPath = sbStoreId + AVM_STORE_SEPARATOR + sbInfo1.getSandboxRootPath(); - - avmNonLockingAwareService.createFile(authorSandboxRootPath, "myFile1"); - - assets = sbService.listChangedAll(sbStoreId, false); - assertEquals(1, assets.size()); - assertEquals("myFile1", assets.get(0).getName()); - - // Switch to USER_TWO - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - SandboxInfo sbInfo2 = sbService.getAuthorSandbox(wpStoreId); - sbStoreId = sbInfo2.getSandboxId(); - - assets = sbService.listChangedAll(sbStoreId, true); - assertEquals(0, assets.size()); - - authorSandboxRootPath = sbStoreId + AVM_STORE_SEPARATOR + sbInfo2.getSandboxRootPath(); - - avmNonLockingAwareService.createFile(authorSandboxRootPath, "myFile1"); // allowed, since using base (non-locking-aware) AVM service - avmNonLockingAwareService.createFile(authorSandboxRootPath, "myFile2"); - avmNonLockingAwareService.createFile(authorSandboxRootPath, "myFile3"); - - assets = sbService.listChangedAll(sbStoreId, false); - assertEquals(3, assets.size()); - - for (AssetInfo asset : assets) - { - if (asset.getName().equals("myFile1") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("myFile2") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("myFile3") && asset.isFile()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - - // Switch back to admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - sbInfo1 = sbService.getAuthorSandbox(wpStoreId, USER_ONE); - sbInfo2 = sbService.getAuthorSandbox(wpStoreId, USER_TWO); - - assets = sbService.listChanged(sbInfo1.getSandboxId(), sbInfo1.getSandboxRootPath(), sbInfo2.getSandboxId(), sbInfo2.getSandboxRootPath(), false); - assertEquals(1, assets.size()); - assertEquals("myFile1", assets.get(0).getName()); - - assets = sbService.listChanged(sbInfo2.getSandboxId(), sbInfo1.getSandboxRootPath(), sbInfo1.getSandboxId(), sbInfo2.getSandboxRootPath(), false); - assertEquals(3, assets.size()); - - for (AssetInfo asset : assets) - { - if (asset.getName().equals("myFile1") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("myFile2") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("myFile3") && asset.isFile()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - } - */ - - // submit new assets in user sandbox to staging sandbox - public void testSubmitNewItems1() throws InterruptedException - { - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-submitNewItems1", TEST_WEBPROJ_NAME+" submitNewItems1", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - - String wpStoreId = wpInfo.getStoreId(); - String webApp = wpInfo.getDefaultWebApp(); - String stagingSandboxId = wpInfo.getStagingStoreName(); - - // Invite web users - wpService.inviteWebUser(wpStoreId, USER_ONE, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, true); - wpService.inviteWebUser(wpStoreId, USER_TWO, WCMUtil.ROLE_CONTENT_PUBLISHER, true); - wpService.inviteWebUser(wpStoreId, USER_THREE, WCMUtil.ROLE_CONTENT_MANAGER, true); - wpService.inviteWebUser(wpStoreId, USER_FOUR, WCMUtil.ROLE_CONTENT_REVIEWER, true); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); - String authorSandboxId = sbInfo.getSandboxId(); - - // no changes yet - List assets = sbService.listChangedAll(authorSandboxId, true); - assertEquals(0, assets.size()); - - String authorSandboxPath = sbInfo.getSandboxRootPath() + "/" + webApp; - - assetService.createFile(authorSandboxId, authorSandboxPath, "myFile1", null); - assetService.createFolder(authorSandboxId, authorSandboxPath, "myDir1", null); - assetService.createFile(authorSandboxId, authorSandboxPath+"/myDir1", "myFile2", null); - assetService.createFolder(authorSandboxId, authorSandboxPath+"/myDir1", "myDir2", null); - assetService.createFile(authorSandboxId, authorSandboxPath+"/myDir1/myDir2", "myFile3", null); - assetService.createFile(authorSandboxId, authorSandboxPath+"/myDir1/myDir2", "myFile4", null); - assetService.createFolder(authorSandboxId, authorSandboxPath+"/myDir1", "myDir3", null); - - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(2, assets.size()); // new dir with new dirs/files is returned as single change - - // check staging before - String stagingSandboxPath = sbInfo.getSandboxRootPath() + "/" + webApp; - assertEquals(0, assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false).size()); - - // submit (new assets) ! - sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - - pollForSnapshotCount(stagingSandboxId, 1); - - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(0, assets.size()); - - // check staging after - List listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); - assertEquals(2, listing.size()); - - for (AssetInfo asset : listing) - { - if (asset.getName().equals("myFile1") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("myDir1") && asset.isFolder()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - - // test roles - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - // admin (content manager) can submit any sandbox - String userSandboxId = wpStoreId + "--" + USER_THREE; - sbService.submitAll(userSandboxId, "my submit", null); - - // Switch to USER_THREE - AuthenticationUtil.setFullyAuthenticatedUser(USER_THREE); - - // content manager can submit any (author) sandbox - userSandboxId = wpStoreId + "--" + USER_ONE; - sbService.submitAll(userSandboxId, "my submit", null); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - try - { - // Content contributor - try to submit another user's sandbox (-ve test) - userSandboxId = wpStoreId + "--" + USER_THREE; - List noAssets = new ArrayList(0); - sbService.submitListAssets(userSandboxId, noAssets, "my submit", null); - fail("Shouldn't be able to submit another author's sandbox"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Switch to USER_TWO - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - // Content publisher - can submit other sandboxes (eg. submit all) - userSandboxId = wpStoreId + "--" + USER_ONE; - sbService.submitAll(userSandboxId, "my submit", null); - - // Switch to USER_FOUR - AuthenticationUtil.setFullyAuthenticatedUser(USER_FOUR); - - try - { - // Content reviewer - try to submit another user's sandbox (-ve test) - userSandboxId = TEST_SANDBOX+"-get" + "--" + USER_THREE; - sbService.submitAll(userSandboxId, "my submit", null); - fail("Shouldn't be able to submit another author's sandbox"); - } - catch (AccessDeniedException exception) - { - // Expected - } - } - - // submit changed assets in user sandbox to staging sandbox - public void xtestSubmitChangedAssets1() throws IOException, InterruptedException - { - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-submitChangedAssets1", TEST_WEBPROJ_NAME+" submitChangedAssets1", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - - final String wpStoreId = wpInfo.getStoreId(); - final String webApp = wpInfo.getDefaultWebApp(); - final String stagingSandboxId = wpInfo.getStagingStoreName(); - - // Invite web users - - wpService.inviteWebUser(wpStoreId, USER_ONE, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, true); - wpService.inviteWebUser(wpStoreId, USER_TWO, WCMUtil.ROLE_CONTENT_PUBLISHER, true); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); - String authorSandboxId = sbInfo.getSandboxId(); - - // no changes yet - List assets = sbService.listChangedAll(authorSandboxId, true); - assertEquals(0, assets.size()); - - final String MYFILE1 = "This is myFile1"; - ContentWriter writer = assetService.createFileWebApp(authorSandboxId, webApp, "/", "myFile1"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE1); - - assetService.createFolderWebApp(authorSandboxId, webApp, "/", "myDir1"); - - final String MYFILE2 = "This is myFile2"; - writer = assetService.createFileWebApp(authorSandboxId, webApp, "/myDir1", "myFile2"); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE2); - - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(2, assets.size()); - - // check staging before - String stagingSandboxPath = sbInfo.getSandboxRootPath() + "/" + webApp; - assertEquals(0, assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false).size()); - - // submit (new assets) ! - sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - - pollForSnapshotCount(stagingSandboxId, 1); - - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(0, assets.size()); - - // check staging after - List listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); - assertEquals(2, listing.size()); - - // Switch to USER_TWO - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - sbInfo = sbService.getAuthorSandbox(wpStoreId); - authorSandboxId = sbInfo.getSandboxId(); - - // no changes yet - assets = sbService.listChangedAll(authorSandboxId, true); - assertEquals(0, assets.size()); - - final String MYFILE1_MODIFIED = "This is myFile1 ... modified by "+USER_TWO; - - writer = assetService.getContentWriter(assetService.getAssetWebApp(authorSandboxId, webApp, "/myFile1")); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE1_MODIFIED); - - final String MYFILE2_MODIFIED = "This is myFile2 ... modified by "+USER_TWO; - writer = assetService.getContentWriter(assetService.getAssetWebApp(authorSandboxId, webApp, "/myDir1/myFile2")); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE2_MODIFIED); - - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(2, assets.size()); - - // check staging before - stagingSandboxPath = sbInfo.getSandboxRootPath() + "/" + webApp; - - ContentReader reader = assetService.getContentReader(assetService.getAsset(stagingSandboxId, -1, stagingSandboxPath+"/myFile1", false)); - InputStream in = reader.getContentInputStream(); - byte[] buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(MYFILE1, new String(buff, 0, MYFILE1.length())); // assumes 1byte=1char - - reader = assetService.getContentReader(assetService.getAsset(stagingSandboxId, -1, stagingSandboxPath+"/myDir1/myFile2", false)); - in = reader.getContentInputStream(); - buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(MYFILE2, new String(buff, 0, MYFILE2.length())); - - // submit (modified assets) ! - sbService.submitWebApp(authorSandboxId, webApp, "my label", null); - - pollForSnapshotCount(stagingSandboxId, 2); - - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(0, assets.size()); - - // check staging after - reader = assetService.getContentReader(assetService.getAsset(stagingSandboxId, -1, stagingSandboxPath+"/myFile1", false)); - in = reader.getContentInputStream(); - buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(MYFILE1_MODIFIED, new String(buff, 0, MYFILE1_MODIFIED.length())); - - reader = assetService.getContentReader(assetService.getAsset(stagingSandboxId, -1, stagingSandboxPath+"/myDir1/myFile2", false)); - in = reader.getContentInputStream(); - buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(MYFILE2_MODIFIED, new String(buff, 0, MYFILE1_MODIFIED.length())); - } - - // submit "all" changed assets in user sandbox to staging sandbox (not using default webapp) - public void testSubmitChangedAssets2() throws IOException, InterruptedException - { - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-submitChangedAssets1", TEST_WEBPROJ_NAME+" submitChangedAssets1", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - - final String wpStoreId = wpInfo.getStoreId(); - final String stagingSandboxId = wpInfo.getStagingStoreName(); - - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); - String authorSandboxId = sbInfo.getSandboxId(); - - String rootPath = sbInfo.getSandboxRootPath(); // currently /www/avm_webapps - - // no changes yet - List assets = sbService.listChangedAll(authorSandboxId, true); - assertEquals(0, assets.size()); - - assetService.createFolder(authorSandboxId, rootPath, "a", null); - assetService.createFolder(authorSandboxId, rootPath+"/a", "b", null); - assetService.createFolder(authorSandboxId, rootPath+"/a/b", "c", null); - - final String MYFILE1 = "This is foo"; - ContentWriter writer = assetService.createFile(authorSandboxId, rootPath+"/a/b/c", "foo", null); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE1); - - final String MYFILE2 = "This is bar"; - writer = assetService.createFile(authorSandboxId, rootPath+"/a/b/c", "bar", null); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE2); - - assets = sbService.listChangedAll(authorSandboxId, true); - assertEquals(1, assets.size()); - - // check staging before - assertEquals(1, assetService.listAssets(stagingSandboxId, -1, rootPath, false).size()); // note: currently includes default webapp ('ROOT') - - // submit (new assets) ! - sbService.submitAll(authorSandboxId, "a submit label", "a submit comment"); - - pollForSnapshotCount(stagingSandboxId, 1); - - // check staging after - List listing = assetService.listAssets(stagingSandboxId, -1, rootPath, false); - assertEquals(2, listing.size()); // 'a' and 'ROOT' - - // no changes in sandbox - assets = sbService.listChangedAll(authorSandboxId, true); - assertEquals(0, assets.size()); - - final String MYFILE3 = "This is figs"; - writer = assetService.createFile(authorSandboxId, rootPath, "figs", null); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE3); - - final String MYFILE1_MODIFIED = "This is foo ... modified"; - writer = assetService.getContentWriter(assetService.getAsset(authorSandboxId, rootPath+"/a/b/c/foo")); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE1_MODIFIED); - - assetService.deleteAsset(assetService.getAsset(authorSandboxId, rootPath+"/a/b/c/bar")); - - assets = sbService.listChangedAll(authorSandboxId, true); - assertEquals(3, assets.size()); - - // check staging before - listing = assetService.listAssets(stagingSandboxId, -1, rootPath, false); - assertEquals(2, listing.size()); // 'a' and 'ROOT' - - // submit all (modified assets) ! - sbService.submitAll(authorSandboxId, "my label", null); - - pollForSnapshotCount(stagingSandboxId, 2); - - assets = sbService.listChangedAll(authorSandboxId, true); - assertEquals(0, assets.size()); - - // check staging after - listing = assetService.listAssets(stagingSandboxId, -1, rootPath, false); - assertEquals(3, listing.size()); // 'figs', 'a' and 'ROOT' - } - - // submit deleted assets in user sandbox to staging sandbox - public void testSubmitDeletedItems1() throws IOException, InterruptedException - { - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-submitDeletedItems1", TEST_WEBPROJ_NAME+" submitDeletedItems1", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - - final String wpStoreId = wpInfo.getStoreId(); - final String webApp = wpInfo.getDefaultWebApp(); - final String stagingSandboxId = wpInfo.getStagingStoreName(); - - // Invite web users - wpService.inviteWebUser(wpStoreId, USER_ONE, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, true); - wpService.inviteWebUser(wpStoreId, USER_TWO, WCMUtil.ROLE_CONTENT_MANAGER, true); // note: publisher does not have permission to delete - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); - String authorSandboxId = sbInfo.getSandboxId(); - - // no changes yet - List assets = sbService.listChangedAll(authorSandboxId, true); - assertEquals(0, assets.size()); - - String authorSandboxPath = sbInfo.getSandboxRootPath() + "/" + webApp; - - final String MYFILE1 = "This is myFile1"; - ContentWriter writer = assetService.createFile(authorSandboxId, authorSandboxPath, "myFile1", null); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE1); - - assetService.createFolder(authorSandboxId, authorSandboxPath, "myDir1", null); - assetService.createFolder(authorSandboxId, authorSandboxPath+"/myDir1", "myDir2", null); - - final String MYFILE2 = "This is myFile2"; - writer = assetService.createFile(authorSandboxId, authorSandboxPath+"/myDir1", "myFile2", null); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE2); - - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(2, assets.size()); - - // check staging before - String stagingSandboxPath = sbInfo.getSandboxRootPath() + "/" + webApp; - assertEquals(0, assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false).size()); - - // submit (new assets) ! - sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - - pollForSnapshotCount(stagingSandboxId, 1); - - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(0, assets.size()); - - // check staging after - List listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); - assertEquals(2, listing.size()); - - // Switch to USER_TWO - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - sbInfo = sbService.getAuthorSandbox(wpStoreId); - authorSandboxId = sbInfo.getSandboxId(); - - // no changes yet - assets = sbService.listChangedAll(authorSandboxId, true); - assertEquals(0, assets.size()); - - //authorSandboxWebppPath = authorSandboxId + AVM_STORE_SEPARATOR + sbInfo.getSandboxRootPath() + "/" + webApp; - - - assetService.deleteAsset(assetService.getAssetWebApp(authorSandboxId, webApp, "myFile1")); - assetService.deleteAsset(assetService.getAssetWebApp(authorSandboxId, webApp, "/myDir1/myDir2")); - - // do not list deleted - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(0, assets.size()); - - // do list deleted - assets = sbService.listChangedWebApp(authorSandboxId, webApp, true); - assertEquals(2, assets.size()); - - // check staging before - //stagingSandboxWebppPath = stagingSandboxId + AVM_STORE_SEPARATOR + sbInfo.getSandboxRootPath() + "/" + webApp; - - assertNotNull(assetService.getAssetWebApp(stagingSandboxId, webApp, "/myFile1")); - assertNotNull(assetService.getAssetWebApp(stagingSandboxId, webApp, "/myDir1")); - assertNotNull(assetService.getAssetWebApp(stagingSandboxId, webApp, "/myDir1/myDir2")); - assertNotNull(assetService.getAssetWebApp(stagingSandboxId, webApp, "/myDir1/myFile2")); - - // submit (deleted assets) ! - sbService.submitWebApp(authorSandboxId, webApp, "my label", null); - - pollForSnapshotCount(stagingSandboxId, 2); - - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(0, assets.size()); - - // check staging after - assertNull(assetService.getAssetWebApp(stagingSandboxId, webApp, "/myFile1")); - assertNull(assetService.getAssetWebApp(stagingSandboxId, webApp, "/myDir1/myDir2")); - - assertNotNull(assetService.getAssetWebApp(stagingSandboxId, webApp, "/myDir1")); - assertNotNull(assetService.getAssetWebApp(stagingSandboxId, webApp, "/myDir1/myFile2")); - } - - public void testSubmitDeletedItemsWithLD() throws IOException, InterruptedException - { - // Create Web Project A - - WebProjectInfo wpInfoA = wpService.createWebProject(TEST_SANDBOX+"-A", TEST_WEBPROJ_NAME+" A", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - - final String wpStoreIdA = wpInfoA.getStoreId(); - final String webAppA = wpInfoA.getDefaultWebApp(); - final String stagingSandboxIdA = wpInfoA.getStagingStoreName(); - - SandboxInfo sbInfoA = sbService.getAuthorSandbox(wpStoreIdA); - String authorSandboxIdA = sbInfoA.getSandboxId(); - - // no assets - String stagingSandboxPathA = sbInfoA.getSandboxRootPath() + "/" + webAppA; - assertEquals(0, assetService.listAssets(stagingSandboxIdA, -1, stagingSandboxPathA, false).size()); - - // no changes yet - List assets = sbService.listChangedAll(authorSandboxIdA, true); - assertEquals(0, assets.size()); - - String authorSandboxPathA = sbInfoA.getSandboxRootPath() + "/" + webAppA; - - assetService.createFolder(authorSandboxIdA, authorSandboxPathA, "test", null); - - final String MYFILE = "This is testfile.txt in AAA"; - ContentWriter writer = assetService.createFile(authorSandboxIdA, authorSandboxPathA+"/test", "testfile.txt", null); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE); - - assertEquals(1, assetService.listAssets(authorSandboxIdA, -1, authorSandboxPathA, false).size()); - assertEquals(1, assetService.listAssets(authorSandboxIdA, -1, authorSandboxPathA+"/test", false).size()); - - assets = sbService.listChangedWebApp(authorSandboxIdA, webAppA, false); - assertEquals(1, assets.size()); - - // check staging before - assertEquals(0, assetService.listAssets(stagingSandboxIdA, -1, stagingSandboxPathA, false).size()); - - // submit (new assets) ! - sbService.submitWebApp(authorSandboxIdA, webAppA, "A1", "A1"); - - pollForSnapshotCount(stagingSandboxIdA, 1); - - assets = sbService.listChangedWebApp(authorSandboxIdA, webAppA, false); - assertEquals(0, assets.size()); - - // check staging after - List listing = assetService.listAssets(stagingSandboxIdA, -1, stagingSandboxPathA, false); - assertEquals(1, listing.size()); - - listing = assetService.listAssets(stagingSandboxIdA, -1, stagingSandboxPathA+"/test", false); - assertEquals(1, listing.size()); - - // Create Web Project B - - WebProjectInfo wpInfoB = wpService.createWebProject(TEST_SANDBOX+"-B", TEST_WEBPROJ_NAME+" B", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - - final String wpStoreIdB = wpInfoB.getStoreId(); - final String webAppB = wpInfoB.getDefaultWebApp(); - final String stagingSandboxIdB = wpInfoB.getStagingStoreName(); - - SandboxInfo sbInfoB = sbService.getAuthorSandbox(wpStoreIdB); - String authorSandboxIdB = sbInfoB.getSandboxId(); - - // no assets - String stagingSandboxPathB = sbInfoB.getSandboxRootPath() + "/" + webAppB; - assertEquals(0, assetService.listAssets(stagingSandboxIdB, -1, stagingSandboxPathB, false).size()); - - // no changes yet - assets = sbService.listChangedAll(authorSandboxIdB, true); - assertEquals(0, assets.size()); - - // drop to AVM to create WCM layered folder (not supported via WCM services) - avmService.createLayeredDirectory(wpStoreIdA+":"+stagingSandboxPathA+"/test", wpStoreIdB+":"+stagingSandboxPathB, "test"); - - String authorSandboxPathB = sbInfoB.getSandboxRootPath() + "/" + webAppB; - - assertEquals(1, assetService.listAssets(authorSandboxIdB, -1, authorSandboxPathB, false).size()); - assertEquals(1, assetService.listAssets(authorSandboxIdB, -1, authorSandboxPathB+"/test", false).size()); - - // modify file - final String MYFILE_MODIFIED = "This is testfile.txt modified in BBB"; - - writer = assetService.getContentWriter(assetService.getAssetWebApp(authorSandboxIdB, webAppB+"/test", "/testfile.txt")); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE_MODIFIED); - - // submit (modified asset) - sbService.submitWebApp(authorSandboxIdB, webAppB, "B1", "B1"); - - pollForSnapshotCount(stagingSandboxIdB, 1); - - // Switch back to Web Project A - - // delete folder - assetService.deleteAsset(assetService.getAssetWebApp(authorSandboxIdA, webAppA, "test")); - - // submit (deleted asset) - sbService.submitWebApp(authorSandboxIdA, webAppA, "A2", "A2"); - - pollForSnapshotCount(stagingSandboxIdA, 2); - - // Switch back to Web Project B - - // delete file - assetService.deleteAsset(assetService.getAssetWebApp(authorSandboxIdB, webAppB+"/test", "testfile.txt")); - - // submit (deleted asset) - // ETHREEOH_2581 - sbService.submitWebApp(authorSandboxIdB, webAppB, "B2", "B2"); - - pollForSnapshotCount(stagingSandboxIdB, 2); - } - - public void testSubmitUpdatedItemWithLF() throws IOException, InterruptedException - { - // Create Web Project A - - WebProjectInfo wpInfoA = wpService.createWebProject(TEST_SANDBOX+"-A", TEST_WEBPROJ_NAME+" A", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - - final String wpStoreIdA = wpInfoA.getStoreId(); - final String webAppA = wpInfoA.getDefaultWebApp(); - final String stagingSandboxIdA = wpInfoA.getStagingStoreName(); - - SandboxInfo sbInfoA = sbService.getAuthorSandbox(wpStoreIdA); - String authorSandboxIdA = sbInfoA.getSandboxId(); - - // no assets - String stagingSandboxPathA = sbInfoA.getSandboxRootPath() + "/" + webAppA; - assertEquals(0, assetService.listAssets(stagingSandboxIdA, -1, stagingSandboxPathA, false).size()); - - // no changes yet - List assets = sbService.listChangedAll(authorSandboxIdA, true); - assertEquals(0, assets.size()); - - String authorSandboxPathA = sbInfoA.getSandboxRootPath() + "/" + webAppA; - - final String MYFILE = "This is testfile.txt in AAA"; - ContentWriter writer = assetService.createFile(authorSandboxIdA, authorSandboxPathA+"/", "testfile.txt", null); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE); - - assertEquals(1, assetService.listAssets(authorSandboxIdA, -1, authorSandboxPathA, false).size()); - - assets = sbService.listChangedWebApp(authorSandboxIdA, webAppA, false); - assertEquals(1, assets.size()); - - // check staging before - assertEquals(0, assetService.listAssets(stagingSandboxIdA, -1, stagingSandboxPathA, false).size()); - - // submit (new assets) ! - sbService.submitWebApp(authorSandboxIdA, webAppA, "A1", "A1"); - - // wait for submit to complete - pollForSnapshotCount(stagingSandboxIdA, 1); - - assets = sbService.listChangedWebApp(authorSandboxIdA, webAppA, false); - assertEquals(0, assets.size()); - - // check staging after - List listing = assetService.listAssets(stagingSandboxIdA, -1, stagingSandboxPathA, false); - assertEquals(1, listing.size()); - - // Create Web Project B - - WebProjectInfo wpInfoB = wpService.createWebProject(TEST_SANDBOX+"-B", TEST_WEBPROJ_NAME+" B", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - - final String wpStoreIdB = wpInfoB.getStoreId(); - final String webAppB = wpInfoB.getDefaultWebApp(); - final String stagingSandboxIdB = wpInfoB.getStagingStoreName(); - - SandboxInfo sbInfoB = sbService.getAuthorSandbox(wpStoreIdB); - String authorSandboxIdB = sbInfoB.getSandboxId(); - - // no assets - String stagingSandboxPathB = sbInfoB.getSandboxRootPath() + "/" + webAppB; - assertEquals(0, assetService.listAssets(stagingSandboxIdB, -1, stagingSandboxPathB, false).size()); - - // no changes yet - assets = sbService.listChangedAll(authorSandboxIdB, true); - assertEquals(0, assets.size()); - - // drop to AVM to create WCM layered file (not supported via WCM services) - avmService.createLayeredFile(wpStoreIdA+":"+stagingSandboxPathA+"/testfile.txt", wpStoreIdB+":"+stagingSandboxPathB, "testfile.txt"); - - String authorSandboxPathB = sbInfoB.getSandboxRootPath() + "/" + webAppB; - - assertEquals(1, assetService.listAssets(authorSandboxIdB, -1, authorSandboxPathB, false).size()); - - assets = sbService.listChangedWebApp(authorSandboxIdB, webAppB, false); - assertEquals(0, assets.size()); - - // modify file - final String MYFILE_MODIFIED = "This is testfile.txt modified in BBB"; - - writer = assetService.getContentWriter(assetService.getAssetWebApp(authorSandboxIdB, webAppB+"/", "/testfile.txt")); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE_MODIFIED); - - assets = sbService.listChangedWebApp(authorSandboxIdB, webAppB, false); - assertEquals(1, assets.size()); - - // ETHREEOH-2836 - assertEquals(AVMDifference.NEWER, assets.get(0).getDiffCode()); - - // initiate submit (modified asset) - sbService.submitWebApp(authorSandboxIdB, webAppB, "B1", "B1"); - - // wait for submit to complete - pollForSnapshotCount(stagingSandboxIdB, 1); - - assets = sbService.listChangedWebApp(authorSandboxIdB, webAppB, false); - assertEquals(0, assets.size()); - } - - - public void testSubmitDeletedItemsWithLF1() throws IOException, InterruptedException - { - // Create Web Project A - - WebProjectInfo wpInfoA = wpService.createWebProject(TEST_SANDBOX+"-A", TEST_WEBPROJ_NAME+" A", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - - final String wpStoreIdA = wpInfoA.getStoreId(); - final String webAppA = wpInfoA.getDefaultWebApp(); - final String stagingSandboxIdA = wpInfoA.getStagingStoreName(); - - SandboxInfo sbInfoA = sbService.getAuthorSandbox(wpStoreIdA); - String authorSandboxIdA = sbInfoA.getSandboxId(); - - // no assets - String stagingSandboxPathA = sbInfoA.getSandboxRootPath() + "/" + webAppA; - assertEquals(0, assetService.listAssets(stagingSandboxIdA, -1, stagingSandboxPathA, false).size()); - - // no changes yet - List assets = sbService.listChangedAll(authorSandboxIdA, true); - assertEquals(0, assets.size()); - - String authorSandboxPathA = sbInfoA.getSandboxRootPath() + "/" + webAppA; - - // create file in A - final String MYFILE_A = "This is a.txt in A"; - ContentWriter writer = assetService.createFile(authorSandboxIdA, authorSandboxPathA, "a.txt", null); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE_A); - - assertEquals(1, assetService.listAssets(authorSandboxIdA, -1, authorSandboxPathA, false).size()); - - assets = sbService.listChangedWebApp(authorSandboxIdA, webAppA, false); - assertEquals(1, assets.size()); - - // check staging A before - assertEquals(0, assetService.listAssets(stagingSandboxIdA, -1, stagingSandboxPathA, false).size()); - - // submit (new assets) ! - sbService.submitWebApp(authorSandboxIdA, webAppA, "A1", "A1"); - - pollForSnapshotCount(stagingSandboxIdA, 1); - - assets = sbService.listChangedWebApp(authorSandboxIdA, webAppA, false); - assertEquals(0, assets.size()); - - // check staging A after - List listing = assetService.listAssets(stagingSandboxIdA, -1, stagingSandboxPathA, false); - assertEquals(1, listing.size()); - - listing = assetService.listAssets(stagingSandboxIdA, -1, stagingSandboxPathA, false); - assertEquals(1, listing.size()); - - // Create Web Project B - - WebProjectInfo wpInfoB = wpService.createWebProject(TEST_SANDBOX+"-B", TEST_WEBPROJ_NAME+" B", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - - final String wpStoreIdB = wpInfoB.getStoreId(); - final String webAppB = wpInfoB.getDefaultWebApp(); - final String stagingSandboxIdB = wpInfoB.getStagingStoreName(); - - SandboxInfo sbInfoB = sbService.getAuthorSandbox(wpStoreIdB); - String authorSandboxIdB = sbInfoB.getSandboxId(); - - // no assets - String stagingSandboxPathB = sbInfoB.getSandboxRootPath() + "/" + webAppB; - assertEquals(0, assetService.listAssets(stagingSandboxIdB, -1, stagingSandboxPathB, false).size()); - - // no changes yet - assets = sbService.listChangedAll(authorSandboxIdB, true); - assertEquals(0, assets.size()); - - // drop to AVM to create WCM layered file (not supported via WCM services) - avmService.createLayeredFile(wpStoreIdA+":"+stagingSandboxPathA+"/a.txt", wpStoreIdB+":"+stagingSandboxPathB, "a.txt"); - - String authorSandboxPathB = sbInfoB.getSandboxRootPath() + "/" + webAppB; - - assertEquals(1, assetService.listAssets(authorSandboxIdB, -1, authorSandboxPathB, false).size()); - - // delete layered file a.txt from B (admin sandbox) - assetService.deleteAsset(assetService.getAssetWebApp(authorSandboxIdB, webAppB, "a.txt")); - - assertEquals(1, sbService.listChangedAll(authorSandboxIdB, true).size()); - - // submit (deleted asset) - sbService.submitWebApp(authorSandboxIdB, webAppB, "B2", "B2"); - - pollForSnapshotCount(stagingSandboxIdB, 1); - - assertEquals(0, sbService.listChangedAll(authorSandboxIdB, true).size()); - - // check staging B after - assertEquals(0, assetService.listAssets(stagingSandboxIdB, -1, stagingSandboxPathB, false).size()); - } - - public void testSubmitDeletedItemsWithLF2() throws IOException, InterruptedException - { - // Create Web Project A - - WebProjectInfo wpInfoA = wpService.createWebProject(TEST_SANDBOX+"-A", TEST_WEBPROJ_NAME+" A", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - - final String wpStoreIdA = wpInfoA.getStoreId(); - final String webAppA = wpInfoA.getDefaultWebApp(); - final String stagingSandboxIdA = wpInfoA.getStagingStoreName(); - - SandboxInfo sbInfoA = sbService.getAuthorSandbox(wpStoreIdA); - String authorSandboxIdA = sbInfoA.getSandboxId(); - - // no assets - String stagingSandboxPathA = sbInfoA.getSandboxRootPath() + "/" + webAppA; - assertEquals(0, assetService.listAssets(stagingSandboxIdA, -1, stagingSandboxPathA, false).size()); - - // no changes yet - List assets = sbService.listChangedAll(authorSandboxIdA, true); - assertEquals(0, assets.size()); - - String authorSandboxPathA = sbInfoA.getSandboxRootPath() + "/" + webAppA; - - // create file in A - final String MYFILE_A = "This is a.txt in A"; - ContentWriter writer = assetService.createFile(authorSandboxIdA, authorSandboxPathA, "a.txt", null); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE_A); - - assertEquals(1, assetService.listAssets(authorSandboxIdA, -1, authorSandboxPathA, false).size()); - - assets = sbService.listChangedWebApp(authorSandboxIdA, webAppA, false); - assertEquals(1, assets.size()); - - // check staging A before - assertEquals(0, assetService.listAssets(stagingSandboxIdA, -1, stagingSandboxPathA, false).size()); - - // submit (new assets) ! - sbService.submitWebApp(authorSandboxIdA, webAppA, "A1", "A1"); - - pollForSnapshotCount(stagingSandboxIdA, 1); - - assets = sbService.listChangedWebApp(authorSandboxIdA, webAppA, false); - assertEquals(0, assets.size()); - - // check staging A after - List listing = assetService.listAssets(stagingSandboxIdA, -1, stagingSandboxPathA, false); - assertEquals(1, listing.size()); - - listing = assetService.listAssets(stagingSandboxIdA, -1, stagingSandboxPathA, false); - assertEquals(1, listing.size()); - - // Create Web Project B - - WebProjectInfo wpInfoB = wpService.createWebProject(TEST_SANDBOX+"-B", TEST_WEBPROJ_NAME+" B", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - - final String wpStoreIdB = wpInfoB.getStoreId(); - final String webAppB = wpInfoB.getDefaultWebApp(); - final String stagingSandboxIdB = wpInfoB.getStagingStoreName(); - - SandboxInfo sbInfoB = sbService.getAuthorSandbox(wpStoreIdB); - String authorSandboxIdB = sbInfoB.getSandboxId(); - - // no assets - String stagingSandboxPathB = sbInfoB.getSandboxRootPath() + "/" + webAppB; - assertEquals(0, assetService.listAssets(stagingSandboxIdB, -1, stagingSandboxPathB, false).size()); - - // no changes yet - assets = sbService.listChangedAll(authorSandboxIdB, true); - assertEquals(0, assets.size()); - - // drop to AVM to create WCM layered file (not supported via WCM services) - avmService.createLayeredFile(wpStoreIdA+":"+stagingSandboxPathA+"/a.txt", wpStoreIdB+":"+stagingSandboxPathB, "a.txt"); - - String authorSandboxPathB = sbInfoB.getSandboxRootPath() + "/" + webAppB; - - assertEquals(1, assetService.listAssets(authorSandboxIdB, -1, authorSandboxPathB, false).size()); - - // create file in B - final String MYFILE_B = "This is b.txt in B"; - writer = assetService.createFile(authorSandboxIdB, authorSandboxPathB, "b.txt", null); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE_B); - - logger.debug("created file b.txt in B admin sandbox"); - - recursiveList(stagingSandboxIdA); - recursiveList(stagingSandboxIdB); - recursiveList(authorSandboxIdB); - - // submit (created asset) - sbService.submitWebApp(authorSandboxIdB, webAppB, "B1", "B1"); - - logger.debug("submit initiated: created file b.txt in B staging sandbox"); - - recursiveList(stagingSandboxIdA); - recursiveList(stagingSandboxIdB); - recursiveList(authorSandboxIdB); - - pollForSnapshotCount(stagingSandboxIdB, 1); - - logger.debug("submit completed: created file b.txt in B staging sandbox"); - - recursiveList(stagingSandboxIdA); - recursiveList(stagingSandboxIdB); - recursiveList(authorSandboxIdB); - - // check staging B after - assertEquals(2, assetService.listAssets(stagingSandboxIdB, -1, stagingSandboxPathB, false).size()); - // delete layered file a.txt from B (admin sandbox) - assetService.deleteAsset(assetService.getAssetWebApp(authorSandboxIdB, webAppB, "a.txt")); - - logger.debug("deleted file a.txt from B admin sandbox"); - - recursiveList(stagingSandboxIdA); - recursiveList(stagingSandboxIdB); - recursiveList(authorSandboxIdB); - - assertEquals(1, sbService.listChangedAll(authorSandboxIdB, true).size()); - - // ETHREEOH-2868 - // submit (deleted asset) - sbService.submitWebApp(authorSandboxIdB, webAppB, "B2", "B2"); - - logger.debug("submit initiated: deleted file a.txt in B staging sandbox"); - - recursiveList(stagingSandboxIdA); - recursiveList(stagingSandboxIdB); - recursiveList(authorSandboxIdB); - - pollForSnapshotCount(stagingSandboxIdB, 2); - - logger.debug("submit completed: deleted file a.txt in B staging sandbox"); - - recursiveList(stagingSandboxIdA); - recursiveList(stagingSandboxIdB); - recursiveList(authorSandboxIdB); - - assertEquals(0, sbService.listChangedAll(authorSandboxIdB, true).size()); - - // check staging B after - assertEquals(1, assetService.listAssets(stagingSandboxIdB, -1, stagingSandboxPathB, false).size()); - } - - // revert/undo (changed) assets in user sandbox - public void testUndo() throws IOException, InterruptedException - { - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-revertChangedAssets", TEST_WEBPROJ_NAME+" revertChangedAssets", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - - final String wpStoreId = wpInfo.getStoreId(); - final String webApp = wpInfo.getDefaultWebApp(); - final String stagingSandboxId = wpInfo.getStagingStoreName(); - - // Invite web users - wpService.inviteWebUser(wpStoreId, USER_ONE, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, true); - wpService.inviteWebUser(wpStoreId, USER_TWO, WCMUtil.ROLE_CONTENT_PUBLISHER, true); - wpService.inviteWebUser(wpStoreId, USER_THREE, WCMUtil.ROLE_CONTENT_MANAGER, true); - wpService.inviteWebUser(wpStoreId, USER_FOUR, WCMUtil.ROLE_CONTENT_REVIEWER, true); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); - String authorSandboxId = sbInfo.getSandboxId(); - - // no changes yet - List assets = sbService.listChangedAll(authorSandboxId, true); - assertEquals(0, assets.size()); - - String authorSandboxPath = sbInfo.getSandboxRootPath() + "/" + webApp; - - final String MYFILE1 = "This is myFile1"; - ContentWriter writer = assetService.createFile(authorSandboxId, authorSandboxPath, "myFile1", null); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE1); - - assetService.createFolder(authorSandboxId, authorSandboxPath, "myDir1", null); - - final String MYFILE2 = "This is myFile2"; - writer = assetService.createFile(authorSandboxId, authorSandboxPath+"/myDir1", "myFile2", null); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE2); - - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(2, assets.size()); - - // check staging before - String stagingSandboxPath = sbInfo.getSandboxRootPath() + "/" + webApp; - assertEquals(0, assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false).size()); - - // submit (new assets) ! - sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - - pollForSnapshotCount(stagingSandboxId, 1); - - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(0, assets.size()); - - // check staging after - List listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); - assertEquals(2, listing.size()); - - // Switch to USER_TWO - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - sbInfo = sbService.getAuthorSandbox(wpStoreId); - authorSandboxId = sbInfo.getSandboxId(); - - // no changes yet - assets = sbService.listChangedAll(authorSandboxId, true); - assertEquals(0, assets.size()); - - final String MYFILE1_MODIFIED = "This is myFile1 ... modified by "+USER_TWO; - writer = assetService.getContentWriter(assetService.getAssetWebApp(authorSandboxId, webApp, "/myFile1")); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE1_MODIFIED); - - final String MYFILE2_MODIFIED = "This is myFile2 ... modified by "+USER_TWO; - writer = assetService.getContentWriter(assetService.getAssetWebApp(authorSandboxId, webApp, "/myDir1/myFile2")); - writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); - writer.setEncoding("UTF-8"); - writer.putContent(MYFILE2_MODIFIED); - - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(2, assets.size()); - - // check staging before - stagingSandboxPath = sbInfo.getSandboxRootPath() + "/" + webApp; - - ContentReader reader = assetService.getContentReader(assetService. getAsset(stagingSandboxId, -1, stagingSandboxPath+"/myFile1", false)); - InputStream in = reader.getContentInputStream(); - byte[] buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(MYFILE1, new String(buff, 0, MYFILE1.length())); // assumes 1byte = 1char - - reader = assetService.getContentReader(assetService. getAsset(stagingSandboxId, -1, stagingSandboxPath+"/myDir1/myFile2", false)); - in = reader.getContentInputStream(); - buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(MYFILE2, new String(buff, 0, MYFILE2.length())); - - // revert (modified assets) ! - sbService.revertWebApp(authorSandboxId, webApp); - - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(0, assets.size()); - - // check staging after - reader = assetService.getContentReader(assetService.getAsset(stagingSandboxId, -1, stagingSandboxPath+"/myFile1", false)); - in = reader.getContentInputStream(); - buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(MYFILE1, new String(buff, 0, MYFILE1.length())); - - reader = assetService.getContentReader(assetService.getAsset(stagingSandboxId, -1, stagingSandboxPath+"/myDir1/myFile2", false)); - in = reader.getContentInputStream(); - buff = new byte[1024]; - in.read(buff); - in.close(); - assertEquals(MYFILE2, new String(buff, 0, MYFILE2.length())); - - // test roles - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - // admin (content manager) can revert any sandbox - String userSandboxId = wpStoreId + "--" + USER_THREE; - sbService.revertAll(userSandboxId); - - // Switch to USER_THREE - AuthenticationUtil.setFullyAuthenticatedUser(USER_THREE); - - // content manager can revert any (author) sandbox - userSandboxId = wpStoreId + "--" + USER_ONE; - sbService.revertAll(userSandboxId); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - try - { - // Content contributor - try to revert another user's sandbox (-ve test) - userSandboxId = wpStoreId + "--" + USER_THREE; - List noAssets = new ArrayList(0); - sbService.revertListAssets(userSandboxId, noAssets); - fail("Shouldn't be able to revert another author's sandbox"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Switch to USER_TWO - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - // TODO - requires more testing - eg. revert some changes - - // Content publisher - can revert another user's sandbox - userSandboxId = wpStoreId + "--" + USER_ONE; - sbService.revertAll(userSandboxId); - - // Switch to USER_FOUR - AuthenticationUtil.setFullyAuthenticatedUser(USER_FOUR); - - try - { - // Content reviewer - try to revert another user's sandbox (-ve test) - userSandboxId = TEST_SANDBOX+"-get" + "--" + USER_THREE; - sbService.revertAll(userSandboxId); - fail("Shouldn't be able to revert another author's sandbox"); - } - catch (AccessDeniedException exception) - { - // Expected - } - } - - public void testListSnapshots() throws IOException, InterruptedException - { - Date fromDate = new Date(); - - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-listSnapshots", TEST_WEBPROJ_NAME+" listSnapshots", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - - final String wpStoreId = wpInfo.getStoreId(); - final String webApp = wpInfo.getDefaultWebApp(); - final String stagingSandboxId = wpInfo.getStagingStoreName(); - - // Invite web users - wpService.inviteWebUser(wpStoreId, USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER, true); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); - String authorSandboxId = sbInfo.getSandboxId(); - - // no changes yet - List assets = sbService.listChangedAll(authorSandboxId, true); - assertEquals(0, assets.size()); - - assetService.createFolderWebApp(authorSandboxId, webApp, "/", "myDir1"); - assetService.createFolderWebApp(authorSandboxId, webApp, "/", "myDir2"); - assetService.createFolderWebApp(authorSandboxId, webApp, "/", "myDir3"); - - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(3, assets.size()); - - // check staging before - String stagingSandboxPath = sbInfo.getSandboxRootPath() + "/" + webApp; - assertEquals(0, assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false).size()); - - List sbVersions = sbService.listSnapshots(stagingSandboxId, fromDate, new Date(), false); - assertEquals(0, sbVersions.size()); - - // submit (new assets) ! - sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - - pollForSnapshotCount(stagingSandboxId, 1); - - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(0, assets.size()); - - // check staging after - List listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); - assertEquals(3, listing.size()); - - sbVersions = sbService.listSnapshots(stagingSandboxId, fromDate, new Date(), false); - assertEquals(1, sbVersions.size()); - - // more changes ... - assetService.createFolderWebApp(authorSandboxId, webApp, "/", "myDir4"); - - // submit (new assets) ! - sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - - pollForSnapshotCount(stagingSandboxId, 2); - - // check staging after - listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); - assertEquals(4, listing.size()); - - sbVersions = sbService.listSnapshots(stagingSandboxId, fromDate, new Date(), false); - assertEquals(2, sbVersions.size()); - } - - public void testRevertSnapshot1() throws IOException, InterruptedException - { - Date fromDate = new Date(); - - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-revertSnapshot", TEST_WEBPROJ_NAME+" revertSnapshot", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - - final String wpStoreId = wpInfo.getStoreId(); - final String webApp = wpInfo.getDefaultWebApp(); - final String stagingSandboxId = wpInfo.getStagingStoreName(); - - // Start: Test ETWOTWO-817 - - // Invite web users - wpService.inviteWebUser(wpStoreId, USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER, true); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // Finish: Test ETWOTWO-817 - - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); - String authorSandboxId = sbInfo.getSandboxId(); - - // no changes yet - List assets = sbService.listChangedAll(authorSandboxId, true); - assertEquals(0, assets.size()); - - String authorSandboxPath = sbInfo.getSandboxRootPath() + "/" + webApp; - - assetService.createFolder(authorSandboxId, authorSandboxPath, "myDir1", null); - - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(1, assets.size()); - - // check staging before - String stagingSandboxPath = sbInfo.getSandboxRootPath() + "/" + webApp; - assertEquals(0, assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false).size()); - - List sbVersions = sbService.listSnapshots(stagingSandboxId, fromDate, new Date(), false); - assertEquals(0, sbVersions.size()); - - // submit (new assets) ! - sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - - pollForSnapshotCount(stagingSandboxId, 1); - - assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); - assertEquals(0, assets.size()); - - // check staging after - List listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); - assertEquals(1, listing.size()); - for (AssetInfo asset : listing) - { - if (asset.getName().equals("myDir1") && asset.isFolder()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - - sbVersions = sbService.listSnapshots(stagingSandboxId, fromDate, new Date(), false); - assertEquals(1, sbVersions.size()); - - // more changes ... - assetService.createFolder(authorSandboxId, authorSandboxPath, "myDir2", null); - - // submit (new assets) ! - sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - - pollForSnapshotCount(stagingSandboxId, 2); - - // check staging after - listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); - assertEquals(2, listing.size()); - for (AssetInfo asset : listing) - { - if (asset.getName().equals("myDir1") && asset.isFolder()) - { - continue; - } - else if (asset.getName().equals("myDir2") && asset.isFolder()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - - sbVersions = sbService.listSnapshots(stagingSandboxId, fromDate, new Date(), false); - assertEquals(2, sbVersions.size()); - - // more changes ... - assetService.createFolderWebApp(authorSandboxId, webApp, "/", "myDir3"); - - // submit (new assets) ! - sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - - pollForSnapshotCount(stagingSandboxId, 3); - - // check staging after - listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); - assertEquals(3, listing.size()); - for (AssetInfo asset : listing) - { - if (asset.getName().equals("myDir1") && asset.isFolder()) - { - continue; - } - else if (asset.getName().equals("myDir2") && asset.isFolder()) - { - continue; - } - else if (asset.getName().equals("myDir3") && asset.isFolder()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - - sbVersions = sbService.listSnapshots(stagingSandboxId, fromDate, new Date(), false); - assertEquals(3, sbVersions.size()); - - // revert to snapshot ... - - SandboxVersion version = sbVersions.get(1); - int versionId = version.getVersion(); - - sbService.revertSnapshot(stagingSandboxId, versionId); - - sbVersions = sbService.listSnapshots(stagingSandboxId, fromDate, new Date(), false); - assertEquals(4, sbVersions.size()); - - // check staging after - listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); - assertEquals(2, listing.size()); - for (AssetInfo asset : listing) - { - if (asset.getName().equals("myDir1") && asset.isFolder()) - { - continue; - } - else if (asset.getName().equals("myDir2") && asset.isFolder()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - } - - public void testRevertSnapshot2() throws IOException, InterruptedException - { - Date fromDate = new Date(); - - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-revertSnapshot2", TEST_WEBPROJ_NAME+" revertSnapshot2", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - - final String wpStoreId = wpInfo.getStoreId(); - final String webApp = wpInfo.getDefaultWebApp(); - final String stagingSandboxId = wpInfo.getStagingStoreName(); - - SandboxInfo sbInfo = sbService.getStagingSandbox(wpStoreId); - String stagingSandboxPath = sbInfo.getSandboxRootPath() + "/" + webApp; - - sbInfo = sbService.getAuthorSandbox(wpStoreId); - String authorSandboxId = sbInfo.getSandboxId(); - - String authorSandboxPath = sbInfo.getSandboxRootPath() + "/" + webApp; - - List sbVersions = sbService.listSnapshots(stagingSandboxId, fromDate, new Date(), false); - assertEquals(0, sbVersions.size()); - - assetService.createFile(authorSandboxId, authorSandboxPath, "c1.txt", null); - sbService.submitWebApp(authorSandboxId, webApp, "s1", "s1"); - - pollForSnapshotCount(stagingSandboxId, 1); - - List listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); - assertEquals(1, listing.size()); - for (AssetInfo asset : listing) - { - if (asset.getName().equals("c1.txt") && asset.isFile()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - - assetService.createFile(authorSandboxId, authorSandboxPath, "c2.txt", null); - sbService.submitWebApp(authorSandboxId, webApp, "s2", "s2"); - - pollForSnapshotCount(stagingSandboxId, 2); - - listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); - assertEquals(2, listing.size()); - for (AssetInfo asset : listing) - { - if (asset.getName().equals("c1.txt") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("c2.txt") && asset.isFile()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - - sbVersions = sbService.listSnapshots(stagingSandboxId, fromDate, new Date(), false); - int snapshotVersionId2 = sbVersions.get(0).getVersion(); - - assetService.createFile(authorSandboxId, authorSandboxPath, "c3.txt", null); - sbService.submitWebApp(authorSandboxId, webApp, "s3", "s3"); - - pollForSnapshotCount(stagingSandboxId, 3); - - listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); - assertEquals(3, listing.size()); - for (AssetInfo asset : listing) - { - if (asset.getName().equals("c1.txt") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("c2.txt") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("c3.txt") && asset.isFile()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - - sbVersions = sbService.listSnapshots(stagingSandboxId, fromDate, new Date(), false); - int snapshotVersionId3 = sbVersions.get(0).getVersion(); - - assetService.createFile(authorSandboxId, authorSandboxPath, "c4.txt", null); - sbService.submitWebApp(authorSandboxId, webApp, "s4", "s4"); - - pollForSnapshotCount(stagingSandboxId, 4); - - listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); - assertEquals(4, listing.size()); - for (AssetInfo asset : listing) - { - if (asset.getName().equals("c1.txt") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("c2.txt") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("c3.txt") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("c4.txt") && asset.isFile()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - - AssetInfo file = assetService.getAsset(authorSandboxId, authorSandboxPath+"/c2.txt"); - assetService.deleteAsset(file); - sbService.submitWebApp(authorSandboxId, webApp, "s5", "s5"); - - pollForSnapshotCount(stagingSandboxId, 5); - - listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); - assertEquals(3, listing.size()); - for (AssetInfo asset : listing) - { - if (asset.getName().equals("c1.txt") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("c3.txt") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("c4.txt") && asset.isFile()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - - // revert to snapshot - // ETWOTWO-1244 - sbService.revertSnapshot(stagingSandboxId, snapshotVersionId2); - - listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); - assertEquals(2, listing.size()); - for (AssetInfo asset : listing) - { - if (asset.getName().equals("c1.txt") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("c2.txt") && asset.isFile()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - - // revert to snapshot - // ETWOTWO-1244 - sbService.revertSnapshot(stagingSandboxId, snapshotVersionId3); - - listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); - assertEquals(3, listing.size()); - for (AssetInfo asset : listing) - { - if (asset.getName().equals("c1.txt") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("c2.txt") && asset.isFile()) - { - continue; - } - else if (asset.getName().equals("c3.txt") && asset.isFile()) - { - continue; - } - else - { - fail("The asset '" + asset.getName() + "' is not recognised"); - } - } - } - - // submit sandbox - public void testSubmitAction() throws Exception - { - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-submitAction", TEST_WEBPROJ_NAME+" submitAction", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - String wpStoreId = wpInfo.getStoreId(); - String webApp = wpInfo.getDefaultWebApp(); - String stagingSandboxId = wpInfo.getStagingStoreName(); - - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); - final String sbStoreId = sbInfo.getSandboxId(); - - assetService.createFolderWebApp(sbStoreId, webApp, "/", "a"); - assetService.createFolderWebApp(sbStoreId, webApp, "/a", "b"); - assetService.createFolderWebApp(sbStoreId, webApp, "/a/b", "c"); - - assetService.createFileWebApp(sbStoreId, webApp, "/a/b/c", "foo"); - assetService.createFileWebApp(sbStoreId, webApp, "/a/b/c", "bar"); - - List changedAssets = sbService.listChangedWebApp(sbStoreId, webApp, false); - assertEquals(1, changedAssets.size()); - assertEquals(sbInfo.getSandboxRootPath()+"/"+webApp+"/a", changedAssets.get(0).getPath()); - - final ActionImpl action = new ActionImpl(null, GUID.generate(), WCMSandboxSubmitAction.NAME); - - action.setParameterValue(WCMSandboxUndoAction.PARAM_SANDBOX_ID, sbStoreId); - action.setParameterValue(WCMSandboxUndoAction.PARAM_PATH_LIST, null); - - final WCMSandboxSubmitAction submit = (WCMSandboxSubmitAction)ctx.getBean(WCMSandboxSubmitAction.NAME); - - class TxnWork implements RetryingTransactionCallback - { - public Object execute() throws Exception - { - submit.execute(action, null); - return null; - } - }; - TransactionService transactionService = (TransactionService) ctx.getBean("transactionService"); - - // first submit - all (note: within /www/avm_webapps) - transactionService.getRetryingTransactionHelper().doInTransaction(new TxnWork()); - - pollForSnapshotCount(stagingSandboxId, 1); - - assetService.createFile(sbStoreId, JNDIConstants.DIR_DEFAULT_WWW, "figs", null); - - AssetInfo fileAsset = assetService.getAssetWebApp(sbStoreId, webApp, "/a/b/c/foo"); - assetService.getContentWriter(fileAsset).getContentOutputStream().close(); - - fileAsset = assetService.getAssetWebApp(sbStoreId, webApp, "/a/b/c/bar"); - assetService.deleteAsset(fileAsset); - - changedAssets = sbService.listChanged(sbStoreId, JNDIConstants.DIR_DEFAULT_WWW, true); - assertEquals(3, changedAssets.size()); - - assertEquals(AVMDifference.NEWER, changedAssets.get(0).getDiffCode()); - assertEquals(sbInfo.getSandboxRootPath()+"/"+webApp+"/a/b/c/bar", changedAssets.get(0).getPath()); - - assertEquals(AVMDifference.NEWER, changedAssets.get(1).getDiffCode()); - assertEquals(sbInfo.getSandboxRootPath()+"/"+webApp+"/a/b/c/foo", changedAssets.get(1).getPath()); - - assertEquals(AVMDifference.NEWER, changedAssets.get(2).getDiffCode()); - assertEquals("/"+ JNDIConstants.DIR_DEFAULT_WWW+"/figs", changedAssets.get(2).getPath()); - - List paths = new ArrayList(); - paths.add(changedAssets.get(0).getPath()); - paths.add(changedAssets.get(1).getPath()); - paths.add(changedAssets.get(2).getPath()); - - // second submit - list (note: including above /www/avm_webapps) - action.setParameterValue(WCMSandboxUndoAction.PARAM_PATH_LIST, (Serializable)paths); - action.setParameterValue(WCMSandboxUndoAction.PARAM_SANDBOX_ID, sbStoreId); - - transactionService.getRetryingTransactionHelper().doInTransaction(new TxnWork()); - - pollForSnapshotCount(stagingSandboxId, 2); - - changedAssets = sbService.listChanged(sbStoreId, JNDIConstants.DIR_DEFAULT_WWW, true); - assertEquals(0, changedAssets.size()); - } - - // revert/undo sandbox - public void testUndoAction() throws Exception - { - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-revertListAction", TEST_WEBPROJ_NAME+" revertListAction", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - String wpStoreId = wpInfo.getStoreId(); - String webApp = wpInfo.getDefaultWebApp(); - String stagingSandboxId = wpInfo.getStagingStoreName(); - - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); - final String sbStoreId = sbInfo.getSandboxId(); - - assetService.createFolderWebApp(sbStoreId, webApp, "/", "a"); - assetService.createFolderWebApp(sbStoreId, webApp, "/a", "b"); - assetService.createFolderWebApp(sbStoreId, webApp, "/a/b", "c"); - - List changedAssets = sbService.listChanged(sbStoreId, JNDIConstants.DIR_DEFAULT_WWW, true); - assertEquals(1, changedAssets.size()); - - assertEquals(AVMDifference.NEWER, changedAssets.get(0).getDiffCode()); - assertEquals(sbInfo.getSandboxRootPath()+"/"+webApp+"/a", changedAssets.get(0).getPath()); - - sbService.submitWebApp(sbStoreId, webApp, "submitLabel", "submitDescription"); - - pollForSnapshotCount(stagingSandboxId, 1); - - assetService.createFileWebApp(sbStoreId, webApp, "/a/b/c", "foo"); - - changedAssets = sbService.listChanged(sbStoreId, JNDIConstants.DIR_DEFAULT_WWW, true); - assertEquals(1, changedAssets.size()); - - assertEquals(AVMDifference.NEWER, changedAssets.get(0).getDiffCode()); - assertEquals(sbInfo.getSandboxRootPath()+"/"+webApp+"/a/b/c/foo", changedAssets.get(0).getPath()); - - sbService.submitWebApp(sbStoreId, webApp, "submitLabel", "submitDescription"); - - pollForSnapshotCount(stagingSandboxId, 2); - - assetService.createFileWebApp(sbStoreId, webApp, "/a/b/c", "bar"); - - assertNotNull(assetService.getAssetWebApp(sbStoreId, webApp, "/a/b/c/bar")); - - changedAssets = sbService.listChanged(sbStoreId, JNDIConstants.DIR_DEFAULT_WWW, true); - assertEquals(1, changedAssets.size()); - - assertEquals(AVMDifference.NEWER, changedAssets.get(0).getDiffCode()); - assertEquals(sbInfo.getSandboxRootPath()+"/"+webApp+"/a/b/c/bar", changedAssets.get(0).getPath()); - - List snapshotVersions = sbService.listSnapshots(sbStoreId, false); - assertEquals(2, snapshotVersions.size()); - - final ActionImpl action = new ActionImpl(null, GUID.generate(), WCMSandboxUndoAction.NAME); - - List paths = new ArrayList(); - paths.add(sbInfo.getSandboxRootPath()+"/"+webApp+"/a/b/c/bar"); - - action.setParameterValue(WCMSandboxUndoAction.PARAM_PATH_LIST, (Serializable)paths); - action.setParameterValue(WCMSandboxUndoAction.PARAM_SANDBOX_ID, sbStoreId); - - final WCMSandboxUndoAction revertList = (WCMSandboxUndoAction)ctx.getBean(WCMSandboxUndoAction.NAME); - - class TxnWork implements RetryingTransactionCallback - { - public Object execute() throws Exception - { - revertList.execute(action, null); - return null; - } - }; - TransactionService transactionService = (TransactionService) ctx.getBean("transactionService"); - transactionService.getRetryingTransactionHelper().doInTransaction(new TxnWork()); - - pollForSnapshotCount(stagingSandboxId, 2); - - snapshotVersions = sbService.listSnapshots(sbStoreId, false); - assertEquals(2, snapshotVersions.size()); - - changedAssets = sbService.listChanged(sbStoreId, JNDIConstants.DIR_DEFAULT_WWW, true); - assertEquals(0, changedAssets.size()); - - assertNotNull(assetService.getAssetWebApp(sbStoreId, webApp, "/a/b/c/foo")); - assertNull(assetService.getAssetWebApp(sbStoreId, webApp, "/a/b/c/bar")); - } - - public void testRevertSnapshotAction() throws Exception - { - WebProjectInfo wpInfo = wpService.createWebProject(TEST_SANDBOX+"-revertSnapshotAction", TEST_WEBPROJ_NAME+" revertSnapshotAction", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - String wpStoreId = wpInfo.getStoreId(); - String webApp = wpInfo.getDefaultWebApp(); - final String stagingStoreId = wpInfo.getStagingStoreName(); - - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); - final String sbStoreId = sbInfo.getSandboxId(); - - assetService.createFolderWebApp(sbStoreId, webApp, "/", "a"); - assetService.createFolderWebApp(sbStoreId, webApp, "/a", "b"); - assetService.createFolderWebApp(sbStoreId, webApp, "/a/b", "c"); - - List changedAssets = sbService.listChanged(sbStoreId, JNDIConstants.DIR_DEFAULT_WWW, true); - assertEquals(1, changedAssets.size()); - - assertEquals(AVMDifference.NEWER, changedAssets.get(0).getDiffCode()); - assertEquals(sbInfo.getSandboxRootPath()+"/"+webApp+"/a", changedAssets.get(0).getPath()); - - sbService.submitWebApp(sbStoreId, webApp, "submitLabel", "submitDescription"); - - pollForSnapshotCount(stagingStoreId, 1); - - assetService.createFileWebApp(sbStoreId, webApp, "/a/b/c", "foo"); - - changedAssets = sbService.listChanged(sbStoreId, JNDIConstants.DIR_DEFAULT_WWW, true); - assertEquals(1, changedAssets.size()); - - assertEquals(AVMDifference.NEWER, changedAssets.get(0).getDiffCode()); - assertEquals(sbInfo.getSandboxRootPath()+"/"+webApp+"/a/b/c/foo", changedAssets.get(0).getPath()); - - sbService.submitWebApp(sbStoreId, webApp, "submitLabel", "submitDescription"); - - pollForSnapshotCount(stagingStoreId, 2); - - assetService.createFileWebApp(sbStoreId, webApp, "/a/b/c", "bar"); - - changedAssets = sbService.listChanged(sbStoreId, JNDIConstants.DIR_DEFAULT_WWW, true); - assertEquals(1, changedAssets.size()); - - assertEquals(AVMDifference.NEWER, changedAssets.get(0).getDiffCode()); - assertEquals(sbInfo.getSandboxRootPath()+"/"+webApp+"/a/b/c/bar", changedAssets.get(0).getPath()); - - sbService.submitWebApp(sbStoreId, webApp, "submitLabel", "submitDescription"); - - pollForSnapshotCount(stagingStoreId, 3); - - List snapshotVersions = sbService.listSnapshots(stagingStoreId, false); - assertEquals(3, snapshotVersions.size()); - - assertNotNull(assetService.getAssetWebApp(sbStoreId, webApp, "/a/b/c/foo")); - assertNotNull(assetService.getAssetWebApp(sbStoreId, webApp, "/a/b/c/bar")); - - final ActionImpl action = new ActionImpl(null, GUID.generate(), WCMSandboxRevertSnapshotAction.NAME); - action.setParameterValue(WCMSandboxRevertSnapshotAction.PARAM_VERSION, snapshotVersions.get(2).getVersion()); - - final WCMSandboxRevertSnapshotAction revertSnapshot = (WCMSandboxRevertSnapshotAction)ctx.getBean(WCMSandboxRevertSnapshotAction.NAME); - - class TxnWork implements RetryingTransactionCallback - { - public Object execute() throws Exception - { - revertSnapshot.execute(action, AVMNodeConverter.ToNodeRef(-1, stagingStoreId+":/")); - return null; - } - }; - TransactionService transactionService = (TransactionService) ctx.getBean("transactionService"); - transactionService.getRetryingTransactionHelper().doInTransaction(new TxnWork()); - - pollForSnapshotCount(stagingStoreId, 4); - - snapshotVersions = sbService.listSnapshots(stagingStoreId, false); - assertEquals(4, snapshotVersions.size()); - - changedAssets = sbService.listChanged(sbStoreId, JNDIConstants.DIR_DEFAULT_WWW, true); - assertEquals(0, changedAssets.size()); - - assertNull(assetService.getAssetWebApp(sbStoreId, webApp, "/a/b/c/foo")); - assertNull(assetService.getAssetWebApp(sbStoreId, webApp, "/a/b/c/bar")); - } - - public void testPseudoScaleTest() - { - long start = System.currentTimeMillis(); - - long split = start; - - for (int i = 1; i <= SCALE_USERS; i++) - { - createUser(TEST_USER+"-"+i); - } - - System.out.println("testPseudoScaleTest: created "+SCALE_USERS+" users in "+(System.currentTimeMillis()-split)+" msecs"); - - split = System.currentTimeMillis(); - - for (int i = 1; i <= SCALE_WEBPROJECTS; i++) - { - wpService.createWebProject(TEST_SANDBOX+"-"+i, TEST_WEBPROJ_NAME+"-"+i, TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); // ignore return - } - - System.out.println("testPseudoScaleTest: created "+SCALE_WEBPROJECTS+" web projects in "+(System.currentTimeMillis()-split)+" msecs"); - - split = System.currentTimeMillis(); - - for (int i = 1; i <= SCALE_WEBPROJECTS; i++) - { - WebProjectInfo wpInfo = wpService.getWebProject(TEST_SANDBOX+"-"+i); - Map userRoles = new HashMap(SCALE_USERS); - for (int j = 1; j <= SCALE_USERS; j++) - { - userRoles.put(TEST_USER+"-"+j, WCMUtil.ROLE_CONTENT_MANAGER); - } - wpService.inviteWebUsersGroups(wpInfo.getNodeRef(), userRoles, true); - } - - System.out.println("testPseudoScaleTest: invited "+SCALE_USERS+" content managers (and created user sandboxes) to each of "+SCALE_WEBPROJECTS+" web projects in "+(System.currentTimeMillis()-split)+" msecs"); - - split = System.currentTimeMillis(); - - for (int i = 1; i <= SCALE_WEBPROJECTS; i++) - { - WebProjectInfo wpInfo = wpService.getWebProject(TEST_SANDBOX+"-"+i); - assertEquals(SCALE_USERS+2, sbService.listSandboxes(wpInfo.getStoreId()).size()); // including staging sandbox and admin sandbox (web project creator) - } - - System.out.println("testPseudoScaleTest: list sandboxes for admin for each of "+SCALE_WEBPROJECTS+" web projects in "+(System.currentTimeMillis()-split)+" msecs"); - - split = System.currentTimeMillis(); - - for (int i = 1; i <= SCALE_WEBPROJECTS; i++) - { - WebProjectInfo wpInfo = wpService.getWebProject(TEST_SANDBOX+"-"+i); - assertEquals(SCALE_USERS+1, wpService.listWebUsers(wpInfo.getStoreId()).size()); // including admin user (web project creator) - } - - System.out.println("testPseudoScaleTest: list web users for admin for each of "+SCALE_WEBPROJECTS+" web projects in "+(System.currentTimeMillis()-split)+" msecs"); - - split = System.currentTimeMillis(); - - for (int i = 1; i <= SCALE_WEBPROJECTS; i++) - { - WebProjectInfo wpInfo = wpService.getWebProject(TEST_SANDBOX+"-"+i); - - for (int j = 1; j <= SCALE_USERS; j++) - { - AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER+"-"+j); - assertEquals(SCALE_USERS+2, sbService.listSandboxes(wpInfo.getStoreId()).size()); // including staging sandbox and admin sandbox (web project creator) - } - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - } - - System.out.println("testPseudoScaleTest: list sandboxes for "+SCALE_USERS+" content managers for each of "+SCALE_WEBPROJECTS+" web projects in "+(System.currentTimeMillis()-split)+" msecs"); - - split = System.currentTimeMillis(); - - for (int i = 1; i <= SCALE_WEBPROJECTS; i++) - { - WebProjectInfo wpInfo = wpService.getWebProject(TEST_SANDBOX+"-"+i); - - for (int j = 1; j <= SCALE_USERS; j++) - { - AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER+"-"+j); - assertEquals(SCALE_USERS+1, wpService.listWebUsers(wpInfo.getStoreId()).size()); // including admin user (web project creator) - } - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - } - - System.out.println("testPseudoScaleTest: list web users for "+SCALE_USERS+" content managers for each of "+SCALE_WEBPROJECTS+" web projects in "+(System.currentTimeMillis()-split)+" msecs"); - - split = System.currentTimeMillis(); - - for (int i = 1; i <= SCALE_WEBPROJECTS; i++) - { - WebProjectInfo wpInfo = wpService.getWebProject(TEST_SANDBOX+"-"+i); - - for (int j = 1; j <= SCALE_USERS; j++) - { - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpInfo.getStoreId(), TEST_USER+"-"+j); - sbService.deleteSandbox(sbInfo.getSandboxId()); - } - } - - System.out.println("testPseudoScaleTest: deleted "+SCALE_USERS+" author sandboxes for each of "+SCALE_WEBPROJECTS+" web projects in "+(System.currentTimeMillis()-split)+" msecs"); - - split = System.currentTimeMillis(); - - for (int i = 1; i <= SCALE_WEBPROJECTS; i++) - { - WebProjectInfo wpInfo = wpService.getWebProject(TEST_SANDBOX+"-"+i); - wpService.deleteWebProject(wpInfo.getNodeRef()); - } - - System.out.println("testPseudoScaleTest: deleted "+SCALE_WEBPROJECTS+" web projects in "+(System.currentTimeMillis()-split)+" msecs"); - - split = System.currentTimeMillis(); - - for (int i = 1; i <= SCALE_USERS; i++) - { - deleteUser(TEST_USER+"-"+i); - } - - System.out.println("testPseudoScaleTest: deleted "+SCALE_USERS+" users in "+(System.currentTimeMillis()-split)+" msecs"); - } - - - /* - // == Test the JavaScript API == - - public void testJSAPI() throws Exception - { - ScriptLocation location = new ClasspathScriptLocation("org/alfresco/wcm/script/test_sandboxService.js"); - scriptService.executeScript(location, new HashMap(0)); - } - */ - - protected void recursiveList(String store) - { - String list = recursiveList(store, -1, true); - if (logger.isDebugEnabled()) - { - logger.debug(store+":"); - logger.debug(list); - } - } - - /** - * Helper to write a recursive listing of an AVMStore at a given version. - * @param repoName The name of the AVMStore. - * @param version The version to look under. - */ - protected String recursiveList(String repoName, int version, boolean followLinks) - { - return recursiveList(repoName + ":/", version, 0, followLinks); - } - - /** - * Recursive list the given path. - * @param path The path. - * @param version The version. - * @param indent The current indent level. - */ - protected String recursiveList(String path, int version, int indent, boolean followLinks) - { - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < indent; i++) - { - builder.append(' '); - } - builder.append(path.substring(path.lastIndexOf('/') + 1)); - builder.append(' '); - AVMNodeDescriptor desc = avmService.lookup(version, path, true); - builder.append(desc.toString()); - builder.append('\n'); - if (desc.getType() == AVMNodeType.PLAIN_DIRECTORY || - (desc.getType() == AVMNodeType.LAYERED_DIRECTORY && followLinks)) - { - String basename = path.endsWith("/") ? path : path + "/"; - Map listing = avmService.getDirectoryListing(version, path); - for (String name : listing.keySet()) - { - if (logger.isTraceEnabled()) { logger.trace(name); } - builder.append(recursiveList(basename + name, version, indent + 2, followLinks)); - } - } - return builder.toString(); - } -} diff --git a/source/test-java/org/alfresco/wcm/webproject/WebProjectServiceImplTest.java b/source/test-java/org/alfresco/wcm/webproject/WebProjectServiceImplTest.java deleted file mode 100644 index abb7c88896..0000000000 --- a/source/test-java/org/alfresco/wcm/webproject/WebProjectServiceImplTest.java +++ /dev/null @@ -1,1330 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.wcm.webproject; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.transaction.UserTransaction; - -import org.alfresco.error.AlfrescoRuntimeException; -import org.alfresco.model.ContentModel; -import org.alfresco.repo.action.evaluator.NoConditionEvaluator; -import org.alfresco.repo.action.executer.CounterIncrementActionExecuter; -import org.alfresco.repo.rule.ruletrigger.CreateNodeRuleTrigger; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.security.permissions.AccessDeniedException; -import org.alfresco.service.ServiceRegistry; -import org.alfresco.service.cmr.action.Action; -import org.alfresco.service.cmr.action.ActionCondition; -import org.alfresco.service.cmr.action.ActionService; -import org.alfresco.service.cmr.avm.AVMExistsException; -import org.alfresco.service.cmr.avm.AVMNotFoundException; -import org.alfresco.service.cmr.avm.AVMService; -import org.alfresco.service.cmr.avm.AVMStoreDescriptor; -import org.alfresco.service.cmr.model.FileFolderService; -import org.alfresco.service.cmr.repository.DuplicateChildNodeNameException; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.cmr.repository.StoreRef; -import org.alfresco.service.cmr.rule.Rule; -import org.alfresco.service.cmr.rule.RuleService; -import org.alfresco.service.cmr.rule.RuleType; -import org.alfresco.service.cmr.search.SearchService; -import org.alfresco.service.cmr.security.AuthorityService; -import org.alfresco.service.cmr.security.AuthorityType; -import org.alfresco.service.cmr.security.PermissionService; -import org.alfresco.service.namespace.NamespaceService; -import org.alfresco.wcm.AbstractWCMServiceImplTest; -import org.alfresco.wcm.asset.AssetInfo; -import org.alfresco.wcm.sandbox.SandboxInfo; -import org.alfresco.wcm.util.WCMUtil; - -/** - * Web Project Service implementation unit test - * - * @author janv - */ -public class WebProjectServiceImplTest extends AbstractWCMServiceImplTest -{ - // web app names - private static final String TEST_WEBAPP = "myWebApp"; - - private static final String TEST_WEBAPP1 = TEST_WEBAPP+"-AppOne"; - private static final String TEST_WEBAPP2 = TEST_WEBAPP+"-AppTwo"; - private static final String TEST_WEBAPP3 = TEST_WEBAPP+"-AppThree"; - - // groups and additional users - private static final String TEST_GROUP = "testWebGroup-"+TEST_RUN; - - private static final String USER_FIVE = TEST_USER+"-Five"; - private static final String USER_SIX = TEST_USER+"-Six"; - - private static final String GROUP_ONE = TEST_GROUP+"-One"; - - private static final int SCALE_USERS = 5; - private static final int SCALE_WEBPROJECTS = 5; - private static final int SCALE_WEBAPPS = 5; - - // - // services - // - - private FileFolderService fileFolderService; - private AuthorityService authorityService; - private PermissionService permissionService; - private AVMService avmService; - private NodeService nodeService; - protected ActionService actionService; - protected RuleService ruleService; - protected SearchService searchService; - protected NamespaceService namespaceService; - - @Override - protected void setUp() throws Exception - { - super.setUp(); - - // Get the required services - ServiceRegistry serviceRegistry = (ServiceRegistry)ctx.getBean("ServiceRegistry"); - fileFolderService = (FileFolderService)ctx.getBean("FileFolderService"); - authorityService = (AuthorityService)ctx.getBean("AuthorityService"); - permissionService = (PermissionService)ctx.getBean("PermissionService"); - avmService = (AVMService)ctx.getBean("AVMService"); - nodeService = (NodeService)ctx.getBean("NodeService"); - actionService = (ActionService)ctx.getBean("actionService"); - ruleService = (RuleService)ctx.getBean("ruleService"); - searchService = (SearchService)ctx.getBean("searchService"); - namespaceService = serviceRegistry.getNamespaceService(); - - createUser(USER_FIVE); - createUser(USER_SIX); - - Set userNames = new HashSet(2); - userNames.add(USER_ONE); - userNames.add(USER_TWO); - - createSimpleGroup(GROUP_ONE, userNames); - } - - @Override - protected void tearDown() throws Exception - { - if (CLEAN) - { - // Switch back to Admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - deleteGroup(GROUP_ONE); - - deleteUser(USER_FIVE); - deleteUser(USER_SIX); - } - - super.tearDown(); - } - - private void createSimpleGroup(String shortName, Set userNames) - { - String groupName = authorityService.getName(AuthorityType.GROUP, shortName); - if (authorityService.authorityExists(groupName) == false) - { - authorityService.createAuthority(AuthorityType.GROUP, shortName); - - for (String userName : userNames) - { - authorityService.addAuthority(groupName, userName); - } - } - } - - private void deleteGroup(String shortName) - { - String groupName = authorityService.getName(AuthorityType.GROUP, shortName); - if (authorityService.authorityExists(groupName) == true) - { - authorityService.deleteAuthority(groupName); - } - } - - private NodeRef getCompanyHome() - { - NodeRef companyHomeRef; - - List refs = searchService.selectNodes( - nodeService.getRootNode(new StoreRef("workspace://SpacesStore")), - "app:company_home", - null, - namespaceService, - false); - if (refs.size() != 1) - { - throw new IllegalStateException("Invalid company home path: " + "app:company_home" + " - found: " + refs.size()); - } - companyHomeRef = refs.get(0); - - return companyHomeRef; - } - - @SuppressWarnings("unchecked") - protected Rule createTestRule(NodeRef nodeRef, boolean isAppliedToChildren, String title, NodeRef destFolder) - { - Map actionProps = new HashMap(); - RuleType ruleType = this.ruleService.getRuleType(RuleType.INBOUND); - List ruleTypes = new ArrayList(1); - ruleTypes.add(ruleType.getName()); - - // Create the action - Action action = this.actionService.createAction(CounterIncrementActionExecuter.NAME); - action.setParameterValues(actionProps); - - ActionCondition actionCondition = this.actionService.createActionCondition(NoConditionEvaluator.NAME); - actionCondition.setParameterValues(Collections.EMPTY_MAP); - action.addActionCondition(actionCondition); - - // Create the rule - Rule rule = new Rule(); - rule.setRuleTypes(ruleTypes); - rule.setTitle(title); - rule.setDescription(title); - rule.applyToChildren(isAppliedToChildren); - rule.setAction(action); - rule.setExecuteAsynchronously(false); - rule.setRuleDisabled(false); - - return rule; - } - - public void testALF906() throws Exception - { - UserTransaction txn = transactionService.getUserTransaction(); - - try - { - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - txn.begin(); - - NodeRef companyHome = getCompanyHome(); - - // Create a rule on workspace://SpacesStore/app:company_home - Rule newRule = createTestRule(companyHome, true, "ALF906", companyHome); - this.ruleService.saveRule(companyHome, newRule); - assertNotNull(newRule.getNodeRef()); - - // Check the owning node reference - assertNotNull(this.ruleService.getOwningNodeRef(newRule)); - assertEquals(companyHome, this.ruleService.getOwningNodeRef(newRule)); - - Rule savedRule = this.ruleService.getRule(newRule.getNodeRef()); - assertNotNull(savedRule); - - // Create a web project - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-create", TEST_WEBPROJ_NAME+"-create", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE, null); - - // get the rules for web projects root - should be 0 (no inherited rules) - List rules = ruleService.getRules(wpService.getWebProjectsRoot()); - assertEquals("Web project root has inherited rules", 0, rules.size()); - - // get the rules for the new web project - should be 0 (no inherited rules) - rules = ruleService.getRules(wpInfo.getNodeRef()); - assertEquals("Web project has inherited rules", 0, rules.size()); - } - finally - { - txn.rollback(); - } - } - - public void testHasWebProjectsRoot() - { - // make sure there is a "Web Projects" container node - assertTrue(wpService.hasWebProjectsRoot()); - } - - public void testCreateWebProjectSimple() - { - // Create a web project - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-webProjSimple", TEST_WEBPROJ_NAME+"-webProjSimple", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - assertNotNull(wpInfo); - } - - public void testCreateWebProject() - { - // Create a web project - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-create", TEST_WEBPROJ_NAME+"-create", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE, null); - checkWebProjectInfo(wpInfo, TEST_WEBPROJ_DNS+"-create", TEST_WEBPROJ_NAME+"-create", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE); - - // Duplicate web project dns/store name - try - { - // Try to create duplicate web project dns/store (-ve test) - wpService.createWebProject(TEST_WEBPROJ_DNS+"-create", TEST_WEBPROJ_NAME+"-x", TEST_WEBPROJ_TITLE+"x", TEST_WEBPROJ_DESCRIPTION+"x", TEST_WEBPROJ_DEFAULT_WEBAPP+"x", TEST_WEBPROJ_USE_AS_TEMPLATE, null); - fail("Shouldn't allow duplicate web project dns/store name"); - } - catch (AlfrescoRuntimeException exception) - { - // Expected - } - - // Duplicate web project folder/name - try - { - // Try to create duplicate web project folder/name (-ve test) - wpService.createWebProject(TEST_WEBPROJ_DNS+"x", TEST_WEBPROJ_NAME+"-create", TEST_WEBPROJ_TITLE+"x", TEST_WEBPROJ_DESCRIPTION+"x", TEST_WEBPROJ_DEFAULT_WEBAPP+"x", TEST_WEBPROJ_USE_AS_TEMPLATE, null); - fail("Shouldn't allow duplicate web project folder/name"); - } - catch (DuplicateChildNodeNameException exception) - { - // Expected - } - - // Mangled case - String dnsName = TEST_WEBPROJ_DNS+"-a.b.c"; - String name = dnsName + " name"; - String mangledDnsName = TEST_WEBPROJ_DNS+"-a-b-c"; - - wpInfo = wpService.createWebProject(dnsName, name, TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE, null); - checkWebProjectInfo(wpInfo, mangledDnsName, name, TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE); - wpInfo = wpService.getWebProject(mangledDnsName); - checkWebProjectInfo(wpInfo, mangledDnsName, name, TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE); - - // Another mangled case - dnsName = TEST_WEBPROJ_DNS+"-0é1í2ó3ú4"; - mangledDnsName = TEST_WEBPROJ_DNS+"-0-1-2-3-4"; - - name = dnsName + " name"; - - wpInfo = wpService.createWebProject(dnsName, name, TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE, null); - checkWebProjectInfo(wpInfo, mangledDnsName, name, TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE); - wpInfo = wpService.getWebProject(mangledDnsName); - checkWebProjectInfo(wpInfo, mangledDnsName, name, TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE); - - // Invalid dns name (with '--') - dnsName = "my--dns"; - name = dnsName + " name"; - try - { - // Try to create invalid web project with invalid dns name (-ve test) - wpInfo = wpService.createWebProject(dnsName, name, TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE, null); - fail("Shouldn't be able to create web project with '--'"); - } - catch (IllegalArgumentException exception) - { - // Expected - } - - // Invalid mangled case - dnsName = "!£$%^&*()_+=-[]{}"; // generates mangled dns name = x---------------x - name = dnsName + " name"; - try - { - // Try to create invalid web project (-ve test) - wpInfo = wpService.createWebProject(dnsName, name, TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE, null); - fail("Shouldn't be able to create web project with '--'"); - } - catch (IllegalArgumentException exception) - { - // Expected - } - } - - // note: requires "add_children" rights on "Web Projects" root space - // eg. DM coordinator, collaborator or contributor (not editor or consumer) - public void testCreateWebProjectAsNonAdmin() - { - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - try - { - // Try to create web project (-ve test) - wpService.createWebProject(TEST_WEBPROJ_DNS+"-createAsNonAdmin", TEST_WEBPROJ_NAME+"-createAsNonAdmin", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE, null); - fail("Shouldn't allow anyone to create web project by default"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Switch back to Admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - NodeRef wpRootNodeRef = wpService.getWebProjectsRoot(); - - // note: implies "coordinator", "collaborator" or "contributor" (not "editor" or "consumer") - see permissionsDefinition.xml - permissionService.setPermission(wpRootNodeRef, USER_ONE, PermissionService.ADD_CHILDREN, true); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // Create a web project - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-createAsNonAdmin", TEST_WEBPROJ_NAME+"-createAsNonAdmin", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE, null); - checkWebProjectInfo(wpInfo, TEST_WEBPROJ_DNS+"-createAsNonAdmin", TEST_WEBPROJ_NAME+"-createAsNonAdmin", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE); - - // test list and invite users - assertEquals(1, wpService.listWebUsers(wpInfo.getStoreId()).size()); - assertEquals(WCMUtil.ROLE_CONTENT_MANAGER, wpService.listWebUsers(wpInfo.getStoreId()).get(USER_ONE)); - - wpService.inviteWebUser(wpInfo.getStoreId(), USER_TWO, WCMUtil.ROLE_CONTENT_PUBLISHER); - - assertEquals(2, wpService.listWebUsers(wpInfo.getStoreId()).size()); - assertEquals(WCMUtil.ROLE_CONTENT_PUBLISHER, wpService.listWebUsers(wpInfo.getStoreId()).get(USER_TWO)); - - // Switch back to Admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - permissionService.setPermission(wpRootNodeRef, USER_TWO, PermissionService.EDITOR, true); - permissionService.setPermission(wpRootNodeRef, USER_THREE, PermissionService.CONSUMER, true); - - permissionService.setPermission(wpRootNodeRef, USER_FOUR, PermissionService.COORDINATOR, true); - permissionService.setPermission(wpRootNodeRef, USER_FIVE, PermissionService.CONTRIBUTOR, true); - permissionService.setPermission(wpRootNodeRef, USER_SIX, "Collaborator", true); - - // Switch to USER_TWO - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - try - { - // Try to create web project with "editor" rights to web project root (-ve test) - wpService.createWebProject(TEST_WEBPROJ_DNS+"-ano", TEST_WEBPROJ_NAME+"-ano", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE, null); - fail("Shouldn't allow anyone to create web project by default"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Switch to USER_THREE - AuthenticationUtil.setFullyAuthenticatedUser(USER_THREE); - - try - { - // Try to create web project with "comsumer" rights to web project root (-ve test) - wpService.createWebProject(TEST_WEBPROJ_DNS+"-ano", TEST_WEBPROJ_NAME+"-ano", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE, null); - fail("Shouldn't allow anyone to create web project by default"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Switch to USER_FOUR - AuthenticationUtil.setFullyAuthenticatedUser(USER_FOUR); - - // Create a web project - wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-createAsCoordinator", TEST_WEBPROJ_NAME+"-createAsCoordinator", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE, null); - checkWebProjectInfo(wpInfo, TEST_WEBPROJ_DNS+"-createAsCoordinator", TEST_WEBPROJ_NAME+"-createAsCoordinator", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE); - - } - - private void checkWebProjectInfo(WebProjectInfo wpInfo, String expectedStoreId, String expectedName, String expectedTitle, - String expectedDescription, String expectedDefaultWebApp, boolean expectedUseAsTemplate) - { - assertNotNull(wpInfo); - assertEquals(expectedStoreId, wpInfo.getStoreId()); - assertEquals(expectedName, wpInfo.getName()); - assertEquals(expectedTitle, wpInfo.getTitle()); - assertEquals(expectedDescription, wpInfo.getDescription()); - assertEquals(expectedDefaultWebApp, wpInfo.getDefaultWebApp()); - assertEquals(expectedUseAsTemplate, wpInfo.isTemplate()); - assertNotNull(wpInfo.getNodeRef()); - } - - public void testListWebProjects() throws Exception - { - // As admin, check for existing projects - List webProjects = wpService.listWebProjects(); - assertNotNull(webProjects); - int cnt = webProjects.size(); - - // Create some web projects - wpService.createWebProject(TEST_WEBPROJ_DNS+"-list1", TEST_WEBPROJ_NAME+" list1", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - wpService.createWebProject(TEST_WEBPROJ_DNS+"-list2", TEST_WEBPROJ_NAME+" list2", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, true, null); - wpService.createWebProject(TEST_WEBPROJ_DNS+"-list3", TEST_WEBPROJ_NAME+" list3", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - wpService.createWebProject(TEST_WEBPROJ_DNS+"-list4", TEST_WEBPROJ_NAME+" list4", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, true, null); - - // Get all the web projects for the current user - webProjects = wpService.listWebProjects(); - assertNotNull(webProjects); - assertEquals((cnt + 4), webProjects.size()); - - // Do detailed check of the web project info objects - for (WebProjectInfo wpInfo : webProjects) - { - String wpStoreId = wpInfo.getStoreId(); - if (wpStoreId.equals(TEST_WEBPROJ_DNS+"-list1") == true) - { - checkWebProjectInfo(wpInfo, TEST_WEBPROJ_DNS+"-list1", TEST_WEBPROJ_NAME+" list1", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, WCMUtil.DIR_ROOT, false); - } - else if (wpStoreId.equals(TEST_WEBPROJ_DNS+"-list2") == true) - { - checkWebProjectInfo(wpInfo, TEST_WEBPROJ_DNS+"-list2", TEST_WEBPROJ_NAME+" list2", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, true); - } - else if (wpStoreId.equals(TEST_WEBPROJ_DNS+"-list3") == true) - { - checkWebProjectInfo(wpInfo, TEST_WEBPROJ_DNS+"-list3", TEST_WEBPROJ_NAME+" list3", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, WCMUtil.DIR_ROOT, false); - } - else if (wpStoreId.equals(TEST_WEBPROJ_DNS+"-list4") == true) - { - checkWebProjectInfo(wpInfo, TEST_WEBPROJ_DNS+"-list4", TEST_WEBPROJ_NAME+" list4", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, true); - } - else - { - //fail("The web project store id " + wpStoreId + " is not recognised"); - System.out.println("The web project store id " + wpStoreId + " is not recognised"); - } - } - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // Get all the web projects for the current user - webProjects = wpService.listWebProjects(); - assertNotNull(webProjects); - - if (! webProjects.isEmpty()) - { - for (WebProjectInfo wpInfo : webProjects) - { - String wpStoreId = wpInfo.getStoreId(); - if (wpStoreId.equals(TEST_WEBPROJ_DNS+"-list-1") == true) - { - fail("User should not see "+TEST_WEBPROJ_DNS+"-list-1"); - } - else if (wpStoreId.equals(TEST_WEBPROJ_DNS+"-list-2") == true) - { - fail("User should not see "+TEST_WEBPROJ_DNS+"-list-2"); - } - else if (wpStoreId.equals(TEST_WEBPROJ_DNS+"-list-3") == true) - { - fail("User should not see "+TEST_WEBPROJ_DNS+"-list-3"); - } - else if (wpStoreId.equals(TEST_WEBPROJ_DNS+"-list-4") == true) - { - fail("User should not see "+TEST_WEBPROJ_DNS+"-list-4"); - } - } - } - - // Switch back to admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - webProjects = wpService.listWebProjects(); - cnt = webProjects.size(); - - NodeRef wpRoot = wpService.getWebProjectsRoot(); - - fileFolderService.create(wpRoot, "a folder "+TEST_RUN, ContentModel.TYPE_FOLDER); - fileFolderService.create(wpRoot, "some content "+TEST_RUN, ContentModel.TYPE_CONTENT); - - webProjects = wpService.listWebProjects(); - assertEquals(cnt, webProjects.size()); - } - - public void testGetWebProject() - { - // Get a web project that isn't there - WebProjectInfo wpInfo = wpService.getWebProject(TEST_WEBPROJ_DNS+"-get"); - assertNull(wpInfo); - - // Create a web project - wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-get", TEST_WEBPROJ_NAME+"-get", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE, null); - - // Get the web project - test using wpStoreId - wpInfo = wpService.getWebProject(wpInfo.getStoreId()); - assertNotNull(wpInfo); - checkWebProjectInfo(wpInfo, TEST_WEBPROJ_DNS+"-get", TEST_WEBPROJ_NAME+"-get", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE); - - // Get the web project - test using wpStoreNodeRef - wpInfo = wpService.getWebProject(wpInfo.getNodeRef()); - assertNotNull(wpInfo); - checkWebProjectInfo(wpInfo, TEST_WEBPROJ_DNS+"-get", TEST_WEBPROJ_NAME+"-get", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, TEST_WEBPROJ_USE_AS_TEMPLATE); - } - - public void testUpdateWebProject() - { - WebProjectInfo wpInfo = new WebProjectInfoImpl(TEST_WEBPROJ_DNS+"-update", TEST_WEBPROJ_NAME+"-update", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, false, null, null); - - try - { - // Try to update a web project that isn't there (-ve test) - wpService.updateWebProject(wpInfo); - fail("Shouldn't be able to update a web project that does not exist"); - } - catch (AlfrescoRuntimeException exception) - { - // Expected - } - - // Create a test web project - wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-update", TEST_WEBPROJ_NAME+"-update", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, true, null); - - wpInfo.setName("changedName"+TEST_RUN); - wpInfo.setTitle("changedTitle"); - wpInfo.setDescription("changedDescription"); - wpInfo.setIsTemplate(false); - - // Update the details of the web project - wpService.updateWebProject(wpInfo); - wpInfo = wpService.getWebProject(wpInfo.getStoreId()); - checkWebProjectInfo(wpInfo, TEST_WEBPROJ_DNS+"-update", "changedName"+TEST_RUN, "changedTitle", "changedDescription", TEST_WEBPROJ_DEFAULT_WEBAPP, false); - } - - public void testDeleteWebProject() - { - // Create a test web project - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-delete", TEST_WEBPROJ_NAME+"-delete", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, true, null); - String wpStoreId = wpInfo.getStoreId(); - assertNotNull(wpService.getWebProject(wpStoreId)); - - // Create ANOther web project - WebProjectInfo wpAnoInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-delete ano", TEST_WEBPROJ_NAME+"-delete ano", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, true, null); - String wpStoreAnoId = wpAnoInfo.getStoreId(); - - assertEquals(2, sbService.listSandboxes(wpStoreId).size()); - assertEquals(2, sbService.listSandboxes(wpStoreAnoId).size()); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - try - { - // Try to delete the web project as a non-content-manager (-ve test) - wpService.deleteWebProject(wpStoreId); - fail("Shouldn't be able to delete the web project since not a content manager"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Switch user to System - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName()); - - try - { - // Try to delete the web project as a non-content-manager (such as System) (-ve test) - wpService.deleteWebProject(wpStoreId); - fail("Shouldn't be able to delete the web project since not a content manager"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Switch back to admin - String adminUser = AuthenticationUtil.getAdminUserName(); - AuthenticationUtil.setFullyAuthenticatedUser(adminUser); - - String defaultWebApp = wpInfo.getDefaultWebApp(); - SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); - String authorSandboxId = sbInfo.getSandboxId(); - String authorSandboxPath = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - for (int i = 1; i <= 10; i++) - { - assetService.createFile(authorSandboxId, authorSandboxPath, "myFile-"+i, null); - - String relPath = authorSandboxPath + "/" + "myFile-"+i; - assertEquals(adminUser, avmLockingService.getLockOwner(wpStoreId, relPath)); - } - - // Delete the web project - wpService.deleteWebProject(wpStoreId); - assertNull(wpService.getWebProject(wpStoreId)); - - // Check locks have been removed - for (int i = 1; i <= 10; i++) - { - String relPath = authorSandboxPath + "/" + "myFile-"+i; - assertNull("Lock still exists: "+relPath, avmLockingService.getLockOwner(wpStoreId, relPath)); - } - - assertEquals(0, sbService.listSandboxes(wpStoreId).size()); - assertEquals(2, sbService.listSandboxes(wpStoreAnoId).size()); - - try - { - // Try to delete a web project that isn't there (-ve test) - wpService.deleteWebProject("someRandomWebProject"); - fail("Shouldn't be able to delete the web project since it does not exist (or is not visible to current user)"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Create another test web project - wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-delete2", TEST_WEBPROJ_NAME+"-delete2", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, true, null); - assertNotNull(wpService.getWebProject(wpInfo.getStoreId())); - - wpService.inviteWebUser(wpInfo.getNodeRef(), USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER, false); - - // Switch to USER_TWO - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - try - { - // Try to delete a web project that isn't there (-ve test) - wpService.deleteWebProject(TEST_WEBPROJ_DNS+"-delete2"); - fail("Shouldn't be able to delete the web project since it does not exist (or is not visible to current user)"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - // Delete the web project - wpService.deleteWebProject(TEST_WEBPROJ_DNS+"-delete2"); - - // Switch back to admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - // Create another test web project - wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-delete3", TEST_WEBPROJ_NAME+"-delete3", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, true, null); - wpStoreId = wpInfo.getStoreId(); - NodeRef wpNodeRef = wpInfo.getNodeRef(); - - defaultWebApp = wpInfo.getDefaultWebApp(); - - sbInfo = sbService.getAuthorSandbox(wpStoreId); - authorSandboxId = sbInfo.getSandboxId(); - - // no changes yet - List assets = sbService.listChangedAll(authorSandboxId, true); - assertEquals(0, assets.size()); - - authorSandboxPath = sbInfo.getSandboxRootPath() + "/" + defaultWebApp; - - for (int i = 1; i <= 100; i++) - { - assetService.createFile(authorSandboxId, authorSandboxPath, "myFile-"+i, null); - } - - sbService.submitAll(authorSandboxId, "s1", "s2"); - - // delete immediately - don't wait for async submit to finish - this should leave an in-flight workflow - - wpService.deleteWebProject(wpStoreId); - - List avmStores = avmService.getStores(); - for (AVMStoreDescriptor avmStore : avmStores) - { - assertFalse("Unexpected store: "+avmStore.getName(), avmStore.getName().startsWith(wpStoreId)); - } - - NodeRef wpArchiveNodeRef = new NodeRef(nodeService.getStoreArchiveNode(wpNodeRef.getStoreRef()).getStoreRef(), wpNodeRef.getId()); - assertFalse(nodeService.exists(wpArchiveNodeRef)); - - // TODO add more tests when WCM services explicitly support WCM workflows (eg. submit approval) - } - - public void testCreateWebApp() - { - // Create a web project with a default webapp - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-createWebApp", TEST_WEBPROJ_NAME+"-createWebApp", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBAPP1, TEST_WEBPROJ_USE_AS_TEMPLATE, null); - - // Switch user to System - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName()); - - try - { - // Try to create another webapp as a non-content-manager (such as System) (-ve test) - wpService.createWebApp(wpInfo.getStoreId(), TEST_WEBAPP2, TEST_WEBPROJ_DESCRIPTION); - fail("Shouldn't be able to create a webapp since not a content manager"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Switch back to admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - // Create another webapp - test using wpStoreId - wpService.createWebApp(wpInfo.getStoreId(), TEST_WEBAPP2, TEST_WEBPROJ_DESCRIPTION); - - try - { - // Try to create duplicate webapp (-ve test) - wpService.createWebApp(wpInfo.getStoreId(), TEST_WEBAPP2, TEST_WEBPROJ_DESCRIPTION); - fail("Shouldn't allow duplicate webapp name"); - } - catch (AVMExistsException exception) - { - // Expected - } - - // Create another webapp - test using wpNodeRef - wpService.createWebApp(wpInfo.getNodeRef(), TEST_WEBAPP3, TEST_WEBPROJ_DESCRIPTION); - } - - public void testListWebApps() - { - try - { - // Try to list webapps (-ve test) - wpService.listWebApps(new NodeRef("dummy://dummy/dummy")); - fail("Shouldn't be able to list webapps for a non-existent web project"); - } - catch (IllegalArgumentException exception) - { - // Expected - } - - // Create a web project with default ROOT webapp - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-listWebApps", TEST_WEBPROJ_NAME+"-listWebApps", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - NodeRef wpNodeRef = wpInfo.getNodeRef(); - - // List web apps - test using wpStoreId - List webAppNames = wpService.listWebApps(wpInfo.getStoreId()); - assertNotNull(webAppNames); - assertEquals(1, webAppNames.size()); - assertTrue(webAppNames.contains(WCMUtil.DIR_ROOT)); - - // List web apps - test using wpNodeRef - webAppNames = wpService.listWebApps(wpNodeRef); - assertNotNull(webAppNames); - assertEquals(1, webAppNames.size()); - assertTrue(webAppNames.contains(WCMUtil.DIR_ROOT)); - - // Create some more webapps - wpService.createWebApp(wpNodeRef, TEST_WEBAPP1, TEST_WEBPROJ_DESCRIPTION); - wpService.createWebApp(wpNodeRef, TEST_WEBAPP2, TEST_WEBPROJ_DESCRIPTION); - wpService.createWebApp(wpNodeRef, TEST_WEBAPP3, TEST_WEBPROJ_DESCRIPTION); - - webAppNames = wpService.listWebApps(wpNodeRef); - assertEquals(4, webAppNames.size()); - assertTrue(webAppNames.contains(WCMUtil.DIR_ROOT)); - assertTrue(webAppNames.contains(TEST_WEBAPP1)); - assertTrue(webAppNames.contains(TEST_WEBAPP2)); - assertTrue(webAppNames.contains(TEST_WEBAPP3)); - - wpService.deleteWebApp(wpNodeRef, TEST_WEBAPP1); - wpService.deleteWebApp(wpNodeRef, TEST_WEBAPP2); - - webAppNames = wpService.listWebApps(wpNodeRef); - assertEquals(2, webAppNames.size()); - assertTrue(webAppNames.contains(WCMUtil.DIR_ROOT)); - assertTrue(webAppNames.contains(TEST_WEBAPP3)); - } - - public void testDeleteWebApp() - { - // Create a webapp - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-deleteWebApp", TEST_WEBPROJ_NAME+"-deleteWebApp", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBAPP1, TEST_WEBPROJ_USE_AS_TEMPLATE, null); - - String wpStoreId = wpInfo.getStoreId(); - NodeRef wpNodeRef = wpInfo.getNodeRef(); - - // Create a webapp - wpService.createWebApp(wpNodeRef, TEST_WEBAPP2, TEST_WEBPROJ_DESCRIPTION); - - // Create another webapp - wpService.createWebApp(wpNodeRef, TEST_WEBAPP3, TEST_WEBPROJ_DESCRIPTION); - - // Switch user to System - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName()); - - try - { - // Try to delete the webapp a non-content-manager (such as System) (-ve test) - wpService.deleteWebApp(wpNodeRef, TEST_WEBAPP2); - fail("Shouldn't be able to delete the webapp since not a content manager"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Switch back to admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - try - { - // Try to delete default webapp (-ve test) - wpService.deleteWebApp(wpNodeRef, TEST_WEBAPP1); - fail("Shouldn't be able to delete the default webapp"); - } - catch (AlfrescoRuntimeException exception) - { - // Expected - } - - // Change default webapp - wpInfo = wpService.getWebProject(wpNodeRef); - wpInfo.setDefaultWebApp(TEST_WEBAPP3); - wpService.updateWebProject(wpInfo); - - // Delete non-default webapp - test using wpStoreId - wpService.deleteWebApp(wpStoreId, TEST_WEBAPP1); - - // Delete another webapp - test using wpNodeRef - wpService.deleteWebApp(wpNodeRef, TEST_WEBAPP2); - - try - { - // Try to delete last / default webapp (-ve test) - wpService.deleteWebApp(wpNodeRef, TEST_WEBAPP3); - fail("Shouldn't be able to delete the default webapp"); - } - catch (AlfrescoRuntimeException exception) - { - // Expected - } - - // TODO - Test delete of non-empty webapp - - try - { - // Try to delete a webapp that does not exist (-ve test) - wpService.deleteWebApp(wpNodeRef, "someRandomWebApp"); - fail("Shouldn't be able to delete the webapp since it does not exist"); - } - catch (AVMNotFoundException exception) - { - // Expected - } - } - - /** - * Test inviteWebUsers - */ - public void testMultiInviteAndListWebUsers() - { - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - List webProjects = wpService.listWebProjects(); - assertNotNull(webProjects); - int userOneWebProjectCount = webProjects.size(); - - // Switch back to admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - // Create a web project - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-inviteWebUsers", TEST_WEBPROJ_NAME+"-inviteWebUsers", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - NodeRef wpNodeRef = wpInfo.getNodeRef(); - - assertEquals(1, wpService.listWebUsers(wpNodeRef).size()); - assertEquals(WCMUtil.ROLE_CONTENT_MANAGER, wpService.listWebUsers(wpNodeRef).get(AuthenticationUtil.getAdminUserName())); - - Map userGroupRoles = new HashMap(); - userGroupRoles.put(USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER); - userGroupRoles.put(USER_TWO, WCMUtil.ROLE_CONTENT_PUBLISHER); - - // Invite web users - test using wpStoreId - wpService.inviteWebUsersGroups(wpInfo.getStoreId(), userGroupRoles); - - userGroupRoles = new HashMap(); - userGroupRoles.put(USER_THREE, WCMUtil.ROLE_CONTENT_REVIEWER); - - // Invite web users - test using wpNodeRef - wpService.inviteWebUsersGroups(wpNodeRef, userGroupRoles, false); - - assertEquals(4, wpService.listWebUsers(wpNodeRef).size()); - assertEquals(WCMUtil.ROLE_CONTENT_MANAGER, wpService.listWebUsers(wpNodeRef).get(AuthenticationUtil.getAdminUserName())); - assertEquals(WCMUtil.ROLE_CONTENT_MANAGER, wpService.listWebUsers(wpNodeRef).get(USER_ONE)); - assertEquals(WCMUtil.ROLE_CONTENT_PUBLISHER, wpService.listWebUsers(wpNodeRef).get(USER_TWO)); - assertEquals(WCMUtil.ROLE_CONTENT_REVIEWER, wpService.listWebUsers(wpNodeRef).get(USER_THREE)); - - // Switch to USER_ONE (a content manager for this web project) - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - webProjects = wpService.listWebProjects(); - assertEquals(userOneWebProjectCount+1, webProjects.size()); - - // Start: Test fix ETWOTWO-567 - - // Test newly invited content manager can invite other - userGroupRoles = new HashMap(); - userGroupRoles.put(USER_FIVE, WCMUtil.ROLE_CONTENT_CONTRIBUTOR); - - wpService.inviteWebUsersGroups(wpNodeRef, userGroupRoles, false); - - // Finish: Test fix ETWOTWO-567 - - // Switch back to admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - // Create a web project - wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-inviteWebUsers2", TEST_WEBPROJ_NAME+"-inviteWebUsers2", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - wpNodeRef = wpInfo.getNodeRef(); - - assertEquals(1, wpService.listWebUsers(wpNodeRef).size()); - assertEquals(WCMUtil.ROLE_CONTENT_MANAGER, wpService.listWebUsers(wpNodeRef).get(AuthenticationUtil.getAdminUserName())); - - userGroupRoles = new HashMap(); - - userGroupRoles.put(authorityService.getName(AuthorityType.GROUP, GROUP_ONE), WCMUtil.ROLE_CONTENT_PUBLISHER); - - // Invite group as a set of (flattened) web users - test using wpStoreId - wpService.inviteWebUsersGroups(wpInfo.getStoreId(), userGroupRoles); - - assertEquals(3, wpService.listWebUsers(wpNodeRef).size()); - assertEquals(WCMUtil.ROLE_CONTENT_MANAGER, wpService.listWebUsers(wpNodeRef).get(AuthenticationUtil.getAdminUserName())); - assertEquals(WCMUtil.ROLE_CONTENT_PUBLISHER, wpService.listWebUsers(wpNodeRef).get(USER_ONE)); - assertEquals(WCMUtil.ROLE_CONTENT_PUBLISHER, wpService.listWebUsers(wpNodeRef).get(USER_TWO)); - } - - /** - * Test inviteWebUser - and listWebProjects / listWebUsers / isWebUser - */ - public void testInviteAndListWebUsers() - { - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - List webProjects = wpService.listWebProjects(); - assertNotNull(webProjects); - int userOneWebProjectCount = webProjects.size(); - - // Switch back to admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - // Create a web project - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-inviteWebUser1", TEST_WEBPROJ_NAME+"-inviteWebUser1", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - NodeRef wpNodeRef = wpInfo.getNodeRef(); - - assertTrue(wpService.isWebUser(wpNodeRef, AuthenticationUtil.getAdminUserName())); - assertFalse(wpService.isWebUser(wpNodeRef, USER_ONE)); - - assertEquals(1, wpService.listWebUsers(wpNodeRef).size()); - assertEquals(WCMUtil.ROLE_CONTENT_MANAGER, wpService.listWebUsers(wpNodeRef).get(AuthenticationUtil.getAdminUserName())); - - // Invite one web user - test using wpStoreId - wpService.inviteWebUser(wpInfo.getStoreId(), USER_ONE, WCMUtil.ROLE_CONTENT_PUBLISHER); - - // Invite one web user - test using wpNodeRef - wpService.inviteWebUser(wpNodeRef, USER_TWO, WCMUtil.ROLE_CONTENT_MANAGER, true); - - assertEquals(3, wpService.listWebUsers(wpNodeRef).size()); - assertEquals(WCMUtil.ROLE_CONTENT_PUBLISHER, wpService.listWebUsers(wpNodeRef).get(USER_ONE)); - assertEquals(WCMUtil.ROLE_CONTENT_MANAGER, wpService.listWebUsers(wpNodeRef).get(USER_TWO)); - - assertTrue(wpService.isWebUser(wpInfo.getStoreId(), USER_ONE)); - assertTrue(wpService.isWebUser(wpNodeRef, USER_TWO)); - - // Create another web project - wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-inviteWebUser2", TEST_WEBPROJ_NAME+"-inviteWebUser2", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - NodeRef wpNodeRef2 = wpInfo.getNodeRef(); - - assertEquals(1, wpService.listWebUsers(wpNodeRef2).size()); - assertEquals(WCMUtil.ROLE_CONTENT_MANAGER, wpService.listWebUsers(wpNodeRef2).get(AuthenticationUtil.getAdminUserName())); - - assertFalse(wpService.isWebUser(wpInfo.getStoreId(), USER_ONE)); - assertFalse(wpService.isWebUser(wpNodeRef2, USER_TWO)); - - wpService.inviteWebUser(wpNodeRef2, USER_TWO, WCMUtil.ROLE_CONTENT_PUBLISHER, false); - wpService.inviteWebUser(wpNodeRef2, USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER, false); - - assertEquals(3, wpService.listWebUsers(wpNodeRef2).size()); - assertEquals(WCMUtil.ROLE_CONTENT_PUBLISHER, wpService.listWebUsers(wpNodeRef2).get(USER_TWO)); - assertEquals(WCMUtil.ROLE_CONTENT_MANAGER, wpService.listWebUsers(wpNodeRef2).get(USER_ONE)); - - assertTrue(wpService.isWebUser(wpInfo.getStoreId(), USER_ONE)); - assertTrue(wpService.isWebUser(wpNodeRef2, USER_TWO)); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - webProjects = wpService.listWebProjects(); - assertEquals(userOneWebProjectCount+2, webProjects.size()); - - // Switch to USER_TWO - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - try - { - // Try to invite web user as a non-content-manager (-ve test) - wpService.inviteWebUser(wpNodeRef2, USER_THREE, WCMUtil.ROLE_CONTENT_REVIEWER, false); - fail("Shouldn't be able to invite web user since not a content manager"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - /* System can invite due to ALFCOM-2388 - need to review System in general - // Switch user to System - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName()); - - try - { - // Try to invite web user as a non-content-manager (such as System) (-ve test) - wpService.inviteWebUser(wpNodeRef2, USER_THREE, WCMUtil.ROLE_CONTENT_REVIEWER, false); - fail("Shouldn't be able to invite web user since not a content manager"); - } - catch (AccessDeniedException exception) - { - // Expected - } - */ - - // Test newly invited content manager can invite other - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - assertFalse(wpService.isWebUser(wpNodeRef2, USER_THREE)); - - // Invite web user - wpService.inviteWebUser(wpNodeRef2, USER_THREE, WCMUtil.ROLE_CONTENT_REVIEWER, false); - - assertTrue(wpService.isWebUser(wpNodeRef2, USER_THREE)); - - // Switch back to admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - assertEquals(4, wpService.listWebUsers(wpNodeRef2).size()); - assertEquals(WCMUtil.ROLE_CONTENT_REVIEWER, wpService.listWebUsers(wpNodeRef2).get(USER_THREE)); - } - - /** - * Test uninviteWebUser - and listWebProjects / listWebUsers / isWebUser - */ - public void testUninviteAndListWebUsers() - { - // Switch to USER_FOUR - AuthenticationUtil.setFullyAuthenticatedUser(USER_FOUR); - - List webProjects = wpService.listWebProjects(); - assertNotNull(webProjects); - int userFourWebProjectCount = webProjects.size(); - - // Switch back to admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - // Create a web project - WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-uninviteWebUser", TEST_WEBPROJ_NAME+"-uninviteWebUser", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); - NodeRef wpNodeRef = wpInfo.getNodeRef(); - - assertEquals(1, wpService.listWebUsers(wpNodeRef).size()); - assertEquals(WCMUtil.ROLE_CONTENT_MANAGER, wpService.listWebUsers(wpNodeRef).get(AuthenticationUtil.getAdminUserName())); - - assertTrue(wpService.isWebUser(wpNodeRef, AuthenticationUtil.getAdminUserName())); - assertFalse(wpService.isWebUser(wpNodeRef, USER_FOUR)); - assertFalse(wpService.isWebUser(wpNodeRef, USER_ONE)); - - wpService.inviteWebUser(wpNodeRef, USER_FOUR, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, false); - - assertEquals(2, wpService.listWebUsers(wpNodeRef).size()); - assertEquals(WCMUtil.ROLE_CONTENT_CONTRIBUTOR, wpService.listWebUsers(wpNodeRef).get(USER_FOUR)); - assertTrue(wpService.isWebUser(wpNodeRef, USER_FOUR)); - - wpService.inviteWebUser(wpNodeRef, USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER, false); - - assertEquals(3, wpService.listWebUsers(wpNodeRef).size()); - assertEquals(WCMUtil.ROLE_CONTENT_MANAGER, wpService.listWebUsers(wpNodeRef).get(USER_ONE)); - assertTrue(wpService.isWebUser(wpNodeRef, USER_ONE)); - - // Switch to USER_FOUR - AuthenticationUtil.setFullyAuthenticatedUser(USER_FOUR); - - webProjects = wpService.listWebProjects(); - assertEquals(userFourWebProjectCount+1, webProjects.size()); - - // Switch to USER_TWO - AuthenticationUtil.setFullyAuthenticatedUser(USER_TWO); - - try - { - // Try to uninvite web user as a non-content-manager (-ve test) - wpService.uninviteWebUser(wpNodeRef, USER_FOUR, false); - fail("Shouldn't be able to uninvite web user since not a content manager"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Switch user to System - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName()); - - try - { - // Try to uninvite web user as a non-content-manager (such as System) (-ve test) - wpService.uninviteWebUser(wpNodeRef, USER_FOUR, false); - fail("Shouldn't be able to uninvite web user since not a content manager"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Switch back to admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - // Uninvite web user - test using wpStoreId - wpService.uninviteWebUser(wpInfo.getStoreId(), USER_FOUR); - - assertEquals(2, wpService.listWebUsers(wpNodeRef).size()); - assertEquals(null, wpService.listWebUsers(wpNodeRef).get(USER_FOUR)); - assertFalse(wpService.isWebUser(wpNodeRef, USER_FOUR)); - - // Switch to USER_FOUR - AuthenticationUtil.setFullyAuthenticatedUser(USER_FOUR); - - webProjects = wpService.listWebProjects(); - assertEquals(userFourWebProjectCount, webProjects.size()); - - // Switch back to admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - // Content manager can uninvite themself - // Uninvite web user - test using wpNodeRef - wpService.uninviteWebUser(wpNodeRef, AuthenticationUtil.getAdminUserName(), false); - - // Note: All admin authorities are implicitly a web user and content manager (across all web projects) even if not explicitly invited - assertEquals(1, wpService.listWebUsers(wpNodeRef).size()); - assertEquals(null, wpService.listWebUsers(wpNodeRef).get(AuthenticationUtil.getAdminUserName())); - assertTrue(wpService.isWebUser(wpNodeRef, AuthenticationUtil.getAdminUserName())); - assertTrue(wpService.isContentManager(wpNodeRef, AuthenticationUtil.getAdminUserName())); - - // Switch to USER_ONE - AuthenticationUtil.setFullyAuthenticatedUser(USER_ONE); - - assertEquals(1, wpService.listWebUsers(wpNodeRef).size()); - assertEquals(WCMUtil.ROLE_CONTENT_MANAGER, wpService.listWebUsers(wpNodeRef).get(USER_ONE)); - - // Delete user (in this case, last invited content manager) - wpService.uninviteWebUser(wpNodeRef, USER_ONE, false); - assertFalse(wpService.isWebUser(wpNodeRef, USER_ONE)); - - try - { - // Try to delete the web project as a non-content-manager (-ve test) - wpService.deleteWebProject(wpNodeRef); - fail("Shouldn't be able to delete the web project since not a content manager"); - } - catch (AccessDeniedException exception) - { - // Expected - } - - // Switch back to admin - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - - // Note: All admin authorities are implicitly a web user and content manager (across all web projects) even if not explicitly invited - assertEquals(0, wpService.listWebUsers(wpNodeRef).size()); - assertTrue(wpService.isWebUser(wpNodeRef, AuthenticationUtil.getAdminUserName())); - assertTrue(wpService.isContentManager(wpInfo.getStoreId(), AuthenticationUtil.getAdminUserName())); - - // delete web project - wpService.deleteWebProject(wpNodeRef); - } - - public void testPseudoScaleTest() - { - long start = System.currentTimeMillis(); - - long split = start; - - for (int i = 1; i <= SCALE_USERS; i++) - { - createUser(TEST_USER+"-"+i); - } - - System.out.println("testPseudoScaleTest: created "+SCALE_USERS+" users in "+(System.currentTimeMillis()-split)+" msecs"); - - split = System.currentTimeMillis(); - - for (int i = 1; i <= SCALE_WEBPROJECTS; i++) - { - wpService.createWebProject(TEST_WEBPROJ_DNS+"-"+i, TEST_WEBPROJ_NAME+"-"+i, TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION); // ignore return - } - - System.out.println("testPseudoScaleTest: created "+SCALE_WEBPROJECTS+" web projects in "+(System.currentTimeMillis()-split)+" msecs"); - - split = System.currentTimeMillis(); - - for (int i = 1; i <= SCALE_WEBPROJECTS; i++) - { - WebProjectInfo wpInfo = wpService.getWebProject(TEST_WEBPROJ_DNS+"-"+i); - for (int j = 1; j <= SCALE_WEBAPPS; j++) - { - wpService.createWebApp(wpInfo.getNodeRef(), TEST_WEBAPP+"-"+j, TEST_WEBAPP+"-"+j); - } - } - - System.out.println("testPseudoScaleTest: created additional "+SCALE_WEBAPPS+" web apps in each of "+SCALE_WEBPROJECTS+" web projects in "+(System.currentTimeMillis()-split)+" msecs"); - - split = System.currentTimeMillis(); - - for (int i = 1; i <= SCALE_WEBPROJECTS; i++) - { - WebProjectInfo wpInfo = wpService.getWebProject(TEST_WEBPROJ_DNS+"-"+i); - Map userRoles = new HashMap(SCALE_USERS); - for (int j = 1; j <= SCALE_USERS; j++) - { - userRoles.put(TEST_USER+"-"+j, WCMUtil.ROLE_CONTENT_MANAGER); - } - wpService.inviteWebUsersGroups(wpInfo.getNodeRef(), userRoles, false); - } - - System.out.println("testPseudoScaleTest: invited "+SCALE_USERS+" content managers to each of "+SCALE_WEBPROJECTS+" web projects in "+(System.currentTimeMillis()-split)+" msecs"); - - split = System.currentTimeMillis(); - - for (int i = 1; i <= SCALE_USERS; i++) - { - assertEquals(SCALE_WEBPROJECTS, wpService.listWebProjects(TEST_USER+"-"+i).size()); - } - - System.out.println("testPseudoScaleTest: list web projects for "+SCALE_USERS+" content managers in "+(System.currentTimeMillis()-split)+" msecs"); - - split = System.currentTimeMillis(); - - for (int i = 1; i <= SCALE_WEBPROJECTS; i++) - { - WebProjectInfo wpInfo = wpService.getWebProject(TEST_WEBPROJ_DNS+"-"+i); - wpService.deleteWebProject(wpInfo.getNodeRef()); - } - - System.out.println("testPseudoScaleTest: deleted "+SCALE_USERS+" web projects in "+(System.currentTimeMillis()-split)+" msecs"); - - split = System.currentTimeMillis(); - - for (int i = 1; i <= SCALE_USERS; i++) - { - deleteUser(TEST_USER+"-"+i); - } - - System.out.println("testPseudoScaleTest: deleted "+SCALE_USERS+" users in "+(System.currentTimeMillis()-split)+" msecs"); - } - - - /* - // == Test the JavaScript API == - - public void testJSAPI() throws Exception - { - ScriptLocation location = new ClasspathScriptLocation("org/alfresco/wcm/script/test_webProjectService.js"); - scriptService.executeScript(location, new HashMap(0)); - } - */ -} diff --git a/source/test-java/org/alfresco/wcm/webproject/script/ScriptWebProjectsTest.java b/source/test-java/org/alfresco/wcm/webproject/script/ScriptWebProjectsTest.java deleted file mode 100644 index 3ec0c9a069..0000000000 --- a/source/test-java/org/alfresco/wcm/webproject/script/ScriptWebProjectsTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.wcm.webproject.script; - -import java.util.HashMap; - -import org.alfresco.repo.jscript.ClasspathScriptLocation; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.service.cmr.repository.ScriptLocation; -import org.alfresco.service.cmr.repository.ScriptService; -import org.alfresco.wcm.AbstractWCMServiceImplTest; - -public class ScriptWebProjectsTest extends AbstractWCMServiceImplTest -{ - private ScriptService scriptService; - - protected void setUp() throws Exception - { - super.setUp(); - - this.scriptService = (ScriptService)ctx.getBean("ScriptService"); - - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); - } - - public void testJSAPI() throws Exception - { - ScriptLocation location = new ClasspathScriptLocation("org/alfresco/wcm/webproject/script/test_WebProjectService.js"); - this.scriptService.executeScript(location, new HashMap(0)); - } - -}