Skip to content

Commit 48d23cd

Browse files
authored
Merge pull request #11449 from chrischdi/pr-etcd-util-test-coverage
🌱 KCP: add test coverage for etcd member list util
2 parents aec0565 + 1b11959 commit 48d23cd

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
/*
2+
Copyright 2020 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
// Package util implements etcd utility functions.
18+
package util
19+
20+
import (
21+
"reflect"
22+
"testing"
23+
24+
"sigs.k8s.io/cluster-api/controlplane/kubeadm/internal/etcd"
25+
)
26+
27+
func TestMemberEqual(t *testing.T) {
28+
tests := []struct {
29+
name string
30+
members1 []*etcd.Member
31+
members2 []*etcd.Member
32+
want bool
33+
}{
34+
{
35+
name: "Not matching member lists",
36+
members1: []*etcd.Member{{ID: 1, Name: "foo"}},
37+
members2: []*etcd.Member{{ID: 2, Name: "bar"}},
38+
want: false,
39+
},
40+
{
41+
name: "Matching member lists",
42+
members1: []*etcd.Member{{ID: 1, Name: "foo"}},
43+
members2: []*etcd.Member{{ID: 1, Name: "foo"}},
44+
want: true,
45+
},
46+
{
47+
name: "Matching member lists having multiple entries",
48+
members1: []*etcd.Member{{ID: 1, Name: "foo"}, {ID: 2, Name: "bar"}, {ID: 3, Name: "foobar"}},
49+
members2: []*etcd.Member{{ID: 1, Name: "foo"}, {ID: 2, Name: "bar"}, {ID: 3, Name: "foobar"}},
50+
want: true,
51+
},
52+
{
53+
name: "Matching member lists having multiple entries which are not ordered",
54+
members1: []*etcd.Member{{ID: 1, Name: "foo"}, {ID: 2, Name: "bar"}, {ID: 3, Name: "foobar"}},
55+
members2: []*etcd.Member{{ID: 2, Name: "bar"}, {ID: 1, Name: "foo"}, {ID: 3, Name: "foobar"}},
56+
want: true,
57+
},
58+
{
59+
name: "Matching member lists including a empty name",
60+
members1: []*etcd.Member{{ID: 1, Name: "foo"}, {ID: 2, Name: "bar"}, {ID: 3, Name: "foobar"}, {ID: 4, Name: ""}},
61+
members2: []*etcd.Member{{ID: 2, Name: "bar"}, {ID: 1, Name: "foo"}, {ID: 3, Name: "foobar"}, {ID: 4, Name: ""}},
62+
want: true,
63+
},
64+
}
65+
for _, tt := range tests {
66+
t.Run(tt.name, func(t *testing.T) {
67+
if got := MemberEqual(tt.members1, tt.members2); got != tt.want {
68+
t.Errorf("MemberEqual() = %v, want %v", got, tt.want)
69+
}
70+
})
71+
}
72+
}
73+
74+
func TestMemberNames(t *testing.T) {
75+
tests := []struct {
76+
name string
77+
members []*etcd.Member
78+
want []string
79+
}{
80+
{
81+
name: "Empty members list",
82+
members: []*etcd.Member{},
83+
want: []string{},
84+
},
85+
{
86+
name: "Member without name",
87+
members: []*etcd.Member{{ID: 0}},
88+
want: []string{"name not set yet for member with id 0"},
89+
},
90+
{
91+
name: "Member with name",
92+
members: []*etcd.Member{{ID: 1, Name: "foo"}},
93+
want: []string{"foo"},
94+
},
95+
{
96+
name: "Multiple members",
97+
members: []*etcd.Member{{ID: 0}, {ID: 2, Name: "bar"}, {ID: 1, Name: "foo"}, {ID: 3, Name: "foobar"}},
98+
want: []string{"name not set yet for member with id 0", "bar", "foo", "foobar"},
99+
},
100+
}
101+
for _, tt := range tests {
102+
t.Run(tt.name, func(t *testing.T) {
103+
if got := MemberNames(tt.members); !reflect.DeepEqual(got, tt.want) {
104+
t.Errorf("MemberNames() = %v, want %v", got, tt.want)
105+
}
106+
})
107+
}
108+
}

0 commit comments

Comments
 (0)