use Test; BEGIN { $| = 1; plan(tests => 10); chdir 't' if -d 't'; } require 'savelogs.pl'; ## -- make Apache configuration files -- ## open CONFIG, ">httpd_test.conf" or die "Could not write config file: $!\n"; print CONFIG <<'_CONF_'; ServerRoot "/" User www Group www ServerAdmin webmaster@example.tld ServerName example.tld DocumentRoot "/usr/local/apache/htdocs" Options FollowSymLinks AllowOverride None ErrorLog /usr/local/apache/logs/error_log LogLevel warn LogFormat "%h %v %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" extended LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent CustomLog /usr/local/apache/logs/access_log combined Include httpd_test2.conf # default virtual hosts SSLDisable RewriteEngine On RewriteOptions inherit SSLEnable RewriteEngine On RewriteOptions inherit ## vaddhost: (foo.com) at 123.45.67.89:80 SSLDisable User joe Group joe ServerName foo.com ServerAlias www.foo.com bar.net www.bar.net ServerAdmin joe@foo.com DocumentRoot /home/joe/www/foo.com Alias /cgi-bin /dev/null Options -ExecCGI CustomLog tmp_logs/joe/foo.com-access_log combined ErrorLog tmp_logs/joe/foo.com-error_log ## vaddhost: (barf.com) at 123.45.67.89:80 SSLDisable User joe Group joe ServerName barf.com ServerAlias www.barf.com ServerAdmin joe@barf.com DocumentRoot /home/joe/www/barf.com Alias /cgi-bin /dev/null Options -ExecCGI CustomLog tmp_logs/joe/barf.com-access_log combined ErrorLog tmp_logs/joe/barf.com-error_log ## vaddhost: (savelogs.org) at 123.45.67.89:80 SSLDisable User joe Group joe ServerName savelogs.org ServerAlias www.savelogs.org ServerAdmin joe@foo.com DocumentRoot /home/joe/www/savelogs.org Alias /cgi-bin /dev/null Options -ExecCGI CustomLog tmp_logs/joe/savelogs.org-access_log combined ErrorLog tmp_logs/joe/savelogs.org-error_log ## vaddhost: (pinemountains.com) at 123.45.67.89:80 SSLDisable User joe Group joe ServerName pinemountains.com ServerAlias www.pinemountains.com pinemountains.org www.pinemountains.org ServerAdmin joe@foo.com DocumentRoot /home/joe/www/pinemountains.com Alias /cgi-bin /dev/null Options -ExecCGI CustomLog tmp_logs/joe/pinemountains.com-access_log combined ErrorLog tmp_logs/joe/pinemountains.com-error_log ## vaddhost: (survey.securesites.com) at 123.45.67.89:443 SSLEnable User jose Group jose ServerName survey.securesites.com ServerAdmin jose@foo.com DocumentRoot /home/jose/www/survey.securesites.com ScriptAlias /cgi-bin/ "/home/jose/www/cgi-bin/" AllowOverride None Options ExecCGI Order allow,deny Allow from all CustomLog tmp_logs/jose/survey.securesites.com-access_log combined ErrorLog tmp_logs/jose/survey.securesites.com-error_log ## vaddhost: (ipartner.net) at 123.45.67.89:80 SSLDisable User joe Group joe ServerName ipartner.net ServerAlias www.ipartner.net ServerAdmin joe@foo.com DocumentRoot /home/joe/www/ipartner.net Alias /cgi-bin /dev/null Options -ExecCGI CustomLog tmp_logs/joe/ipartner.net-access_log combined ErrorLog tmp_logs/joe/ipartner.net-error_log _CONF_ close CONFIG; open CONFIG, ">httpd_test2.conf" or die "Could not write config file: $!\n"; print CONFIG<<'_CONF_'; ## vaddhost: (blech.net) at 123.45.67.89:80 SSLDisable User jose Group jose ServerName blech.net ServerAlias www.blech.net ServerAdmin joe@blech.net DocumentRoot /home/jose/www/blech.net Alias /cgi-bin /dev/null Options -ExecCGI CustomLog tmp_logs/jose/blech.net-access_log combined ErrorLog tmp_logs/jose/blech.net-error_log _CONF_ close CONFIG; ## -- make log files -- ## system('mkdir', '-p', 'tmp_logs/joe'); system('mkdir', '-p', 'tmp_logs/jose'); make_log(1024, 'tmp_logs/error_log'); make_log(1024, 'tmp_logs/access_log'); make_log(1024, 'tmp_logs/joe/foo.com-access_log'); make_log(1024, 'tmp_logs/joe/foo.com-error_log'); make_log(1024, 'tmp_logs/joe/barf.com-access_log'); make_log(1024, 'tmp_logs/joe/barf.com-error_log'); make_log(1024, 'tmp_logs/joe/savelogs.org-access_log'); make_log(1024, 'tmp_logs/joe/savelogs.org-error_log'); make_log(1024, 'tmp_logs/joe/pinemountains.com-access_log'); make_log(1024, 'tmp_logs/joe/pinemountains.com-error_log'); make_log(1024, 'tmp_logs/jose/survey.securesites.com-access_log'); make_log(1024, 'tmp_logs/jose/survey.securesites.com-error_log'); make_log(1024, 'tmp_logs/jose/blech.net-access_log'); make_log(1024, 'tmp_logs/jose/blech.net-error_log'); make_log(1024, 'tmp_logs/joe/ipartner.net-access_log'); make_log(1024, 'tmp_logs/joe/ipartner.net-error_log'); ok( -f 'tmp_logs/error_log' && -f 'tmp_logs/access_log' && -f 'tmp_logs/joe/foo.com-access_log' && -f 'tmp_logs/joe/foo.com-error_log' && -f 'tmp_logs/joe/barf.com-access_log' && -f 'tmp_logs/joe/barf.com-error_log' && -f 'tmp_logs/joe/savelogs.org-access_log' && -f 'tmp_logs/joe/savelogs.org-error_log' && -f 'tmp_logs/joe/pinemountains.com-access_log' && -f 'tmp_logs/joe/pinemountains.com-error_log' && -f 'tmp_logs/jose/survey.securesites.com-access_log' && -f 'tmp_logs/jose/survey.securesites.com-error_log' && -f 'tmp_logs/joe/ipartner.net-access_log' && -f 'tmp_logs/joe/ipartner.net-error_log' && -f 'tmp_logs/jose/blech.net-access_log' && -f 'tmp_logs/jose/blech.net-error_log' ); ## ## test non-first host ## $out = `$savelogs --debug=5 --loglevel=5 --logfile=stdout --home=. --process=delete --apacheconf=httpd_test.conf --apachehost="ipartner.net" 2>&1`; ok( -f 'tmp_logs/error_log' && -f 'tmp_logs/access_log' && -f 'tmp_logs/joe/savelogs.org-access_log' && -f 'tmp_logs/joe/savelogs.org-error_log' && -f 'tmp_logs/joe/pinemountains.com-access_log' && -f 'tmp_logs/joe/pinemountains.com-error_log' && -f 'tmp_logs/jose/survey.securesites.com-access_log' && -f 'tmp_logs/jose/survey.securesites.com-error_log' && ! -f 'tmp_logs/joe/ipartner.net-access_log' && ! -f 'tmp_logs/joe/ipartner.net-error_log' && -f 'tmp_logs/jose/blech.net-access_log' && -f 'tmp_logs/jose/blech.net-error_log' && -f 'tmp_logs/joe/foo.com-access_log' && -f 'tmp_logs/joe/foo.com-error_log' && -f 'tmp_logs/joe/barf.com-access_log' && -f 'tmp_logs/joe/barf.com-error_log' ); ## ## test first host ## $out = `$savelogs --debug=5 --loglevel=5 --logfile=stdout --home=. --process=delete --apacheconf=httpd_test.conf --apachehost="foo.com" 2>&1`; ok( -f 'tmp_logs/error_log' && -f 'tmp_logs/access_log' && -f 'tmp_logs/joe/savelogs.org-access_log' && -f 'tmp_logs/joe/savelogs.org-error_log' && -f 'tmp_logs/joe/pinemountains.com-access_log' && -f 'tmp_logs/joe/pinemountains.com-error_log' && -f 'tmp_logs/jose/survey.securesites.com-access_log' && -f 'tmp_logs/jose/survey.securesites.com-error_log' && -f 'tmp_logs/jose/blech.net-access_log' && -f 'tmp_logs/jose/blech.net-error_log' && ! -f 'tmp_logs/joe/foo.com-access_log' && ! -f 'tmp_logs/joe/foo.com-error_log' && -f 'tmp_logs/joe/barf.com-access_log' && -f 'tmp_logs/joe/barf.com-error_log' ); ## ## test multiple hosts ## $out = `$savelogs --debug=5 --loglevel=5 --logfile=stdout --home=. --process=delete --apacheconf=httpd_test.conf --apachehost="savelogs.org" --apachehost="pinemountains.com" --apachehost="survey.securesites.com" 2>&1`; ok( -f 'tmp_logs/error_log' && -f 'tmp_logs/access_log' && -f 'tmp_logs/jose/blech.net-access_log' && -f 'tmp_logs/jose/blech.net-error_log' && ! -f 'tmp_logs/joe/savelogs.org-access_log' && ! -f 'tmp_logs/joe/savelogs.org-error_log' && ! -f 'tmp_logs/joe/pinemountains.com-access_log' && ! -f 'tmp_logs/joe/pinemountains.com-error_log' && ! -f 'tmp_logs/jose/survey.securesites.com-access_log' && ! -f 'tmp_logs/jose/survey.securesites.com-error_log' && -f 'tmp_logs/joe/barf.com-access_log' && -f 'tmp_logs/joe/barf.com-error_log' ); ## ## do a host in an include file (but don't include it yet) ## $out = `$savelogs --debug=5 --loglevel=5 --logfile=stdout --home=. --process=delete --apacheconf=httpd_test.conf --apachehost="blech.net" 2>&1`; ok( -f 'tmp_logs/error_log' && -f 'tmp_logs/access_log' && -f 'tmp_logs/jose/blech.net-access_log' && -f 'tmp_logs/jose/blech.net-error_log' && -f 'tmp_logs/joe/barf.com-access_log' && -f 'tmp_logs/joe/barf.com-error_log' ); ok( $out =~ /specify one or more log files/ ); ## now find them $out = `$savelogs --debug=5 --loglevel=5 --logfile=stdout --home=. --process=delete --apacheconf=httpd_test.conf --apacheinclude --apachehost="blech.net" 2>&1`; ok( -f 'tmp_logs/error_log' && -f 'tmp_logs/access_log' && ! -f 'tmp_logs/jose/blech.net-access_log' && ! -f 'tmp_logs/jose/blech.net-error_log' && -f 'tmp_logs/joe/barf.com-access_log' && -f 'tmp_logs/joe/barf.com-error_log' ); ## ## crashme tests ## $out = `$savelogs --debug=5 --loglevel=5 --logfile=stdout --home=. --process=delete --apacheconf=httpd_test.conf --apachehost="" 2>&1`; ok( -f 'tmp_logs/error_log' && -f 'tmp_logs/access_log' && -f 'tmp_logs/joe/barf.com-access_log' && -f 'tmp_logs/joe/barf.com-error_log' ); $out = `$savelogs --debug=5 --loglevel=5 --logfile=stdout --home=. --process=delete --apacheconf=httpd_test.conf --apachehost="." 2>&1`; ok( -f 'tmp_logs/error_log' && -f 'tmp_logs/access_log' && -f 'tmp_logs/joe/barf.com-access_log' && -f 'tmp_logs/joe/barf.com-error_log' ); ## we don't do globbing (yet) $out = `$savelogs --debug=5 --loglevel=5 --logfile=stdout --home=. --process=delete --apacheconf=httpd_test.conf --apachehost=".*" 2>&1`; ok( -f 'tmp_logs/error_log' && -f 'tmp_logs/access_log' && -f 'tmp_logs/joe/barf.com-access_log' && -f 'tmp_logs/joe/barf.com-error_log' ); END { system('rm', '-r', 'tmp_logs'); unlink "httpd_test.conf"; unlink "httpd_test2.conf"; }