Browse Source

rafthttp: add util, msgapp, message test

Yicheng Qin 10 years ago
parent
commit
1fdbbb959f
3 changed files with 153 additions and 27 deletions
  1. 65 0
      rafthttp/message_test.go
  2. 70 0
      rafthttp/msgapp_test.go
  3. 18 27
      rafthttp/util_test.go

+ 65 - 0
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)
+		}
+	}
+}

+ 70 - 0
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)
+		}
+	}
+}

+ 18 - 27
rafthttp/entry_test.go → 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)
 		}
 	}
 }
-*/