mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
*: remove shadowing of variables from etcd and add travis test
We've been bitten by this enough times that I wrote a tool so that it never happens again.
This commit is contained in:
parent
0a5707420b
commit
92dca0af0f
@ -6,6 +6,7 @@ go:
|
|||||||
install:
|
install:
|
||||||
- go get golang.org/x/tools/cmd/cover
|
- go get golang.org/x/tools/cmd/cover
|
||||||
- go get golang.org/x/tools/cmd/vet
|
- go get golang.org/x/tools/cmd/vet
|
||||||
|
- go get github.com/barakmich/go-nyet
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- INTEGRATION=y ./test
|
- INTEGRATION=y ./test
|
||||||
|
@ -89,7 +89,7 @@ func TestV2KeysURLHelper(t *testing.T) {
|
|||||||
|
|
||||||
func TestGetAction(t *testing.T) {
|
func TestGetAction(t *testing.T) {
|
||||||
ep := url.URL{Scheme: "http", Host: "example.com/v2/keys"}
|
ep := url.URL{Scheme: "http", Host: "example.com/v2/keys"}
|
||||||
wantURL := &url.URL{
|
baseWantURL := &url.URL{
|
||||||
Scheme: "http",
|
Scheme: "http",
|
||||||
Host: "example.com",
|
Host: "example.com",
|
||||||
Path: "/v2/keys/foo/bar",
|
Path: "/v2/keys/foo/bar",
|
||||||
@ -117,7 +117,7 @@ func TestGetAction(t *testing.T) {
|
|||||||
}
|
}
|
||||||
got := *f.HTTPRequest(ep)
|
got := *f.HTTPRequest(ep)
|
||||||
|
|
||||||
wantURL := wantURL
|
wantURL := baseWantURL
|
||||||
wantURL.RawQuery = tt.wantQuery
|
wantURL.RawQuery = tt.wantQuery
|
||||||
|
|
||||||
err := assertResponse(got, wantURL, wantHeader, nil)
|
err := assertResponse(got, wantURL, wantHeader, nil)
|
||||||
@ -129,7 +129,7 @@ func TestGetAction(t *testing.T) {
|
|||||||
|
|
||||||
func TestWaitAction(t *testing.T) {
|
func TestWaitAction(t *testing.T) {
|
||||||
ep := url.URL{Scheme: "http", Host: "example.com/v2/keys"}
|
ep := url.URL{Scheme: "http", Host: "example.com/v2/keys"}
|
||||||
wantURL := &url.URL{
|
baseWantURL := &url.URL{
|
||||||
Scheme: "http",
|
Scheme: "http",
|
||||||
Host: "example.com",
|
Host: "example.com",
|
||||||
Path: "/v2/keys/foo/bar",
|
Path: "/v2/keys/foo/bar",
|
||||||
@ -166,7 +166,7 @@ func TestWaitAction(t *testing.T) {
|
|||||||
}
|
}
|
||||||
got := *f.HTTPRequest(ep)
|
got := *f.HTTPRequest(ep)
|
||||||
|
|
||||||
wantURL := wantURL
|
wantURL := baseWantURL
|
||||||
wantURL.RawQuery = tt.wantQuery
|
wantURL.RawQuery = tt.wantQuery
|
||||||
|
|
||||||
err := assertResponse(got, wantURL, wantHeader, nil)
|
err := assertResponse(got, wantURL, wantHeader, nil)
|
||||||
|
@ -193,14 +193,14 @@ func TestCheckCluster(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
c := &clientWithResp{rs: rs}
|
c := &clientWithResp{rs: rs}
|
||||||
d := discovery{cluster: cluster, id: 1, c: c}
|
dBase := discovery{cluster: cluster, id: 1, c: c}
|
||||||
|
|
||||||
cRetry := &clientWithRetry{failTimes: 3}
|
cRetry := &clientWithRetry{failTimes: 3}
|
||||||
cRetry.rs = rs
|
cRetry.rs = rs
|
||||||
fc := clockwork.NewFakeClock()
|
fc := clockwork.NewFakeClock()
|
||||||
dRetry := discovery{cluster: cluster, id: 1, c: cRetry, clock: fc}
|
dRetry := discovery{cluster: cluster, id: 1, c: cRetry, clock: fc}
|
||||||
|
|
||||||
for _, d := range []discovery{d, dRetry} {
|
for _, d := range []discovery{dBase, dRetry} {
|
||||||
go func() {
|
go func() {
|
||||||
for i := uint(1); i <= maxRetryInTest; i++ {
|
for i := uint(1); i <= maxRetryInTest; i++ {
|
||||||
fc.BlockUntil(1)
|
fc.BlockUntil(1)
|
||||||
@ -263,7 +263,7 @@ func TestWaitNodes(t *testing.T) {
|
|||||||
for i, tt := range tests {
|
for i, tt := range tests {
|
||||||
// Basic case
|
// Basic case
|
||||||
c := &clientWithResp{nil, &watcherWithResp{tt.rs}}
|
c := &clientWithResp{nil, &watcherWithResp{tt.rs}}
|
||||||
d := &discovery{cluster: "1000", c: c}
|
dBase := &discovery{cluster: "1000", c: c}
|
||||||
|
|
||||||
// Retry case
|
// Retry case
|
||||||
retryScanResp := make([]*client.Response, 0)
|
retryScanResp := make([]*client.Response, 0)
|
||||||
@ -291,7 +291,7 @@ func TestWaitNodes(t *testing.T) {
|
|||||||
clock: fc,
|
clock: fc,
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, d := range []*discovery{d, dRetry} {
|
for _, d := range []*discovery{dBase, dRetry} {
|
||||||
go func() {
|
go func() {
|
||||||
for i := uint(1); i <= maxRetryInTest; i++ {
|
for i := uint(1); i <= maxRetryInTest; i++ {
|
||||||
fc.BlockUntil(1)
|
fc.BlockUntil(1)
|
||||||
|
@ -134,10 +134,10 @@ func actionMemberAdd(c *cli.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
conf := []string{}
|
conf := []string{}
|
||||||
for _, m := range members {
|
for _, memb := range members {
|
||||||
for _, u := range m.PeerURLs {
|
for _, u := range memb.PeerURLs {
|
||||||
n := m.Name
|
n := memb.Name
|
||||||
if m.ID == newID {
|
if memb.ID == newID {
|
||||||
n = newName
|
n = newName
|
||||||
}
|
}
|
||||||
conf = append(conf, fmt.Sprintf("%s=%s", n, u))
|
conf = append(conf, fmt.Sprintf("%s=%s", n, u))
|
||||||
@ -160,8 +160,9 @@ func actionMemberRemove(c *cli.Context) {
|
|||||||
|
|
||||||
mAPI := mustNewMembersAPI(c)
|
mAPI := mustNewMembersAPI(c)
|
||||||
// Get the list of members.
|
// Get the list of members.
|
||||||
listctx, cancel := context.WithTimeout(context.Background(), client.DefaultRequestTimeout)
|
listctx, listCancel := context.WithTimeout(context.Background(), client.DefaultRequestTimeout)
|
||||||
members, err := mAPI.List(listctx)
|
members, err := mAPI.List(listctx)
|
||||||
|
listCancel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintln(os.Stderr, "Error while verifying ID against known members:", err.Error())
|
fmt.Fprintln(os.Stderr, "Error while verifying ID against known members:", err.Error())
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
@ -184,9 +185,9 @@ func actionMemberRemove(c *cli.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Actually attempt to remove the member.
|
// Actually attempt to remove the member.
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), client.DefaultRequestTimeout)
|
ctx, removeCancel := context.WithTimeout(context.Background(), client.DefaultRequestTimeout)
|
||||||
err = mAPI.Remove(ctx, removalID)
|
err = mAPI.Remove(ctx, removalID)
|
||||||
cancel()
|
removeCancel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "Recieved an error trying to remove member %s: %s", removalID, err.Error())
|
fmt.Fprintf(os.Stderr, "Recieved an error trying to remove member %s: %s", removalID, err.Error())
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
@ -1064,13 +1064,13 @@ func TestServeMembersFail(t *testing.T) {
|
|||||||
|
|
||||||
func TestWriteEvent(t *testing.T) {
|
func TestWriteEvent(t *testing.T) {
|
||||||
// nil event should not panic
|
// nil event should not panic
|
||||||
rw := httptest.NewRecorder()
|
rec := httptest.NewRecorder()
|
||||||
writeKeyEvent(rw, nil, dummyRaftTimer{})
|
writeKeyEvent(rec, nil, dummyRaftTimer{})
|
||||||
h := rw.Header()
|
h := rec.Header()
|
||||||
if len(h) > 0 {
|
if len(h) > 0 {
|
||||||
t.Fatalf("unexpected non-empty headers: %#v", h)
|
t.Fatalf("unexpected non-empty headers: %#v", h)
|
||||||
}
|
}
|
||||||
b := rw.Body.String()
|
b := rec.Body.String()
|
||||||
if len(b) > 0 {
|
if len(b) > 0 {
|
||||||
t.Fatalf("unexpected non-empty body: %q", b)
|
t.Fatalf("unexpected non-empty body: %q", b)
|
||||||
}
|
}
|
||||||
|
@ -76,13 +76,13 @@ func (fs *errServer) UpdateMember(ctx context.Context, m etcdserver.Member) erro
|
|||||||
|
|
||||||
func TestWriteError(t *testing.T) {
|
func TestWriteError(t *testing.T) {
|
||||||
// nil error should not panic
|
// nil error should not panic
|
||||||
rw := httptest.NewRecorder()
|
rec := httptest.NewRecorder()
|
||||||
writeError(rw, nil)
|
writeError(rec, nil)
|
||||||
h := rw.Header()
|
h := rec.Header()
|
||||||
if len(h) > 0 {
|
if len(h) > 0 {
|
||||||
t.Fatalf("unexpected non-empty headers: %#v", h)
|
t.Fatalf("unexpected non-empty headers: %#v", h)
|
||||||
}
|
}
|
||||||
b := rw.Body.String()
|
b := rec.Body.String()
|
||||||
if len(b) > 0 {
|
if len(b) > 0 {
|
||||||
t.Fatalf("unexpected non-empty body: %q", b)
|
t.Fatalf("unexpected non-empty body: %q", b)
|
||||||
}
|
}
|
||||||
|
@ -177,11 +177,11 @@ func NewServer(cfg *ServerConfig) (*EtcdServer, error) {
|
|||||||
return nil, fmt.Errorf("member %s has already been bootstrapped", m.ID)
|
return nil, fmt.Errorf("member %s has already been bootstrapped", m.ID)
|
||||||
}
|
}
|
||||||
if cfg.ShouldDiscover() {
|
if cfg.ShouldDiscover() {
|
||||||
s, err := discovery.JoinCluster(cfg.DiscoveryURL, cfg.DiscoveryProxy, m.ID, cfg.Cluster.String())
|
str, err := discovery.JoinCluster(cfg.DiscoveryURL, cfg.DiscoveryProxy, m.ID, cfg.Cluster.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if cfg.Cluster, err = NewClusterFromString(cfg.Cluster.token, s); err != nil {
|
if cfg.Cluster, err = NewClusterFromString(cfg.Cluster.token, str); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if err := cfg.Cluster.Validate(); err != nil {
|
if err := cfg.Cluster.Validate(); err != nil {
|
||||||
|
@ -1027,8 +1027,8 @@ func TestPublish(t *testing.T) {
|
|||||||
t.Errorf("method = %s, want PUT", r.Method)
|
t.Errorf("method = %s, want PUT", r.Method)
|
||||||
}
|
}
|
||||||
wm := Member{ID: 1, Attributes: Attributes{Name: "node1", ClientURLs: []string{"http://a", "http://b"}}}
|
wm := Member{ID: 1, Attributes: Attributes{Name: "node1", ClientURLs: []string{"http://a", "http://b"}}}
|
||||||
if w := path.Join(memberStoreKey(wm.ID), attributesSuffix); r.Path != w {
|
if wpath := path.Join(memberStoreKey(wm.ID), attributesSuffix); r.Path != wpath {
|
||||||
t.Errorf("path = %s, want %s", r.Path, w)
|
t.Errorf("path = %s, want %s", r.Path, wpath)
|
||||||
}
|
}
|
||||||
var gattr Attributes
|
var gattr Attributes
|
||||||
if err := json.Unmarshal([]byte(r.Val), &gattr); err != nil {
|
if err := json.Unmarshal([]byte(r.Val), &gattr); err != nil {
|
||||||
@ -1072,8 +1072,8 @@ func TestPublishRetry(t *testing.T) {
|
|||||||
|
|
||||||
action := n.Action()
|
action := n.Action()
|
||||||
// multiple Proposes
|
// multiple Proposes
|
||||||
if n := len(action); n < 2 {
|
if cnt := len(action); cnt < 2 {
|
||||||
t.Errorf("len(action) = %d, want >= 2", n)
|
t.Errorf("len(action) = %d, want >= 2", cnt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,13 +186,13 @@ func clusterMustProgress(t *testing.T, membs []*member) {
|
|||||||
|
|
||||||
for i, m := range membs {
|
for i, m := range membs {
|
||||||
u := m.URL()
|
u := m.URL()
|
||||||
cc := mustNewHTTPClient(t, []string{u})
|
mcc := mustNewHTTPClient(t, []string{u})
|
||||||
kapi := client.NewKeysAPI(cc)
|
mkapi := client.NewKeysAPI(mcc)
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), requestTimeout)
|
mctx, mcancel := context.WithTimeout(context.Background(), requestTimeout)
|
||||||
if _, err := kapi.Watch(key, resp.Node.ModifiedIndex).Next(ctx); err != nil {
|
if _, err := mkapi.Watch(key, resp.Node.ModifiedIndex).Next(mctx); err != nil {
|
||||||
t.Fatalf("#%d: watch on %s error: %v", i, u, err)
|
t.Fatalf("#%d: watch on %s error: %v", i, u, err)
|
||||||
}
|
}
|
||||||
cancel()
|
mcancel()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -327,21 +327,21 @@ func TestV2Delete(t *testing.T) {
|
|||||||
|
|
||||||
v := url.Values{}
|
v := url.Values{}
|
||||||
v.Set("value", "XXX")
|
v.Set("value", "XXX")
|
||||||
resp, err := tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foo"), v)
|
r, err := tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foo"), v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
resp.Body.Close()
|
r.Body.Close()
|
||||||
resp, err = tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/emptydir?dir=true"), v)
|
r, err = tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/emptydir?dir=true"), v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
resp.Body.Close()
|
r.Body.Close()
|
||||||
resp, err = tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foodir/bar?dir=true"), v)
|
r, err = tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foodir/bar?dir=true"), v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
resp.Body.Close()
|
r.Body.Close()
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
relativeURL string
|
relativeURL string
|
||||||
@ -423,17 +423,17 @@ func TestV2CAD(t *testing.T) {
|
|||||||
|
|
||||||
v := url.Values{}
|
v := url.Values{}
|
||||||
v.Set("value", "XXX")
|
v.Set("value", "XXX")
|
||||||
resp, err := tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foo"), v)
|
r, err := tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foo"), v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
resp.Body.Close()
|
r.Body.Close()
|
||||||
|
|
||||||
resp, err = tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foovalue"), v)
|
r, err = tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foovalue"), v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
resp.Body.Close()
|
r.Body.Close()
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
relativeURL string
|
relativeURL string
|
||||||
@ -582,11 +582,11 @@ func TestV2Get(t *testing.T) {
|
|||||||
|
|
||||||
v := url.Values{}
|
v := url.Values{}
|
||||||
v.Set("value", "XXX")
|
v.Set("value", "XXX")
|
||||||
resp, err := tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foo/bar/zar"), v)
|
r, err := tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foo/bar/zar"), v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
resp.Body.Close()
|
r.Body.Close()
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
relativeURL string
|
relativeURL string
|
||||||
@ -676,11 +676,11 @@ func TestV2QuorumGet(t *testing.T) {
|
|||||||
|
|
||||||
v := url.Values{}
|
v := url.Values{}
|
||||||
v.Set("value", "XXX")
|
v.Set("value", "XXX")
|
||||||
resp, err := tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foo/bar/zar?quorum=true"), v)
|
r, err := tc.PutForm(fmt.Sprintf("%s%s", u, "/v2/keys/foo/bar/zar?quorum=true"), v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
resp.Body.Close()
|
r.Body.Close()
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
relativeURL string
|
relativeURL string
|
||||||
|
@ -175,8 +175,8 @@ func GuessNodeID(nodes map[string]uint64, snap4 *Snapshot4, cfg *Config4, name s
|
|||||||
delete(snapNodes, p.Name)
|
delete(snapNodes, p.Name)
|
||||||
}
|
}
|
||||||
if len(snapNodes) == 1 {
|
if len(snapNodes) == 1 {
|
||||||
for name, id := range nodes {
|
for nodename, id := range nodes {
|
||||||
log.Printf("Autodetected from snapshot: name %s", name)
|
log.Printf("Autodetected from snapshot: name %s", nodename)
|
||||||
return id
|
return id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -186,8 +186,8 @@ func GuessNodeID(nodes map[string]uint64, snap4 *Snapshot4, cfg *Config4, name s
|
|||||||
delete(nodes, p.Name)
|
delete(nodes, p.Name)
|
||||||
}
|
}
|
||||||
if len(nodes) == 1 {
|
if len(nodes) == 1 {
|
||||||
for name, id := range nodes {
|
for nodename, id := range nodes {
|
||||||
log.Printf("Autodetected name %s", name)
|
log.Printf("Autodetected name %s", nodename)
|
||||||
return id
|
return id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -106,12 +106,12 @@ func checkInternalVersion(fs *flag.FlagSet) version {
|
|||||||
log.Fatalf("starter: please set --data-dir or ETCD_DATA_DIR for etcd")
|
log.Fatalf("starter: please set --data-dir or ETCD_DATA_DIR for etcd")
|
||||||
}
|
}
|
||||||
// check the data directory
|
// check the data directory
|
||||||
ver, err := checkVersion(dataDir)
|
dataver, err := checkVersion(dataDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("starter: failed to detect etcd version in %v: %v", dataDir, err)
|
log.Fatalf("starter: failed to detect etcd version in %v: %v", dataDir, err)
|
||||||
}
|
}
|
||||||
log.Printf("starter: detect etcd version %s in %s", ver, dataDir)
|
log.Printf("starter: detect etcd version %s in %s", dataver, dataDir)
|
||||||
switch ver {
|
switch dataver {
|
||||||
case v2_0:
|
case v2_0:
|
||||||
return internalV2
|
return internalV2
|
||||||
case v2_0Proxy:
|
case v2_0Proxy:
|
||||||
|
@ -296,15 +296,15 @@ func TestCompactionSideEffects(t *testing.T) {
|
|||||||
t.Errorf("lastIndex = %d, want %d", raftLog.lastIndex(), lastIndex)
|
t.Errorf("lastIndex = %d, want %d", raftLog.lastIndex(), lastIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := offset; i <= raftLog.lastIndex(); i++ {
|
for j := offset; j <= raftLog.lastIndex(); j++ {
|
||||||
if raftLog.term(i) != i {
|
if raftLog.term(j) != j {
|
||||||
t.Errorf("term(%d) = %d, want %d", i, raftLog.term(i), i)
|
t.Errorf("term(%d) = %d, want %d", j, raftLog.term(j), j)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := offset; i <= raftLog.lastIndex(); i++ {
|
for j := offset; j <= raftLog.lastIndex(); j++ {
|
||||||
if !raftLog.matchTerm(i, i) {
|
if !raftLog.matchTerm(j, j) {
|
||||||
t.Errorf("matchTerm(%d) = false, want true", i)
|
t.Errorf("matchTerm(%d) = false, want true", j)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -354,9 +354,9 @@ func TestNextEnts(t *testing.T) {
|
|||||||
raftLog.maybeCommit(5, 1)
|
raftLog.maybeCommit(5, 1)
|
||||||
raftLog.appliedTo(tt.applied)
|
raftLog.appliedTo(tt.applied)
|
||||||
|
|
||||||
ents := raftLog.nextEnts()
|
nents := raftLog.nextEnts()
|
||||||
if !reflect.DeepEqual(ents, tt.wents) {
|
if !reflect.DeepEqual(nents, tt.wents) {
|
||||||
t.Errorf("#%d: ents = %+v, want %+v", i, ents, tt.wents)
|
t.Errorf("#%d: nents = %+v, want %+v", i, nents, tt.wents)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -649,10 +649,10 @@ func TestTerm(t *testing.T) {
|
|||||||
{offset + num, 0},
|
{offset + num, 0},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range tests {
|
for j, tt := range tests {
|
||||||
term := l.term(tt.index)
|
term := l.term(tt.index)
|
||||||
if !reflect.DeepEqual(term, tt.w) {
|
if !reflect.DeepEqual(term, tt.w) {
|
||||||
t.Errorf("#%d: at = %d, want %d", i, term, tt.w)
|
t.Errorf("#%d: at = %d, want %d", j, term, tt.w)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -712,18 +712,18 @@ func TestSlice(t *testing.T) {
|
|||||||
{offset + num, offset + num + 1, nil, true},
|
{offset + num, offset + num + 1, nil, true},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range tests {
|
for j, tt := range tests {
|
||||||
func() {
|
func() {
|
||||||
defer func() {
|
defer func() {
|
||||||
if r := recover(); r != nil {
|
if r := recover(); r != nil {
|
||||||
if !tt.wpanic {
|
if !tt.wpanic {
|
||||||
t.Errorf("%d: panic = %v, want %v: %v", i, true, false, r)
|
t.Errorf("%d: panic = %v, want %v: %v", j, true, false, r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
g := l.slice(tt.from, tt.to)
|
g := l.slice(tt.from, tt.to)
|
||||||
if !reflect.DeepEqual(g, tt.w) {
|
if !reflect.DeepEqual(g, tt.w) {
|
||||||
t.Errorf("#%d: from %d to %d = %v, want %v", i, tt.from, tt.to, g, tt.w)
|
t.Errorf("#%d: from %d to %d = %v, want %v", j, tt.from, tt.to, g, tt.w)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
@ -332,10 +332,10 @@ func TestNodeStart(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
n.Propose(ctx, []byte("foo"))
|
n.Propose(ctx, []byte("foo"))
|
||||||
if g := <-n.Ready(); !reflect.DeepEqual(g, wants[1]) {
|
if g2 := <-n.Ready(); !reflect.DeepEqual(g2, wants[1]) {
|
||||||
t.Errorf("#%d: g = %+v,\n w %+v", 2, g, wants[1])
|
t.Errorf("#%d: g = %+v,\n w %+v", 2, g2, wants[1])
|
||||||
} else {
|
} else {
|
||||||
storage.Append(g.Entries)
|
storage.Append(g2.Entries)
|
||||||
n.Advance()
|
n.Advance()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -774,7 +774,7 @@ func TestVoteRequest(t *testing.T) {
|
|||||||
{[]pb.Entry{{Term: 1, Index: 1}}, 2},
|
{[]pb.Entry{{Term: 1, Index: 1}}, 2},
|
||||||
{[]pb.Entry{{Term: 1, Index: 1}, {Term: 2, Index: 2}}, 3},
|
{[]pb.Entry{{Term: 1, Index: 1}, {Term: 2, Index: 2}}, 3},
|
||||||
}
|
}
|
||||||
for i, tt := range tests {
|
for j, tt := range tests {
|
||||||
r := newRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage(), 0)
|
r := newRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage(), 0)
|
||||||
r.Step(pb.Message{
|
r.Step(pb.Message{
|
||||||
From: 2, To: 1, Type: pb.MsgApp, Term: tt.wterm - 1, LogTerm: 0, Index: 0, Entries: tt.ents,
|
From: 2, To: 1, Type: pb.MsgApp, Term: tt.wterm - 1, LogTerm: 0, Index: 0, Entries: tt.ents,
|
||||||
@ -788,7 +788,7 @@ func TestVoteRequest(t *testing.T) {
|
|||||||
msgs := r.readMessages()
|
msgs := r.readMessages()
|
||||||
sort.Sort(messageSlice(msgs))
|
sort.Sort(messageSlice(msgs))
|
||||||
if len(msgs) != 2 {
|
if len(msgs) != 2 {
|
||||||
t.Fatalf("#%d: len(msg) = %d, want %d", i, len(msgs), 2)
|
t.Fatalf("#%d: len(msg) = %d, want %d", j, len(msgs), 2)
|
||||||
}
|
}
|
||||||
for i, m := range msgs {
|
for i, m := range msgs {
|
||||||
if m.Type != pb.MsgVote {
|
if m.Type != pb.MsgVote {
|
||||||
|
@ -510,7 +510,7 @@ func TestOldMessages(t *testing.T) {
|
|||||||
// commit a new entry
|
// commit a new entry
|
||||||
tt.send(pb.Message{From: 1, To: 1, Type: pb.MsgProp, Entries: []pb.Entry{{Data: []byte("somedata")}}})
|
tt.send(pb.Message{From: 1, To: 1, Type: pb.MsgProp, Entries: []pb.Entry{{Data: []byte("somedata")}}})
|
||||||
|
|
||||||
l := &raftLog{
|
ilog := &raftLog{
|
||||||
storage: &MemoryStorage{
|
storage: &MemoryStorage{
|
||||||
ents: []pb.Entry{
|
ents: []pb.Entry{
|
||||||
{}, {Data: nil, Term: 1, Index: 1},
|
{}, {Data: nil, Term: 1, Index: 1},
|
||||||
@ -521,7 +521,7 @@ func TestOldMessages(t *testing.T) {
|
|||||||
unstable: unstable{offset: 5},
|
unstable: unstable{offset: 5},
|
||||||
committed: 4,
|
committed: 4,
|
||||||
}
|
}
|
||||||
base := ltoa(l)
|
base := ltoa(ilog)
|
||||||
for i, p := range tt.peers {
|
for i, p := range tt.peers {
|
||||||
if sm, ok := p.(*raft); ok {
|
if sm, ok := p.(*raft); ok {
|
||||||
l := ltoa(sm.raftLog)
|
l := ltoa(sm.raftLog)
|
||||||
@ -548,7 +548,7 @@ func TestProposal(t *testing.T) {
|
|||||||
{newNetwork(nil, nopStepper, nopStepper, nil, nil), true},
|
{newNetwork(nil, nopStepper, nopStepper, nil, nil), true},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range tests {
|
for j, tt := range tests {
|
||||||
send := func(m pb.Message) {
|
send := func(m pb.Message) {
|
||||||
defer func() {
|
defer func() {
|
||||||
// only recover is we expect it to panic so
|
// only recover is we expect it to panic so
|
||||||
@ -556,7 +556,7 @@ func TestProposal(t *testing.T) {
|
|||||||
if !tt.success {
|
if !tt.success {
|
||||||
e := recover()
|
e := recover()
|
||||||
if e != nil {
|
if e != nil {
|
||||||
t.Logf("#%d: err: %s", i, e)
|
t.Logf("#%d: err: %s", j, e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
@ -591,7 +591,7 @@ func TestProposal(t *testing.T) {
|
|||||||
}
|
}
|
||||||
sm := tt.network.peers[1].(*raft)
|
sm := tt.network.peers[1].(*raft)
|
||||||
if g := sm.Term; g != 1 {
|
if g := sm.Term; g != 1 {
|
||||||
t.Errorf("#%d: term = %d, want %d", i, g, 1)
|
t.Errorf("#%d: term = %d, want %d", j, g, 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -603,7 +603,7 @@ func TestProposalByProxy(t *testing.T) {
|
|||||||
newNetwork(nil, nil, nopStepper),
|
newNetwork(nil, nil, nopStepper),
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range tests {
|
for j, tt := range tests {
|
||||||
// promote 0 the leader
|
// promote 0 the leader
|
||||||
tt.send(pb.Message{From: 1, To: 1, Type: pb.MsgHup})
|
tt.send(pb.Message{From: 1, To: 1, Type: pb.MsgHup})
|
||||||
|
|
||||||
@ -629,7 +629,7 @@ func TestProposalByProxy(t *testing.T) {
|
|||||||
}
|
}
|
||||||
sm := tt.peers[1].(*raft)
|
sm := tt.peers[1].(*raft)
|
||||||
if g := sm.Term; g != 1 {
|
if g := sm.Term; g != 1 {
|
||||||
t.Errorf("#%d: term = %d, want %d", i, g, 1)
|
t.Errorf("#%d: term = %d, want %d", j, g, 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1601,8 +1601,8 @@ func newNetwork(peers ...Interface) *network {
|
|||||||
npeers := make(map[uint64]Interface, size)
|
npeers := make(map[uint64]Interface, size)
|
||||||
nstorage := make(map[uint64]*MemoryStorage, size)
|
nstorage := make(map[uint64]*MemoryStorage, size)
|
||||||
|
|
||||||
for i, p := range peers {
|
for j, p := range peers {
|
||||||
id := peerAddrs[i]
|
id := peerAddrs[j]
|
||||||
switch v := p.(type) {
|
switch v := p.(type) {
|
||||||
case nil:
|
case nil:
|
||||||
nstorage[id] = NewMemoryStorage()
|
nstorage[id] = NewMemoryStorage()
|
||||||
|
@ -88,8 +88,8 @@ func TestFullEventQueue(t *testing.T) {
|
|||||||
|
|
||||||
// Add
|
// Add
|
||||||
for i := 0; i < 1000; i++ {
|
for i := 0; i < 1000; i++ {
|
||||||
e := newEvent(Create, "/foo", uint64(i), uint64(i))
|
ce := newEvent(Create, "/foo", uint64(i), uint64(i))
|
||||||
eh.addEvent(e)
|
eh.addEvent(ce)
|
||||||
e, err := eh.scan("/foo", true, uint64(i-1))
|
e, err := eh.scan("/foo", true, uint64(i-1))
|
||||||
if i > 0 {
|
if i > 0 {
|
||||||
if e == nil || err != nil {
|
if e == nil || err != nil {
|
||||||
|
@ -51,10 +51,10 @@ func TestHeapUpdate(t *testing.T) {
|
|||||||
|
|
||||||
// add from older expire time to earlier expire time
|
// add from older expire time to earlier expire time
|
||||||
// the path is equal to ttl from now
|
// the path is equal to ttl from now
|
||||||
for i, n := range kvs {
|
for i := range kvs {
|
||||||
path := fmt.Sprintf("%v", 10-i)
|
path := fmt.Sprintf("%v", 10-i)
|
||||||
m := time.Duration(10 - i)
|
m := time.Duration(10 - i)
|
||||||
n = newKV(nil, path, path, 0, nil, "", time.Now().Add(time.Second*m))
|
n := newKV(nil, path, path, 0, nil, "", time.Now().Add(time.Second*m))
|
||||||
kvs[i] = n
|
kvs[i] = n
|
||||||
h.push(n)
|
h.push(n)
|
||||||
}
|
}
|
||||||
|
9
test
9
test
@ -60,4 +60,13 @@ if [ -n "${vetRes}" ]; then
|
|||||||
exit 255
|
exit 255
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -f `which go-nyet` ]; then
|
||||||
|
echo "Checking go-nyet..."
|
||||||
|
nyetRes=$(go-nyet -exitWith 0 $FMT)
|
||||||
|
if [ -n "${nyetRes}" ]; then
|
||||||
|
echo -e "go-nyet checking failed:\n${nyetRes}"
|
||||||
|
exit 255
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Success"
|
echo "Success"
|
||||||
|
@ -323,23 +323,23 @@ func TestRecoverAfterCut(t *testing.T) {
|
|||||||
}
|
}
|
||||||
defer os.RemoveAll(p)
|
defer os.RemoveAll(p)
|
||||||
|
|
||||||
w, err := Create(p, []byte("metadata"))
|
md, err := Create(p, []byte("metadata"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
for i := 0; i < 10; i++ {
|
for i := 0; i < 10; i++ {
|
||||||
if err = w.SaveSnapshot(walpb.Snapshot{Index: uint64(i)}); err != nil {
|
if err = md.SaveSnapshot(walpb.Snapshot{Index: uint64(i)}); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
es := []raftpb.Entry{{Index: uint64(i)}}
|
es := []raftpb.Entry{{Index: uint64(i)}}
|
||||||
if err = w.Save(raftpb.HardState{}, es); err != nil {
|
if err = md.Save(raftpb.HardState{}, es); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if err = w.Cut(); err != nil {
|
if err = md.Cut(); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
w.Close()
|
md.Close()
|
||||||
|
|
||||||
if err := os.Remove(path.Join(p, walName(4, 4))); err != nil {
|
if err := os.Remove(path.Join(p, walName(4, 4))); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user