Commit | Line | Data |
19439725 |
1 | #!/usr/bin/env perl |
e5b6823d |
2 | use strict; |
3 | use warnings; |
4 | |
5 | use FindBin; |
6 | use IO::Socket; |
7 | use Test::More; |
8 | use Test::WWW::Mechanize; |
9 | |
19439725 |
10 | plan skip_all => 'set TEST_HTTP to enable this test' unless $ENV{TEST_HTTP}; |
e5b6823d |
11 | eval "use Catalyst::Devel 1.0"; |
12 | plan skip_all => 'Catalyst::Devel required' if $@; |
13 | |
19439725 |
14 | plan "no_plan"; |
15 | # plan tests => 17; |
e5b6823d |
16 | |
19439725 |
17 | # One port for consumer app, one for provider. |
18 | my $consumer_port = 10000 + int rand(1 + 10000); |
19 | my $provider_port = $consumer_port; |
20 | $provider_port = 10000 + int rand(1 + 10000) until $consumer_port != $provider_port; |
21 | |
22 | my $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 |
24 | my $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 |
26 | my $provider_pid = open my $provider, $provider_pipe |
27 | or die "Unable to spawn standalone HTTP server for Provider: $!"; |
e5b6823d |
28 | |
19439725 |
29 | diag("Started Provider with pid $provider_pid"); |
e5b6823d |
30 | |
19439725 |
31 | my $consumer_pid = open my $consumer, $consumer_pipe |
32 | or die "Unable to spawn standalone HTTP server for Consumer: $!"; |
e5b6823d |
33 | |
19439725 |
34 | diag("Started Consumer with pid $consumer_pid"); |
35 | |
36 | # How long to wait for test server to start and timeout for UA. |
37 | my $seconds = 15; |
38 | |
39 | |
40 | diag("Waiting (up to $seconds seconds) for application servers to start..."); |
e5b6823d |
41 | |
42 | eval { |
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 | |
50 | if ( $@ ) |
51 | { |
19439725 |
52 | shut_down(); |
53 | die "Could not run test: $@"; |
e5b6823d |
54 | } |
e5b6823d |
55 | |
19439725 |
56 | my $root = $ENV{CATALYST_SERVER} = "http://localhost:$consumer_port"; |
57 | my $openid_server = "http://localhost:$provider_port"; |
e5b6823d |
58 | |
19439725 |
59 | # Tests start -------------------------------------------- |
60 | diag("Started...") if $ENV{TEST_VERBOSE}; |
e5b6823d |
61 | |
62 | my $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 |
84 | my $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 |
116 | shut_down(); |
e5b6823d |
117 | |
118 | exit 0; |
119 | |
19439725 |
120 | # Tests end ---------------------------------------------- |
121 | |
122 | sub shut_down { |
123 | kill INT => $provider_pid, $consumer_pid; |
124 | close $provider; |
125 | close $consumer; |
126 | } |
127 | |
e5b6823d |
128 | sub 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 | |