From e27e9409dcaad78eefd79659e91364617407ae59 Mon Sep 17 00:00:00 2001 From: Matthis Holleville Date: Tue, 4 Apr 2023 01:08:53 +0200 Subject: [PATCH] feat: add tests for ingress analyzer && Use t.Fatalf to report a fatal error if RunAnalysis returns an unexpected error Signed-off-by: Matthis Holleville --- pkg/analyzer/ingressAnalyzer_test.go | 110 +++++++++++++++++++++++++++ pkg/analyzer/podAnalyzer_test.go | 6 +- pkg/analyzer/serviceAnalyzer_test.go | 6 +- 3 files changed, 118 insertions(+), 4 deletions(-) create mode 100644 pkg/analyzer/ingressAnalyzer_test.go diff --git a/pkg/analyzer/ingressAnalyzer_test.go b/pkg/analyzer/ingressAnalyzer_test.go new file mode 100644 index 0000000000..b3546804e8 --- /dev/null +++ b/pkg/analyzer/ingressAnalyzer_test.go @@ -0,0 +1,110 @@ +package analyzer + +import ( + "context" + "strings" + "testing" + + "github.com/k8sgpt-ai/k8sgpt/pkg/kubernetes" + "github.com/magiconair/properties/assert" + networkingv1 "k8s.io/api/networking/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes/fake" +) + +func TestIngressAnalyzer(t *testing.T) { + clientset := fake.NewSimpleClientset( + &networkingv1.Ingress{ + ObjectMeta: metav1.ObjectMeta{ + Name: "example", + Namespace: "default", + Annotations: map[string]string{}, + }, + }) + ingressAnalyzer := IngressAnalyzer{} + var analysisResults []Analysis + err := ingressAnalyzer.RunAnalysis(context.Background(), + &AnalysisConfiguration{ + Namespace: "default", + }, + &kubernetes.Client{ + Client: clientset, + }, nil, &analysisResults) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + assert.Equal(t, len(analysisResults), 1) +} + +func TestIngressAnalyzerWithMultipleIngresses(t *testing.T) { + clientset := fake.NewSimpleClientset( + &networkingv1.Ingress{ + ObjectMeta: metav1.ObjectMeta{ + Name: "example", + Namespace: "default", + Annotations: map[string]string{}, + }, + }, + &networkingv1.Ingress{ + ObjectMeta: metav1.ObjectMeta{ + Name: "example-2", + Namespace: "default", + Annotations: map[string]string{}, + }, + }, + ) + ingressAnalyzer := IngressAnalyzer{} + var analysisResults []Analysis + err := ingressAnalyzer.RunAnalysis(context.Background(), + &AnalysisConfiguration{ + Namespace: "default", + }, + &kubernetes.Client{ + Client: clientset, + }, nil, &analysisResults) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + assert.Equal(t, len(analysisResults), 2) +} + +func TestIngressAnalyzerWithoutIngressClassAnnotation(t *testing.T) { + + clientset := fake.NewSimpleClientset( + &networkingv1.Ingress{ + ObjectMeta: metav1.ObjectMeta{ + Name: "example", + Namespace: "default", + Annotations: map[string]string{}, + }, + }) + ingressAnalyzer := IngressAnalyzer{} + + var analysisResults []Analysis + err := ingressAnalyzer.RunAnalysis(context.Background(), + &AnalysisConfiguration{ + Namespace: "default", + }, + &kubernetes.Client{ + Client: clientset, + }, nil, &analysisResults) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + var errorFound bool + for _, analysis := range analysisResults { + for _, err := range analysis.Error { + if strings.Contains(err, "does not specify an Ingress class") { + errorFound = true + break + } + } + if errorFound { + break + } + } + if !errorFound { + t.Error("expected error 'does not specify an Ingress class' not found in analysis results") + } +} diff --git a/pkg/analyzer/podAnalyzer_test.go b/pkg/analyzer/podAnalyzer_test.go index 36748aea9f..0baf4b4935 100644 --- a/pkg/analyzer/podAnalyzer_test.go +++ b/pkg/analyzer/podAnalyzer_test.go @@ -33,13 +33,15 @@ func TestPodAnalzyer(t *testing.T) { podAnalyzer := PodAnalyzer{} var analysisResults []Analysis - podAnalyzer.RunAnalysis(context.Background(), + err := podAnalyzer.RunAnalysis(context.Background(), &AnalysisConfiguration{ Namespace: "default", }, &kubernetes.Client{ Client: clientset, }, nil, &analysisResults) - + if err != nil { + t.Fatalf("unexpected error: %v", err) + } assert.Equal(t, len(analysisResults), 1) } diff --git a/pkg/analyzer/serviceAnalyzer_test.go b/pkg/analyzer/serviceAnalyzer_test.go index d15db35b6f..aebdebf700 100644 --- a/pkg/analyzer/serviceAnalyzer_test.go +++ b/pkg/analyzer/serviceAnalyzer_test.go @@ -34,13 +34,15 @@ func TestServiceAnalzyer(t *testing.T) { serviceAnalyzer := ServiceAnalyzer{} var analysisResults []Analysis - serviceAnalyzer.RunAnalysis(context.Background(), + err := serviceAnalyzer.RunAnalysis(context.Background(), &AnalysisConfiguration{ Namespace: "default", }, &kubernetes.Client{ Client: clientset, }, nil, &analysisResults) - + if err != nil { + t.Fatalf("unexpected error: %v", err) + } assert.Equal(t, len(analysisResults), 1) }