107 lines
2.7 KiB
Go
107 lines
2.7 KiB
Go
package cache
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
appsv1 "k8s.io/api/apps/v1"
|
|
corev1 "k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
|
|
|
"github.com/argoproj/gitops-engine/pkg/utils/kube"
|
|
)
|
|
|
|
func Test_isStatefulSetChild(t *testing.T) {
|
|
type args struct {
|
|
un *unstructured.Unstructured
|
|
}
|
|
|
|
statefulSet := &appsv1.StatefulSet{
|
|
TypeMeta: metav1.TypeMeta{
|
|
APIVersion: "apps/v1",
|
|
Kind: "StatefulSet",
|
|
},
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "sw-broker",
|
|
},
|
|
Spec: appsv1.StatefulSetSpec{
|
|
VolumeClaimTemplates: []corev1.PersistentVolumeClaim{
|
|
{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "emqx-data",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
// Create a new unstructured object from the JSON string
|
|
un, err := kube.ToUnstructured(statefulSet)
|
|
require.NoErrorf(t, err, "Failed to convert StatefulSet to unstructured: %v", err)
|
|
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
wantErr bool
|
|
checkFunc func(func(kube.ResourceKey) bool) bool
|
|
}{
|
|
{
|
|
name: "Valid PVC for sw-broker",
|
|
args: args{un: un},
|
|
wantErr: false,
|
|
checkFunc: func(fn func(kube.ResourceKey) bool) bool {
|
|
// Check a valid PVC name for "sw-broker"
|
|
return fn(kube.ResourceKey{Kind: "PersistentVolumeClaim", Name: "emqx-data-sw-broker-0"})
|
|
},
|
|
},
|
|
{
|
|
name: "Invalid PVC for sw-broker",
|
|
args: args{un: un},
|
|
wantErr: false,
|
|
checkFunc: func(fn func(kube.ResourceKey) bool) bool {
|
|
// Check an invalid PVC name that should belong to "sw-broker-internal"
|
|
return !fn(kube.ResourceKey{Kind: "PersistentVolumeClaim", Name: "emqx-data-sw-broker-internal-0"})
|
|
},
|
|
},
|
|
{
|
|
name: "Mismatch PVC for sw-broker",
|
|
args: args{un: &unstructured.Unstructured{
|
|
Object: map[string]any{
|
|
"apiVersion": "apps/v1",
|
|
"kind": "StatefulSet",
|
|
"metadata": map[string]any{
|
|
"name": "sw-broker",
|
|
},
|
|
"spec": map[string]any{
|
|
"volumeClaimTemplates": []any{
|
|
map[string]any{
|
|
"metadata": map[string]any{
|
|
"name": "volume-2",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}},
|
|
wantErr: false,
|
|
checkFunc: func(fn func(kube.ResourceKey) bool) bool {
|
|
// Check an invalid PVC name for "api-test"
|
|
return !fn(kube.ResourceKey{Kind: "PersistentVolumeClaim", Name: "volume-2"})
|
|
},
|
|
},
|
|
}
|
|
|
|
// Execute test cases
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got, err := isStatefulSetChild(tt.args.un)
|
|
assert.Equal(t, tt.wantErr, err != nil, "isStatefulSetChild() error = %v, wantErr %v", err, tt.wantErr)
|
|
if err == nil {
|
|
assert.True(t, tt.checkFunc(got), "Check function failed for %v", tt.name)
|
|
}
|
|
})
|
|
}
|
|
}
|