3 # $Id: cgi-test,v 1.2 1999-08-23 12:26:37 ivan Exp $
5 # This is the beginning of a test suite for the web interface.
6 # It's also excellent for populating your database with some meaningful test
7 # data. (a derivative is used by the web demo)
8 # It only works on an empty database (probably need empty counters too, and
9 # no arbirary RADIUS attributes).
10 # Usage: cgi-test http://base.freeside.url/with/path/ username password
11 # (Yes, if you were properly paranoid and are using SSL, you'll need to get
12 # libwww-perl working with SSL to use this.)
15 # Revision 1.2 1999-08-23 12:26:37 ivan
16 # need to untaint the command line
18 # Revision 1.1 1999/04/08 13:05:40 ivan
19 # web interface tester / sample data creator
24 use subs qw( big_ugly_data_structure );
28 my ( $base_url, $username, $password ) = ( shift, shift, shift );
30 $base_url =~ /^(.*)$/; $base_url = $1;
31 $username =~ /^(.*)$/; $username = $1;
32 $password =~ /^(.*)$/; $password = $1;
34 my @data = &big_ugly_data_structure;
36 my $ua = new LWP::UserAgent;
40 sub LWP::UserAgent::get_basic_credentials {
42 ( $username, $password );
48 while ( $data = shift @data ) {
49 my $cgi = new CGI ( $data->{'params'} );
50 my $full_url = $base_url. $data->{'url'}. '?'. $cgi->query_string;
51 #my $request = new HTTP::Request( 'POST', $full_url );
52 my $request = new HTTP::Request( 'GET', $full_url );
53 my $response = $ua->request( $request );
54 if ( $response->is_redirect ) {
55 die "Unexpected redirect!\n".
57 "To: ". $response->base. "\n"
59 } elsif ( $response->is_success ) {
60 my $location = $response->base;
61 my $expected_location = $data->{'location'};
62 #if ( $location =~ /^$base_url$expected_location$/ ) {
63 if ( $location eq $base_url. $expected_location ) {
64 #warn "cool, got expected response $location from $full_url\n";
66 die "Strange, regular response, but unexpected base!\n".
68 "Base : ". $response->base. "\n".
69 "Expected: $base_url$expected_location\n".
70 "Output: ". $response->content. "\n"
73 } elsif ( $response->is_error ) {
74 die "Strange, I got an error\n".
76 "Error: ". $response->error_as_HTML. "\n".
77 "Output: ". $response->content. "\n"
79 } elsif ( $response->is_info ) {
80 die "Strange, I got an info reponse\n".
82 "Output: ". $response->content. "\n"
85 die "Really strange, got an unrecognized response from LWP::UserAgent!\n";
91 sub big_ugly_data_structure {
94 { 'url' => 'edit/process/part_svc.cgi',
98 'svcdb' => 'svc_acct',
99 'svc_acct__popnum_flag' => '',
100 'svc_acct__popnum' => '',
101 'svc_acct__dir_flag' => '',
102 'svc_acct__dir' => '',
103 'svc_acct__username_flag' => '',
104 'svc_acct__username' => '',
105 'svc_acct__uid_flag' => '',
106 'svc_acct__uid' => '',
107 'svc_acct__quota_flag' => 'F',
108 'svc_acct__quota' => '10',
109 'svc_acct__slipip_flag' => 'F',
110 'svc_acct__slipip' => '',
111 'svc_acct___password_flag' => '',
112 'svc_acct___password' => '',
113 'svc_acct__gid_flag' => '',
114 'svc_acct__gid' => '',
115 'svc_acct__shell_flag' => 'D',
116 'svc_acct__shell' => '/bin/sh',
117 'svc_acct__finger_flag' => '',
118 'svc_acct__finger' => '',
119 'svc_domain__domain_flag' => '',
120 'svc_domain__domain' => '',
121 'svc_acct_sm__domuser_flag' => '',
122 'svc_acct_sm__domuser' => '',
123 'svc_acct_sm__domuid_flag' => '',
124 'svc_acct_sm__domuid' => '',
125 'svc_acct_sm__domsvc_flag' => '',
126 'svc_acct_sm__domsvc' => '',
128 'location' => 'browse/part_svc.cgi',
130 { 'url' => 'edit/process/part_svc.cgi',
134 'svcdb' => 'svc_acct',
135 'svc_acct__popnum_flag' => '',
136 'svc_acct__popnum' => '',
137 'svc_acct__dir_flag' => '',
138 'svc_acct__dir' => '',
139 'svc_acct__username_flag' => '',
140 'svc_acct__username' => '',
141 'svc_acct__uid_flag' => '',
142 'svc_acct__uid' => '',
143 'svc_acct__quota_flag' => 'F',
144 'svc_acct__quota' => '10',
145 'svc_acct__slipip_flag' => 'D',
146 'svc_acct__slipip' => '0.0.0.0',
147 'svc_acct___password_flag' => '',
148 'svc_acct___password' => '',
149 'svc_acct__gid_flag' => '',
150 'svc_acct__gid' => '',
151 'svc_acct__shell_flag' => 'D',
152 'svc_acct__shell' => '/bin/sh',
153 'svc_acct__finger_flag' => '',
154 'svc_acct__finger' => '',
155 'svc_domain__domain_flag' => '',
156 'svc_domain__domain' => '',
157 'svc_acct_sm__domuser_flag' => '',
158 'svc_acct_sm__domuser' => '',
159 'svc_acct_sm__domuid_flag' => '',
160 'svc_acct_sm__domuid' => '',
161 'svc_acct_sm__domsvc_flag' => '',
162 'svc_acct_sm__domsvc' => '',
164 'location' => 'browse/part_svc.cgi',
166 { 'url' => 'edit/process/part_svc.cgi',
169 'svc' => 'POP Mailbox',
170 'svcdb' => 'svc_acct',,
171 'svc_acct__popnum_flag' => 'F',
172 'svc_acct__popnum' => '',
173 'svc_acct__dir_flag' => '',
174 'svc_acct__dir' => '',
175 'svc_acct__username_flag' => '',
176 'svc_acct__username' => '',
177 'svc_acct__uid_flag' => '',
178 'svc_acct__uid' => '',
179 'svc_acct__quota_flag' => 'F',
180 'svc_acct__quota' => '10',
181 'svc_acct__slipip_flag' => 'F',
182 'svc_acct__slipip' => '',
183 'svc_acct___password_flag' => '',
184 'svc_acct___password' => '',
185 'svc_acct__gid_flag' => '',
186 'svc_acct__gid' => '',
187 'svc_acct__shell_flag' => 'F',
188 'svc_acct__shell' => '/bin/passwd',
189 'svc_acct__finger_flag' => '',
190 'svc_acct__finger' => '',
191 'svc_domain__domain_flag' => '',
192 'svc_domain__domain' => '',
193 'svc_acct_sm__domuser_flag' => '',
194 'svc_acct_sm__domuser' => '',
195 'svc_acct_sm__domuid_flag' => '',
196 'svc_acct_sm__domuid' => '',
197 'svc_acct_sm__domsvc_flag' => '',
198 'svc_acct_sm__domsvc' => '',
200 'location' => 'browse/part_svc.cgi',
202 { 'url' => 'edit/process/part_svc.cgi',
206 'svcdb' => 'svc_domain',,
207 'svc_acct__popnum_flag' => '',
208 'svc_acct__popnum' => '',
209 'svc_acct__dir_flag' => '',
210 'svc_acct__dir' => '',
211 'svc_acct__username_flag' => '',
212 'svc_acct__username' => '',
213 'svc_acct__uid_flag' => '',
214 'svc_acct__uid' => '',
215 'svc_acct__quota_flag' => '',
216 'svc_acct__quota' => '',
217 'svc_acct__slipip_flag' => '',
218 'svc_acct__slipip' => '',
219 'svc_acct___password_flag' => '',
220 'svc_acct___password' => '',
221 'svc_acct__gid_flag' => '',
222 'svc_acct__gid' => '',
223 'svc_acct__shell_flag' => '',
224 'svc_acct__shell' => '',
225 'svc_acct__finger_flag' => '',
226 'svc_acct__finger' => '',
227 'svc_domain__domain_flag' => '',
228 'svc_domain__domain' => '',
229 'svc_acct_sm__domuser_flag' => '',
230 'svc_acct_sm__domuser' => '',
231 'svc_acct_sm__domuid_flag' => '',
232 'svc_acct_sm__domuid' => '',
233 'svc_acct_sm__domsvc_flag' => '',
234 'svc_acct_sm__domsvc' => '',
236 'location' => 'browse/part_svc.cgi',
238 { 'url' => 'edit/process/part_svc.cgi',
241 'svc' => 'Domain email alias',
242 'svcdb' => 'svc_acct_sm',,
243 'svc_acct__popnum_flag' => '',
244 'svc_acct__popnum' => '',
245 'svc_acct__dir_flag' => '',
246 'svc_acct__dir' => '',
247 'svc_acct__username_flag' => '',
248 'svc_acct__username' => '',
249 'svc_acct__uid_flag' => '',
250 'svc_acct__uid' => '',
251 'svc_acct__quota_flag' => '',
252 'svc_acct__quota' => '',
253 'svc_acct__slipip_flag' => '',
254 'svc_acct__slipip' => '',
255 'svc_acct___password_flag' => '',
256 'svc_acct___password' => '',
257 'svc_acct__gid_flag' => '',
258 'svc_acct__gid' => '',
259 'svc_acct__shell_flag' => '',
260 'svc_acct__shell' => '',
261 'svc_acct__finger_flag' => '',
262 'svc_acct__finger' => '',
263 'svc_domain__domain_flag' => '',
264 'svc_domain__domain' => '',
265 'svc_acct_sm__domuser_flag' => '',
266 'svc_acct_sm__domuser' => '',
267 'svc_acct_sm__domuid_flag' => '',
268 'svc_acct_sm__domuid' => '',
269 'svc_acct_sm__domsvc_flag' => '',
270 'svc_acct_sm__domsvc' => '',
272 'location' => 'browse/part_svc.cgi',
275 { 'url' => 'edit/process/part_pkg.cgi',
278 'pkg' => 'Personal SLIP/PPP',
279 'comment' => '$30/setup, $19.99/month',
289 'location' => 'browse/part_pkg.cgi',
291 { 'url' => 'edit/process/part_pkg.cgi',
294 'pkg' => 'Personal SLIP/PPP',
295 'comment' => '$0/setup, $179.88/year',
305 'location' => 'browse/part_pkg.cgi',
307 { 'url' => 'edit/process/part_pkg.cgi',
310 'pkg' => 'Personal POP mailbox',
311 'comment' => '$10/setup, $5/month',
321 'location' => 'browse/part_pkg.cgi',
323 { 'url' => 'edit/process/part_pkg.cgi',
326 'pkg' => 'Business SLIP/PPP',
327 'comment' => '$30/setup, $29.99/month',
337 'location' => 'browse/part_pkg.cgi',
339 { 'url' => 'edit/process/part_pkg.cgi',
342 'pkg' => 'Business SLIP/PPP',
343 'comment' => '$0/setup, $299.88/year',
353 'location' => 'browse/part_pkg.cgi',
355 { 'url' => 'edit/process/part_pkg.cgi',
358 'pkg' => 'Business POP mailbox',
359 'comment' => '$10/setup, $5/month',
369 'location' => 'browse/part_pkg.cgi',
371 { 'url' => 'edit/process/part_pkg.cgi',
374 'pkg' => 'UNIX shell',
375 'comment' => '$20/setup, $9.99/month',
385 'location' => 'browse/part_pkg.cgi',
387 { 'url' => 'edit/process/part_pkg.cgi',
390 'pkg' => 'Point-to-point T1',
391 'comment' => '$1000/setup, $1000/month',
401 'location' => 'browse/part_pkg.cgi',
403 { 'url' => 'edit/process/part_pkg.cgi',
406 'pkg' => 'Cisco 2501 Router',
407 'comment' => '$2500',
417 'location' => 'browse/part_pkg.cgi',
420 { 'url' => 'edit/process/agent_type.cgi',
423 'atype' => 'Internal Sales',
434 'location' => 'browse/agent_type.cgi',
437 { 'url' => 'edit/process/agent.cgi',
440 'agent' => 'Internal Sales',
445 'location' => 'browse/agent.cgi',
448 { 'url' => 'edit/process/part_referral.cgi',
451 'referral' => 'Another customer',
453 'location' => 'browse/part_referral.cgi',
455 { 'url' => 'edit/process/part_referral.cgi',
458 'referral' => 'Newspaper ad',
460 'location' => 'browse/part_referral.cgi',
463 { 'url' => 'edit/process/svc_acct_pop.cgi',
466 'city' => 'Line Lexington',
471 'location' => 'browse/svc_acct_pop.cgi',
473 { 'url' => 'edit/process/svc_acct_pop.cgi',
481 'location' => 'browse/svc_acct_pop.cgi',
484 { 'url' => 'edit/process/cust_main.cgi',
490 'first' => 'Shawn D.',
492 'company' => 'Digital Point Solutions',
493 'address1' => '3570 Tony Drive',
495 'city' => 'San Diego',
496 'state' => 'CA / US',
497 'zip' => '92122-2307',
502 'invoicing_list_POST' => '',
503 'invoicing_list' => '',
505 'CARD_payinfo' => '',
507 'CARD_year' => '1999',
508 'CARD_payname' => '',
509 'BILL_payinfo' => '',
510 'BILL_month' => '12',
511 'BILL_year' => '2037',
512 'BILL_payname' => 'Accounts Payable',
513 'COMP_payinfo' => '',
515 'COMP_year' => '1999',
516 'pkgpart_svcpart' => '1_2',
517 'username' => 'cyborg',
520 'otaker' => 'example',
522 'location' => 'view/cust_main.cgi?1',
524 { 'url' => 'edit/process/cust_main.cgi',
532 'company' => 'Boardtown Corporation',
533 'address1' => '116 East Main Street',
535 'city' => 'Starkville',
536 'state' => 'MS / US',
542 'invoicing_list_POST' => '',
543 'invoicing_list' => '',
545 'CARD_payinfo' => '',
547 'CARD_year' => '1999',
548 'CARD_payname' => '',
549 'BILL_payinfo' => '',
550 'BILL_month' => '12',
551 'BILL_year' => '2037',
552 'BILL_payname' => 'Accounts Payable',
553 'COMP_payinfo' => '',
555 'COMP_year' => '1999',
556 'pkgpart_svcpart' => '3_3',
557 'username' => 'billf',
560 'otaker' => 'example',
562 'location' => 'view/cust_main.cgi?2',