Akamai-Open-Client

 view release on metacpan or  search on metacpan

t/0007-signedrequest-extended.t  view on Meta::CPAN

#!perl -T
#
# Original author: Jonathan Landis <jlandis@akamai.com>
# Adopted for Akamai::Open client by Martin Probst <internet+cpan@megamaddin.org>
#

use Test::More;

BEGIN {
    use_ok('Akamai::Open::Request::EdgeGridV1');
    use_ok('Akamai::Open::Client');
    use_ok('URI');
}
require_ok('Akamai::Open::Request::EdgeGridV1');
require_ok('Akamai::Open::Client');
require_ok('URI');


use v5.10;
use JSON;
use Cwd 'abs_path';
use URI;

sub load_testdata {
    my $json_input;
    {
        local ($/, *FH);
        open FH, abs_path($0 .'/../testdata.json') or die "can't open testdata.json";
        $json_input = <FH>;
    }
    return from_json($json_input);
}

sub run_test {
    my ($testdata, $testcase) = @_;
    note("running test: ". $testcase->{testName});
    
    my $client = Akamai::Open::Client->new(
        client_token  => $testdata->{client_token},
        client_secret => $testdata->{client_secret},
        access_token  => $testdata->{access_token}
    );

    my $req = Akamai::Open::Request::EdgeGridV1->new(
        client    => $client,
        timestamp => $testdata->{timestamp},
        nonce     => $testdata->{nonce}
    );

    $req->request->method($testcase->{request}->{method});
    $req->request->uri(URI->new($testdata->{base_url}.$testcase->{request}->{path}));

    if(exists($testcase->{request}->{headers})) {
        my %headers;
        for my $h (@{$testcase->{request}->{headers}}) {
            while (my ($k,$v) = each %$h) {
                $headers{$k} = $v if(grep(/$k/, @{$testdata->{headers_to_sign}}));
            }
        }
        $req->signed_headers(\%headers);
    }

    if(exists($testcase->{request}->{data})) {
        $req->request->content($testcase->{request}->{data});
    }

    my $auth_header = eval {
        $req->sign_request;
        return($req->request->headers->header('authorization'));
    };

    if ($@) {
        my $msg = $@;
        chomp($msg);
        note("The signing process died: $msg");
        is($msg, $testcase->{'failsWithMessage'}, $testcase->{testName});
        return;
    }

    is($auth_header, $testcase->{expectedAuthorization}, $testcase->{testName})
}

my $testdata = load_testdata;
my $numtests = scalar @{$testdata->{tests}};

for my $test (@{$testdata->{tests}}) {
    run_test($testdata, $test);
}

done_testing;

=head1 LICENSE AND COPYRIGHT

Copyright 2014 Akamai Technologies, Inc. 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.
You may obtain a copy of the License at

    L<http://www.apache.org/licenses/LICENSE-2.0>



( run in 1.676 second using v1.01-cache-2.11-cpan-39bf76dae61 )