mirror of
https://github.com/k8sgpt-ai/k8sgpt.git
synced 2025-04-28 03:20:56 +00:00
* feat: fix the custom-analysis printing (#1195) Signed-off-by: Alex Jones <alexsimonjones@gmail.com> Signed-off-by: JuHyung-Son <sonju0427@gmail.com> * feat: add label selector Signed-off-by: JuHyung-Son <sonju0427@gmail.com> * feat: add label selector on analyzers Signed-off-by: JuHyung-Son <sonju0427@gmail.com> * chore(deps): pin goreleaser/goreleaser-action action to 286f3b1 (#1171) Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: JuHyung-Son <sonju0427@gmail.com> * fix(deps): update module buf.build/gen/go/k8sgpt-ai/k8sgpt/grpc/go to v1.4.0-20240715142657-3785f0a44aae.2 (#1196) Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: JuHyung-Son <sonju0427@gmail.com> * chore(deps): update actions/upload-artifact digest to 0b2256b (#1175) Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: JuHyung-Son <sonju0427@gmail.com> * chore: update proto pkg version Signed-off-by: JuHyung-Son <sonju0427@gmail.com> * chore: fix typo Signed-off-by: JuHyung-Son <sonju0427@gmail.com> * feat: add label string to LabelSelector util func Signed-off-by: JuHyung-Son <sonju0427@gmail.com> * feat: add test using 2 label selector Signed-off-by: JuHyung-Son <sonju0427@gmail.com> --------- Signed-off-by: Alex Jones <alexsimonjones@gmail.com> Signed-off-by: JuHyung-Son <sonju0427@gmail.com> Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: JuHyung Son <sonju0427@gmail.com> Co-authored-by: Alex Jones <alexsimonjones@gmail.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
106 lines
3.0 KiB
Go
106 lines
3.0 KiB
Go
package analyzer
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/k8sgpt-ai/k8sgpt/pkg/common"
|
|
"github.com/k8sgpt-ai/k8sgpt/pkg/kubernetes"
|
|
"github.com/stretchr/testify/assert"
|
|
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/client-go/kubernetes/scheme"
|
|
fakeclient "sigs.k8s.io/controller-runtime/pkg/client/fake"
|
|
gtwapi "sigs.k8s.io/gateway-api/apis/v1"
|
|
)
|
|
|
|
// Testing with the fake dynamic client if GatewayClasses have an accepted status
|
|
func TestGatewayClassAnalyzer(t *testing.T) {
|
|
GatewayClass := >wapi.GatewayClass{}
|
|
GatewayClass.Name = "foobar"
|
|
GatewayClass.Spec.ControllerName = "gateway.fooproxy.io/gatewayclass-controller"
|
|
// Initialize Conditions slice before setting properties
|
|
BadCondition := metav1.Condition{
|
|
Type: "Accepted",
|
|
Status: "Uknown",
|
|
Message: "Waiting for controller",
|
|
Reason: "Pending",
|
|
}
|
|
GatewayClass.Status.Conditions = []metav1.Condition{BadCondition}
|
|
// Create a GatewayClassAnalyzer instance with the fake client
|
|
scheme := scheme.Scheme
|
|
err := gtwapi.Install(scheme)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
err = apiextensionsv1.AddToScheme(scheme)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
fakeClient := fakeclient.NewClientBuilder().WithScheme(scheme).WithRuntimeObjects(GatewayClass).Build()
|
|
|
|
analyzerInstance := GatewayClassAnalyzer{}
|
|
config := common.Analyzer{
|
|
Client: &kubernetes.Client{
|
|
CtrlClient: fakeClient,
|
|
},
|
|
Context: context.Background(),
|
|
Namespace: "default",
|
|
}
|
|
analysisResults, err := analyzerInstance.Analyze(config)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
assert.Equal(t, len(analysisResults), 1)
|
|
|
|
}
|
|
|
|
func TestGatewayClassAnalyzerLabelSelectorFiltering(t *testing.T) {
|
|
condition := metav1.Condition{
|
|
Type: "Accepted",
|
|
Status: "Ready",
|
|
Message: "Ready",
|
|
Reason: "Ready",
|
|
}
|
|
|
|
// Create two GatewayClasses with different labels
|
|
GatewayClass := >wapi.GatewayClass{}
|
|
GatewayClass.Name = "foobar"
|
|
GatewayClass.Spec.ControllerName = "gateway.fooproxy.io/gatewayclass-controller"
|
|
GatewayClass.Labels = map[string]string{"app": "gatewayclass"}
|
|
GatewayClass.Status.Conditions = []metav1.Condition{condition}
|
|
|
|
GatewayClass2 := >wapi.GatewayClass{}
|
|
GatewayClass2.Name = "foobar2"
|
|
GatewayClass2.Spec.ControllerName = "gateway.fooproxy.io/gatewayclass-controller"
|
|
GatewayClass2.Status.Conditions = []metav1.Condition{condition}
|
|
|
|
scheme := scheme.Scheme
|
|
err := gtwapi.Install(scheme)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
err = apiextensionsv1.AddToScheme(scheme)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
fakeClient := fakeclient.NewClientBuilder().WithScheme(scheme).WithRuntimeObjects(GatewayClass, GatewayClass2).Build()
|
|
|
|
analyzerInstance := GatewayClassAnalyzer{}
|
|
config := common.Analyzer{
|
|
Client: &kubernetes.Client{
|
|
CtrlClient: fakeClient,
|
|
},
|
|
Context: context.Background(),
|
|
Namespace: "default",
|
|
LabelSelector: "app=gatewayclass",
|
|
}
|
|
analysisResults, err := analyzerInstance.Analyze(config)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
assert.Equal(t, len(analysisResults), 1)
|
|
}
|