package main
import (
"io"
"io/ioutil"
"log"
"net/http"
"net/http/httptest"
"net/url"
"time"
"net/http/cgi"
)
// Expected: go program finishes after 2 seconds.
// Actual: go program finishes after 10 seconds.
// Contents of test.cgi:
/*
#! /bin/bash
echo Status: 200 OK
echo
echo Test.
# Pick one of the next three lines
sleep 10
# bash -c "for i in {1..5000000}; do true; done;"
# python -c "for i in xrange(100000000): pass"
echo Done.
*/
func main() {
h := &cgi.Handler{
Path: "test.cgi",
}
s := httptest.NewServer(h)
defer s.Close()
go func() {
// Request test.cgi
u := s.URL + "/test.cgi"
log.Println("GET", u)
resp, err := http.Get(u)
if err, ok := err.(*url.Error); ok && err.Err == io.EOF {
log.Println("EOF")
return
} else if err != nil {
panic(err)
}
defer resp.Body.Close()
result, err := ioutil.ReadAll(resp.Body)
log.Printf("err, result = %v %s", err, string(result))
}()
log.Println("Waiting..")
time.Sleep(1 * time.Second)
log.Println("Closing client connections..")
s.CloseClientConnections()
time.Sleep(1 * time.Second)
log.Println("Exiting..")
}