mirror of
https://github.com/hashicorp/packer.git
synced 2026-02-24 02:10:31 -05:00
this regroups the calls of tmp func calls into one package. the tmp pkg allows to store tmp files under a common directory for easier managment Squashed commit of the following: commit74b674c015Merge:fc94b571466001525dAuthor: Matthew Patton <mpatton@enquizit.com> Date: Fri Nov 2 02:02:38 2018 -0400 Merge branch 'remove_TMPDIR_docs' of github.com:tb3088/packer into remove_TMPDIR_docs commitfc94b57142Author: Matthew Patton <mpatton@enquizit.com> Date: Fri Nov 2 01:42:38 2018 -0400 update tests to honor configured temporary directory commit5a562359f4Author: Matthew Patton <mpatton@enquizit.com> Date: Thu Nov 1 18:52:38 2018 -0400 sync straggler to refactor. implement tests at packer/configfile instead of buried in docker. commit9d5a4a0935Author: Matthew Patton <mpatton@enquizit.com> Date: Thu Nov 1 15:39:46 2018 -0400 insert URL to GoLang API for os.TempDir() commitfbae4c2e05Author: Matthew Patton <mpatton@enquizit.com> Date: Thu Nov 1 07:41:29 2018 -0400 revise documentation to match code commit3590fae8bdAuthor: Matthew Patton <mpatton@enquizit.com> Date: Thu Nov 1 07:21:59 2018 -0400 refacter config_file. replace all hard-coded os.TempDir with wrapper commitd5c5306a97Author: Matthew Patton <mpatton@enquizit.com> Date: Wed Oct 31 20:11:36 2018 -0400 close massive file overwrite hole with TempDir commit0a72297da8Author: Matthew Patton <mpatton@enquizit.com> Date: Wed Oct 31 01:06:00 2018 -0400 adjust var declaration scope commit20f68228b6Author: Matthew Patton <mpatton@enquizit.com> Date: Wed Oct 31 00:54:35 2018 -0400 use mktemp() equivalent to create temporary directory commitc73ebe3d83Author: Matthew Patton <mpatton@enquizit.com> Date: Tue Oct 30 20:40:58 2018 -0400 remove extraneous variable declaration, fix FOR loop commit63549b8bd7Author: Matthew Patton <mpatton@enquizit.com> Date: Tue Oct 30 19:30:44 2018 -0400 match styistic convension with rest of docs commit9761010749Author: Matthew Patton <mpatton@enquizit.com> Date: Tue Oct 30 19:08:39 2018 -0400 revert dangling config file change commit95159afbc0Author: Matthew Patton <matthew.patton@itgfirm.com> Date: Fri Dec 29 23:53:43 2017 -0500 replace invalid TMPDIR variable wth PACKER_TMP_DIR. update ConfigTmpDir() to try common temporary paths first and only write to configDir() as a last resort. commit66001525d7Author: Matthew Patton <mpatton@enquizit.com> Date: Fri Nov 2 01:42:38 2018 -0400 update tests to honor configured temporary directory commite9b6adefeaAuthor: Matthew Patton <mpatton@enquizit.com> Date: Thu Nov 1 18:52:38 2018 -0400 sync straggler to refactor. implement tests at packer/configfile instead of buried in docker. commit852113ed07Author: Matthew Patton <mpatton@enquizit.com> Date: Thu Nov 1 15:39:46 2018 -0400 insert URL to GoLang API for os.TempDir() commit54add38d1dAuthor: Matthew Patton <mpatton@enquizit.com> Date: Thu Nov 1 07:41:29 2018 -0400 revise documentation to match code commit6b5b8f6d4eAuthor: Matthew Patton <mpatton@enquizit.com> Date: Thu Nov 1 07:21:59 2018 -0400 refacter config_file. replace all hard-coded os.TempDir with wrapper commitc22092c601Author: Matthew Patton <mpatton@enquizit.com> Date: Wed Oct 31 20:11:36 2018 -0400 close massive file overwrite hole with TempDir commit7a73045091Author: Matthew Patton <mpatton@enquizit.com> Date: Wed Oct 31 01:06:00 2018 -0400 adjust var declaration scope commit0f2933adb6Author: Matthew Patton <mpatton@enquizit.com> Date: Wed Oct 31 00:54:35 2018 -0400 use mktemp() equivalent to create temporary directory commitd74839ede0Author: Matthew Patton <mpatton@enquizit.com> Date: Tue Oct 30 20:40:58 2018 -0400 remove extraneous variable declaration, fix FOR loop commiteb65416619Author: Matthew Patton <mpatton@enquizit.com> Date: Tue Oct 30 19:30:44 2018 -0400 match styistic convension with rest of docs commitacaa2b31edAuthor: Matthew Patton <mpatton@enquizit.com> Date: Tue Oct 30 19:08:39 2018 -0400 revert dangling config file change commite573fde668Author: Matthew Patton <matthew.patton@itgfirm.com> Date: Fri Dec 29 23:53:43 2017 -0500 replace invalid TMPDIR variable wth PACKER_TMP_DIR. update ConfigTmpDir() to try common temporary paths first and only write to configDir() as a last resort. commit39a9874afcMerge:8a413cfe83315812c2Author: Matthew Patton <mpatton@enquizit.com> Date: Tue Oct 30 18:19:26 2018 -0400 Merge branch 'master' of https://github.com/hashicorp/packer into prestine commit8a413cfe83Merge:e07491de54e14710a6Author: Matthew Patton <mpatton@enquizit.com> Date: Mon Oct 1 20:18:10 2018 -0400 Merge remote-tracking branch 'upstream/master' into prestine commite07491de59Merge:42610a35da1fa35dffAuthor: Matthew Patton <mpatton@enquizit.com> Date: Tue Aug 21 13:26:19 2018 -0400 Merge remote-tracking branch 'upstream/master' into prestine commit42610a35d5Merge:5298142da0d63cf7bcAuthor: Matthew Patton <matthew.patton@itgfirm.com> Date: Tue Jun 19 22:45:05 2018 -0400 Merge remote-tracking branch 'upstream/master' into prestine commit5298142da6Merge:7bb110bc79d9736552Author: Matthew Patton <mpatton@enquizit.com> Date: Mon Jun 11 15:10:09 2018 -0400 Merge remote-tracking branch 'upstream/master' into prestine commit7bb110bc74Merge:a61c869ca6189d66e7Author: Matthew Patton <matthew.patton@itgfirm.com> Date: Wed May 9 23:41:22 2018 -0400 Merge remote-tracking branch 'upstream/master' into prestine commita61c869ca7Merge:098101dd94be5f072cAuthor: Matthew Patton <matthew.patton@itgfirm.com> Date: Fri May 4 10:13:04 2018 -0400 Merge remote-tracking branch 'upstream/master' into prestine commit098101dd99Merge:fefaf0fa6554b2b4a5Author: Matthew Patton <matthew.patton@itgfirm.com> Date: Tue May 1 20:52:30 2018 -0400 Merge branch 'EOL-handling' into prestine Co-Authored-By: Matthew Patton <pattonme@yahoo.com>
113 lines
3.4 KiB
Go
113 lines
3.4 KiB
Go
package common
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"path/filepath"
|
|
"regexp"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/packer/helper/multistep"
|
|
)
|
|
|
|
func TestStepCreateBuildDir_imp(t *testing.T) {
|
|
var _ multistep.Step = new(StepCreateBuildDir)
|
|
}
|
|
|
|
func TestStepCreateBuildDir_Defaults(t *testing.T) {
|
|
state := testState(t)
|
|
step := new(StepCreateBuildDir)
|
|
|
|
// Default is for the user not to supply value for TempPath. When
|
|
// nothing is set the step should use the OS temp directory as the root
|
|
// for the build directory
|
|
step.TempPath = ""
|
|
|
|
// Test the run
|
|
if action := step.Run(context.Background(), state); action != multistep.ActionContinue {
|
|
t.Fatalf("Bad action: %v", action)
|
|
}
|
|
if _, ok := state.GetOk("error"); ok {
|
|
t.Fatal("Should NOT have error")
|
|
}
|
|
|
|
if v, ok := state.GetOk("build_dir"); !ok {
|
|
t.Fatal("Should store path to build directory in statebag as 'build_dir'")
|
|
} else {
|
|
// On windows convert everything to forward slash separated paths
|
|
// This prevents the regexp interpreting backslashes as escape sequences
|
|
stateBuildDir := filepath.ToSlash(v.(string))
|
|
expectedBuildDirRe := regexp.MustCompile(
|
|
filepath.ToSlash(filepath.Join(os.TempDir(), "hyperv") + `[[:digit:]]{9}$`))
|
|
match := expectedBuildDirRe.MatchString(stateBuildDir)
|
|
if !match {
|
|
t.Fatalf("Got path that doesn't match expected format in 'build_dir': %s", stateBuildDir)
|
|
}
|
|
}
|
|
|
|
// Test Cleanup
|
|
step.Cleanup(state)
|
|
if _, err := os.Stat(step.buildDir); err == nil {
|
|
t.Fatalf("Build directory should NOT exist after Cleanup: %s", step.buildDir)
|
|
}
|
|
}
|
|
|
|
func TestStepCreateBuildDir_UserDefinedTempPath(t *testing.T) {
|
|
state := testState(t)
|
|
step := new(StepCreateBuildDir)
|
|
|
|
// Create a directory we'll use as the user supplied temp_path
|
|
step.TempPath = genTestDirPath("userTempDir")
|
|
err := os.Mkdir(step.TempPath, 0755) // The directory must exist
|
|
if err != nil {
|
|
t.Fatal("Error creating test directory")
|
|
}
|
|
defer os.RemoveAll(step.TempPath)
|
|
|
|
// Test the run
|
|
if action := step.Run(context.Background(), state); action != multistep.ActionContinue {
|
|
t.Fatalf("Bad action: %v", action)
|
|
}
|
|
if _, ok := state.GetOk("error"); ok {
|
|
t.Fatal("Should NOT have error")
|
|
}
|
|
|
|
if v, ok := state.GetOk("build_dir"); !ok {
|
|
t.Fatal("Should store path to build directory in statebag as 'build_dir'")
|
|
} else {
|
|
// On windows convert everything to forward slash separated paths
|
|
// This prevents the regexp interpreting backslashes as escape sequences
|
|
stateBuildDir := filepath.ToSlash(v.(string))
|
|
expectedBuildDirRe := regexp.MustCompile(
|
|
filepath.ToSlash(filepath.Join(step.TempPath, "hyperv") + `[[:digit:]]{9}$`))
|
|
match := expectedBuildDirRe.MatchString(stateBuildDir)
|
|
if !match {
|
|
t.Fatalf("Got path that doesn't match expected format in 'build_dir': %s", stateBuildDir)
|
|
}
|
|
}
|
|
|
|
// Test Cleanup
|
|
step.Cleanup(state)
|
|
if _, err := os.Stat(step.buildDir); err == nil {
|
|
t.Fatalf("Build directory should NOT exist after Cleanup: %s", step.buildDir)
|
|
}
|
|
if _, err := os.Stat(step.TempPath); err != nil {
|
|
t.Fatal("User supplied root for build directory should NOT be deleted by Cleanup")
|
|
}
|
|
}
|
|
|
|
func TestStepCreateBuildDir_BadTempPath(t *testing.T) {
|
|
state := testState(t)
|
|
step := new(StepCreateBuildDir)
|
|
|
|
// Bad
|
|
step.TempPath = genTestDirPath("iDontExist")
|
|
|
|
// Test the run
|
|
if action := step.Run(context.Background(), state); action != multistep.ActionHalt {
|
|
t.Fatalf("Bad action: %v", action)
|
|
}
|
|
if _, ok := state.GetOk("error"); !ok {
|
|
t.Fatal("Should have error due to bad path")
|
|
}
|
|
}
|