forked from hashicorp/levant
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrender_test.go
158 lines (142 loc) · 5.22 KB
/
render_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
package template
import (
"os"
"testing"
"github.com/hashicorp/levant/levant/structs"
nomad "github.com/hashicorp/nomad/api"
)
const (
testJobName = "levantExample"
testJobNameOverwrite = "levantExampleOverwrite"
testJobNameOverwrite2 = "levantExampleOverwrite2"
testDCName = "dc13"
testEnvName = "GROUP_NAME_ENV"
testEnvValue = "cache"
)
func TestTemplater_RenderTemplate(t *testing.T) {
var job *nomad.Job
var err error
// Start with an empty passed var args map.
fVars := make(map[string]interface{})
// Test basic TF template render.
config := &structs.TemplateConfig{
TemplateFile: "test-fixtures/single_templated.nomad",
VariableFiles: []string{"test-fixtures/test.tf"},
DisableHCL2: true,
}
job, err = RenderJob(config, "", &fVars)
if err != nil {
t.Fatal(err)
}
if *job.Name != testJobName {
t.Fatalf("expected %s but got %v", testJobName, *job.Name)
}
if *job.TaskGroups[0].Tasks[0].Resources.CPU != 1313 {
t.Fatalf("expected CPU resource %v but got %v", 1313, *job.TaskGroups[0].Tasks[0].Resources.CPU)
}
// Test basic YAML template render.
config = &structs.TemplateConfig{TemplateFile: "test-fixtures/single_templated.nomad", VariableFiles: []string{"test-fixtures/test.yaml"}}
job, err = RenderJob(config, "", &fVars)
if err != nil {
t.Fatal(err)
}
if *job.Name != testJobName {
t.Fatalf("expected %s but got %v", testJobName, *job.Name)
}
if *job.TaskGroups[0].Tasks[0].Resources.CPU != 1313 {
t.Fatalf("expected CPU resource %v but got %v", 1313, *job.TaskGroups[0].Tasks[0].Resources.CPU)
}
// Test multiple var-files
config = &structs.TemplateConfig{
TemplateFile: "test-fixtures/single_templated.nomad",
VariableFiles: []string{"test-fixtures/test.yaml", "test-fixtures/test-overwrite.yaml"},
}
job, err = RenderJob(config, "", &fVars)
if err != nil {
t.Fatal(err)
}
if *job.Name != testJobNameOverwrite {
t.Fatalf("expected %s but got %v", testJobNameOverwrite, *job.Name)
}
// Test multiple var-files of different types
config = &structs.TemplateConfig{
TemplateFile: "test-fixtures/single_templated.nomad",
VariableFiles: []string{"test-fixtures/test.tf", "test-fixtures/test-overwrite.yaml"},
}
job, err = RenderJob(config, "", &fVars)
if err != nil {
t.Fatal(err)
}
if *job.Name != testJobNameOverwrite {
t.Fatalf("expected %s but got %v", testJobNameOverwrite, *job.Name)
}
// Test multiple var-files with var-args
fVars["job_name"] = testJobNameOverwrite2
config = &structs.TemplateConfig{
TemplateFile: "test-fixtures/single_templated.nomad",
VariableFiles: []string{"test-fixtures/test.tf", "test-fixtures/test-overwrite.yaml"},
}
job, err = RenderJob(config, "", &fVars)
if err != nil {
t.Fatal(err)
}
if *job.Name != testJobNameOverwrite2 {
t.Fatalf("expected %s but got %v", testJobNameOverwrite2, *job.Name)
}
// Test empty var-args and empty variable file render.
config = &structs.TemplateConfig{TemplateFile: "test-fixtures/none_templated.nomad", VariableFiles: []string{}}
job, err = RenderJob(config, "", &fVars)
if err != nil {
t.Fatal(err)
}
if *job.Name != testJobName {
t.Fatalf("expected %s but got %v", testJobName, *job.Name)
}
// Test var-args only render.
config = &structs.TemplateConfig{TemplateFile: "test-fixtures/single_templated.nomad", VariableFiles: []string{}}
fVars = map[string]interface{}{"job_name": testJobName, "task_resource_cpu": "1313"}
job, err = RenderJob(config, "", &fVars)
if err != nil {
t.Fatal(err)
}
if *job.Name != testJobName {
t.Fatalf("expected %s but got %v", testJobName, *job.Name)
}
if *job.TaskGroups[0].Tasks[0].Resources.CPU != 1313 {
t.Fatalf("expected CPU resource %v but got %v", 1313, *job.TaskGroups[0].Tasks[0].Resources.CPU)
}
// Test var-args only render with HCL2 spec
config = &structs.TemplateConfig{TemplateFile: "test-fixtures/single_templated_connect.nomad"}
fVars = map[string]interface{}{"job_name": testJobName, "task_resource_cpu": "1313", "upstream_datacenter": "dc2"}
job, err = RenderJob(config, "", &fVars)
if err != nil {
t.Fatal(err)
}
if *job.Name != testJobName {
t.Fatalf("expected %s but got %v", testJobName, *job.Name)
}
if *job.TaskGroups[0].Tasks[0].Resources.CPU != 1313 {
t.Fatalf("expected CPU resource %v but got %v", 1313, *job.TaskGroups[0].Tasks[0].Resources.CPU)
}
if job.TaskGroups[0].Services[0].Connect.SidecarService.Proxy.Upstreams[0].Datacenter != "dc2" {
t.Fatalf("expected connect upstream datacenter %v but got %v", "dc2", job.TaskGroups[0].Services[0].Connect.SidecarService.Proxy.Upstreams[0].Datacenter)
}
// Test var-args and variables file render.
delete(fVars, "job_name")
config = &structs.TemplateConfig{TemplateFile: "test-fixtures/multi_templated.nomad", VariableFiles: []string{"test-fixtures/test.yaml"}}
fVars["datacentre"] = testDCName
os.Setenv(testEnvName, testEnvValue)
job, err = RenderJob(config, "", &fVars)
if err != nil {
t.Fatal(err)
}
if *job.Name != testJobName {
t.Fatalf("expected %s but got %v", testJobName, *job.Name)
}
if job.Datacenters[0] != testDCName {
t.Fatalf("expected %s but got %v", testDCName, job.Datacenters[0])
}
if *job.TaskGroups[0].Name != testEnvValue {
t.Fatalf("expected %s but got %v", testEnvValue, *job.TaskGroups[0].Name)
}
}