Skip to content

Commit

Permalink
fix(storage): add metadata support
Browse files Browse the repository at this point in the history
  • Loading branch information
phantumcode committed Oct 12, 2023
1 parent efc0061 commit 72aaddf
Show file tree
Hide file tree
Showing 10 changed files with 40 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ class AWSS3PreSignedURLBuilderAdapter: AWSS3PreSignedURLBuilderBehavior {
/// - Returns: Pre-Signed URL
func getPreSignedURL(key: String,
signingOperation: AWSS3SigningOperation,
metadata: [String: String]? = nil,
accelerate: Bool? = nil,
expires: Int64? = nil) async throws -> URL {
let expiresDate = Date(timeIntervalSinceNow: Double(expires ?? defaultExpiration))
Expand All @@ -47,7 +48,7 @@ class AWSS3PreSignedURLBuilderAdapter: AWSS3PreSignedURLBuilderBehavior {
config: config,
expiration: expiration)
case .putObject:
let input = PutObjectInput(bucket: bucket, key: key)
let input = PutObjectInput(bucket: bucket, key: key, metadata: metadata)
preSignedUrl = try await input.presignURL(
config: config,
expiration: expiration)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ protocol AWSS3PreSignedURLBuilderBehavior {
/// - Tag: AWSS3PreSignedURLBuilderBehavior.getPreSignedURL
func getPreSignedURL(key: String,
signingOperation: AWSS3SigningOperation,
metadata: [String: String]?,
accelerate: Bool?,
expires: Int64?) async throws -> URL

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ extension AWSS3StorageService {
do {
let preSignedURL = try await preSignedURLBuilder.getPreSignedURL(key: serviceKey,
signingOperation: .getObject,
metadata: nil,
accelerate: accelerate,
expires: nil)
startDownload(preSignedURL: preSignedURL, transferTask: transferTask)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,13 @@ extension AWSS3StorageService {

func getPreSignedURL(serviceKey: String,
signingOperation: AWSS3SigningOperation,
metadata: [String: String]?,
accelerate: Bool?,
expires: Int) async throws -> URL {
return try await preSignedURLBuilder.getPreSignedURL(
key: serviceKey,
signingOperation: signingOperation,
metadata: metadata,
accelerate: nil,
expires: Int64(expires)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ extension AWSS3StorageService {
do {
let preSignedURL = try await preSignedURLBuilder.getPreSignedURL(key: serviceKey,
signingOperation: .putObject,
metadata: metadata,
accelerate: accelerate,
expires: nil)
startUpload(preSignedURL: preSignedURL,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ protocol AWSS3StorageServiceBehavior {

func getPreSignedURL(serviceKey: String,
signingOperation: AWSS3SigningOperation,
metadata: [String: String]?,
accelerate: Bool?,
expires: Int) async throws -> URL

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ class DefaultStorageMultipartUploadClient: StorageMultipartUploadClient {
let preSignedURL = try await serviceProxy.preSignedURLBuilder.getPreSignedURL(
key: self.key,
signingOperation: operation,
metadata: nil,
accelerate: nil,
expires: nil
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,15 @@ extension MockAWSS3PreSignedURLBuilder: AWSS3PreSignedURLBuilderBehavior {
func getPreSignedURL(
key: String,
signingOperation: AWSS3SigningOperation,
metadata: [String : String]?,
accelerate: Bool?,
expires: Int64?) async throws -> URL {
interactions.append("\(#function) \(key) \(signingOperation) \(String(describing: expires))")
if let metadata = metadata {
interactions.append("\(#function) \(key) \(signingOperation) \(metadata) \(String(describing: expires))")
} else {
interactions.append("\(#function) \(key) \(signingOperation) \(String(describing: expires))")
}

return try await getPreSignedURLHandler(key, signingOperation, expires)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,10 @@ public class MockAWSS3StorageService: AWSS3StorageServiceBehavior {
public func getPreSignedURL(
serviceKey: String,
signingOperation: AWSS3SigningOperation,
metadata: [String: String]?,
accelerate: Bool?,
expires: Int) async throws -> URL {
interactions.append("\(#function) \(serviceKey) \(signingOperation) \(expires)")
interactions.append("\(#function) \(serviceKey) \(signingOperation) \(String(describing: metadata)) \(expires)")
return try await getPreSignedURLHandler(serviceKey, signingOperation, expires)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,12 @@ class AWSS3StorageServiceGetPreSignedURLBehaviorTests: XCTestCase {
func testForGetObject() async throws {
let url = try await systemUnderTest.getPreSignedURL(serviceKey: serviceKey,
signingOperation: .getObject,
metadata: nil,
accelerate: nil,
expires: expires)
XCTAssertEqual(url, presignedURL)
XCTAssertEqual(builder.interactions, [
"getPreSignedURL(key:signingOperation:accelerate:expires:) \(serviceKey ?? "") \(AWSS3SigningOperation.getObject) \(String(describing: expires))"
"getPreSignedURL(key:signingOperation:metadata:accelerate:expires:) \(serviceKey ?? "") \(AWSS3SigningOperation.getObject) \(String(describing: expires))"
])
}

Expand All @@ -82,11 +83,28 @@ class AWSS3StorageServiceGetPreSignedURLBehaviorTests: XCTestCase {
func testForPutObject() async throws {
let url = try await systemUnderTest.getPreSignedURL(serviceKey: serviceKey,
signingOperation: .putObject,
metadata: nil,
accelerate: nil,
expires: expires)
XCTAssertEqual(url, presignedURL)
XCTAssertEqual(builder.interactions, [
"getPreSignedURL(key:signingOperation:accelerate:expires:) \(serviceKey ?? "") \(AWSS3SigningOperation.putObject) \(String(describing: expires))"
"getPreSignedURL(key:signingOperation:metadata:accelerate:expires:) \(serviceKey ?? "") \(AWSS3SigningOperation.putObject) \(String(describing: expires))"
])
}

/// - Given: A storage service configured to use a AWSS3PreSignedURLBuilder
/// - When: A presigned URL is requested for a **AWSS3SigningOperation.putObject** operation with metadata
/// - Then: A valid URL is returned
func testForPutObjectWithMetadata() async throws {
let metadata = ["test": "value"]
let url = try await systemUnderTest.getPreSignedURL(serviceKey: serviceKey,
signingOperation: .putObject,
metadata: metadata,
accelerate: nil,
expires: expires)
XCTAssertEqual(url, presignedURL)
XCTAssertEqual(builder.interactions, [
"getPreSignedURL(key:signingOperation:metadata:accelerate:expires:) \(serviceKey ?? "") \(AWSS3SigningOperation.putObject) \(metadata) \(String(describing: expires))"
])
}

Expand All @@ -97,11 +115,12 @@ class AWSS3StorageServiceGetPreSignedURLBehaviorTests: XCTestCase {
let operation = AWSS3SigningOperation.uploadPart(partNumber: 0, uploadId: UUID().uuidString)
let url = try await systemUnderTest.getPreSignedURL(serviceKey: serviceKey,
signingOperation: operation,
metadata: nil,
accelerate: nil,
expires: expires)
XCTAssertEqual(url, presignedURL)
XCTAssertEqual(builder.interactions, [
"getPreSignedURL(key:signingOperation:accelerate:expires:) \(serviceKey ?? "") \(operation) \(String(describing: expires))"
"getPreSignedURL(key:signingOperation:metadata:accelerate:expires:) \(serviceKey ?? "") \(operation) \(String(describing: expires))"
])
}

Expand Down

0 comments on commit 72aaddf

Please sign in to comment.