File: state_test.go

package info (click to toggle)
golang-github-weaveworks-mesh 0%2Bgit20161024.3dd75b1-1~bpo8%2B1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-backports
  • size: 412 kB
  • sloc: sh: 59; makefile: 7
file content (118 lines) | stat: -rw-r--r-- 3,304 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package main

import (
	"reflect"
	"testing"

	"github.com/weaveworks/mesh"
)

func TestStateMergeReceived(t *testing.T) {
	for _, testcase := range []struct {
		initial map[mesh.PeerName]int
		merge   map[mesh.PeerName]int
		want    map[mesh.PeerName]int
	}{
		{
			map[mesh.PeerName]int{},
			map[mesh.PeerName]int{123: 1, 456: 2},
			map[mesh.PeerName]int{123: 1, 456: 2},
		},
		{
			map[mesh.PeerName]int{123: 1, 456: 2},
			map[mesh.PeerName]int{123: 1, 456: 2},
			map[mesh.PeerName]int{},
		},
		{
			map[mesh.PeerName]int{123: 1, 456: 2},
			map[mesh.PeerName]int{789: 3},
			map[mesh.PeerName]int{789: 3},
		},
		{
			map[mesh.PeerName]int{456: 3},
			map[mesh.PeerName]int{123: 1, 456: 2},
			map[mesh.PeerName]int{123: 1}, // we drop keys that don't semantically merge
		},
	} {
		initial, merge := testcase.initial, testcase.merge // mergeReceived modifies arguments
		delta := newState(999).mergeComplete(initial).(*state).mergeReceived(merge)
		if want, have := testcase.want, delta.(*state).set; !reflect.DeepEqual(want, have) {
			t.Errorf("%v mergeReceived %v: want %v, have %v", testcase.initial, testcase.merge, want, have)
		}
	}
}

func TestStateMergeDelta(t *testing.T) {
	for _, testcase := range []struct {
		initial map[mesh.PeerName]int
		merge   map[mesh.PeerName]int
		want    map[mesh.PeerName]int
	}{
		{
			map[mesh.PeerName]int{},
			map[mesh.PeerName]int{123: 1, 456: 2},
			map[mesh.PeerName]int{123: 1, 456: 2},
		},
		{
			map[mesh.PeerName]int{123: 1, 456: 2},
			map[mesh.PeerName]int{123: 1, 456: 2},
			nil,
		},
		{
			map[mesh.PeerName]int{123: 1, 456: 2},
			map[mesh.PeerName]int{789: 3},
			map[mesh.PeerName]int{789: 3},
		},
		{
			map[mesh.PeerName]int{123: 1, 456: 2},
			map[mesh.PeerName]int{456: 3},
			map[mesh.PeerName]int{456: 3},
		},
	} {
		initial, merge := testcase.initial, testcase.merge // mergeDelta modifies arguments
		delta := newState(999).mergeComplete(initial).(*state).mergeDelta(merge)
		if want := testcase.want; want == nil {
			if delta != nil {
				t.Errorf("%v mergeDelta %v: want nil, have non-nil", testcase.initial, testcase.merge)
			}
		} else {
			if have := delta.(*state).set; !reflect.DeepEqual(want, have) {
				t.Errorf("%v mergeDelta %v: want %v, have %v", testcase.initial, testcase.merge, want, have)
			}
		}
	}
}

func TestStateMergeComplete(t *testing.T) {
	for _, testcase := range []struct {
		initial map[mesh.PeerName]int
		merge   map[mesh.PeerName]int
		want    map[mesh.PeerName]int
	}{
		{
			map[mesh.PeerName]int{},
			map[mesh.PeerName]int{123: 1, 456: 2},
			map[mesh.PeerName]int{123: 1, 456: 2},
		},
		{
			map[mesh.PeerName]int{123: 1, 456: 2},
			map[mesh.PeerName]int{123: 1, 456: 2},
			map[mesh.PeerName]int{123: 1, 456: 2},
		},
		{
			map[mesh.PeerName]int{123: 1, 456: 2},
			map[mesh.PeerName]int{789: 3},
			map[mesh.PeerName]int{123: 1, 456: 2, 789: 3},
		},
		{
			map[mesh.PeerName]int{123: 1, 456: 2},
			map[mesh.PeerName]int{123: 0, 456: 3},
			map[mesh.PeerName]int{123: 1, 456: 3},
		},
	} {
		st := newState(999).mergeComplete(testcase.initial).(*state).mergeComplete(testcase.merge).(*state)
		if want, have := testcase.want, st.set; !reflect.DeepEqual(want, have) {
			t.Errorf("%v mergeComplete %v: want %v, have %v", testcase.initial, testcase.merge, want, have)
		}
	}
}