From 35b838bfafa248dbf3932c7a3ee708b1a1539f18 Mon Sep 17 00:00:00 2001 From: AlexsJones Date: Sun, 2 Apr 2023 21:17:05 +0100 Subject: [PATCH] feat: adding unit testing and example Signed-off-by: AlexsJones --- go.mod | 2 ++ go.sum | 3 +++ pkg/analyzer/events.go | 1 + pkg/analyzer/podAnalyzer_test.go | 45 ++++++++++++++++++++++++++++++++ pkg/kubernetes/kubernetes.go | 8 +++--- 5 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 pkg/analyzer/podAnalyzer_test.go diff --git a/go.mod b/go.mod index e625aca340..8b6b1b2afe 100644 --- a/go.mod +++ b/go.mod @@ -17,6 +17,7 @@ require ( require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful/v3 v3.10.2 // indirect + github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect @@ -44,6 +45,7 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pelletier/go-toml/v2 v2.0.7 // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/rivo/uniseg v0.4.4 // indirect github.com/spf13/afero v1.9.5 // indirect github.com/spf13/cast v1.5.0 // indirect diff --git a/go.sum b/go.sum index 21436dd0e5..185915f6c9 100644 --- a/go.sum +++ b/go.sum @@ -66,6 +66,8 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= +github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= @@ -212,6 +214,7 @@ github.com/onsi/ginkgo/v2 v2.4.0 h1:+Ig9nvqgS5OBSACXNk15PLdp0U9XPYROt9CFzVdFGIs= github.com/onsi/gomega v1.23.0 h1:/oxKu9c2HVap+F3PfKort2Hw5DEU+HGlW8n+tguWsys= github.com/pelletier/go-toml/v2 v2.0.7 h1:muncTPStnKRos5dpVKULv2FVd4bMOhNePj9CjgDb8Us= github.com/pelletier/go-toml/v2 v2.0.7/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= diff --git a/pkg/analyzer/events.go b/pkg/analyzer/events.go index b593567757..6392e24d2f 100644 --- a/pkg/analyzer/events.go +++ b/pkg/analyzer/events.go @@ -2,6 +2,7 @@ package analyzer import ( "context" + "github.com/k8sgpt-ai/k8sgpt/pkg/kubernetes" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/pkg/analyzer/podAnalyzer_test.go b/pkg/analyzer/podAnalyzer_test.go new file mode 100644 index 0000000000..36748aea9f --- /dev/null +++ b/pkg/analyzer/podAnalyzer_test.go @@ -0,0 +1,45 @@ +package analyzer + +import ( + "context" + "testing" + + "github.com/k8sgpt-ai/k8sgpt/pkg/kubernetes" + "github.com/magiconair/properties/assert" + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes/fake" +) + +func TestPodAnalzyer(t *testing.T) { + + clientset := fake.NewSimpleClientset(&v1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "example", + Namespace: "default", + Annotations: map[string]string{}, + }, + Status: v1.PodStatus{ + Phase: v1.PodPending, + Conditions: []v1.PodCondition{ + { + Type: v1.PodScheduled, + Reason: "Unschedulable", + Message: "0/1 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate.", + }, + }, + }, + }) + + podAnalyzer := PodAnalyzer{} + var analysisResults []Analysis + podAnalyzer.RunAnalysis(context.Background(), + &AnalysisConfiguration{ + Namespace: "default", + }, + &kubernetes.Client{ + Client: clientset, + }, nil, &analysisResults) + + assert.Equal(t, len(analysisResults), 1) +} diff --git a/pkg/kubernetes/kubernetes.go b/pkg/kubernetes/kubernetes.go index 522b2c4a98..382558c209 100644 --- a/pkg/kubernetes/kubernetes.go +++ b/pkg/kubernetes/kubernetes.go @@ -6,11 +6,11 @@ import ( ) type Client struct { - client *kubernetes.Clientset + Client kubernetes.Interface } -func (c *Client) GetClient() *kubernetes.Clientset { - return c.client +func (c *Client) GetClient() kubernetes.Interface { + return c.Client } func NewClient(kubecontext string, kubeconfig string) (*Client, error) { @@ -31,6 +31,6 @@ func NewClient(kubecontext string, kubeconfig string) (*Client, error) { } return &Client{ - client: clientSet, + Client: clientSet, }, nil }