1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
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
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
66 f = createResult(FAILURE, "Change log token is null!");
67 addResult(assertNotNull(events.getLatestChangeLogToken(), null, f));
68 } else {
69
70
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
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
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
132 }
133 }
134 }
135 }
136 }