diff --git a/src/main/java/com/aliyun/oss/OSS.java b/src/main/java/com/aliyun/oss/OSS.java index 2da7367e..8c59b60c 100644 --- a/src/main/java/com/aliyun/oss/OSS.java +++ b/src/main/java/com/aliyun/oss/OSS.java @@ -5200,4 +5200,98 @@ public UdfApplicationLog getUdfApplicationLog(GetUdfApplicationLogRequest getUdf * If any errors occurred in OSS while processing the request. */ public VoidResult writeGetObjectResponse(WriteGetObjectResponseRequest writeGetObjectResponseRequest) throws OSSException, ClientException; + + /** + * Create access point + * @param createAccessPointRequest + * + * @return CreateAccessPointResult + * + * @throws OSSException + * @throws ClientException + */ + CreateAccessPointResult createAccessPoint(CreateAccessPointRequest createAccessPointRequest) throws OSSException, ClientException; + + /** + * Get access point from the OSS Server + * @param getAccessPointRequest + * @return GetAccessPointResult + * @throws OSSException + * @throws ClientException + */ + GetAccessPointResult getAccessPoint(GetAccessPointRequest getAccessPointRequest) throws OSSException, ClientException; + + /** + * Delete access point from the OSS Server + * @param deleteAccessPointRequest + * + * @return A {@link VoidResult} instance wrapped void return and + * contains some basic response options, such as requestId. + * + * @throws OSSException + * @throws ClientException + */ + VoidResult deleteAccessPoint(DeleteAccessPointRequest deleteAccessPointRequest) throws OSSException, ClientException; + + /** + * Put access point policy + * @param putAccessPointPolicyRequest + * + * @return A {@link VoidResult} instance wrapped void return and + * contains some basic response options, such as requestId. + * + * @throws OSSException + * @throws ClientException + */ + VoidResult putAccessPointPolicy(PutAccessPointPolicyRequest putAccessPointPolicyRequest) throws OSSException, ClientException; + + /** + * Get access point policy from the OSS Server + * @param getAccessPointPolicyRequest + * @return GetAccessPointPolicyResult + * @throws OSSException + * @throws ClientException + */ + GetAccessPointPolicyResult getAccessPointPolicy(GetAccessPointPolicyRequest getAccessPointPolicyRequest) throws OSSException, ClientException; + + /** + * Delete access point policy from the OSS Server + * @param deleteAccessPointPolicyRequest + * + * @return A {@link VoidResult} instance wrapped void return and + * contains some basic response options, such as requestId. + * + * @throws OSSException + * @throws ClientException + */ + VoidResult deleteAccessPointPolicy(DeleteAccessPointPolicyRequest deleteAccessPointPolicyRequest) throws OSSException, ClientException; + + /** + * List all access points for user {@link Bucket} in the parameter of + * {@link ListObjectsRequest} + * + * @param listAccessPointsRequest + * The {@link ListAccessPointsRequest} instance that defines the + * access point as well as the criteria such as max keys, continuation token. + * + * @return ListAccessPointsResult + * @throws OSSException + * @throws ClientException + */ + public ListAccessPointsResult listAccessPoints(ListAccessPointsRequest listAccessPointsRequest) throws OSSException, ClientException; + + /** + * List all access points for bucket {@link Bucket} in the parameter of + * {@link ListObjectsRequest} + * + * @param listBucketAccessPointsRequest + * The {@link ListBucketAccessPointsRequest} instance that defines the + * access point as well as the criteria such as max keys, continuation token. + * + * @return ListAccessPointsResult + * @throws OSSException + * @throws ClientException + */ + public ListAccessPointsResult listBucketAccessPoints(ListBucketAccessPointsRequest listBucketAccessPointsRequest) throws OSSException, ClientException; + } diff --git a/src/main/java/com/aliyun/oss/OSSClient.java b/src/main/java/com/aliyun/oss/OSSClient.java index 9cc06eb4..212d8ff1 100644 --- a/src/main/java/com/aliyun/oss/OSSClient.java +++ b/src/main/java/com/aliyun/oss/OSSClient.java @@ -1997,6 +1997,46 @@ public VoidResult writeGetObjectResponse(WriteGetObjectResponseRequest writeGetO return this.objectOperation.writeGetObjectResponse(writeGetObjectResponseRequest); } + @Override + public CreateAccessPointResult createAccessPoint(CreateAccessPointRequest createAccessPointRequest) throws OSSException, ClientException { + return bucketOperation.createAccessPoint(createAccessPointRequest); + } + + @Override + public GetAccessPointResult getAccessPoint(GetAccessPointRequest getAccessPointRequest) throws OSSException, ClientException { + return bucketOperation.getAccessPoint(getAccessPointRequest); + } + + @Override + public VoidResult deleteAccessPoint(DeleteAccessPointRequest deleteAccessPointRequest) throws OSSException, ClientException { + return bucketOperation.deleteAccessPoint(deleteAccessPointRequest); + } + + @Override + public VoidResult putAccessPointPolicy(PutAccessPointPolicyRequest putAccessPointPolicyRequest) throws OSSException, ClientException { + return bucketOperation.putAccessPointPolicy(putAccessPointPolicyRequest); + } + + @Override + public GetAccessPointPolicyResult getAccessPointPolicy(GetAccessPointPolicyRequest getAccessPointPolicyRequest) throws OSSException, ClientException { + return bucketOperation.getAccessPointPolicy(getAccessPointPolicyRequest); + } + + @Override + public VoidResult deleteAccessPointPolicy(DeleteAccessPointPolicyRequest deleteAccessPointPolicyRequest) throws OSSException, ClientException { + return bucketOperation.deleteAccessPointPolicy(deleteAccessPointPolicyRequest); + } + + @Override + public ListAccessPointsResult listAccessPoints(ListAccessPointsRequest listAccessPointsRequest) throws OSSException, ClientException { + return bucketOperation.listAccessPoints(listAccessPointsRequest); + } + + @Override + public ListAccessPointsResult listBucketAccessPoints(ListBucketAccessPointsRequest listBucketAccessPointsRequest) throws OSSException, ClientException { + return bucketOperation.listBucketAccessPoints(listBucketAccessPointsRequest); + } + @Override public void shutdown() { try { diff --git a/src/main/java/com/aliyun/oss/common/parser/RequestMarshallers.java b/src/main/java/com/aliyun/oss/common/parser/RequestMarshallers.java index 35e732a9..fbd5c99a 100644 --- a/src/main/java/com/aliyun/oss/common/parser/RequestMarshallers.java +++ b/src/main/java/com/aliyun/oss/common/parser/RequestMarshallers.java @@ -102,6 +102,8 @@ public final class RequestMarshallers { public static final DoMetaQueryRequestMarshaller doMetaQueryRequestMarshaller = new DoMetaQueryRequestMarshaller(); public static final SetBucketCallbackPolicyRequestMarshaller setBucketCallbackPolicyRequestMarshaller = new SetBucketCallbackPolicyRequestMarshaller(); public static final AsyncProcessObjectRequestMarshaller asyncProcessObjectRequestMarshaller = new AsyncProcessObjectRequestMarshaller(); + public static final CreateAccessPointRequestParser createAccessPointRequestParser = new CreateAccessPointRequestParser(); + public static final PutAccessPointPolicyRequestParser putAccessPointPolicyRequestParser = new PutAccessPointPolicyRequestParser(); public interface RequestMarshaller extends Marshaller { @@ -1942,6 +1944,51 @@ public byte[] marshall(AsyncProcessObjectRequest request) { } + public static final class CreateAccessPointRequestParser implements RequestMarshaller2 { + @Override + public byte[] marshall(CreateAccessPointRequest request) { + StringBuffer xmlBody = new StringBuffer(); + xmlBody.append(""); + if(request.getAccessPointName() != null) { + xmlBody.append("").append(request.getAccessPointName()).append(""); + } + if(request.getNetworkOrigin() != null) { + xmlBody.append("").append(request.getNetworkOrigin()).append(""); + } + if(request.getVpc().getVpcId() != null) { + xmlBody.append(""); + if(request.getVpc().getVpcId() != null){ + xmlBody.append("").append(request.getVpc().getVpcId()).append(""); + } + xmlBody.append(""); + } + xmlBody.append(""); + + byte[] rawData = null; + try { + rawData = xmlBody.toString().getBytes(DEFAULT_CHARSET_NAME); + } catch (UnsupportedEncodingException e) { + throw new ClientException("Unsupported encoding " + e.getMessage(), e); + } + return rawData; + } + } + + public static final class PutAccessPointPolicyRequestParser implements RequestMarshaller2 { + + @Override + public byte[] marshall(PutAccessPointPolicyRequest request) { + + byte[] rawData = null; + try { + rawData = request.getAccessPointPolicy().getBytes(DEFAULT_CHARSET_NAME); + } catch (UnsupportedEncodingException e) { + throw new ClientException("Unsupported encoding " + e.getMessage(), e); + } + return rawData; + } + } + private static enum EscapedChar { // "\r" RETURN(" "), diff --git a/src/main/java/com/aliyun/oss/internal/OSSBucketOperation.java b/src/main/java/com/aliyun/oss/internal/OSSBucketOperation.java index ff314df7..63d4a6a5 100644 --- a/src/main/java/com/aliyun/oss/internal/OSSBucketOperation.java +++ b/src/main/java/com/aliyun/oss/internal/OSSBucketOperation.java @@ -20,7 +20,6 @@ package com.aliyun.oss.internal; import static com.aliyun.oss.common.parser.RequestMarshallers.*; -import static com.aliyun.oss.common.parser.RequestMarshallers.putBucketAccessMonitorRequestMarshaller; import static com.aliyun.oss.common.utils.CodingUtils.assertParameterNotNull; import static com.aliyun.oss.internal.OSSUtils.OSS_RESOURCE_MANAGER; import static com.aliyun.oss.internal.OSSUtils.ensureBucketNameValid; @@ -29,7 +28,7 @@ import static com.aliyun.oss.internal.RequestParameters.*; import static com.aliyun.oss.internal.RequestParameters.ACCESS_MONITOR; import static com.aliyun.oss.internal.ResponseParsers.*; -import static com.aliyun.oss.internal.ResponseParsers.getBucketAccessMonitorResponseParser; +import static com.aliyun.oss.internal.ResponseParsers.listAccessPointsResponseParser; import java.io.ByteArrayInputStream; import java.util.ArrayList; @@ -2194,4 +2193,180 @@ public VoidResult deleteBucketCallbackPolicy(GenericRequest genericRequest) thro return doOperation(request, requestIdResponseParser, bucketName, null); } + + public CreateAccessPointResult createAccessPoint(CreateAccessPointRequest createAccessPointRequest) throws OSSException, ClientException { + assertParameterNotNull(createAccessPointRequest, "createAccessPointRequest"); + assertParameterNotNull(createAccessPointRequest.getNetworkOrigin(), "networkOrigin"); + assertParameterNotNull(createAccessPointRequest.getAccessPointName(), "accessPointName"); + + String bucketName = createAccessPointRequest.getBucketName(); + assertParameterNotNull(bucketName, "bucketName"); + ensureBucketNameValid(bucketName); + + Map params = new HashMap(); + params.put(RequestParameters.SUBRESOURCE_ACCESS_POINT, null); + + byte[] rawContent = createAccessPointRequestParser.marshall(createAccessPointRequest); + + RequestMessage request = new OSSRequestMessageBuilder(getInnerClient()).setEndpoint(getEndpoint()) + .setMethod(HttpMethod.PUT).setBucket(bucketName).setParameters(params) + .setOriginalRequest(createAccessPointRequest).setInputSize(rawContent.length).setInputStream(new ByteArrayInputStream(rawContent)).build(); + + return doOperation(request, createAccessPointResponseParser, bucketName, null, true); + } + + public GetAccessPointResult getAccessPoint(GetAccessPointRequest getAccessPointRequest) throws OSSException, ClientException { + assertParameterNotNull(getAccessPointRequest, "getAccessPointRequest"); + assertParameterNotNull(getAccessPointRequest.getAccessPointName(), "accessPointName"); + + String bucketName = getAccessPointRequest.getBucketName(); + assertParameterNotNull(bucketName, "bucketName"); + ensureBucketNameValid(bucketName); + + Map headers = new HashMap(); + headers.put(OSSHeaders.OSS_ACCESS_POINT_NAME, getAccessPointRequest.getAccessPointName()); + + Map params = new HashMap(); + params.put(RequestParameters.SUBRESOURCE_ACCESS_POINT, null); + + RequestMessage request = new OSSRequestMessageBuilder(getInnerClient()).setEndpoint(getEndpoint()) + .setMethod(HttpMethod.GET).setBucket(bucketName).setParameters(params).setHeaders(headers) + .setOriginalRequest(getAccessPointRequest).build(); + + return doOperation(request, getAccessPointResponseParser, bucketName, null, true); + } + + public VoidResult deleteAccessPoint(DeleteAccessPointRequest deleteAccessPointRequest) throws OSSException, ClientException { + assertParameterNotNull(deleteAccessPointRequest, "deleteAccessPointRequest"); + assertParameterNotNull(deleteAccessPointRequest.getAccessPointName(), "accessPointName"); + + String bucketName = deleteAccessPointRequest.getBucketName(); + assertParameterNotNull(bucketName, "bucketName"); + ensureBucketNameValid(bucketName); + + Map headers = new HashMap(); + headers.put(OSSHeaders.OSS_ACCESS_POINT_NAME, deleteAccessPointRequest.getAccessPointName()); + + Map params = new HashMap(); + params.put(RequestParameters.SUBRESOURCE_ACCESS_POINT, null); + + RequestMessage request = new OSSRequestMessageBuilder(getInnerClient()).setEndpoint(getEndpoint()) + .setMethod(HttpMethod.DELETE).setBucket(bucketName).setParameters(params).setHeaders(headers) + .setOriginalRequest(deleteAccessPointRequest).build(); + + return doOperation(request, requestIdResponseParser, bucketName, null, true); + } + + public VoidResult putAccessPointPolicy(PutAccessPointPolicyRequest putAccessPointPolicyRequest) throws OSSException, ClientException { + assertParameterNotNull(putAccessPointPolicyRequest, "putAccessPointPolicyRequest"); + assertParameterNotNull(putAccessPointPolicyRequest.getAccessPointName(), "accessPointName"); + + String bucketName = putAccessPointPolicyRequest.getBucketName(); + + assertParameterNotNull(bucketName, "bucketName"); + ensureBucketNameValid(bucketName); + + Map headers = new HashMap(); + headers.put(OSSHeaders.OSS_ACCESS_POINT_NAME, putAccessPointPolicyRequest.getAccessPointName()); + + Map params = new HashMap(); + params.put(RequestParameters.SUBRESOURCE_ACCESS_POINT_POLICY, null); + + byte[] rawContent = putAccessPointPolicyRequestParser.marshall(putAccessPointPolicyRequest); + + + RequestMessage request = new OSSRequestMessageBuilder(getInnerClient()).setEndpoint(getEndpoint()) + .setMethod(HttpMethod.PUT).setBucket(bucketName).setParameters(params).setHeaders(headers) + .setInputSize(rawContent.length).setInputStream(new ByteArrayInputStream(rawContent)) + .setOriginalRequest(putAccessPointPolicyRequest).build(); + + return doOperation(request, requestIdResponseParser, bucketName, null, true); + } + + public GetAccessPointPolicyResult getAccessPointPolicy(GetAccessPointPolicyRequest getAccessPointPolicyRequest) throws OSSException, ClientException { + assertParameterNotNull(getAccessPointPolicyRequest, "getAccessPointPolicyRequest"); + assertParameterNotNull(getAccessPointPolicyRequest.getAccessPointName(), "accessPointName"); + + String bucketName = getAccessPointPolicyRequest.getBucketName(); + + assertParameterNotNull(bucketName, "bucketName"); + ensureBucketNameValid(bucketName); + + Map headers = new HashMap(); + headers.put(OSSHeaders.OSS_ACCESS_POINT_NAME, getAccessPointPolicyRequest.getAccessPointName()); + + Map params = new HashMap(); + params.put(RequestParameters.SUBRESOURCE_ACCESS_POINT_POLICY, null); + + RequestMessage request = new OSSRequestMessageBuilder(getInnerClient()).setEndpoint(getEndpoint()) + .setMethod(HttpMethod.GET).setBucket(bucketName).setParameters(params).setHeaders(headers) + .setOriginalRequest(getAccessPointPolicyRequest).build(); + + return doOperation(request, getAccessPointPolicyResponseParser, bucketName, null, true); + } + + public VoidResult deleteAccessPointPolicy(DeleteAccessPointPolicyRequest deleteAccessPointPolicyRequest) throws OSSException, ClientException { + assertParameterNotNull(deleteAccessPointPolicyRequest, "deleteAccessPointPolicyRequest"); + assertParameterNotNull(deleteAccessPointPolicyRequest.getAccessPointName(), "accessPointName"); + + String bucketName = deleteAccessPointPolicyRequest.getBucketName(); + + assertParameterNotNull(bucketName, "bucketName"); + ensureBucketNameValid(bucketName); + + Map headers = new HashMap(); + headers.put(OSSHeaders.OSS_ACCESS_POINT_NAME, deleteAccessPointPolicyRequest.getAccessPointName()); + + Map params = new HashMap(); + params.put(RequestParameters.SUBRESOURCE_ACCESS_POINT_POLICY, null); + + RequestMessage request = new OSSRequestMessageBuilder(getInnerClient()).setEndpoint(getEndpoint()) + .setMethod(HttpMethod.DELETE).setBucket(bucketName).setParameters(params).setHeaders(headers) + .setOriginalRequest(deleteAccessPointPolicyRequest).build(); + + return doOperation(request, requestIdResponseParser, bucketName, null, true); + } + + public ListAccessPointsResult listAccessPoints(ListAccessPointsRequest listAccessPointsRequest) throws OSSException, ClientException { + assertParameterNotNull(listAccessPointsRequest, "listAccessPointsRequest"); + Map params = new HashMap(); + params.put(RequestParameters.SUBRESOURCE_ACCESS_POINT, null); + if (null != listAccessPointsRequest.getMaxKeys()) { + params.put(MAX_KEYS, Integer.toString(listAccessPointsRequest.getMaxKeys())); + } + if (null != listAccessPointsRequest.getContinuationToken()) { + params.put(SUBRESOURCE_CONTINUATION_TOKEN, listAccessPointsRequest.getContinuationToken()); + } + + GenericRequest gGenericRequest = new GenericRequest(); + + RequestMessage request = new OSSRequestMessageBuilder(getInnerClient()).setEndpoint(getEndpoint()) + .setMethod(HttpMethod.GET).setParameters(params).setOriginalRequest(gGenericRequest).build(); + + return doOperation(request, listAccessPointsResponseParser, null, null, true); + } + + public ListAccessPointsResult listBucketAccessPoints(ListBucketAccessPointsRequest listBucketAccessPointsRequest) throws OSSException, ClientException { + assertParameterNotNull(listBucketAccessPointsRequest, "listBucketAccessPointsRequest"); + + String bucketName = listBucketAccessPointsRequest.getBucketName(); + assertParameterNotNull(bucketName, "bucketName"); + ensureBucketNameValid(bucketName); + + Map params = new HashMap(); + params.put(RequestParameters.SUBRESOURCE_ACCESS_POINT, null); + if (null != listBucketAccessPointsRequest.getMaxKeys()) { + params.put(MAX_KEYS, Integer.toString(listBucketAccessPointsRequest.getMaxKeys())); + } + if (null != listBucketAccessPointsRequest.getContinuationToken()) { + params.put(SUBRESOURCE_CONTINUATION_TOKEN, listBucketAccessPointsRequest.getContinuationToken()); + } + + RequestMessage request = new OSSRequestMessageBuilder(getInnerClient()).setEndpoint(getEndpoint()) + .setMethod(HttpMethod.GET).setBucket(bucketName).setParameters(params) + .setOriginalRequest(listBucketAccessPointsRequest).build(); + + return doOperation(request, listAccessPointsResponseParser, bucketName, null, true); + } + } diff --git a/src/main/java/com/aliyun/oss/internal/OSSHeaders.java b/src/main/java/com/aliyun/oss/internal/OSSHeaders.java index 6001d2f8..a8246261 100644 --- a/src/main/java/com/aliyun/oss/internal/OSSHeaders.java +++ b/src/main/java/com/aliyun/oss/internal/OSSHeaders.java @@ -121,5 +121,5 @@ public interface OSSHeaders extends HttpHeaders { static final String OSS_REQUEST_ROUTE = "x-oss-request-route"; static final String OSS_REQUEST_TOKEN = "x-oss-request-token"; static final String OSS_FWD_STATUS = "x-oss-fwd-status"; - + static final String OSS_ACCESS_POINT_NAME = "x-oss-access-point-name"; } diff --git a/src/main/java/com/aliyun/oss/internal/RequestParameters.java b/src/main/java/com/aliyun/oss/internal/RequestParameters.java index 5b5c74d6..a423189e 100644 --- a/src/main/java/com/aliyun/oss/internal/RequestParameters.java +++ b/src/main/java/com/aliyun/oss/internal/RequestParameters.java @@ -159,5 +159,6 @@ public final class RequestParameters { public static final String REGIONS = "regions"; public static final String X_OSS_ASYNC_PROCESS = "x-oss-async-process"; public static final String WRITE_GET_OBJECT_RESPONSE = "x-oss-write-get-object-response"; - + public static final String SUBRESOURCE_ACCESS_POINT = "accessPoint"; + public static final String SUBRESOURCE_ACCESS_POINT_POLICY = "accessPointPolicy"; } diff --git a/src/main/java/com/aliyun/oss/internal/ResponseParsers.java b/src/main/java/com/aliyun/oss/internal/ResponseParsers.java index 20be996d..44543a3b 100644 --- a/src/main/java/com/aliyun/oss/internal/ResponseParsers.java +++ b/src/main/java/com/aliyun/oss/internal/ResponseParsers.java @@ -140,6 +140,10 @@ public final class ResponseParsers { public static final DescribeRegionsResponseParser describeRegionsResponseParser = new DescribeRegionsResponseParser(); public static final GetBucketCallbackPolicyResponseParser getBucketCallbackPolicyResponseParser = new GetBucketCallbackPolicyResponseParser(); public static final AsyncProcessObjectResponseParser asyncProcessObjectResponseParser = new AsyncProcessObjectResponseParser(); + public static final CreateAccessPointResponseParser createAccessPointResponseParser = new CreateAccessPointResponseParser(); + public static final GetAccessPointResponseParser getAccessPointResponseParser = new GetAccessPointResponseParser(); + public static final GetAccessPointPolicyResponseParser getAccessPointPolicyResponseParser = new GetAccessPointPolicyResponseParser(); + public static final ListAccessPointsResponseParser listAccessPointsResponseParser = new ListAccessPointsResponseParser(); public static Long parseLongWithDefault(String defaultValue){ if(defaultValue == null || "".equals(defaultValue)){ @@ -4300,4 +4304,186 @@ private AsyncProcessObjectResult parseAsyncProcessObject(InputStream inputStream } } } + + public static final class CreateAccessPointResponseParser implements ResponseParser { + @Override + public CreateAccessPointResult parse(ResponseMessage response) throws ResponseParseException { + try { + CreateAccessPointResult result = parseCreateAccessPoint(response.getContent()); + setResultParameter(result, response); + return result; + } finally { + safeCloseResponse(response); + } + } + + private CreateAccessPointResult parseCreateAccessPoint(InputStream inputStream) throws ResponseParseException { + CreateAccessPointResult createAccessPointResult = new CreateAccessPointResult(); + if (inputStream == null) { + return createAccessPointResult; + } + + try { + Element root = getXmlRootElement(inputStream); + + createAccessPointResult.setAccessPointArn(root.getChildText("AccessPointArn")); + createAccessPointResult.setAlias(root.getChildText("Alias")); + + return createAccessPointResult; + } catch (JDOMParseException e) { + throw new ResponseParseException(e.getPartialDocument() + ": " + e.getMessage(), e); + } catch (Exception e) { + throw new ResponseParseException(e.getMessage(), e); + } + } + } + + public static final class GetAccessPointResponseParser implements ResponseParser { + @Override + public GetAccessPointResult parse(ResponseMessage response) throws ResponseParseException { + try { + GetAccessPointResult result = parseGetAccessPoint(response.getContent()); + setResultParameter(result, response); + return result; + } finally { + safeCloseResponse(response); + } + } + + private GetAccessPointResult parseGetAccessPoint(InputStream inputStream) throws ResponseParseException { + GetAccessPointResult getAccessPointResult = new GetAccessPointResult(); + if (inputStream == null) { + return getAccessPointResult; + } + + try { + Element root = getXmlRootElement(inputStream); + + getAccessPointResult.setAccessPointName(root.getChildText("AccessPointName")); + getAccessPointResult.setBucket(root.getChildText("Bucket")); + getAccessPointResult.setAccountId(root.getChildText("AccountId")); + getAccessPointResult.setNetworkOrigin(root.getChildText("NetworkOrigin")); + if (root.getChild("VpcConfiguration").getChildText("VpcId") != null) { + AccessPointVpcConfiguration accessPointVpcConfiguration = new AccessPointVpcConfiguration(); + accessPointVpcConfiguration.setVpcId(root.getChild("VpcConfiguration").getChildText("VpcId")); + getAccessPointResult.setVpc(accessPointVpcConfiguration); + } + getAccessPointResult.setAccessPointArn(root.getChildText("AccessPointArn")); + if (root.getChildText("CreationDate") != null) { + getAccessPointResult.setCreationDate(root.getChildText("CreationDate")); + } + getAccessPointResult.setAlias(root.getChildText("Alias")); + getAccessPointResult.setStatus(root.getChildText("Status")); + + if (root.getChild("Endpoints") != null) { + AccessPointEndpoints accessPointEndpoints = new AccessPointEndpoints(); + if (root.getChild("Endpoints").getChildText("PublicEndpoint") != null) { + accessPointEndpoints.setPublicEndpoint(root.getChild("Endpoints").getChildText("PublicEndpoint")); + } + if (root.getChild("Endpoints").getChildText("InternalEndpoint") != null) { + accessPointEndpoints.setInternalEndpoint(root.getChild("Endpoints").getChildText("InternalEndpoint")); + } + getAccessPointResult.setEndpoints(accessPointEndpoints); + } + + return getAccessPointResult; + } catch (JDOMParseException e) { + throw new ResponseParseException(e.getPartialDocument() + ": " + e.getMessage(), e); + } catch (Exception e) { + throw new ResponseParseException(e.getMessage(), e); + } + } + } + + public static final class GetAccessPointPolicyResponseParser implements ResponseParser { + @Override + public GetAccessPointPolicyResult parse(ResponseMessage response) throws ResponseParseException { + try { + GetAccessPointPolicyResult result = parseGetAccessPointPolicy(response.getContent()); + setResultParameter(result, response); + return result; + } finally { + safeCloseResponse(response); + } + } + + private GetAccessPointPolicyResult parseGetAccessPointPolicy(InputStream inputStream) throws ResponseParseException { + GetAccessPointPolicyResult getAccessPointPolicyResult = new GetAccessPointPolicyResult(); + if (inputStream == null) { + return getAccessPointPolicyResult; + } + + try { + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); + StringBuilder sb = new StringBuilder(); + + String s ; + while (( s = reader.readLine()) != null) { + sb.append(s); + } + + getAccessPointPolicyResult.setAccessPointPolicy(sb.toString()); + + return getAccessPointPolicyResult; + } catch (Exception e) { + throw new ResponseParseException(e.getMessage(), e); + } + } + } + + public static final class ListAccessPointsResponseParser implements ResponseParser { + @Override + public ListAccessPointsResult parse(ResponseMessage response) throws ResponseParseException { + try { + ListAccessPointsResult result = parseListAccessPoint(response.getContent()); + setResultParameter(result, response); + return result; + } finally { + safeCloseResponse(response); + } + } + + private ListAccessPointsResult parseListAccessPoint(InputStream inputStream) throws ResponseParseException { + ListAccessPointsResult listAccessPointsResult = new ListAccessPointsResult(); + if (inputStream == null) { + return listAccessPointsResult; + } + + try { + Element root = getXmlRootElement(inputStream); + if(root.getChildText("IsTruncated") != null){ + listAccessPointsResult.setTruncated(Boolean.valueOf(root.getChildText("IsTruncated"))); + } + + listAccessPointsResult.setNextContinuationToken(root.getChildText("NextContinuationToken")); + listAccessPointsResult.setAccountId(root.getChildText("AccountId")); + + if (root.getChild("AccessPoints") != null) { + List accessElems = root.getChild("AccessPoints").getChildren("AccessPoint"); + List accessPoints = new ArrayList(); + for (Element e : accessElems) { + AccessPoint accessPoint = new AccessPoint(); + accessPoint.setBucket(e.getChildText("Bucket")); + accessPoint.setAccessPointName(e.getChildText("AccessPointName")); + accessPoint.setAlias(e.getChildText("Alias")); + accessPoint.setNetworkOrigin(e.getChildText("NetworkOrigin")); + accessPoint.setStatus(e.getChildText("Status")); + + if (e.getChild("VpcConfiguration").getChildText("VpcId") != null) { + AccessPointVpcConfiguration accessPointVpcConfiguration = new AccessPointVpcConfiguration(); + accessPointVpcConfiguration.setVpcId(e.getChild("VpcConfiguration").getChildText("VpcId")); + accessPoint.setVpc(accessPointVpcConfiguration); + } + accessPoints.add(accessPoint); + } + listAccessPointsResult.setAccessPoints(accessPoints); + } + return listAccessPointsResult; + } catch (JDOMParseException e) { + throw new ResponseParseException(e.getPartialDocument() + ": " + e.getMessage(), e); + } catch (Exception e) { + throw new ResponseParseException(e.getMessage(), e); + } + } + } } diff --git a/src/main/java/com/aliyun/oss/internal/SignParameters.java b/src/main/java/com/aliyun/oss/internal/SignParameters.java index f673aa2a..6147e603 100644 --- a/src/main/java/com/aliyun/oss/internal/SignParameters.java +++ b/src/main/java/com/aliyun/oss/internal/SignParameters.java @@ -43,6 +43,6 @@ public class SignParameters { SUBRESOURCE_WORM_ID, SUBRESOURCE_WORM_EXTEND, SUBRESOURCE_CALLBACK, SUBRESOURCE_CALLBACK_VAR, SUBRESOURCE_DIR, SUBRESOURCE_RENAME, SUBRESOURCE_DIR_DELETE, SUBRESOURCE_TRANSFER_ACCELERATION, X_OSS_AC_SOURCE_IP, X_OSS_AC_SUBNET_MASK, X_OSS_AC_VPC_ID, X_OSS_AC_FORWARD_ALLOW, META_QUERY, SUBRESOURCE_RESOURCE_GROUP, - SUBRESOURCE_REGION_LIST, X_OSS_ASYNC_PROCESS, WRITE_GET_OBJECT_RESPONSE}); + SUBRESOURCE_REGION_LIST, X_OSS_ASYNC_PROCESS, WRITE_GET_OBJECT_RESPONSE, SUBRESOURCE_ACCESS_POINT, SUBRESOURCE_ACCESS_POINT_POLICY}); } diff --git a/src/main/java/com/aliyun/oss/model/AccessPoint.java b/src/main/java/com/aliyun/oss/model/AccessPoint.java new file mode 100644 index 00000000..a2bdb2f5 --- /dev/null +++ b/src/main/java/com/aliyun/oss/model/AccessPoint.java @@ -0,0 +1,58 @@ +package com.aliyun.oss.model; + +public class AccessPoint { + private String bucket; + private String accessPointName; + private String alias; + private String networkOrigin; + private String status; + private AccessPointVpcConfiguration vpc; + + public String getBucket() { + return bucket; + } + + public void setBucket(String bucket) { + this.bucket = bucket; + } + + public String getAccessPointName() { + return accessPointName; + } + + public void setAccessPointName(String accessPointName) { + this.accessPointName = accessPointName; + } + + public String getAlias() { + return alias; + } + + public void setAlias(String alias) { + this.alias = alias; + } + + public String getNetworkOrigin() { + return networkOrigin; + } + + public void setNetworkOrigin(String networkOrigin) { + this.networkOrigin = networkOrigin; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public AccessPointVpcConfiguration getVpc() { + return vpc; + } + + public void setVpc(AccessPointVpcConfiguration vpc) { + this.vpc = vpc; + } +} diff --git a/src/main/java/com/aliyun/oss/model/AccessPointEndpoints.java b/src/main/java/com/aliyun/oss/model/AccessPointEndpoints.java new file mode 100644 index 00000000..39ec1ae0 --- /dev/null +++ b/src/main/java/com/aliyun/oss/model/AccessPointEndpoints.java @@ -0,0 +1,22 @@ +package com.aliyun.oss.model; + +public class AccessPointEndpoints { + private String publicEndpoint; + private String internalEndpoint; + + public String getPublicEndpoint() { + return publicEndpoint; + } + + public void setPublicEndpoint(String publicEndpoint) { + this.publicEndpoint = publicEndpoint; + } + + public String getInternalEndpoint() { + return internalEndpoint; + } + + public void setInternalEndpoint(String internalEndpoint) { + this.internalEndpoint = internalEndpoint; + } +} diff --git a/src/main/java/com/aliyun/oss/model/AccessPointVpcConfiguration.java b/src/main/java/com/aliyun/oss/model/AccessPointVpcConfiguration.java new file mode 100644 index 00000000..8262ef15 --- /dev/null +++ b/src/main/java/com/aliyun/oss/model/AccessPointVpcConfiguration.java @@ -0,0 +1,18 @@ +package com.aliyun.oss.model; + +public class AccessPointVpcConfiguration { + private String vpcId; + + public String getVpcId() { + return vpcId; + } + + public void setVpcId(String vpcId) { + this.vpcId = vpcId; + } + + public AccessPointVpcConfiguration withVpcId(String vpcId) { + this.vpcId = vpcId; + return this; + } +} diff --git a/src/main/java/com/aliyun/oss/model/CreateAccessPointRequest.java b/src/main/java/com/aliyun/oss/model/CreateAccessPointRequest.java new file mode 100644 index 00000000..4f82c4c8 --- /dev/null +++ b/src/main/java/com/aliyun/oss/model/CreateAccessPointRequest.java @@ -0,0 +1,53 @@ +package com.aliyun.oss.model; + +public class CreateAccessPointRequest extends GenericRequest { + private String accessPointName; + private String networkOrigin; + private AccessPointVpcConfiguration vpc; + + public CreateAccessPointRequest() { + } + + public CreateAccessPointRequest(String bucketName) { + super(bucketName); + } + + public String getAccessPointName() { + return accessPointName; + } + + public void setAccessPointName(String accessPointName) { + this.accessPointName = accessPointName; + } + + public CreateAccessPointRequest withAccessPointName(String accessPointName) { + this.accessPointName = accessPointName; + return this; + } + + public String getNetworkOrigin() { + return networkOrigin; + } + + public void setNetworkOrigin(String networkOrigin) { + this.networkOrigin = networkOrigin; + } + + public CreateAccessPointRequest withNetworkOrigin(String networkOrigin) { + this.networkOrigin = networkOrigin; + return this; + } + + public AccessPointVpcConfiguration getVpc() { + return vpc; + } + + public void setVpc(AccessPointVpcConfiguration vpc) { + this.vpc = vpc; + } + + public CreateAccessPointRequest withVpc(AccessPointVpcConfiguration vpc) { + this.vpc = vpc; + return this; + } +} diff --git a/src/main/java/com/aliyun/oss/model/CreateAccessPointResult.java b/src/main/java/com/aliyun/oss/model/CreateAccessPointResult.java new file mode 100644 index 00000000..c5b7f3a7 --- /dev/null +++ b/src/main/java/com/aliyun/oss/model/CreateAccessPointResult.java @@ -0,0 +1,22 @@ +package com.aliyun.oss.model; + +public class CreateAccessPointResult extends GenericResult { + private String accessPointArn; + private String alias; + + public String getAccessPointArn() { + return accessPointArn; + } + + public void setAccessPointArn(String accessPointArn) { + this.accessPointArn = accessPointArn; + } + + public String getAlias() { + return alias; + } + + public void setAlias(String alias) { + this.alias = alias; + } +} diff --git a/src/main/java/com/aliyun/oss/model/DeleteAccessPointPolicyRequest.java b/src/main/java/com/aliyun/oss/model/DeleteAccessPointPolicyRequest.java new file mode 100644 index 00000000..c7d57671 --- /dev/null +++ b/src/main/java/com/aliyun/oss/model/DeleteAccessPointPolicyRequest.java @@ -0,0 +1,25 @@ +package com.aliyun.oss.model; + +public class DeleteAccessPointPolicyRequest extends GenericRequest { + private String accessPointName; + + public DeleteAccessPointPolicyRequest() { + } + + public DeleteAccessPointPolicyRequest(String bucketName) { + super(bucketName); + } + + public String getAccessPointName() { + return accessPointName; + } + + public void setAccessPointName(String accessPointName) { + this.accessPointName = accessPointName; + } + + public DeleteAccessPointPolicyRequest withAccessPointName(String accessPointName) { + this.accessPointName = accessPointName; + return this; + } +} diff --git a/src/main/java/com/aliyun/oss/model/DeleteAccessPointRequest.java b/src/main/java/com/aliyun/oss/model/DeleteAccessPointRequest.java new file mode 100644 index 00000000..b471f9f1 --- /dev/null +++ b/src/main/java/com/aliyun/oss/model/DeleteAccessPointRequest.java @@ -0,0 +1,25 @@ +package com.aliyun.oss.model; + +public class DeleteAccessPointRequest extends GenericRequest { + private String accessPointName; + + public DeleteAccessPointRequest() { + } + + public DeleteAccessPointRequest(String bucketName) { + super(bucketName); + } + + public String getAccessPointName() { + return accessPointName; + } + + public void setAccessPointName(String accessPointName) { + this.accessPointName = accessPointName; + } + + public DeleteAccessPointRequest withAccessPointName(String accessPointName) { + this.accessPointName = accessPointName; + return this; + } +} diff --git a/src/main/java/com/aliyun/oss/model/GetAccessPointPolicyRequest.java b/src/main/java/com/aliyun/oss/model/GetAccessPointPolicyRequest.java new file mode 100644 index 00000000..b3200170 --- /dev/null +++ b/src/main/java/com/aliyun/oss/model/GetAccessPointPolicyRequest.java @@ -0,0 +1,25 @@ +package com.aliyun.oss.model; + +public class GetAccessPointPolicyRequest extends GenericRequest { + private String accessPointName; + + public GetAccessPointPolicyRequest() { + } + + public GetAccessPointPolicyRequest(String bucketName) { + super(bucketName); + } + + public String getAccessPointName() { + return accessPointName; + } + + public void setAccessPointName(String accessPointName) { + this.accessPointName = accessPointName; + } + + public GetAccessPointPolicyRequest withAccessPointName(String accessPointName) { + this.accessPointName = accessPointName; + return this; + } +} diff --git a/src/main/java/com/aliyun/oss/model/GetAccessPointPolicyResult.java b/src/main/java/com/aliyun/oss/model/GetAccessPointPolicyResult.java new file mode 100644 index 00000000..be258fbd --- /dev/null +++ b/src/main/java/com/aliyun/oss/model/GetAccessPointPolicyResult.java @@ -0,0 +1,13 @@ +package com.aliyun.oss.model; + +public class GetAccessPointPolicyResult extends GenericResult { + private String accessPointPolicy; + + public String getAccessPointPolicy() { + return accessPointPolicy; + } + + public void setAccessPointPolicy(String accessPointPolicy) { + this.accessPointPolicy = accessPointPolicy; + } +} diff --git a/src/main/java/com/aliyun/oss/model/GetAccessPointRequest.java b/src/main/java/com/aliyun/oss/model/GetAccessPointRequest.java new file mode 100644 index 00000000..9cafc507 --- /dev/null +++ b/src/main/java/com/aliyun/oss/model/GetAccessPointRequest.java @@ -0,0 +1,25 @@ +package com.aliyun.oss.model; + +public class GetAccessPointRequest extends GenericRequest { + private String accessPointName; + + public GetAccessPointRequest() { + } + + public GetAccessPointRequest(String bucketName) { + super(bucketName); + } + + public String getAccessPointName() { + return accessPointName; + } + + public void setAccessPointName(String accessPointName) { + this.accessPointName = accessPointName; + } + + public GetAccessPointRequest withAccessPointName(String accessPointName) { + this.accessPointName = accessPointName; + return this; + } +} diff --git a/src/main/java/com/aliyun/oss/model/GetAccessPointResult.java b/src/main/java/com/aliyun/oss/model/GetAccessPointResult.java new file mode 100644 index 00000000..ae7867ad --- /dev/null +++ b/src/main/java/com/aliyun/oss/model/GetAccessPointResult.java @@ -0,0 +1,94 @@ +package com.aliyun.oss.model; + +public class GetAccessPointResult extends GenericResult { + private String accessPointName; + private String bucket; + private String accountId; + private String networkOrigin; + private AccessPointVpcConfiguration vpc; + private String accessPointArn; + private String creationDate; + private String alias; + private String status; + private AccessPointEndpoints endpoints; + + public String getAccessPointName() { + return accessPointName; + } + + public void setAccessPointName(String accessPointName) { + this.accessPointName = accessPointName; + } + + public String getBucket() { + return bucket; + } + + public void setBucket(String bucket) { + this.bucket = bucket; + } + + public String getAccountId() { + return accountId; + } + + public void setAccountId(String accountId) { + this.accountId = accountId; + } + + public String getNetworkOrigin() { + return networkOrigin; + } + + public void setNetworkOrigin(String networkOrigin) { + this.networkOrigin = networkOrigin; + } + + public AccessPointVpcConfiguration getVpc() { + return vpc; + } + + public void setVpc(AccessPointVpcConfiguration vpc) { + this.vpc = vpc; + } + + public String getAccessPointArn() { + return accessPointArn; + } + + public void setAccessPointArn(String accessPointArn) { + this.accessPointArn = accessPointArn; + } + + public String getCreationDate() { + return creationDate; + } + + public void setCreationDate(String creationDate) { + this.creationDate = creationDate; + } + + public String getAlias() { + return alias; + } + + public void setAlias(String alias) { + this.alias = alias; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public AccessPointEndpoints getEndpoints() { + return endpoints; + } + + public void setEndpoints(AccessPointEndpoints endpoints) { + this.endpoints = endpoints; + } +} diff --git a/src/main/java/com/aliyun/oss/model/ListAccessPointsRequest.java b/src/main/java/com/aliyun/oss/model/ListAccessPointsRequest.java new file mode 100644 index 00000000..3d7cac22 --- /dev/null +++ b/src/main/java/com/aliyun/oss/model/ListAccessPointsRequest.java @@ -0,0 +1,48 @@ +package com.aliyun.oss.model; + +public class ListAccessPointsRequest { + private static final int MAX_RETURNED_KEYS_LIMIT = 1000; + + // The max objects to return---By default it's 100. + private Integer maxKeys; + // The marker filter----objects returned whose key must be greater than the + // maker in lexicographical order. + private String continuationToken; + + public ListAccessPointsRequest() { + } + + + public ListAccessPointsRequest(String continuationToken, Integer maxKeys) { + setContinuationToken(continuationToken); + if (maxKeys != null) { + setMaxKeys(maxKeys); + } + } + + public String getContinuationToken() { + return continuationToken; + } + + public void setContinuationToken(String continuationToken) { + this.continuationToken = continuationToken; + } + + public ListAccessPointsRequest withContinuationToken(String continuationToken) { + setContinuationToken(continuationToken); + return this; + } + + public Integer getMaxKeys() { + return maxKeys; + } + + public void setMaxKeys(Integer maxKeys) { + this.maxKeys = maxKeys; + } + + public ListAccessPointsRequest withMaxKeys(Integer maxKeys) { + setMaxKeys(maxKeys); + return this; + } +} diff --git a/src/main/java/com/aliyun/oss/model/ListAccessPointsResult.java b/src/main/java/com/aliyun/oss/model/ListAccessPointsResult.java new file mode 100644 index 00000000..ebe5f4ff --- /dev/null +++ b/src/main/java/com/aliyun/oss/model/ListAccessPointsResult.java @@ -0,0 +1,42 @@ +package com.aliyun.oss.model; + +import java.util.List; + +public class ListAccessPointsResult extends GenericResult { + private Boolean isTruncated; + private String nextContinuationToken; + private String accountId; + private List accessPoints; + + public Boolean getTruncated() { + return isTruncated; + } + + public void setTruncated(Boolean truncated) { + isTruncated = truncated; + } + + public String getNextContinuationToken() { + return nextContinuationToken; + } + + public void setNextContinuationToken(String nextContinuationToken) { + this.nextContinuationToken = nextContinuationToken; + } + + public String getAccountId() { + return accountId; + } + + public void setAccountId(String accountId) { + this.accountId = accountId; + } + + public List getAccessPoints() { + return accessPoints; + } + + public void setAccessPoints(List accessPoints) { + this.accessPoints = accessPoints; + } +} diff --git a/src/main/java/com/aliyun/oss/model/ListBucketAccessPointsRequest.java b/src/main/java/com/aliyun/oss/model/ListBucketAccessPointsRequest.java new file mode 100644 index 00000000..ecd1c321 --- /dev/null +++ b/src/main/java/com/aliyun/oss/model/ListBucketAccessPointsRequest.java @@ -0,0 +1,50 @@ +package com.aliyun.oss.model; + +public class ListBucketAccessPointsRequest extends GenericRequest { + private static final int MAX_RETURNED_KEYS_LIMIT = 1000; + + // The max objects to return---By default it's 100. + private Integer maxKeys; + // The marker filter----objects returned whose key must be greater than the + // maker in lexicographical order. + private String continuationToken; + + + public ListBucketAccessPointsRequest(String bucketName) { + this(bucketName, null, null); + } + + public ListBucketAccessPointsRequest(String bucketName, String continuationToken, Integer maxKeys) { + super(bucketName); + setContinuationToken(continuationToken); + if (maxKeys != null) { + setMaxKeys(maxKeys); + } + } + + public String getContinuationToken() { + return continuationToken; + } + + public void setContinuationToken(String continuationToken) { + this.continuationToken = continuationToken; + } + + public ListBucketAccessPointsRequest withContinuationToken(String continuationToken) { + setContinuationToken(continuationToken); + return this; + } + + public Integer getMaxKeys() { + return maxKeys; + } + + public void setMaxKeys(Integer maxKeys) { + this.maxKeys = maxKeys; + } + + public ListBucketAccessPointsRequest withMaxKeys(Integer maxKeys) { + setMaxKeys(maxKeys); + return this; + } +} diff --git a/src/main/java/com/aliyun/oss/model/PutAccessPointPolicyRequest.java b/src/main/java/com/aliyun/oss/model/PutAccessPointPolicyRequest.java new file mode 100644 index 00000000..a8ad8ea6 --- /dev/null +++ b/src/main/java/com/aliyun/oss/model/PutAccessPointPolicyRequest.java @@ -0,0 +1,39 @@ +package com.aliyun.oss.model; + +public class PutAccessPointPolicyRequest extends GenericRequest { + private String accessPointPolicy; + private String accessPointName; + + public PutAccessPointPolicyRequest() { + } + + public PutAccessPointPolicyRequest(String bucketName) { + super(bucketName); + } + + public String getAccessPointPolicy() { + return accessPointPolicy; + } + + public void setAccessPointPolicy(String accessPointPolicy) { + this.accessPointPolicy = accessPointPolicy; + } + + public PutAccessPointPolicyRequest withAccessPointPolicy(String accessPointPolicy) { + this.accessPointPolicy = accessPointPolicy; + return this; + } + + public String getAccessPointName() { + return accessPointName; + } + + public void setAccessPointName(String accessPointName) { + this.accessPointName = accessPointName; + } + + public PutAccessPointPolicyRequest withAccessPointName(String accessPointName) { + this.accessPointName = accessPointName; + return this; + } +} diff --git a/src/samples/AccessPointSample.java b/src/samples/AccessPointSample.java new file mode 100644 index 00000000..57354b6c --- /dev/null +++ b/src/samples/AccessPointSample.java @@ -0,0 +1,90 @@ +package samples; + +import com.aliyun.oss.*; +import com.aliyun.oss.model.*; +import com.aliyun.oss.integrationtests.TestConfig; + +public class AccessPointSample { + private static String endpoint = "*** Provide OSS endpoint ***"; + private static String accessKeyId = "*** Provide your AccessKeyId ***"; + private static String accessKeySecret = "*** Provide your AccessKeySecret ***"; + private static String bucketName = "*** Provide bucket name ***"; + + public static void main(String[] args) throws InterruptedException { + + /* + * Constructs a client instance with your account for accessing OSS + */ + OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); + + try { + String accessPointName = "test-ap-jt-3"; + String networkOrigin = "vpc"; + String accessPointPolicy = "{\"Version\":\"1\",\"Statement\":[{\"Action\":[\"oss:PutObject\",\"oss:GetObject\"],\"Effect\":\"Deny\",\"Principal\":[\""+TestConfig.OSS_TEST_USER_ID+"\"],\"Resource\":[\"acs:oss:"+TestConfig.OSS_TEST_REGION+":"+TestConfig.OSS_TEST_USER_ID+":accesspoint/"+accessPointName+"\",\"acs:oss:"+TestConfig.OSS_TEST_REGION+":"+TestConfig.OSS_TEST_USER_ID+":accesspoint/"+accessPointName+"/object/*\"]}]}"; + + CreateAccessPointRequest createAccessPointRequest = new CreateAccessPointRequest(bucketName) + .withAccessPointName(accessPointName) + .withNetworkOrigin(networkOrigin) + .withVpc(new AccessPointVpcConfiguration()); + CreateAccessPointResult createReturn = ossClient.createAccessPoint(createAccessPointRequest); + System.out.println("The status code for create access point is :" + createReturn.getResponse().getStatusCode()); + + GetAccessPointRequest getAccessPointRequest = new GetAccessPointRequest(bucketName).withAccessPointName(accessPointName); + GetAccessPointResult getReturn = ossClient.getAccessPoint(getAccessPointRequest); + System.out.println("The status code for get access point is :" + getReturn.getResponse().getStatusCode()); + System.out.println("Access point name is :" + getReturn.getAccessPointName()); + System.out.println("Vpc id is :" + getReturn.getVpc()); + + + ListAccessPointsRequest listAccessPointsRequest = new ListAccessPointsRequest() + .withMaxKeys(10); + ListAccessPointsResult listUserReturn = ossClient.listAccessPoints(listAccessPointsRequest); + System.out.println("The status code for list access point is :" + listUserReturn.getResponse().getStatusCode()); + System.out.println("Access point name is :" + listUserReturn.getAccessPoints().get(0).getAccessPointName()); + System.out.println("Vpc id is :" + listUserReturn.getAccessPoints().get(0).getVpc()); + + ListBucketAccessPointsRequest listBucketAccessPointsRequest = new ListBucketAccessPointsRequest(bucketName) + .withMaxKeys(10); + ListAccessPointsResult listBucketReturn = ossClient.listBucketAccessPoints(listBucketAccessPointsRequest); + System.out.println("The status code for list access point is :" + listBucketReturn.getResponse().getStatusCode()); + System.out.println("Access point name is :" + listBucketReturn.getAccessPoints().get(0).getAccessPointName()); + System.out.println("Vpc id is :" + listBucketReturn.getAccessPoints().get(0).getVpc()); + + PutAccessPointPolicyRequest putAccessPointPolicyRequest = new PutAccessPointPolicyRequest(bucketName) + .withAccessPointName(accessPointName) + .withAccessPointPolicy(accessPointPolicy); + VoidResult createPolicyReturn = ossClient.putAccessPointPolicy(putAccessPointPolicyRequest); + System.out.println("The status code for put access point policy is :" + createPolicyReturn.getResponse().getStatusCode()); + + GetAccessPointPolicyRequest getAccessPointPolicyRequest = new GetAccessPointPolicyRequest(bucketName).withAccessPointName(accessPointName); + GetAccessPointPolicyResult getPolicyReturn = ossClient.getAccessPointPolicy(getAccessPointPolicyRequest); + System.out.println("The status code for get access point policy is :" + getPolicyReturn.getResponse().getStatusCode()); + System.out.println("Access point policy is :" + getPolicyReturn.getAccessPointPolicy()); + + DeleteAccessPointRequest deleteAccessPointRequest = new DeleteAccessPointRequest(bucketName).withAccessPointName(accessPointName); + VoidResult delReturn = ossClient.deleteAccessPoint(deleteAccessPointRequest); + System.out.println("The status code for delete access point is :" + delReturn.getResponse().getStatusCode()); + + DeleteAccessPointPolicyRequest deleteAccessPointPolicyRequest = new DeleteAccessPointPolicyRequest(bucketName).withAccessPointName(accessPointName); + VoidResult delPolicyReturn = ossClient.deleteAccessPointPolicy(deleteAccessPointPolicyRequest); + System.out.println("The status code for delete access point policy is :" + delPolicyReturn.getResponse().getStatusCode()); + } catch (OSSException oe) { + System.out.println("Caught an OSSException, which means your request made it to OSS, " + + "but was rejected with an error response for some reason."); + System.out.println("Error Message: " + oe.getMessage()); + System.out.println("Error Code: " + oe.getErrorCode()); + System.out.println("Request ID: " + oe.getRequestId()); + System.out.println("Host ID: " + oe.getHostId()); + } catch (ClientException ce) { + System.out.println("Caught an ClientException, which means the client encountered " + + "a serious internal problem while trying to communicate with OSS, " + + "such as not being able to access the network."); + System.out.println("Error Message: " + ce.getMessage()); + } finally { + /* + * Do not forget to shut down the client finally to release all allocated resources. + */ + ossClient.shutdown(); + } + } +} \ No newline at end of file diff --git a/src/test/java/com/aliyun/oss/common/parser/RequestMarshallersTest.java b/src/test/java/com/aliyun/oss/common/parser/RequestMarshallersTest.java index d11c7cf6..97000bb7 100644 --- a/src/test/java/com/aliyun/oss/common/parser/RequestMarshallersTest.java +++ b/src/test/java/com/aliyun/oss/common/parser/RequestMarshallersTest.java @@ -22,7 +22,6 @@ import java.util.*; import static com.aliyun.oss.common.parser.RequestMarshallers.*; -import static com.aliyun.oss.common.parser.RequestMarshallers.putBucketAccessMonitorRequestMarshaller; public class RequestMarshallersTest { @Test @@ -1596,4 +1595,56 @@ public void testPutLifeCycleFilterObjectSizeThanRequestMarshaller() { Assert.assertEquals("key", root.getChild("Rule").getChild("Filter").getChildren("Not").get(0).getChild("Tag").getChildText("Key")); Assert.assertEquals("value", root.getChild("Rule").getChild("Filter").getChildren("Not").get(0).getChild("Tag").getChildText("Value")); } + + @Test + public void testCreateAccessPoint() { + String accessPointName = "test-ap-jt-3"; + String networkOrigin = "Internet"; + String vpcId = "vpc-id"; + String bucketName = "testBucket"; + + CreateAccessPointRequest createAccessPointRequest = new CreateAccessPointRequest(bucketName) + .withAccessPointName(accessPointName) + .withNetworkOrigin(networkOrigin) + .withVpc(new AccessPointVpcConfiguration().withVpcId(vpcId)); + + byte[] data = createAccessPointRequestParser.marshall(createAccessPointRequest); + ByteArrayInputStream is = new ByteArrayInputStream(data); + + SAXBuilder builder = new SAXBuilder(); + Document doc = null; + try { + doc = builder.build(is); + } catch (JDOMException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + Element root = doc.getRootElement(); + + Assert.assertEquals(accessPointName, root.getChildText("AccessPointName")); + Assert.assertEquals(networkOrigin, root.getChildText("NetworkOrigin")); + Assert.assertEquals(vpcId, root.getChild("VpcConfiguration").getChildText("VpcId")); + } + + @Test + public void testCreateAccessPointPolicy() { + String bucketName = "testBucket"; + String accessPointName = "test-ap-jt-3"; + String accessPointPolicy = "{\"Version\":\"1\",\"Statement\":[{\"Action\":[\"oss:PutObject\",\"oss:GetObject\"],\"Effect\":\"Deny\",\"Principal\":[\"1234567890\"],\"Resource\":[\"acs:oss:*:1234567890:*/*\"]}]}"; + + PutAccessPointPolicyRequest putAccessPointPolicyRequest = new PutAccessPointPolicyRequest(bucketName) + .withAccessPointName(accessPointName) + .withAccessPointPolicy(accessPointPolicy); + + byte[] data = putAccessPointPolicyRequestParser.marshall(putAccessPointPolicyRequest); + ByteArrayInputStream is = new ByteArrayInputStream(data); + + String returnData = new String(data); + + Assert.assertEquals(accessPointPolicy, returnData); + + } + } diff --git a/src/test/java/com/aliyun/oss/common/parser/ResponseParsersTest.java b/src/test/java/com/aliyun/oss/common/parser/ResponseParsersTest.java index ed19295a..d6ac9628 100644 --- a/src/test/java/com/aliyun/oss/common/parser/ResponseParsersTest.java +++ b/src/test/java/com/aliyun/oss/common/parser/ResponseParsersTest.java @@ -5660,4 +5660,161 @@ public void testParseGetBucketLifecycleFilterObjectSizeThan() { Assert.assertEquals(rules.get(0).getFilter().getObjectSizeLessThan(), Long.valueOf(String.valueOf(64000))); } + @Test + public void getAccessPointResponseParserTest() { + String responseBody = "" + + "\n" + + " test-ap-jt-3\n" + + " test-jt-ap-3\n" + + " aaabbb\n" + + " Internet\n" + + " \n" + + " vpc-id\n" + + " \n" + + " arn:aws:s3:us-east-1:920305101104:accesspoint/test-ap-jt-3\n" + + " 2022-01-05T05:39:53+00:00\n" + + " test-ap-jt-3-pi1kg766wz34gwij4oan1tkep38gwuse1a-s3alias\n" + + " enable\n" + + " \n" + + " s3-accesspoint-fips.dualstack.us-east-1.amazonaws.com\n" + + " s3-accesspoint.dualstack.us-east-1.amazonaws.com\n" + + " \n" + + ""; + + InputStream inputStream = null; + try { + inputStream = new ByteArrayInputStream(responseBody.getBytes("utf-8")); + } catch (UnsupportedEncodingException exception) { + Assert.fail("UnsupportedEncodingException"); + } + ResponseMessage responseMessage = new ResponseMessage(null); + responseMessage.setContent(inputStream); + + ResponseParsers.GetAccessPointResponseParser parser = new ResponseParsers.GetAccessPointResponseParser(); + + try { + GetAccessPointResult result = parser.parse(responseMessage); + + Assert.assertEquals(result.getAccessPointName(), "test-ap-jt-3"); + Assert.assertEquals(result.getBucket(), "test-jt-ap-3"); + Assert.assertEquals(result.getAccountId(), "aaabbb"); + Assert.assertEquals(result.getNetworkOrigin(), "Internet"); + Assert.assertEquals(result.getVpc().getVpcId(), "vpc-id"); + Assert.assertEquals(result.getAccessPointArn(), "arn:aws:s3:us-east-1:920305101104:accesspoint/test-ap-jt-3"); + Assert.assertEquals(result.getCreationDate(), "2022-01-05T05:39:53+00:00"); + Assert.assertEquals(result.getAlias(), "test-ap-jt-3-pi1kg766wz34gwij4oan1tkep38gwuse1a-s3alias"); + Assert.assertEquals(result.getStatus(), "enable"); + Assert.assertEquals(result.getEndpoints().getPublicEndpoint(), "s3-accesspoint-fips.dualstack.us-east-1.amazonaws.com"); + Assert.assertEquals(result.getEndpoints().getInternalEndpoint(), "s3-accesspoint.dualstack.us-east-1.amazonaws.com"); + + } catch (ResponseParseException exception) { + Assert.fail("parse access point response body fail"); + } + } + + + @Test + public void createAccessPointResponseParserTest() { + String responseBody = "" + + "\n" + + " acs:oss:ap-southeast-2:1283641064516515:accesspoint/test-ap-zxl-list-bucket-02-3\n" + + " test-ap-zxl-list-buc-45ee7945007a2f0bcb595f63e2215cb51b-ossalias\n" + + ""; + + InputStream inputStream = null; + try { + inputStream = new ByteArrayInputStream(responseBody.getBytes("utf-8")); + } catch (UnsupportedEncodingException exception) { + Assert.fail("UnsupportedEncodingException"); + } + ResponseMessage responseMessage = new ResponseMessage(null); + responseMessage.setContent(inputStream); + + ResponseParsers.CreateAccessPointResponseParser parser = new ResponseParsers.CreateAccessPointResponseParser(); + + try { + CreateAccessPointResult result = parser.parse(responseMessage); + + Assert.assertEquals(result.getAccessPointArn(), "acs:oss:ap-southeast-2:1283641064516515:accesspoint/test-ap-zxl-list-bucket-02-3"); + Assert.assertEquals(result.getAlias(), "test-ap-zxl-list-buc-45ee7945007a2f0bcb595f63e2215cb51b-ossalias"); + + } catch (ResponseParseException exception) { + Assert.fail("parse create access point response body fail"); + } + } + + @Test + public void getAccessPointPolicyResponseParserTest() { + String responseBody = "{\"Version\":\"1\",\"Statement\":[{\"Action\":[\"oss:PutObject\",\"oss:GetObject\"],\"Effect\":\"Deny\",\"Principal\":[\"1234567890\"],\"Resource\":[\"acs:oss:*:1234567890:*/*\"]}]}"; + + InputStream inputStream = null; + try { + inputStream = new ByteArrayInputStream(responseBody.getBytes("utf-8")); + } catch (UnsupportedEncodingException exception) { + Assert.fail("UnsupportedEncodingException"); + } + ResponseMessage responseMessage = new ResponseMessage(null); + responseMessage.setContent(inputStream); + + ResponseParsers.GetAccessPointPolicyResponseParser parser = new ResponseParsers.GetAccessPointPolicyResponseParser(); + + try { + GetAccessPointPolicyResult result = parser.parse(responseMessage); + + Assert.assertEquals(result.getAccessPointPolicy(), responseBody); + + + } catch (ResponseParseException exception) { + Assert.fail("parse access point response body fail"); + } + } + + @Test + public void listAccessPointResponseParserTest() { + String responseBody = "" + + "\n" + + " true\n" + + " sdfasfsagqeqg\n" + + " aaabbb\n" + + " \n" + + " \n" + + " Bucket\n" + + " AccessPointName\n" + + " test-ap-jt-3-pi1kg766wz34gwij4oan1tkep38gwuse1a-s3alias\n" + + " Internet\n" + + " \n" + + " vpc-id\n" + + " \n" + + " false\n" + + " \n" + + " \n" + + ""; + + InputStream inputStream = null; + try { + inputStream = new ByteArrayInputStream(responseBody.getBytes("utf-8")); + } catch (UnsupportedEncodingException exception) { + Assert.fail("UnsupportedEncodingException"); + } + ResponseMessage responseMessage = new ResponseMessage(null); + responseMessage.setContent(inputStream); + + ResponseParsers.ListAccessPointsResponseParser parser = new ResponseParsers.ListAccessPointsResponseParser(); + + try { + ListAccessPointsResult result = parser.parse(responseMessage); + + Assert.assertEquals(result.getTruncated(), Boolean.valueOf("true")); + Assert.assertEquals(result.getNextContinuationToken(), "sdfasfsagqeqg"); + Assert.assertEquals(result.getAccountId(), "aaabbb"); + Assert.assertEquals(result.getAccessPoints().get(0).getAccessPointName(), "AccessPointName"); + Assert.assertEquals(result.getAccessPoints().get(0).getBucket(), "Bucket"); + Assert.assertEquals(result.getAccessPoints().get(0).getAlias(), "test-ap-jt-3-pi1kg766wz34gwij4oan1tkep38gwuse1a-s3alias"); + Assert.assertEquals(result.getAccessPoints().get(0).getNetworkOrigin(), "Internet"); + Assert.assertEquals(result.getAccessPoints().get(0).getVpc().getVpcId(), "vpc-id"); + Assert.assertEquals(result.getAccessPoints().get(0).getStatus(), "false"); + } catch (ResponseParseException exception) { + Assert.fail("parse list access point response body fail"); + } + } } diff --git a/src/test/java/com/aliyun/oss/integrationtests/AccessPointTest.java b/src/test/java/com/aliyun/oss/integrationtests/AccessPointTest.java new file mode 100644 index 00000000..9fed0004 --- /dev/null +++ b/src/test/java/com/aliyun/oss/integrationtests/AccessPointTest.java @@ -0,0 +1,801 @@ +package com.aliyun.oss.integrationtests; + +import com.aliyun.oss.*; +import com.aliyun.oss.common.utils.BinaryUtil; +import com.aliyun.oss.internal.OSSHeaders; +import com.aliyun.oss.model.*; +import junit.framework.Assert; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import javax.activation.MimetypesFileTypeMap; +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.*; +import static com.aliyun.oss.integrationtests.TestUtils.genFixedLengthInputStream; + +public class AccessPointTest extends TestBase { + private static OSS ossClient; + private static String bucketName = "oss-java-sdk-test-example4"; + private static OSS apClientTest; + private static String arnEndpoint = "http://oss-ap-southeast-2.oss-accesspoint.aliyuncs.com"; + private static String apArn = ""; + private static String alias = ""; + private static String objectName = "test-zxl-object.txt"; + private static String fileUploadName = "test-zxl-object.txt"; + private static String csvObjectName = "test-zxl-csv-object.txt"; + private static String jsonObjectName = "test-zxl-json-object.txt"; + private static String appendObjectName = "test-zxl-append-object.txt"; + private static String multipartObjectName = "test-zxl- multipart-object.txt"; + private static String copyObjectName = "test-zxl-copy-object.txt"; + private static String copyDestObjectName = "test-zxl-copy-dest-object.txt"; + private static String copyMultipartObjectName = "test-zxl-copy-multipart-object.txt"; + private static String postObjectName = "test-zxl-post-object.txt"; + private static int postObjectSize = 500 * 1024; + private static int streamSize = 128 * 1024; // 128kb + private static long partSize = 100 * 1024; + private static String symLink = "test-zxl-sym-link"; + private static String content = "Hello OSS"; + private static String content2 = ",Hello World"; + private static String jsonContent = "{\n\t\"name\": \"Lora Francis\",\n\t\"age\": 27,\n\t\"company\": \"Staples Inc\"\n}\n{\n\t\"name\": \"Eleanor Little\",\n\t\"age\": 43,\n\t\"company\": \"Conectiv, Inc\"\n}\n{\n\t\"name\": \"Rosie Hughes\",\n\t\"age\": 44,\n\t\"company\": \"Western Gas Resources Inc\"\n}\n{\n\t\"name\": \"Lawrence Ross\",\n\t\"age\": 24,\n\t\"company\": \"MetLife Inc.\"\n}"; + private static String jsonResult = "{\t\"name\":\"Eleanor Little\",\n\t\"age\":43,\n\t\"company\":\"Conectiv, Inc\"}\n{\t\"name\":\"Rosie Hughes\",\n\t\"age\":44,\n\t\"company\":\"Western Gas Resources Inc\"}\n"; + private static String csvContent = "name,school,company,age\nLora Francis,School,Staples Inc,27\n#Lora Francis,School,Staples Inc,27\nEleanor Little,School,\"Conectiv, Inc\",43\nRosie Hughes,School,Western Gas Resources Inc,44\nLawrence Ross,School,MetLife Inc.,24\n"; + private static String accessPointName = "test-ap-zxl-jt-01-3"; + private static String networkOrigin = "internet"; + private static String vpcId = "vpc-test-zxl-3"; + private static String networkOrigin2 = "Internet"; + private static String accessPointPolicy = "{\"Version\":\"1\",\"Statement\":[{\"Action\":[\"oss:PutObject\",\"oss:GetObject\"],\"Effect\":\"Deny\",\"Principal\":[\""+ TestConfig.OSS_TEST_USER_ID+"\"],\"Resource\":[\"acs:oss:"+ TestConfig.OSS_TEST_REGION+":"+ TestConfig.OSS_TEST_USER_ID+":accesspoint/"+accessPointName+"\",\"acs:oss:"+ TestConfig.OSS_TEST_REGION+":"+ TestConfig.OSS_TEST_USER_ID+":accesspoint/"+accessPointName+"/object/*\"]}]}"; + + + @BeforeClass + public static void init() throws InterruptedException { + + ossClient = new OSSClientBuilder().build(TestConfig.OSS_TEST_ENDPOINT, TestConfig.OSS_TEST_ACCESS_KEY_ID, TestConfig.OSS_TEST_ACCESS_KEY_SECRET); + + if(!ossClient.doesBucketExist(bucketName)){ + ossClient.createBucket(bucketName); + } + + CreateAccessPointRequest createAccessPointRequest = new CreateAccessPointRequest(bucketName) + .withAccessPointName(accessPointName) + .withNetworkOrigin(networkOrigin) + .withVpc(new AccessPointVpcConfiguration()); + CreateAccessPointResult createReturn = ossClient.createAccessPoint(createAccessPointRequest); + Assert.assertEquals(200, createReturn.getResponse().getStatusCode()); + + + // getAccessPoint + GetAccessPointRequest getAccessPointRequest = new GetAccessPointRequest(bucketName).withAccessPointName(accessPointName); + GetAccessPointResult getReturn = ossClient.getAccessPoint(getAccessPointRequest); + + long startTime = System.currentTimeMillis(); + do { + long endTime = System.currentTimeMillis(); + if(endTime - startTime > 1000 * 60 * 30){ + break; + } + + Thread.sleep(5 * 1000); + getReturn = ossClient.getAccessPoint(getAccessPointRequest); + } while (!"enable".equals(getReturn.getStatus())); + + apArn = getReturn.getAccessPointArn(); + alias = getReturn.getAlias(); + System.out.println(apArn); + + apClientTest = new OSSClientBuilder().build(arnEndpoint, TestConfig.OSS_TEST_ACCESS_KEY_ID, TestConfig.OSS_TEST_ACCESS_KEY_SECRET); + } + + + @AfterClass + public static void after() throws InterruptedException { + try{ + ListAccessPointsRequest listAccessPointsRequest = new ListAccessPointsRequest(); + ListAccessPointsResult listReturn = ossClient.listAccessPoints(listAccessPointsRequest); + + long startTime = System.currentTimeMillis(); + boolean flag = true; + do { + int count = 0; + for(AccessPoint ap : listReturn.getAccessPoints()){ + if(ap.getAccessPointName().startsWith("test-ap-zxl")){ + count++; + if("creating".equals(ap.getStatus())){ + flag = true; + } else if("enable".equals(ap.getStatus())){ + DeleteAccessPointRequest deleteAccessPointRequest = new DeleteAccessPointRequest(bucketName).withAccessPointName(ap.getAccessPointName()); + VoidResult delReturn = ossClient.deleteAccessPoint(deleteAccessPointRequest); + Assert.assertEquals(204, delReturn.getResponse().getStatusCode()); + } + } + } + if(count == 0){ + break; + } + + long endTime = System.currentTimeMillis(); + if(endTime - startTime > 1000 * 60 * 30){ + break; + } + + Thread.sleep(60 * 1000); + listReturn = ossClient.listAccessPoints(listAccessPointsRequest); + } while (flag); + } catch (OSSException e) { + e.printStackTrace(); + Assert.fail("ErrorCode:" + e.getErrorCode() + "Message:" +e.getMessage()); + } finally { + ossClient.deleteBucket(bucketName); + + if(apClientTest != null){ + apClientTest.shutdown(); + } + if(ossClient != null){ + ossClient.shutdown(); + } + } + } + + @Test + public void testAccessPoint() { + + try { + + GetAccessPointRequest getAccessPointRequest = new GetAccessPointRequest(bucketName).withAccessPointName(accessPointName); + GetAccessPointResult getReturn = ossClient.getAccessPoint(getAccessPointRequest); + Assert.assertEquals(200, getReturn.getResponse().getStatusCode()); + Assert.assertEquals(accessPointName, getReturn.getAccessPointName()); + Assert.assertEquals(networkOrigin, getReturn.getNetworkOrigin()); + Assert.assertNotNull(getReturn.getBucket()); + Assert.assertNotNull(getReturn.getAccountId()); + Assert.assertNotNull(getReturn.getAccessPointArn()); + Assert.assertNotNull(getReturn.getCreationDate()); + Assert.assertNotNull(getReturn.getAlias()); + Assert.assertNotNull(getReturn.getStatus()); + Assert.assertNotNull(getReturn.getEndpoints().getPublicEndpoint()); + Assert.assertNotNull(getReturn.getEndpoints().getInternalEndpoint()); + + + ListBucketAccessPointsRequest listBucketAccessPointsRequest = new ListBucketAccessPointsRequest(bucketName) + .withMaxKeys(10); + ListAccessPointsResult listReturn = ossClient.listBucketAccessPoints(listBucketAccessPointsRequest); + Assert.assertEquals(200, listReturn.getResponse().getStatusCode()); + + } catch (OSSException e) { + e.printStackTrace(); + Assert.fail("ErrorCode:" + e.getErrorCode() + "Message:" +e.getMessage()); + } + } + + @Test + public void testAccessPointWithList() { + String accessPointName = "test-ap-zxl-list-01-3"; + String accessPointName2 = "test-ap-zxl-list-02-3"; + try { + CreateAccessPointRequest createAccessPointRequest = new CreateAccessPointRequest(bucketName) + .withAccessPointName(accessPointName) + .withNetworkOrigin(networkOrigin) + .withVpc(new AccessPointVpcConfiguration()); + CreateAccessPointResult createReturn = ossClient.createAccessPoint(createAccessPointRequest); + Assert.assertEquals(200, createReturn.getResponse().getStatusCode()); + + + CreateAccessPointRequest createAccessPointRequest2 = new CreateAccessPointRequest(bucketName) + .withAccessPointName(accessPointName2) + .withNetworkOrigin(networkOrigin2) + .withVpc(new AccessPointVpcConfiguration()); + + CreateAccessPointResult createReturn2 = ossClient.createAccessPoint(createAccessPointRequest2); + Assert.assertEquals(200, createReturn2.getResponse().getStatusCode()); + + ListAccessPointsRequest listAccessPointsRequest = new ListAccessPointsRequest() + .withMaxKeys(10); + ListAccessPointsResult listReturn = ossClient.listAccessPoints(listAccessPointsRequest); + Assert.assertEquals(200, listReturn.getResponse().getStatusCode()); + + ListAccessPointsRequest listAccessPointsRequest2 = new ListAccessPointsRequest() + .withMaxKeys(1); + ListAccessPointsResult listReturn2 = ossClient.listAccessPoints(listAccessPointsRequest2); + Assert.assertEquals(200, listReturn2.getResponse().getStatusCode()); + + ListAccessPointsRequest listAccessPointsRequest3 = new ListAccessPointsRequest() + .withContinuationToken(listReturn2.getNextContinuationToken()); + ListAccessPointsResult listReturn3 = ossClient.listAccessPoints(listAccessPointsRequest3); + Assert.assertEquals(200, listReturn3.getResponse().getStatusCode()); + + } catch (OSSException e) { + e.printStackTrace(); + Assert.fail("ErrorCode:" + e.getErrorCode() + "Message:" +e.getMessage()); + } + } + + @Test + public void testListBucketAccessPoints() { + String accessPointName = "test-ap-zxl-list-bucket-01-3"; + String accessPointName2 = "test-ap-zxl-list-bucket-02-3"; + try { + CreateAccessPointRequest createAccessPointRequest = new CreateAccessPointRequest(bucketName) + .withAccessPointName(accessPointName) + .withNetworkOrigin(networkOrigin) + .withVpc(new AccessPointVpcConfiguration()); + CreateAccessPointResult createReturn = ossClient.createAccessPoint(createAccessPointRequest); + Assert.assertEquals(200, createReturn.getResponse().getStatusCode()); + + + CreateAccessPointRequest createAccessPointRequest2 = new CreateAccessPointRequest(bucketName) + .withAccessPointName(accessPointName2) + .withNetworkOrigin(networkOrigin2) + .withVpc(new AccessPointVpcConfiguration()); + + CreateAccessPointResult createReturn2 = ossClient.createAccessPoint(createAccessPointRequest2); + Assert.assertEquals(200, createReturn2.getResponse().getStatusCode()); + + ListBucketAccessPointsRequest listBucketAccessPointsRequest = new ListBucketAccessPointsRequest(bucketName) + .withMaxKeys(10); + ListAccessPointsResult listReturn = ossClient.listBucketAccessPoints(listBucketAccessPointsRequest); + Assert.assertEquals(200, listReturn.getResponse().getStatusCode()); + + + ListBucketAccessPointsRequest listBucketAccessPointsRequest2 = new ListBucketAccessPointsRequest(bucketName) + .withMaxKeys(1); + ListAccessPointsResult listReturn2 = ossClient.listBucketAccessPoints(listBucketAccessPointsRequest2); + Assert.assertEquals(200, listReturn2.getResponse().getStatusCode()); + + + ListBucketAccessPointsRequest listBucketAccessPointsRequest3 = new ListBucketAccessPointsRequest(bucketName) + .withContinuationToken(listReturn2.getNextContinuationToken()); + ListAccessPointsResult listReturn3 = ossClient.listBucketAccessPoints(listBucketAccessPointsRequest3); + Assert.assertEquals(200, listReturn3.getResponse().getStatusCode()); + + } catch (OSSException e) { + e.printStackTrace(); + Assert.fail("ErrorCode:" + e.getErrorCode() + "Message:" +e.getMessage()); + } + } + + + @Test + public void testAccessPointPolicy() { + + try { + PutAccessPointPolicyRequest putAccessPointPolicyRequest = new PutAccessPointPolicyRequest(bucketName) + .withAccessPointName(accessPointName) + .withAccessPointPolicy(accessPointPolicy); + VoidResult createReturn = ossClient.putAccessPointPolicy(putAccessPointPolicyRequest); + Assert.assertEquals(200, createReturn.getResponse().getStatusCode()); + + + GetAccessPointPolicyRequest getAccessPointPolicyRequest = new GetAccessPointPolicyRequest(bucketName).withAccessPointName(accessPointName); + GetAccessPointPolicyResult getReturn = ossClient.getAccessPointPolicy(getAccessPointPolicyRequest); + Assert.assertEquals(200, getReturn.getResponse().getStatusCode()); + Assert.assertEquals(accessPointPolicy, getReturn.getAccessPointPolicy()); + System.out.println(getReturn.getAccessPointPolicy()); + + DeleteAccessPointPolicyRequest deleteAccessPointPolicyRequest = new DeleteAccessPointPolicyRequest(bucketName).withAccessPointName(accessPointName); + VoidResult delReturn = ossClient.deleteAccessPointPolicy(deleteAccessPointPolicyRequest); + Assert.assertEquals(204, delReturn.getResponse().getStatusCode()); + + } catch (OSSException e) { + e.printStackTrace(); + Assert.fail("ErrorCode:" + e.getErrorCode() + "Message:" +e.getMessage()); + } + } + + @Test + public void testObjectRequestFromAlias() throws Throwable { + + String md5 = BinaryUtil.toBase64String(BinaryUtil.calculateMd5(content.getBytes())); + try { + testCommonObjectCase(ossClient, alias, ossClient, md5, false); + } catch (Exception e) { + e.printStackTrace(); + Assert.fail("ErrorCode:" + e.getMessage() + "Message:" +e.getMessage()); + } finally { + // delete object + List existingKeys = new ArrayList(); + ObjectListing objectListing = ossClient.listObjects( alias, "test-zxl"); + for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) { + existingKeys.add(objectSummary.getKey()); + } + if(existingKeys.size() >0 ){ + DeleteObjectsRequest request = new DeleteObjectsRequest(alias); + request.setKeys(existingKeys); + this.ossClient.deleteObjects(request); + } + + // delete part + ListMultipartUploadsRequest listMultipartUploadsRequest = new ListMultipartUploadsRequest(alias); + MultipartUploadListing multipartUploadListing = ossClient.listMultipartUploads(listMultipartUploadsRequest); + multipartUploadListing.getMultipartUploads(); + for (MultipartUpload upload : multipartUploadListing.getMultipartUploads()) { + AbortMultipartUploadRequest abortMultipartUploadRequest = new AbortMultipartUploadRequest(alias, upload.getKey(), upload.getUploadId()); + ossClient.abortMultipartUpload(abortMultipartUploadRequest); + } + } + } + + private void testCommonObjectCase(OSS apClientTest, String apArn, OSS ossClient, String md5, boolean isArn) throws Throwable { + // put object + PutObjectRequest putObjectRequest = new PutObjectRequest(apArn, objectName, new ByteArrayInputStream(content.getBytes())); + PutObjectResult putResult = apClientTest.putObject(putObjectRequest); + + + // get object + OSSObject getObjectResult = apClientTest.getObject(apArn, objectName); + Assert.assertEquals(200, getObjectResult.getResponse().getStatusCode()); + Assert.assertEquals(getObjectResult.getObjectMetadata().getContentMD5(), md5); + + + // head object + ObjectMetadata headMetadata = apClientTest.headObject(apArn, objectName); + Assert.assertEquals(headMetadata.getETag(), putResult.getETag()); + + + // getObjectMetadata + GenericRequest generirequest = new GenericRequest(apArn, objectName); + ObjectMetadata objectMetadata = apClientTest.getObjectMetadata(generirequest); + Assert.assertEquals(objectMetadata.getETag(), putResult.getETag()); + + + // delete object + VoidResult delResult = apClientTest.deleteObject(apArn, objectName); + Assert.assertEquals(204, delResult.getResponse().getStatusCode()); + + + // sign put + GeneratePresignedUrlRequest putSignRequest = new GeneratePresignedUrlRequest(apArn, objectName, HttpMethod.PUT); + Date expiration = new Date(new Date().getTime() + 1000 * 60 * 10 ); + putSignRequest.setExpiration(expiration); + URL signedUrl = apClientTest.generatePresignedUrl(putSignRequest); + Map headers = new HashMap(); + apClientTest.putObject(signedUrl, new ByteArrayInputStream(content.getBytes()) , content.length(), headers); + + + // sign get + GeneratePresignedUrlRequest getSignRequest = new GeneratePresignedUrlRequest(apArn, objectName, HttpMethod.GET); + Date getExpiration = new Date(new Date().getTime() + 1000 * 60 * 10 ); + getSignRequest.setExpiration(getExpiration); + URL getSignedUrl = apClientTest.generatePresignedUrl(getSignRequest); + Map getHeaders = new HashMap(); + apClientTest.getObject(getSignedUrl, getHeaders); + + apClientTest.deleteObject(apArn, objectName); + Assert.assertFalse(apClientTest.doesObjectExist(apArn, objectName)); + + + // select object json + apClientTest.putObject(apArn, jsonObjectName, new ByteArrayInputStream(jsonContent.getBytes())); + SelectObjectRequest selectObjectRequest = + new SelectObjectRequest(apArn, jsonObjectName) + .withInputSerialization(new InputSerialization() + .withCompressionType(CompressionType.NONE) + .withJsonInputFormat(new JsonFormat().withParseJsonNumberAsString(true).withJsonType(JsonType.LINES))) + .withOutputSerialization(new OutputSerialization() + .withOutputRawData(false) + .withCrcEnabled(true) + .withJsonOutputFormat(new JsonFormat())) + .withExpression("select * from ossobject as s where cast(s.age as int) > 40"); + + OSSObject ossObject = apClientTest.selectObject(selectObjectRequest); + byte[] buffer = new byte[1024]; + int bytesRead; + int off = 0; + while ((bytesRead = ossObject.getObjectContent().read()) != -1) { + buffer[off++] = (byte)bytesRead; + } + + Assert.assertEquals(new String(buffer, 0, off), jsonResult.replace("\t", "").replace(",\n", ",")); + apClientTest.deleteObject(apArn, jsonObjectName); + Assert.assertFalse(apClientTest.doesObjectExist(apArn, jsonObjectName)); + + + // select object csv + apClientTest.putObject(apArn, csvObjectName, new ByteArrayInputStream(csvContent.getBytes())); + + SelectObjectRequest selectCsvObjectRequest = + new SelectObjectRequest(apArn, csvObjectName) + .withSkipPartialDataRecord(false) + .withInputSerialization(new InputSerialization() + .withCsvInputFormat( + new CSVFormat().withRecordDelimiter("\n") + .withQuoteChar("\"") + .withFieldDelimiter(",") + .withCommentChar("#") + .withHeaderInfo(CSVFormat.Header.Ignore))) + .withExpression("select * from ossobject"); + OSSObject ossCsvObject = apClientTest.selectObject(selectCsvObjectRequest); + byte[] csvBuffer = new byte[1024]; + int csvBytesRead; + int csvOff = 0; + while ((csvBytesRead = ossCsvObject.getObjectContent().read()) != -1) { + csvBuffer[csvOff++] = (byte)csvBytesRead; + } + + org.junit.Assert.assertEquals(new String(csvBuffer, 0, csvOff), csvContent.substring(csvContent.indexOf("#L") + 1)); + apClientTest.deleteObject(apArn, csvObjectName); + Assert.assertFalse(apClientTest.doesObjectExist(apArn, csvObjectName)); + + + // restoreObject + ObjectMetadata restoreMetadata = new ObjectMetadata(); + restoreMetadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Archive.toString()); + PutObjectRequest putRestoreObjectRequest = new PutObjectRequest(apArn, objectName, new ByteArrayInputStream(content.getBytes()), restoreMetadata); + + PutObjectResult putRestoreResult = apClientTest.putObject(putRestoreObjectRequest); + restoreMetadata = apClientTest.getObjectMetadata(apArn, objectName); + + try { + OSSObject restoreObject1 = apClientTest.getObject(apArn, objectName); + } catch (OSSException e){ + Assert.assertEquals("The operation is not valid for the object's state",e.getErrorMessage()); + } + + StorageClass storageClass = restoreMetadata.getObjectStorageClass(); + if (storageClass == StorageClass.Archive) { + apClientTest.restoreObject(apArn, objectName); + do { + Thread.sleep(1000); + restoreMetadata = apClientTest.getObjectMetadata(apArn, objectName); + } while (!restoreMetadata.isRestoreCompleted()); + } + + OSSObject restoreObject = apClientTest.getObject(apArn, objectName); + Assert.assertEquals(StorageClass.Archive, restoreObject.getObjectMetadata().getObjectStorageClass()); + + + // copy object + PutObjectRequest putCopyObjectRequest = new PutObjectRequest(bucketName, copyObjectName, new ByteArrayInputStream(content.getBytes())); + PutObjectResult putCopyResult = ossClient.putObject(putCopyObjectRequest); + Assert.assertTrue(ossClient.doesObjectExist(bucketName, copyObjectName)); + + CopyObjectRequest copyObjectRequest = new CopyObjectRequest(bucketName, copyObjectName, apArn, copyDestObjectName); + CopyObjectResult copyResult = apClientTest.copyObject(copyObjectRequest); + Assert.assertTrue(apClientTest.doesObjectExist(apArn, copyDestObjectName)); + + + // UploadPartCopy + InputStream inStream = genFixedLengthInputStream(streamSize); + long copyMultipartLength = inStream.available(); + + PutObjectRequest putCopyMultipartObjectRequest = new PutObjectRequest(bucketName, copyMultipartObjectName, inStream); + PutObjectResult putMultipartCopyResult = ossClient.putObject(putCopyMultipartObjectRequest); + Assert.assertTrue(ossClient.doesObjectExist(bucketName, copyMultipartObjectName)); + + InitiateMultipartUploadRequest initiateMultipartUploadRequest = new InitiateMultipartUploadRequest(apArn, copyMultipartObjectName); + InitiateMultipartUploadResult initiateMultipartUploadResult = apClientTest.initiateMultipartUpload(initiateMultipartUploadRequest); + String copyUploadId = initiateMultipartUploadResult.getUploadId(); + + int partCount = (int) (copyMultipartLength / partSize); + if (copyMultipartLength % partSize != 0) { + partCount++; + } + List partETags = new ArrayList(); + for (int i = 0; i < partCount; i++) { + long skipBytes = partSize * i; + long size = partSize < copyMultipartLength - skipBytes ? partSize : copyMultipartLength - skipBytes; + + UploadPartCopyRequest uploadPartCopyRequest = + new UploadPartCopyRequest(bucketName, copyMultipartObjectName, apArn, copyMultipartObjectName); + uploadPartCopyRequest.setUploadId(copyUploadId); + uploadPartCopyRequest.setPartSize(size); + uploadPartCopyRequest.setBeginIndex(skipBytes); + uploadPartCopyRequest.setPartNumber(i + 1); + UploadPartCopyResult uploadPartCopyResult = apClientTest.uploadPartCopy(uploadPartCopyRequest); + partETags.add(uploadPartCopyResult.getPartETag()); + } + + CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest( + apArn, copyMultipartObjectName, copyUploadId, partETags); + apClientTest.completeMultipartUpload(completeMultipartUploadRequest); + + Assert.assertTrue(apClientTest.doesObjectExist(apArn, copyMultipartObjectName)); + + SimplifiedObjectMeta simplifiedObjectMeta = apClientTest.getSimplifiedObjectMeta(apArn, copyMultipartObjectName); + Assert.assertEquals(streamSize, simplifiedObjectMeta.getSize()); + + + // delete copy object + VoidResult ossObjectDelResult = ossClient.deleteObject(bucketName, objectName); + Assert.assertEquals(204, ossObjectDelResult.getResponse().getStatusCode()); + + VoidResult ossCopyDelResult = ossClient.deleteObject(bucketName, copyObjectName); + Assert.assertEquals(204, ossCopyDelResult.getResponse().getStatusCode()); + + VoidResult ossCopyDestDelResult = ossClient.deleteObject(bucketName, copyDestObjectName); + Assert.assertEquals(204, ossCopyDestDelResult.getResponse().getStatusCode()); + + // delete multipart copy object + VoidResult ossMultipartDelResult2 = ossClient.deleteObject(bucketName, copyMultipartObjectName); + Assert.assertEquals(204, ossMultipartDelResult2.getResponse().getStatusCode()); + + + // append object + AppendObjectRequest appendObjectRequest = new AppendObjectRequest(apArn, appendObjectName, new ByteArrayInputStream(content.getBytes()), null); + appendObjectRequest.setPosition(0L); + AppendObjectResult appendObjectResult = apClientTest.appendObject(appendObjectRequest); + OSSObject o = apClientTest.getObject(apArn, appendObjectName); + Assert.assertEquals(appendObjectName, o.getKey()); + Assert.assertEquals(content.length(), o.getObjectMetadata().getContentLength()); + + AppendObjectRequest appendObjectRequest2 = new AppendObjectRequest(apArn, appendObjectName, new ByteArrayInputStream(content2.getBytes())); + appendObjectRequest2.setPosition(appendObjectResult.getNextPosition()); + AppendObjectResult appendObjectResult2 = apClientTest.appendObject(appendObjectRequest2); + OSSObject o2 = apClientTest.getObject(apArn, appendObjectName); + Assert.assertEquals(content.length()+content2.length(), o2.getObjectMetadata().getContentLength()); + + + //list object + ObjectListing objectListing = apClientTest.listObjects(apArn, "test-zxl"); + Assert.assertEquals(1, objectListing.getObjectSummaries().size()); + + ListObjectsV2Result listObjectsV2Result = apClientTest.listObjectsV2(apArn, "test-zxl"); + Assert.assertEquals(1, listObjectsV2Result.getObjectSummaries().size()); + + + // delete objects + List existingKeys = new ArrayList(); + + for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) { + existingKeys.add(objectSummary.getKey()); + } + + DeleteObjectsRequest request = new DeleteObjectsRequest(apArn); + request.setKeys(existingKeys); + try { + DeleteObjectsResult deletesResult = apClientTest.deleteObjects(request); + List deletedObjects = deletesResult.getDeletedObjects(); + Assert.assertEquals(1, deletedObjects.size()); + } catch (Exception e) { + Assert.fail(e.getMessage()); + } + + Assert.assertFalse(apClientTest.doesObjectExist(apArn, objectName)); + Assert.assertFalse(apClientTest.doesObjectExist(apArn, appendObjectName)); + Assert.assertFalse(apClientTest.doesObjectExist(apArn, copyObjectName)); + Assert.assertFalse(apClientTest.doesObjectExist(apArn, copyMultipartObjectName)); + + + // uploadFile + File file = createSampleFile(fileUploadName, 1024 * 500); + + UploadFileRequest uploadFileRequest = new UploadFileRequest(apArn, fileUploadName); + uploadFileRequest.setUploadFile(file.getAbsolutePath()); + uploadFileRequest.setTaskNum(10); + + uploadFileRequest = new UploadFileRequest(apArn, fileUploadName, file.getAbsolutePath(), (1024 * 100),10); + + UploadFileResult uploadRes = apClientTest.uploadFile(uploadFileRequest); + Assert.assertEquals(uploadRes.getMultipartUploadResult().getKey(), fileUploadName); + + ObjectMetadata uploadFileObjectMetadata = apClientTest.getObjectMetadata(new GenericRequest(apArn, fileUploadName)); + Assert.assertEquals(file.length(), uploadFileObjectMetadata.getContentLength()); + + apClientTest.deleteObject(apArn, fileUploadName); + Assert.assertFalse(apClientTest.doesObjectExist(apArn, fileUploadName)); + + // acl + PutObjectRequest putAclObject = new PutObjectRequest(apArn, objectName, new ByteArrayInputStream(content.getBytes())); + PutObjectResult putAclResult = apClientTest.putObject(putAclObject); + + apClientTest.setObjectAcl(apArn, objectName, CannedAccessControlList.Default); + ObjectAcl returnedAcl = apClientTest.getObjectAcl(apArn, objectName); + Assert.assertEquals(ObjectPermission.Default, returnedAcl.getPermission()); + + + // symlink + ObjectMetadata metadataSymlink = new ObjectMetadata(); + metadataSymlink.setContentType("text/plain"); + metadataSymlink.addUserMetadata("property", "property-value"); + + CreateSymlinkRequest createSymlinkRequest = new CreateSymlinkRequest(apArn, symLink, objectName); + createSymlinkRequest.setMetadata(metadataSymlink); + apClientTest.createSymlink(createSymlinkRequest); + + OSSSymlink symbolicLink = apClientTest.getSymlink(apArn, symLink); + Assert.assertEquals(symbolicLink.getSymlink(), symLink); + Assert.assertEquals(symbolicLink.getTarget(), objectName); + Assert.assertEquals(symbolicLink.getMetadata().getContentType(), "text/plain"); + Assert.assertEquals(symbolicLink.getMetadata().getUserMetadata().get("property"), "property-value"); + + VoidResult delSymlink = apClientTest.deleteObject(apArn, symLink); + Assert.assertEquals(204, delSymlink.getResponse().getStatusCode()); + + // tag + Map tags = new HashMap(1); + tags.put("tag1", "balabala"); + tags.put("tag2", "haha"); + + apClientTest.setObjectTagging(apArn, objectName, tags); + + TagSet tagSet = apClientTest.getObjectTagging(apArn, objectName); + Assert.assertEquals(tagSet.getAllTags().size(), 2); + + VoidResult delTag = apClientTest.deleteObjectTagging(apArn, objectName); + Assert.assertEquals(204, delTag.getResponse().getStatusCode()); + + apClientTest.deleteObject(apArn, objectName); + Assert.assertFalse(apClientTest.doesObjectExist(apArn, objectName)); + + + // multipart + InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(apArn, multipartObjectName); + InitiateMultipartUploadResult intiResult = apClientTest.initiateMultipartUpload(initRequest); + String uploadId = intiResult.getUploadId(); + + InputStream instream = genFixedLengthInputStream(streamSize); + + // Upload single part + UploadPartRequest uploadPartRequest = new UploadPartRequest(); + uploadPartRequest.setBucketName(apArn); + uploadPartRequest.setKey(multipartObjectName); + uploadPartRequest.setInputStream(instream); + uploadPartRequest.setPartNumber(2); + uploadPartRequest.setPartSize(streamSize); + uploadPartRequest.setUploadId(uploadId); + apClientTest.uploadPart(uploadPartRequest); + + + // List single multipart upload + ListMultipartUploadsRequest listMultipartUploadsRequest = new ListMultipartUploadsRequest(apArn); + MultipartUploadListing multipartUploadListing = apClientTest.listMultipartUploads(listMultipartUploadsRequest); + + Assert.assertFalse(multipartUploadListing.isTruncated()); + Assert.assertEquals(multipartObjectName, multipartUploadListing.getNextKeyMarker()); + Assert.assertEquals(uploadId, multipartUploadListing.getNextUploadIdMarker()); + + List multipartUploads = multipartUploadListing.getMultipartUploads(); + Assert.assertEquals(1, multipartUploads.size()); + Assert.assertEquals(multipartObjectName, multipartUploads.get(0).getKey()); + Assert.assertEquals(uploadId, multipartUploads.get(0).getUploadId()); + + + // Lists all parts in a multiple parts upload. + ListPartsRequest listPartsRequest = new ListPartsRequest(apArn, multipartObjectName, uploadId); + PartListing partListing = apClientTest.listParts(listPartsRequest); + Assert.assertEquals(1, partListing.getParts().size()); + + + // Abort multipart upload + AbortMultipartUploadRequest abortMultipartUploadRequest = new AbortMultipartUploadRequest(apArn, multipartObjectName, uploadId); + apClientTest.abortMultipartUpload(abortMultipartUploadRequest); + + try { + partListing = apClientTest.listParts(new ListPartsRequest(apArn, multipartObjectName, uploadId)); + } catch (OSSException e){ + Assert.assertEquals("The specified upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed.",e.getErrorMessage()); + } + + Assert.assertFalse(apClientTest.doesObjectExist(apArn, multipartObjectName)); + + + // putAccessPointPolicy + PutAccessPointPolicyRequest putAccessPointPolicyRequest = new PutAccessPointPolicyRequest(apArn) + .withAccessPointName(accessPointName) + .withAccessPointPolicy(accessPointPolicy); + VoidResult createReturn = apClientTest.putAccessPointPolicy(putAccessPointPolicyRequest); + Assert.assertEquals(200, createReturn.getResponse().getStatusCode()); + + + GetAccessPointPolicyRequest getAccessPointPolicyRequest = new GetAccessPointPolicyRequest(apArn).withAccessPointName(accessPointName); + GetAccessPointPolicyResult getReturn = apClientTest.getAccessPointPolicy(getAccessPointPolicyRequest); + Assert.assertEquals(200, getReturn.getResponse().getStatusCode()); + Assert.assertEquals(accessPointPolicy, getReturn.getAccessPointPolicy()); + + DeleteAccessPointPolicyRequest deleteAccessPointPolicyRequest = new DeleteAccessPointPolicyRequest(apArn).withAccessPointName(accessPointName); + VoidResult delReturn = apClientTest.deleteAccessPointPolicy(deleteAccessPointPolicyRequest); + Assert.assertEquals(204, delReturn.getResponse().getStatusCode()); + + + + apClientTest.deleteObject(apArn, postObjectName); + Assert.assertFalse(apClientTest.doesObjectExist(apArn, postObjectName)); + } + + public static File createSampleFile(String fileName, long size) throws IOException { + File file = File.createTempFile(fileName, ".txt"); + file.deleteOnExit(); + String context = "a\n"; + + Writer writer = new OutputStreamWriter(new FileOutputStream(file)); + for (int i = 0; i < size / context.length(); i++) { + writer.write(context); + } + writer.close(); + + return file; + } + + + private static String formUpload(String urlStr, Map formFields, File localFile) + throws Exception { + String res = ""; + HttpURLConnection conn = null; + String boundary = "9431149156168"; + try { + URL url = new URL(urlStr); + conn = (HttpURLConnection) url.openConnection(); + conn.setConnectTimeout(5000); + conn.setReadTimeout(30000); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setRequestMethod("POST"); + conn.setRequestProperty("User-Agent", + "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)"); + conn.setRequestProperty("Content-Type", + "multipart/form-data; boundary=" + boundary); + OutputStream out = new DataOutputStream(conn.getOutputStream()); + // Traverse and read the data in the form Map, and write the data into the output stream. + if (formFields != null) { + StringBuffer strBuf = new StringBuffer(); + Iterator> iter = formFields.entrySet().iterator(); + int i = 0; + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + String inputName = entry.getKey(); + String inputValue = entry.getValue(); + if (inputValue == null) { + continue; + } + if (i == 0) { + strBuf.append("--").append(boundary).append("\r\n"); + strBuf.append("Content-Disposition: form-data; name=\"" + + inputName + "\"\r\n\r\n"); + strBuf.append(inputValue); + } else { + strBuf.append("\r\n").append("--").append(boundary).append("\r\n"); + strBuf.append("Content-Disposition: form-data; name=\"" + + inputName + "\"\r\n\r\n"); + strBuf.append(inputValue); + } + i++; + } + out.write(strBuf.toString().getBytes()); + } + // Read the file information and write the file to be uploaded into the output stream. + String filename = localFile.getName(); + String contentType = new MimetypesFileTypeMap().getContentType(localFile); + if (contentType == null || contentType.equals("")) { + contentType = "application/octet-stream"; + } + StringBuffer strBuf = new StringBuffer(); + strBuf.append("\r\n").append("--").append(boundary) + .append("\r\n"); + strBuf.append("Content-Disposition: form-data; name=\"file\"; " + + "filename=\"" + filename + "\"\r\n"); + strBuf.append("Content-Type: " + contentType + "\r\n\r\n"); + out.write(strBuf.toString().getBytes()); + DataInputStream in = new DataInputStream(new FileInputStream(localFile)); + int bytes = 0; + byte[] bufferOut = new byte[1024]; + while ((bytes = in.read(bufferOut)) != -1) { + out.write(bufferOut, 0, bytes); + } + in.close(); + byte[] endData = ("\r\n--" + boundary + "--\r\n").getBytes(); + out.write(endData); + out.flush(); + out.close(); + //Read return data + strBuf = new StringBuffer(); + BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); + String line = null; + while ((line = reader.readLine()) != null) { + strBuf.append(line).append("\n"); + } + res = strBuf.toString(); + reader.close(); + reader = null; + } catch (ClientException e) { + System.err.println("Send post request exception: " + e); + System.err.println(e.getErrorCode()+" msg="+e.getMessage()); + throw e; + } finally { + if (conn != null) { + conn.disconnect(); + conn = null; + } + } + return res; + } +} \ No newline at end of file diff --git a/src/test/java/com/aliyun/oss/integrationtests/TestConfig.java b/src/test/java/com/aliyun/oss/integrationtests/TestConfig.java index 9826a4ab..ed565e5b 100644 --- a/src/test/java/com/aliyun/oss/integrationtests/TestConfig.java +++ b/src/test/java/com/aliyun/oss/integrationtests/TestConfig.java @@ -22,6 +22,7 @@ public final class TestConfig { // OSS test configuration + public static String OSS_TEST_USER_ID = null; public static String OSS_TEST_ENDPOINT = null; public static String OSS_TEST_REGION = null; public static String OSS_TEST_ACCESS_KEY_ID = null;