Author: jens
Date: Tue Aug 23 14:23:57 2016
New Revision: 1757381

URL: http://svn.apache.org/viewvc?rev=1757381&view=rev
Log:
InMemory: improve validation of documents that are checked-in

Modified:
    
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java
    
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclPermissionsTest.java
    
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersioningTest.java
    
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTestDataCreator.java

Modified: 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java
URL: 
http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java?rev=1757381&r1=1757380&r2=1757381&view=diff
==============================================================================
--- 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java
 (original)
+++ 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryVersioningServiceImpl.java
 Tue Aug 23 14:23:57 2016
@@ -91,6 +91,13 @@ public class InMemoryVersioningServiceIm
 
         String user = context.getUsername();
         VersionedDocument verDoc = testHasProperCheckedOutStatus(so, user);
+        
+        DocumentVersion pwc = verDoc.getPwc();
+        if (pwc == null || !pwc.getId().equals(objectId.getValue())) {
+            throw new CmisConstraintException("Error: Can't checkin, " + 
objectId
+            + " is not a private working copy.");              
+        }
+
 
         // check if the contentStream is a usable object or ignore it otherwise
         // Note Browser binding sets an empty object

Modified: 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclPermissionsTest.java
URL: 
http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclPermissionsTest.java?rev=1757381&r1=1757380&r2=1757381&view=diff
==============================================================================
--- 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclPermissionsTest.java
 (original)
+++ 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AclPermissionsTest.java
 Tue Aug 23 14:23:57 2016
@@ -757,7 +757,8 @@ public class AclPermissionsTest extends
         switchCallContext("TestAdmin");
         fAclSvc.applyAcl(fRepositoryId, docId, testUserAcl, null, 
AclPropagation.OBJECTONLY, null);
         switchCallContext("TestUser");
-        fVerSvc.checkOut(fRepositoryId, new Holder<String>(docId), null, new 
Holder<Boolean>(false));
+        Holder<String> idHolder = new Holder<String>(docId);
+        fVerSvc.checkOut(fRepositoryId, idHolder, null, new 
Holder<Boolean>(false));
 
         switchCallContext("TestAdmin");
         fAclSvc.applyAcl(fRepositoryId, docId, null, testUserAcl, 
AclPropagation.OBJECTONLY, null);
@@ -765,7 +766,7 @@ public class AclPermissionsTest extends
         switchCallContext("TestUser");
         exceptionThrown = false;
         try {
-            fVerSvc.checkIn(fRepositoryId, new Holder<String>(docId), true, 
null, null, null, null, null, null, null);
+            fVerSvc.checkIn(fRepositoryId, idHolder, true, null, null, null, 
null, null, null, null);
         } catch (CmisPermissionDeniedException e) {
             exceptionThrown = true;
         }
@@ -775,14 +776,14 @@ public class AclPermissionsTest extends
         switchCallContext("TestAdmin");
         fAclSvc.applyAcl(fRepositoryId, docId, testUserAcl, null, 
AclPropagation.OBJECTONLY, null);
         switchCallContext("TestUser");
-        fVerSvc.checkIn(fRepositoryId, new Holder<String>(docId), true, null, 
null, null, null, null, null, null);
+        fVerSvc.checkIn(fRepositoryId, idHolder, true, null, null, null, null, 
null, null, null);
 
         switchCallContext("TestAdmin");
         fAclSvc.applyAcl(fRepositoryId, docId, null, testUserAcl, 
AclPropagation.OBJECTONLY, null);
 
         // writer looses write permission
         switchCallContext("Writer");
-        fVerSvc.checkOut(fRepositoryId, new Holder<String>(docId), null, new 
Holder<Boolean>(false));
+        fVerSvc.checkOut(fRepositoryId, idHolder, null, new 
Holder<Boolean>(false));
 
         switchCallContext("TestAdmin");
         fAclSvc.applyAcl(fRepositoryId, docId, null, readWriteAcl, 
AclPropagation.OBJECTONLY, null);
@@ -790,7 +791,7 @@ public class AclPermissionsTest extends
         switchCallContext("Writer");
         exceptionThrown = false;
         try {
-            fVerSvc.checkIn(fRepositoryId, new Holder<String>(docId), true, 
null, null, null, null, null, null, null);
+            fVerSvc.checkIn(fRepositoryId, idHolder, true, null, null, null, 
null, null, null, null);
         } catch (CmisPermissionDeniedException e) {
             exceptionThrown = true;
         }
@@ -800,7 +801,7 @@ public class AclPermissionsTest extends
         switchCallContext("TestAdmin");
         fAclSvc.applyAcl(fRepositoryId, docId, readWriteAcl, null, 
AclPropagation.OBJECTONLY, null);
         switchCallContext("Writer");
-        fVerSvc.checkIn(fRepositoryId, new Holder<String>(docId), true, null, 
null, null, null, null, null, null);
+        fVerSvc.checkIn(fRepositoryId, idHolder, true, null, null, null, null, 
null, null, null);
 
         // TestUser has no permission at all
         switchCallContext("TestUser");

Modified: 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersioningTest.java
URL: 
http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersioningTest.java?rev=1757381&r1=1757380&r2=1757381&view=diff
==============================================================================
--- 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersioningTest.java
 (original)
+++ 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/VersioningTest.java
 Tue Aug 23 14:23:57 2016
@@ -456,6 +456,39 @@ public class VersioningTest extends Abst
         assertEquals(3, allVersions.size());
 
     }
+    
+    @Test
+    public void testPwcId() {
+       String verId = createDocument("PwcidTest", fRootFolderId, 
VersioningState.MAJOR);
+
+       ObjectData version = fObjSvc.getObject(fRepositoryId, verId, "*", 
false, IncludeRelationships.NONE, null,
+                       false, false, null);
+       String verSeriesId = getVersionSeriesId(verId, 
version.getProperties().getProperties());
+       assertTrue(null != verSeriesId && verSeriesId.length() > 0);
+
+       Holder<Boolean> contentCopied = new Holder<Boolean>();
+       Holder<String> idHolder = new Holder<String>(verId); 
+       fVerSvc.checkOut(fRepositoryId, idHolder, null, contentCopied);
+
+       String checkinComment = "Checkin without content and properties.";
+       try {
+               Holder<String> pwcHolder = new Holder<String>(verSeriesId); 
+               fVerSvc.checkIn(fRepositoryId, pwcHolder, true, null, null, 
checkinComment, null, null, null, null);
+               fail("Check-in with version series id should not be possible");
+       } catch (Exception ex) {
+               assertTrue(ex instanceof CmisConstraintException);
+               assert(ex.getMessage().contains("is not a private working 
copy"));
+       }
+       try {
+               Holder<String> pwcHolder = new Holder<String>(verId); 
+               fVerSvc.checkIn(fRepositoryId, pwcHolder, true, null, null, 
checkinComment, null, null, null, null);
+               fail("Check-in with id of older version should not be 
possible");
+       } catch (Exception ex) {
+               assertTrue(ex instanceof CmisConstraintException);
+               assert(ex.getMessage().contains("is not a private working 
copy"));
+       }
+       fVerSvc.checkIn(fRepositoryId, idHolder, true, null, null, 
checkinComment, null, null, null, null);
+    }
 
     private String[] createLevel1Folders() {
         final int num = 2;
@@ -634,7 +667,6 @@ public class VersioningTest extends Abst
         ContentStream content2 = createContent('a');
         Properties newProps = 
fCreator.getUpdatePropertyList(VersionTestTypeSystemCreator.PROPERTY_ID,
                 "PropertyFromVersion2");
-        idHolder = new Holder<String>(verIdV1);
         // Test check-in and pass content and properties
         String checkinComment = "Checkin from Unit Test-2.";
         fVerSvc.checkIn(fRepositoryId, idHolder, true, newProps, content2, 
checkinComment, null, null, null, null);

Modified: 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTestDataCreator.java
URL: 
http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTestDataCreator.java?rev=1757381&r1=1757380&r2=1757381&view=diff
==============================================================================
--- 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTestDataCreator.java
 (original)
+++ 
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/QueryTestDataCreator.java
 Tue Aug 23 14:23:57 2016
@@ -336,7 +336,6 @@ public class QueryTestDataCreator {
         Holder<Boolean> contentCopied = new Holder<Boolean>(false);
         fVerSvc.checkOut(repositoryId, idHolder, null, contentCopied);
 
-        idHolder = new Holder<String>(verIdV1);
         // Test check-in and pass content and properties
         String checkinComment = "Here comes next version.";
         fVerSvc.checkIn(repositoryId, idHolder, true, propsV2, null, 
checkinComment, null, null, null, null);


Reply via email to