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.basics;
20
21 import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
22 import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.OK;
23 import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
24
25 import java.net.HttpURLConnection;
26 import java.net.URL;
27 import java.util.Map;
28
29 import org.apache.chemistry.opencmis.client.api.Session;
30 import org.apache.chemistry.opencmis.commons.data.AclCapabilities;
31 import org.apache.chemistry.opencmis.commons.data.ExtensionFeature;
32 import org.apache.chemistry.opencmis.commons.data.RepositoryCapabilities;
33 import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
34 import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
35 import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
36 import org.apache.chemistry.opencmis.tck.CmisTestResult;
37 import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
38
39
40
41
42 public class RepositoryInfoTest extends AbstractSessionTest {
43
44 @Override
45 public void init(Map<String, String> parameters) {
46 super.init(parameters);
47 setName("Repository Info Test");
48 setDescription("Gets and checks the repository info.");
49 }
50
51 @Override
52 public void run(Session session) {
53 CmisTestResult success;
54 CmisTestResult failure;
55
56 RepositoryInfo ri = getRepositoryInfo(session);
57
58
59 success = createResult(OK, "Repository ID: " + ri.getId());
60 failure = createResult(FAILURE, "Repository id is not set!", true);
61 addResult(assertStringNotEmpty(ri.getId(), success, failure));
62
63
64 failure = createResult(FAILURE, "Repository name is not set!");
65 addResult(assertNotNull(ri.getName(), null, failure));
66
67 success = createResult(OK, "Repository name: " + ri.getName());
68 failure = createResult(WARNING, "Repository name is empty!");
69 addResult(assertStringNotEmpty(ri.getName(), success, failure));
70
71
72 failure = createResult(FAILURE, "Repository description is not set!");
73 addResult(assertNotNull(ri.getDescription(), null, failure));
74
75 success = createResult(OK, "Repository description: " + ri.getDescription());
76 failure = createResult(WARNING, "Repository description is empty!");
77 addResult(assertStringNotEmpty(ri.getDescription(), success, failure));
78
79
80 failure = createResult(FAILURE, "Vendor name is not set!");
81 addResult(assertStringNotEmpty(ri.getVendorName(), null, failure));
82
83 success = createResult(OK, "Vendor name: " + ri.getVendorName());
84 failure = createResult(WARNING, "Vendor name is empty!");
85 addResult(assertStringNotEmpty(ri.getVendorName(), success, failure));
86
87
88 failure = createResult(FAILURE, "Product name is not set!");
89 addResult(assertStringNotEmpty(ri.getProductName(), null, failure));
90
91 success = createResult(OK, "Product name: " + ri.getProductName());
92 failure = createResult(WARNING, "Product name is empty!");
93 addResult(assertStringNotEmpty(ri.getProductName(), success, failure));
94
95
96 failure = createResult(FAILURE, "Product version is not set!");
97 addResult(assertStringNotEmpty(ri.getProductVersion(), null, failure));
98
99 success = createResult(OK, "Product version: " + ri.getProductVersion());
100 failure = createResult(WARNING, "Product version is empty!");
101 addResult(assertStringNotEmpty(ri.getProductVersion(), success, failure));
102
103
104 success = createResult(OK, "CMIS Version Supported: " + ri.getCmisVersionSupported());
105 failure = createResult(FAILURE, "CMIS Version Supported is not set!");
106 addResult(assertStringNotEmpty(ri.getCmisVersionSupported(), success, failure));
107
108 if (!"1.0".equals(ri.getCmisVersionSupported()) && !"1.1".equals(ri.getCmisVersionSupported())) {
109 addResult(createResult(FAILURE, "CMIS Version Supported is neither '1.0' nor '1.1'!"));
110 }
111
112
113 success = createResult(OK, "Root folder ID: " + ri.getRootFolderId());
114 failure = createResult(FAILURE, "Root folder ID is not set!");
115 addResult(assertStringNotEmpty(ri.getRootFolderId(), success, failure));
116
117
118 success = createResult(OK, "Thin client URI: " + ri.getThinClientUri());
119 failure = createResult(WARNING, "Thin client URI is not set!");
120 addResult(assertStringNotEmpty(ri.getThinClientUri(), success, failure));
121
122 if (ri.getThinClientUri() != null && ri.getThinClientUri().length() > 0) {
123 try {
124 HttpURLConnection conn = (HttpURLConnection) (new URL(ri.getThinClientUri())).openConnection();
125
126 conn.connect();
127
128 int responseCode = conn.getResponseCode();
129 failure = createResult(WARNING, "Unable to connect to thin client '" + ri.getThinClientUri()
130 + "'. HTTP status code: " + responseCode);
131 addResult(assertIsTrue(responseCode >= 200 && responseCode < 400, null, failure));
132
133 conn.disconnect();
134 } catch (Exception e) {
135 addResult(createResult(WARNING, "Unable to connect to thin client '" + ri.getThinClientUri() + "': "
136 + e.getMessage(), e, false));
137 }
138 }
139
140
141 success = createResult(OK, "Principal ID anonymous: " + ri.getPrincipalIdAnonymous());
142 failure = createResult(WARNING, "Principal ID anonymous is not set!");
143 addResult(assertStringNotEmpty(ri.getPrincipalIdAnonymous(), success, failure));
144
145
146 success = createResult(OK, "Principal ID anyone: " + ri.getPrincipalIdAnyone());
147 failure = createResult(WARNING, "Principal Id anyone is not set!");
148 addResult(assertStringNotEmpty(ri.getPrincipalIdAnyone(), success, failure));
149
150
151 success = createResult(OK, "Latest change log token: " + ri.getLatestChangeLogToken());
152 failure = createResult(WARNING, "Latest change log token is not set!");
153 addResult(assertStringNotEmpty(ri.getLatestChangeLogToken(), success, failure));
154
155
156 success = createResult(OK, "Changes Incomplete: " + ri.getChangesIncomplete());
157 failure = createResult(WARNING, "Changes Incomplete is not set!");
158 addResult(assertNotNull(ri.getChangesIncomplete(), success, failure));
159
160
161 success = createResult(OK, "Changes on type: " + ri.getChangesOnType());
162 failure = createResult(WARNING, "Changes on type is not set!");
163 addResult(assertNotNull(ri.getChangesOnType(), success, failure));
164
165 if (ri.getChangesOnType() != null) {
166 failure = createResult(WARNING, "Changes on type has more than 4 entries!");
167 addResult(assertIsTrue(ri.getChangesOnType().size() < 5, null, failure));
168 }
169
170
171 if (ri.getCmisVersion() != CmisVersion.CMIS_1_0) {
172 success = createResult(OK, "Repository features exposed.");
173 failure = createResult(OK, "No repository features exposed.");
174 addResult(assertNotNull(ri.getExtensionFeatures(), success, failure));
175
176 if (ri.getExtensionFeatures() != null) {
177 for (ExtensionFeature feature : ri.getExtensionFeatures()) {
178 failure = createResult(FAILURE, "At least one repository features has no ID!");
179 addResult(assertStringNotEmpty(feature.getId(), null, failure));
180 }
181 }
182 }
183
184
185 if (ri.getCapabilities() == null) {
186 addResult(createResult(FAILURE, "Capabilities are not set!"));
187 } else {
188 RepositoryCapabilities cap = ri.getCapabilities();
189
190
191 success = createResult(OK, "ACL capability: " + cap.getAclCapability());
192 failure = createResult(FAILURE, "ACL capability is not set!");
193 addResult(assertNotNull(cap.getAclCapability(), success, failure));
194
195
196 success = createResult(OK, "Changes capability: " + cap.getChangesCapability());
197 failure = createResult(WARNING, "Changes capability is not set!");
198 addResult(assertNotNull(cap.getChangesCapability(), success, failure));
199
200
201 success = createResult(OK, "Content stream updates capability: " + cap.getContentStreamUpdatesCapability());
202 failure = createResult(FAILURE, "Content stream updates is not set!");
203 addResult(assertNotNull(cap.getContentStreamUpdatesCapability(), success, failure));
204
205
206 success = createResult(OK, "Get descendants capability: " + cap.isGetDescendantsSupported());
207 failure = createResult(FAILURE, "Get descendants capability is not set!");
208 addResult(assertNotNull(cap.isGetDescendantsSupported(), success, failure));
209
210
211 success = createResult(OK, "Get folder tree capability: " + cap.isGetFolderTreeSupported());
212 failure = createResult(FAILURE, "Get folder tree capability is not set!");
213 addResult(assertNotNull(cap.isGetFolderTreeSupported(), success, failure));
214
215
216 success = createResult(OK, "Multifiling capability: " + cap.isMultifilingSupported());
217 failure = createResult(FAILURE, "Multifiling capability is not set!");
218 addResult(assertNotNull(cap.isMultifilingSupported(), success, failure));
219
220
221 success = createResult(OK, "Unfiling capability: " + cap.isUnfilingSupported());
222 failure = createResult(FAILURE, "Unfiling capability is not set!");
223 addResult(assertNotNull(cap.isUnfilingSupported(), success, failure));
224
225
226 success = createResult(OK, "Version specific filing capability: " + cap.isVersionSpecificFilingSupported());
227 failure = createResult(FAILURE, "Version specific filing capability is not set!");
228 addResult(assertNotNull(cap.isVersionSpecificFilingSupported(), success, failure));
229
230
231 success = createResult(OK, "Query capability: " + cap.getQueryCapability());
232 failure = createResult(FAILURE, "Query capability is not set!");
233 addResult(assertNotNull(cap.getQueryCapability(), success, failure));
234
235
236 success = createResult(OK, "JOIN capability: " + cap.getJoinCapability());
237 failure = createResult(FAILURE, "JOIN capability is not set!");
238 addResult(assertNotNull(cap.getJoinCapability(), success, failure));
239
240
241 success = createResult(OK, "All versions searchable capability: " + cap.isAllVersionsSearchableSupported());
242 failure = createResult(FAILURE, "All versions searchable capability is not set!");
243 addResult(assertNotNull(cap.isAllVersionsSearchableSupported(), success, failure));
244
245
246 success = createResult(OK, "PWC searchable capability: " + cap.isPwcSearchableSupported());
247 failure = createResult(FAILURE, "PWC searchable capability is not set!");
248 addResult(assertNotNull(cap.isPwcSearchableSupported(), success, failure));
249
250
251 success = createResult(OK, "PWC updatable capability: " + cap.isPwcUpdatableSupported());
252 failure = createResult(FAILURE, "PWC updatable capability is not set!");
253 addResult(assertNotNull(cap.isPwcUpdatableSupported(), success, failure));
254
255
256 success = createResult(OK, "Renditions capability: " + cap.getRenditionsCapability());
257 failure = createResult(FAILURE, "Renditions capability is not set!");
258 addResult(assertNotNull(cap.getRenditionsCapability(), success, failure));
259
260 if (ri.getCmisVersion() != CmisVersion.CMIS_1_0) {
261
262 success = createResult(OK, "'New type settable attributes' flags are set.");
263 failure = createResult(WARNING, "'New type settable attributes' flags are not set!");
264 addResult(assertNotNull(cap.getNewTypeSettableAttributes(), success, failure));
265
266
267 success = createResult(OK, "'Creatable property types' flags are set.");
268 failure = createResult(WARNING, "'Creatable property types' flags are not set!");
269 addResult(assertNotNull(cap.getCreatablePropertyTypes(), success, failure));
270 }
271 }
272
273
274 if (ri.getAclCapabilities() == null) {
275 addResult(createResult(WARNING, "ACL capabilities are not set!"));
276 } else {
277 AclCapabilities aclCap = ri.getAclCapabilities();
278
279
280 success = createResult(OK, "Supported permissions: " + aclCap.getSupportedPermissions());
281 failure = createResult(WARNING, "Supported permissions are not set!");
282 addResult(assertNotNull(aclCap.getSupportedPermissions(), success, failure));
283
284
285 success = createResult(OK, "ACL propagation: " + aclCap.getAclPropagation());
286 failure = createResult(WARNING, "ACL propagation is not set!");
287 addResult(assertNotNull(aclCap.getAclPropagation(), success, failure));
288
289
290 success = createResult(OK, "Permissions: "
291 + (aclCap.getPermissions() == null ? "?" : aclCap.getPermissions().size()));
292 failure = createResult(FAILURE, "Permissions are not set!");
293 addResult(assertNotNull(aclCap.getPermissions(), success, failure));
294
295 if (aclCap.getPermissions() != null) {
296 int i = 0;
297 for (PermissionDefinition permDef : aclCap.getPermissions()) {
298 failure = createResult(FAILURE, "Permission #" + i + " is not set!");
299 addResult(assertNotNull(permDef, null, failure));
300
301 if (permDef != null) {
302 failure = createResult(FAILURE, "ID of permission #" + i + " is not set!");
303 addResult(assertStringNotEmpty(permDef.getId(), null, failure));
304 }
305
306 i++;
307 }
308 }
309
310
311 success = createResult(OK, "Permission mapping: "
312 + (aclCap.getPermissionMapping() == null ? "?" : aclCap.getPermissionMapping().size()));
313 failure = createResult(WARNING, "Permission mapping is not set!");
314 addResult(assertNotNull(aclCap.getPermissionMapping(), success, failure));
315 }
316
317 if (ri.getExtensionFeatures() != null) {
318 for (ExtensionFeature ef : ri.getExtensionFeatures()) {
319 success = createResult(OK, "Extension Feature: " + ef.getId());
320 failure = createResult(FAILURE, "Extension Feature without ID!");
321 addResult(assertStringNotEmpty(ef.getId(), success, failure));
322
323 failure = createResult(WARNING, "Extension Feature without common name: " + ef.getId());
324 addResult(assertStringNotEmpty(ef.getCommonName(), null, failure));
325
326 failure = createResult(WARNING, "Extension Feature without version label: " + ef.getId());
327 addResult(assertStringNotEmpty(ef.getVersionLabel(), null, failure));
328
329 failure = createResult(WARNING, "Extension Feature without URL: " + ef.getId());
330 addResult(assertStringNotEmpty(ef.getUrl(), null, failure));
331 }
332 }
333 }
334 }