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