adding tests

This commit is contained in:
Megan Marsh 2020-03-11 10:49:45 -07:00
parent 063dd5c133
commit 52f03de0f0
1 changed files with 67 additions and 27 deletions

View File

@ -463,37 +463,15 @@ func TestCoreValidate(t *testing.T) {
Vars map[string]string
Err bool
}{
{
"validate-dup-builder.json",
nil,
true,
},
{"validate-dup-builder.json", nil, true},
// Required variable not set
{
"validate-req-variable.json",
nil,
true,
},
{
"validate-req-variable.json",
map[string]string{"foo": "bar"},
false,
},
{"validate-req-variable.json", nil, true},
{"validate-req-variable.json", map[string]string{"foo": "bar"}, false},
// Min version good
{
"validate-min-version.json",
map[string]string{"foo": "bar"},
false,
},
{
"validate-min-version-high.json",
map[string]string{"foo": "bar"},
true,
},
{"validate-min-version.json", map[string]string{"foo": "bar"}, false},
{"validate-min-version-high.json", map[string]string{"foo": "bar"}, true},
}
for _, tc := range cases {
@ -700,6 +678,68 @@ func TestSensitiveVars(t *testing.T) {
}
}
// Normally I wouldn't test a little helper function, but it's regex.
func testisDoneInterpolating(t *testing.T) {
cases := []struct {
inputString string
expectedBool bool
expectedErr bool
}{
// Many of these tests are just exercising the regex to make sure it
// doesnt get confused by different kinds of whitespace
{"charmander-{{ user `spacesaroundticks` }}", false, false},
{"pidgey-{{ user `partyparrot`}}", false, false},
{"jigglypuff-{{ user`notickspaaces`}}", false, false},
{"eevee-{{user`nospaces`}}", false, false},
{"staryu-{{ user `somanyspaces` }}", false, false},
{"{{ user `somanyspaces` }}-{{isotime}}", false, false},
// Make sure that we only flag on "user" when it's in the right set of
// brackets, in a properly declared template engine format
{"missingno-{{ user `missingbracket` }", true, false},
{"missing2-{user ``missingopenbrackets }}", true, false},
{"wat-userjustinname", true, false},
// Any functions that aren't "user" should have already been properly
// interpolated by the time this is called, so these cases aren't
// realistic. That said, this makes it clear that this function doesn't
// care about anything but the user function
{"pokemon-{{ isotime }}", true, false},
{"squirtle-{{ env `water`}}", true, false},
{"bulbasaur-notinterpolated", true, false},
{"extra-{{thisfunc `user`}}", true, false},
}
for _, tc := range cases {
done, err := isDoneInterpolating(tc.inputString)
if (err != nil) != tc.expectedErr {
t.Fatalf("Test case failed. Error: %s expected error: "+
"%t test string: %s", err, tc.expectedErr, tc.inputString)
}
if done != tc.expectedBool {
t.Fatalf("Test case failed. inputString: %s. "+
"Expected done = %t but got done = %t", tc.inputString,
tc.expectedBool, done)
}
}
}
// func testCoreBuildWithInterpolatedEnvVars(t *testing.T) {
// // Not a fan of using env vars in tests but in this case we need to make
// // sure they get interpolated properly.
// os.Setenv("CI_COMMIT_REF_NAME", "working")
// os.Setenv("OUTPUT_DIR", "/u01/artifacts")
// os.Setenv("OS_VERSION", "6")
// os.Setenv("OS", "rhel")
// os.Setenv("BASE_POSTFIX", "base")
// os.Setenv("RULE", "vbox")
// os.Setenv("POSTFIX", "base")
// packer build \
// -var-file=common/vsphere.variables.json \
// -var-file=common/variables.json \
// -only=vbox-rhel-base \
// common/linux/redhat/template.json
// }
func testCoreTemplate(t *testing.T, c *CoreConfig, p string) {
tpl, err := template.ParseFile(p)
if err != nil {