OSSSwiftDemo/OSSSwiftDemoTests/OSSProviderTests.swift (100 lines of code) (raw):
//
// OSSProviderTests.swift
// OSSSwiftDemoTests
//
// Created by huaixu on 2018/1/13.
// Copyright © 2018年 aliyun. All rights reserved.
//
import XCTest
import AliyunOSSiOS
import AliyunOSSSwiftSDK
class OSSProviderTests: XCTestCase {
var token: OSSFederationToken! = OSSFederationToken()
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
setupFederationToken()
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func setupFederationToken() {
let stsURL = URL.init(string: OSS_STSTOKEN_URL)
let request = URLRequest.init(url: stsURL!)
let tcs = OSSTaskCompletionSource<AnyObject>()
let session = URLSession.shared
let task = session.dataTask(with: request) { (data, response, error) in
XCTAssertNil(error)
tcs.setResult(data as AnyObject)
}
task.resume()
tcs.task.waitUntilFinished()
let result = try? JSONSerialization.jsonObject(with: tcs.task.result as! Data,
options: .allowFragments) as! [String: Any]
token.tAccessKey = result!["AccessKeyId"] as! String
token.tSecretKey = result!["AccessKeySecret"] as! String
token.tToken = result!["SecurityToken"] as! String
token.expirationTimeInGMTFormat = result?["Expiration"] as? String
}
func headObject(client: OSSClient) -> OSSTask<AnyObject> {
let request = OSSHeadObjectRequest()
request.bucketName = OSS_BUCKET_PRIVATE
request.objectKey = OSS_IMAGE_KEY
let task = client.headObject(request)
task.continue({ (t) -> Any? in
XCTAssertNil(t.error)
return nil
}).waitUntilFinished()
return task
}
func testForFederationCredentialProvider() {
let provider = OSSFederationCredentialProvider.init { () -> OSSFederationToken? in
return self.token
}
let tClient = OSSClient.init(endpoint: OSS_ENDPOINT, credentialProvider: provider)
let task = headObject(client: tClient)
task.waitUntilFinished()
XCTAssertNil(task.error)
}
func testGetStsTokenCredentialProvider() {
let provider = OSSStsTokenCredentialProvider(accessKeyId: token.tAccessKey,
secretKeyId: token.tSecretKey,
securityToken: token.tToken)
let tClient = OSSClient.init(endpoint: OSS_ENDPOINT, credentialProvider: provider)
let task = headObject(client: tClient)
task.waitUntilFinished()
XCTAssertNil(task.error)
}
func testCustomSignerCredentialProvider() {
let provider = OSSCustomSignerCredentialProvider.init { (content, error) -> String? in
let tToken = OSSFederationToken()
tToken.tAccessKey = OSS_ACCESSKEY_ID
tToken.tSecretKey = OSS_SECRETKEY_ID
return OSSUtil.sign(content, with: tToken)
}
let tClient = OSSClient.init(endpoint: OSS_ENDPOINT, credentialProvider: provider!)
let task = headObject(client: tClient)
task.waitUntilFinished()
XCTAssertNil(task.error)
}
func testPlainTextAKSKPairCredentialProvider() {
let provider = OSSPlainTextAKSKPairCredentialProvider.init(plainTextAccessKey: OSS_ACCESSKEY_ID, secretKey: OSS_SECRETKEY_ID)
let tClient = OSSClient.init(endpoint: OSS_ENDPOINT, credentialProvider: provider)
let task = headObject(client: tClient)
task.waitUntilFinished()
XCTAssertNil(task.error)
}
func testAuthCredentialProvider() {
let provider = OSSAuthCredentialProvider.init(authServerUrl: OSS_STSTOKEN_URL)
let tClient = OSSClient.init(endpoint: OSS_ENDPOINT, credentialProvider: provider)
let task = headObject(client: tClient)
task.waitUntilFinished()
XCTAssertNil(task.error)
}
func testAuthCredentialProviderWithDecoder() {
let provider = OSSAuthCredentialProvider.init(authServerUrl: OSS_STSTOKEN_URL) { (data) -> Data? in
let str = String.init(data: data, encoding: .utf8)
let decodedData = str?.data(using: .utf8)
if decodedData != nil {
return decodedData
}
return data
}
let tClient = OSSClient.init(endpoint: OSS_ENDPOINT, credentialProvider: provider)
let task = headObject(client: tClient)
task.waitUntilFinished()
XCTAssertNil(task.error)
}
}