@@ -2,11 +2,18 @@ package main
2
2
3
3
import (
4
4
"bytes"
5
+ "context"
6
+ "io"
7
+ "log/slog"
5
8
"regexp"
6
9
"testing"
7
10
8
11
nl "github.com/nginxinc/kubernetes-ingress/internal/logger"
12
+ nic_glog "github.com/nginxinc/kubernetes-ingress/internal/logger/glog"
9
13
"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"
10
17
)
11
18
12
19
func TestLogFormats (t * testing.T ) {
@@ -46,3 +53,81 @@ func TestLogFormats(t *testing.T) {
46
53
})
47
54
}
48
55
}
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