View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.chemistry.opencmis.tck.tests.query;
20  
21  import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
22  import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.INFO;
23  import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
24  
25  import java.util.Map;
26  
27  import org.apache.chemistry.opencmis.client.api.ChangeEvent;
28  import org.apache.chemistry.opencmis.client.api.ChangeEvents;
29  import org.apache.chemistry.opencmis.client.api.CmisObject;
30  import org.apache.chemistry.opencmis.client.api.Session;
31  import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
32  import org.apache.chemistry.opencmis.commons.enums.BindingType;
33  import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges;
34  import org.apache.chemistry.opencmis.commons.enums.ChangeType;
35  import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
36  import org.apache.chemistry.opencmis.tck.CmisTestResult;
37  import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
38  
39  /**
40   * Content Changes smoke test.
41   */
42  public class ContentChangesSmokeTest extends AbstractSessionTest {
43  
44      @Override
45      public void init(Map<String, String> parameters) {
46          super.init(parameters);
47          setName("Content Changes Smoke Test");
48          setDescription("Calls getContentChanges(). It does not check if the results are correct!");
49      }
50  
51      @Override
52      public void run(Session session) {
53          CmisTestResult f;
54  
55          if (supportsContentChanges(session)) {
56              // get a page of 100 entries
57              ChangeEvents events = session.getContentChanges(null, true, 1000, SELECT_ALL_NO_CACHE_OC);
58  
59              f = createResult(FAILURE, "Change events are null!");
60              addResult(assertNotNull(events, null, f));
61  
62              if (events != null && events.getChangeEvents() != null) {
63  
64                  if (getBinding() != BindingType.ATOMPUB) {
65                      // the AtompPub binding does not return a change log token
66                      f = createResult(FAILURE, "Change log token is null!");
67                      addResult(assertNotNull(events.getLatestChangeLogToken(), null, f));
68                  } else {
69                      // an OpenCMIS based server transports the change log token
70                      // in proprietary way.
71                      CmisTestResult ocs = createResult(INFO,
72                              "Change log token is null. The AtomPub binding does not return it.");
73                      CmisTestResult nocs = createResult(INFO,
74                              "Change log token is not null. Probably an OpenCMIS based server.");
75                      addResult(assertNull(events.getLatestChangeLogToken(), ocs, nocs));
76                  }
77  
78                  for (ChangeEvent event : events.getChangeEvents()) {
79                      checkChangeEvent(session, event);
80                  }
81              }
82  
83              // get all entries
84              for (ChangeEvent event : session.getContentChanges(null, true, SELECT_ALL_NO_CACHE_OC)) {
85                  checkChangeEvent(session, event);
86              }
87          } else {
88              addResult(createResult(SKIPPED, "Content Changes not supported. Test Skipped!"));
89          }
90      }
91  
92      protected boolean supportsContentChanges(Session session) {
93          RepositoryInfo repository = session.getRepositoryInfo();
94  
95          if (repository.getCapabilities().getChangesCapability() == null) {
96              return false;
97          }
98  
99          return repository.getCapabilities().getChangesCapability() != CapabilityChanges.NONE;
100     }
101 
102     protected void checkChangeEvent(Session session, ChangeEvent event) {
103         CmisTestResult f;
104 
105         f = createResult(FAILURE, "Object Id is not set!");
106         addResult(assertStringNotEmpty(event.getObjectId(), null, f));
107 
108         f = createResult(FAILURE, "Change Type is not set! Id: " + event.getObjectId());
109         addResult(assertNotNull(event.getChangeType(), null, f));
110 
111         f = createResult(FAILURE, "Change Time is not set! Id: " + event.getObjectId());
112         addResult(assertNotNull(event.getChangeTime(), null, f));
113 
114         if (event.getObjectId() != null) {
115             if (event.getChangeType() == ChangeType.DELETED) {
116                 try {
117                     session.getObject(event.getObjectId(), SELECT_ALL_NO_CACHE_OC);
118                     addResult(createResult(
119                             FAILURE,
120                             "Change event indicates that an object has been deleted but it still exists. Id: "
121                                     + event.getObjectId()));
122                 } catch (CmisObjectNotFoundException e) {
123                     // expected
124                 }
125             } else {
126                 try {
127                     CmisObject object = session.getObject(event.getObjectId(), SELECT_ALL_NO_CACHE_OC);
128                     addResult(checkObject(session, object, getAllProperties(object),
129                             "Object check. Id: " + event.getObjectId()));
130                 } catch (CmisObjectNotFoundException e) {
131                     // object might have been deleted later
132                 }
133             }
134         }
135     }
136 }