summaryrefslogtreecommitdiff
path: root/doc/articles
diff options
context:
space:
mode:
authorRick Arnold <rickarnoldjr@gmail.com>2014-03-18 13:03:03 +1100
committerRick Arnold <rickarnoldjr@gmail.com>2014-03-18 13:03:03 +1100
commit19ca07a865d6e27f9ef89db3e36e4377dbcc2bd1 (patch)
treebbdbb098e4fba03309b703ebac0bebb10a25e681 /doc/articles
parent70660b8885a1817fbab0285c6949c4e451059b1e (diff)
downloadgo-19ca07a865d6e27f9ef89db3e36e4377dbcc2bd1.tar.gz
build: fix race in doc/articles/wiki test
The original test would open a local port and then immediately close it and use the port number in subsequent tests. Between the port being closed and reused by the later process, it could be opened by some other program on the machine. Changed the test to run the server process directly and have it save the assigned port to a text file to be used by client processes. Fixes issue 5564. LGTM=adg R=golang-codereviews, gobot, adg CC=golang-codereviews https://codereview.appspot.com/72290043 Committer: Andrew Gerrand <adg@golang.org>
Diffstat (limited to 'doc/articles')
-rw-r--r--doc/articles/wiki/Makefile2
-rw-r--r--doc/articles/wiki/final.go23
-rwxr-xr-xdoc/articles/wiki/test.bash24
3 files changed, 42 insertions, 7 deletions
diff --git a/doc/articles/wiki/Makefile b/doc/articles/wiki/Makefile
index 2f801b3c3..67563bc09 100644
--- a/doc/articles/wiki/Makefile
+++ b/doc/articles/wiki/Makefile
@@ -4,7 +4,7 @@
all: index.html
-CLEANFILES=get.bin final-test.bin a.out
+CLEANFILES=get.bin final.bin a.out
clean:
rm -f $(CLEANFILES)
diff --git a/doc/articles/wiki/final.go b/doc/articles/wiki/final.go
index f15794d66..d84c1ffb2 100644
--- a/doc/articles/wiki/final.go
+++ b/doc/articles/wiki/final.go
@@ -5,12 +5,19 @@
package main
import (
+ "flag"
"html/template"
"io/ioutil"
+ "log"
+ "net"
"net/http"
"regexp"
)
+var (
+ addr = flag.Bool("addr", false, "find open address and print to final-port.txt")
+)
+
type Page struct {
Title string
Body []byte
@@ -81,8 +88,24 @@ func makeHandler(fn func(http.ResponseWriter, *http.Request, string)) http.Handl
}
func main() {
+ flag.Parse()
http.HandleFunc("/view/", makeHandler(viewHandler))
http.HandleFunc("/edit/", makeHandler(editHandler))
http.HandleFunc("/save/", makeHandler(saveHandler))
+
+ if *addr {
+ l, err := net.Listen("tcp", "127.0.0.1:0")
+ if err != nil {
+ log.Fatal(err)
+ }
+ err = ioutil.WriteFile("final-port.txt", []byte(l.Addr().String()), 0644)
+ if err != nil {
+ log.Fatal(err)
+ }
+ s := &http.Server{}
+ s.Serve(l)
+ return
+ }
+
http.ListenAndServe(":8080", nil)
}
diff --git a/doc/articles/wiki/test.bash b/doc/articles/wiki/test.bash
index 54a632c30..46c357ebd 100755
--- a/doc/articles/wiki/test.bash
+++ b/doc/articles/wiki/test.bash
@@ -7,7 +7,7 @@ set -e
wiki_pid=
cleanup() {
kill $wiki_pid
- rm -f test_*.out Test.txt final-test.bin final-test.go a.out get.bin
+ rm -f test_*.out Test.txt final.bin final-port.txt a.out get.bin
}
trap cleanup 0 INT
@@ -19,13 +19,25 @@ if [ "$1" == "-all" ]; then
fi
go build -o get.bin get.go
-addr=$(./get.bin -addr)
-sed s/:8080/$addr/ < final.go > final-test.go
-go build -o final-test.bin final-test.go
-(./final-test.bin) &
+go build -o final.bin final.go
+(./final.bin --addr) &
wiki_pid=$!
-./get.bin --wait_for_port=5s http://$addr/edit/Test > test_edit.out
+l=0
+while [ ! -f ./final-port.txt ]
+do
+ l=$(($l+1))
+ if [ "$l" -gt 5 ]
+ then
+ echo "port not available within 5 seconds"
+ exit 1
+ break
+ fi
+ sleep 1
+done
+
+addr=$(cat final-port.txt)
+./get.bin http://$addr/edit/Test > test_edit.out
diff -u test_edit.out test_edit.good
./get.bin -post=body=some%20content http://$addr/save/Test > test_save.out
diff -u test_save.out test_view.good # should be the same as viewing