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);