@@ -18,11 +18,134 @@ package upgrade
18
18
19
19
import (
20
20
"bytes"
21
+ "fmt"
22
+ "io/ioutil"
23
+ "os"
21
24
"testing"
25
+ "time"
22
26
23
27
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
24
28
)
25
29
30
+ const (
31
+ validConfig = `apiVersion: kubeadm.k8s.io/v1beta1
32
+ kind: ClusterConfiguration
33
+ kubernetesVersion: 1.13.0
34
+ `
35
+ )
36
+
37
+ func TestGetK8sVersionFromUserInput (t * testing.T ) {
38
+ var tcases = []struct {
39
+ name string
40
+ isVersionMandatory bool
41
+ clusterConfig string
42
+ args []string
43
+ expectedErr bool
44
+ expectedVersion string
45
+ }{
46
+ {
47
+ name : "No config and version as an argument" ,
48
+ isVersionMandatory : true ,
49
+ args : []string {"v1.13.1" },
50
+ expectedVersion : "v1.13.1" ,
51
+ },
52
+ {
53
+ name : "Neither config nor version specified" ,
54
+ isVersionMandatory : true ,
55
+ expectedErr : true ,
56
+ },
57
+ {
58
+ name : "No config and empty version as an argument" ,
59
+ isVersionMandatory : true ,
60
+ args : []string {"" },
61
+ expectedErr : true ,
62
+ },
63
+ {
64
+ name : "Valid config, but no version specified" ,
65
+ isVersionMandatory : true ,
66
+ clusterConfig : validConfig ,
67
+ expectedVersion : "v1.13.0" ,
68
+ },
69
+ {
70
+ name : "Valid config and different version specified" ,
71
+ isVersionMandatory : true ,
72
+ clusterConfig : validConfig ,
73
+ args : []string {"v1.13.1" },
74
+ expectedVersion : "v1.13.1" ,
75
+ },
76
+ {
77
+ name : "Version is optional" ,
78
+ },
79
+ }
80
+ for tnum , tt := range tcases {
81
+ t .Run (tt .name , func (t * testing.T ) {
82
+ flags := & applyPlanFlags {}
83
+ if len (tt .clusterConfig ) > 0 {
84
+ tmpfile := fmt .Sprintf ("/tmp/kubeadm-upgrade-common-test-%d-%d.yaml" , tnum , time .Now ().Unix ())
85
+ if err := ioutil .WriteFile (tmpfile , []byte (tt .clusterConfig ), 0666 ); err != nil {
86
+ t .Fatalf ("Failed to create test config file: %+v" , err )
87
+ }
88
+ defer os .Remove (tmpfile )
89
+
90
+ flags .cfgPath = tmpfile
91
+ }
92
+
93
+ userVersion , err := getK8sVersionFromUserInput (flags , tt .args , tt .isVersionMandatory )
94
+
95
+ if err == nil && tt .expectedErr {
96
+ t .Error ("Expected error, but got success" )
97
+ }
98
+ if err != nil && ! tt .expectedErr {
99
+ t .Errorf ("Unexpected error: %+v" , err )
100
+ }
101
+ if userVersion != tt .expectedVersion {
102
+ t .Errorf ("Expected '%s', but got '%s'" , tt .expectedVersion , userVersion )
103
+ }
104
+ })
105
+ }
106
+ }
107
+
108
+ func TestEnforceRequirements (t * testing.T ) {
109
+ tcases := []struct {
110
+ name string
111
+ newK8sVersion string
112
+ dryRun bool
113
+ flags applyPlanFlags
114
+ expectedErr bool
115
+ }{
116
+ {
117
+ name : "Fail pre-flight check" ,
118
+ expectedErr : true ,
119
+ },
120
+ {
121
+ name : "Bogus preflight check disabled when also 'all' is specified" ,
122
+ flags : applyPlanFlags {
123
+ ignorePreflightErrors : []string {"bogusvalue" , "all" },
124
+ },
125
+ expectedErr : true ,
126
+ },
127
+ {
128
+ name : "Fail to create client" ,
129
+ flags : applyPlanFlags {
130
+ ignorePreflightErrors : []string {"all" },
131
+ },
132
+ expectedErr : true ,
133
+ },
134
+ }
135
+ for _ , tt := range tcases {
136
+ t .Run (tt .name , func (t * testing.T ) {
137
+ _ , _ , _ , err := enforceRequirements (& tt .flags , tt .dryRun , tt .newK8sVersion )
138
+
139
+ if err == nil && tt .expectedErr {
140
+ t .Error ("Expected error, but got success" )
141
+ }
142
+ if err != nil && ! tt .expectedErr {
143
+ t .Errorf ("Unexpected error: %+v" , err )
144
+ }
145
+ })
146
+ }
147
+ }
148
+
26
149
func TestPrintConfiguration (t * testing.T ) {
27
150
var tests = []struct {
28
151
name string
0 commit comments