File: 86-redirect.t

package info (click to toggle)
librt-client-rest-perl 1%3A0.60-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 584 kB
  • sloc: perl: 4,345; makefile: 9
file content (94 lines) | stat: -rw-r--r-- 3,021 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!perl
#
use strict;
use warnings;

use Test::More;
use Data::Dumper;
use Error qw(:try);
use IO::Socket;
use RT::Client::REST;
plan tests => 5;

my $server = IO::Socket::INET->new(
    Type => SOCK_STREAM,
    Reuse => 1,
    Listen => 10,
) or die "Could not set up TCP server: $@";

my $port = $server->sockport;

my $pid = fork;
die "cannot fork: $!" unless defined $pid;

if (0 == $pid) {                                    # Child
    {
        my $response =
          "HTTP/1.1 302 Redirect\r\n"                               .
          "Location: http://127.0.0.1:$port\r\n"                                   .
          "Content-Type: text/plain; charset=utf-8\r\n\r\n"   .
          "RT/42foo 200 this is a fake successful response header
header line 1
header line 2

response text";
        my $client = $server->accept;
        $client->write($response);
    }
    {
        my $response =
          "HTTP/1.1 302 Redirect\r\n"                               .
          "Location: http://127.0.0.1:$port\r\n"                                   .
          "Content-Type: text/plain; charset=utf-8\r\n\r\n"   .
          "random string";
        my $client = $server->accept;
        $client->write($response);
    }
    exit;
}


my $rt = RT::Client::REST->new(
                               server => "http://127.0.0.1:$port",
                               timeout => 2,
                               verbose_errors => 1,
                               user_agent_args => {
                                                   agent => 'Secret agent',
                                                   max_redirect => 0,
                                                  },
                              );

is $rt->user_agent->agent, 'Secret agent', "Ua correctly initialized";
is $rt->user_agent->max_redirect, 0, "Ua correctly initialized with max redirect";
ok $rt->verbose_errors, "Verbose errors set";

eval {
    my $res = $rt->_submit("ticket/1", undef, {
                                               user => 'a',
                                               pass => 'b',
                                              });
};
like $@, qr{fetching .*/REST/1.0/ticket/1}, "Double redirect dies meaningfully";

$pid = fork;
die "cannot fork: $!" unless defined $pid;

if (0 == $pid) {                                    # Child
    {
        my $response =
          "HTTP/1.1 200 OK\r\n"                               .
          "Location: http://127.0.0.1:$port\r\n"                                   .
          "Content-Type: text/plain; charset=utf-8\r\n\r\n"   .
          "response text";
        my $client = $server->accept;
        $client->write($response);
    }
    exit;
}
eval {
    my $res = $rt->_submit("ticket/1", undef, {
                                               user => 'a',
                                               pass => 'b',
                                              });
};
like $@, qr{Malformed.*/REST/1.0/ticket/1}, "Random data is reported correctly";