@@ -17,100 +17,103 @@ limitations under the License.
17
17
package config
18
18
19
19
import (
20
- "bytes"
21
20
"io/ioutil"
21
+ "os"
22
+ "path/filepath"
22
23
"testing"
23
24
24
- "k8s.io/apimachinery/pkg/runtime/schema"
25
- "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
26
- "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme"
27
- kubeadmapiv1beta1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1"
28
- kubeadmapiv1beta2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2"
29
- kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
30
- )
31
-
32
- const (
33
- nodeV1beta1YAML = "testdata/conversion/node/v1beta1.yaml"
34
- nodeV1beta2YAML = "testdata/conversion/node/v1beta2.yaml"
35
- nodeInternalYAML = "testdata/conversion/node/internal.yaml"
36
- nodeIncompleteYAML = "testdata/defaulting/node/incomplete.yaml"
37
- nodeDefaultedYAML = "testdata/defaulting/node/defaulted.yaml"
38
- nodeInvalidYAML = "testdata/validation/invalid_nodecfg.yaml"
25
+ "github.com/lithammer/dedent"
39
26
)
40
27
41
28
func TestLoadJoinConfigurationFromFile (t * testing.T ) {
29
+ // Create temp folder for the test case
30
+ tmpdir , err := ioutil .TempDir ("" , "" )
31
+ if err != nil {
32
+ t .Fatalf ("Couldn't create tmpdir: %v" , err )
33
+ }
34
+ defer os .RemoveAll (tmpdir )
35
+
36
+ // cfgFiles is in cluster_test.go
42
37
var tests = []struct {
43
- name , in , out string
44
- groupVersion schema. GroupVersion
45
- expectedErr bool
38
+ name string
39
+ fileContents string
40
+ expectErr bool
46
41
}{
47
- // These tests are reading one file, loading it using LoadJoinConfigurationFromFile that all of kubeadm is using for unmarshal of our API types,
48
- // and then marshals the internal object to the expected groupVersion
49
- { // v1beta1 -> internal
50
- name : "v1beta1ToInternal" ,
51
- in : nodeV1beta1YAML ,
52
- out : nodeInternalYAML ,
53
- groupVersion : kubeadm .SchemeGroupVersion ,
54
- },
55
- { // v1beta1 -> internal -> v1beta1
56
- name : "v1beta1Tov1beta1" ,
57
- in : nodeV1beta1YAML ,
58
- out : nodeV1beta1YAML ,
59
- groupVersion : kubeadmapiv1beta1 .SchemeGroupVersion ,
42
+ {
43
+ name : "empty file causes error" ,
44
+ expectErr : true ,
60
45
},
61
- { // v1beta2 -> internal
62
- name : "v1beta2ToInternal" ,
63
- in : nodeV1beta2YAML ,
64
- out : nodeInternalYAML ,
65
- groupVersion : kubeadm .SchemeGroupVersion ,
46
+ {
47
+ name : "Invalid v1beta1 causes error" ,
48
+ fileContents : dedent .Dedent (`
49
+ apiVersion: kubeadm.k8s.io/v1beta1
50
+ kind: JoinConfiguration
51
+ ` ),
52
+ expectErr : true ,
66
53
},
67
- { // v1beta2 -> internal -> v1beta2
68
- name : "v1beta2Tov1beta2" ,
69
- in : nodeV1beta2YAML ,
70
- out : nodeV1beta2YAML ,
71
- groupVersion : kubeadmapiv1beta2 .SchemeGroupVersion ,
54
+ {
55
+ name : "valid v1beta1 is loaded" ,
56
+ fileContents : dedent .Dedent (`
57
+ apiVersion: kubeadm.k8s.io/v1beta1
58
+ kind: JoinConfiguration
59
+ caCertPath: /etc/kubernetes/pki/ca.crt
60
+ discovery:
61
+ bootstrapToken:
62
+ apiServerEndpoint: kube-apiserver:6443
63
+ token: abcdef.0123456789abcdef
64
+ unsafeSkipCAVerification: true
65
+ timeout: 5m0s
66
+ tlsBootstrapToken: abcdef.0123456789abcdef
67
+ ` ),
72
68
},
73
- // These tests are reading one file that has only a subset of the fields populated, loading it using LoadJoinConfigurationFromFile,
74
- // and then marshals the internal object to the expected groupVersion
75
- { // v1beta2 -> default -> validate -> internal -> v1beta2
76
- name : "incompleteYAMLToDefaultedv1beta2" ,
77
- in : nodeIncompleteYAML ,
78
- out : nodeDefaultedYAML ,
79
- groupVersion : kubeadmapiv1beta2 . SchemeGroupVersion ,
69
+ {
70
+ name : "Invalid v1beta2 causes error" ,
71
+ fileContents : dedent . Dedent ( `
72
+ apiVersion: kubeadm.k8s.io/v1beta2
73
+ kind: JoinConfiguration
74
+ ` ) ,
75
+ expectErr : true ,
80
76
},
81
- { // v1beta2 -> validation should fail
82
- name : "invalidYAMLShouldFail" ,
83
- in : nodeInvalidYAML ,
84
- expectedErr : true ,
77
+ {
78
+ name : "valid v1beta2 is loaded" ,
79
+ fileContents : dedent .Dedent (`
80
+ apiVersion: kubeadm.k8s.io/v1beta2
81
+ kind: JoinConfiguration
82
+ caCertPath: /etc/kubernetes/pki/ca.crt
83
+ discovery:
84
+ bootstrapToken:
85
+ apiServerEndpoint: kube-apiserver:6443
86
+ token: abcdef.0123456789abcdef
87
+ unsafeSkipCAVerification: true
88
+ timeout: 5m0s
89
+ tlsBootstrapToken: abcdef.0123456789abcdef
90
+ ` ),
85
91
},
86
92
}
87
93
88
94
for _ , rt := range tests {
89
95
t .Run (rt .name , func (t2 * testing.T ) {
90
-
91
- internalcfg , err := LoadJoinConfigurationFromFile ( rt .in )
96
+ cfgPath := filepath . Join ( tmpdir , rt . name )
97
+ err := ioutil . WriteFile ( cfgPath , [] byte ( rt .fileContents ), 0644 )
92
98
if err != nil {
93
- if rt .expectedErr {
94
- return
95
- }
96
- t2 .Fatalf ("couldn't unmarshal test data: %v" , err )
97
- } else if rt .expectedErr {
98
- t2 .Fatalf ("expected error, but no error returned" )
99
+ t .Errorf ("Couldn't create file: %v" , err )
100
+ return
99
101
}
100
102
101
- actual , err := kubeadmutil .MarshalToYamlForCodecs (internalcfg , rt .groupVersion , scheme .Codecs )
102
- if err != nil {
103
- t2 .Fatalf ("couldn't marshal internal object: %v" , err )
104
- }
105
-
106
- expected , err := ioutil .ReadFile (rt .out )
107
- if err != nil {
108
- t2 .Fatalf ("couldn't read test data: %v" , err )
109
- }
103
+ obj , err := LoadJoinConfigurationFromFile (cfgPath )
104
+ if rt .expectErr {
105
+ if err == nil {
106
+ t .Error ("Unexpected success" )
107
+ }
108
+ } else {
109
+ if err != nil {
110
+ t .Errorf ("Error reading file: %v" , err )
111
+ return
112
+ }
110
113
111
- if ! bytes . Equal ( expected , actual ) {
112
- t2 . Errorf ( "the expected and actual output differs. \n \t in: %s \n \t out: %s \n \t groupversion: %s \n \t diff: \n %s \n " ,
113
- rt . in , rt . out , rt . groupVersion . String (), diff ( expected , actual ))
114
+ if obj == nil {
115
+ t . Error ( "Unexpected nil return value" )
116
+ }
114
117
}
115
118
})
116
119
}
0 commit comments