229 lines
4.2 KiB
Go
229 lines
4.2 KiB
Go
package command
|
|
|
|
import (
|
|
"github.com/mitchellh/packer/packer"
|
|
"testing"
|
|
)
|
|
|
|
func testTemplate() (*packer.Template, *packer.ComponentFinder) {
|
|
tplData := `{
|
|
"variables": {
|
|
"foo": null
|
|
},
|
|
|
|
"builders": [
|
|
{
|
|
"type": "foo"
|
|
},
|
|
{
|
|
"name": "{{user \"foo\"}}",
|
|
"type": "bar"
|
|
}
|
|
]
|
|
}
|
|
`
|
|
|
|
tpl, err := packer.ParseTemplate([]byte(tplData), map[string]string{"foo": "bar"})
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
cf := &packer.ComponentFinder{
|
|
Builder: func(string) (packer.Builder, error) { return new(packer.MockBuilder), nil },
|
|
}
|
|
|
|
return tpl, cf
|
|
}
|
|
|
|
func TestBuildOptionsBuilds(t *testing.T) {
|
|
opts := new(BuildOptions)
|
|
bs, err := opts.Builds(testTemplate())
|
|
if err != nil {
|
|
t.Fatalf("err: %s", err)
|
|
}
|
|
|
|
if len(bs) != 2 {
|
|
t.Fatalf("bad: %d", len(bs))
|
|
}
|
|
}
|
|
|
|
func TestBuildOptionsBuilds_except(t *testing.T) {
|
|
opts := new(BuildOptions)
|
|
opts.Except = []string{"foo"}
|
|
|
|
bs, err := opts.Builds(testTemplate())
|
|
if err != nil {
|
|
t.Fatalf("err: %s", err)
|
|
}
|
|
|
|
if len(bs) != 1 {
|
|
t.Fatalf("bad: %d", len(bs))
|
|
}
|
|
|
|
if bs[0].Name() != "bar" {
|
|
t.Fatalf("bad: %s", bs[0].Name())
|
|
}
|
|
}
|
|
|
|
//Test to make sure the build name pattern matches
|
|
func TestBuildOptionsBuilds_exceptConfigTemplateRaw(t *testing.T) {
|
|
opts := new(BuildOptions)
|
|
opts.Except = []string{"{{user \"foo\"}}"}
|
|
|
|
bs, err := opts.Builds(testTemplate())
|
|
if err != nil {
|
|
t.Fatalf("err: %s", err)
|
|
}
|
|
|
|
if len(bs) != 1 {
|
|
t.Fatalf("bad: %d", len(bs))
|
|
}
|
|
|
|
if bs[0].Name() != "foo" {
|
|
t.Fatalf("bad: %s", bs[0].Name())
|
|
}
|
|
}
|
|
|
|
//Test to make sure the processed build name matches
|
|
func TestBuildOptionsBuilds_exceptConfigTemplateProcessed(t *testing.T) {
|
|
opts := new(BuildOptions)
|
|
opts.Except = []string{"bar"}
|
|
|
|
bs, err := opts.Builds(testTemplate())
|
|
if err != nil {
|
|
t.Fatalf("err: %s", err)
|
|
}
|
|
|
|
if len(bs) != 1 {
|
|
t.Fatalf("bad: %d", len(bs))
|
|
}
|
|
|
|
if bs[0].Name() != "foo" {
|
|
t.Fatalf("bad: %s", bs[0].Name())
|
|
}
|
|
}
|
|
|
|
func TestBuildOptionsBuilds_only(t *testing.T) {
|
|
opts := new(BuildOptions)
|
|
opts.Only = []string{"foo"}
|
|
|
|
bs, err := opts.Builds(testTemplate())
|
|
if err != nil {
|
|
t.Fatalf("err: %s", err)
|
|
}
|
|
|
|
if len(bs) != 1 {
|
|
t.Fatalf("bad: %d", len(bs))
|
|
}
|
|
|
|
if bs[0].Name() != "foo" {
|
|
t.Fatalf("bad: %s", bs[0].Name())
|
|
}
|
|
}
|
|
|
|
//Test to make sure the build name pattern matches
|
|
func TestBuildOptionsBuilds_onlyConfigTemplateRaw(t *testing.T) {
|
|
opts := new(BuildOptions)
|
|
opts.Only = []string{"{{user \"foo\"}}"}
|
|
|
|
bs, err := opts.Builds(testTemplate())
|
|
if err != nil {
|
|
t.Fatalf("err: %s", err)
|
|
}
|
|
|
|
if len(bs) != 1 {
|
|
t.Fatalf("bad: %d", len(bs))
|
|
}
|
|
|
|
if bs[0].Name() != "bar" {
|
|
t.Fatalf("bad: %s", bs[0].Name())
|
|
}
|
|
}
|
|
|
|
//Test to make sure the processed build name matches
|
|
func TestBuildOptionsBuilds_onlyConfigTemplateProcessed(t *testing.T) {
|
|
opts := new(BuildOptions)
|
|
opts.Only = []string{"bar"}
|
|
|
|
bs, err := opts.Builds(testTemplate())
|
|
if err != nil {
|
|
t.Fatalf("err: %s", err)
|
|
}
|
|
|
|
if len(bs) != 1 {
|
|
t.Fatalf("bad: %d", len(bs))
|
|
}
|
|
|
|
if bs[0].Name() != "bar" {
|
|
t.Fatalf("bad: %s", bs[0].Name())
|
|
}
|
|
}
|
|
|
|
func TestBuildOptionsBuilds_exceptNonExistent(t *testing.T) {
|
|
opts := new(BuildOptions)
|
|
opts.Except = []string{"i-dont-exist"}
|
|
|
|
_, err := opts.Builds(testTemplate())
|
|
if err == nil {
|
|
t.Fatal("err should not be nil")
|
|
}
|
|
}
|
|
|
|
func TestBuildOptionsBuilds_onlyNonExistent(t *testing.T) {
|
|
opts := new(BuildOptions)
|
|
opts.Only = []string{"i-dont-exist"}
|
|
|
|
_, err := opts.Builds(testTemplate())
|
|
if err == nil {
|
|
t.Fatal("err should not be nil")
|
|
}
|
|
}
|
|
|
|
func TestBuildOptionsValidate(t *testing.T) {
|
|
bf := new(BuildOptions)
|
|
|
|
err := bf.Validate()
|
|
if err != nil {
|
|
t.Fatalf("err: %s", err)
|
|
}
|
|
|
|
// Both set
|
|
bf.Except = make([]string, 1)
|
|
bf.Only = make([]string, 1)
|
|
err = bf.Validate()
|
|
if err == nil {
|
|
t.Fatal("should error")
|
|
}
|
|
|
|
// One set
|
|
bf.Except = make([]string, 1)
|
|
bf.Only = make([]string, 0)
|
|
err = bf.Validate()
|
|
if err != nil {
|
|
t.Fatalf("err: %s", err)
|
|
}
|
|
|
|
bf.Except = make([]string, 0)
|
|
bf.Only = make([]string, 1)
|
|
err = bf.Validate()
|
|
if err != nil {
|
|
t.Fatalf("err: %s", err)
|
|
}
|
|
}
|
|
|
|
func TestBuildOptionsValidate_userVarFiles(t *testing.T) {
|
|
bf := new(BuildOptions)
|
|
|
|
err := bf.Validate()
|
|
if err != nil {
|
|
t.Fatalf("err: %s", err)
|
|
}
|
|
|
|
// Non-existent file
|
|
bf.UserVarFiles = []string{"ireallyshouldntexistanywhere"}
|
|
err = bf.Validate()
|
|
if err == nil {
|
|
t.Fatal("should error")
|
|
}
|
|
}
|