mirror of
https://github.com/k8sgpt-ai/k8sgpt.git
synced 2025-09-19 09:50:13 +00:00
76 lines
1.9 KiB
Go
76 lines
1.9 KiB
Go
package analyzer
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/k8sgpt-ai/k8sgpt/pkg/common"
|
|
"github.com/k8sgpt-ai/k8sgpt/pkg/kubernetes"
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
dynamicfake "k8s.io/client-go/dynamic/fake"
|
|
)
|
|
|
|
func TestInstallPlanAnalyzer(t *testing.T) {
|
|
ok := &unstructured.Unstructured{
|
|
Object: map[string]any{
|
|
"apiVersion": "operators.coreos.com/v1alpha1",
|
|
"kind": "InstallPlan",
|
|
"metadata": map[string]any{
|
|
"name": "ip-ok",
|
|
"namespace": "ns1",
|
|
},
|
|
"status": map[string]any{"phase": "Complete"},
|
|
},
|
|
}
|
|
|
|
bad := &unstructured.Unstructured{
|
|
Object: map[string]any{
|
|
"apiVersion": "operators.coreos.com/v1alpha1",
|
|
"kind": "InstallPlan",
|
|
"metadata": map[string]any{
|
|
"name": "ip-bad",
|
|
"namespace": "ns1",
|
|
},
|
|
"status": map[string]any{
|
|
"phase": "Failed",
|
|
"conditions": []interface{}{
|
|
map[string]any{
|
|
"reason": "ExecutionError",
|
|
"message": "something went wrong",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
listKinds := map[schema.GroupVersionResource]string{
|
|
{Group: "operators.coreos.com", Version: "v1alpha1", Resource: "installplans"}: "InstallPlanList",
|
|
}
|
|
|
|
scheme := runtime.NewScheme()
|
|
dc := dynamicfake.NewSimpleDynamicClientWithCustomListKinds(scheme, listKinds, ok, bad)
|
|
|
|
a := common.Analyzer{
|
|
Context: context.TODO(),
|
|
Client: &kubernetes.Client{DynamicClient: dc},
|
|
}
|
|
|
|
res, err := (InstallPlanAnalyzer{}).Analyze(a)
|
|
if err != nil {
|
|
t.Fatalf("Analyze error: %v", err)
|
|
}
|
|
|
|
if len(res) != 1 {
|
|
t.Fatalf("expected 1 result, got %d", len(res))
|
|
}
|
|
if res[0].Kind != "InstallPlan" || !strings.Contains(res[0].Name, "ns1/ip-bad") {
|
|
t.Fatalf("unexpected result: %#v", res[0])
|
|
}
|
|
if len(res[0].Error) == 0 || !strings.Contains(res[0].Error[0].Text, "ExecutionError") {
|
|
t.Fatalf("expected 'ExecutionError' in failure, got %#v", res[0].Error)
|
|
}
|
|
}
|