363 lines
15 KiB
Swift
363 lines
15 KiB
Swift
//
|
|
// Copyright Amazon.com Inc. or its affiliates.
|
|
// All Rights Reserved.
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
import XCTest
|
|
import Amplify
|
|
@testable import AWSS3StoragePlugin
|
|
|
|
class AWSS3StoragePluginConfigureTests: AWSS3StoragePluginTests {
|
|
|
|
// MARK: Plugin Key test
|
|
func testPluginKey() {
|
|
let pluginKey = storagePlugin.key
|
|
XCTAssertEqual(pluginKey, "awsS3StoragePlugin")
|
|
}
|
|
|
|
// MARK: Configuration tests
|
|
|
|
func testConfigureSuccess() throws {
|
|
let bucket = JSONValue.init(stringLiteral: testBucket)
|
|
let region = JSONValue.init(stringLiteral: testRegion)
|
|
let storagePluginConfig = JSONValue.init(
|
|
dictionaryLiteral: (PluginConstants.bucket, bucket), (PluginConstants.region, region))
|
|
|
|
do {
|
|
try storagePlugin.configure(using: storagePluginConfig)
|
|
} catch {
|
|
XCTFail("Failed to configure storage plugin")
|
|
}
|
|
}
|
|
|
|
func testConfigureWithDefaultAccessLevelSuccess() {
|
|
let bucket = JSONValue.init(stringLiteral: testBucket)
|
|
let region = JSONValue.init(stringLiteral: testRegion)
|
|
let accessLevel = JSONValue.init(stringLiteral: defaultAccessLevel.rawValue)
|
|
let storagePluginConfig = JSONValue.init(dictionaryLiteral:
|
|
(PluginConstants.bucket, bucket),
|
|
(PluginConstants.region, region),
|
|
(PluginConstants.defaultAccessLevel, accessLevel))
|
|
|
|
do {
|
|
try storagePlugin.configure(using: storagePluginConfig)
|
|
} catch {
|
|
XCTFail("Failed to configure storage plugin with default access level")
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsErrorForMissingConfiguration() {
|
|
XCTAssertThrowsError(try storagePlugin.configure(using: "")) { error in
|
|
guard case let PluginError.pluginConfigurationError(errorDescription, _, _) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(errorDescription, PluginErrorConstants.decodeConfigurationError.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsErrorForMissingConfigurationObject() {
|
|
let storagePluginConfig = JSONValue.init(stringLiteral: "notADictionaryLiteral")
|
|
|
|
XCTAssertThrowsError(try storagePlugin.configure(using: storagePluginConfig)) { error in
|
|
guard case let StorageError.configuration(errorDescription, _, _) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(errorDescription, PluginErrorConstants.configurationObjectExpected.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureFailureForNilConfiguration() throws {
|
|
do {
|
|
try storagePlugin.configure(using: nil)
|
|
XCTFail("Storage configuration should not succeed")
|
|
} catch {
|
|
guard let pluginError = error as? PluginError,
|
|
case .pluginConfigurationError = pluginError else {
|
|
XCTFail("Should throw invalidConfiguration exception. But received \(error) ")
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsErrorForMissingBucketConfig() {
|
|
let region = JSONValue.init(stringLiteral: testRegion)
|
|
let storagePluginConfig = JSONValue.init(
|
|
dictionaryLiteral: (PluginConstants.region, region))
|
|
|
|
XCTAssertThrowsError(try storagePlugin.configure(using: storagePluginConfig)) { error in
|
|
guard case let StorageError.configuration(_, _, underlyingError) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let resolvedUnderlyingError = underlyingError else {
|
|
XCTFail("No underlying error in error: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let amplifyError = resolvedUnderlyingError as? AmplifyError else {
|
|
XCTFail("Underlying error is not an AmplifyError: \(resolvedUnderlyingError)")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(amplifyError.errorDescription, PluginErrorConstants.missingBucket.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsForEmptyBucketValue() {
|
|
let region = JSONValue.init(stringLiteral: testRegion)
|
|
|
|
let storagePluginConfig = JSONValue.init(
|
|
dictionaryLiteral: (PluginConstants.bucket, ""), (PluginConstants.region, region))
|
|
|
|
XCTAssertThrowsError(try storagePlugin.configure(using: storagePluginConfig)) { error in
|
|
guard case let StorageError.configuration(_, _, underlyingError) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let resolvedUnderlyingError = underlyingError else {
|
|
XCTFail("No underlying error in error: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let amplifyError = resolvedUnderlyingError as? AmplifyError else {
|
|
XCTFail("Underlying error is not an AmplifyError: \(resolvedUnderlyingError)")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(amplifyError.errorDescription, PluginErrorConstants.emptyBucket.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsForInvalidBucketValue() {
|
|
let bucket = JSONValue.init(integerLiteral: 1)
|
|
let region = JSONValue.init(stringLiteral: testRegion)
|
|
let storagePluginConfig = JSONValue.init(
|
|
dictionaryLiteral: (PluginConstants.bucket, bucket), (PluginConstants.region, region))
|
|
|
|
XCTAssertThrowsError(try storagePlugin.configure(using: storagePluginConfig)) { error in
|
|
guard case let StorageError.configuration(_, _, underlyingError) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let resolvedUnderlyingError = underlyingError else {
|
|
XCTFail("No underlying error in error: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let amplifyError = resolvedUnderlyingError as? AmplifyError else {
|
|
XCTFail("Underlying error is not an AmplifyError: \(resolvedUnderlyingError)")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(amplifyError.errorDescription, PluginErrorConstants.invalidBucket.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsErrorForMissingRegionConfig() {
|
|
|
|
let bucket = JSONValue.init(stringLiteral: testBucket)
|
|
let storagePluginConfig = JSONValue.init(
|
|
dictionaryLiteral: (PluginConstants.bucket, bucket))
|
|
|
|
XCTAssertThrowsError(try storagePlugin.configure(using: storagePluginConfig)) { error in
|
|
guard case let StorageError.configuration(_, _, underlyingError) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let resolvedUnderlyingError = underlyingError else {
|
|
XCTFail("No underlying error in error: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let amplifyError = resolvedUnderlyingError as? AmplifyError else {
|
|
XCTFail("Underlying error is not an AmplifyError: \(resolvedUnderlyingError)")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(amplifyError.errorDescription, PluginErrorConstants.missingRegion.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsForEmptyRegionValue() {
|
|
let bucket = JSONValue.init(stringLiteral: testBucket)
|
|
let region = JSONValue.init(stringLiteral: "")
|
|
let storagePluginConfig = JSONValue.init(
|
|
dictionaryLiteral: (PluginConstants.bucket, bucket), (PluginConstants.region, region))
|
|
|
|
XCTAssertThrowsError(try storagePlugin.configure(using: storagePluginConfig)) { error in
|
|
guard case let StorageError.configuration(_, _, underlyingError) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let resolvedUnderlyingError = underlyingError else {
|
|
XCTFail("No underlying error in error: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let amplifyError = resolvedUnderlyingError as? AmplifyError else {
|
|
XCTFail("Underlying error is not an AmplifyError: \(resolvedUnderlyingError)")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(amplifyError.errorDescription, PluginErrorConstants.emptyRegion.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsForInvalidRegionValue() {
|
|
let bucket = JSONValue.init(stringLiteral: testBucket)
|
|
let region = JSONValue.init(integerLiteral: 1)
|
|
let storagePluginConfig = JSONValue.init(
|
|
dictionaryLiteral: (PluginConstants.bucket, bucket), (PluginConstants.region, region))
|
|
|
|
XCTAssertThrowsError(try storagePlugin.configure(using: storagePluginConfig)) { error in
|
|
guard case let StorageError.configuration(_, _, underlyingError) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let resolvedUnderlyingError = underlyingError else {
|
|
XCTFail("No underlying error in error: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let amplifyError = resolvedUnderlyingError as? AmplifyError else {
|
|
XCTFail("Underlying error is not an AmplifyError: \(resolvedUnderlyingError)")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(amplifyError.errorDescription, PluginErrorConstants.invalidRegion.errorDescription)
|
|
}
|
|
}
|
|
|
|
let isValidationRegionConfig = false
|
|
|
|
func testConfigureThrowsForInvalidRegionType() throws {
|
|
try XCTSkipIf(!isValidationRegionConfig, "Skipping until region validation is enabled")
|
|
let bucket = JSONValue.init(stringLiteral: testBucket)
|
|
let region = JSONValue.init(stringLiteral: "invalidRegionType")
|
|
let storagePluginConfig = JSONValue.init(
|
|
dictionaryLiteral: (PluginConstants.bucket, bucket), (PluginConstants.region, region))
|
|
|
|
XCTAssertThrowsError(try storagePlugin.configure(using: storagePluginConfig)) { error in
|
|
guard case let StorageError.configuration(_, _, underlyingError) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let resolvedUnderlyingError = underlyingError else {
|
|
XCTFail("No underlying error in error: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let amplifyError = resolvedUnderlyingError as? AmplifyError else {
|
|
XCTFail("Underlying error is not an AmplifyError: \(resolvedUnderlyingError)")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(amplifyError.errorDescription, PluginErrorConstants.invalidRegion.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsForInvalidDefaultAccessLevel() {
|
|
let bucket = JSONValue.init(stringLiteral: testBucket)
|
|
let region = JSONValue.init(stringLiteral: testRegion)
|
|
let accessLevel = JSONValue.init(stringLiteral: "invalidAccessLevel")
|
|
let storagePluginConfig = JSONValue.init(dictionaryLiteral:
|
|
(PluginConstants.bucket, bucket),
|
|
(PluginConstants.region, region),
|
|
(PluginConstants.defaultAccessLevel, accessLevel))
|
|
|
|
XCTAssertThrowsError(try storagePlugin.configure(using: storagePluginConfig)) { error in
|
|
guard case let StorageError.configuration(_, _, underlyingError) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let resolvedUnderlyingError = underlyingError else {
|
|
XCTFail("No underlying error in error: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let amplifyError = resolvedUnderlyingError as? AmplifyError else {
|
|
XCTFail("Underlying error is not an AmplifyError: \(resolvedUnderlyingError)")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(amplifyError.errorDescription,
|
|
PluginErrorConstants.invalidDefaultAccessLevel.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsForInvalidDefaultAccessLevelString() {
|
|
let bucket = JSONValue.init(stringLiteral: testBucket)
|
|
let region = JSONValue.init(stringLiteral: testRegion)
|
|
let accessLevel = JSONValue.init(integerLiteral: 1)
|
|
let storagePluginConfig = JSONValue.init(dictionaryLiteral:
|
|
(PluginConstants.bucket, bucket),
|
|
(PluginConstants.region, region),
|
|
(PluginConstants.defaultAccessLevel, accessLevel))
|
|
|
|
XCTAssertThrowsError(try storagePlugin.configure(using: storagePluginConfig)) { error in
|
|
guard case let StorageError.configuration(_, _, underlyingError) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let resolvedUnderlyingError = underlyingError else {
|
|
XCTFail("No underlying error in error: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let amplifyError = resolvedUnderlyingError as? AmplifyError else {
|
|
XCTFail("Underlying error is not an AmplifyError: \(resolvedUnderlyingError)")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(amplifyError.errorDescription,
|
|
PluginErrorConstants.invalidDefaultAccessLevel.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsForSpecifiedAndEmptyDefaultAccessLevel() {
|
|
|
|
let bucket = JSONValue.init(stringLiteral: testBucket)
|
|
let region = JSONValue.init(stringLiteral: testRegion)
|
|
let accessLevel = JSONValue.init(stringLiteral: "")
|
|
let storagePluginConfig = JSONValue.init(dictionaryLiteral:
|
|
(PluginConstants.bucket, bucket),
|
|
(PluginConstants.region, region),
|
|
(PluginConstants.defaultAccessLevel, accessLevel))
|
|
|
|
XCTAssertThrowsError(try storagePlugin.configure(using: storagePluginConfig)) { error in
|
|
guard case let StorageError.configuration(_, _, underlyingError) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let resolvedUnderlyingError = underlyingError else {
|
|
XCTFail("No underlying error in error: \(error)")
|
|
return
|
|
}
|
|
|
|
guard let amplifyError = resolvedUnderlyingError as? AmplifyError else {
|
|
XCTFail("Underlying error is not an AmplifyError: \(resolvedUnderlyingError)")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(amplifyError.errorDescription,
|
|
PluginErrorConstants.invalidDefaultAccessLevel.errorDescription)
|
|
}
|
|
}
|
|
}
|