Skip to content

Commit 1be9d30

Browse files
authored
Merge pull request #2808 from nader-ziada/kcp-unit-tests
🏃Add more unit tests to the kubeadmControlPlane area
2 parents 6d80fc0 + 43c11e4 commit 1be9d30

File tree

3 files changed

+146
-5
lines changed

3 files changed

+146
-5
lines changed

controlplane/kubeadm/internal/control_plane_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,12 @@ import (
2222

2323
. "github.com/onsi/ginkgo"
2424
. "github.com/onsi/gomega"
25+
corev1 "k8s.io/api/core/v1"
2526
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
27+
"k8s.io/apimachinery/pkg/types"
28+
"k8s.io/utils/pointer"
2629
clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha3"
30+
bootstrapv1 "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1alpha3"
2731
controlplanev1 "sigs.k8s.io/cluster-api/controlplane/kubeadm/api/v1alpha3"
2832
)
2933

@@ -164,6 +168,36 @@ var _ = Describe("Control Plane", func() {
164168
})
165169
})
166170
})
171+
172+
Describe("Generating components", func() {
173+
Context("That is after machine creation time", func() {
174+
BeforeEach(func() {
175+
controlPlane.KCP = &controlplanev1.KubeadmControlPlane{
176+
ObjectMeta: metav1.ObjectMeta{
177+
Name: "cp",
178+
UID: types.UID("test-uid"),
179+
},
180+
}
181+
controlPlane.Cluster = &clusterv1.Cluster{
182+
ObjectMeta: metav1.ObjectMeta{
183+
Name: "test-cluster",
184+
},
185+
}
186+
})
187+
It("should generate kubeadmconfig without controller reference", func() {
188+
spec := &bootstrapv1.KubeadmConfigSpec{}
189+
kubeadmConfig := controlPlane.GenerateKubeadmConfig(spec)
190+
Expect(kubeadmConfig.Labels["cluster.x-k8s.io/cluster-name"]).To(Equal("test-cluster"))
191+
Expect(kubeadmConfig.Labels["kubeadm.controlplane.cluster.x-k8s.io/hash"]).ToNot(BeEmpty())
192+
Expect(kubeadmConfig.OwnerReferences[0].Controller).To(BeNil())
193+
})
194+
It("should generate new machine with controller reference", func() {
195+
machine := controlPlane.NewMachine(&corev1.ObjectReference{Namespace: "foobar"}, &corev1.ObjectReference{Namespace: "foobar"}, pointer.StringPtr("failureDomain"))
196+
Expect(machine.OwnerReferences[0].Controller).ToNot(BeNil())
197+
})
198+
})
199+
})
200+
167201
})
168202

169203
func failureDomain(controlPlane bool) clusterv1.FailureDomainSpec {
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
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 etcd
18+
19+
import (
20+
"context"
21+
"testing"
22+
23+
. "github.com/onsi/gomega"
24+
"github.com/pkg/errors"
25+
26+
"go.etcd.io/etcd/clientv3"
27+
"go.etcd.io/etcd/etcdserver/etcdserverpb"
28+
29+
etcdfake "sigs.k8s.io/cluster-api/controlplane/kubeadm/internal/etcd/fake"
30+
)
31+
32+
func TestEtcdMembers_WithErrors(t *testing.T) {
33+
g := NewWithT(t)
34+
35+
ctx := context.Background()
36+
fakeEtcdClient := &etcdfake.FakeEtcdClient{
37+
EtcdEndpoints: []string{"https://etcd-instance:2379"},
38+
MemberListResponse: &clientv3.MemberListResponse{
39+
Header: &etcdserverpb.ResponseHeader{},
40+
Members: []*etcdserverpb.Member{
41+
{ID: 1234, Name: "foo", PeerURLs: []string{"https://1.2.3.4:2000"}},
42+
},
43+
},
44+
MoveLeaderResponse: &clientv3.MoveLeaderResponse{},
45+
MemberRemoveResponse: &clientv3.MemberRemoveResponse{},
46+
StatusResponse: &clientv3.StatusResponse{},
47+
ErrorResponse: errors.New("something went wrong"),
48+
}
49+
50+
client, err := NewClientWithEtcd(ctx, fakeEtcdClient)
51+
g.Expect(err).NotTo(HaveOccurred())
52+
53+
members, err := client.Members(ctx)
54+
g.Expect(err).To(HaveOccurred())
55+
g.Expect(len(members)).To(Equal(0))
56+
57+
err = client.MoveLeader(ctx, 1)
58+
g.Expect(err).To(HaveOccurred())
59+
60+
err = client.RemoveMember(ctx, 1234)
61+
g.Expect(err).To(HaveOccurred())
62+
63+
}
64+
65+
func TestEtcdMembers_WithSuccess(t *testing.T) {
66+
g := NewWithT(t)
67+
68+
ctx := context.Background()
69+
fakeEtcdClient := &etcdfake.FakeEtcdClient{
70+
EtcdEndpoints: []string{"https://etcd-instance:2379"},
71+
MemberListResponse: &clientv3.MemberListResponse{
72+
Header: &etcdserverpb.ResponseHeader{},
73+
Members: []*etcdserverpb.Member{
74+
{ID: 1234, Name: "foo", PeerURLs: []string{"https://1.2.3.4:2000"}},
75+
},
76+
},
77+
MoveLeaderResponse: &clientv3.MoveLeaderResponse{},
78+
MemberUpdateResponse: &clientv3.MemberUpdateResponse{
79+
Header: &etcdserverpb.ResponseHeader{},
80+
Members: []*etcdserverpb.Member{
81+
{ID: 1234, Name: "foo", PeerURLs: []string{"https://1.2.3.4:2000", "https://4.5.6.7:2000"}},
82+
},
83+
},
84+
MemberRemoveResponse: &clientv3.MemberRemoveResponse{},
85+
AlarmResponse: &clientv3.AlarmResponse{},
86+
StatusResponse: &clientv3.StatusResponse{},
87+
}
88+
89+
client, err := NewClientWithEtcd(ctx, fakeEtcdClient)
90+
g.Expect(err).NotTo(HaveOccurred())
91+
92+
members, err := client.Members(ctx)
93+
g.Expect(err).NotTo(HaveOccurred())
94+
g.Expect(len(members)).To(Equal(1))
95+
96+
err = client.MoveLeader(ctx, 1)
97+
g.Expect(err).NotTo(HaveOccurred())
98+
99+
err = client.RemoveMember(ctx, 1234)
100+
g.Expect(err).NotTo(HaveOccurred())
101+
102+
updatedMembers, err := client.UpdateMemberPeerURLs(ctx, 1234, []string{"https://4.5.6.7:2000"})
103+
g.Expect(err).NotTo(HaveOccurred())
104+
g.Expect(len(updatedMembers[0].PeerURLs)).To(Equal(2))
105+
g.Expect(updatedMembers[0].PeerURLs).To(Equal([]string{"https://1.2.3.4:2000", "https://4.5.6.7:2000"}))
106+
}

controlplane/kubeadm/internal/etcd/fake/client.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,32 +30,33 @@ type FakeEtcdClient struct {
3030
MemberUpdateResponse *clientv3.MemberUpdateResponse
3131
MoveLeaderResponse *clientv3.MoveLeaderResponse
3232
StatusResponse *clientv3.StatusResponse
33+
ErrorResponse error
3334
}
3435

3536
func (c *FakeEtcdClient) Endpoints() []string {
3637
return c.EtcdEndpoints
3738
}
3839

3940
func (c *FakeEtcdClient) MoveLeader(_ context.Context, _ uint64) (*clientv3.MoveLeaderResponse, error) {
40-
return c.MoveLeaderResponse, nil
41+
return c.MoveLeaderResponse, c.ErrorResponse
4142
}
4243

4344
func (c *FakeEtcdClient) Close() error {
4445
return nil
4546
}
4647

4748
func (c *FakeEtcdClient) AlarmList(_ context.Context) (*clientv3.AlarmResponse, error) {
48-
return c.AlarmResponse, nil
49+
return c.AlarmResponse, c.ErrorResponse
4950
}
5051

5152
func (c *FakeEtcdClient) MemberList(_ context.Context) (*clientv3.MemberListResponse, error) {
52-
return c.MemberListResponse, nil
53+
return c.MemberListResponse, c.ErrorResponse
5354
}
5455
func (c *FakeEtcdClient) MemberRemove(_ context.Context, _ uint64) (*clientv3.MemberRemoveResponse, error) {
55-
return c.MemberRemoveResponse, nil
56+
return c.MemberRemoveResponse, c.ErrorResponse
5657
}
5758
func (c *FakeEtcdClient) MemberUpdate(_ context.Context, _ uint64, _ []string) (*clientv3.MemberUpdateResponse, error) {
58-
return c.MemberUpdateResponse, nil
59+
return c.MemberUpdateResponse, c.ErrorResponse
5960
}
6061
func (c *FakeEtcdClient) Status(_ context.Context, _ string) (*clientv3.StatusResponse, error) {
6162
return c.StatusResponse, nil

0 commit comments

Comments
 (0)