internal_version_test.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package test
  2. import (
  3. "fmt"
  4. "net/http"
  5. "net/http/httptest"
  6. "net/url"
  7. "os"
  8. "testing"
  9. "time"
  10. )
  11. // Ensure that etcd does not come up if the internal raft versions do not match.
  12. func TestInternalVersion(t *testing.T) {
  13. checkedVersion := false
  14. testMux := http.NewServeMux()
  15. testMux.HandleFunc("/version", func(w http.ResponseWriter, r *http.Request) {
  16. fmt.Fprintln(w, "This is not a version number")
  17. checkedVersion = true
  18. })
  19. testMux.HandleFunc("/join", func(w http.ResponseWriter, r *http.Request) {
  20. t.Fatal("should not attempt to join!")
  21. })
  22. ts := httptest.NewServer(testMux)
  23. defer ts.Close()
  24. fakeURL, _ := url.Parse(ts.URL)
  25. procAttr := new(os.ProcAttr)
  26. procAttr.Files = []*os.File{nil, os.Stdout, os.Stderr}
  27. args := []string{"etcd", "-name=node1", "-force-config", "-data-dir=/tmp/node1", "-peers=" + fakeURL.Host}
  28. process, err := os.StartProcess(EtcdBinPath, args, procAttr)
  29. if err != nil {
  30. t.Fatal("start process failed:" + err.Error())
  31. return
  32. }
  33. time.Sleep(time.Second)
  34. process.Kill()
  35. _, err = http.Get("http://127.0.0.1:4001")
  36. if err == nil {
  37. t.Fatal("etcd node should not be up")
  38. return
  39. }
  40. if checkedVersion == false {
  41. t.Fatal("etcd did not check the version")
  42. return
  43. }
  44. }