github.com/macb/etcd@v0.3.1-0.20140227003422-a60481c6b1a0/tests/functional/version_check_test.go (about)

     1  package test
     2  
     3  import (
     4  	"net/http"
     5  	"os"
     6  	"testing"
     7  	"time"
     8  )
     9  
    10  // Ensure that a node can reply to a version check appropriately.
    11  func TestVersionCheck(t *testing.T) {
    12  	procAttr := new(os.ProcAttr)
    13  	procAttr.Files = []*os.File{nil, os.Stdout, os.Stderr}
    14  	args := []string{"etcd", "-name=node1", "-f", "-data-dir=/tmp/version_check"}
    15  
    16  	process, err := os.StartProcess(EtcdBinPath, args, procAttr)
    17  	if err != nil {
    18  		t.Fatal("start process failed:" + err.Error())
    19  		return
    20  	}
    21  	defer process.Kill()
    22  
    23  	time.Sleep(time.Second)
    24  
    25  	// Check a version too small.
    26  	resp, _ := http.Get("http://localhost:7001/version/1/check")
    27  	resp.Body.Close()
    28  	if resp.StatusCode != http.StatusForbidden {
    29  		t.Fatal("Invalid version check: ", resp.StatusCode)
    30  	}
    31  
    32  	// Check a version too large.
    33  	resp, _ = http.Get("http://localhost:7001/version/3/check")
    34  	resp.Body.Close()
    35  	if resp.StatusCode != http.StatusForbidden {
    36  		t.Fatal("Invalid version check: ", resp.StatusCode)
    37  	}
    38  
    39  	// Check a version that's just right.
    40  	resp, _ = http.Get("http://localhost:7001/version/2/check")
    41  	resp.Body.Close()
    42  	if resp.StatusCode != http.StatusOK {
    43  		t.Fatal("Invalid version check: ", resp.StatusCode)
    44  	}
    45  }