| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package test
- import (
- "bytes"
- "encoding/json"
- "os"
- "testing"
- "time"
- "github.com/coreos/etcd/tests"
- "github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
- )
- // Ensure that the cluster configuration can be updated.
- func TestClusterConfigSet(t *testing.T) {
- _, etcds, err := CreateCluster(3, &os.ProcAttr{Files: []*os.File{nil, os.Stdout, os.Stderr}}, false)
- assert.NoError(t, err)
- defer DestroyCluster(etcds)
- resp, _ := tests.Put("http://localhost:7001/v2/admin/config", "application/json", bytes.NewBufferString(`{"activeSize":3, "removeDelay":60}`))
- assert.Equal(t, resp.StatusCode, 200)
- time.Sleep(1 * time.Second)
- resp, _ = tests.Get("http://localhost:7002/v2/admin/config")
- body := tests.ReadBodyJSON(resp)
- assert.Equal(t, resp.StatusCode, 200)
- assert.Equal(t, resp.Header.Get("Content-Type"), "application/json")
- assert.Equal(t, body["activeSize"], 3)
- assert.Equal(t, body["removeDelay"], 60)
- }
- // Ensure that the cluster configuration can be reloaded.
- func TestClusterConfigReload(t *testing.T) {
- procAttr := &os.ProcAttr{Files: []*os.File{nil, os.Stdout, os.Stderr}}
- argGroup, etcds, err := CreateCluster(3, procAttr, false)
- assert.NoError(t, err)
- defer DestroyCluster(etcds)
- resp, _ := tests.Put("http://localhost:7001/v2/admin/config", "application/json", bytes.NewBufferString(`{"activeSize":3, "removeDelay":60}`))
- assert.Equal(t, resp.StatusCode, 200)
- time.Sleep(1 * time.Second)
- resp, _ = tests.Get("http://localhost:7002/v2/admin/config")
- body := tests.ReadBodyJSON(resp)
- assert.Equal(t, resp.StatusCode, 200)
- assert.Equal(t, resp.Header.Get("Content-Type"), "application/json")
- assert.Equal(t, body["activeSize"], 3)
- assert.Equal(t, body["removeDelay"], 60)
- // kill all
- DestroyCluster(etcds)
- for i := 0; i < 3; i++ {
- etcds[i], err = os.StartProcess(EtcdBinPath, argGroup[i], procAttr)
- }
- time.Sleep(1 * time.Second)
- resp, _ = tests.Get("http://localhost:7002/v2/admin/config")
- body = tests.ReadBodyJSON(resp)
- assert.Equal(t, resp.StatusCode, 200)
- assert.Equal(t, resp.Header.Get("Content-Type"), "application/json")
- assert.Equal(t, body["activeSize"], 3)
- assert.Equal(t, body["removeDelay"], 60)
- }
- // TestGetMachines tests '/v2/admin/machines' sends back messages of all machines.
- func TestGetMachines(t *testing.T) {
- _, etcds, err := CreateCluster(3, &os.ProcAttr{Files: []*os.File{nil, os.Stdout, os.Stderr}}, false)
- assert.NoError(t, err)
- defer DestroyCluster(etcds)
- time.Sleep(1 * time.Second)
- resp, err := tests.Get("http://localhost:7001/v2/admin/machines")
- if !assert.Equal(t, err, nil) {
- t.FailNow()
- }
- assert.Equal(t, resp.StatusCode, 200)
- assert.Equal(t, resp.Header.Get("Content-Type"), "application/json")
- machines := make([]map[string]interface{}, 0)
- b := tests.ReadBody(resp)
- json.Unmarshal(b, &machines)
- assert.Equal(t, len(machines), 3)
- if machines[0]["state"] != "leader" && machines[1]["state"] != "leader" && machines[2]["state"] != "leader" {
- t.Errorf("no leader in the cluster")
- }
- }
|