etcdserver: check cluster version compability when joining
This commit is contained in:
@ -19,6 +19,7 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/coreos/etcd/Godeps/_workspace/src/github.com/coreos/go-semver/semver"
|
||||
"github.com/coreos/etcd/pkg/types"
|
||||
"github.com/coreos/etcd/version"
|
||||
)
|
||||
|
||||
@ -57,3 +58,74 @@ func TestDecideClusterVersion(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsCompatibleWithVers(t *testing.T) {
|
||||
tests := []struct {
|
||||
vers map[string]*version.Versions
|
||||
local types.ID
|
||||
minV, maxV *semver.Version
|
||||
wok bool
|
||||
}{
|
||||
// too low
|
||||
{
|
||||
map[string]*version.Versions{
|
||||
"a": &version.Versions{Server: "2.0.0", Cluster: "not_decided"},
|
||||
"b": &version.Versions{Server: "2.1.0", Cluster: "2.1.0"},
|
||||
"c": &version.Versions{Server: "2.1.0", Cluster: "2.1.0"},
|
||||
},
|
||||
0xa,
|
||||
semver.Must(semver.NewVersion("2.0.0")), semver.Must(semver.NewVersion("2.0.0")),
|
||||
false,
|
||||
},
|
||||
{
|
||||
map[string]*version.Versions{
|
||||
"a": &version.Versions{Server: "2.1.0", Cluster: "not_decided"},
|
||||
"b": &version.Versions{Server: "2.1.0", Cluster: "2.1.0"},
|
||||
"c": &version.Versions{Server: "2.1.0", Cluster: "2.1.0"},
|
||||
},
|
||||
0xa,
|
||||
semver.Must(semver.NewVersion("2.0.0")), semver.Must(semver.NewVersion("2.1.0")),
|
||||
true,
|
||||
},
|
||||
// too high
|
||||
{
|
||||
map[string]*version.Versions{
|
||||
"a": &version.Versions{Server: "2.2.0", Cluster: "not_decided"},
|
||||
"b": &version.Versions{Server: "2.0.0", Cluster: "2.0.0"},
|
||||
"c": &version.Versions{Server: "2.0.0", Cluster: "2.0.0"},
|
||||
},
|
||||
0xa,
|
||||
semver.Must(semver.NewVersion("2.1.0")), semver.Must(semver.NewVersion("2.2.0")),
|
||||
false,
|
||||
},
|
||||
// cannot get b's version, expect ok
|
||||
{
|
||||
map[string]*version.Versions{
|
||||
"a": &version.Versions{Server: "2.1.0", Cluster: "not_decided"},
|
||||
"b": nil,
|
||||
"c": &version.Versions{Server: "2.1.0", Cluster: "2.1.0"},
|
||||
},
|
||||
0xa,
|
||||
semver.Must(semver.NewVersion("2.0.0")), semver.Must(semver.NewVersion("2.1.0")),
|
||||
true,
|
||||
},
|
||||
// cannot get b and c's version, expect not ok
|
||||
{
|
||||
map[string]*version.Versions{
|
||||
"a": &version.Versions{Server: "2.1.0", Cluster: "not_decided"},
|
||||
"b": nil,
|
||||
"c": nil,
|
||||
},
|
||||
0xa,
|
||||
semver.Must(semver.NewVersion("2.0.0")), semver.Must(semver.NewVersion("2.1.0")),
|
||||
false,
|
||||
},
|
||||
}
|
||||
|
||||
for i, tt := range tests {
|
||||
ok := isCompatibleWithVers(tt.vers, tt.local, tt.minV, tt.maxV)
|
||||
if ok != tt.wok {
|
||||
t.Errorf("#%d: ok = %+v, want %+v", i, ok, tt.wok)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user