need to untaint the command line
[freeside.git] / test / cgi-test
1 #!/usr/bin/perl -Tw
2 #
3 # $Id: cgi-test,v 1.2 1999-08-23 12:26:37 ivan Exp $
4 #
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.)
13 #
14 # $Log: cgi-test,v $
15 # Revision 1.2  1999-08-23 12:26:37  ivan
16 # need to untaint the command line
17 #
18 # Revision 1.1  1999/04/08 13:05:40  ivan
19 # web interface tester / sample data creator
20 #
21
22 use strict;
23 #use diagnostics;
24 use subs qw( big_ugly_data_structure );
25 use CGI;
26 use LWP::UserAgent;
27
28 my ( $base_url, $username, $password ) = ( shift, shift, shift );
29 #trust 'em
30 $base_url =~ /^(.*)$/; $base_url = $1;
31 $username =~ /^(.*)$/; $username = $1;
32 $password =~ /^(.*)$/; $password = $1;
33
34 my @data = &big_ugly_data_structure;
35
36 my $ua = new LWP::UserAgent;
37 {
38   local $^W = 0;
39   eval '
40     sub LWP::UserAgent::get_basic_credentials {
41       #my $self = shift;
42       ( $username, $password );
43     }
44   ';
45 }
46
47 my $data;
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".
56            "URL: $full_url\n".
57            "To: ". $response->base. "\n"
58     ;
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";
65     } else {
66       die "Strange, regular response, but unexpected base!\n".
67         "URL: $full_url\n".
68         "Base    : ". $response->base. "\n".
69         "Expected: $base_url$expected_location\n".
70         "Output: ". $response->content. "\n"
71       ;
72     }
73   } elsif ( $response->is_error ) {
74     die "Strange, I got an error\n".
75         "URL: $full_url\n".
76         "Error: ". $response->error_as_HTML. "\n".
77         "Output: ". $response->content. "\n"
78     ;
79   } elsif ( $response->is_info ) {
80     die "Strange, I got an info reponse\n".
81         "URL: $full_url\n".
82         "Output: ". $response->content. "\n"
83     ;
84   } else {
85     die "Really strange, got an unrecognized response from LWP::UserAgent!\n";
86   }
87 }
88
89 #---
90
91 sub big_ugly_data_structure {
92
93   (
94     { 'url'      => 'edit/process/part_svc.cgi',
95       'params'   => {
96                       'svcpart' => '',
97                       'svc'     => 'Shell',
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' => '',
127                     },
128       'location' => 'browse/part_svc.cgi',
129     },
130     { 'url'      => 'edit/process/part_svc.cgi',
131       'params'   => {
132                       'svcpart' => '',
133                       'svc'     => 'SLIP/PPP',
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' => '',
163                     },
164       'location' => 'browse/part_svc.cgi',
165     },
166     { 'url'      => 'edit/process/part_svc.cgi',
167       'params'   => {
168                       'svcpart' => '',
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' => '',
199                     },
200       'location' => 'browse/part_svc.cgi',
201     },
202     { 'url'      => 'edit/process/part_svc.cgi',
203       'params'   => {
204                       'svcpart' => '',
205                       'svc'     => 'Domain',
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' => '',
235                     },
236       'location' => 'browse/part_svc.cgi',
237     },
238     { 'url'      => 'edit/process/part_svc.cgi',
239       'params'   => {
240                       'svcpart' => '',
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' => '',
271                     },
272       'location' => 'browse/part_svc.cgi',
273     },
274
275     { 'url'      => 'edit/process/part_pkg.cgi',
276       'params'   => {
277                       'pkgpart' => '',
278                       'pkg' => 'Personal SLIP/PPP',
279                       'comment' => '$30/setup, $19.99/month',
280                       'setup' => '30',
281                       'recur' => '19.99',
282                       'freq' => '1',
283                       'pkg_svc1' => '0',
284                       'pkg_svc2' => '1',
285                       'pkg_svc3' => '0',
286                       'pkg_svc4' => '0',
287                       'pkg_svc5' => '0',
288                     },
289       'location' => 'browse/part_pkg.cgi',
290     },
291     { 'url'      => 'edit/process/part_pkg.cgi',
292       'params'   => {
293                       'pkgpart' => '',
294                       'pkg' => 'Personal SLIP/PPP',
295                       'comment' => '$0/setup, $179.88/year',
296                       'setup' => '0',
297                       'recur' => '179.88',
298                       'freq' => '12',
299                       'pkg_svc1' => '0',
300                       'pkg_svc2' => '1',
301                       'pkg_svc3' => '0',
302                       'pkg_svc4' => '0',
303                       'pkg_svc5' => '0',
304                     },
305       'location' => 'browse/part_pkg.cgi',
306     },
307     { 'url'      => 'edit/process/part_pkg.cgi',
308       'params'   => {
309                       'pkgpart' => '',
310                       'pkg' => 'Personal POP mailbox',
311                       'comment' => '$10/setup, $5/month',
312                       'setup' => '10',
313                       'recur' => '5',
314                       'freq' => '1',
315                       'pkg_svc1' => '0',
316                       'pkg_svc2' => '0',
317                       'pkg_svc3' => '1',
318                       'pkg_svc4' => '0',
319                       'pkg_svc5' => '0',
320                     },
321       'location' => 'browse/part_pkg.cgi',
322     },
323     { 'url'      => 'edit/process/part_pkg.cgi',
324       'params'   => {
325                       'pkgpart' => '',
326                       'pkg' => 'Business SLIP/PPP',
327                       'comment' => '$30/setup, $29.99/month',
328                       'setup' => '30',
329                       'recur' => '29.99',
330                       'freq' => '1',
331                       'pkg_svc1' => '0',
332                       'pkg_svc2' => '1',
333                       'pkg_svc3' => '0',
334                       'pkg_svc4' => '1',
335                       'pkg_svc5' => '1',
336                     },
337       'location' => 'browse/part_pkg.cgi',
338     },
339     { 'url'      => 'edit/process/part_pkg.cgi',
340       'params'   => {
341                       'pkgpart' => '',
342                       'pkg' => 'Business SLIP/PPP',
343                       'comment' => '$0/setup, $299.88/year',
344                       'setup' => '0',
345                       'recur' => '299.88',
346                       'freq' => '12',
347                       'pkg_svc1' => '0',
348                       'pkg_svc2' => '1',
349                       'pkg_svc3' => '0',
350                       'pkg_svc4' => '1',
351                       'pkg_svc5' => '1',
352                     },
353       'location' => 'browse/part_pkg.cgi',
354     },
355     { 'url'      => 'edit/process/part_pkg.cgi',
356       'params'   => {
357                       'pkgpart' => '',
358                       'pkg' => 'Business POP mailbox',
359                       'comment' => '$10/setup, $5/month',
360                       'setup' => '10',
361                       'recur' => '5',
362                       'freq' => '1',
363                       'pkg_svc1' => '0',
364                       'pkg_svc2' => '0',
365                       'pkg_svc3' => '1',
366                       'pkg_svc4' => '0',
367                       'pkg_svc5' => '1',
368                     },
369       'location' => 'browse/part_pkg.cgi',
370     },
371     { 'url'      => 'edit/process/part_pkg.cgi',
372       'params'   => {
373                       'pkgpart' => '',
374                       'pkg' => 'UNIX shell',
375                       'comment' => '$20/setup, $9.99/month',
376                       'setup' => '20',
377                       'recur' => '9.99',
378                       'freq' => '1',
379                       'pkg_svc1' => '1',
380                       'pkg_svc2' => '0',
381                       'pkg_svc3' => '0',
382                       'pkg_svc4' => '0',
383                       'pkg_svc5' => '0',
384                     },
385       'location' => 'browse/part_pkg.cgi',
386     },
387     { 'url'      => 'edit/process/part_pkg.cgi',
388       'params'   => {
389                       'pkgpart' => '',
390                       'pkg' => 'Point-to-point T1',
391                       'comment' => '$1000/setup, $1000/month',
392                       'setup' => '1000',
393                       'recur' => '1000',
394                       'freq' => '1',
395                       'pkg_svc1' => '0',
396                       'pkg_svc2' => '0',
397                       'pkg_svc3' => '5',
398                       'pkg_svc4' => '1',
399                       'pkg_svc5' => '5',
400                     },
401       'location' => 'browse/part_pkg.cgi',
402     },
403     { 'url'      => 'edit/process/part_pkg.cgi',
404       'params'   => {
405                       'pkgpart' => '',
406                       'pkg' => 'Cisco 2501 Router',
407                       'comment' => '$2500',
408                       'setup' => '2500',
409                       'recur' => '0',
410                       'freq' => '0',
411                       'pkg_svc1' => '0',
412                       'pkg_svc2' => '0',
413                       'pkg_svc3' => '0',
414                       'pkg_svc4' => '0',
415                       'pkg_svc5' => '0',
416                     },
417       'location' => 'browse/part_pkg.cgi',
418     },
419
420     { 'url'      => 'edit/process/agent_type.cgi',
421       'params'   => {
422                       'typenum' => '',
423                       'atype' => 'Internal Sales',
424                       'pkgpart1' => 'ON',
425                       'pkgpart2' => 'ON',
426                       'pkgpart3' => 'ON',
427                       'pkgpart4' => 'ON',
428                       'pkgpart5' => 'ON',
429                       'pkgpart6' => 'ON',
430                       'pkgpart7' => 'ON',
431                       'pkgpart8' => 'ON',
432                       'pkgpart9' => 'ON',
433                     },
434       'location' => 'browse/agent_type.cgi',
435     },
436
437     { 'url'      => 'edit/process/agent.cgi',
438       'params'   => {
439                       'agentnum' => '',
440                       'agent' => 'Internal Sales',
441                       'typenum' => '1',
442                       'freq' => '',
443                       'prog' => '',
444                     },
445       'location' => 'browse/agent.cgi',
446     },
447
448     { 'url'      => 'edit/process/part_referral.cgi',
449       'params'   => {
450                       'refnum' => '',
451                       'referral' => 'Another customer',
452                     },
453       'location' => 'browse/part_referral.cgi',
454     },
455     { 'url'      => 'edit/process/part_referral.cgi',
456       'params'   => {
457                       'refnum' => '',
458                       'referral' => 'Newspaper ad',
459                     },
460       'location' => 'browse/part_referral.cgi',
461     },
462
463     { 'url'      => 'edit/process/svc_acct_pop.cgi',
464       'params'   => {
465                       'popnum' => '',
466                       'city' => 'Line Lexington',
467                       'state' => 'PA',
468                       'ac' => '215',
469                       'exch' => '996',
470                     },
471       'location' => 'browse/svc_acct_pop.cgi',
472     },
473     { 'url'      => 'edit/process/svc_acct_pop.cgi',
474       'params'   => {
475                       'popnum' => '',
476                       'city' => 'Oakland',
477                       'state' => 'CA',
478                       'ac' => '510',
479                       'exch' => '208',
480                     },
481       'location' => 'browse/svc_acct_pop.cgi',
482     },
483
484     { 'url'      => 'edit/process/cust_main.cgi',
485       'params'   => {
486                       'custnum' => '',
487                       'agentnum' => '1',
488                       'refnum' => '1',
489                       'last' => 'Hogan',
490                       'first' => 'Shawn D.',
491                       'ss' => '',
492                       'company' => 'Digital Point Solutions',
493                       'address1' => '3570 Tony Drive',
494                       'address2' => '',
495                       'city' => 'San Diego',
496                       'state' => 'CA / US',
497                       'zip' => '92122-2307',
498                       'daytime' => '',
499                       'night' => '',
500                       'fax' => '',
501                       'tax' => '',
502                       'invoicing_list_POST' => '',
503                       'invoicing_list' => '',
504                       'payby' => 'BILL',
505                       'CARD_payinfo' => '',
506                       'CARD_month' => '1',
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' => '',
514                       'COMP_month' => '1',
515                       'COMP_year' => '1999',
516                       'pkgpart_svcpart' => '1_2',
517                       'username' => 'cyborg',
518                       '_password' => '',
519                       'popnum' => '1',
520                       'otaker' => 'example',
521                     },
522       'location' => 'view/cust_main.cgi?1',
523     },
524     { 'url'      => 'edit/process/cust_main.cgi',
525       'params'   => {
526                       'custnum' => '',
527                       'agentnum' => '1',
528                       'refnum' => '2',
529                       'last' => 'Ford',
530                       'first' => 'Bill',
531                       'ss' => '',
532                       'company' => 'Boardtown Corporation',
533                       'address1' => '116 East Main Street',
534                       'address2' => '',
535                       'city' => 'Starkville',
536                       'state' => 'MS / US',
537                       'zip' => '39759',
538                       'daytime' => '',
539                       'night' => '',
540                       'fax' => '',
541                       'tax' => '',
542                       'invoicing_list_POST' => '',
543                       'invoicing_list' => '',
544                       'payby' => 'BILL',
545                       'CARD_payinfo' => '',
546                       'CARD_month' => '1',
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' => '',
554                       'COMP_month' => '1',
555                       'COMP_year' => '1999',
556                       'pkgpart_svcpart' => '3_3',
557                       'username' => 'billf',
558                       '_password' => '',
559                       'popnum' => '',
560                       'otaker' => 'example',
561                     },
562       'location' => 'view/cust_main.cgi?2',
563     },
564
565            
566   );
567 }
568