mirror of https://github.com/openkruise/kruise.git
219 lines
5.6 KiB
Go
219 lines
5.6 KiB
Go
package sidecarcontrol
|
|
|
|
import (
|
|
"testing"
|
|
|
|
corev1 "k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
|
|
appsv1alpha1 "github.com/openkruise/kruise/apis/apps/v1alpha1"
|
|
)
|
|
|
|
var always = corev1.ContainerRestartPolicyAlways
|
|
|
|
func TestSidecarSetHash(t *testing.T) {
|
|
cases := []struct {
|
|
name string
|
|
getSidecarSet func() *appsv1alpha1.SidecarSet
|
|
expectHash string
|
|
}{
|
|
{
|
|
name: "containers",
|
|
getSidecarSet: func() *appsv1alpha1.SidecarSet {
|
|
return &appsv1alpha1.SidecarSet{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "test-sidecar-set",
|
|
},
|
|
Spec: appsv1alpha1.SidecarSetSpec{
|
|
Containers: []appsv1alpha1.SidecarContainer{
|
|
{
|
|
Container: corev1.Container{
|
|
Name: "container1",
|
|
Image: "test-image",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
},
|
|
expectHash: "w26c4x8fz245642fdv499b464248f974xddx4x55z5dw55bc6x66464fxz77dc78",
|
|
},
|
|
{
|
|
name: "containers and initContainers",
|
|
getSidecarSet: func() *appsv1alpha1.SidecarSet {
|
|
return &appsv1alpha1.SidecarSet{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "test-sidecar-set",
|
|
},
|
|
Spec: appsv1alpha1.SidecarSetSpec{
|
|
Containers: []appsv1alpha1.SidecarContainer{
|
|
{
|
|
Container: corev1.Container{
|
|
Name: "container1",
|
|
Image: "test-image",
|
|
},
|
|
},
|
|
},
|
|
InitContainers: []appsv1alpha1.SidecarContainer{
|
|
{
|
|
Container: corev1.Container{
|
|
Name: "container1",
|
|
Image: "test-image",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
},
|
|
expectHash: "w26c4x8fz245642fdv499b464248f974xddx4x55z5dw55bc6x66464fxz77dc78",
|
|
},
|
|
{
|
|
name: "containers and initContainers with restartPolicy=Always",
|
|
getSidecarSet: func() *appsv1alpha1.SidecarSet {
|
|
return &appsv1alpha1.SidecarSet{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "test-sidecar-set",
|
|
},
|
|
Spec: appsv1alpha1.SidecarSetSpec{
|
|
Containers: []appsv1alpha1.SidecarContainer{
|
|
{
|
|
Container: corev1.Container{
|
|
Name: "container1",
|
|
Image: "test-image",
|
|
},
|
|
},
|
|
},
|
|
InitContainers: []appsv1alpha1.SidecarContainer{
|
|
{
|
|
Container: corev1.Container{
|
|
Name: "container1",
|
|
Image: "test-image",
|
|
RestartPolicy: &always,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
},
|
|
expectHash: "4xwx4d4844vd4v9x79wb4xbxf4xb29475cc4446v8cz2c2f2f5c5bw448vd42z8w",
|
|
},
|
|
}
|
|
|
|
for _, cs := range cases {
|
|
t.Run(cs.name, func(t *testing.T) {
|
|
sidecarSet := cs.getSidecarSet()
|
|
hash1, err := SidecarSetHash(sidecarSet)
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
} else if hash1 == "" {
|
|
t.Fatalf("Expected non-empty hash")
|
|
}
|
|
if cs.expectHash != hash1 {
|
|
t.Fatalf("expect(%s), but get(%s)", cs.expectHash, hash1)
|
|
}
|
|
|
|
// Change sidecar set and expect different hash
|
|
sidecarSet.Spec.Containers[0].Image = "new-image"
|
|
newHash, err := SidecarSetHash(sidecarSet)
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
} else if newHash == hash1 {
|
|
t.Fatalf("Expected different hashes for different SidecarSets")
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestSidecarSetHashWithoutImage(t *testing.T) {
|
|
cases := []struct {
|
|
name string
|
|
getSidecarSet func() *appsv1alpha1.SidecarSet
|
|
expectHash string
|
|
}{
|
|
{
|
|
name: "containers and initContainers",
|
|
getSidecarSet: func() *appsv1alpha1.SidecarSet {
|
|
return &appsv1alpha1.SidecarSet{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "test-sidecar-set",
|
|
},
|
|
Spec: appsv1alpha1.SidecarSetSpec{
|
|
Containers: []appsv1alpha1.SidecarContainer{
|
|
{
|
|
Container: corev1.Container{
|
|
Name: "container1",
|
|
Image: "test-image",
|
|
},
|
|
},
|
|
},
|
|
InitContainers: []appsv1alpha1.SidecarContainer{
|
|
{
|
|
Container: corev1.Container{
|
|
Name: "container1",
|
|
Image: "test-image",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
},
|
|
expectHash: "8wzddb4dvv9c6x8zdc77z4z75987424f457dfv6724ddw6zbdx467wz5x24fc759",
|
|
},
|
|
{
|
|
name: "containers and initContainers with restartPolicy=Always",
|
|
getSidecarSet: func() *appsv1alpha1.SidecarSet {
|
|
return &appsv1alpha1.SidecarSet{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "test-sidecar-set",
|
|
},
|
|
Spec: appsv1alpha1.SidecarSetSpec{
|
|
Containers: []appsv1alpha1.SidecarContainer{
|
|
{
|
|
Container: corev1.Container{
|
|
Name: "container1",
|
|
Image: "test-image",
|
|
},
|
|
},
|
|
},
|
|
InitContainers: []appsv1alpha1.SidecarContainer{
|
|
{
|
|
Container: corev1.Container{
|
|
Name: "container1",
|
|
Image: "test-image",
|
|
RestartPolicy: &always,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
},
|
|
expectHash: "5725fw8bwbx249bw57v5892c847dzf48bww9zb7c86xb95264fdz26654847b2c8",
|
|
},
|
|
}
|
|
|
|
for _, cs := range cases {
|
|
t.Run(cs.name, func(t *testing.T) {
|
|
sidecarSet := cs.getSidecarSet()
|
|
hash1, err := SidecarSetHashWithoutImage(sidecarSet)
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
} else if hash1 == "" {
|
|
t.Fatalf("Expected non-empty hash")
|
|
}
|
|
if cs.expectHash != hash1 {
|
|
t.Fatalf("expect(%s), but get(%s)", cs.expectHash, hash1)
|
|
}
|
|
|
|
// Change sidecar set and expect different hash
|
|
sidecarSet.Spec.Containers[0].Image = "new-image"
|
|
sidecarSet.Spec.InitContainers[0].Image = "new-image"
|
|
newHash, err := SidecarSetHashWithoutImage(sidecarSet)
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
} else if newHash != hash1 {
|
|
t.Fatalf("Expected same hashes for different SidecarSets")
|
|
}
|
|
})
|
|
}
|
|
}
|