AliyunOSSiOSTests/OSSTestUtils.m (110 lines of code) (raw):
//
// OSSTestUtils.m
// AliyunOSSiOSTests
//
// Created by jingdan on 2018/2/24.
// Copyright © 2018年 aliyun. All rights reserved.
//
#import "OSSTestUtils.h"
#import <XCTest/XCTest.h>
#import "OSSTestMacros.h"
@implementation OSSTestUtils
+ (void)cleanBucket: (NSString *)bucket with: (OSSClient *)client {
//delete object
OSSGetBucketRequest *listObject = [OSSGetBucketRequest new];
listObject.bucketName = bucket;
listObject.maxKeys = 1000;
OSSTask *listObjectTask = [client getBucket:listObject];
[[listObjectTask continueWithBlock:^id(OSSTask * task) {
OSSGetBucketResult * listObjectResult = task.result;
for (NSDictionary *dict in listObjectResult.contents) {
NSString * objectKey = [dict objectForKey:@"Key"];
NSLog(@"delete object %@", objectKey);
OSSDeleteObjectRequest * deleteObj = [OSSDeleteObjectRequest new];
deleteObj.bucketName = bucket;
deleteObj.objectKey = objectKey;
[[client deleteObject:deleteObj] waitUntilFinished];
}
return nil;
}] waitUntilFinished];
//delete multipart uploads
OSSListMultipartUploadsRequest *listMultipartUploads = [OSSListMultipartUploadsRequest new];
listMultipartUploads.bucketName = bucket;
listMultipartUploads.maxUploads = 1000;
OSSTask *listMultipartUploadsTask = [client listMultipartUploads:listMultipartUploads];
[[listMultipartUploadsTask continueWithBlock:^id(OSSTask *task) {
OSSListMultipartUploadsResult * result = task.result;
for (NSDictionary *dict in result.uploads) {
NSString * uploadId = [dict objectForKey:@"UploadId"];
NSString * objectKey = [dict objectForKey:@"Key"];
NSLog(@"delete multipart uploadId %@", uploadId);
OSSAbortMultipartUploadRequest *abort = [OSSAbortMultipartUploadRequest new];
abort.bucketName = bucket;
abort.objectKey = objectKey;
abort.uploadId = uploadId;
[[client abortMultipartUpload:abort] waitUntilFinished];
}
return nil;
}] waitUntilFinished];
//delete bucket
OSSDeleteBucketRequest *deleteBucket = [OSSDeleteBucketRequest new];
deleteBucket.bucketName = bucket;
[[client deleteBucket:deleteBucket] waitUntilFinished];
}
+ (NSString *)getBucketName {
return [NSString stringWithFormat:@"bucket-%ld", @([NSDate date].timeIntervalSince1970 * 1000).integerValue];
}
+ (void) putTestDataWithKey: (NSString *)key withClient: (OSSClient *)client withBucket: (NSString *)bucket
{
NSString *objectKey = key;
NSString *filePath = [[NSString oss_documentDirectory] stringByAppendingPathComponent:objectKey];
NSURL * fileURL = [NSURL fileURLWithPath:filePath];
OSSPutObjectRequest * request = [OSSPutObjectRequest new];
request.bucketName = bucket;
request.objectKey = objectKey;
request.uploadingFileURL = fileURL;
request.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"x-oss-meta-name1", nil];
OSSTask * task = [client putObject:request];
[task waitUntilFinished];
}
+ (OSSFederationToken *)getOssFederationToken {
NSURL * url = [NSURL URLWithString:OSS_STSTOKEN_URL];
NSURLRequest * request = [NSURLRequest requestWithURL:url];
OSSTaskCompletionSource * tcs = [OSSTaskCompletionSource taskCompletionSource];
NSURLSession * session = [NSURLSession sharedSession];
NSURLSessionTask * sessionTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
[tcs setError:error];
return;
}
[tcs setResult:data];
}];
[sessionTask resume];
[tcs.task waitUntilFinished];
if (tcs.task.error) {
return nil;
} else {
NSData* data = tcs.task.result;
NSDictionary * object = [NSJSONSerialization JSONObjectWithData:data
options:kNilOptions
error:nil];
int statusCode = [[object objectForKey:@"StatusCode"] intValue];
if (statusCode == 200) {
OSSFederationToken * token = [OSSFederationToken new];
// All the entries below are mandatory.
token.tAccessKey = [object objectForKey:@"AccessKeyId"];
token.tSecretKey = [object objectForKey:@"AccessKeySecret"];
token.tToken = [object objectForKey:@"SecurityToken"];
token.expirationTimeInGMTFormat = [object objectForKey:@"Expiration"];
OSSLogDebug(@"token: %@ %@ %@ %@", token.tAccessKey, token.tSecretKey, token.tToken, [object objectForKey:@"Expiration"]);
return token;
}else{
return nil;
}
}
}
@end
@interface OSSProgressTestUtils()
@property (nonatomic, assign) int64_t totalBytesSent;
@property (nonatomic, assign) int64_t totalBytesExpectedToSend;
@end
@implementation OSSProgressTestUtils
- (void)updateTotalBytes:(int64_t)totalBytesSent totalBytesExpected:(int64_t)totalBytesExpectedToSend {
XCTAssertTrue(totalBytesSent <= totalBytesExpectedToSend);
self.totalBytesSent = totalBytesSent;
self.totalBytesExpectedToSend = totalBytesExpectedToSend;
}
- (BOOL)completeValidateProgress {
return self.totalBytesSent == self.totalBytesExpectedToSend;
}
@end