| /* |
| * 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.basics; |
| |
| 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.WARNING; |
| |
| import java.net.HttpURLConnection; |
| import java.net.URL; |
| import java.util.Map; |
| |
| import org.apache.chemistry.opencmis.client.api.Session; |
| import org.apache.chemistry.opencmis.commons.data.AclCapabilities; |
| import org.apache.chemistry.opencmis.commons.data.ExtensionFeature; |
| import org.apache.chemistry.opencmis.commons.data.RepositoryCapabilities; |
| import org.apache.chemistry.opencmis.commons.data.RepositoryInfo; |
| import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition; |
| import org.apache.chemistry.opencmis.commons.enums.CmisVersion; |
| import org.apache.chemistry.opencmis.tck.CmisTestResult; |
| import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest; |
| |
| /** |
| * Repository info test. |
| */ |
| public class RepositoryInfoTest extends AbstractSessionTest { |
| |
| @Override |
| public void init(Map<String, String> parameters) { |
| super.init(parameters); |
| setName("Repository Info Test"); |
| setDescription("Gets and checks the repository info."); |
| } |
| |
| @Override |
| public void run(Session session) { |
| CmisTestResult success; |
| CmisTestResult failure; |
| |
| RepositoryInfo ri = getRepositoryInfo(session); |
| |
| // ID |
| success = createResult(OK, "Repository ID: " + ri.getId()); |
| failure = createResult(FAILURE, "Repository id is not set!", true); |
| addResult(assertStringNotEmpty(ri.getId(), success, failure)); |
| |
| // name |
| failure = createResult(FAILURE, "Repository name is not set!"); |
| addResult(assertNotNull(ri.getName(), null, failure)); |
| |
| success = createResult(OK, "Repository name: " + ri.getName()); |
| failure = createResult(WARNING, "Repository name is empty!"); |
| addResult(assertStringNotEmpty(ri.getName(), success, failure)); |
| |
| // description |
| failure = createResult(FAILURE, "Repository description is not set!"); |
| addResult(assertNotNull(ri.getDescription(), null, failure)); |
| |
| success = createResult(OK, "Repository description: " + ri.getDescription()); |
| failure = createResult(WARNING, "Repository description is empty!"); |
| addResult(assertStringNotEmpty(ri.getDescription(), success, failure)); |
| |
| // vendor |
| failure = createResult(FAILURE, "Vendor name is not set!"); |
| addResult(assertStringNotEmpty(ri.getVendorName(), null, failure)); |
| |
| success = createResult(OK, "Vendor name: " + ri.getVendorName()); |
| failure = createResult(WARNING, "Vendor name is empty!"); |
| addResult(assertStringNotEmpty(ri.getVendorName(), success, failure)); |
| |
| // product name |
| failure = createResult(FAILURE, "Product name is not set!"); |
| addResult(assertStringNotEmpty(ri.getProductName(), null, failure)); |
| |
| success = createResult(OK, "Product name: " + ri.getProductName()); |
| failure = createResult(WARNING, "Product name is empty!"); |
| addResult(assertStringNotEmpty(ri.getProductName(), success, failure)); |
| |
| // product version |
| failure = createResult(FAILURE, "Product version is not set!"); |
| addResult(assertStringNotEmpty(ri.getProductVersion(), null, failure)); |
| |
| success = createResult(OK, "Product version: " + ri.getProductVersion()); |
| failure = createResult(WARNING, "Product version is empty!"); |
| addResult(assertStringNotEmpty(ri.getProductVersion(), success, failure)); |
| |
| // CMIS version supported |
| success = createResult(OK, "CMIS Version Supported: " + ri.getCmisVersionSupported()); |
| failure = createResult(FAILURE, "CMIS Version Supported is not set!"); |
| addResult(assertStringNotEmpty(ri.getCmisVersionSupported(), success, failure)); |
| |
| if (!"1.0".equals(ri.getCmisVersionSupported()) && !"1.1".equals(ri.getCmisVersionSupported())) { |
| addResult(createResult(FAILURE, "CMIS Version Supported is neither '1.0' nor '1.1'!")); |
| } |
| |
| // root folder |
| success = createResult(OK, "Root folder ID: " + ri.getRootFolderId()); |
| failure = createResult(FAILURE, "Root folder ID is not set!"); |
| addResult(assertStringNotEmpty(ri.getRootFolderId(), success, failure)); |
| |
| // thin client URI |
| success = createResult(OK, "Thin client URI: " + ri.getThinClientUri()); |
| failure = createResult(WARNING, "Thin client URI is not set!"); |
| addResult(assertStringNotEmpty(ri.getThinClientUri(), success, failure)); |
| |
| if (ri.getThinClientUri() != null && ri.getThinClientUri().length() > 0) { |
| try { |
| HttpURLConnection conn = (HttpURLConnection) (new URL(ri.getThinClientUri())).openConnection(); |
| |
| conn.connect(); |
| |
| int responseCode = conn.getResponseCode(); |
| failure = createResult(WARNING, "Unable to connect to thin client '" + ri.getThinClientUri() |
| + "'. HTTP status code: " + responseCode); |
| addResult(assertIsTrue(responseCode >= 200 && responseCode < 400, null, failure)); |
| |
| conn.disconnect(); |
| } catch (Exception e) { |
| addResult(createResult(WARNING, "Unable to connect to thin client '" + ri.getThinClientUri() + "': " |
| + e.getMessage(), e, false)); |
| } |
| } |
| |
| // principal ID anonymous |
| success = createResult(OK, "Principal ID anonymous: " + ri.getPrincipalIdAnonymous()); |
| failure = createResult(WARNING, "Principal ID anonymous is not set!"); |
| addResult(assertStringNotEmpty(ri.getPrincipalIdAnonymous(), success, failure)); |
| |
| // principal ID anyone |
| success = createResult(OK, "Principal ID anyone: " + ri.getPrincipalIdAnyone()); |
| failure = createResult(WARNING, "Principal Id anyone is not set!"); |
| addResult(assertStringNotEmpty(ri.getPrincipalIdAnyone(), success, failure)); |
| |
| // latest change log token |
| success = createResult(OK, "Latest change log token: " + ri.getLatestChangeLogToken()); |
| failure = createResult(WARNING, "Latest change log token is not set!"); |
| addResult(assertStringNotEmpty(ri.getLatestChangeLogToken(), success, failure)); |
| |
| // changes incomplete |
| success = createResult(OK, "Changes Incomplete: " + ri.getChangesIncomplete()); |
| failure = createResult(WARNING, "Changes Incomplete is not set!"); |
| addResult(assertNotNull(ri.getChangesIncomplete(), success, failure)); |
| |
| // changes on type |
| success = createResult(OK, "Changes on type: " + ri.getChangesOnType()); |
| failure = createResult(WARNING, "Changes on type is not set!"); |
| addResult(assertNotNull(ri.getChangesOnType(), success, failure)); |
| |
| if (ri.getChangesOnType() != null) { |
| failure = createResult(WARNING, "Changes on type has more than 4 entries!"); |
| addResult(assertIsTrue(ri.getChangesOnType().size() < 5, null, failure)); |
| } |
| |
| // features |
| if (ri.getCmisVersion() != CmisVersion.CMIS_1_0) { |
| success = createResult(OK, "Repository features exposed."); |
| failure = createResult(OK, "No repository features exposed."); |
| addResult(assertNotNull(ri.getExtensionFeatures(), success, failure)); |
| |
| if (ri.getExtensionFeatures() != null) { |
| for (ExtensionFeature feature : ri.getExtensionFeatures()) { |
| failure = createResult(FAILURE, "At least one repository features has no ID!"); |
| addResult(assertStringNotEmpty(feature.getId(), null, failure)); |
| } |
| } |
| } |
| |
| // capabilities |
| if (ri.getCapabilities() == null) { |
| addResult(createResult(FAILURE, "Capabilities are not set!")); |
| } else { |
| RepositoryCapabilities cap = ri.getCapabilities(); |
| |
| // ACL capability |
| success = createResult(OK, "ACL capability: " + cap.getAclCapability()); |
| failure = createResult(FAILURE, "ACL capability is not set!"); |
| addResult(assertNotNull(cap.getAclCapability(), success, failure)); |
| |
| // changes capability |
| success = createResult(OK, "Changes capability: " + cap.getChangesCapability()); |
| failure = createResult(WARNING, "Changes capability is not set!"); |
| addResult(assertNotNull(cap.getChangesCapability(), success, failure)); |
| |
| // content stream updates capability |
| success = createResult(OK, "Content stream updates capability: " + cap.getContentStreamUpdatesCapability()); |
| failure = createResult(FAILURE, "Content stream updates is not set!"); |
| addResult(assertNotNull(cap.getContentStreamUpdatesCapability(), success, failure)); |
| |
| // get descendants capability |
| success = createResult(OK, "Get descendants capability: " + cap.isGetDescendantsSupported()); |
| failure = createResult(FAILURE, "Get descendants capability is not set!"); |
| addResult(assertNotNull(cap.isGetDescendantsSupported(), success, failure)); |
| |
| // get folder tree capability |
| success = createResult(OK, "Get folder tree capability: " + cap.isGetFolderTreeSupported()); |
| failure = createResult(FAILURE, "Get folder tree capability is not set!"); |
| addResult(assertNotNull(cap.isGetFolderTreeSupported(), success, failure)); |
| |
| // multifiling capability |
| success = createResult(OK, "Multifiling capability: " + cap.isMultifilingSupported()); |
| failure = createResult(FAILURE, "Multifiling capability is not set!"); |
| addResult(assertNotNull(cap.isMultifilingSupported(), success, failure)); |
| |
| // unfiling capability |
| success = createResult(OK, "Unfiling capability: " + cap.isUnfilingSupported()); |
| failure = createResult(FAILURE, "Unfiling capability is not set!"); |
| addResult(assertNotNull(cap.isUnfilingSupported(), success, failure)); |
| |
| // version specific filing capability |
| success = createResult(OK, "Version specific filing capability: " + cap.isVersionSpecificFilingSupported()); |
| failure = createResult(FAILURE, "Version specific filing capability is not set!"); |
| addResult(assertNotNull(cap.isVersionSpecificFilingSupported(), success, failure)); |
| |
| // query capability |
| success = createResult(OK, "Query capability: " + cap.getQueryCapability()); |
| failure = createResult(FAILURE, "Query capability is not set!"); |
| addResult(assertNotNull(cap.getQueryCapability(), success, failure)); |
| |
| // JOIN capability |
| success = createResult(OK, "JOIN capability: " + cap.getJoinCapability()); |
| failure = createResult(FAILURE, "JOIN capability is not set!"); |
| addResult(assertNotNull(cap.getJoinCapability(), success, failure)); |
| |
| // all versions searchable capability |
| success = createResult(OK, "All versions searchable capability: " + cap.isAllVersionsSearchableSupported()); |
| failure = createResult(FAILURE, "All versions searchable capability is not set!"); |
| addResult(assertNotNull(cap.isAllVersionsSearchableSupported(), success, failure)); |
| |
| // PWC searchable capability |
| success = createResult(OK, "PWC searchable capability: " + cap.isPwcSearchableSupported()); |
| failure = createResult(FAILURE, "PWC searchable capability is not set!"); |
| addResult(assertNotNull(cap.isPwcSearchableSupported(), success, failure)); |
| |
| // PWC updatable capability |
| success = createResult(OK, "PWC updatable capability: " + cap.isPwcUpdatableSupported()); |
| failure = createResult(FAILURE, "PWC updatable capability is not set!"); |
| addResult(assertNotNull(cap.isPwcUpdatableSupported(), success, failure)); |
| |
| // renditions capability |
| success = createResult(OK, "Renditions capability: " + cap.getRenditionsCapability()); |
| failure = createResult(FAILURE, "Renditions capability is not set!"); |
| addResult(assertNotNull(cap.getRenditionsCapability(), success, failure)); |
| |
| if (ri.getCmisVersion() != CmisVersion.CMIS_1_0) { |
| // new type settable attributes |
| success = createResult(OK, "'New type settable attributes' flags are set."); |
| failure = createResult(WARNING, "'New type settable attributes' flags are not set!"); |
| addResult(assertNotNull(cap.getNewTypeSettableAttributes(), success, failure)); |
| |
| // creatable property types |
| success = createResult(OK, "'Creatable property types' flags are set."); |
| failure = createResult(WARNING, "'Creatable property types' flags are not set!"); |
| addResult(assertNotNull(cap.getCreatablePropertyTypes(), success, failure)); |
| } |
| } |
| |
| // ACL capabilities |
| if (ri.getAclCapabilities() == null) { |
| addResult(createResult(WARNING, "ACL capabilities are not set!")); |
| } else { |
| AclCapabilities aclCap = ri.getAclCapabilities(); |
| |
| // supported permissions |
| success = createResult(OK, "Supported permissions: " + aclCap.getSupportedPermissions()); |
| failure = createResult(WARNING, "Supported permissions are not set!"); |
| addResult(assertNotNull(aclCap.getSupportedPermissions(), success, failure)); |
| |
| // ACL propagation |
| success = createResult(OK, "ACL propagation: " + aclCap.getAclPropagation()); |
| failure = createResult(WARNING, "ACL propagation is not set!"); |
| addResult(assertNotNull(aclCap.getAclPropagation(), success, failure)); |
| |
| // permissions |
| success = createResult(OK, "Permissions: " |
| + (aclCap.getPermissions() == null ? "?" : aclCap.getPermissions().size())); |
| failure = createResult(FAILURE, "Permissions are not set!"); |
| addResult(assertNotNull(aclCap.getPermissions(), success, failure)); |
| |
| if (aclCap.getPermissions() != null) { |
| int i = 0; |
| for (PermissionDefinition permDef : aclCap.getPermissions()) { |
| failure = createResult(FAILURE, "Permission #" + i + " is not set!"); |
| addResult(assertNotNull(permDef, null, failure)); |
| |
| if (permDef != null) { |
| failure = createResult(FAILURE, "ID of permission #" + i + " is not set!"); |
| addResult(assertStringNotEmpty(permDef.getId(), null, failure)); |
| } |
| |
| i++; |
| } |
| } |
| |
| // permission mapping |
| success = createResult(OK, "Permission mapping: " |
| + (aclCap.getPermissionMapping() == null ? "?" : aclCap.getPermissionMapping().size())); |
| failure = createResult(WARNING, "Permission mapping is not set!"); |
| addResult(assertNotNull(aclCap.getPermissionMapping(), success, failure)); |
| } |
| |
| if (ri.getExtensionFeatures() != null) { |
| for (ExtensionFeature ef : ri.getExtensionFeatures()) { |
| success = createResult(OK, "Extension Feature: " + ef.getId()); |
| failure = createResult(FAILURE, "Extension Feature without ID!"); |
| addResult(assertStringNotEmpty(ef.getId(), success, failure)); |
| |
| failure = createResult(WARNING, "Extension Feature without common name: " + ef.getId()); |
| addResult(assertStringNotEmpty(ef.getCommonName(), null, failure)); |
| |
| failure = createResult(WARNING, "Extension Feature without version label: " + ef.getId()); |
| addResult(assertStringNotEmpty(ef.getVersionLabel(), null, failure)); |
| |
| failure = createResult(WARNING, "Extension Feature without URL: " + ef.getId()); |
| addResult(assertStringNotEmpty(ef.getUrl(), null, failure)); |
| } |
| } |
| } |
| } |