diff --git a/rafthttp/message_test.go b/rafthttp/message_test.go new file mode 100644 index 000000000..2e6e8d69c --- /dev/null +++ b/rafthttp/message_test.go @@ -0,0 +1,65 @@ +// Copyright 2015 CoreOS, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package rafthttp + +import ( + "bytes" + "reflect" + "testing" + + "github.com/coreos/etcd/raft/raftpb" +) + +func TestMessage(t *testing.T) { + tests := []raftpb.Message{ + { + Type: raftpb.MsgApp, + From: 1, + To: 2, + Term: 1, + LogTerm: 1, + Index: 3, + Entries: []raftpb.Entry{{Term: 1, Index: 4}}, + }, + { + Type: raftpb.MsgProp, + From: 1, + To: 2, + Entries: []raftpb.Entry{ + {Data: []byte("some data")}, + {Data: []byte("some data")}, + {Data: []byte("some data")}, + }, + }, + linkHeartbeatMessage, + } + for i, tt := range tests { + b := &bytes.Buffer{} + enc := &messageEncoder{w: b} + if err := enc.encode(tt); err != nil { + t.Errorf("#%d: unexpected encode message error: %v", i, err) + continue + } + dec := &messageDecoder{r: b} + m, err := dec.decode() + if err != nil { + t.Errorf("#%d: unexpected decode message error: %v", i, err) + continue + } + if !reflect.DeepEqual(m, tt) { + t.Errorf("#%d: message = %+v, want %+v", i, m, tt) + } + } +} diff --git a/rafthttp/msgapp_test.go b/rafthttp/msgapp_test.go new file mode 100644 index 000000000..1680bc8db --- /dev/null +++ b/rafthttp/msgapp_test.go @@ -0,0 +1,70 @@ +// Copyright 2015 CoreOS, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package rafthttp + +import ( + "bytes" + "reflect" + "testing" + + "github.com/coreos/etcd/etcdserver/stats" + "github.com/coreos/etcd/pkg/types" + "github.com/coreos/etcd/raft/raftpb" +) + +func TestMsgApp(t *testing.T) { + tests := []raftpb.Message{ + { + Type: raftpb.MsgApp, + From: 1, + To: 2, + Term: 1, + LogTerm: 1, + Index: 3, + Entries: []raftpb.Entry{{Term: 1, Index: 4}}, + }, + { + Type: raftpb.MsgApp, + From: 1, + To: 2, + Term: 1, + LogTerm: 1, + Index: 0, + Entries: []raftpb.Entry{ + {Term: 1, Index: 1, Data: []byte("some data")}, + {Term: 1, Index: 2, Data: []byte("some data")}, + {Term: 1, Index: 3, Data: []byte("some data")}, + }, + }, + linkHeartbeatMessage, + } + for i, tt := range tests { + b := &bytes.Buffer{} + enc := &msgAppEncoder{w: b, fs: &stats.FollowerStats{}} + if err := enc.encode(tt); err != nil { + t.Errorf("#%d: unexpected encode message error: %v", i, err) + continue + } + dec := &msgAppDecoder{r: b, local: types.ID(tt.To), remote: types.ID(tt.From), term: tt.Term} + m, err := dec.decode() + if err != nil { + t.Errorf("#%d: unexpected decode message error: %v", i, err) + continue + } + if !reflect.DeepEqual(m, tt) { + t.Errorf("#%d: message = %+v, want %+v", i, m, tt) + } + } +} diff --git a/rafthttp/entry_test.go b/rafthttp/util_test.go similarity index 56% rename from rafthttp/entry_test.go rename to rafthttp/util_test.go index 37730d072..904e39248 100644 --- a/rafthttp/entry_test.go +++ b/rafthttp/util_test.go @@ -14,42 +14,33 @@ package rafthttp -/* -func TestEntsWriteAndRead(t *testing.T) { - tests := [][]raftpb.Entry{ - { - {}, - }, - { - {Term: 1, Index: 1}, - }, - { - {Term: 1, Index: 1}, - {Term: 1, Index: 2}, - {Term: 1, Index: 3}, - }, - { - {Term: 1, Index: 1, Data: []byte("some data")}, - {Term: 1, Index: 2, Data: []byte("some data")}, - {Term: 1, Index: 3, Data: []byte("some data")}, - }, +import ( + "bytes" + "reflect" + "testing" + + "github.com/coreos/etcd/raft/raftpb" +) + +func TestEntry(t *testing.T) { + tests := []raftpb.Entry{ + {}, + {Term: 1, Index: 1}, + {Term: 1, Index: 1, Data: []byte("some data")}, } for i, tt := range tests { b := &bytes.Buffer{} - ew := newEntryWriter(b, types.ID(1)) - if err := ew.writeEntries(tt); err != nil { + if err := writeEntryTo(b, &tt); err != nil { t.Errorf("#%d: unexpected write ents error: %v", i, err) continue } - er := newEntryReader(b, types.ID(1)) - ents, err := er.readEntries() - if err != nil { + var ent raftpb.Entry + if err := readEntryFrom(b, &ent); err != nil { t.Errorf("#%d: unexpected read ents error: %v", i, err) continue } - if !reflect.DeepEqual(ents, tt) { - t.Errorf("#%d: ents = %+v, want %+v", i, ents, tt) + if !reflect.DeepEqual(ent, tt) { + t.Errorf("#%d: ent = %+v, want %+v", i, ent, tt) } } } -*/