mirror of
https://github.com/hashicorp/packer.git
synced 2026-09-28 02:34:02 -04:00
84 lines
2.0 KiB
Go
84 lines
2.0 KiB
Go
package packer_test
|
|
|
|
import (
|
|
"os"
|
|
"sync"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/suite"
|
|
)
|
|
|
|
type PackerTestSuite struct {
|
|
suite.Suite
|
|
// pluginsDirectory is the directory in which plugins are compiled.
|
|
//
|
|
// Those binaries are not necessarily meant to be used as-is, but
|
|
// instead should be used for composing plugin installation directories.
|
|
pluginsDirectory string
|
|
// packerPath is the location in which the Packer executable is compiled
|
|
//
|
|
// Since we don't necessarily want to manually compile Packer beforehand,
|
|
// we compile it on demand, and use this executable for the tests.
|
|
packerPath string
|
|
}
|
|
|
|
func buildPluginVersion(waitgroup *sync.WaitGroup, versionString string, t *testing.T) {
|
|
waitgroup.Add(1)
|
|
go func() {
|
|
BuildSimplePlugin(versionString, t)
|
|
waitgroup.Done()
|
|
}()
|
|
}
|
|
|
|
func (ts *PackerTestSuite) buildPluginBinaries(t *testing.T) {
|
|
wg := &sync.WaitGroup{}
|
|
|
|
buildPluginVersion(wg, "1.0.0", t)
|
|
buildPluginVersion(wg, "1.0.0+metadata", t)
|
|
buildPluginVersion(wg, "1.0.1-alpha1", t)
|
|
buildPluginVersion(wg, "1.0.9", t)
|
|
buildPluginVersion(wg, "1.0.10", t)
|
|
|
|
wg.Wait()
|
|
}
|
|
|
|
func Test_PackerCoreSuite(t *testing.T) {
|
|
ts := &PackerTestSuite{}
|
|
|
|
pluginsDirectory := PluginBinaryDir()
|
|
defer func() {
|
|
err := os.RemoveAll(pluginsDirectory)
|
|
if err != nil {
|
|
t.Logf("failed to cleanup directory %q: %s. This will need manual action", pluginsDirectory, err)
|
|
}
|
|
}()
|
|
|
|
ts.pluginsDirectory = pluginsDirectory
|
|
ts.buildPluginBinaries(t)
|
|
|
|
packerPath := os.Getenv("PACKER_CUSTOM_PATH")
|
|
if packerPath == "" {
|
|
var err error
|
|
t.Logf("Building test packer binary...")
|
|
packerPath, err = BuildTestPacker(t)
|
|
if err != nil {
|
|
t.Fatalf("failed to build Packer binary: %s", err)
|
|
}
|
|
}
|
|
ts.packerPath = packerPath
|
|
t.Logf("Done")
|
|
|
|
defer func() {
|
|
if os.Getenv("PACKER_CUSTOM_PATH") != "" {
|
|
return
|
|
}
|
|
|
|
err := os.Remove(ts.packerPath)
|
|
if err != nil {
|
|
t.Logf("failed to cleanup compiled packer binary %q: %s. This will need manual aciton", packerPath, err)
|
|
}
|
|
}()
|
|
|
|
suite.Run(t, ts)
|
|
}
|