From b331e89f27ef1421fb7ab2861f8088a986ed12d1 Mon Sep 17 00:00:00 2001 From: Mark Rogers Date: Wed, 30 Apr 2014 16:09:00 +0000 Subject: [PATCH] Merged HEAD-BUG-FIX (4.3/Cloud) to HEAD (4.3/Cloud) 68118: Merged V4.2-BUG-FIX (4.2.3) to HEAD-BUG-FIX (4.3/Cloud) 67153: Merged DEV to V4.2-BUG-FIX (4.2.3) 67111 : MNT-10873 : Renaming folders while editing documents using webdav and Windows 7 can lead to 0k (empty) documents created in the trash can. - Empty documents are not archived eny more if were created in response to LOCK webdav method. - Unit test was implemented. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@68405 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/repo/webdav/LockMethod.java | 2 - .../alfresco/repo/webdav/LockMethodTest.java | 79 +++++++++++++++---- 2 files changed, 64 insertions(+), 17 deletions(-) diff --git a/source/java/org/alfresco/repo/webdav/LockMethod.java b/source/java/org/alfresco/repo/webdav/LockMethod.java index 505b707873..acc8560da4 100644 --- a/source/java/org/alfresco/repo/webdav/LockMethod.java +++ b/source/java/org/alfresco/repo/webdav/LockMethod.java @@ -18,7 +18,6 @@ */ package org.alfresco.repo.webdav; -import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Iterator; @@ -322,7 +321,6 @@ public class LockMethod extends WebDAVMethod { public String execute() throws Throwable { - getNodeService().removeAspect(nodeRef, ContentModel.ASPECT_WEBDAV_NO_CONTENT); getNodeService().deleteNode(nodeRef); if (logger.isDebugEnabled()) { diff --git a/source/test-java/org/alfresco/repo/webdav/LockMethodTest.java b/source/test-java/org/alfresco/repo/webdav/LockMethodTest.java index 8e24812cbb..427360cd0c 100644 --- a/source/test-java/org/alfresco/repo/webdav/LockMethodTest.java +++ b/source/test-java/org/alfresco/repo/webdav/LockMethodTest.java @@ -26,6 +26,8 @@ import static org.junit.Assert.assertTrue; import java.io.Serializable; import java.util.Collections; +import javax.servlet.http.HttpServletResponse; + import org.alfresco.model.ContentModel; import org.alfresco.repo.security.authentication.AuthenticationComponent; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; @@ -81,14 +83,11 @@ public class LockMethodTest * Types and properties used by the tests */ private static final String CONTENT_1 = "This is some content"; - private static final String TEST_STORE_IDENTIFIER = "test_store-" + System.currentTimeMillis(); - private static final String TEST_FILE_NAME = "file"; + private static final String TEST_FILE_NAME = "file" + GUID.generate(); /** * Data used by the tests */ - private StoreRef storeRef; - private NodeRef rootNodeRef; private NodeRef folderNodeRef; private NodeRef fileNodeRef; @@ -120,13 +119,7 @@ public class LockMethodTest @Override public Void execute() throws Throwable { - // Create the store and get the root node reference - storeRef = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, TEST_STORE_IDENTIFIER); - if (!nodeService.exists(storeRef)) - { - storeRef = nodeService.createStore(StoreRef.PROTOCOL_WORKSPACE, TEST_STORE_IDENTIFIER); - } - rootNodeRef = nodeService.getRootNode(storeRef); + NodeRef rootNodeRef = nodeService.getRootNode(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); // Create and authenticate the user userName = "webdavLockTest" + GUID.generate(); @@ -162,19 +155,19 @@ public class LockMethodTest // delete test store as system user this.authenticationComponent.setSystemUserAsCurrentUser(); - RetryingTransactionCallback deleteStoreCallback = new RetryingTransactionCallback() + RetryingTransactionCallback deleteTestFolderCallback = new RetryingTransactionCallback() { @Override public Void execute() throws Throwable { - if (nodeService.exists(storeRef)) + if (nodeService.exists(folderNodeRef)) { - nodeService.deleteStore(storeRef); + nodeService.deleteNode(folderNodeRef); } return null; } }; - this.transactionService.getRetryingTransactionHelper().doInTransaction(deleteStoreCallback); + this.transactionService.getRetryingTransactionHelper().doInTransaction(deleteTestFolderCallback); } @Test @@ -289,4 +282,60 @@ public class LockMethodTest // check that lock information is not there for expired lock assertTrue("Propfind response should not conatain information about expired lock", response.indexOf("lockdiscovery") == -1); } + + @Test + public void testMNT_10873() throws Exception + { + String fileName = TEST_FILE_NAME + GUID.generate(); + final MockHttpServletRequest lockRequest = new MockHttpServletRequest(); + MockHttpServletResponse lockResponse = new MockHttpServletResponse(); + lockRequest.addHeader(WebDAV.HEADER_TIMEOUT, WebDAV.SECOND + 5); + // set request uri to point to non-existent file + lockRequest.setRequestURI("/" + fileName); + + String content = "" + + "" + + "" + userName + ""; + + lockRequest.setContent(content.getBytes("UTF-8")); + + lockMethod.setDetails(lockRequest, lockResponse, davHelper, folderNodeRef); + lockMethod.parseRequestHeaders(); + lockMethod.parseRequestBody(); + + RetryingTransactionCallback lockExecuteImplCallBack = new RetryingTransactionCallback() + { + @Override + public Void execute() throws Throwable + { + lockMethod.executeImpl(); + return null; + } + }; + + // lock node for 5 seconds + this.transactionService.getRetryingTransactionHelper().doInTransaction(lockExecuteImplCallBack); + + assertEquals("Unexpected response status code.", HttpServletResponse.SC_CREATED, lockResponse.getStatus()); + + RetryingTransactionCallback getNodeRefCallback = new RetryingTransactionCallback() + { + @Override + public NodeRef execute() throws Throwable + { + return lockMethod.getNodeForPath(folderNodeRef, lockRequest.getRequestURI()).getNodeRef(); + } + }; + + NodeRef nodeRef = this.transactionService.getRetryingTransactionHelper().doInTransaction(getNodeRefCallback); + + assertTrue("NodeRef should exists.", nodeService.exists(nodeRef)); + assertTrue("sys:webdavNoContent aspect should be applied on node.", nodeService.hasAspect(nodeRef, ContentModel.ASPECT_WEBDAV_NO_CONTENT)); + + // sleep for 6 seconds to ensure that timer was triggered + Thread.sleep(6000); + + assertFalse("File should note exist in repo any more.", nodeService.exists(nodeRef)); + assertFalse("File should note exist in trashcan.", nodeService.exists(new NodeRef(StoreRef.STORE_REF_ARCHIVE_SPACESSTORE, nodeRef.getId()))); + } }