blob: 7d7eae4fa217030f3cba0e7fbb732722e25b6d73 [file] [log] [blame]
#!/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]
}
}