// // Copyright 2010-2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"). // You may not use this file except in compliance with the License. // A copy of the License is located at // // http://aws.amazon.com/apache2.0 // // or in the "license" file accompanying this file. This file is distributed // on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either // express or implied. See the License for the specific language governing // permissions and limitations under the License. // #import #import #import "OCMock.h" #import "AWSTestUtility.h" #import "AWSSTSService.h" static id mockNetworking = nil; @interface AWSGeneralSTSTests : XCTestCase @end @implementation AWSGeneralSTSTests - (void)setUp { [super setUp]; [AWSTestUtility setupFakeCognitoCredentialsProvider]; mockNetworking = OCMClassMock([AWSNetworking class]); AWSTask *errorTask = [AWSTask taskWithError:[NSError errorWithDomain:@"OCMockExpectedNetworkingError" code:8848 userInfo:nil]]; OCMStub([mockNetworking sendRequest:[OCMArg isKindOfClass:[AWSNetworkingRequest class]]]).andReturn(errorTask); } - (void)tearDown { [super tearDown]; } - (void)testConstructors { NSString *key = @"testSTSConstructors"; XCTAssertNotNil([AWSSTS defaultSTS]); XCTAssertEqual([[AWSSTS defaultSTS] class], [AWSSTS class]); XCTAssertNil([AWSSTS STSForKey:key]); AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionSAEast1 credentialsProvider:[AWSServiceManager defaultServiceManager].defaultServiceConfiguration.credentialsProvider]; [AWSSTS registerSTSWithConfiguration:configuration forKey:key]; XCTAssertNotNil([AWSSTS STSForKey:key]); XCTAssertEqual([[AWSSTS STSForKey:key] class], [AWSSTS class]); XCTAssertEqual([AWSSTS STSForKey:key].configuration.regionType, AWSRegionSAEast1); [AWSSTS removeSTSForKey:key]; XCTAssertNil([AWSSTS STSForKey:key]); } - (void)testAssumeRole { NSString *key = @"testAssumeRole"; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; [AWSSTS registerSTSWithConfiguration:configuration forKey:key]; AWSSTS *awsClient = [AWSSTS STSForKey:key]; XCTAssertNotNil(awsClient); XCTAssertNotNil(mockNetworking); [awsClient setValue:mockNetworking forKey:@"networking"]; [[[[AWSSTS STSForKey:key] assumeRole:[AWSSTSAssumeRoleRequest new]] continueWithBlock:^id(AWSTask *task) { XCTAssertNotNil(task.error); XCTAssertEqualObjects(@"OCMockExpectedNetworkingError", task.error.domain); XCTAssertEqual(8848, task.error.code); XCTAssertNil(task.result); return nil; }] waitUntilFinished]; OCMVerify([mockNetworking sendRequest:[OCMArg isNotNil]]); [AWSSTS removeSTSForKey:key]; } - (void)testAssumeRoleCompletionHandler { NSString *key = @"testAssumeRole"; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; [AWSSTS registerSTSWithConfiguration:configuration forKey:key]; AWSSTS *awsClient = [AWSSTS STSForKey:key]; XCTAssertNotNil(awsClient); XCTAssertNotNil(mockNetworking); [awsClient setValue:mockNetworking forKey:@"networking"]; dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); [[AWSSTS STSForKey:key] assumeRole:[AWSSTSAssumeRoleRequest new] completionHandler:^(AWSSTSAssumeRoleResponse* _Nullable response, NSError * _Nullable error) { XCTAssertNotNil(error); XCTAssertEqualObjects(@"OCMockExpectedNetworkingError", error.domain); XCTAssertEqual(8848, error.code); XCTAssertNil(response); dispatch_semaphore_signal(semaphore); }]; dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, (int)(2.0 * NSEC_PER_SEC))); OCMVerify([mockNetworking sendRequest:[OCMArg isNotNil]]); [AWSSTS removeSTSForKey:key]; } - (void)testAssumeRoleWithSAML { NSString *key = @"testAssumeRoleWithSAML"; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; [AWSSTS registerSTSWithConfiguration:configuration forKey:key]; AWSSTS *awsClient = [AWSSTS STSForKey:key]; XCTAssertNotNil(awsClient); XCTAssertNotNil(mockNetworking); [awsClient setValue:mockNetworking forKey:@"networking"]; [[[[AWSSTS STSForKey:key] assumeRoleWithSAML:[AWSSTSAssumeRoleWithSAMLRequest new]] continueWithBlock:^id(AWSTask *task) { XCTAssertNotNil(task.error); XCTAssertEqualObjects(@"OCMockExpectedNetworkingError", task.error.domain); XCTAssertEqual(8848, task.error.code); XCTAssertNil(task.result); return nil; }] waitUntilFinished]; OCMVerify([mockNetworking sendRequest:[OCMArg isNotNil]]); [AWSSTS removeSTSForKey:key]; } - (void)testAssumeRoleWithSAMLCompletionHandler { NSString *key = @"testAssumeRoleWithSAML"; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; [AWSSTS registerSTSWithConfiguration:configuration forKey:key]; AWSSTS *awsClient = [AWSSTS STSForKey:key]; XCTAssertNotNil(awsClient); XCTAssertNotNil(mockNetworking); [awsClient setValue:mockNetworking forKey:@"networking"]; dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); [[AWSSTS STSForKey:key] assumeRoleWithSAML:[AWSSTSAssumeRoleWithSAMLRequest new] completionHandler:^(AWSSTSAssumeRoleWithSAMLResponse* _Nullable response, NSError * _Nullable error) { XCTAssertNotNil(error); XCTAssertEqualObjects(@"OCMockExpectedNetworkingError", error.domain); XCTAssertEqual(8848, error.code); XCTAssertNil(response); dispatch_semaphore_signal(semaphore); }]; dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, (int)(2.0 * NSEC_PER_SEC))); OCMVerify([mockNetworking sendRequest:[OCMArg isNotNil]]); [AWSSTS removeSTSForKey:key]; } - (void)testAssumeRoleWithWebIdentity { NSString *key = @"testAssumeRoleWithWebIdentity"; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; [AWSSTS registerSTSWithConfiguration:configuration forKey:key]; AWSSTS *awsClient = [AWSSTS STSForKey:key]; XCTAssertNotNil(awsClient); XCTAssertNotNil(mockNetworking); [awsClient setValue:mockNetworking forKey:@"networking"]; [[[[AWSSTS STSForKey:key] assumeRoleWithWebIdentity:[AWSSTSAssumeRoleWithWebIdentityRequest new]] continueWithBlock:^id(AWSTask *task) { XCTAssertNotNil(task.error); XCTAssertEqualObjects(@"OCMockExpectedNetworkingError", task.error.domain); XCTAssertEqual(8848, task.error.code); XCTAssertNil(task.result); return nil; }] waitUntilFinished]; OCMVerify([mockNetworking sendRequest:[OCMArg isNotNil]]); [AWSSTS removeSTSForKey:key]; } - (void)testAssumeRoleWithWebIdentityCompletionHandler { NSString *key = @"testAssumeRoleWithWebIdentity"; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; [AWSSTS registerSTSWithConfiguration:configuration forKey:key]; AWSSTS *awsClient = [AWSSTS STSForKey:key]; XCTAssertNotNil(awsClient); XCTAssertNotNil(mockNetworking); [awsClient setValue:mockNetworking forKey:@"networking"]; dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); [[AWSSTS STSForKey:key] assumeRoleWithWebIdentity:[AWSSTSAssumeRoleWithWebIdentityRequest new] completionHandler:^(AWSSTSAssumeRoleWithWebIdentityResponse* _Nullable response, NSError * _Nullable error) { XCTAssertNotNil(error); XCTAssertEqualObjects(@"OCMockExpectedNetworkingError", error.domain); XCTAssertEqual(8848, error.code); XCTAssertNil(response); dispatch_semaphore_signal(semaphore); }]; dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, (int)(2.0 * NSEC_PER_SEC))); OCMVerify([mockNetworking sendRequest:[OCMArg isNotNil]]); [AWSSTS removeSTSForKey:key]; } - (void)testDecodeAuthorizationMessage { NSString *key = @"testDecodeAuthorizationMessage"; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; [AWSSTS registerSTSWithConfiguration:configuration forKey:key]; AWSSTS *awsClient = [AWSSTS STSForKey:key]; XCTAssertNotNil(awsClient); XCTAssertNotNil(mockNetworking); [awsClient setValue:mockNetworking forKey:@"networking"]; [[[[AWSSTS STSForKey:key] decodeAuthorizationMessage:[AWSSTSDecodeAuthorizationMessageRequest new]] continueWithBlock:^id(AWSTask *task) { XCTAssertNotNil(task.error); XCTAssertEqualObjects(@"OCMockExpectedNetworkingError", task.error.domain); XCTAssertEqual(8848, task.error.code); XCTAssertNil(task.result); return nil; }] waitUntilFinished]; OCMVerify([mockNetworking sendRequest:[OCMArg isNotNil]]); [AWSSTS removeSTSForKey:key]; } - (void)testDecodeAuthorizationMessageCompletionHandler { NSString *key = @"testDecodeAuthorizationMessage"; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; [AWSSTS registerSTSWithConfiguration:configuration forKey:key]; AWSSTS *awsClient = [AWSSTS STSForKey:key]; XCTAssertNotNil(awsClient); XCTAssertNotNil(mockNetworking); [awsClient setValue:mockNetworking forKey:@"networking"]; dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); [[AWSSTS STSForKey:key] decodeAuthorizationMessage:[AWSSTSDecodeAuthorizationMessageRequest new] completionHandler:^(AWSSTSDecodeAuthorizationMessageResponse* _Nullable response, NSError * _Nullable error) { XCTAssertNotNil(error); XCTAssertEqualObjects(@"OCMockExpectedNetworkingError", error.domain); XCTAssertEqual(8848, error.code); XCTAssertNil(response); dispatch_semaphore_signal(semaphore); }]; dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, (int)(2.0 * NSEC_PER_SEC))); OCMVerify([mockNetworking sendRequest:[OCMArg isNotNil]]); [AWSSTS removeSTSForKey:key]; } - (void)testGetAccessKeyInfo { NSString *key = @"testGetAccessKeyInfo"; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; [AWSSTS registerSTSWithConfiguration:configuration forKey:key]; AWSSTS *awsClient = [AWSSTS STSForKey:key]; XCTAssertNotNil(awsClient); XCTAssertNotNil(mockNetworking); [awsClient setValue:mockNetworking forKey:@"networking"]; [[[[AWSSTS STSForKey:key] getAccessKeyInfo:[AWSSTSGetAccessKeyInfoRequest new]] continueWithBlock:^id(AWSTask *task) { XCTAssertNotNil(task.error); XCTAssertEqualObjects(@"OCMockExpectedNetworkingError", task.error.domain); XCTAssertEqual(8848, task.error.code); XCTAssertNil(task.result); return nil; }] waitUntilFinished]; OCMVerify([mockNetworking sendRequest:[OCMArg isNotNil]]); [AWSSTS removeSTSForKey:key]; } - (void)testGetAccessKeyInfoCompletionHandler { NSString *key = @"testGetAccessKeyInfo"; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; [AWSSTS registerSTSWithConfiguration:configuration forKey:key]; AWSSTS *awsClient = [AWSSTS STSForKey:key]; XCTAssertNotNil(awsClient); XCTAssertNotNil(mockNetworking); [awsClient setValue:mockNetworking forKey:@"networking"]; dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); [[AWSSTS STSForKey:key] getAccessKeyInfo:[AWSSTSGetAccessKeyInfoRequest new] completionHandler:^(AWSSTSGetAccessKeyInfoResponse* _Nullable response, NSError * _Nullable error) { XCTAssertNotNil(error); XCTAssertEqualObjects(@"OCMockExpectedNetworkingError", error.domain); XCTAssertEqual(8848, error.code); XCTAssertNil(response); dispatch_semaphore_signal(semaphore); }]; dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, (int)(2.0 * NSEC_PER_SEC))); OCMVerify([mockNetworking sendRequest:[OCMArg isNotNil]]); [AWSSTS removeSTSForKey:key]; } - (void)testGetCallerIdentity { NSString *key = @"testGetCallerIdentity"; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; [AWSSTS registerSTSWithConfiguration:configuration forKey:key]; AWSSTS *awsClient = [AWSSTS STSForKey:key]; XCTAssertNotNil(awsClient); XCTAssertNotNil(mockNetworking); [awsClient setValue:mockNetworking forKey:@"networking"]; [[[[AWSSTS STSForKey:key] getCallerIdentity:[AWSSTSGetCallerIdentityRequest new]] continueWithBlock:^id(AWSTask *task) { XCTAssertNotNil(task.error); XCTAssertEqualObjects(@"OCMockExpectedNetworkingError", task.error.domain); XCTAssertEqual(8848, task.error.code); XCTAssertNil(task.result); return nil; }] waitUntilFinished]; OCMVerify([mockNetworking sendRequest:[OCMArg isNotNil]]); [AWSSTS removeSTSForKey:key]; } - (void)testGetCallerIdentityCompletionHandler { NSString *key = @"testGetCallerIdentity"; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; [AWSSTS registerSTSWithConfiguration:configuration forKey:key]; AWSSTS *awsClient = [AWSSTS STSForKey:key]; XCTAssertNotNil(awsClient); XCTAssertNotNil(mockNetworking); [awsClient setValue:mockNetworking forKey:@"networking"]; dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); [[AWSSTS STSForKey:key] getCallerIdentity:[AWSSTSGetCallerIdentityRequest new] completionHandler:^(AWSSTSGetCallerIdentityResponse* _Nullable response, NSError * _Nullable error) { XCTAssertNotNil(error); XCTAssertEqualObjects(@"OCMockExpectedNetworkingError", error.domain); XCTAssertEqual(8848, error.code); XCTAssertNil(response); dispatch_semaphore_signal(semaphore); }]; dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, (int)(2.0 * NSEC_PER_SEC))); OCMVerify([mockNetworking sendRequest:[OCMArg isNotNil]]); [AWSSTS removeSTSForKey:key]; } - (void)testGetFederationToken { NSString *key = @"testGetFederationToken"; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; [AWSSTS registerSTSWithConfiguration:configuration forKey:key]; AWSSTS *awsClient = [AWSSTS STSForKey:key]; XCTAssertNotNil(awsClient); XCTAssertNotNil(mockNetworking); [awsClient setValue:mockNetworking forKey:@"networking"]; [[[[AWSSTS STSForKey:key] getFederationToken:[AWSSTSGetFederationTokenRequest new]] continueWithBlock:^id(AWSTask *task) { XCTAssertNotNil(task.error); XCTAssertEqualObjects(@"OCMockExpectedNetworkingError", task.error.domain); XCTAssertEqual(8848, task.error.code); XCTAssertNil(task.result); return nil; }] waitUntilFinished]; OCMVerify([mockNetworking sendRequest:[OCMArg isNotNil]]); [AWSSTS removeSTSForKey:key]; } - (void)testGetFederationTokenCompletionHandler { NSString *key = @"testGetFederationToken"; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; [AWSSTS registerSTSWithConfiguration:configuration forKey:key]; AWSSTS *awsClient = [AWSSTS STSForKey:key]; XCTAssertNotNil(awsClient); XCTAssertNotNil(mockNetworking); [awsClient setValue:mockNetworking forKey:@"networking"]; dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); [[AWSSTS STSForKey:key] getFederationToken:[AWSSTSGetFederationTokenRequest new] completionHandler:^(AWSSTSGetFederationTokenResponse* _Nullable response, NSError * _Nullable error) { XCTAssertNotNil(error); XCTAssertEqualObjects(@"OCMockExpectedNetworkingError", error.domain); XCTAssertEqual(8848, error.code); XCTAssertNil(response); dispatch_semaphore_signal(semaphore); }]; dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, (int)(2.0 * NSEC_PER_SEC))); OCMVerify([mockNetworking sendRequest:[OCMArg isNotNil]]); [AWSSTS removeSTSForKey:key]; } - (void)testGetSessionToken { NSString *key = @"testGetSessionToken"; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; [AWSSTS registerSTSWithConfiguration:configuration forKey:key]; AWSSTS *awsClient = [AWSSTS STSForKey:key]; XCTAssertNotNil(awsClient); XCTAssertNotNil(mockNetworking); [awsClient setValue:mockNetworking forKey:@"networking"]; [[[[AWSSTS STSForKey:key] getSessionToken:[AWSSTSGetSessionTokenRequest new]] continueWithBlock:^id(AWSTask *task) { XCTAssertNotNil(task.error); XCTAssertEqualObjects(@"OCMockExpectedNetworkingError", task.error.domain); XCTAssertEqual(8848, task.error.code); XCTAssertNil(task.result); return nil; }] waitUntilFinished]; OCMVerify([mockNetworking sendRequest:[OCMArg isNotNil]]); [AWSSTS removeSTSForKey:key]; } - (void)testGetSessionTokenCompletionHandler { NSString *key = @"testGetSessionToken"; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; [AWSSTS registerSTSWithConfiguration:configuration forKey:key]; AWSSTS *awsClient = [AWSSTS STSForKey:key]; XCTAssertNotNil(awsClient); XCTAssertNotNil(mockNetworking); [awsClient setValue:mockNetworking forKey:@"networking"]; dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); [[AWSSTS STSForKey:key] getSessionToken:[AWSSTSGetSessionTokenRequest new] completionHandler:^(AWSSTSGetSessionTokenResponse* _Nullable response, NSError * _Nullable error) { XCTAssertNotNil(error); XCTAssertEqualObjects(@"OCMockExpectedNetworkingError", error.domain); XCTAssertEqual(8848, error.code); XCTAssertNil(response); dispatch_semaphore_signal(semaphore); }]; dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, (int)(2.0 * NSEC_PER_SEC))); OCMVerify([mockNetworking sendRequest:[OCMArg isNotNil]]); [AWSSTS removeSTSForKey:key]; } @end