summaryrefslogtreecommitdiffstats
path: root/tests/http11.test
diff options
context:
space:
mode:
Diffstat (limited to 'tests/http11.test')
-rw-r--r--tests/http11.test1080
1 files changed, 0 insertions, 1080 deletions
diff --git a/tests/http11.test b/tests/http11.test
deleted file mode 100644
index 0b3c560..0000000
--- a/tests/http11.test
+++ /dev/null
@@ -1,1080 +0,0 @@
-# http11.test -- -*- tcl-*-
-#
-# Test HTTP/1.1 features.
-#
-# Copyright © 2009 Pat Thoyts <patthoyts@users.sourceforge.net>
-#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-
-if {"::tcltest" ni [namespace children]} {
- package require tcltest 2.5
- namespace import -force ::tcltest::*
-}
-
-package require http 2.10
-#http::register http 80 ::socket
-
-# start the server
-variable httpd_output
-proc create_httpd {} {
- proc httpd_read {chan} {
- variable httpd_output
- if {[gets $chan line] >= 0} {
- #puts stderr "read '$line'"
- set httpd_output $line
- }
- if {[eof $chan]} {
- puts stderr "eof from httpd"
- fileevent $chan readable {}
- close $chan
- }
- }
- variable httpd_output
- set httpd_script [file join [pwd] [file dirname [info script]] httpd11.tcl]
- set httpd [open "|[list [interpreter] -encoding utf-8 $httpd_script]" r+]
- fconfigure $httpd -buffering line -blocking 0
- fileevent $httpd readable [list httpd_read $httpd]
- vwait httpd_output
- variable httpd_port [lindex $httpd_output 2]
- return $httpd
-}
-
-proc halt_httpd {} {
- variable httpd_output
- variable httpd
- if {[info exists httpd]} {
- puts $httpd "quit"
- vwait httpd_output
- close $httpd
- }
- unset -nocomplain httpd_output httpd
-}
-
-proc meta {tok {key ""}} {
- if {$key eq ""} {
- return [http::meta $tok]
- } else {
- return [http::metaValue $tok $key]
- }
-}
-
-proc state {tok {key ""}} {
- upvar 1 $tok state
- if {$key ne ""} {
- if {[array names state -exact $key] ne {}} {
- return $state($key)
- } else {
- return ""
- }
- }
- set res [array get state]
- dict set res body <elided>
- return $res
-}
-
-proc check_crc {tok args} {
- set crc [meta $tok x-crc32]
- set data [expr {[llength $args] ? [lindex $args 0] : [http::data $tok]}]
- set chk [format %x [zlib crc32 $data]]
- if {$crc ne $chk} {
- return "crc32 mismatch: $crc ne $chk"
- }
- return "ok"
-}
-
-makeFile "<html><head><title>test</title></head><body><p>this is a test</p>\n[string repeat {<p>This is a tcl test file.</p>} 4192]\n</body></html>" testdoc.html
-
-makeFile "<html><head><title>test</title></head><body><p>this is a test</p>\n[string repeat {<p>This is a tcl test file.</p>} 5000]\n</body></html>" largedoc.html
-
-# To write a separate summary for each value of ThreadLevel, set constraint ThreadLevelSummary.
-#testConstraint ThreadLevelSummary 0
-
-if 0 {
- # For debugging: run with a single value of ThreadLevel: 0|1|2
- set ThreadLevel 0
- testConstraint ThreadLevelSummary 1
-}
-if {![info exists ThreadLevel]} {
- if {[catch {package require Thread}] == 0} {
- set ValueRange {0 1 2}
- } else {
- set ValueRange {0 1}
- }
-
- # For each value of ThreadLevel, source this file recursively in the
- # same interpreter.
- foreach ThreadLevel $ValueRange {
- source [info script]
- }
- catch {unset ThreadLevel}
- catch {unset ValueRange}
- if {![testConstraint ThreadLevelSummary]} {
- ::tcltest::cleanupTests
- }
- return
-}
-
-catch {puts "==== Test with ThreadLevel $ThreadLevel ===="}
-http::config -threadlevel $ThreadLevel
-
-# -------------------------------------------------------------------------
-
-test http11-1.0.$ThreadLevel "normal request for document " -setup {
- variable httpd [create_httpd]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html -timeout 10000]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok] [meta $tok connection]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close}
-
-test http11-1.1.$ThreadLevel "normal,gzip,non-chunked" -setup {
- variable httpd [create_httpd]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1 \
- -timeout 10000 -headers {accept-encoding gzip}]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok] \
- [meta $tok content-encoding] [meta $tok transfer-encoding] \
- [http::meta $tok content-encoding] [http::meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok gzip {} {content-encoding gzip} {}}
-
-test http11-1.2.$ThreadLevel "normal,deflated,non-chunked" -setup {
- variable httpd [create_httpd]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1 \
- -timeout 10000 -headers {accept-encoding deflate}]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok] \
- [meta $tok content-encoding] [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok deflate {}}
-
-test http11-1.2.1.$ThreadLevel "normal,deflated,non-chunked,msdeflate" -setup {
- variable httpd [create_httpd]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1&msdeflate=1 \
- -timeout 10000 -headers {accept-encoding deflate}]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok] \
- [meta $tok content-encoding] [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok deflate {}}
-
-test http11-1.3.$ThreadLevel "normal,compressed,non-chunked" -constraints badCompress -setup {
- # The Tcl "compress" algorithm appears to be incorrect and has been removed.
- # Bug [a13b9d0ce1].
- variable httpd [create_httpd]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1 \
- -timeout 10000 -headers {accept-encoding compress}]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok] \
- [meta $tok content-encoding] [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok compress {}}
-
-test http11-1.4.$ThreadLevel "normal,identity,non-chunked" -setup {
- variable httpd [create_httpd]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1 \
- -timeout 10000 -headers {accept-encoding identity}]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok] \
- [meta $tok content-encoding] [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok {} {}}
-
-test http11-1.5.$ThreadLevel "normal request for document, unsupported coding" -setup {
- variable httpd [create_httpd]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -timeout 10000 -headers {accept-encoding unsupported}]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok] \
- [meta $tok content-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok {}}
-
-test http11-1.6.$ThreadLevel "normal, specify 1.1 " -setup {
- variable httpd [create_httpd]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -protocol 1.1 -timeout 10000]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok] \
- [meta $tok connection] [meta $tok transfer-encoding] \
- [http::meta $tok connection] [http::meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close chunked {connection close} {transfer-encoding chunked}}
-
-test http11-1.7.$ThreadLevel "normal, 1.1 and keepalive " -setup {
- variable httpd [create_httpd]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -protocol 1.1 -keepalive 1 -timeout 10000]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok] \
- [meta $tok connection] [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok {} chunked}
-
-test http11-1.8.$ThreadLevel "normal, 1.1 and keepalive, server close" -setup {
- variable httpd [create_httpd]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1 \
- -protocol 1.1 -keepalive 1 -timeout 10000]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok] \
- [meta $tok connection] [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close {}}
-
-test http11-1.9.$ThreadLevel "normal,gzip,chunked" -setup {
- variable httpd [create_httpd]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -timeout 10000 -headers {accept-encoding gzip}]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok] \
- [meta $tok content-encoding] [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok gzip chunked}
-
-test http11-1.10.$ThreadLevel "normal,deflate,chunked" -setup {
- variable httpd [create_httpd]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -timeout 10000 -headers {accept-encoding deflate}]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok] \
- [meta $tok content-encoding] [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok deflate chunked}
-
-test http11-1.10.1.$ThreadLevel "normal,deflate,chunked,msdeflate" -setup {
- variable httpd [create_httpd]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?msdeflate=1 \
- -timeout 10000 -headers {accept-encoding deflate}]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok] \
- [meta $tok content-encoding] [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok deflate chunked}
-
-test http11-1.11.$ThreadLevel "normal,compress,chunked" -constraints badCompress -setup {
- # The Tcl "compress" algorithm appears to be incorrect and has been removed.
- # Bug [a13b9d0ce1].
- variable httpd [create_httpd]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -timeout 10000 -headers {accept-encoding compress}]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok] \
- [meta $tok content-encoding] [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok compress chunked}
-
-test http11-1.12.$ThreadLevel "normal,identity,chunked" -setup {
- variable httpd [create_httpd]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -timeout 10000 -headers {accept-encoding identity}]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok] \
- [meta $tok content-encoding] [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok {} chunked}
-
-test http11-1.13.$ThreadLevel "normal, 1.1 and keepalive as server default, no zip" -setup {
- variable httpd [create_httpd]
- set zipTmp [http::config -zip]
- http::config -zip 0
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?transfer= \
- -protocol 1.1 -keepalive 1 -timeout 10000]
- http::wait $tok
- set res1 [list [http::status $tok] [http::code $tok] [check_crc $tok] \
- [meta $tok connection] [meta $tok transfer-encoding] [state $tok reusing] [state $tok connection]]
- set toj [http::geturl http://localhost:$httpd_port/testdoc.html?transfer= \
- -protocol 1.1 -keepalive 1 -timeout 10000]
- http::wait $toj
- set res2 [list [http::status $toj] [http::code $toj] [check_crc $toj] \
- [meta $toj connection] [meta $toj transfer-encoding] [state $toj reusing] [state $toj connection]]
- concat $res1 -- $res2
-} -cleanup {
- catch {http::cleanup $tok}
- catch {http::cleanup $toj}
- halt_httpd
- http::config -zip $zipTmp
-} -result {ok {HTTP/1.1 200 OK} ok {} {} 0 keep-alive -- ok {HTTP/1.1 200 OK} ok {} {} 1 keep-alive}
-
-# -------------------------------------------------------------------------
-
-proc progress {var token total current} {
- upvar #0 $var log
- set log [list $current $total]
- return
-}
-
-proc progressPause {var token total current} {
- upvar #0 $var log
- set log [list $current $total]
- after 100 set ::WaitHere 0
- vwait ::WaitHere
- return
-}
-
-test http11-2.0.$ThreadLevel "-channel" -setup {
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -timeout 5000 -channel $chan]
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close chunked}
-
-test http11-2.1.$ThreadLevel "-channel, encoding gzip" -setup {
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -timeout 5000 -channel $chan -headers {accept-encoding gzip}]
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- set diff [expr {[file size testdoc.html] - [file size testfile.tmp]}]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding] -- $diff bytes lost
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close gzip chunked -- 0 bytes lost}
-
-# Cf. Bug [3610253] "CopyChunk does not drain decompressor(s)"
-# This test failed before the bugfix.
-# The pass/fail depended on file size.
-test http11-2.1.1.$ThreadLevel "-channel, encoding gzip" -setup {
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
- set fileName largedoc.html
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/$fileName \
- -timeout 5000 -channel $chan -headers {accept-encoding gzip}]
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- set diff [expr {[file size $fileName] - [file size testfile.tmp]}]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding] -- $diff bytes lost
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close gzip chunked -- 0 bytes lost}
-
-test http11-2.2.$ThreadLevel "-channel, encoding deflate" -setup {
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -timeout 5000 -channel $chan -headers {accept-encoding deflate}]
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close deflate chunked}
-
-test http11-2.2.1.$ThreadLevel "-channel, encoding deflate,msdeflate" -setup {
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?msdeflate=1 \
- -timeout 5000 -channel $chan -headers {accept-encoding deflate}]
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close deflate chunked}
-
-test http11-2.3.$ThreadLevel "-channel,encoding compress" -constraints badCompress -setup {
- # The Tcl "compress" algorithm appears to be incorrect and has been removed.
- # Bug [a13b9d0ce1].
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -timeout 5000 -channel $chan \
- -headers {accept-encoding compress}]
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close compress chunked}
-
-test http11-2.4.$ThreadLevel "-channel,encoding identity" -setup {
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -timeout 5000 -channel $chan \
- -headers {accept-encoding identity}]
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close {} chunked}
-
-test http11-2.4.1.$ThreadLevel "-channel,encoding identity with -progress" -setup {
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
- set logdata ""
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -timeout 5000 -channel $chan \
- -headers {accept-encoding identity} \
- -progress [namespace code [list progress logdata]]]
-
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding] \
- [expr {[lindex $logdata 0] - [lindex $logdata 1]}] \
- [expr {[lindex $logdata 0] - [string length $data]}]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
- unset -nocomplain logdata data
-} -result {ok {HTTP/1.1 200 OK} ok close {} chunked 0 0}
-
-test http11-2.4.2.$ThreadLevel "-channel,encoding identity with -progress progressPause enters event loop" -constraints knownBug -setup {
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
- set logdata ""
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -timeout 5000 -channel $chan \
- -headers {accept-encoding identity} \
- -progress [namespace code [list progressPause logdata]]]
-
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding] \
- [expr {[lindex $logdata 0] - [lindex $logdata 1]}] \
- [expr {[lindex $logdata 0] - [string length $data]}]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
- unset -nocomplain logdata data ::WaitHere
-} -result {ok {HTTP/1.1 200 OK} ok close {} chunked 0 0}
-
-test http11-2.5.$ThreadLevel "-channel,encoding unsupported" -setup {
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -timeout 5000 -channel $chan \
- -headers {accept-encoding unsupported}]
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close {} chunked}
-
-test http11-2.6.$ThreadLevel "-channel,encoding gzip,non-chunked" -setup {
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1 \
- -timeout 5000 -channel $chan -headers {accept-encoding gzip}]
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding]\
- [expr {[file size testdoc.html]-[file size testfile.tmp]}]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close gzip {} 0}
-
-test http11-2.7.$ThreadLevel "-channel,encoding deflate,non-chunked" -setup {
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1 \
- -timeout 5000 -channel $chan -headers {accept-encoding deflate}]
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding]\
- [expr {[file size testdoc.html]-[file size testfile.tmp]}]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close deflate {} 0}
-
-test http11-2.7.1.$ThreadLevel "-channel,encoding deflate,non-chunked,msdeflate" -constraints knownBug -setup {
- # Test fails because a -channel can only try one un-deflate algorithm, and the
- # compliant "decompress" is tried, not the non-compliant "inflate" of
- # the MS browser implementation.
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1&msdeflate=1 \
- -timeout 5000 -channel $chan -headers {accept-encoding deflate}]
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding]\
- [expr {[file size testdoc.html]-[file size testfile.tmp]}]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close deflate {} 0}
-
-test http11-2.8.$ThreadLevel "-channel,encoding compress,non-chunked" -constraints badCompress -setup {
- # The Tcl "compress" algorithm appears to be incorrect and has been removed.
- # Bug [a13b9d0ce1].
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1 \
- -timeout 5000 -channel $chan -headers {accept-encoding compress}]
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding]\
- [expr {[file size testdoc.html]-[file size testfile.tmp]}]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close compress {} 0}
-
-test http11-2.9.$ThreadLevel "-channel,encoding identity,non-chunked" -setup {
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1 \
- -timeout 5000 -channel $chan -headers {accept-encoding identity}]
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding]\
- [expr {[file size testdoc.html]-[file size testfile.tmp]}]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close {} {} 0}
-
-test http11-2.10.$ThreadLevel "-channel,deflate,keepalive" -setup {
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -timeout 5000 -channel $chan -keepalive 1 \
- -headers {accept-encoding deflate}]
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding]\
- [expr {[file size testdoc.html]-[file size testfile.tmp]}]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok {} deflate chunked 0}
-
-test http11-2.10.1.$ThreadLevel "-channel,deflate,keepalive,msdeflate" -setup {
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?msdeflate=1 \
- -timeout 5000 -channel $chan -keepalive 1 \
- -headers {accept-encoding deflate}]
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding]\
- [expr {[file size testdoc.html]-[file size testfile.tmp]}]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok {} deflate chunked 0}
-
-test http11-2.11.$ThreadLevel "-channel,identity,keepalive" -setup {
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -headers {accept-encoding identity} \
- -timeout 5000 -channel $chan -keepalive 1]
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok {} {} chunked}
-
-test http11-2.12.$ThreadLevel "-channel,negotiate,keepalive" -setup {
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -timeout 5000 -channel $chan -keepalive 1]
- http::wait $tok
- seek $chan 0
- set data [read $chan]
- list [http::status $tok] [http::code $tok] [check_crc $tok $data]\
- [meta $tok connection] [meta $tok content-encoding]\
- [meta $tok transfer-encoding] [meta $tok x-requested-encodings]\
- [expr {[file size testdoc.html]-[file size testfile.tmp]}]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok {} gzip chunked gzip,deflate 0}
-
-
-# -------------------------------------------------------------------------
-#
-# The following tests for the -handler option will require changes in
-# the future. At the moment we cannot handler chunked data with this
-# option. Therefore we currently force HTTP/1.0 protocol version.
-#
-# Once this is solved, these tests should be fixed to assume chunked
-# returns in 3.2 and 3.3 and HTTP/1.1 in all but test 3.1
-
-proc handler {var sock token} {
- upvar #0 $var data
- set chunk [read $sock]
- append data $chunk
- #::http::Log "handler read [string length $chunk] ([chan configure $sock -buffersize])"
- return [string length $chunk]
-}
-
-proc handlerPause {var sock token} {
- upvar #0 $var data
- set chunk [read $sock]
- append data $chunk
- #::http::Log "handler read [string length $chunk] ([chan configure $sock -buffersize])"
- after 100 set ::WaitHere 0
- vwait ::WaitHere
- return [string length $chunk]
-}
-
-test http11-3.0.$ThreadLevel "-handler,close,identity" -setup {
- variable httpd [create_httpd]
- set testdata ""
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1 \
- -timeout 10000 -handler [namespace code [list handler testdata]]]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok $testdata]\
- [meta $tok connection] [meta $tok content-encoding] \
- [meta $tok transfer-encoding] \
- [expr {[file size testdoc.html]-[string length $testdata]}]
-} -cleanup {
- catch {http::cleanup $tok}
- unset -nocomplain testdata
- halt_httpd
-} -result {ok {HTTP/1.0 200 OK} ok close {} {} 0}
-
-test http11-3.1.$ThreadLevel "-handler,protocol1.0" -setup {
- variable httpd [create_httpd]
- set testdata ""
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1 \
- -timeout 10000 -protocol 1.0 \
- -handler [namespace code [list handler testdata]]]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok $testdata]\
- [meta $tok connection] [meta $tok content-encoding] \
- [meta $tok transfer-encoding] \
- [expr {[file size testdoc.html]-[string length $testdata]}]
-} -cleanup {
- catch {http::cleanup $tok}
- unset -nocomplain testdata
- halt_httpd
-} -result {ok {HTTP/1.0 200 OK} ok close {} {} 0}
-
-test http11-3.2.$ThreadLevel "-handler,close,chunked" -setup {
- variable httpd [create_httpd]
- set testdata ""
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -timeout 10000 -keepalive 0 -binary 1\
- -handler [namespace code [list handler testdata]]]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok $testdata]\
- [meta $tok connection] [meta $tok content-encoding] \
- [meta $tok transfer-encoding] \
- [expr {[file size testdoc.html]-[string length $testdata]}]
-} -cleanup {
- catch {http::cleanup $tok}
- unset -nocomplain testdata
- halt_httpd
-} -result {ok {HTTP/1.0 200 OK} ok close {} {} 0}
-
-test http11-3.3.$ThreadLevel "-handler,keepalive,chunked" -setup {
- variable httpd [create_httpd]
- set testdata ""
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -timeout 10000 -keepalive 1 -binary 1\
- -handler [namespace code [list handler testdata]]]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok $testdata]\
- [meta $tok connection] [meta $tok content-encoding] \
- [meta $tok transfer-encoding] \
- [expr {[file size testdoc.html]-[string length $testdata]}]
-} -cleanup {
- catch {http::cleanup $tok}
- unset -nocomplain testdata
- halt_httpd
-} -result {ok {HTTP/1.0 200 OK} ok close {} {} 0}
-
-# http11-3.4
-# This test is a blatant attempt to confuse the client by instructing the server
-# to send neither "Connection: close" nor "Content-Length" when in non-chunked
-# mode.
-# The client has no way to know the response-body is complete unless the
-# server signals this by closing the connection.
-# In an HTTP/1.1 response the absence of "Connection: close" means
-# "Connection: keep-alive", i.e. the server will keep the connection
-# open. In HTTP/1.0 this is not the case, and this is a test that
-# the Tcl client assumes "Connection: close" by default in HTTP/1.0.
-test http11-3.4.$ThreadLevel "-handler,close,identity; HTTP/1.0 server does not send Connection: close header or Content-Length" -setup {
- variable httpd [create_httpd]
- set testdata ""
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1&nosendclose=any \
- -timeout 10000 -handler [namespace code [list handler testdata]]]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok $testdata]\
- [meta $tok connection] [meta $tok content-encoding] \
- [meta $tok transfer-encoding] \
- [expr {[file size testdoc.html]-[string length $testdata]}]
-} -cleanup {
- catch {http::cleanup $tok}
- unset -nocomplain testdata
- halt_httpd
-} -result {ok {HTTP/1.0 200 OK} ok {} {} {} 0}
-
-# It is not forbidden for a handler to enter the event loop.
-test http11-3.5.$ThreadLevel "-handler,close,identity as http11-3.0 but handlerPause enters event loop" -setup {
- variable httpd [create_httpd]
- set testdata ""
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1 \
- -timeout 10000 -handler [namespace code [list handlerPause testdata]]]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok $testdata]\
- [meta $tok connection] [meta $tok content-encoding] \
- [meta $tok transfer-encoding] \
- [expr {[file size testdoc.html]-[string length $testdata]}]
-} -cleanup {
- catch {http::cleanup $tok}
- unset -nocomplain testdata ::WaitHere
- halt_httpd
-} -result {ok {HTTP/1.0 200 OK} ok close {} {} 0}
-
-test http11-3.6.$ThreadLevel "-handler,close,identity as http11-3.0 but with -progress" -setup {
- variable httpd [create_httpd]
- set testdata ""
- set logdata ""
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1 \
- -timeout 10000 -handler [namespace code [list handler testdata]] \
- -progress [namespace code [list progress logdata]]]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok $testdata]\
- [meta $tok connection] [meta $tok content-encoding] \
- [meta $tok transfer-encoding] \
- [expr {[file size testdoc.html]-[string length $testdata]}] \
- [expr {[lindex $logdata 0] - [lindex $logdata 1]}] \
- [expr {[lindex $logdata 0] - [string length $testdata]}]
-} -cleanup {
- catch {http::cleanup $tok}
- unset -nocomplain testdata logdata ::WaitHere
- halt_httpd
-} -result {ok {HTTP/1.0 200 OK} ok close {} {} 0 0 0}
-
-test http11-3.7.$ThreadLevel "-handler,close,identity as http11-3.0 but with -progress progressPause enters event loop" -setup {
- variable httpd [create_httpd]
- set testdata ""
- set logdata ""
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1 \
- -timeout 10000 -handler [namespace code [list handler testdata]] \
- -progress [namespace code [list progressPause logdata]]]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok $testdata]\
- [meta $tok connection] [meta $tok content-encoding] \
- [meta $tok transfer-encoding] \
- [expr {[file size testdoc.html]-[string length $testdata]}] \
- [expr {[lindex $logdata 0] - [lindex $logdata 1]}] \
- [expr {[lindex $logdata 0] - [string length $testdata]}]
-} -cleanup {
- catch {http::cleanup $tok}
- unset -nocomplain testdata logdata ::WaitHere
- halt_httpd
-} -result {ok {HTTP/1.0 200 OK} ok close {} {} 0 0 0}
-
-test http11-3.8.$ThreadLevel "close,identity no -handler but with -progress" -setup {
- variable httpd [create_httpd]
- set logdata ""
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1 \
- -timeout 10000 \
- -progress [namespace code [list progress logdata]] \
- -headers {accept-encoding {}}]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok]\
- [meta $tok connection] [meta $tok content-encoding] \
- [meta $tok transfer-encoding] \
- [expr {[file size testdoc.html]-[string length [http::data $tok]]}] \
- [expr {[lindex $logdata 0] - [lindex $logdata 1]}] \
- [expr {[lindex $logdata 0] - [string length [http::data $tok]]}]
-} -cleanup {
- catch {http::cleanup $tok}
- unset -nocomplain logdata ::WaitHere
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close {} {} 0 0 0}
-
-test http11-3.9.$ThreadLevel "close,identity no -handler but with -progress progressPause enters event loop" -setup {
- variable httpd [create_httpd]
- set logdata ""
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html?close=1 \
- -timeout 10000 \
- -progress [namespace code [list progressPause logdata]] \
- -headers {accept-encoding {}}]
- http::wait $tok
- list [http::status $tok] [http::code $tok] [check_crc $tok]\
- [meta $tok connection] [meta $tok content-encoding] \
- [meta $tok transfer-encoding] \
- [expr {[file size testdoc.html]-[string length [http::data $tok]]}] \
- [expr {[lindex $logdata 0] - [lindex $logdata 1]}] \
- [expr {[lindex $logdata 0] - [string length [http::data $tok]]}]
-} -cleanup {
- catch {http::cleanup $tok}
- unset -nocomplain logdata ::WaitHere
- halt_httpd
-} -result {ok {HTTP/1.1 200 OK} ok close {} {} 0 0 0}
-
-test http11-4.0.$ThreadLevel "normal post request" -setup {
- variable httpd [create_httpd]
-} -body {
- set query [http::formatQuery q 1 z 2]
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -query $query -timeout 10000]
- http::wait $tok
- list status [http::status $tok] code [http::code $tok]\
- crc [check_crc $tok]\
- connection [meta $tok connection]\
- query-length [meta $tok x-query-length]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {status ok code {HTTP/1.1 200 OK} crc ok connection close query-length 7}
-
-test http11-4.1.$ThreadLevel "normal post request, check query length" -setup {
- variable httpd [create_httpd]
-} -body {
- set query [http::formatQuery q 1 z 2]
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html \
- -headers [list x-check-query yes] \
- -query $query -timeout 10000]
- http::wait $tok
- list status [http::status $tok] code [http::code $tok]\
- crc [check_crc $tok]\
- connection [meta $tok connection]\
- query-length [meta $tok x-query-length]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {status ok code {HTTP/1.1 200 OK} crc ok connection close query-length 7}
-
-test http11-4.2.$ThreadLevel "normal post request, check long query length" -setup {
- variable httpd [create_httpd]
-} -body {
- set query [string repeat a 24576]
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html\
- -headers [list x-check-query yes]\
- -query $query -timeout 10000]
- http::wait $tok
- list status [http::status $tok] code [http::code $tok]\
- crc [check_crc $tok]\
- connection [meta $tok connection]\
- query-length [meta $tok x-query-length]
-} -cleanup {
- catch {http::cleanup $tok}
- halt_httpd
-} -result {status ok code {HTTP/1.1 200 OK} crc ok connection close query-length 24576}
-
-test http11-4.3.$ThreadLevel "normal post request, check channel query length" -setup {
- variable httpd [create_httpd]
- set chan [open [makeFile {} testfile.tmp] wb+]
- puts -nonewline $chan [string repeat [encoding convertto utf-8 "This is a test\n"] 8192]
- flush $chan
- seek $chan 0
-} -body {
- set tok [http::geturl http://localhost:$httpd_port/testdoc.html\
- -headers [list x-check-query yes]\
- -querychannel $chan -timeout 10000]
- http::wait $tok
- list status [http::status $tok] code [http::code $tok]\
- crc [check_crc $tok]\
- connection [meta $tok connection]\
- query-length [meta $tok x-query-length]
-} -cleanup {
- catch {http::cleanup $tok}
- close $chan
- removeFile testfile.tmp
- halt_httpd
-} -result {status ok code {HTTP/1.1 200 OK} crc ok connection close query-length 122880}
-
-# -------------------------------------------------------------------------
-
-# Eliminate valgrind "still reachable" reports on outstanding "Detached"
-# structures in the detached list which stem from PipeClose2Proc not waiting
-# around for background processes to complete, meaning that previous calls to
-# Tcl_ReapDetachedProcs might not have had a chance to reap all processes.
-after 10
-exec [info nameofexecutable] << {}
-
-foreach p {create_httpd httpd_read halt_httpd meta check_crc} {
- if {[llength [info proc $p]]} {rename $p {}}
-}
-removeFile testdoc.html
-removeFile largedoc.html
-unset -nocomplain httpd_port httpd p
-
-if {[testConstraint ThreadLevelSummary]} {
- ::tcltest::cleanupTests
-}