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,57 @@ 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 (
53
+ templateFile = filepath .Join (
54
+ moduleRootDir (),
55
+ "charts" ,
56
+ "cluster-api-runtime-extensions-nutanix" ,
57
+ "templates" ,
58
+ "ccm" ,
59
+ "nutanix" ,
60
+ "manifests" ,
61
+ "helm-addon-installation.yaml" ,
62
+ )
55
63
)
56
64
57
65
func Test_templateValues (t * testing.T ) {
58
66
t .Parallel ()
59
67
68
+ // Mimic the Helm templating using dummy values.
69
+ templateData := map [string ]interface {}{}
70
+ require .NoError (
71
+ t ,
72
+ unstructured .SetNestedField (
73
+ templateData ,
74
+ true ,
75
+ "Values" , "hooks" , "ccm" , "nutanix" , "helmAddonStrategy" , "defaultValueTemplateConfigMap" , "create" ,
76
+ ),
77
+ )
78
+ var templatedBytes bytes.Buffer
79
+ require .NoError (
80
+ t ,
81
+ template .Must (
82
+ template .New (
83
+ "helm-addon-installation.yaml" ).ParseFiles (templateFile ),
84
+ ).Execute (& templatedBytes , templateData ),
85
+ )
86
+ cm := & corev1.ConfigMap {}
87
+ require .NoError (t , yaml .UnmarshalStrict (templatedBytes .Bytes (), cm ))
88
+
89
+ valuesTemplate := cm .Data ["values.yaml" ]
90
+
60
91
tests := []struct {
61
92
name string
62
93
clusterConfig * apivariables.ClusterConfigSpec
@@ -88,7 +119,7 @@ func Test_templateValues(t *testing.T) {
88
119
},
89
120
},
90
121
},
91
- in : in ,
122
+ in : valuesTemplate ,
92
123
expected : expectedWithAdditionalTrustBundle ,
93
124
},
94
125
{
@@ -115,7 +146,7 @@ func Test_templateValues(t *testing.T) {
115
146
},
116
147
},
117
148
},
118
- in : in ,
149
+ in : valuesTemplate ,
119
150
expected : expectedWithoutAdditionalTrustBundle ,
120
151
},
121
152
}
@@ -129,3 +160,21 @@ func Test_templateValues(t *testing.T) {
129
160
})
130
161
}
131
162
}
163
+
164
+ func moduleRootDir () string {
165
+ cmd := exec .Command ("go" , "list" , "-m" , "-f" , "{{ .Dir }}" )
166
+ out , err := cmd .CombinedOutput ()
167
+ if err != nil {
168
+ // We include the combined output because the error is usually
169
+ // an exit code, which does not explain why the command failed.
170
+ panic (
171
+ fmt .Sprintf ("cmd.Dir=%q, cmd.Env=%q, cmd.Args=%q, err=%q, output=%q" ,
172
+ cmd .Dir ,
173
+ cmd .Env ,
174
+ cmd .Args ,
175
+ err ,
176
+ out ),
177
+ )
178
+ }
179
+ return strings .TrimSpace (string (out ))
180
+ }
0 commit comments