packer-cn/provisioner/powershell/provisioner_acc_test.go

111 lines
3.1 KiB
Go
Raw Normal View History

package powershell_test
import (
"fmt"
"io/ioutil"
"os"
"os/exec"
"path/filepath"
"runtime"
"testing"
"github.com/hashicorp/packer/packer-plugin-sdk/acctest/provisioneracc"
)
const TestProvisionerType = "powershell"
func powershellIsCompatible(builder string, vmOS string) bool {
return vmOS == "windows"
test/provisioner/powershell: Add acceptance test for powershell provisioner cleanup Passing Tests ``` --- PASS: TestAccPowershellProvisioner_basic (282.02s) --- PASS: TestAccPowershellProvisioner_basic/testing_amazon-ebs_builder_against_powershell_provisioner (282.01s) PASS ok github.com/hashicorp/packer/provisioner/powershell 282.046s ``` Failing tests on master ``` 2020/04/08 09:59:34 Uploading file to 'c:/Windows/Temp/script.bat' 2020/04/08 09:59:36 [INFO] starting remote command: set "PACKER_BUILDER_TYPE=amazon-ebs" && set "PACKER_BUILD_NAME=amazon-ebs" && "c:/Windows/Temp/script.bat" 2020/04/08 09:59:36 ui: amazon-ebs: 2020/04/08 09:59:36 ui: amazon-ebs: C:\Users\Administrator>dir C:\Windows\Temp\packer-*.ps1 2020/04/08 09:59:36 ui: amazon-ebs: Volume in drive C has no label. 2020/04/08 09:59:36 [INFO] command 'set "PACKER_BUILDER_TYPE=amazon-ebs" && set "PACKER_BUILD_NAME=amazon-ebs" && "c:/Windows/Temp/script.bat"' exited with code: 0 2020/04/08 09:59:36 ui: amazon-ebs: Volume Serial Number is 46CA-4083 2020/04/08 09:59:36 ui: amazon-ebs: 2020/04/08 09:59:36 ui: amazon-ebs: Directory of C:\Windows\Temp 2020/04/08 09:59:36 ui: amazon-ebs: 2020/04/08 09:59:36 ui: amazon-ebs: 04/08/2020 01:59 PM 102 packer-acc-test-script-test.ps1 2020/04/08 09:59:36 ui: amazon-ebs: 04/08/2020 01:59 PM 76 packer-acc-test-vars.ps1 2020/04/08 09:59:36 ui: amazon-ebs: 2 File(s) 178 bytes 2020/04/08 09:59:36 ui: amazon-ebs: 0 Dir(s) 9,735,806,976 bytes free 2020/04/08 09:59:36 ui: ==> amazon-ebs: Provisioning step had errors: Running the cleanup provisioner, if present... 2020/04/08 09:59:36 ui: ==> amazon-ebs: Terminating the source AWS instance... 2020/04/08 10:00:09 ui: ==> amazon-ebs: Cleaning up any extra volumes... 2020/04/08 10:00:09 ui: ==> amazon-ebs: No volumes to clean up, skipping 2020/04/08 10:00:09 ui: ==> amazon-ebs: Deleting temporary security group... 2020/04/08 10:00:10 ui: ==> amazon-ebs: Deleting temporary keypair... 2020/04/08 10:00:11 ui error: Build 'amazon-ebs' errored: Script exited with non-zero exit status: 0.Allowed exit codes are: [1] 2020/04/08 10:00:11 machine readable: error-count []string{"1"} 2020/04/08 10:00:11 ui error: ==> Some builds didn't complete successfully and had errors: 2020/04/08 10:00:11 machine readable: amazon-ebs,error []string{"Script exited with non-zero exit status: 0.Allowed exit codes are: [1]"} 2020/04/08 10:00:11 ui error: --> amazon-ebs: Script exited with non-zero exit status: 0.Allowed exit codes are: [1] ``` test: Fix windows-shell command
2020-04-07 15:03:58 -04:00
}
func fixtureDir() string {
_, file, _, _ := runtime.Caller(0)
return filepath.Join(filepath.Dir(file), "test-fixtures")
}
func LoadProvisionerFragment(templateFragmentPath string) (string, error) {
dir := fixtureDir()
fragmentAbsPath := filepath.Join(dir, templateFragmentPath)
fragmentFile, err := os.Open(fragmentAbsPath)
if err != nil {
return "", fmt.Errorf("Unable find %s", fragmentAbsPath)
}
defer fragmentFile.Close()
fragmentString, err := ioutil.ReadAll(fragmentFile)
if err != nil {
return "", fmt.Errorf("Unable to read %s", fragmentAbsPath)
}
return string(fragmentString), nil
}
func TestAccPowershellProvisioner_basic(t *testing.T) {
templateString, err := LoadProvisionerFragment("powershell-provisioner-cleanup.txt")
if err != nil {
t.Fatalf("Couldn't load test fixture; %s", err.Error())
}
testCase := &provisioneracc.ProvisionerTestCase{
IsCompatible: powershellIsCompatible,
Name: "powershell-provisioner-cleanup",
Template: templateString,
Type: TestProvisionerType,
Check: func(buildcommand *exec.Cmd, logfile string) error {
if buildcommand.ProcessState != nil {
if buildcommand.ProcessState.ExitCode() != 0 {
return fmt.Errorf("Bad exit code. Logfile: %s", logfile)
}
}
return nil
},
}
provisioneracc.TestProvisionersAgainstBuilders(testCase, t)
}
func TestAccPowershellProvisioner_Inline(t *testing.T) {
templateString, err := LoadProvisionerFragment("powershell-inline-provisioner.txt")
if err != nil {
t.Fatalf("Couldn't load test fixture; %s", err.Error())
}
testCase := &provisioneracc.ProvisionerTestCase{
IsCompatible: powershellIsCompatible,
Name: "powershell-provisioner-inline",
Template: templateString,
Type: TestProvisionerType,
Check: func(buildcommand *exec.Cmd, logfile string) error {
if buildcommand.ProcessState != nil {
if buildcommand.ProcessState.ExitCode() != 0 {
return fmt.Errorf("Bad exit code. Logfile: %s", logfile)
}
}
return nil
},
}
provisioneracc.TestProvisionersAgainstBuilders(testCase, t)
}
func TestAccPowershellProvisioner_Script(t *testing.T) {
templateString, err := LoadProvisionerFragment("powershell-script-provisioner.txt")
if err != nil {
t.Fatalf("Couldn't load test fixture; %s", err.Error())
}
testCase := &provisioneracc.ProvisionerTestCase{
IsCompatible: powershellIsCompatible,
Name: "powershell-provisioner-script",
Template: templateString,
Type: TestProvisionerType,
Check: func(buildcommand *exec.Cmd, logfile string) error {
if buildcommand.ProcessState != nil {
if buildcommand.ProcessState.ExitCode() != 0 {
return fmt.Errorf("Bad exit code. Logfile: %s", logfile)
}
}
return nil
},
}
provisioneracc.TestProvisionersAgainstBuilders(testCase, t)
}