@@ -2,11 +2,18 @@ package main
22
33import (
44 "bytes"
5+ "context"
6+ "io"
7+ "log/slog"
58 "regexp"
69 "testing"
710
811 nl "github.com/nginxinc/kubernetes-ingress/internal/logger"
12+ nic_glog "github.com/nginxinc/kubernetes-ingress/internal/logger/glog"
913 "github.com/nginxinc/kubernetes-ingress/internal/logger/levels"
14+ pkgversion "k8s.io/apimachinery/pkg/version"
15+ fakediscovery "k8s.io/client-go/discovery/fake"
16+ "k8s.io/client-go/kubernetes/fake"
1017)
1118
1219func TestLogFormats (t * testing.T ) {
@@ -46,3 +53,81 @@ func TestLogFormats(t *testing.T) {
4653 })
4754 }
4855}
56+
57+ func TestK8sVersionValidation (t * testing.T ) {
58+ testCases := []struct {
59+ name string
60+ kubeVersion string
61+ }{
62+ {
63+ name : "Earliest version 1.22.0" ,
64+ kubeVersion : "1.22.0" ,
65+ },
66+ {
67+ name : "Minor version 1.22.5" ,
68+ kubeVersion : "1.22.5" ,
69+ },
70+ {
71+ name : "Close to current 1.32.0" ,
72+ kubeVersion : "1.32.0" ,
73+ },
74+ }
75+ t .Parallel ()
76+ for _ , tc := range testCases {
77+ t .Run (tc .name , func (t * testing.T ) {
78+ // setup logger
79+ l := slog .New (nic_glog .New (io .Discard , & nic_glog.Options {Level : levels .LevelInfo }))
80+ ctx := nl .ContextWithLogger (context .Background (), l )
81+
82+ // setup kube client with version
83+ clientset := fake .NewSimpleClientset ()
84+ fakeDiscovery , _ := clientset .Discovery ().(* fakediscovery.FakeDiscovery )
85+ fakeDiscovery .FakedServerVersion = & pkgversion.Info {GitVersion : tc .kubeVersion }
86+
87+ // run test
88+ err := validateKubernetesVersionInfo (ctx , clientset )
89+ if err != nil {
90+ t .Errorf ("%v" , err )
91+ }
92+ })
93+ }
94+ }
95+
96+ func TestK8sVersionValidationBad (t * testing.T ) {
97+ testCases := []struct {
98+ name string
99+ kubeVersion string
100+ }{
101+ {
102+ name : "Before earliest version 1.21.0" ,
103+ kubeVersion : "1.21.0" ,
104+ },
105+ {
106+ name : "Empty version" ,
107+ kubeVersion : "" ,
108+ },
109+ {
110+ name : "Garbage" ,
111+ kubeVersion : "xyzabc" ,
112+ },
113+ }
114+ t .Parallel ()
115+ for _ , tc := range testCases {
116+ t .Run (tc .name , func (t * testing.T ) {
117+ // setup logger
118+ l := slog .New (nic_glog .New (io .Discard , & nic_glog.Options {Level : levels .LevelInfo }))
119+ ctx := nl .ContextWithLogger (context .Background (), l )
120+
121+ // setup kube client with version
122+ clientset := fake .NewSimpleClientset ()
123+ fakeDiscovery , _ := clientset .Discovery ().(* fakediscovery.FakeDiscovery )
124+ fakeDiscovery .FakedServerVersion = & pkgversion.Info {GitVersion : tc .kubeVersion }
125+
126+ // run test
127+ err := validateKubernetesVersionInfo (ctx , clientset )
128+ if err == nil {
129+ t .Error ("Wanted an error here" )
130+ }
131+ })
132+ }
133+ }
0 commit comments