Skip to content

Commit 6abd178

Browse files
authored
Merge pull request #865 from l1b0k/ut
test(datapath): add unit test for Vlan data path with MultiNetwork fe…
2 parents c7bea2c + 89fe30a commit 6abd178

File tree

7 files changed

+1381
-55
lines changed

7 files changed

+1381
-55
lines changed

pkg/controller/common/eni.go

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ import (
88
aliyunClient "github.com/AliyunContainerService/terway/pkg/aliyun/client"
99
"github.com/AliyunContainerService/terway/pkg/apis/network.alibabacloud.com/v1beta1"
1010
"github.com/AliyunContainerService/terway/pkg/backoff"
11-
"github.com/AliyunContainerService/terway/types"
12-
corev1 "k8s.io/api/core/v1"
1311
k8sErr "k8s.io/apimachinery/pkg/api/errors"
1412
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1513
k8stypes "k8s.io/apimachinery/pkg/types"
@@ -32,59 +30,6 @@ type CreateOption struct {
3230
PodNamespace string
3331
}
3432

35-
func FromPodENI(podENI *v1beta1.PodENI) []*v1beta1.NetworkInterface {
36-
var result []*v1beta1.NetworkInterface
37-
38-
for _, alloc := range podENI.Spec.Allocations {
39-
eniID := alloc.ENI.ID
40-
if eniID == "" {
41-
continue
42-
}
43-
44-
// create it
45-
networkInterface := &v1beta1.NetworkInterface{
46-
ObjectMeta: metav1.ObjectMeta{
47-
Name: eniID,
48-
Labels: map[string]string{},
49-
},
50-
}
51-
52-
if podENI.Labels[types.ENIRelatedNodeName] != "" {
53-
networkInterface.Labels[types.ENIRelatedNodeName] = podENI.Labels[types.ENIRelatedNodeName]
54-
}
55-
56-
networkInterface.Spec.ENI = alloc.ENI
57-
networkInterface.Spec.IPv4 = alloc.IPv4
58-
networkInterface.Spec.IPv6 = alloc.IPv6
59-
// leave cidr to empty
60-
networkInterface.Spec.ExtraConfig = alloc.ExtraConfig
61-
62-
networkInterface.Spec.ManagePolicy = v1beta1.ManagePolicy{
63-
Cache: false,
64-
UnManaged: false,
65-
}
66-
67-
if _, ok := podENI.Annotations[types.ENIAllocFromPool]; ok {
68-
networkInterface.Spec.ManagePolicy.Cache = true
69-
}
70-
71-
networkInterface.Spec.PodENIRef = &corev1.ObjectReference{
72-
Kind: "Pod",
73-
Name: podENI.Name,
74-
Namespace: podENI.Namespace,
75-
}
76-
77-
networkInterface.Status.Phase = podENI.Status.Phase
78-
79-
networkInterface.Status.NodeName = podENI.Labels[types.ENIRelatedNodeName]
80-
networkInterface.Status.InstanceID = podENI.Status.InstanceID
81-
networkInterface.Status.TrunkENIID = podENI.Status.TrunkENIID
82-
networkInterface.Status.ENIInfo = podENI.Status.ENIInfos[eniID]
83-
// NetworkCardIndex is not stored
84-
}
85-
return result
86-
}
87-
8833
func ToNetworkInterfaceCR(eni *aliyunClient.NetworkInterface) *v1beta1.NetworkInterface {
8934
networkInterface := &v1beta1.NetworkInterface{
9035
ObjectMeta: metav1.ObjectMeta{

pkg/controller/common/eni_test.go

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"time"
66

7+
aliyunClient "github.com/AliyunContainerService/terway/pkg/aliyun/client"
78
networkv1beta1 "github.com/AliyunContainerService/terway/pkg/apis/network.alibabacloud.com/v1beta1"
89
"github.com/AliyunContainerService/terway/pkg/backoff"
910
. "github.com/onsi/ginkgo/v2"
@@ -305,4 +306,87 @@ var _ = Describe("Common ENI Operations", func() {
305306
Expect(err).To(HaveOccurred())
306307
})
307308
})
309+
310+
Context("ToNetworkInterfaceCR", func() {
311+
It("should convert aliyunClient.NetworkInterface to NetworkInterface CR", func() {
312+
aliyunENI := &aliyunClient.NetworkInterface{
313+
NetworkInterfaceID: "eni-123",
314+
MacAddress: "00:11:22:33:44:55",
315+
VPCID: "vpc-123",
316+
ZoneID: "zone-1",
317+
VSwitchID: "vsw-123",
318+
ResourceGroupID: "rg-123",
319+
SecurityGroupIDs: []string{"sg-1", "sg-2"},
320+
PrivateIPAddress: "192.168.1.100",
321+
IPv6Set: []aliyunClient.IPSet{
322+
{IPAddress: "2001:db8::1"},
323+
},
324+
}
325+
326+
result := ToNetworkInterfaceCR(aliyunENI)
327+
328+
Expect(result.Name).To(Equal("eni-123"))
329+
Expect(result.Spec.ENI.ID).To(Equal("eni-123"))
330+
Expect(result.Spec.ENI.MAC).To(Equal("00:11:22:33:44:55"))
331+
Expect(result.Spec.IPv4).To(Equal("192.168.1.100"))
332+
Expect(result.Spec.IPv6).To(Equal("2001:db8::1"))
333+
})
334+
})
335+
336+
Context("WaitCreated", func() {
337+
It("should wait for object to be created successfully", func() {
338+
obj := &networkv1beta1.NetworkInterface{
339+
ObjectMeta: metav1.ObjectMeta{
340+
Name: "wait-created-test",
341+
},
342+
}
343+
Expect(k8sClient.Create(ctx, obj)).To(Succeed())
344+
345+
err := WaitCreated(ctx, k8sClient, obj, "", "wait-created-test")
346+
Expect(err).NotTo(HaveOccurred())
347+
})
348+
})
349+
350+
Context("WaitDeleted", func() {
351+
It("should wait for object to be deleted successfully", func() {
352+
obj := &networkv1beta1.NetworkInterface{
353+
ObjectMeta: metav1.ObjectMeta{
354+
Name: "wait-deleted-test",
355+
},
356+
}
357+
Expect(k8sClient.Create(ctx, obj)).To(Succeed())
358+
Expect(k8sClient.Delete(ctx, obj)).To(Succeed())
359+
360+
WaitDeleted(ctx, k8sClient, obj, "", "wait-deleted-test")
361+
362+
err := k8sClient.Get(ctx, client.ObjectKey{Name: "wait-deleted-test"}, obj)
363+
Expect(k8sErr.IsNotFound(err)).To(BeTrue())
364+
})
365+
})
366+
367+
Context("WaitRVChanged", func() {
368+
It("should wait for resource version to change", func() {
369+
obj := &networkv1beta1.NetworkInterface{
370+
ObjectMeta: metav1.ObjectMeta{
371+
Name: "wait-rv-test",
372+
},
373+
}
374+
Expect(k8sClient.Create(ctx, obj)).To(Succeed())
375+
376+
Expect(k8sClient.Get(ctx, client.ObjectKey{Name: "wait-rv-test"}, obj)).To(Succeed())
377+
initialRV := obj.GetResourceVersion()
378+
379+
update := obj.DeepCopy()
380+
381+
go func() {
382+
time.Sleep(50 * time.Millisecond)
383+
update.Spec.IPv4 = "192.168.1.100"
384+
Expect(k8sClient.Update(ctx, update)).To(Succeed())
385+
}()
386+
387+
err := WaitRVChanged(ctx, k8sClient, obj, "", "wait-rv-test", initialRV)
388+
Expect(err).NotTo(HaveOccurred())
389+
Expect(obj.GetResourceVersion()).NotTo(Equal(initialRV))
390+
})
391+
})
308392
})

0 commit comments

Comments
 (0)