AliyunOSSiOSTests/OSSCredentialProviderTests.m (116 lines of code) (raw):
//
// OSSCredentialProviderTests.m
// AliyunOSSiOSTests
//
// Created by 怀叙 on 2017/11/20.
// Copyright © 2017年 zhouzhuo. All rights reserved.
//
#import <XCTest/XCTest.h>
#import <AliyunOSSiOS/AliyunOSSiOS.h>
#import "OSSTestMacros.h"
#import "OSSTestUtils.h"
@interface OSSCredentialProviderTests : XCTestCase
{
OSSFederationToken *_token;
NSString *_privateBucketName;
}
@end
@implementation OSSCredentialProviderTests
- (void)setUp
{
[super setUp];
NSArray *array1 = [self.name componentsSeparatedByString:@" "];
NSString *testName = [[array1[1] substringToIndex:([array1[1] length] -1)] lowercaseString];
_privateBucketName = [OSSTestUtils getBucketName];
// Put setup code here. This method is called before the invocation of each test method in the class.
[self setUpFederationToken];
}
- (void)tearDown
{
// Put teardown code here. This method is called after the invocation of each test method in the class.
[super tearDown];
}
- (void)setUpFederationToken
{
NSURL * url = [NSURL URLWithString:OSS_STSTOKEN_URL];
NSURLRequest * request = [NSURLRequest requestWithURL:url];
OSSTaskCompletionSource * tcs = [OSSTaskCompletionSource taskCompletionSource];
NSURLSession * session = [NSURLSession sharedSession];
NSURLSessionDataTask * dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
XCTAssertNil(error);
[tcs setResult:data];
}];
[dataTask resume];
[tcs.task waitUntilFinished];
NSDictionary * result = [NSJSONSerialization JSONObjectWithData:tcs.task.result
options:kNilOptions
error:nil];
XCTAssertNotNil(result);
_token = [OSSFederationToken new];
_token.tAccessKey = result[@"AccessKeyId"];
_token.tSecretKey = result[@"AccessKeySecret"];
_token.tToken = result[@"SecurityToken"];
_token.expirationTimeInGMTFormat = result[@"Expiration"];
NSLog(@"tokenInfo: %@", _token);
}
- (void)headObjectWithBackgroundSessionIdentifier:(nonnull NSString *)identifier provider:(id<OSSCredentialProvider>)provider
{
OSSClientConfiguration *config = [OSSClientConfiguration new];
config.backgroundSesseionIdentifier = identifier;
config.enableBackgroundTransmitService = YES;
OSSClient *client = [[OSSClient alloc] initWithEndpoint:OSS_ENDPOINT credentialProvider:provider];
OSSCreateBucketRequest *createBucket1 = [OSSCreateBucketRequest new];
createBucket1.bucketName = _privateBucketName;
[[client createBucket:createBucket1] waitUntilFinished];
OSSPutObjectRequest * put = [OSSPutObjectRequest new];
put.bucketName = _privateBucketName;
put.objectKey = OSS_IMAGE_KEY;
put.uploadingFileURL = [[NSBundle mainBundle] URLForResource:@"hasky" withExtension:@"jpeg"];
[[client putObject:put] waitUntilFinished];
OSSHeadObjectRequest *request = [OSSHeadObjectRequest new];
request.bucketName = _privateBucketName;
request.objectKey = OSS_IMAGE_KEY;
OSSTask *task = [client headObject:request];
[task waitUntilFinished];
XCTAssertNil(task.error);
[OSSTestUtils cleanBucket:_privateBucketName with:client];
}
- (void)testForFederationCredentialProvider
{
OSSFederationCredentialProvider *provider = [[OSSFederationCredentialProvider alloc] initWithFederationTokenGetter:^OSSFederationToken *{
return _token;
}];
[self headObjectWithBackgroundSessionIdentifier:@"com.aliyun.testcases.federationprovider.identifier" provider:provider];
}
- (void)testGetStsTokenCredentialProvider
{
OSSStsTokenCredentialProvider *provider = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:_token.tAccessKey secretKeyId:_token.tSecretKey securityToken:_token.tToken];
[self headObjectWithBackgroundSessionIdentifier:@"com.aliyun.testcases.ststokencredentialprovider.identifier" provider:provider];
}
- (void)testCustomSignerCredentialProvider
{
OSSCustomSignerCredentialProvider *provider = [[OSSCustomSignerCredentialProvider alloc] initWithImplementedSigner:^NSString *(NSString *contentToSign, NSError *__autoreleasing *error) {
OSSFederationToken *token = [OSSFederationToken new];
token.tAccessKey = OSS_ACCESSKEY_ID;
token.tSecretKey = OSS_SECRETKEY_ID;
NSString *signedContent = [OSSUtil sign:contentToSign withToken:token];
return signedContent;
}];
[self headObjectWithBackgroundSessionIdentifier:@"com.aliyun.testcases.customsignercredentialprovider.identifier" provider:provider];
}
-(void)testPlainTextAKSKPairCredentialProvider
{
// invalid credentialProvider
OSSPlainTextAKSKPairCredentialProvider *provider = [[OSSPlainTextAKSKPairCredentialProvider alloc] initWithPlainTextAccessKey:OSS_ACCESSKEY_ID secretKey:OSS_SECRETKEY_ID];
[self headObjectWithBackgroundSessionIdentifier:@"com.aliyun.testcases.plainakskpaircredentialprovider.identifier" provider:provider];
}
-(void)testAuthCredentialProvider
{
// invalid credentialProvider
OSSAuthCredentialProvider *provider = [[OSSAuthCredentialProvider alloc] initWithAuthServerUrl:OSS_STSTOKEN_URL];
[self headObjectWithBackgroundSessionIdentifier:@"com.aliyun.testcases.authcredentialprovider.identifier" provider:provider];
}
- (void)testAuthCredentialProviderWithDecoder
{
id<OSSCredentialProvider> provider =
[[OSSAuthCredentialProvider alloc] initWithAuthServerUrl:OSS_STSTOKEN_URL responseDecoder:^NSData *(NSData *data) {
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSData* decodeData = [str dataUsingEncoding:NSUTF8StringEncoding];
if (decodeData) {
return decodeData;
}
return data;
}];
[self headObjectWithBackgroundSessionIdentifier:@"com.aliyun.testcases.authcredentialproviderwithdecoder.identifier" provider:provider];
}
@end