# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. # # Tests of the Http wrapper library.. # # NOTE: Test server set up does not support content not ending in newline. # use strict; use Test::More; use Yahoo::Vespa::Mocks::HttpServerMock; BEGIN { use_ok( 'Yahoo::Vespa::Http' ); *Http:: = *Yahoo::Vespa::Http:: } require_ok( 'Yahoo::Vespa::Http' ); my $httpTestServerPort = setupTestHttpServer(); ok(defined $httpTestServerPort, "Test server set up"); &testSimpleGet(); &testAdvancedGet(); &testFailingGet(); &testSimplePost(); &testJsonReturnInPost(); done_testing(); exit(0); sub filterRequest { my ($request) = @_; $request =~ s/\r//g; $request =~ s/(Content-Length:\s*)\d+/$1##/g; $request =~ s/(Host: localhost:)\d+/$1##/g; $request =~ s/(?:Connection|TE|Client-[^:]+):[^\n]*\n//g; return $request; } sub testSimpleGet { my %r = Http::get('localhost', $httpTestServerPort, '/foo'); is( $r{'code'}, 200, "Get request code" ); is( $r{'status'}, 'OK', "Get request status" ); my $expected = < 'Bar'); my @uri_param = ("uricrap" => 'special=?&%value', "other" => 'hmm'); my %r = Http::request('GET', 'localhost', $httpTestServerPort, '/foo', \@uri_param, undef, \@headers); is( $r{'code'}, 200, "Get request code" ); is( $r{'status'}, 'OK', "Get request status" ); my $expected = < '501', "status" => 'Works'); my %r = Http::request('GET', 'localhost', $httpTestServerPort, '/foo', \@uri_param); is( $r{'code'}, 501, "Get request code" ); is( $r{'status'}, 'Works', "Get request status" ); my $expected = < 'Rrr' ); my %r = Http::request('POST', 'localhost', $httpTestServerPort, '/foo', \@uri_param, "Some content\n"); is( $r{'code'}, 200, "Get request code" ); is( $r{'status'}, 'OK', "Get request status" ); my $expected = < 'application/json' ); my $json = "{ \"key\" : \"value\" }\n"; my %r = Http::request('POST', 'localhost', $httpTestServerPort, '/foo', \@uri_param, $json); is( $r{'code'}, 200, "Get request code" ); is( $r{'status'}, 'OK', "Get request status" ); my $expected = <