Files
ziti/controller/raft/mesh/mesh_test.go
T

163 lines
4.4 KiB
Go

package mesh
import (
"github.com/openziti/foundation/v2/versions"
"github.com/openziti/ziti/controller/event"
"runtime"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func Test_checkState_ReadonlyFalseWhenAllVersionsMatch(t *testing.T) {
m := &impl{
Peers: map[string]*Peer{
"1": {Version: testVersion("1"), Address: "1"},
"2": {Version: testVersion("1"), Address: "2"},
},
version: NewVersionProviderTest(),
}
m.updateClusterState()
assert.Equal(t, false, m.readonly.Load(), "Expected readonly to be false, got ", m.readonly.Load())
}
func Test_checkState_ReadonlyTrueWhenAllVersionsDoNotMatch(t *testing.T) {
m := &impl{
Peers: map[string]*Peer{
"1": {Version: testVersion("dne"), Address: "1"},
"2": {Version: testVersion("dne"), Address: "2"},
},
version: NewVersionProviderTest(),
}
m.updateClusterState()
assert.Equal(t, true, m.readonly.Load(), "Expected readonly to be true, got ", m.readonly.Load())
}
func Test_checkState_ReadonlySetToFalseWhenPreviouslyTrueAndAllVersionsNowMatch(t *testing.T) {
m := &impl{
Peers: map[string]*Peer{
"1": {Version: testVersion("1"), Address: "1"},
"2": {Version: testVersion("1"), Address: "2"},
},
version: NewVersionProviderTest(),
}
m.readonly.Store(true)
m.updateClusterState()
assert.Equal(t, false, m.readonly.Load(), "Expected readonly to be false, got ", m.readonly.Load())
}
func Test_AddPeer_PassesReadonlyWhenVersionsMatch(t *testing.T) {
m := &impl{
Peers: map[string]*Peer{},
version: NewVersionProviderTest(),
eventDispatcher: event.DispatcherMock{},
}
p := &Peer{Version: testVersion("1")}
assert.NoError(t, m.PeerConnected(p))
assert.Equal(t, false, m.readonly.Load(), "Expected readonly to be false, got ", m.readonly.Load())
}
func Test_AddPeer_TurnsReadonlyWhenVersionsDoNotMatch(t *testing.T) {
m := &impl{
Peers: map[string]*Peer{},
version: NewVersionProviderTest(),
eventDispatcher: event.DispatcherMock{},
}
p := &Peer{Version: testVersion("dne")}
assert.NoError(t, m.PeerConnected(p))
assert.Equal(t, true, m.readonly.Load(), "Expected readonly to be true, got ", m.readonly.Load())
}
func Test_RemovePeer_StaysReadonlyWhenDeletingPeerAndStillHasMismatchedVersions(t *testing.T) {
m := &impl{
Peers: map[string]*Peer{
"1": {Version: testVersion("dne"), Address: "1"},
"2": {Version: testVersion("dne"), Address: "2"},
},
version: NewVersionProviderTest(),
eventDispatcher: event.DispatcherMock{},
}
m.readonly.Store(true)
m.PeerDisconnected(m.Peers["1"])
assert.Equal(t, true, m.readonly.Load(), "Expected readonly to be true, got ", m.readonly.Load())
}
func Test_RemovePeer_RemovesReadonlyWhenDeletingPeerWithNoOtherMismatches(t *testing.T) {
m := &impl{
Peers: map[string]*Peer{
"1": {Version: testVersion("dne"), Address: "1"},
"2": {Version: testVersion("1"), Address: "2"},
},
version: NewVersionProviderTest(),
eventDispatcher: event.DispatcherMock{},
}
m.readonly.Store(true)
m.PeerDisconnected(m.Peers["1"])
assert.Equal(t, false, m.readonly.Load(), "Expected readonly to be false, got ", m.readonly.Load())
}
func Test_RemovePeer_RemovesReadonlyWhenDeletingLastPeer(t *testing.T) {
m := impl{
Peers: map[string]*Peer{
"1": {Version: testVersion("dne"), Address: "1"},
},
version: NewVersionProviderTest(),
eventDispatcher: event.DispatcherMock{},
}
m.readonly.Store(true)
m.PeerDisconnected(m.Peers["1"])
assert.Equal(t, false, m.readonly.Load(), "Expected readonly to be false, got ", m.readonly.Load())
}
func testVersion(v string) *versions.VersionInfo {
return &versions.VersionInfo{Version: v}
}
type VersionProviderTest struct {
}
func (v VersionProviderTest) Branch() string {
return "local"
}
func (v VersionProviderTest) EncoderDecoder() versions.VersionEncDec {
return &versions.StdVersionEncDec
}
func (v VersionProviderTest) Version() string {
return "1"
}
func (v VersionProviderTest) BuildDate() string {
return time.Now().String()
}
func (v VersionProviderTest) Revision() string {
return ""
}
func (v VersionProviderTest) AsVersionInfo() *versions.VersionInfo {
return &versions.VersionInfo{
Version: v.Version(),
Revision: v.Revision(),
BuildDate: v.BuildDate(),
OS: runtime.GOOS,
Arch: runtime.GOARCH,
}
}
func NewVersionProviderTest() versions.VersionProvider {
return &VersionProviderTest{}
}