Write output will put ouput from function, so we don't want to be getting line from output of function
Fix unit tests for not showing progress stream when using powershell Ensure that progress stream does not get leaked into stdout Using Write-Output instead of Write-Host since PS v5 now leaks the host stream to stderr
This commit is contained in:
parent
c42cb88ddd
commit
4b394c8563
|
@ -37,7 +37,7 @@ func TestOutput(t *testing.T) {
|
||||||
|
|
||||||
func TestRunFile(t *testing.T) {
|
func TestRunFile(t *testing.T) {
|
||||||
var blockBuffer bytes.Buffer
|
var blockBuffer bytes.Buffer
|
||||||
blockBuffer.WriteString("param([string]$a, [string]$b, [int]$x, [int]$y) $n = $x + $y; Write-Host $a, $b, $n")
|
blockBuffer.WriteString(`param([string]$a, [string]$b, [int]$x, [int]$y) $ProgressPreference='SilentlyContinue'; $n = $x + $y; Write-Output "$a $b $n";`)
|
||||||
|
|
||||||
var ps PowerShellCmd
|
var ps PowerShellCmd
|
||||||
cmdOut, err := ps.Output(blockBuffer.String(), "a", "b", "5", "10")
|
cmdOut, err := ps.Output(blockBuffer.String(), "a", "b", "5", "10")
|
||||||
|
|
|
@ -58,6 +58,7 @@ $t.XmlText = @'
|
||||||
</Actions>
|
</Actions>
|
||||||
</Task>
|
</Task>
|
||||||
'@
|
'@
|
||||||
|
$ProgressPreference='SilentlyContinue';
|
||||||
$f = $s.GetFolder("\")
|
$f = $s.GetFolder("\")
|
||||||
$f.RegisterTaskDefinition($name, $t, 6, "{{.User}}", "{{.Password}}", 1, $null) | Out-Null
|
$f.RegisterTaskDefinition($name, $t, 6, "{{.User}}", "{{.Password}}", 1, $null) | Out-Null
|
||||||
$t = $f.GetTask("\$name")
|
$t = $f.GetTask("\$name")
|
||||||
|
@ -68,19 +69,16 @@ while ((!($t.state -eq 4)) -and ($sec -lt $timeout)) {
|
||||||
Start-Sleep -s 1
|
Start-Sleep -s 1
|
||||||
$sec++
|
$sec++
|
||||||
}
|
}
|
||||||
function SlurpOutput($l) {
|
|
||||||
if (Test-Path $log) {
|
|
||||||
Get-Content $log | select -skip $l | ForEach {
|
|
||||||
$l += 1
|
|
||||||
Write-Output "$_"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $l
|
|
||||||
}
|
|
||||||
$line = 0
|
$line = 0
|
||||||
do {
|
do {
|
||||||
Start-Sleep -m 100
|
Start-Sleep -m 100
|
||||||
$line = SlurpOutput $line
|
if (Test-Path $log) {
|
||||||
|
Get-Content $log | select -skip $line | ForEach {
|
||||||
|
$line += 1
|
||||||
|
Write-Output "$_"
|
||||||
|
}
|
||||||
|
}
|
||||||
} while (!($t.state -eq 3))
|
} while (!($t.state -eq 3))
|
||||||
$result = $t.LastTaskResult
|
$result = $t.LastTaskResult
|
||||||
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($s) | Out-Null
|
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($s) | Out-Null
|
||||||
|
|
|
@ -120,11 +120,11 @@ func (p *Provisioner) Prepare(raws ...interface{}) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.config.ExecuteCommand == "" {
|
if p.config.ExecuteCommand == "" {
|
||||||
p.config.ExecuteCommand = `powershell '& { {{.Vars}}{{.Path}}; exit $LastExitCode}'`
|
p.config.ExecuteCommand = `powershell '& {$ProgressPreference='SilentlyContinue'; {{.Vars}}{{.Path}}; exit $LastExitCode}'`
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.config.ElevatedExecuteCommand == "" {
|
if p.config.ElevatedExecuteCommand == "" {
|
||||||
p.config.ElevatedExecuteCommand = `powershell '& { {{.Vars}}{{.Path}}; exit $LastExitCode}'`
|
p.config.ElevatedExecuteCommand = `powershell '& {$ProgressPreference='SilentlyContinue'; {{.Vars}}{{.Path}}; exit $LastExitCode}'`
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.config.Inline != nil && len(p.config.Inline) == 0 {
|
if p.config.Inline != nil && len(p.config.Inline) == 0 {
|
||||||
|
@ -425,7 +425,7 @@ func (p *Provisioner) generateElevatedRunner(command string) (uploadedPath strin
|
||||||
Password: p.config.ElevatedPassword,
|
Password: p.config.ElevatedPassword,
|
||||||
TaskDescription: "Packer elevated task",
|
TaskDescription: "Packer elevated task",
|
||||||
TaskName: fmt.Sprintf("packer-%s", uuid.TimeOrderedUUID()),
|
TaskName: fmt.Sprintf("packer-%s", uuid.TimeOrderedUUID()),
|
||||||
EncodedCommand: powershellEncode([]byte(command + "; exit $LASTEXITCODE")),
|
EncodedCommand: powershellEncode([]byte("$ProgressPreference='SilentlyContinue'; " + command + "; exit $LASTEXITCODE")),
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -75,11 +75,11 @@ func TestProvisionerPrepare_Defaults(t *testing.T) {
|
||||||
t.Error("expected elevated_password to be empty")
|
t.Error("expected elevated_password to be empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.config.ExecuteCommand != "powershell '& { {{.Vars}}{{.Path}}; exit $LastExitCode}'" {
|
if p.config.ExecuteCommand != "powershell '& {$ProgressPreference='SilentlyContinue'; {{.Vars}}{{.Path}}; exit $LastExitCode}'" {
|
||||||
t.Fatalf("Default command should be powershell '& { {{.Vars}}{{.Path}}; exit $LastExitCode}', but got %s", p.config.ExecuteCommand)
|
t.Fatalf("Default command should be powershell '& { {{.Vars}}{{.Path}}; exit $LastExitCode}', but got %s", p.config.ExecuteCommand)
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.config.ElevatedExecuteCommand != "powershell '& { {{.Vars}}{{.Path}}; exit $LastExitCode}'" {
|
if p.config.ElevatedExecuteCommand != "powershell '& {$ProgressPreference='SilentlyContinue'; {{.Vars}}{{.Path}}; exit $LastExitCode}'" {
|
||||||
t.Fatalf("Default command should be powershell powershell '& { {{.Vars}}{{.Path}}; exit $LastExitCode}', but got %s", p.config.ElevatedExecuteCommand)
|
t.Fatalf("Default command should be powershell powershell '& { {{.Vars}}{{.Path}}; exit $LastExitCode}', but got %s", p.config.ElevatedExecuteCommand)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -389,7 +389,7 @@ func TestProvisionerProvision_Inline(t *testing.T) {
|
||||||
t.Fatal("should not have error")
|
t.Fatal("should not have error")
|
||||||
}
|
}
|
||||||
|
|
||||||
expectedCommand := `powershell '& { $env:PACKER_BUILDER_TYPE=\"iso\"; $env:PACKER_BUILD_NAME=\"vmware\"; c:/Windows/Temp/inlineScript.bat; exit $LastExitCode}'`
|
expectedCommand := `powershell '& {$ProgressPreference='SilentlyContinue'; $env:PACKER_BUILDER_TYPE=\"iso\"; $env:PACKER_BUILD_NAME=\"vmware\"; c:/Windows/Temp/inlineScript.bat; exit $LastExitCode}'`
|
||||||
|
|
||||||
// Should run the command without alteration
|
// Should run the command without alteration
|
||||||
if comm.StartCmd.Command != expectedCommand {
|
if comm.StartCmd.Command != expectedCommand {
|
||||||
|
@ -408,7 +408,7 @@ func TestProvisionerProvision_Inline(t *testing.T) {
|
||||||
t.Fatal("should not have error")
|
t.Fatal("should not have error")
|
||||||
}
|
}
|
||||||
|
|
||||||
expectedCommand = `powershell '& { $env:BAR=\"BAZ\"; $env:FOO=\"BAR\"; $env:PACKER_BUILDER_TYPE=\"iso\"; $env:PACKER_BUILD_NAME=\"vmware\"; c:/Windows/Temp/inlineScript.bat; exit $LastExitCode}'`
|
expectedCommand = `powershell '& {$ProgressPreference='SilentlyContinue'; $env:BAR=\"BAZ\"; $env:FOO=\"BAR\"; $env:PACKER_BUILDER_TYPE=\"iso\"; $env:PACKER_BUILD_NAME=\"vmware\"; c:/Windows/Temp/inlineScript.bat; exit $LastExitCode}'`
|
||||||
|
|
||||||
// Should run the command without alteration
|
// Should run the command without alteration
|
||||||
if comm.StartCmd.Command != expectedCommand {
|
if comm.StartCmd.Command != expectedCommand {
|
||||||
|
@ -435,7 +435,7 @@ func TestProvisionerProvision_Scripts(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//powershell -Command "$env:PACKER_BUILDER_TYPE=''"; powershell -Command "$env:PACKER_BUILD_NAME='foobuild'"; powershell -Command c:/Windows/Temp/script.ps1
|
//powershell -Command "$env:PACKER_BUILDER_TYPE=''"; powershell -Command "$env:PACKER_BUILD_NAME='foobuild'"; powershell -Command c:/Windows/Temp/script.ps1
|
||||||
expectedCommand := `powershell '& { $env:PACKER_BUILDER_TYPE=\"footype\"; $env:PACKER_BUILD_NAME=\"foobuild\"; c:/Windows/Temp/script.ps1; exit $LastExitCode}'`
|
expectedCommand := `powershell '& {$ProgressPreference='SilentlyContinue'; $env:PACKER_BUILDER_TYPE=\"footype\"; $env:PACKER_BUILD_NAME=\"foobuild\"; c:/Windows/Temp/script.ps1; exit $LastExitCode}'`
|
||||||
|
|
||||||
// Should run the command without alteration
|
// Should run the command without alteration
|
||||||
if comm.StartCmd.Command != expectedCommand {
|
if comm.StartCmd.Command != expectedCommand {
|
||||||
|
@ -468,7 +468,7 @@ func TestProvisionerProvision_ScriptsWithEnvVars(t *testing.T) {
|
||||||
t.Fatal("should not have error")
|
t.Fatal("should not have error")
|
||||||
}
|
}
|
||||||
|
|
||||||
expectedCommand := `powershell '& { $env:BAR=\"BAZ\"; $env:FOO=\"BAR\"; $env:PACKER_BUILDER_TYPE=\"footype\"; $env:PACKER_BUILD_NAME=\"foobuild\"; c:/Windows/Temp/script.ps1; exit $LastExitCode}'`
|
expectedCommand := `powershell '& {$ProgressPreference='SilentlyContinue'; $env:BAR=\"BAZ\"; $env:FOO=\"BAR\"; $env:PACKER_BUILDER_TYPE=\"footype\"; $env:PACKER_BUILD_NAME=\"foobuild\"; c:/Windows/Temp/script.ps1; exit $LastExitCode}'`
|
||||||
|
|
||||||
// Should run the command without alteration
|
// Should run the command without alteration
|
||||||
if comm.StartCmd.Command != expectedCommand {
|
if comm.StartCmd.Command != expectedCommand {
|
||||||
|
@ -582,7 +582,7 @@ func TestProvision_createCommandText(t *testing.T) {
|
||||||
|
|
||||||
// Non-elevated
|
// Non-elevated
|
||||||
cmd, _ := p.createCommandText()
|
cmd, _ := p.createCommandText()
|
||||||
if cmd != `powershell '& { $env:PACKER_BUILDER_TYPE=\"\"; $env:PACKER_BUILD_NAME=\"\"; c:/Windows/Temp/script.ps1; exit $LastExitCode}'` {
|
if cmd != `powershell '& {$ProgressPreference='SilentlyContinue'; $env:PACKER_BUILDER_TYPE=\"\"; $env:PACKER_BUILD_NAME=\"\"; c:/Windows/Temp/script.ps1; exit $LastExitCode}'` {
|
||||||
t.Fatalf("Got unexpected non-elevated command: %s", cmd)
|
t.Fatalf("Got unexpected non-elevated command: %s", cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue