open-nomad/command/data_format_test.go

69 lines
1.5 KiB
Go

package command
import (
"strings"
"testing"
"github.com/hashicorp/nomad/ci"
)
type testData struct {
Region string
ID string
Name string
}
const expectJSON = `{
"ID": "1",
"Name": "example",
"Region": "global"
}`
var (
tData = testData{"global", "1", "example"}
testFormat = map[string]string{"json": "", "template": "{{.Region}}"}
expectOutput = map[string]string{"json": expectJSON, "template": "global"}
)
func TestDataFormat(t *testing.T) {
ci.Parallel(t)
for k, v := range testFormat {
fm, err := DataFormat(k, v)
if err != nil {
t.Fatalf("err: %v", err)
}
result, err := fm.TransformData(tData)
if err != nil {
t.Fatalf("err: %v", err)
}
if result != expectOutput[k] {
t.Fatalf("expected output:\n%s\nactual:\n%s", expectOutput[k], result)
}
}
}
func TestInvalidJSONTemplate(t *testing.T) {
ci.Parallel(t)
// Invalid template {{.foo}}
fm, err := DataFormat("template", "{{.foo}}")
if err != nil {
t.Fatalf("err: %v", err)
}
_, err = fm.TransformData(tData)
if !strings.Contains(err.Error(), "can't evaluate field foo") {
t.Fatalf("expected invalid template error, got: %s", err.Error())
}
// No template is specified
fm, err = DataFormat("template", "")
if err != nil {
t.Fatalf("err: %v", err)
}
_, err = fm.TransformData(tData)
if !strings.Contains(err.Error(), "template needs to be specified the golang templates.") {
t.Fatalf("expected not specified template error, got: %s", err.Error())
}
}