You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fm...@apache.org on 2010/10/28 14:03:08 UTC

svn commit: r1028268 - in /incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck: impl/ tests/basics/

Author: fmui
Date: Thu Oct 28 12:03:08 2010
New Revision: 1028268

URL: http://svn.apache.org/viewvc?rev=1028268&view=rev
Log:
- added more property TCK tests
- improved JUnit runner

Added:
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/PropertyCheckEnum.java   (with props)
Modified:
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/JUnitHelper.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/RootFolderTest.java

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java?rev=1028268&r1=1028267&r2=1028268&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java Thu Oct 28 12:03:08 2010
@@ -30,9 +30,11 @@ import java.util.Map;
 import org.apache.chemistry.opencmis.client.api.CmisObject;
 import org.apache.chemistry.opencmis.client.api.FileableCmisObject;
 import org.apache.chemistry.opencmis.client.api.Folder;
+import org.apache.chemistry.opencmis.client.api.OperationContext;
 import org.apache.chemistry.opencmis.client.api.Property;
 import org.apache.chemistry.opencmis.client.api.Session;
 import org.apache.chemistry.opencmis.client.api.SessionFactory;
+import org.apache.chemistry.opencmis.client.runtime.OperationContextImpl;
 import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
 import org.apache.chemistry.opencmis.commons.PropertyIds;
 import org.apache.chemistry.opencmis.commons.SessionParameter;
@@ -42,6 +44,8 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.enums.Action;
 import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
 import org.apache.chemistry.opencmis.commons.enums.BindingType;
+import org.apache.chemistry.opencmis.commons.enums.Cardinality;
+import org.apache.chemistry.opencmis.commons.enums.PropertyType;
 import org.apache.chemistry.opencmis.tck.CmisTestResult;
 import org.apache.chemistry.opencmis.tck.CmisTestResultStatus;
 
@@ -100,9 +104,9 @@ public abstract class AbstractSessionTes
         return ri;
     }
 
-    // --- checks ----
+    // --- reusable checks ----
 
-    protected CmisTestResult checkObject(CmisObject object, String message) {
+    protected CmisTestResult checkObject(CmisObject object, String[] properties, String message) {
         List<CmisTestResult> results = new ArrayList<CmisTestResult>();
 
         CmisTestResult f;
@@ -115,30 +119,51 @@ public abstract class AbstractSessionTes
             addResult(results, assertStringNotEmpty(object.getId(), null, f));
 
             // properties
-            Property<?> prop;
-            prop = object.getProperty(PropertyIds.OBJECT_ID);
-            addResult(results, checkProperty(prop, "Property " + PropertyIds.OBJECT_ID));
+            for (String propId : properties) {
+                Property<?> prop = object.getProperty(propId);
 
-            prop = object.getProperty(PropertyIds.BASE_TYPE_ID);
-            addResult(results, checkProperty(prop, "Property " + PropertyIds.BASE_TYPE_ID));
+                // values of non-spec properties are not checked here
+                PropertyCheckEnum propertyCheck = PropertyCheckEnum.NO_VALUE_CHECK;
 
-            prop = object.getProperty(PropertyIds.OBJECT_TYPE_ID);
-            addResult(results, checkProperty(prop, "Property " + PropertyIds.OBJECT_TYPE_ID));
-
-            prop = object.getProperty(PropertyIds.NAME);
-            addResult(results, checkProperty(prop, "Property " + PropertyIds.NAME));
+                // known properties that are strings and must be set
+                if (PropertyIds.OBJECT_ID.equals(propId) || PropertyIds.BASE_TYPE_ID.equals(propId)
+                        || PropertyIds.OBJECT_TYPE_ID.equals(propId) || PropertyIds.CREATED_BY.equals(propId)
+                        || PropertyIds.LAST_MODIFIED_BY.equals(propId) || PropertyIds.CHANGE_TOKEN.equals(propId)
+                        || PropertyIds.PATH.equals(propId)) {
+                    propertyCheck = PropertyCheckEnum.STRING_MUST_NOT_BE_EMPTY;
+                }
 
-            prop = object.getProperty(PropertyIds.CREATED_BY);
-            addResult(results, checkProperty(prop, "Property " + PropertyIds.CREATED_BY));
+                // known properties that are strings and should be set
+                if (PropertyIds.NAME.equals(propId) || PropertyIds.SOURCE_ID.equals(propId)
+                        || PropertyIds.TARGET_ID.equals(propId)) {
+                    propertyCheck = PropertyCheckEnum.STRING_SHOULD_NOT_BE_EMPTY;
+                }
 
-            prop = object.getProperty(PropertyIds.CREATION_DATE);
-            addResult(results, checkProperty(prop, "Property " + PropertyIds.CREATION_DATE));
+                // known properties that are not strings and must be set
+                if (PropertyIds.CREATION_DATE.equals(propId) || PropertyIds.LAST_MODIFICATION_DATE.equals(propId)
+                        || PropertyIds.IS_IMMUTABLE.equals(propId)) {
+                    propertyCheck = PropertyCheckEnum.MUST_BE_SET;
+                }
 
-            prop = object.getProperty(PropertyIds.LAST_MODIFIED_BY);
-            addResult(results, checkProperty(prop, "Property " + PropertyIds.LAST_MODIFIED_BY));
+                // special cases
+                if (PropertyIds.PARENT_ID.equals(propId)) {
+                    if (object instanceof Folder) {
+                        if (((Folder) object).isRootFolder()) {
+                            propertyCheck = PropertyCheckEnum.MUST_NOT_BE_SET;
+                        } else {
+                            propertyCheck = PropertyCheckEnum.STRING_MUST_NOT_BE_EMPTY;
+                        }
+                    } else {
+                        addResult(
+                                results,
+                                createResult(FAILURE, "Property " + PropertyIds.PARENT_ID
+                                        + " is only defined for folders!"));
+                    }
+                }
 
-            prop = object.getProperty(PropertyIds.LAST_MODIFICATION_DATE);
-            addResult(results, checkProperty(prop, "Property " + PropertyIds.LAST_MODIFICATION_DATE));
+                // check property
+                addResult(results, checkProperty(prop, "Property " + propId, propertyCheck));
+            }
 
             // allowable actions
             f = createResult(FAILURE, "Object has no CAN_GET_PROPERTIES allowable action!");
@@ -173,7 +198,7 @@ public abstract class AbstractSessionTes
         return failure;
     }
 
-    protected CmisTestResult checkProperty(Property<?> property, String message) {
+    protected CmisTestResult checkProperty(Property<?> property, String message, PropertyCheckEnum propertyCheck) {
         List<CmisTestResult> results = new ArrayList<CmisTestResult>();
 
         CmisTestResult f;
@@ -193,6 +218,49 @@ public abstract class AbstractSessionTes
 
             f = createResult(WARNING, "Local name is not set!");
             addResult(results, assertNotNull(property.getLocalName(), null, f));
+
+            if ((propertyCheck == PropertyCheckEnum.MUST_BE_SET)
+                    || (propertyCheck == PropertyCheckEnum.STRING_MUST_NOT_BE_EMPTY)
+                    || (propertyCheck == PropertyCheckEnum.STRING_SHOULD_NOT_BE_EMPTY)) {
+                f = createResult(FAILURE, "Property has no value!");
+                addResult(results, assertIsTrue(property.getValues().size() > 0, null, f));
+            } else if (propertyCheck == PropertyCheckEnum.MUST_NOT_BE_SET) {
+                f = createResult(FAILURE, "Property has a value!");
+                addResult(results, assertIsTrue(property.getValues().size() == 0, null, f));
+            }
+
+            boolean isString = ((property.getDefinition().getPropertyType() == PropertyType.STRING)
+                    || (property.getDefinition().getPropertyType() == PropertyType.ID)
+                    || (property.getDefinition().getPropertyType() == PropertyType.URI) || (property.getDefinition()
+                    .getPropertyType() == PropertyType.HTML));
+            for (Object value : property.getValues()) {
+                if (value == null) {
+                    addResult(results, createResult(FAILURE, "Property values contain a null value!"));
+                    break;
+                } else if (isString) {
+                    if (propertyCheck == PropertyCheckEnum.STRING_MUST_NOT_BE_EMPTY) {
+                        f = createResult(FAILURE, "Property values contain an empty string!");
+                        addResult(results, assertStringNotEmpty(value.toString(), null, f));
+                    } else if (propertyCheck == PropertyCheckEnum.STRING_SHOULD_NOT_BE_EMPTY) {
+                        f = createResult(WARNING, "Property values contain an empty string!");
+                        addResult(results, assertStringNotEmpty(value.toString(), null, f));
+                    }
+                }
+            }
+
+            if (property.getDefinition().getCardinality() == Cardinality.SINGLE) {
+                f = createResult(FAILURE, "Property cardinality is SINGLE but property has more than one value!");
+                addResult(results, assertIsTrue(property.getValues().size() <= 1, null, f));
+            }
+
+            if (property.getDefinition().isRequired() == null) {
+                addResult(results, createResult(FAILURE, "Property definition doesn't contain the required flag!!"));
+            } else {
+                if (property.getDefinition().isRequired().booleanValue()) {
+                    f = createResult(FAILURE, "Property is required but has no value!");
+                    addResult(results, assertIsTrue(property.getValues().size() > 0, null, f));
+                }
+            }
         }
 
         CmisTestResultImpl result = createResult(getWorst(results), message);
@@ -210,10 +278,24 @@ public abstract class AbstractSessionTes
         addResult(results, assertNotNull(folder, null, f));
 
         if (folder != null) {
-            for (CmisObject child : folder.getChildren()) {
-                addResult(results, checkObject(folder, "Child check: " + (child == null ? "?" : child.getId())));
+            OperationContext oc = new OperationContextImpl();
+            oc.setFilterString("*");
+            oc.setCacheEnabled(false);
+            oc.setIncludeAllowableActions(true);
+
+            for (CmisObject child : folder.getChildren(oc)) {
+                if (child == null) {
+                    addResult(results, createResult(FAILURE, "Folder contains a null child!"));
+                } else {
+                    String[] propertiesToCheck = new String[child.getType().getPropertyDefinitions().size()];
+
+                    int i = 0;
+                    for (String propId : child.getType().getPropertyDefinitions().keySet()) {
+                        propertiesToCheck[i++] = propId;
+                    }
+
+                    addResult(results, checkObject(folder, propertiesToCheck, "Child check: " + child.getId()));
 
-                if (child != null) {
                     f = createResult(FAILURE, "Child is not fileable! Id: " + child.getId() + " / Type: "
                             + child.getType().getId());
                     addResult(results, assertIsTrue(child instanceof FileableCmisObject, null, f));

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/JUnitHelper.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/JUnitHelper.java?rev=1028268&r1=1028267&r2=1028268&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/JUnitHelper.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/JUnitHelper.java Thu Oct 28 12:03:08 2010
@@ -25,6 +25,8 @@ import org.apache.chemistry.opencmis.tck
 import org.apache.chemistry.opencmis.tck.CmisTestGroup;
 import org.apache.chemistry.opencmis.tck.CmisTestProgressMonitor;
 import org.apache.chemistry.opencmis.tck.CmisTestReport;
+import org.apache.chemistry.opencmis.tck.CmisTestResult;
+import org.apache.chemistry.opencmis.tck.CmisTestResultStatus;
 import org.apache.chemistry.opencmis.tck.report.TextReport;
 import org.apache.chemistry.opencmis.tck.runner.AbstractRunner;
 import org.junit.Assert;
@@ -60,11 +62,25 @@ public class JUnitHelper {
 
             CmisTestReport report = new TextReport();
             report.createReport(runner.getParameters(), runner.getGroups(), new PrintWriter(System.out));
+
+            checkForFailures(runner);
         } catch (Exception e) {
             Assert.fail(e.getMessage());
         }
     }
 
+    private static void checkForFailures(JUnitRunner runner) {
+        for (CmisTestGroup group : runner.getGroups()) {
+            for (CmisTest test : group.getTests()) {
+                for (CmisTestResult result : test.getResults()) {
+                    if (result.getStatus().getLevel() >= CmisTestResultStatus.FAILURE.getLevel()) {
+                        Assert.fail(result.getMessage());
+                    }
+                }
+            }
+        }
+    }
+
     private static class JUnitRunner extends AbstractRunner {
     }
 

Added: incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/PropertyCheckEnum.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/PropertyCheckEnum.java?rev=1028268&view=auto
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/PropertyCheckEnum.java (added)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/PropertyCheckEnum.java Thu Oct 28 12:03:08 2010
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.tck.impl;
+
+public enum PropertyCheckEnum {
+    NO_VALUE_CHECK, MUST_NOT_BE_SET, MUST_BE_SET, STRING_SHOULD_NOT_BE_EMPTY, STRING_MUST_NOT_BE_EMPTY;
+}

Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/PropertyCheckEnum.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/RootFolderTest.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/RootFolderTest.java?rev=1028268&r1=1028267&r2=1028268&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/RootFolderTest.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/basics/RootFolderTest.java Thu Oct 28 12:03:08 2010
@@ -26,6 +26,7 @@ import java.util.Map;
 
 import org.apache.chemistry.opencmis.client.api.Folder;
 import org.apache.chemistry.opencmis.client.api.Session;
+import org.apache.chemistry.opencmis.commons.PropertyIds;
 import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
 import org.apache.chemistry.opencmis.commons.enums.Action;
 import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
@@ -57,7 +58,11 @@ public class RootFolderTest extends Abst
         // get the root folder
         Folder rootFolder = session.getRootFolder();
 
-        addResult(checkObject(rootFolder, "Root folder object spec compliance"));
+        String[] propertiesToCheck = new String[] { PropertyIds.OBJECT_ID, PropertyIds.OBJECT_TYPE_ID,
+                PropertyIds.BASE_TYPE_ID, PropertyIds.NAME, PropertyIds.CREATED_BY, PropertyIds.CREATION_DATE,
+                PropertyIds.LAST_MODIFIED_BY, PropertyIds.LAST_MODIFICATION_DATE };
+
+        addResult(checkObject(rootFolder, propertiesToCheck, "Root folder object spec compliance"));
 
         if (rootFolder == null) {
             return;