4
4
package nutanix
5
5
6
6
import (
7
+ "bytes"
7
8
"fmt"
9
+ "os/exec"
10
+ "path/filepath"
11
+ "strings"
8
12
"testing"
13
+ "text/template"
9
14
10
15
"github.com/stretchr/testify/assert"
11
16
"github.com/stretchr/testify/require"
17
+ corev1 "k8s.io/api/core/v1"
18
+ "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
19
+ "sigs.k8s.io/yaml"
12
20
13
21
"github.com/nutanix-cloud-native/cluster-api-runtime-extensions-nutanix/api/v1alpha1"
14
22
apivariables "github.com/nutanix-cloud-native/cluster-api-runtime-extensions-nutanix/api/variables"
15
23
)
16
24
17
25
const (
18
- in = `---
19
- prismCentralEndPoint: {{ .PrismCentralHost }}
20
- prismCentralPort: {{ .PrismCentralPort }}
21
- prismCentralInsecure: {{ .PrismCentralInsecure }}
22
- prismCentralAdditionalTrustBundle: "{{ or .PrismCentralAdditionalTrustBundle "" }}"
23
-
24
- # The Secret containing the credentials will be created by the handler.
25
- createSecret: false
26
- secretName: nutanix-ccm-credentials
27
- `
28
26
//nolint:lll // just a long string
29
27
testCertBundle = "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVjekNDQTF1Z0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRUUZBRC4uQWtHQTFVRUJoTUNSMEl4CkV6QVJCZ05WQkFnVENsTnZiV1V0VTNSaGRHVXhGREFTQmdOVkJBb1RDMC4uMEVnVEhSa01UY3dOUVlEClZRUUxFeTVEYkdGemN5QXhJRkIxWW14cFl5QlFjbWx0WVhKNUlFTmxjbi4uWFJwYjI0Z1FYVjBhRzl5CmFYUjVNUlF3RWdZRFZRUURFd3RDWlhOMElFTkJJRXgwWkRBZUZ3MHdNRC4uVFV3TVRaYUZ3MHdNVEF5Ck1EUXhPVFV3TVRaYU1JR0hNUXN3Q1FZRFZRUUdFd0pIUWpFVE1CRUdBMS4uMjl0WlMxVGRHRjBaVEVVCk1CSUdBMVVFQ2hNTFFtVnpkQ0JEUVNCTWRHUXhOekExQmdOVkJBc1RMay4uREVnVUhWaWJHbGpJRkJ5CmFXMWhjbmtnUTJWeWRHbG1hV05oZEdsdmJpQkJkWFJvYjNKcGRIa3hGRC4uQU1UQzBKbGMzUWdRMEVnClRIUmtNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZy4uVHoybXI3U1ppQU1mUXl1CnZCak05T2lKalJhelhCWjFCalA1Q0UvV20vUnI1MDBQUksrTGg5eDVlSi4uL0FOQkUwc1RLMFpzREdNCmFrMm0xZzdvcnVJM2RZM1ZIcUl4RlR6MFRhMWQrTkFqd25MZTRuT2I3Ly4uazA1U2hoQnJKR0JLS3hiCjhuMTA0by81cDhIQXNaUGR6YkZNSXlOakp6Qk0ybzV5NUExM3dpTGl0RS4uZnlZa1F6YXhDdzBBd3psCmtWSGlJeUN1YUY0d2o1NzFwU3prdjZzdis0SURNYlQvWHBDbzhMNndUYS4uc2grZXRMRDZGdFRqWWJiCnJ2WjhSUU0xdGxLZG9NSGcycXhyYUFWKytITkJZbU5XczBkdUVkalViSi4uWEk5VHRuUzRvMUNrajdQCk9mbGppUUlEQVFBQm80SG5NSUhrTUIwR0ExVWREZ1FXQkJROHVyTUNSTC4uNUFrSXA5TkpISnc1VENCCnRBWURWUjBqQklHc01JR3BnQlE4dXJNQ1JMWVlNSFVLVTVBa0lwOU5KSC4uYVNCaWpDQmh6RUxNQWtHCkExVUVCaE1DUjBJeEV6QVJCZ05WQkFnVENsTnZiV1V0VTNSaGRHVXhGRC4uQW9UQzBKbGMzUWdRMEVnClRIUmtNVGN3TlFZRFZRUUxFeTVEYkdGemN5QXhJRkIxWW14cFl5QlFjbS4uRU5sY25ScFptbGpZWFJwCmIyNGdRWFYwYUc5eWFYUjVNUlF3RWdZRFZRUURFd3RDWlhOMElFTkJJRS4uREFNQmdOVkhSTUVCVEFECkFRSC9NQTBHQ1NxR1NJYjNEUUVCQkFVQUE0SUJBUUMxdVlCY3NTbmN3QS4uRENzUWVyNzcyQzJ1Y3BYCnhRVUUvQzBwV1dtNmdEa3dkNUQwRFNNREpScVYvd2VvWjR3QzZCNzNmNS4uYkxoR1lIYVhKZVNENktyClhjb093TGRTYUdtSllzbExLWkIzWklERXAwd1lUR2hndGViNkpGaVR0bi4uc2YyeGRyWWZQQ2lJQjdnCkJNQVY3R3pkYzRWc3BTNmxqckFoYmlpYXdkQmlRbFFtc0JlRno5SmtGNC4uYjNsOEJvR04rcU1hNTZZCkl0OHVuYTJnWTRsMk8vL29uODhyNUlXSmxtMUwwb0E4ZTRmUjJ5ckJIWC4uYWRzR2VGS2t5TnJ3R2kvCjd2UU1mWGRHc1JyWE5HUkduWCt2V0RaMy96V0kwam9EdENrTm5xRXBWbi4uSG9YCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0="
30
28
)
@@ -39,24 +37,61 @@ prismCentralAdditionalTrustBundle: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVj
39
37
40
38
# The Secret containing the credentials will be created by the handler.
41
39
createSecret: false
42
- secretName: nutanix-ccm-credentials
43
- `
40
+ secretName: nutanix-ccm-credentials`
44
41
45
42
expectedWithoutAdditionalTrustBundle = `---
46
43
prismCentralEndPoint: prism-central.nutanix.com
47
44
prismCentralPort: 9440
48
45
prismCentralInsecure: true
49
- prismCentralAdditionalTrustBundle: ""
50
46
51
47
# The Secret containing the credentials will be created by the handler.
52
48
createSecret: false
53
- secretName: nutanix-ccm-credentials
54
- `
49
+ secretName: nutanix-ccm-credentials`
50
+ )
51
+
52
+ var templateFile = filepath .Join (
53
+ moduleRootDir (),
54
+ "charts" ,
55
+ "cluster-api-runtime-extensions-nutanix" ,
56
+ "templates" ,
57
+ "ccm" ,
58
+ "nutanix" ,
59
+ "manifests" ,
60
+ "helm-addon-installation.yaml" ,
55
61
)
56
62
57
63
func Test_templateValues (t * testing.T ) {
58
64
t .Parallel ()
59
65
66
+ // Mimic the Helm templating using dummy values.
67
+ templateData := map [string ]interface {}{}
68
+ require .NoError (
69
+ t ,
70
+ unstructured .SetNestedField (
71
+ templateData ,
72
+ true ,
73
+ "Values" ,
74
+ "hooks" ,
75
+ "ccm" ,
76
+ "nutanix" ,
77
+ "helmAddonStrategy" ,
78
+ "defaultValueTemplateConfigMap" ,
79
+ "create" ,
80
+ ),
81
+ )
82
+ var templatedBytes bytes.Buffer
83
+ require .NoError (
84
+ t ,
85
+ template .Must (
86
+ template .New (
87
+ "helm-addon-installation.yaml" ).ParseFiles (templateFile ),
88
+ ).Execute (& templatedBytes , templateData ),
89
+ )
90
+ cm := & corev1.ConfigMap {}
91
+ require .NoError (t , yaml .UnmarshalStrict (templatedBytes .Bytes (), cm ))
92
+
93
+ valuesTemplate := cm .Data ["values.yaml" ]
94
+
60
95
tests := []struct {
61
96
name string
62
97
clusterConfig * apivariables.ClusterConfigSpec
@@ -88,7 +123,7 @@ func Test_templateValues(t *testing.T) {
88
123
},
89
124
},
90
125
},
91
- in : in ,
126
+ in : valuesTemplate ,
92
127
expected : expectedWithAdditionalTrustBundle ,
93
128
},
94
129
{
@@ -115,7 +150,7 @@ func Test_templateValues(t *testing.T) {
115
150
},
116
151
},
117
152
},
118
- in : in ,
153
+ in : valuesTemplate ,
119
154
expected : expectedWithoutAdditionalTrustBundle ,
120
155
},
121
156
}
@@ -129,3 +164,21 @@ func Test_templateValues(t *testing.T) {
129
164
})
130
165
}
131
166
}
167
+
168
+ func moduleRootDir () string {
169
+ cmd := exec .Command ("go" , "list" , "-m" , "-f" , "{{ .Dir }}" )
170
+ out , err := cmd .CombinedOutput ()
171
+ if err != nil {
172
+ // We include the combined output because the error is usually
173
+ // an exit code, which does not explain why the command failed.
174
+ panic (
175
+ fmt .Sprintf ("cmd.Dir=%q, cmd.Env=%q, cmd.Args=%q, err=%q, output=%q" ,
176
+ cmd .Dir ,
177
+ cmd .Env ,
178
+ cmd .Args ,
179
+ err ,
180
+ out ),
181
+ )
182
+ }
183
+ return strings .TrimSpace (string (out ))
184
+ }
0 commit comments