diff --git a/source/java/org/alfresco/wcm/AbstractWCMServiceImplTest.java b/source/java/org/alfresco/wcm/AbstractWCMServiceImplTest.java index 0e4d011f20..931774add7 100644 --- a/source/java/org/alfresco/wcm/AbstractWCMServiceImplTest.java +++ b/source/java/org/alfresco/wcm/AbstractWCMServiceImplTest.java @@ -28,6 +28,7 @@ import java.util.List; import junit.framework.TestCase; +import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; @@ -36,11 +37,13 @@ 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.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; @@ -51,12 +54,17 @@ import org.springframework.context.support.ClassPathXmlApplicationContext; */ public class AbstractWCMServiceImplTest extends TestCase { + private 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 5s (was 1.5m) for WCM unit tests private static final String SUBMIT_CONFIG_LOCATION = "classpath:wcm/wcm-jbpm-context.xml"; protected static final long SUBMIT_DELAY = 15000L; // (in millis) 15s - to allow async submit direct workflow to complete (as per 5s idleInterval above) + protected static final long POLL_DELAY = 5000L; // (in millis) 5s + protected static final int POLL_MAX_ATTEMPTS = 5; + // 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});; @@ -179,4 +187,42 @@ public class AbstractWCMServiceImplTest extends TestCase { 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 > POLL_MAX_ATTEMPTS) + { + throw new AlfrescoRuntimeException("Too many poll attempts"); + } + } + } + finally + { + AuthenticationUtil.setFullyAuthenticatedUser(currentUser); + } + + logger.debug("pollForSnapshotCount: "+stagingStoreId+" in "+(System.currentTimeMillis()-start)+" msecs ("+attempts+" attempts)"); + + return attempts; + } } diff --git a/source/java/org/alfresco/wcm/asset/AssetServiceImplTest.java b/source/java/org/alfresco/wcm/asset/AssetServiceImplTest.java index 1fd43f376f..b3cd4e149a 100644 --- a/source/java/org/alfresco/wcm/asset/AssetServiceImplTest.java +++ b/source/java/org/alfresco/wcm/asset/AssetServiceImplTest.java @@ -45,6 +45,8 @@ 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 @@ -53,12 +55,12 @@ import org.alfresco.wcm.webproject.WebProjectInfo; */ 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 { @@ -384,6 +386,7 @@ public class AssetServiceImplTest extends AbstractWCMServiceImplTest String wpStoreId = wpInfo.getStoreId(); String defaultWebApp = wpInfo.getDefaultWebApp(); + String stagingStoreId = wpInfo.getStagingStoreName(); // get admin sandbox SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); @@ -404,7 +407,7 @@ public class AssetServiceImplTest extends AbstractWCMServiceImplTest sbService.submitWebApp(sbStoreId, defaultWebApp, "some existing folders and files", null); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingStoreId, 1); runCRUDforRoles(USER_ONE, WCMUtil.ROLE_CONTENT_MANAGER, wpStoreId, defaultWebApp, true, true, true); @@ -414,8 +417,8 @@ public class AssetServiceImplTest extends AbstractWCMServiceImplTest runCRUDforRoles(USER_FOUR, WCMUtil.ROLE_CONTENT_CONTRIBUTOR, wpStoreId, defaultWebApp, true, false, false); } - - private void runCRUDforRoles(String user, String role, String wpStoreId, String defaultWebApp, boolean canCreate, boolean canUpdateExisting, boolean canDeleteExisting) throws IOException, InterruptedException + + 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()); @@ -425,7 +428,10 @@ public class AssetServiceImplTest extends AbstractWCMServiceImplTest // 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(); @@ -658,10 +664,18 @@ public class AssetServiceImplTest extends AbstractWCMServiceImplTest } } + // switch to admin (content manager) + AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); + + int snapCnt = sbService.listSnapshots(wpStoreId, false).size(); + + // switch to user + AuthenticationUtil.setFullyAuthenticatedUser(user); + // submit the changes sbService.submitWebApp(sbStoreId, defaultWebApp, "some updates by "+user, null); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingStoreId, snapCnt+1); } public void testRenameFile() @@ -921,6 +935,9 @@ public class AssetServiceImplTest extends AbstractWCMServiceImplTest 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); @@ -955,7 +972,7 @@ public class AssetServiceImplTest extends AbstractWCMServiceImplTest sbService.submitWebApp(sbStoreId, defaultWebApp, "submit1 label", "submit1 comment"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingStoreId, 1); assertNull(assetService.getLockOwner(myFile1Asset)); @@ -1076,6 +1093,9 @@ public class AssetServiceImplTest extends AbstractWCMServiceImplTest 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); @@ -1115,7 +1135,7 @@ public class AssetServiceImplTest extends AbstractWCMServiceImplTest sbService.submitWebApp(sbStoreId, defaultWebApp, "submit1 label", "submit1 comment"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingStoreId, 1); assertNull(assetService.getLockOwner(myFile1Asset)); assertTrue(assetService.hasLockAccess(myFile1Asset)); @@ -1135,6 +1155,9 @@ public class AssetServiceImplTest extends AbstractWCMServiceImplTest 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(); @@ -1176,7 +1199,8 @@ public class AssetServiceImplTest extends AbstractWCMServiceImplTest // partial submit with new folder sbService.submitListAssets(sbStoreId, selectedAssetsToSubmit, "submit1 label", "submit1 comment"); - Thread.sleep(SUBMIT_DELAY); + + pollForSnapshotCount(stagingStoreId, 1); changedAssets = sbService.listChangedWebApp(sbStoreId, defaultWebApp, false); assertEquals(1, changedAssets.size()); @@ -1188,15 +1212,22 @@ public class AssetServiceImplTest extends AbstractWCMServiceImplTest assertTrue(assetService.hasLockAccess(myFile2Asset)); } - public void testSimpleImport() + // 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); @@ -1206,14 +1237,120 @@ public class AssetServiceImplTest extends AbstractWCMServiceImplTest 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++; + } } } diff --git a/source/java/org/alfresco/wcm/sandbox/SandboxServiceImplTest.java b/source/java/org/alfresco/wcm/sandbox/SandboxServiceImplTest.java index 498adddf9b..22fede475b 100644 --- a/source/java/org/alfresco/wcm/sandbox/SandboxServiceImplTest.java +++ b/source/java/org/alfresco/wcm/sandbox/SandboxServiceImplTest.java @@ -916,7 +916,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // submit (new assets) ! sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxId, 1); assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); assertEquals(0, assets.size()); @@ -1033,7 +1033,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); writer.setEncoding("UTF-8"); writer.putContent(MYFILE2); - + assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); assertEquals(2, assets.size()); @@ -1044,7 +1044,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // submit (new assets) ! sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxId, 1); assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); assertEquals(0, assets.size()); @@ -1069,13 +1069,13 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest 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()); @@ -1099,7 +1099,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // submit (modified assets) ! sbService.submitWebApp(authorSandboxId, webApp, "my label", null); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxId, 2); assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); assertEquals(0, assets.size()); @@ -1162,7 +1162,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // submit (new assets) ! sbService.submitAll(authorSandboxId, "a submit label", "a submit comment"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxId, 1); // check staging after List listing = assetService.listAssets(stagingSandboxId, -1, rootPath, false); @@ -1196,11 +1196,11 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // submit all (modified assets) ! sbService.submitAll(authorSandboxId, "my label", null); - Thread.sleep(SUBMIT_DELAY); + 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' @@ -1228,7 +1228,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // no changes yet List assets = sbService.listChangedAll(authorSandboxId, true); assertEquals(0, assets.size()); - + String authorSandboxPath = sbInfo.getSandboxRootPath() + "/" + webApp; final String MYFILE1 = "This is myFile1"; @@ -1256,7 +1256,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // submit (new assets) ! sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxId, 1); assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); assertEquals(0, assets.size()); @@ -1274,7 +1274,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // no changes yet assets = sbService.listChangedAll(authorSandboxId, true); assertEquals(0, assets.size()); - + //authorSandboxWebppPath = authorSandboxId + AVM_STORE_SEPARATOR + sbInfo.getSandboxRootPath() + "/" + webApp; @@ -1300,7 +1300,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // submit (deleted assets) ! sbService.submitWebApp(authorSandboxId, webApp, "my label", null); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxId, 2); assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); assertEquals(0, assets.size()); @@ -1356,7 +1356,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // submit (new assets) ! sbService.submitWebApp(authorSandboxIdA, webAppA, "A1", "A1"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxIdA, 1); assets = sbService.listChangedWebApp(authorSandboxIdA, webAppA, false); assertEquals(0, assets.size()); @@ -1406,7 +1406,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // submit (modified asset) sbService.submitWebApp(authorSandboxIdB, webAppB, "B1", "B1"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxIdB, 1); // Switch back to Web Project A @@ -1416,7 +1416,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // submit (deleted asset) sbService.submitWebApp(authorSandboxIdA, webAppA, "A2", "A2"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxIdA, 1); // Switch back to Web Project B @@ -1427,7 +1427,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // ETHREEOH_2581 sbService.submitWebApp(authorSandboxIdB, webAppB, "B2", "B2"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxIdB, 1); } public void testSubmitUpdatedItemWithLF() throws IOException, InterruptedException @@ -1470,7 +1470,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // submit (new assets) ! sbService.submitWebApp(authorSandboxIdA, webAppA, "A1", "A1"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxIdA, 1); assets = sbService.listChangedWebApp(authorSandboxIdA, webAppA, false); assertEquals(0, assets.size()); @@ -1529,7 +1529,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest assertEquals(AVMDifference.NEWER, assets.get(0).getDiffCode()); // wait for submit to complete - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxIdB, 1); assets = sbService.listChangedWebApp(authorSandboxIdB, webAppB, false); assertEquals(0, assets.size()); @@ -1577,7 +1577,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // submit (new assets) ! sbService.submitWebApp(authorSandboxIdA, webAppA, "A1", "A1"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxIdA, 1); assets = sbService.listChangedWebApp(authorSandboxIdA, webAppA, false); assertEquals(0, assets.size()); @@ -1623,7 +1623,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // submit (deleted asset) sbService.submitWebApp(authorSandboxIdB, webAppB, "B2", "B2"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxIdB, 1); assertEquals(0, sbService.listChangedAll(authorSandboxIdB, true).size()); @@ -1672,7 +1672,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // submit (new assets) ! sbService.submitWebApp(authorSandboxIdA, webAppA, "A1", "A1"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxIdA, 1); assets = sbService.listChangedWebApp(authorSandboxIdA, webAppA, false); assertEquals(0, assets.size()); @@ -1732,7 +1732,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest recursiveList(stagingSandboxIdB); recursiveList(authorSandboxIdB); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxIdB, 1); logger.debug("submit completed: created file b.txt in B staging sandbox"); @@ -1763,7 +1763,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest recursiveList(stagingSandboxIdB); recursiveList(authorSandboxIdB); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxIdB, 2); logger.debug("submit completed: deleted file a.txt in B staging sandbox"); @@ -1828,7 +1828,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // submit (new assets) ! sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxId, 1); assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); assertEquals(0, assets.size()); @@ -1979,7 +1979,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // 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"); @@ -1997,7 +1997,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // submit (new assets) ! sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxId, 1); assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); assertEquals(0, assets.size()); @@ -2011,11 +2011,11 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // more changes ... assetService.createFolderWebApp(authorSandboxId, webApp, "/", "myDir4"); - + // submit (new assets) ! sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxId, 2); // check staging after listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); @@ -2051,7 +2051,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // no changes yet List assets = sbService.listChangedAll(authorSandboxId, true); assertEquals(0, assets.size()); - + String authorSandboxPath = sbInfo.getSandboxRootPath() + "/" + webApp; assetService.createFolder(authorSandboxId, authorSandboxPath, "myDir1", null); @@ -2069,7 +2069,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // submit (new assets) ! sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxId, 1); assets = sbService.listChangedWebApp(authorSandboxId, webApp, false); assertEquals(0, assets.size()); @@ -2094,11 +2094,11 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // more changes ... assetService.createFolder(authorSandboxId, authorSandboxPath, "myDir2", null); - + // submit (new assets) ! sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxId, 2); // check staging after listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); @@ -2124,11 +2124,11 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // more changes ... assetService.createFolderWebApp(authorSandboxId, webApp, "/", "myDir3"); - + // submit (new assets) ! sbService.submitWebApp(authorSandboxId, webApp, "a submit label", "a submit comment"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxId, 3); // check staging after listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); @@ -2208,8 +2208,9 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest assertEquals(0, sbVersions.size()); assetService.createFile(authorSandboxId, authorSandboxPath, "c1.txt", null); - sbService.submitWebApp(authorSandboxId, webApp, "s1", "s1"); - Thread.sleep(SUBMIT_DELAY); + sbService.submitWebApp(authorSandboxId, webApp, "s1", "s1"); + + pollForSnapshotCount(stagingSandboxId, 1); List listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); assertEquals(1, listing.size()); @@ -2226,8 +2227,9 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest } assetService.createFile(authorSandboxId, authorSandboxPath, "c2.txt", null); - sbService.submitWebApp(authorSandboxId, webApp, "s2", "s2"); - Thread.sleep(SUBMIT_DELAY); + sbService.submitWebApp(authorSandboxId, webApp, "s2", "s2"); + + pollForSnapshotCount(stagingSandboxId, 2); listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); assertEquals(2, listing.size()); @@ -2251,8 +2253,9 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest int snapshotVersionId2 = sbVersions.get(0).getVersion(); assetService.createFile(authorSandboxId, authorSandboxPath, "c3.txt", null); - sbService.submitWebApp(authorSandboxId, webApp, "s3", "s3"); - Thread.sleep(SUBMIT_DELAY); + sbService.submitWebApp(authorSandboxId, webApp, "s3", "s3"); + + pollForSnapshotCount(stagingSandboxId, 3); listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); assertEquals(3, listing.size()); @@ -2280,8 +2283,9 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest int snapshotVersionId3 = sbVersions.get(0).getVersion(); assetService.createFile(authorSandboxId, authorSandboxPath, "c4.txt", null); - sbService.submitWebApp(authorSandboxId, webApp, "s4", "s4"); - Thread.sleep(SUBMIT_DELAY); + sbService.submitWebApp(authorSandboxId, webApp, "s4", "s4"); + + pollForSnapshotCount(stagingSandboxId, 4); listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); assertEquals(4, listing.size()); @@ -2311,8 +2315,9 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest AssetInfo file = assetService.getAsset(authorSandboxId, authorSandboxPath+"/c2.txt"); assetService.deleteAsset(file); - sbService.submitWebApp(authorSandboxId, webApp, "s5", "s5"); - Thread.sleep(SUBMIT_DELAY); + sbService.submitWebApp(authorSandboxId, webApp, "s5", "s5"); + + pollForSnapshotCount(stagingSandboxId, 5); listing = assetService.listAssets(stagingSandboxId, -1, stagingSandboxPath, false); assertEquals(3, listing.size()); @@ -2390,7 +2395,8 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest { 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 webApp = wpInfo.getDefaultWebApp(); + String stagingSandboxId = wpInfo.getStagingStoreName(); SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); final String sbStoreId = sbInfo.getSandboxId(); @@ -2426,7 +2432,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest // first submit - all (note: within /www/avm_webapps) transactionService.getRetryingTransactionHelper().doInTransaction(new TxnWork()); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxId, 1); assetService.createFile(sbStoreId, JNDIConstants.DIR_DEFAULT_WWW, "figs", null); @@ -2459,7 +2465,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest transactionService.getRetryingTransactionHelper().doInTransaction(new TxnWork()); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxId, 2); changedAssets = sbService.listChanged(sbStoreId, JNDIConstants.DIR_DEFAULT_WWW, true); assertEquals(0, changedAssets.size()); @@ -2470,7 +2476,8 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest { 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 webApp = wpInfo.getDefaultWebApp(); + String stagingSandboxId = wpInfo.getStagingStoreName(); SandboxInfo sbInfo = sbService.getAuthorSandbox(wpStoreId); final String sbStoreId = sbInfo.getSandboxId(); @@ -2487,7 +2494,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest sbService.submitWebApp(sbStoreId, webApp, "submitLabel", "submitDescription"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxId, 1); assetService.createFileWebApp(sbStoreId, webApp, "/a/b/c", "foo"); @@ -2499,7 +2506,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest sbService.submitWebApp(sbStoreId, webApp, "submitLabel", "submitDescription"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxId, 2); assetService.createFileWebApp(sbStoreId, webApp, "/a/b/c", "bar"); @@ -2535,7 +2542,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest TransactionService transactionService = (TransactionService) ctx.getBean("transactionService"); transactionService.getRetryingTransactionHelper().doInTransaction(new TxnWork()); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingSandboxId, 3); snapshotVersions = sbService.listSnapshots(sbStoreId, false); assertEquals(2, snapshotVersions.size()); @@ -2569,7 +2576,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest sbService.submitWebApp(sbStoreId, webApp, "submitLabel", "submitDescription"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingStoreId, 1); assetService.createFileWebApp(sbStoreId, webApp, "/a/b/c", "foo"); @@ -2581,7 +2588,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest sbService.submitWebApp(sbStoreId, webApp, "submitLabel", "submitDescription"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingStoreId, 2); assetService.createFileWebApp(sbStoreId, webApp, "/a/b/c", "bar"); @@ -2593,7 +2600,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest sbService.submitWebApp(sbStoreId, webApp, "submitLabel", "submitDescription"); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingStoreId, 3); List snapshotVersions = sbService.listSnapshots(stagingStoreId, false); assertEquals(3, snapshotVersions.size()); @@ -2617,7 +2624,7 @@ public class SandboxServiceImplTest extends AbstractWCMServiceImplTest TransactionService transactionService = (TransactionService) ctx.getBean("transactionService"); transactionService.getRetryingTransactionHelper().doInTransaction(new TxnWork()); - Thread.sleep(SUBMIT_DELAY); + pollForSnapshotCount(stagingStoreId, 4); snapshotVersions = sbService.listSnapshots(stagingStoreId, false); assertEquals(4, snapshotVersions.size());