| #!/bin/sh |
| # the next line restarts using tclsh \ |
| exec tclsh "$0" "$@" |
| |
| # Copyright 2001-2020 The Apache Tcl Team / The Apache Software Foundation |
| |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| set auto_path [linsert $auto_path 0 [file join [file dirname [info script]] apachetest]] |
| set default_mpm prefork |
| set httpd_args {} |
| puts stderr "runtests.tcl is running with auto_path: $auto_path" |
| |
| proc runtests_usage {} { |
| puts stderr "Usage: $::argv0 /path/to/apache/httpd ?startserver? ?-mpm <MPM module>? ?-bridge <MPM Bridge>?" |
| exit 1 |
| } |
| |
| proc get_httpd_version {httpd {bd broken_down_version}} { |
| upvar 1 $bd broken_down_version |
| |
| catch {exec $httpd -v} raw_string |
| |
| set version_l [regexp -inline {([0-9]{1,})\.([0-9]{1,})\.([0-9]{1,})} $raw_string] |
| if {[llength $version_l]} { |
| |
| lassign $version_l m major minor patchlevel |
| set broken_down_version [list $major $minor $patchlevel] |
| |
| } else { |
| |
| return -code error "could not identify the Apache httpd version from '$raw_string'" |
| |
| } |
| return $m |
| } |
| |
| # -- process_args |
| # |
| # basically this procedure strips from the argument list |
| # the arguments not pertaining to the httpd server |
| # Used to provide a way to control the test suite execution |
| # |
| |
| proc process_args {arguments} { |
| global mpm |
| global bridge |
| global httpd_args |
| |
| puts "n arguments: [llength $arguments]" |
| while {[llength $arguments]} { |
| set arguments [lassign $arguments a] |
| switch $a { |
| -mpm { |
| set arguments [lassign $arguments mpm] |
| } |
| -bridge { |
| set arguments [lassign $arguments bridge] |
| } |
| default { |
| lappend httpd_args $a |
| } |
| } |
| } |
| } |
| |
| if { [llength $argv] < 1 } { |
| runtests_usage |
| } else { |
| set mpm $default_mpm |
| set bridge "default" |
| |
| set httpd_bin [lindex $argv 0] |
| set httpd_version [get_httpd_version $httpd_bin] |
| process_args [lrange $argv 1 end] |
| |
| puts "httpd_bin: $httpd_bin" |
| puts "httpd_args: $httpd_args" |
| puts "httpd_version: $httpd_version" |
| puts "mpm: $mpm, bridge: $bridge" |
| |
| } |
| |
| puts stderr "Tests will be run against apache ${::httpd_version} version with the $mpm module and the $bridge bridge" |
| |
| package require apachetest |
| |
| if { [encoding system] eq "utf-8" } { |
| puts stderr { |
| System encoding is utf-8 - this is known to cause problems |
| with the test environment! Continuing with tests in 5 seconds |
| using the iso8859-1 encoding. |
| } |
| after 5000 |
| } |
| |
| if { [catch { |
| apachetest::getbinname $httpd_bin |
| } err ] } { |
| puts stderr $err |
| runtests_usage |
| } |
| |
| apachetest::need_modules [list \ |
| {mod_mime mime_module} \ |
| {mod_negotiation negotiation_module} \ |
| {mod_dir dir_module} \ |
| {mod_log_config log_config_module} \ |
| {mod_authz_core authz_core_module} \ |
| {mod_authz_host authz_host_module} \ |
| {mod_unixd unixd_module} \ |
| [list mod_mpm_${mpm} mpm_${mpm}_module]] |
| |
| apachetest::makeconf server.conf $bridge { |
| LoadModule rivet_module [file join $CWD .. src/.libs mod_rivet[info sharedlibextension]] |
| |
| # User and Group directives removed to ease dependency of test |
| # suite from the output of command 'id' (from which |
| # the values for these directives were inferred (Bug #53396) |
| |
| <IfModule mod_mime.c> |
| TypesConfig $CWD/mime.types |
| AddLanguage en .en |
| AddLanguage it .it |
| AddLanguage es .es |
| AddType application/x-httpd-rivet .rvt |
| AddType application/x-rivet-tcl .tcl |
| BRIDGE |
| </IfModule> |
| |
| <IfDefine SERVERCONFTEST> |
| RivetServerConf BeforeScript 'puts "Page Header"' |
| RivetServerConf AfterScript 'puts "Page Footer"' |
| </IfDefine> |
| |
| <IfDefine DIRTEST> |
| <Directory /> |
| RivetDirConf BeforeScript 'puts "Page Header"' |
| RivetDirConf AfterScript 'puts "Page Footer"' |
| </Directory> |
| </IfDefine> |
| |
| # We can use this to include our own stuff for each test. |
| Include test.conf |
| |
| # For testing, we want core dumps. |
| CoreDumpDirectory $CWD |
| } |
| |
| # Copy the rivet init files. |
| file delete -force rivet |
| file copy -force [file join .. rivet] . |
| set env(TCLLIBPATH) [file normalize [file join [file dirname [info script]] rivet]] |
| |
| # If 'startserver' is specified on the command line, just start up the |
| # server without running tests. |
| |
| puts "running test with arguments: $httpd_args" |
| switch -exact -- [lindex $httpd_args 1] { |
| startserver { |
| apachetest::startserver |
| } |
| default { |
| #set argv [lrange $argv 1 end] |
| set argv $httpd_args |
| source [file join . rivet.test] |
| } |
| } |