Splitting up the live tests. A moo.
[catagits/Catalyst-Authentication-Credential-OpenID.git] / t / live-app.t
CommitLineData
19439725 1#!/usr/bin/env perl
e5b6823d 2use strict;
3use warnings;
4
5use FindBin;
6use IO::Socket;
7use Test::More;
8use Test::WWW::Mechanize;
9
19439725 10plan skip_all => 'set TEST_HTTP to enable this test' unless $ENV{TEST_HTTP};
e5b6823d 11eval "use Catalyst::Devel 1.0";
12plan skip_all => 'Catalyst::Devel required' if $@;
13
19439725 14plan "no_plan";
15# plan tests => 17;
e5b6823d 16
19439725 17# One port for consumer app, one for provider.
18my $consumer_port = 10000 + int rand(1 + 10000);
19my $provider_port = $consumer_port;
20$provider_port = 10000 + int rand(1 + 10000) until $consumer_port != $provider_port;
21
22my $provider_pipe = "perl -I$FindBin::Bin/../lib -I$FindBin::Bin/Provider/lib $FindBin::Bin/Provider/script/testapp_server.pl -p $consumer_port |";
e5b6823d 23
19439725 24my $consumer_pipe = "perl -I$FindBin::Bin/../lib -I$FindBin::Bin/Consumer/lib $FindBin::Bin/Consumer/script/testapp_server.pl -p $provider_port |";
e5b6823d 25
19439725 26my $provider_pid = open my $provider, $provider_pipe
27 or die "Unable to spawn standalone HTTP server for Provider: $!";
e5b6823d 28
19439725 29diag("Started Provider with pid $provider_pid");
e5b6823d 30
19439725 31my $consumer_pid = open my $consumer, $consumer_pipe
32 or die "Unable to spawn standalone HTTP server for Consumer: $!";
e5b6823d 33
19439725 34diag("Started Consumer with pid $consumer_pid");
35
36# How long to wait for test server to start and timeout for UA.
37my $seconds = 15;
38
39
40diag("Waiting (up to $seconds seconds) for application servers to start...");
e5b6823d 41
42eval {
19439725 43 local $SIG{ALRM} = sub { die "Servers took too long to start\n" }; # NB: \n required
e5b6823d 44 alarm($seconds);
19439725 45 sleep 1 while check_port( 'localhost', $provider_port ) != 1;
46 sleep 1 while check_port( 'localhost', $consumer_port ) != 1;
e5b6823d 47 alarm(0)
48};
49
50if ( $@ )
51{
19439725 52 shut_down();
53 die "Could not run test: $@";
e5b6823d 54}
e5b6823d 55
19439725 56my $root = $ENV{CATALYST_SERVER} = "http://localhost:$consumer_port";
57my $openid_server = "http://localhost:$provider_port";
e5b6823d 58
19439725 59# Tests start --------------------------------------------
60diag("Started...") if $ENV{TEST_VERBOSE};
e5b6823d 61
62my $mech = Test::WWW::Mechanize->new(timeout => $seconds);
63
64$mech->get_ok($root, "GET $root");
65$mech->content_contains("not signed in", "Content looks right");
66
19439725 67$mech->get_ok("$openid_server/login", "GET $root/login");
e5b6823d 68
69# diag($mech->content);
70
71$mech->submit_form_ok({ form_name => "login",
72 fields => { username => "paco",
73 password => "l4s4v3n7ur45",
74 },
75 },
76 "Trying cleartext login, 'memebers' realm");
77
78$mech->content_contains("signed in", "Signed in successfully");
79
80$mech->get_ok("$root/signin_openid", "GET $root/signin_openid");
81
82$mech->content_contains("Sign in with OpenID", "Content looks right");
83
19439725 84my $claimed_uri = "$openid_server/provider/paco";
e5b6823d 85
86$mech->submit_form_ok({ form_name => "openid",
87 fields => { openid_identifier => $claimed_uri,
88 },
89 },
90 "Trying OpenID login, 'openid' realm");
91
92$mech->content_contains("You did it with OpenID!",
93 "Successfully signed in with OpenID");
94
95$mech->get_ok($root, "GET $root");
96
19439725 97$mech->content_contains("provider/paco", "OpenID info is in the user");
e5b6823d 98
99# can't be verified
100
101$mech->get_ok("$root/logout", "GET $root/logout");
102
103$mech->get_ok("$root/signin_openid", "GET $root/signin_openid");
104
105$mech->content_contains("Sign in with OpenID", "Content looks right");
106
107$mech->submit_form_ok({ form_name => "openid",
108 fields => { openid_identifier => $claimed_uri,
109 },
110 },
111 "Trying OpenID login, 'openid' realm");
112
113$mech->content_contains("can't be verified",
114 "Proper failure for unauthenticated memember.");
115
19439725 116shut_down();
e5b6823d 117
118exit 0;
119
19439725 120# Tests end ----------------------------------------------
121
122sub shut_down {
123 kill INT => $provider_pid, $consumer_pid;
124 close $provider;
125 close $consumer;
126}
127
e5b6823d 128sub check_port {
129 my ( $host, $port ) = @_;
130
131 my $remote = IO::Socket::INET->new(
132 Proto => "tcp",
133 PeerAddr => $host,
134 PeerPort => $port
135 );
136 if ($remote) {
137 close $remote;
138 return 1;
139 }
140 else {
141 return 0;
142 }
143}
144
145__END__
146