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.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   * Repository info test.
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          // ID
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          // name
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          // description
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          // vendor
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          // product name
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          // product version
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         // CMIS version supported
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         // root folder
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         // thin client URI
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         // principal ID anonymous
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         // principal ID anyone
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         // latest change log token
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         // changes incomplete
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         // changes on type
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         // features
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         // capabilities
185         if (ri.getCapabilities() == null) {
186             addResult(createResult(FAILURE, "Capabilities are not set!"));
187         } else {
188             RepositoryCapabilities cap = ri.getCapabilities();
189 
190             // ACL capability
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             // changes capability
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             // content stream updates capability
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             // get descendants capability
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             // get folder tree capability
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             // multifiling capability
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             // unfiling capability
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             // version specific filing capability
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             // query capability
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             // JOIN capability
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             // all versions searchable capability
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             // PWC searchable capability
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             // PWC updatable capability
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             // renditions capability
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                 // new type settable attributes
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                 // creatable property types
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         // ACL capabilities
274         if (ri.getAclCapabilities() == null) {
275             addResult(createResult(WARNING, "ACL capabilities are not set!"));
276         } else {
277             AclCapabilities aclCap = ri.getAclCapabilities();
278 
279             // supported permissions
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             // ACL propagation
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             // permissions
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             // permission mapping
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 }