# virtualhost.test -- test virtual host setups. # $Id$ set docroot1 [file join [pwd] docroot1] set docroot2 [file join [pwd] docroot2] set vhostconf { #NameVirtualHost 127.0.0.1 DocumentRoot $docroot1 ServerName vhost1 DocumentRoot $docroot2 ServerName vhost2 } # Make sure virtual hosts work. ::tcltest::test vhost-1.1 {basic virtual host} { apachetest::start {} $vhostconf { set page1 [::http::geturl "${urlbase}basic1.rvt" -headers [list Host vhost1]] set page2 [::http::geturl "${urlbase}basic2.rvt" -headers [list Host vhost2]] set match1 [::http::data $page1] set match2 [::http::data $page2] ::http::cleanup $page1 ::http::cleanup $page2 } list [string match {Virtual Host1 Test*} $match1] \ [string match {Virtual Host2 Test*} $match2] } {1 1} # Try virtual hosts with and without a childinitscript. ::tcltest::test vhost-2.1 {virtual host w/ ChildInitScript} { set data {} apachetest::start {} { RivetServerConf SeparateVirtualInterps off RivetServerConf ChildInitScript "source [file join $docroot1 childinit.tcl]" #NameVirtualHost 127.0.0.1 DocumentRoot $docroot1 ServerName vhost1 RivetServerConf ChildInitScript "source [file join $docroot2 childinit.tcl]" DocumentRoot $docroot2 ServerName vhost2 } { set page2 [::http::geturl "${urlbase}vhost2.rvt" -headers [list Host vhost2]] set page1 [::http::geturl "${urlbase}vhost1.rvt" -headers [list Host vhost1]] set data "[::http::data $page1][::http::data $page2]" ::http::cleanup $page1 ::http::cleanup $page2 } # puts ">>>$data<<<" regexp "::childinit1 exists.*::childinit2 exists" $data match } 1 # Test out a ChildInitScript that is only in a vhost. ::tcltest::test vhost-2.2 {virtual host w/ ChildInitScript in vhost} { set data {} apachetest::start {} { #NameVirtualHost 127.0.0.1 DocumentRoot $docroot1 ServerName vhost1 RivetServerConf ChildInitScript "source [file join $docroot2 childinit.tcl]" DocumentRoot $docroot2 ServerName vhost2 } { set page {} lappend page [::http::geturl "${urlbase}vhost2.rvt" -headers [list Host vhost2]] lappend page [::http::geturl "${urlbase}vhost1.rvt" -headers [list Host vhost1]] foreach p $page { lappend data [::http::data $p] ::http::cleanup $p } } # set data regexp "vhost2 hello world
\n::childinit2 exists
" $data match } 1 # Test out a beforescript in a virtual host. ::tcltest::test vhost-3.1 {virtual host w/ BeforeScript} { set data {} apachetest::start {} { RivetServerConf BeforeScript "source [file join $docroot1 beforescript.tcl]" #NameVirtualHost 127.0.0.1 DocumentRoot $docroot1 ServerName vhost1 RivetServerConf BeforeScript "source [file join $docroot2 beforescript.tcl]" DocumentRoot $docroot2 ServerName vhost2 } { set page1 [::http::geturl "${urlbase}vhost2.rvt" -headers [list Host vhost2]] set page2 [::http::geturl "${urlbase}vhost1.rvt" -headers [list Host vhost1]] set data1 [::http::data $page1] set data2 [::http::data $page2] ::http::cleanup $page1 ::http::cleanup $page2 } list [regexp "^beforescript2\nVirtual Host2 Test" $data1 match] \ [regexp "^beforescript1\nVirtual Host1 Test" $data2 match] # list $data1 $data2 } {1 1} # Turn on separate interpreters per virtual host. ::tcltest::test vhost-4.1 {virtual host w/ separate interps} { set data {} apachetest::start {} { RivetServerConf SeparateVirtualInterps on #NameVirtualHost 127.0.0.1 RivetServerConf ChildInitScript "set ::childinit1 1" DocumentRoot $docroot1 ServerName vhost1 RivetServerConf ChildInitScript "set ::childinit2 1" DocumentRoot $docroot2 ServerName vhost2 } { set page1 [::http::geturl "${urlbase}vhost2.rvt" -headers [list Host vhost2]] set page2 [::http::geturl "${urlbase}vhost1.rvt" -headers [list Host vhost1]] set data1 [::http::data $page1] set data2 [::http::data $page2] ::http::cleanup $page1 ::http::cleanup $page2 } # puts "--$data1--" # puts "--$data2--" list \ [regexp "vhost2 hello world
\n::childinit2 exists
" $data1 match] \ [regexp "vhost1 hello world
\n::childinit1 exists
" $data2 match] # list $data1 $data2 } {1 1} # Run through a list of config options, the files they use and the # regexps that match the results. # Format: directive, file, 2 regexps to match set configs { ChildInitScript childinit.tcl "vhost2 hello world
\n::childinit2 exists
\n::childinit1 exists
\n" \ "vhost1 hello world
\n::childinit1 exists
\n::childinit2 exists
" BeforeScript beforescript.tcl "^beforescript2\nVirtual Host2 Test" "^beforescript1\nVirtual Host1 Test" AfterScript afterscript.tcl "afterscript2" "afterscript1" } set i 1 foreach {conf file re1 re2} $configs { ::tcltest::test vhost-5.$i [list vhost with $conf] { apachetest::start {} " RivetServerConf SeparateVirtualInterps off RivetServerConf $conf \"source [file join $docroot1 $file]\" #NameVirtualHost 127.0.0.1 DocumentRoot $docroot1 ServerName vhost1 RivetServerConf $conf \"source [file join $docroot2 $file]\" DocumentRoot $docroot2 ServerName vhost2 " { set page1 [::http::geturl "${urlbase}vhost2.rvt" -headers [list Host vhost2]] set page2 [::http::geturl "${urlbase}vhost1.rvt" -headers [list Host vhost1]] set data1 [::http::data $page1] set data2 [::http::data $page2] ::http::cleanup $page1 ::http::cleanup $page2 } #puts "--$re1--\n--$data1--" #puts "--$re2--\n--$data2--" list [regexp $re1 $data1 match] [regexp $re1 $data1 match] #list $data1 $data2 } {1 1} } set configs { ChildInitScript childinit.tcl "vhost2 hello world
\n::childinit2 exists
\n" "vhost1 hello world
\n::childinit1 exists
\n" BeforeScript beforescript.tcl "^beforescript2\nVirtual Host2 Test" "^beforescript1\nVirtual Host1 Test" AfterScript afterscript.tcl "afterscript2" "afterscript1" } # Now run through a similar list, using per vhost interps. set i 1 foreach {conf file re1 re2} $configs { ::tcltest::test vhost-6.$i [list vhost with $conf and SeparateVirtualInterps] { apachetest::start {} " RivetServerConf SeparateVirtualInterps on RivetServerConf $conf \"source [file join $docroot1 $file]\" #NameVirtualHost 127.0.0.1 DocumentRoot $docroot1 ServerName vhost1 RivetServerConf $conf \"source [file join $docroot2 $file]\" DocumentRoot $docroot2 ServerName vhost2 " { set page1 [::http::geturl "${urlbase}vhost2.rvt" -headers [list Host vhost2]] set page2 [::http::geturl "${urlbase}vhost1.rvt" -headers [list Host vhost1]] set data1 [::http::data $page1] set data2 [::http::data $page2] ::http::cleanup $page1 ::http::cleanup $page2 } #puts "--$re1--\n--$data1--" #puts "--$re2--\n--$data2--" list [regexp $re1 $data1 match] [regexp $re1 $data1 match] } {1 1} incr i }