Skip to content

Commit

Permalink
add test case
Browse files Browse the repository at this point in the history
  • Loading branch information
Eikykun committed Dec 26, 2023
1 parent 14260f4 commit 57f9b0b
Show file tree
Hide file tree
Showing 3 changed files with 266 additions and 70 deletions.
102 changes: 102 additions & 0 deletions pkg/controllers/collaset/utils/pod_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ package utils

import (
"encoding/json"
"sort"
"time"

. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
Expand Down Expand Up @@ -111,4 +113,104 @@ var _ = Describe("Pod utils", func() {
Expect(err).Should(BeNil())
Expect(pod.Labels["foo"]).Should(Equal("bar-1"))
})
It("test ComparePod", func() {
pods := []*corev1.Pod{
{
ObjectMeta: metav1.ObjectMeta{
Name: "foo-6",
},
Spec: corev1.PodSpec{
NodeName: "x",
},
Status: corev1.PodStatus{
Phase: corev1.PodRunning,
Conditions: []corev1.PodCondition{
{
Type: corev1.PodReady,
Status: corev1.ConditionTrue,
LastTransitionTime: metav1.NewTime(time.Now()),
},
},
},
},
{
ObjectMeta: metav1.ObjectMeta{
Name: "foo-5",
},
Spec: corev1.PodSpec{
NodeName: "x",
},
Status: corev1.PodStatus{
Phase: corev1.PodRunning,
Conditions: []corev1.PodCondition{
{
Type: corev1.PodReady,
Status: corev1.ConditionTrue,
LastTransitionTime: metav1.NewTime(time.Now().Add(10 * time.Second)),
},
},
},
},
{
ObjectMeta: metav1.ObjectMeta{
Name: "foo-4",
},
Spec: corev1.PodSpec{
NodeName: "x",
},
Status: corev1.PodStatus{
Phase: corev1.PodRunning,
ContainerStatuses: []corev1.ContainerStatus{
{
RestartCount: 2,
},
},
},
},
{
ObjectMeta: metav1.ObjectMeta{
Name: "foo-3",
},
Spec: corev1.PodSpec{
NodeName: "x",
},
Status: corev1.PodStatus{
Phase: corev1.PodRunning,
ContainerStatuses: []corev1.ContainerStatus{
{
RestartCount: 3,
},
},
},
},
{
ObjectMeta: metav1.ObjectMeta{
Name: "foo-2",
},
Spec: corev1.PodSpec{
NodeName: "x",
},
Status: corev1.PodStatus{
Phase: corev1.PodPending,
},
},
{
ObjectMeta: metav1.ObjectMeta{
Name: "foo-1",
},
Spec: corev1.PodSpec{
NodeName: "",
},
},
}
sort.Slice(pods, func(i, j int) bool {
return ComparePod(pods[i], pods[j])
})
Expect(pods[0].Name).Should(Equal("foo-1"))
Expect(pods[1].Name).Should(Equal("foo-2"))
Expect(pods[2].Name).Should(Equal("foo-3"))
Expect(pods[3].Name).Should(Equal("foo-4"))
Expect(pods[4].Name).Should(Equal("foo-5"))
Expect(pods[5].Name).Should(Equal("foo-6"))
})
})
20 changes: 20 additions & 0 deletions pkg/controllers/collaset/utils/utils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,33 @@ limitations under the License.
package utils

import (
"fmt"
"testing"

. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
corev1 "k8s.io/api/core/v1"

appsv1alpha1 "kusionstack.io/operating/apis/apps/v1alpha1"
)

func TestUtils(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "CollaSets utils tests")
}

var _ = Describe("Condition tests", func() {
It("test AddOrUpdateCondition", func() {
status := &appsv1alpha1.CollaSetStatus{
Conditions: []appsv1alpha1.CollaSetCondition{
{
Type: appsv1alpha1.CollaSetScale,
Status: corev1.ConditionTrue,
},
},
}
AddOrUpdateCondition(status, appsv1alpha1.CollaSetScale, fmt.Errorf("test err"), "", "")
AddOrUpdateCondition(status, appsv1alpha1.CollaSetUpdate, nil, "", "")
Expect(len(status.Conditions)).Should(Equal(2))
})
})
214 changes: 144 additions & 70 deletions pkg/webhook/server/generic/poddecoration/poddecoration_webhook_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,99 +27,173 @@ import (
)

var _ = Describe("PodDecoration webhook", func() {
It("test validating", func() {
pd := &appsv1alpha1.PodDecoration{
Spec: appsv1alpha1.PodDecorationSpec{
Template: appsv1alpha1.PodDecorationPodTemplate{
PrimaryContainers: []*appsv1alpha1.PrimaryContainerPatch{
{
TargetPolicy: appsv1alpha1.InjectByName,
PodDecorationPrimaryContainer: appsv1alpha1.PodDecorationPrimaryContainer{},
Context("PodDecoration validating webhook", func() {
It("validating PrimaryContainers", func() {
pd := &appsv1alpha1.PodDecoration{
Spec: appsv1alpha1.PodDecorationSpec{
Template: appsv1alpha1.PodDecorationPodTemplate{
PrimaryContainers: []*appsv1alpha1.PrimaryContainerPatch{
{
TargetPolicy: appsv1alpha1.InjectByName,
PodDecorationPrimaryContainer: appsv1alpha1.PodDecorationPrimaryContainer{},
},
},
},
},
},
}
Expect(ValidatePodDecoration(pd)).Should(HaveOccurred())
pd = &appsv1alpha1.PodDecoration{
Spec: appsv1alpha1.PodDecorationSpec{
Template: appsv1alpha1.PodDecorationPodTemplate{
Volumes: []corev1.Volume{
{
Name: "",
VolumeSource: corev1.VolumeSource{},
}
Expect(ValidatePodDecoration(pd)).Should(HaveOccurred())
name := "foo"
pd = &appsv1alpha1.PodDecoration{
Spec: appsv1alpha1.PodDecorationSpec{
Template: appsv1alpha1.PodDecorationPodTemplate{
PrimaryContainers: []*appsv1alpha1.PrimaryContainerPatch{
{
TargetPolicy: appsv1alpha1.InjectByName,
PodDecorationPrimaryContainer: appsv1alpha1.PodDecorationPrimaryContainer{
Name: &name,
VolumeMounts: []corev1.VolumeMount{
{
Name: "",
MountPath: "",
SubPath: "xxx",
SubPathExpr: "x",
},
{
Name: "foo",
MountPath: "/xxx",
SubPath: "/.../.../",
},
},
Env: []corev1.EnvVar{
{
Name: "",
Value: "x",
},
},
},
},
},
{
Name: "aaa",
VolumeSource: corev1.VolumeSource{},
},
},
}
Expect(ValidatePodDecoration(pd)).Should(HaveOccurred())
pd = &appsv1alpha1.PodDecoration{
Spec: appsv1alpha1.PodDecorationSpec{
Template: appsv1alpha1.PodDecorationPodTemplate{
PrimaryContainers: []*appsv1alpha1.PrimaryContainerPatch{
{
TargetPolicy: appsv1alpha1.InjectByName,
PodDecorationPrimaryContainer: appsv1alpha1.PodDecorationPrimaryContainer{
Name: &name,
VolumeMounts: []corev1.VolumeMount{
{
Name: "foo",
MountPath: "/xxx",
SubPath: "xxx",
},
},
Env: []corev1.EnvVar{
{
Name: "ENV_NAME",
Value: "x",
},
},
},
},
},
},
},
},
}
Expect(ValidatePodDecoration(pd)).Should(HaveOccurred())
pd = &appsv1alpha1.PodDecoration{
Spec: appsv1alpha1.PodDecorationSpec{
Template: appsv1alpha1.PodDecorationPodTemplate{
InitContainers: []*corev1.Container{
{
Name: "foo",
Image: "nginx:v1",
}
Expect(ValidatePodDecoration(pd)).ShouldNot(HaveOccurred())
})

It("validating Volumes", func() {
pd := &appsv1alpha1.PodDecoration{
Spec: appsv1alpha1.PodDecorationSpec{
Template: appsv1alpha1.PodDecorationPodTemplate{
Volumes: []corev1.Volume{
{
Name: "",
VolumeSource: corev1.VolumeSource{},
},
{
Name: "aaa",
VolumeSource: corev1.VolumeSource{},
},
},
},
},
},
}
Expect(ValidatePodDecoration(pd)).ShouldNot(HaveOccurred())
pd = &appsv1alpha1.PodDecoration{
Spec: appsv1alpha1.PodDecorationSpec{
Template: appsv1alpha1.PodDecorationPodTemplate{
Tolerations: []corev1.Toleration{
{
Key: "",
Operator: corev1.TolerationOpExists,
Value: "foo",
}
Expect(ValidatePodDecoration(pd)).Should(HaveOccurred())
})
It("validating InitContainers", func() {
pd := &appsv1alpha1.PodDecoration{
Spec: appsv1alpha1.PodDecorationSpec{
Template: appsv1alpha1.PodDecorationPodTemplate{
InitContainers: []*corev1.Container{
{
Name: "foo",
Image: "nginx:v1",
},
},
},
},
},
}
Expect(ValidatePodDecoration(pd)).Should(HaveOccurred())
}
Expect(ValidatePodDecoration(pd)).ShouldNot(HaveOccurred())
})
It("validating Tolerations", func() {
pd := &appsv1alpha1.PodDecoration{
Spec: appsv1alpha1.PodDecorationSpec{
Template: appsv1alpha1.PodDecorationPodTemplate{
Tolerations: []corev1.Toleration{
{
Key: "",
Operator: corev1.TolerationOpExists,
Value: "foo",
},
},
},
},
}
Expect(ValidatePodDecoration(pd)).Should(HaveOccurred())
})
})
It("test mutating", func() {
pd := &appsv1alpha1.PodDecoration{
Spec: appsv1alpha1.PodDecorationSpec{
Template: appsv1alpha1.PodDecorationPodTemplate{
PrimaryContainers: []*appsv1alpha1.PrimaryContainerPatch{
{
PodDecorationPrimaryContainer: appsv1alpha1.PodDecorationPrimaryContainer{
Env: []corev1.EnvVar{
{
Name: "env",
Context("PodDecoration mutating webhook", func() {
It("test mutating", func() {
pd := &appsv1alpha1.PodDecoration{
Spec: appsv1alpha1.PodDecorationSpec{
Template: appsv1alpha1.PodDecorationPodTemplate{
PrimaryContainers: []*appsv1alpha1.PrimaryContainerPatch{
{
PodDecorationPrimaryContainer: appsv1alpha1.PodDecorationPrimaryContainer{
Env: []corev1.EnvVar{
{
Name: "env",
},
},
},
},
},
},
Metadata: []*appsv1alpha1.PodDecorationPodTemplateMeta{
{
Labels: map[string]string{"a": "b"},
Metadata: []*appsv1alpha1.PodDecorationPodTemplateMeta{
{
Labels: map[string]string{"a": "b"},
},
},
},
Containers: []*appsv1alpha1.ContainerPatch{
{
Container: corev1.Container{
Name: "foo",
Containers: []*appsv1alpha1.ContainerPatch{
{
Container: corev1.Container{
Name: "foo",
},
},
},
},
},
},
}
SetDefaultPodDecoration(pd)
Expect(pd.Spec.Template.PrimaryContainers[0].TargetPolicy).ShouldNot(BeEquivalentTo(""))
Expect(pd.Spec.Template.Containers[0].InjectPolicy).ShouldNot(BeEquivalentTo(""))
Expect(pd.Spec.Template.Metadata[0].PatchPolicy).ShouldNot(BeEquivalentTo(""))
}
SetDefaultPodDecoration(pd)
Expect(pd.Spec.Template.PrimaryContainers[0].TargetPolicy).ShouldNot(BeEquivalentTo(""))
Expect(pd.Spec.Template.Containers[0].InjectPolicy).ShouldNot(BeEquivalentTo(""))
Expect(pd.Spec.Template.Metadata[0].PatchPolicy).ShouldNot(BeEquivalentTo(""))
})
})
})

Expand Down

0 comments on commit 57f9b0b

Please sign in to comment.