FRAMessageUtilsTests.m revision 6a2ae9c7fb4d2c40d75cab0edaf940f22c18224f
2cacab200fb387e290386593d9b2fca2e7beef33csovant/*
2cacab200fb387e290386593d9b2fca2e7beef33csovant * The contents of this file are subject to the terms of the Common Development and
2cacab200fb387e290386593d9b2fca2e7beef33csovant * Distribution License (the License). You may not use this file except in compliance with the
2cacab200fb387e290386593d9b2fca2e7beef33csovant * License.
2cacab200fb387e290386593d9b2fca2e7beef33csovant *
2cacab200fb387e290386593d9b2fca2e7beef33csovant * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
2cacab200fb387e290386593d9b2fca2e7beef33csovant * specific language governing permission and limitations under the License.
2cacab200fb387e290386593d9b2fca2e7beef33csovant *
2cacab200fb387e290386593d9b2fca2e7beef33csovant * When distributing Covered Software, include this CDDL Header Notice in each file and include
2cacab200fb387e290386593d9b2fca2e7beef33csovant * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
2cacab200fb387e290386593d9b2fca2e7beef33csovant * Header, with the fields enclosed by brackets [] replaced by your own identifying
2cacab200fb387e290386593d9b2fca2e7beef33csovant * information: "Portions copyright [year] [name of copyright owner]".
2cacab200fb387e290386593d9b2fca2e7beef33csovant *
2cacab200fb387e290386593d9b2fca2e7beef33csovant * Copyright 2016 ForgeRock AS.
2cacab200fb387e290386593d9b2fca2e7beef33csovant */
2cacab200fb387e290386593d9b2fca2e7beef33csovant
2cacab200fb387e290386593d9b2fca2e7beef33csovant#import <XCTest/XCTest.h>
2cacab200fb387e290386593d9b2fca2e7beef33csovant#import "FRAMessageUtils.h"
2cacab200fb387e290386593d9b2fca2e7beef33csovant#import "FRAMockURLProtocol.h"
2cacab200fb387e290386593d9b2fca2e7beef33csovant
2cacab200fb387e290386593d9b2fca2e7beef33csovantstatic NSString * const url = @"http://any.website.com";
2cacab200fb387e290386593d9b2fca2e7beef33csovantstatic NSString * const messageId = @"message id";
2cacab200fb387e290386593d9b2fca2e7beef33csovantstatic NSString * const base64Secret = @"c2VjcmV0";
2cacab200fb387e290386593d9b2fca2e7beef33csovantstatic NSTimeInterval const testTimeout = 10.0;
d81f6d00c343633159fc5ea08599d145135612c0ludovicp
2cacab200fb387e290386593d9b2fca2e7beef33csovant@interface FRAMessageUtilsTests : XCTestCase
2cacab200fb387e290386593d9b2fca2e7beef33csovant
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant@end
2cacab200fb387e290386593d9b2fca2e7beef33csovant
2cacab200fb387e290386593d9b2fca2e7beef33csovant@implementation FRAMessageUtilsTests
2cacab200fb387e290386593d9b2fca2e7beef33csovant
2cacab200fb387e290386593d9b2fca2e7beef33csovant- (void)setUp {
a36d934612ff23d33c1ff20f05d59db05abeca26madiot [super setUp];
a36d934612ff23d33c1ff20f05d59db05abeca26madiot}
98de9af32a09c74f74a861cbd85ccb715dc2290amadiot
98de9af32a09c74f74a861cbd85ccb715dc2290amadiot- (void)tearDown {
98de9af32a09c74f74a861cbd85ccb715dc2290amadiot [FRAMockURLProtocol setResponseData:nil];
98de9af32a09c74f74a861cbd85ccb715dc2290amadiot [FRAMockURLProtocol setResponseHeaders:nil];
98de9af32a09c74f74a861cbd85ccb715dc2290amadiot [FRAMockURLProtocol setError:nil];
a36d934612ff23d33c1ff20f05d59db05abeca26madiot [super tearDown];
a36d934612ff23d33c1ff20f05d59db05abeca26madiot}
a36d934612ff23d33c1ff20f05d59db05abeca26madiot
a36d934612ff23d33c1ff20f05d59db05abeca26madiot- (void)testUsePost {
98de9af32a09c74f74a861cbd85ccb715dc2290amadiot XCTestExpectation *expectation = [self expectationWithDescription:@"asynchronous request"];
98de9af32a09c74f74a861cbd85ccb715dc2290amadiot
98de9af32a09c74f74a861cbd85ccb715dc2290amadiot [FRAMessageUtils respondWithEndpoint:url
a36d934612ff23d33c1ff20f05d59db05abeca26madiot base64Secret:base64Secret
a36d934612ff23d33c1ff20f05d59db05abeca26madiot messageId:messageId
a36d934612ff23d33c1ff20f05d59db05abeca26madiot loadBalancerCookieData:@"amlbcookie=03"
a36d934612ff23d33c1ff20f05d59db05abeca26madiot data:@{@"some":@"data"}
a36d934612ff23d33c1ff20f05d59db05abeca26madiot protocol:[FRAMockURLProtocol class]
a36d934612ff23d33c1ff20f05d59db05abeca26madiot handler:^(NSInteger statusCode, NSError *error) {
2cacab200fb387e290386593d9b2fca2e7beef33csovant NSURLRequest *request = [FRAMockURLProtocol getRequest];
2cacab200fb387e290386593d9b2fca2e7beef33csovant XCTAssertEqualObjects([request HTTPMethod], @"POST");
d81f6d00c343633159fc5ea08599d145135612c0ludovicp [expectation fulfill];
2cacab200fb387e290386593d9b2fca2e7beef33csovant }];
d81f6d00c343633159fc5ea08599d145135612c0ludovicp
2cacab200fb387e290386593d9b2fca2e7beef33csovant [self waitForExpectationsWithTimeout:testTimeout handler:nil];
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant}
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant- (void)testMakeCallToUrl {
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant XCTestExpectation *expectation = [self expectationWithDescription:@"asynchronous request"];
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant [FRAMessageUtils respondWithEndpoint:url
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant base64Secret:base64Secret
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant messageId:messageId
2cacab200fb387e290386593d9b2fca2e7beef33csovant loadBalancerCookieData:@"amlbcookie=03"
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant data:@{@"some":@"data"}
2cacab200fb387e290386593d9b2fca2e7beef33csovant protocol:[FRAMockURLProtocol class]
2cacab200fb387e290386593d9b2fca2e7beef33csovant handler:^(NSInteger statusCode, NSError *error) {
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant NSURLRequest *request = [FRAMockURLProtocol getRequest];
2cacab200fb387e290386593d9b2fca2e7beef33csovant XCTAssertEqual(request.URL.absoluteString, url);
d81f6d00c343633159fc5ea08599d145135612c0ludovicp [expectation fulfill];
2cacab200fb387e290386593d9b2fca2e7beef33csovant }];
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant [self waitForExpectationsWithTimeout:testTimeout handler:nil];
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant}
d81f6d00c343633159fc5ea08599d145135612c0ludovicp
d81f6d00c343633159fc5ea08599d145135612c0ludovicp- (void)testSetJsonContentType {
d81f6d00c343633159fc5ea08599d145135612c0ludovicp XCTestExpectation *expectation = [self expectationWithDescription:@"asynchronous request"];
d81f6d00c343633159fc5ea08599d145135612c0ludovicp
d81f6d00c343633159fc5ea08599d145135612c0ludovicp [FRAMessageUtils respondWithEndpoint:url
d81f6d00c343633159fc5ea08599d145135612c0ludovicp base64Secret:base64Secret
d81f6d00c343633159fc5ea08599d145135612c0ludovicp messageId:messageId
d81f6d00c343633159fc5ea08599d145135612c0ludovicp loadBalancerCookieData:@"amlbcookie=03"
d81f6d00c343633159fc5ea08599d145135612c0ludovicp data:@{@"some":@"data"}
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant protocol:[FRAMockURLProtocol class]
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant handler:^(NSInteger statusCode, NSError *error) {
2cacab200fb387e290386593d9b2fca2e7beef33csovant NSURLRequest *request = [FRAMockURLProtocol getRequest];
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant XCTAssertEqualObjects([request valueForHTTPHeaderField:@"Content-Type"], @"application/json");
2cacab200fb387e290386593d9b2fca2e7beef33csovant [expectation fulfill];
2cacab200fb387e290386593d9b2fca2e7beef33csovant }];
2cacab200fb387e290386593d9b2fca2e7beef33csovant
2cacab200fb387e290386593d9b2fca2e7beef33csovant [self waitForExpectationsWithTimeout:testTimeout handler:nil];
2cacab200fb387e290386593d9b2fca2e7beef33csovant}
2cacab200fb387e290386593d9b2fca2e7beef33csovant
2cacab200fb387e290386593d9b2fca2e7beef33csovant-(void)testDecodeJWTMessage {
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant NSString* altertJwt = @"eyAidHlwIjogIkpXVCIsICJhbGciOiAiSFMyNTYiIH0.eyAiYyI6ICJKZVlTTXlLdW9QbldmRHVXaU1GVGlENlc2WTNQOWVYTVBYUDljNUEvSEJNPSIsICJ0IjogIjEyMCIsICJ1IjogIjMiLCAibCI6ICJZVzFzWW1OdmIydHBaVDFoYld4aVkyOXZhMmxsUFRBeCIgfQ.1SAWJlT-5vjYRbpZ_57K-NpFRs4VZbSzZjAF_3RTu7k";
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant NSDictionary* dictionary = [FRAMessageUtils extractJTWBodyFromString:altertJwt error:nil];
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant XCTAssertEqualObjects([dictionary valueForKey:@"c"], @"JeYSMyKuoPnWfDuWiMFTiD6W6Y3P9eXMPXP9c5A/HBM=");
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant XCTAssertEqualObjects([dictionary valueForKey:@"l"], @"YW1sYmNvb2tpZT1hbWxiY29va2llPTAx");
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant XCTAssertEqualObjects([dictionary valueForKey:@"t"], @"120");
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant XCTAssertEqualObjects([dictionary valueForKey:@"u"], @"3");
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant}
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant
2cacab200fb387e290386593d9b2fca2e7beef33csovant- (void)testIncludesLoadBalancerCookie {
2cacab200fb387e290386593d9b2fca2e7beef33csovant XCTestExpectation *expectation = [self expectationWithDescription:@"request with cookie"];
2cacab200fb387e290386593d9b2fca2e7beef33csovant
2cacab200fb387e290386593d9b2fca2e7beef33csovant [FRAMessageUtils respondWithEndpoint:url
07437026ccf420c104734aa780e9bdf71117f650gary.williams base64Secret:base64Secret
2cacab200fb387e290386593d9b2fca2e7beef33csovant messageId:messageId
2cacab200fb387e290386593d9b2fca2e7beef33csovant loadBalancerCookieData:@"amlbcookie=03"
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp data:@{@"some":@"data"}
2cacab200fb387e290386593d9b2fca2e7beef33csovant protocol:[FRAMockURLProtocol class]
f5aaa49dba43db0e99f06476534a8749820515dbcsovant handler:^(NSInteger statusCode, NSError *error) {
2cacab200fb387e290386593d9b2fca2e7beef33csovant NSURLRequest *request = [FRAMockURLProtocol getRequest];
2cacab200fb387e290386593d9b2fca2e7beef33csovant
2cacab200fb387e290386593d9b2fca2e7beef33csovant NSArray *cookies =[[NSArray alloc]init];
2cacab200fb387e290386593d9b2fca2e7beef33csovant cookies = [NSHTTPCookie
2cacab200fb387e290386593d9b2fca2e7beef33csovant cookiesWithResponseHeaderFields:[request allHTTPHeaderFields]
f5aaa49dba43db0e99f06476534a8749820515dbcsovant forURL:[NSURL URLWithString:@""]];
2cacab200fb387e290386593d9b2fca2e7beef33csovant NSHTTPCookie *actualCookie = cookies.firstObject;
f5aaa49dba43db0e99f06476534a8749820515dbcsovant
2cacab200fb387e290386593d9b2fca2e7beef33csovant XCTAssertTrue([@"amlbcookie" isEqualToString:actualCookie.name]);
2cacab200fb387e290386593d9b2fca2e7beef33csovant XCTAssertTrue([@"03" isEqualToString:actualCookie.value]);
2cacab200fb387e290386593d9b2fca2e7beef33csovant
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp [expectation fulfill];
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant }];
6031e9c7eb72435516a6828deb2e97533ed0382dludovicp
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant [self waitForExpectationsWithTimeout:testTimeout handler:nil];
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant}
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant@end
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant
23f633e1b8cc53fdac740eca4ab7e0341890bba2csovant