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 2011/08/24 16:19:57 UTC

svn commit: r1161109 - in /chemistry/opencmis/trunk: chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/ chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencm...

Author: fmui
Date: Wed Aug 24 14:19:56 2011
New Revision: 1161109

URL: http://svn.apache.org/viewvc?rev=1161109&view=rev
Log:
added more TCK tests

Added:
    chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CopyTest.java   (with props)
    chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/DeleteTreeTest.java   (with props)
    chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/MoveTest.java   (with props)
    chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/SetAndDeleteContentTest.java   (with props)
    chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/ContentChangesSmokeTest.java   (with props)
Modified:
    chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java
    chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CRUDTestGroup.java
    chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteDocumentTest.java
    chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteFolderTest.java
    chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QuerySmokeTest.java
    chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryTestGroup.java
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java

Modified: 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/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java?rev=1161109&r1=1161108&r2=1161109&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/impl/AbstractSessionTest.java Wed Aug 24 14:19:56 2011
@@ -24,8 +24,12 @@ import static org.apache.chemistry.openc
 import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.UNEXPECTED_EXCEPTION;
 import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
 
+import java.io.BufferedInputStream;
 import java.io.ByteArrayInputStream;
+import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.GregorianCalendar;
@@ -166,6 +170,32 @@ public abstract class AbstractSessionTes
         return propertiesk;
     }
 
+    protected String getStringFromContentStream(ContentStream contentStream) throws IOException {
+        if (contentStream == null || contentStream.getStream() == null) {
+            return null;
+        }
+
+        StringBuilder sb = new StringBuilder();
+        Reader reader = new InputStreamReader(contentStream.getStream(), "UTF-8");
+
+        try {
+            final char[] buffer = new char[64 * 1024];
+            int b;
+            while (true) {
+                b = reader.read(buffer, 0, buffer.length);
+                if (b > 0) {
+                    sb.append(buffer, 0, b);
+                } else if (b == -1) {
+                    break;
+                }
+            }
+        } finally {
+            reader.close();
+        }
+
+        return sb.toString();
+    }
+
     // --- handy create and delete methods ---
 
     /**
@@ -257,6 +287,20 @@ public abstract class AbstractSessionTes
     }
 
     /**
+     * Counts the children in a folder.
+     */
+    protected int countFolderChildren(Folder folder) {
+        int count = 0;
+
+        for (@SuppressWarnings("unused")
+        CmisObject object : folder.getChildren()) {
+            count++;
+        }
+
+        return count;
+    }
+
+    /**
      * Creates a document.
      */
     protected Document createDocument(Session session, Folder parent, String name, String content) {
@@ -272,6 +316,10 @@ public abstract class AbstractSessionTes
      * Creates a document.
      */
     protected Document createDocument(Session session, Folder parent, String name, String objectTypeId, String content) {
+        if (content == null) {
+            content = "";
+        }
+
         Map<String, Object> properties = new HashMap<String, Object>();
         properties.put(PropertyIds.NAME, name);
         properties.put(PropertyIds.OBJECT_TYPE_ID, objectTypeId);
@@ -312,6 +360,17 @@ public abstract class AbstractSessionTes
 
             addResult(checkObject(session, result, propertiesToCheck, "New document object spec compliance"));
 
+            // check content
+            try {
+                String fetchedContent = getStringFromContentStream(result.getContentStream());
+                if (!content.equals(fetchedContent)) {
+                    addResult(createResult(FAILURE,
+                            "Content of newly created document doesn't match the orign content!"));
+                }
+            } catch (IOException e) {
+                addResult(createResult(UNEXPECTED_EXCEPTION,
+                        "Content of newly created document couldn't be read! Exception: " + e.getMessage(), e, true));
+            }
         } catch (CmisBaseException e) {
             addResult(createResult(UNEXPECTED_EXCEPTION,
                     "Newly created document is invalid! Exception: " + e.getMessage(), e, true));
@@ -782,7 +841,7 @@ public abstract class AbstractSessionTes
         ContentStream contentStream = doc.getContentStream();
 
         if (contentStream == null) {
-            if (hasContentProperties) {
+            if (hasContentProperties && doc.getContentStreamLength() > 0) {
                 addResult(results,
                         createResult(FAILURE, "Content properties have values but the document has no content!"));
             }
@@ -809,10 +868,33 @@ public abstract class AbstractSessionTes
         }
 
         // MIME type check
+        String docMimeType = doc.getContentStreamMimeType();
+        if (docMimeType != null) {
+            int x = docMimeType.indexOf(';');
+            if (x > -1) {
+                docMimeType = docMimeType.substring(0, x);
+            }
+            docMimeType = docMimeType.trim();
+        }
+
+        String contentMimeType = contentStream.getMimeType();
+        if (contentMimeType != null) {
+            int x = contentMimeType.indexOf(';');
+            if (x > -1) {
+                contentMimeType = contentMimeType.substring(0, x);
+            }
+            contentMimeType = contentMimeType.trim();
+        }
+
         f = createResult(FAILURE, "Content MIME types don't match!");
-        addResult(results, assertEquals(doc.getContentStreamMimeType(), contentStream.getMimeType(), null, f));
+        addResult(results, assertEquals(docMimeType, contentMimeType, null, f));
 
         if (contentStream.getMimeType() != null) {
+            if (contentMimeType.equals(docMimeType)) {
+                f = createResult(WARNING, "Content MIME types don't match!");
+                addResult(results, assertEquals(doc.getContentStreamMimeType(), contentStream.getMimeType(), null, f));
+            }
+
             f = createResult(FAILURE, "Content MIME types is invalid: " + contentStream.getMimeType());
             addResult(
                     results,
@@ -2073,6 +2155,111 @@ public abstract class AbstractSessionTes
         }
     }
 
+    protected CmisTestResult assertEquals(ContentStream expected, ContentStream actual, CmisTestResult success,
+            CmisTestResult failure) {
+
+        List<CmisTestResult> results = new ArrayList<CmisTestResult>();
+
+        CmisTestResult f;
+
+        if ((expected == null) && (actual == null)) {
+            return success;
+        }
+
+        if (expected == null) {
+            f = createResult(FAILURE, "Expected stream is null, but actual stream is not!");
+            addResultChild(failure, f);
+
+            try {
+                actual.getStream().close();
+            } catch (Exception e) {
+            }
+
+            return failure;
+        }
+
+        if (actual == null) {
+            f = createResult(FAILURE, "Actual object is null, but expected object is not!");
+            addResultChild(failure, f);
+
+            try {
+                expected.getStream().close();
+            } catch (Exception e) {
+            }
+
+            return failure;
+        }
+
+        f = createResult(WARNING, "Filenames don't match!");
+        addResult(results, assertEquals(expected.getFileName(), actual.getFileName(), null, f));
+
+        f = createResult(FAILURE, "MIME types don't match!");
+        addResult(results, assertEquals(expected.getMimeType(), actual.getMimeType(), null, f));
+
+        f = createResult(WARNING, "Lengths don't match!");
+        addResult(results, assertEquals(expected.getBigLength(), actual.getBigLength(), null, f));
+
+        boolean match = true;
+
+        BufferedInputStream as = new BufferedInputStream(actual.getStream());
+        BufferedInputStream es = new BufferedInputStream(expected.getStream());
+
+        try {
+            int ab = 0;
+            int eb = 0;
+
+            while (true) {
+                if (ab > -1) {
+                    ab = as.read();
+                }
+
+                if (eb > -1) {
+                    eb = es.read();
+                }
+
+                if (ab == -1 && eb == -1) {
+                    break;
+                }
+
+                if (ab != eb) {
+                    match = false;
+                }
+            }
+        } catch (Exception e) {
+            f = createResult(UNEXPECTED_EXCEPTION, e.getMessage(), e, false);
+            addResultChild(failure, f);
+        }
+
+        if (!match) {
+            f = createResult(FAILURE, "Content streams don't match!");
+            addResultChild(failure, f);
+        }
+
+        try {
+            actual.getStream().close();
+        } catch (Exception e) {
+        }
+
+        try {
+            expected.getStream().close();
+        } catch (Exception e) {
+        }
+
+        if (getWorst(results).getLevel() <= OK.getLevel()) {
+            for (CmisTestResult result : results) {
+                addResultChild(success, result);
+            }
+
+            return success;
+        } else {
+            for (CmisTestResult result : results) {
+                addResultChild(failure, result);
+            }
+
+            return failure;
+        }
+    }
+
     // --- helpers ---
 
     protected void addResult(List<CmisTestResult> results, CmisTestResult result) {

Modified: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CRUDTestGroup.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CRUDTestGroup.java?rev=1161109&r1=1161108&r2=1161109&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CRUDTestGroup.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CRUDTestGroup.java Wed Aug 24 14:19:56 2011
@@ -35,5 +35,9 @@ public class CRUDTestGroup extends Abstr
 
         addTest(new CreateAndDeleteFolderTest());
         addTest(new CreateAndDeleteDocumentTest());
+        addTest(new SetAndDeleteContentTest());
+        addTest(new CopyTest());
+        addTest(new MoveTest());
+        addTest(new DeleteTreeTest());
     }
 }

Added: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CopyTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CopyTest.java?rev=1161109&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CopyTest.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CopyTest.java Wed Aug 24 14:19:56 2011
@@ -0,0 +1,90 @@
+/*
+ * 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.tests.crud;
+
+import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
+import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
+
+import java.util.Map;
+
+import org.apache.chemistry.opencmis.client.api.Document;
+import org.apache.chemistry.opencmis.client.api.Folder;
+import org.apache.chemistry.opencmis.client.api.Session;
+import org.apache.chemistry.opencmis.commons.enums.BindingType;
+import org.apache.chemistry.opencmis.tck.CmisTestResult;
+import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
+
+/**
+ * Copy test.
+ */
+public class CopyTest extends AbstractSessionTest {
+
+    @Override
+    public void init(Map<String, String> parameters) {
+        super.init(parameters);
+        setName("Copy Test");
+        setDescription("Creates two folders and a document and copies the document from one folder to the other. "
+                + " If the AtomPub binding is used, this test is skipped.");
+    }
+
+    @Override
+    public void run(Session session) {
+        if (getBinding() == BindingType.ATOMPUB) {
+            addResult(createResult(SKIPPED,
+                    "AtomPub binding does not support createDocumentFromSource(). Test Skipped!"));
+            return;
+        }
+
+        CmisTestResult f;
+
+        try {
+            // create folders
+            Folder testFolder = createTestFolder(session);
+            Folder folder1 = createFolder(session, testFolder, "copyfolder1");
+            Folder folder2 = createFolder(session, testFolder, "copyfolder2");
+
+            // create document
+            Document doc1 = createDocument(session, folder1, "copytestdoc.txt", "copy test");
+
+            // copy
+            Document doc2 = doc1.copy(folder2, null, null, null, null, null, SELECT_ALL_NO_CACHE_OC);
+
+            if (doc2 == null) {
+                addResult(createResult(FAILURE, "Copied document is null!"));
+            } else {
+                addResult(checkObject(session, doc2, getAllProperties(doc2),
+                        "Copied document check. Id: + " + doc2.getName()));
+
+                f = createResult(FAILURE, "Content streams don't match!");
+                addResult(assertEquals(doc1.getContentStream(), doc2.getContentStream(), null, f));
+            }
+
+            int count1 = countFolderChildren(folder1);
+            f = createResult(FAILURE, "Source folder should have exactly one child but has " + count1 + " children!");
+            addResult(assertEquals(1, count1, null, f));
+
+            int count2 = countFolderChildren(folder2);
+            f = createResult(FAILURE, "Target folder should have exactly one child but has " + count2 + " children!");
+            addResult(assertEquals(1, count2, null, f));
+        } finally {
+            // clean up
+            deleteTestFolder();
+        }
+    }
+}

Propchange: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CopyTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteDocumentTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteDocumentTest.java?rev=1161109&r1=1161108&r2=1161109&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteDocumentTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteDocumentTest.java Wed Aug 24 14:19:56 2011
@@ -30,7 +30,6 @@ import org.apache.chemistry.opencmis.cli
 import org.apache.chemistry.opencmis.client.api.Folder;
 import org.apache.chemistry.opencmis.client.api.ItemIterable;
 import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
 import org.apache.chemistry.opencmis.commons.data.ContentStream;
 import org.apache.chemistry.opencmis.tck.CmisTestResult;
 import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
@@ -53,71 +52,70 @@ public class CreateAndDeleteDocumentTest
     public void run(Session session) {
         CmisTestResult f;
 
+        int numOfDocuments = 20;
+
         // create a test folder
         Folder testFolder = createTestFolder(session);
 
-        int numOfDocuments = 20;
-        Map<String, Document> documents = new HashMap<String, Document>();
-        String[] propertiesToCheck = new String[] { PropertyIds.OBJECT_ID, PropertyIds.BASE_TYPE_ID,
-                PropertyIds.OBJECT_TYPE_ID };
-
-        // create documents
-        for (int i = 0; i < numOfDocuments; i++) {
-            Document newDocument = createDocument(session, testFolder, "doc" + i, CONTENT);
-            addResult(checkObject(session, newDocument, propertiesToCheck, "New folder object spec compliance. Id: "
-                    + newDocument.getId()));
-            documents.put(newDocument.getId(), newDocument);
-        }
+        try {
+            Map<String, Document> documents = new HashMap<String, Document>();
 
-        // simple children test
-        addResult(checkChildren(session, testFolder, "Test folder children check"));
+            // create documents
+            for (int i = 0; i < numOfDocuments; i++) {
+                Document newDocument = createDocument(session, testFolder, "doc" + i, CONTENT);
+                documents.put(newDocument.getId(), newDocument);
+            }
 
-        // check if all documents are there
-        ItemIterable<CmisObject> children = testFolder.getChildren(SELECT_ALL_NO_CACHE_OC);
-        List<String> childrenIds = new ArrayList<String>();
-        for (CmisObject child : children) {
-            if (child != null) {
-                childrenIds.add(child.getId());
-                Document document = documents.get(child.getId());
+            // simple children test
+            addResult(checkChildren(session, testFolder, "Test folder children check"));
 
-                f = createResult(FAILURE, "Document and test folder child don't match! Id: " + child.getId());
-                addResult(assertShallowEquals(document, child, null, f));
+            // check if all documents are there
+            ItemIterable<CmisObject> children = testFolder.getChildren(SELECT_ALL_NO_CACHE_OC);
+            List<String> childrenIds = new ArrayList<String>();
+            for (CmisObject child : children) {
+                if (child != null) {
+                    childrenIds.add(child.getId());
+                    Document document = documents.get(child.getId());
+
+                    f = createResult(FAILURE, "Document and test folder child don't match! Id: " + child.getId());
+                    addResult(assertShallowEquals(document, child, null, f));
+                }
             }
-        }
 
-        f = createResult(FAILURE, "Number of created folders does not match the number of existing folders!");
-        addResult(assertEquals(numOfDocuments, childrenIds.size(), null, f));
+            f = createResult(FAILURE, "Number of created folders does not match the number of existing folders!");
+            addResult(assertEquals(numOfDocuments, childrenIds.size(), null, f));
 
-        for (Document document : documents.values()) {
-            if (!childrenIds.contains(document.getId())) {
-                addResult(createResult(FAILURE,
-                        "Created document not found in test folder children! Id: " + document.getId()));
+            for (Document document : documents.values()) {
+                if (!childrenIds.contains(document.getId())) {
+                    addResult(createResult(FAILURE, "Created document not found in test folder children! Id: "
+                            + document.getId()));
+                }
             }
-        }
 
-        // check content
-        for (Document document : documents.values()) {
-            ContentStream contentStream = document.getContentStream();
-            if (contentStream == null) {
-                addResult(createResult(FAILURE, "Document has no content! Id: " + document.getId()));
-                continue;
-            }
+            // check content
+            for (Document document : documents.values()) {
+                ContentStream contentStream = document.getContentStream();
+                if (contentStream == null) {
+                    addResult(createResult(FAILURE, "Document has no content! Id: " + document.getId()));
+                    continue;
+                }
 
-            // TODO: content checks
-        }
+                // TODO: content checks
+            }
 
-        // delete all documents
-        for (Document document : documents.values()) {
-            document.delete(true);
-
-            f = createResult(FAILURE,
-                    "Document should not exist anymore but it is still there! Id: " + document.getId());
-            addResult(assertIsFalse(exists(document), null, f));
+            // delete all documents
+            for (Document document : documents.values()) {
+                document.delete(true);
+
+                f = createResult(FAILURE,
+                        "Document should not exist anymore but it is still there! Id: " + document.getId());
+                addResult(assertIsFalse(exists(document), null, f));
+            }
+        } finally {
+            // delete the test folder
+            deleteTestFolder();
         }
 
-        // delete the test folder
-        deleteTestFolder();
-
         addResult(createInfoResult("Tested the creation and deletion of " + numOfDocuments + " documents."));
     }
 }

Modified: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteFolderTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteFolderTest.java?rev=1161109&r1=1161108&r2=1161109&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteFolderTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/CreateAndDeleteFolderTest.java Wed Aug 24 14:19:56 2011
@@ -29,7 +29,6 @@ import org.apache.chemistry.opencmis.cli
 import org.apache.chemistry.opencmis.client.api.Folder;
 import org.apache.chemistry.opencmis.client.api.ItemIterable;
 import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.commons.PropertyIds;
 import org.apache.chemistry.opencmis.tck.CmisTestResult;
 import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
 
@@ -49,60 +48,60 @@ public class CreateAndDeleteFolderTest e
     public void run(Session session) {
         CmisTestResult f;
 
+        int numOfFolders = 20;
+
         // create a test folder
         Folder testFolder = createTestFolder(session);
 
-        int numOfFolders = 20;
-        Map<String, Folder> folders = new HashMap<String, Folder>();
-        String[] propertiesToCheck = new String[] { PropertyIds.OBJECT_ID, PropertyIds.BASE_TYPE_ID,
-                PropertyIds.OBJECT_TYPE_ID };
-
-        // create folders
-        for (int i = 0; i < numOfFolders; i++) {
-            Folder newFolder = createFolder(session, testFolder, "folder" + i);
-            addResult(checkObject(session, newFolder, propertiesToCheck, "New folder object spec compliance. Id: "
-                    + newFolder.getId()));
-            folders.put(newFolder.getId(), newFolder);
-        }
+        try {
+            Map<String, Folder> folders = new HashMap<String, Folder>();
 
-        // simple children test
-        addResult(checkChildren(session, testFolder, "Test folder children check"));
+            // create folders
+            for (int i = 0; i < numOfFolders; i++) {
+                Folder newFolder = createFolder(session, testFolder, "folder" + i);
+                folders.put(newFolder.getId(), newFolder);
+            }
 
-        // check if all folders are there
-        ItemIterable<CmisObject> children = testFolder.getChildren(SELECT_ALL_NO_CACHE_OC);
-        List<String> childrenIds = new ArrayList<String>();
-        for (CmisObject child : children) {
-            if (child != null) {
-                childrenIds.add(child.getId());
-                Folder folder = folders.get(child.getId());
+            // simple children test
+            addResult(checkChildren(session, testFolder, "Test folder children check"));
 
-                f = createResult(FAILURE, "Folder and test folder child don't match! Id: " + child.getId());
-                addResult(assertShallowEquals(folder, child, null, f));
+            // check if all folders are there
+            ItemIterable<CmisObject> children = testFolder.getChildren(SELECT_ALL_NO_CACHE_OC);
+            List<String> childrenIds = new ArrayList<String>();
+            for (CmisObject child : children) {
+                if (child != null) {
+                    childrenIds.add(child.getId());
+                    Folder folder = folders.get(child.getId());
+
+                    f = createResult(FAILURE, "Folder and test folder child don't match! Id: " + child.getId());
+                    addResult(assertShallowEquals(folder, child, null, f));
+                }
             }
-        }
 
-        f = createResult(FAILURE, "Number of created folders does not match the number of existing folders!");
-        addResult(assertEquals(numOfFolders, childrenIds.size(), null, f));
+            f = createResult(FAILURE, "Number of created folders does not match the number of existing folders!");
+            addResult(assertEquals(numOfFolders, childrenIds.size(), null, f));
 
-        for (Folder folder : folders.values()) {
-            if (!childrenIds.contains(folder.getId())) {
-                addResult(createResult(FAILURE,
-                        "Created folder not found in test folder children! Id: " + folder.getId()));
+            for (Folder folder : folders.values()) {
+                if (!childrenIds.contains(folder.getId())) {
+                    addResult(createResult(FAILURE,
+                            "Created folder not found in test folder children! Id: " + folder.getId()));
+                }
             }
-        }
-
-        // delete all folders
-        for (Folder folder : folders.values()) {
-            // empty folders should be deleteable like this
-            folder.delete(true);
 
-            f = createResult(FAILURE, "Folder should not exist anymore but it is still there! Id: " + folder.getId());
-            addResult(assertIsFalse(exists(folder), null, f));
+            // delete all folders
+            for (Folder folder : folders.values()) {
+                // empty folders should be deleteable like this
+                folder.delete(true);
+
+                f = createResult(FAILURE,
+                        "Folder should not exist anymore but it is still there! Id: " + folder.getId());
+                addResult(assertIsFalse(exists(folder), null, f));
+            }
+        } finally {
+            // delete the test folder
+            deleteTestFolder();
         }
 
-        // delete the test folder
-        deleteTestFolder();
-
         addResult(createInfoResult("Tested the creation and deletion of " + numOfFolders + " folders."));
     }
 }

Added: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/DeleteTreeTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/DeleteTreeTest.java?rev=1161109&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/DeleteTreeTest.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/DeleteTreeTest.java Wed Aug 24 14:19:56 2011
@@ -0,0 +1,93 @@
+/*
+ * 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.tests.crud;
+
+import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.chemistry.opencmis.client.api.Document;
+import org.apache.chemistry.opencmis.client.api.Folder;
+import org.apache.chemistry.opencmis.client.api.Session;
+import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
+import org.apache.chemistry.opencmis.tck.CmisTestResult;
+import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
+
+/**
+ * Simple document test.
+ */
+public class DeleteTreeTest extends AbstractSessionTest {
+
+    private static final String CONTENT = "TCK test content.";
+
+    @Override
+    public void init(Map<String, String> parameters) {
+        super.init(parameters);
+        setName("Delete Tree Test");
+        setDescription("Creates a few documents in a folder, deletes the folder and checks if all documents are gone.");
+    }
+
+    @Override
+    public void run(Session session) {
+        CmisTestResult f;
+
+        int numOfDocuments = 20;
+
+        // create a test folder
+        Folder testFolder = createTestFolder(session);
+
+        Map<String, Document> documents = new HashMap<String, Document>();
+
+        // create documents
+        for (int i = 0; i < numOfDocuments; i++) {
+            Document newDocument = createDocument(session, testFolder, "doc" + i, CONTENT);
+            documents.put(newDocument.getId(), newDocument);
+        }
+
+        // delete tree
+        List<String> failedIds = testFolder.deleteTree(true, UnfileObject.DELETE, true);
+
+        // check failed ids
+        if (failedIds != null && failedIds.size() > 0) {
+            f = createResult(FAILURE, "deleteTree() could not delete " + failedIds.size() + " out of " + numOfDocuments
+                    + " objects in the folder!");
+            addResult(assertEquals(0, failedIds.size(), null, f));
+        }
+
+        // check documents
+        for (Document doc : documents.values()) {
+            f = createResult(FAILURE, "Document still exists but should have been deleted. Id: " + doc.getId());
+            addResult(assertIsFalse(exists(doc), null, f));
+        }
+
+        // check folder
+        f = createResult(FAILURE, "Folder still exists but should have been deleted. Id: " + testFolder.getId());
+        addResult(assertIsFalse(exists(testFolder), null, f));
+
+        if (exists(testFolder)) {
+            // try to clean up
+            try {
+                deleteObject(testFolder);
+            } catch (Exception e) {
+            }
+        }
+    }
+}

Propchange: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/DeleteTreeTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/MoveTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/MoveTest.java?rev=1161109&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/MoveTest.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/MoveTest.java Wed Aug 24 14:19:56 2011
@@ -0,0 +1,78 @@
+/*
+ * 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.tests.crud;
+
+import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
+
+import java.util.Map;
+
+import org.apache.chemistry.opencmis.client.api.Document;
+import org.apache.chemistry.opencmis.client.api.Folder;
+import org.apache.chemistry.opencmis.client.api.Session;
+import org.apache.chemistry.opencmis.tck.CmisTestResult;
+import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
+
+/**
+ * Copy test.
+ */
+public class MoveTest extends AbstractSessionTest {
+
+    @Override
+    public void init(Map<String, String> parameters) {
+        super.init(parameters);
+        setName("Move Test");
+        setDescription("Creates two folders and a document and moves the document from one folder to the other.");
+    }
+
+    @Override
+    public void run(Session session) {
+        CmisTestResult f;
+
+        try {
+            // create folders
+            Folder testFolder = createTestFolder(session);
+            Folder folder1 = createFolder(session, testFolder, "movefolder1");
+            Folder folder2 = createFolder(session, testFolder, "movefolder2");
+
+            // create document
+            Document doc1 = createDocument(session, folder1, "movetestdoc.txt", "move test");
+
+            // move
+            Document doc2 = (Document) doc1.move(folder1, folder2, SELECT_ALL_NO_CACHE_OC);
+
+            if (doc2 == null) {
+                addResult(createResult(FAILURE, "Moved document is null!"));
+            } else {
+                addResult(checkObject(session, doc2, getAllProperties(doc2),
+                        "Moved document check. Id: + " + doc2.getName()));
+            }
+
+            int count1 = countFolderChildren(folder1);
+            f = createResult(FAILURE, "Source folder should be empty after move but has " + count1 + " children!");
+            addResult(assertEquals(0, count1, null, f));
+
+            int count2 = countFolderChildren(folder2);
+            f = createResult(FAILURE, "Target folder should have exactly one child but has " + count2 + " children!");
+            addResult(assertEquals(1, count2, null, f));
+        } finally {
+            // clean up
+            deleteTestFolder();
+        }
+    }
+}

Propchange: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/MoveTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/SetAndDeleteContentTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/SetAndDeleteContentTest.java?rev=1161109&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/SetAndDeleteContentTest.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/SetAndDeleteContentTest.java Wed Aug 24 14:19:56 2011
@@ -0,0 +1,139 @@
+/*
+ * 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.tests.crud;
+
+import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
+import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
+import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.UNEXPECTED_EXCEPTION;
+import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.math.BigInteger;
+import java.util.Map;
+
+import org.apache.chemistry.opencmis.client.api.Document;
+import org.apache.chemistry.opencmis.client.api.Folder;
+import org.apache.chemistry.opencmis.client.api.Session;
+import org.apache.chemistry.opencmis.commons.data.ContentStream;
+import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
+import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
+import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
+import org.apache.chemistry.opencmis.tck.CmisTestResult;
+import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
+
+/**
+ * Copy test.
+ */
+public class SetAndDeleteContentTest extends AbstractSessionTest {
+
+    private static final String CONTENT1 = "one";
+    private static final String CONTENT2 = "two";
+
+    @Override
+    public void init(Map<String, String> parameters) {
+        super.init(parameters);
+        setName("Set and Delete content Test");
+        setDescription("Creates a new document and tries to set and delete its content.");
+    }
+
+    @Override
+    public void run(Session session) {
+        CmisTestResult f;
+
+        if (getContentStreamUpdatesCapbility(session) == CapabilityContentStreamUpdates.NONE) {
+            addResult(createInfoResult("Stream updates are not supported. Test skipped!"));
+            return;
+        }
+
+        try {
+            // create folder and document
+            Folder testFolder = createTestFolder(session);
+            Document doc = createDocument(session, testFolder, "contenttest.txt", CONTENT1);
+            Document workDoc = doc;
+
+            // test if check out is required and possible
+            boolean checkedout = false;
+            if (getContentStreamUpdatesCapbility(session) == CapabilityContentStreamUpdates.PWCONLY) {
+                DocumentTypeDefinition docType = (DocumentTypeDefinition) doc.getType();
+
+                if (!docType.isVersionable()) {
+                    addResult(createResult(SKIPPED,
+                            "Content stream operations only work if PWCs and the the test type is not versionable. Test skipped!"));
+                    doc.delete(true);
+                    return;
+                }
+
+                workDoc = (Document) session.getObject(doc.checkOut(), SELECT_ALL_NO_CACHE_OC);
+                checkedout = true;
+            }
+
+            // delete content stream
+            try {
+                workDoc.deleteContentStream(true);
+
+                f = createResult(FAILURE, "Document still has content after deleteContentStream() has been called!");
+                addResult(assertNull(workDoc.getContentStream(), null, f));
+            } catch (CmisNotSupportedException e) {
+                addResult(createResult(WARNING, "deleteContentStream() is not supported!"));
+            }
+
+            // set a new content stream
+            byte[] contentBytes = new byte[0];
+            try {
+                contentBytes = CONTENT2.getBytes("UTF-8");
+            } catch (Exception e) {
+            }
+
+            ContentStream contentStream = new ContentStreamImpl(workDoc.getName(),
+                    BigInteger.valueOf(contentBytes.length), "text/plain", new ByteArrayInputStream(contentBytes));
+
+            workDoc.setContentStream(contentStream, true, true);
+
+            // test new content
+            try {
+                String content = getStringFromContentStream(workDoc.getContentStream());
+                f = createResult(FAILURE, "Document content doesn't match the content set by setContentStream()!");
+                addResult(assertEquals(CONTENT2, content, null, f));
+            } catch (IOException e) {
+                addResult(createResult(UNEXPECTED_EXCEPTION,
+                        "Document content couldn't be read! Exception: " + e.getMessage(), e, true));
+            }
+
+            // cancel a possible check out
+            if (checkedout) {
+                workDoc.cancelCheckOut();
+            }
+
+            // remove the document
+            deleteObject(doc);
+        } finally {
+            deleteTestFolder();
+        }
+    }
+
+    private CapabilityContentStreamUpdates getContentStreamUpdatesCapbility(Session session) {
+        if (session.getRepositoryInfo().getCapabilities() == null) {
+            return null;
+        }
+
+        return session.getRepositoryInfo().getCapabilities().getContentStreamUpdatesCapability();
+    }
+}

Propchange: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/crud/SetAndDeleteContentTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/ContentChangesSmokeTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/ContentChangesSmokeTest.java?rev=1161109&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/ContentChangesSmokeTest.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/ContentChangesSmokeTest.java Wed Aug 24 14:19:56 2011
@@ -0,0 +1,101 @@
+/*
+ * 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.tests.query;
+
+import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
+import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
+
+import java.util.Map;
+
+import org.apache.chemistry.opencmis.client.api.ChangeEvent;
+import org.apache.chemistry.opencmis.client.api.ChangeEvents;
+import org.apache.chemistry.opencmis.client.api.CmisObject;
+import org.apache.chemistry.opencmis.client.api.Session;
+import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
+import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
+import org.apache.chemistry.opencmis.commons.enums.ChangeType;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
+import org.apache.chemistry.opencmis.tck.CmisTestResult;
+import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
+
+/**
+ * Content Changes smoke test.
+ */
+public class ContentChangesSmokeTest extends AbstractSessionTest {
+
+    @Override
+    public void init(Map<String, String> parameters) {
+        super.init(parameters);
+        setName("Content Changes Smoke Test");
+        setDescription("Calls getContentChanges(). It does not check if the results are correct!");
+    }
+
+    @Override
+    public void run(Session session) {
+        CmisTestResult f;
+
+        if (supportsContentChanges(session)) {
+            ChangeEvents events = session.getContentChanges(null, true, 1000, SELECT_ALL_NO_CACHE_OC);
+
+            f = createResult(FAILURE, "Change events are null!");
+            addResult(assertNotNull(events, null, f));
+
+            if (events != null && events.getChangeEvents() != null) {
+                f = createResult(FAILURE, "Change log token is null!");
+                addResult(assertNotNull(events.getLatestChangeLogToken(), null, f));
+
+                for (ChangeEvent event : events.getChangeEvents()) {
+                    f = createResult(FAILURE, "Object Id is not set!");
+                    addResult(assertStringNotEmpty(event.getObjectId(), null, f));
+
+                    f = createResult(FAILURE, "Change Type is not set! Id: " + event.getObjectId());
+                    addResult(assertNotNull(event.getChangeType(), null, f));
+
+                    f = createResult(FAILURE, "Change Time is not set! Id: " + event.getObjectId());
+                    addResult(assertNotNull(event.getChangeTime(), null, f));
+
+                    if (event.getChangeType() != ChangeType.DELETED && event.getObjectId() != null) {
+                        try {
+                            CmisObject object = session.getObject(event.getObjectId(), SELECT_ALL_NO_CACHE_OC);
+                            addResult(checkObject(session, object, getAllProperties(object), "Object check. Id: "
+                                    + event.getObjectId()));
+                        } catch (CmisObjectNotFoundException e) {
+                            addResult(createResult(
+                                    FAILURE,
+                                    "Change event does reference an object that doesn't exist. Id: "
+                                            + event.getObjectId(), e, false));
+                        }
+                    }
+                }
+            }
+        } else {
+            addResult(createResult(SKIPPED, "Content Changes not supported. Test Skipped!"));
+        }
+    }
+
+    protected boolean supportsContentChanges(Session session) {
+        RepositoryInfo repository = session.getRepositoryInfo();
+
+        if (repository.getCapabilities().getChangesCapability() == null) {
+            return false;
+        }
+
+        return repository.getCapabilities().getChangesCapability() != CapabilityChanges.NONE;
+    }
+}

Propchange: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/ContentChangesSmokeTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QuerySmokeTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QuerySmokeTest.java?rev=1161109&r1=1161108&r2=1161109&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QuerySmokeTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QuerySmokeTest.java Wed Aug 24 14:19:56 2011
@@ -20,20 +20,23 @@ package org.apache.chemistry.opencmis.tc
 
 import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
 import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.OK;
+import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.chemistry.opencmis.client.api.CmisObject;
 import org.apache.chemistry.opencmis.client.api.ItemIterable;
+import org.apache.chemistry.opencmis.client.api.ObjectType;
 import org.apache.chemistry.opencmis.client.api.QueryResult;
 import org.apache.chemistry.opencmis.client.api.Session;
 import org.apache.chemistry.opencmis.commons.PropertyIds;
 import org.apache.chemistry.opencmis.commons.data.PropertyData;
 import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
 import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
 import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
 import org.apache.chemistry.opencmis.tck.CmisTestResult;
 import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
 import org.apache.chemistry.opencmis.tck.impl.CmisTestResultImpl;
@@ -47,18 +50,37 @@ public class QuerySmokeTest extends Abst
     public void init(Map<String, String> parameters) {
         super.init(parameters);
         setName("Query Smoke Test");
-        setDescription("Performs a simple query and checks if the format of the results is correct. It does not check if the result are complete!");
+        setDescription("Performs a simple query and checks if the format of the results is correct. It does not check if the results are complete!");
     }
 
     @Override
     public void run(Session session) {
         CmisTestResult f;
 
-        String testType = "cmis:document";
-        String statement = "SELECT * FROM " + testType;
-        int pageSize = 100;
-
         if (supportsQuery(session)) {
+            String testType = "cmis:document";
+            String statement = "SELECT * FROM " + testType;
+
+            ObjectType type = session.getTypeDefinition(testType);
+
+            f = createResult(FAILURE, "Test type definition '" + testType + "'not found!");
+            addResult(assertNotNull(type, null, f));
+            if (type == null) {
+                return;
+            }
+
+            PropertyDefinition<?> objectIdPropDef = type.getPropertyDefinitions().get(PropertyIds.OBJECT_ID);
+
+            f = createResult(FAILURE, "Object Id property definition does not exist!");
+            addResult(assertNotNull(objectIdPropDef, null, f));
+
+            String objectIdQueryName = null;
+            if (objectIdPropDef != null) {
+                objectIdQueryName = objectIdPropDef.getQueryName();
+            }
+
+            int pageSize = 100;
+
             ItemIterable<QueryResult> resultSet = session.query(statement, false);
 
             if (resultSet == null) {
@@ -70,8 +92,20 @@ public class QuerySmokeTest extends Abst
                     if (qr == null) {
                         addResult(createResult(FAILURE, "Query result is null! (OpenCMIS issue???)"));
                     } else {
-                        addResult(checkQueryResult(session, qr, testType, "Query result: " + i));
+                        addResult(checkQueryResult(session, qr, type, "Query result: " + i));
+
+                        if (objectIdQueryName != null) {
+                            String objectId = (String) qr.getPropertyByQueryName(objectIdQueryName).getFirstValue();
 
+                            try {
+                                CmisObject object = session.getObject(objectId, SELECT_ALL_NO_CACHE_OC);
+                                addResult(checkObject(session, object, getAllProperties(object),
+                                        "Query hit check. Id: " + objectId));
+                            } catch (CmisObjectNotFoundException e) {
+                                addResult(createResult(FAILURE,
+                                        "Query hit references an object that doesn't exist. Id: " + objectId, e, false));
+                            }
+                        }
                         // TODO: check more
                     }
                     i++;
@@ -85,11 +119,11 @@ public class QuerySmokeTest extends Abst
                         + ")"));
             }
         } else {
-            addResult(createInfoResult("Query not supported!"));
+            addResult(createResult(SKIPPED, "Query not supported. Test Skipped!"));
         }
     }
 
-    protected CmisTestResult checkQueryResult(Session session, QueryResult qr, String typeId, String message) {
+    protected CmisTestResult checkQueryResult(Session session, QueryResult qr, ObjectType type, String message) {
         List<CmisTestResult> results = new ArrayList<CmisTestResult>();
 
         CmisTestResult f;
@@ -97,8 +131,6 @@ public class QuerySmokeTest extends Abst
         if (qr.getProperties().isEmpty()) {
             addResult(results, createResult(FAILURE, "Query result is empty!"));
         } else {
-            TypeDefinition type = session.getTypeDefinition(typeId);
-
             for (PropertyDefinition<?> propDef : type.getPropertyDefinitions().values()) {
                 if (propDef.getQueryName() == null) {
                     continue;

Modified: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryTestGroup.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryTestGroup.java?rev=1161109&r1=1161108&r2=1161109&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryTestGroup.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-tck/src/main/java/org/apache/chemistry/opencmis/tck/tests/query/QueryTestGroup.java Wed Aug 24 14:19:56 2011
@@ -31,8 +31,9 @@ public class QueryTestGroup extends Abst
         super.init(parameters);
 
         setName("Query Test Group");
-        setDescription("Query tests.");
+        setDescription("Query and content changes tests.");
 
         addTest(new QuerySmokeTest());
+        addTest(new ContentChangesSmokeTest());
     }
 }

Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java?rev=1161109&r1=1161108&r2=1161109&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java Wed Aug 24 14:19:56 2011
@@ -135,7 +135,6 @@ public class TckDialog {
             ((DefaultTreeModel) groupTree.getModel()).reload();
 
             groupTree.setRootVisible(false);
-            groupTree.setPreferredSize(new Dimension(300, 200));
             groupTree.setCellRenderer(new TestTreeNodeRender());
             groupTree.setCellEditor(new TestTreeNodeEditor());
             groupTree.setEditable(true);
@@ -182,6 +181,7 @@ public class TckDialog {
             // config panel
             final JPanel configPanel = new JPanel();
             configPanel.setLayout(new BoxLayout(configPanel, BoxLayout.PAGE_AXIS));
+            configPanel.setPreferredSize(new Dimension(getWidth() / 2, 500));
             configPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
 
             final JComboBox folderComboBox = addComboBox(configPanel, "Test folder type:",
@@ -202,10 +202,11 @@ public class TckDialog {
 
             add(configPanel);
 
-            final JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(groupTree),
-                    configPanel);
-            splitPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-            add(splitPane, BorderLayout.CENTER);
+            final JPanel mainPanel = new JPanel(new BorderLayout());
+            mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+            mainPanel.add(new JScrollPane(groupTree), BorderLayout.CENTER);
+            mainPanel.add(configPanel, BorderLayout.LINE_END);
+            add(mainPanel, BorderLayout.CENTER);
 
             final JButton runButton = new JButton("Run TCK");
             runButton.setDefaultCapable(true);