github.com/sym3tri/etcd@v0.2.1-0.20140422215517-a563d82f95d6/tests/functional/internal_version_test.go (about) 1 package test 2 3 import ( 4 "fmt" 5 "net/http" 6 "net/http/httptest" 7 "net/url" 8 "os" 9 "sync" 10 "testing" 11 "time" 12 ) 13 14 // Ensure that etcd does not come up if the internal raft versions do not match. 15 func TestInternalVersion(t *testing.T) { 16 var mu sync.Mutex 17 18 checkedVersion := false 19 testMux := http.NewServeMux() 20 21 testMux.HandleFunc("/version", func(w http.ResponseWriter, r *http.Request) { 22 fmt.Fprintln(w, "This is not a version number") 23 mu.Lock() 24 defer mu.Unlock() 25 26 checkedVersion = true 27 }) 28 29 testMux.HandleFunc("/join", func(w http.ResponseWriter, r *http.Request) { 30 t.Fatal("should not attempt to join!") 31 }) 32 33 ts := httptest.NewServer(testMux) 34 defer ts.Close() 35 36 fakeURL, _ := url.Parse(ts.URL) 37 38 procAttr := new(os.ProcAttr) 39 procAttr.Files = []*os.File{nil, os.Stdout, os.Stderr} 40 args := []string{"etcd", "-name=node1", "-f", "-data-dir=/tmp/node1", "-peers=" + fakeURL.Host} 41 42 process, err := os.StartProcess(EtcdBinPath, args, procAttr) 43 if err != nil { 44 t.Fatal("start process failed:" + err.Error()) 45 return 46 } 47 48 time.Sleep(time.Second) 49 process.Kill() 50 51 _, err = http.Get("http://127.0.0.1:4001") 52 if err == nil { 53 t.Fatal("etcd node should not be up") 54 return 55 } 56 57 mu.Lock() 58 defer mu.Unlock() 59 if checkedVersion == false { 60 t.Fatal("etcd did not check the version") 61 return 62 } 63 }