Skip to content

Commit 99843e9

Browse files
Improving error messages in windows command execution (#2054)
improving error messages from executing commands on windows
1 parent 8a105b9 commit 99843e9

File tree

2 files changed

+25
-8
lines changed

2 files changed

+25
-8
lines changed

platform/os_windows.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"github.com/Azure/azure-container-networking/log"
1717
"github.com/Azure/azure-container-networking/platform/windows/adapter"
1818
"github.com/Azure/azure-container-networking/platform/windows/adapter/mellanox"
19+
"github.com/pkg/errors"
1920
"golang.org/x/sys/windows"
2021
)
2122

@@ -108,20 +109,19 @@ func GetLastRebootTime() (time.Time, error) {
108109
}
109110

110111
func (p *execClient) ExecuteCommand(command string) (string, error) {
111-
log.Printf("[Azure-Utils] %s", command)
112+
log.Printf("[Azure-Utils] ExecuteCommand: %q", command)
113+
114+
var stderr, stdout bytes.Buffer
112115

113-
var stderr bytes.Buffer
114-
var out bytes.Buffer
115116
cmd := exec.Command("cmd", "/c", command)
116117
cmd.Stderr = &stderr
117-
cmd.Stdout = &out
118+
cmd.Stdout = &stdout
118119

119-
err := cmd.Run()
120-
if err != nil {
121-
return "", fmt.Errorf("%s:%s", err.Error(), stderr.String())
120+
if err := cmd.Run(); err != nil {
121+
return "", errors.Wrapf(err, "ExecuteCommand failed. stdout: %q, stderr: %q", stdout.String(), stderr.String())
122122
}
123123

124-
return out.String(), nil
124+
return stdout.String(), nil
125125
}
126126

127127
func SetOutboundSNAT(subnet string) error {

platform/os_windows_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ package platform
22

33
import (
44
"errors"
5+
"os/exec"
56
"testing"
67

78
"github.com/Azure/azure-container-networking/platform/windows/adapter/mocks"
89
"github.com/golang/mock/gomock"
910
"github.com/stretchr/testify/assert"
11+
"github.com/stretchr/testify/require"
1012
)
1113

1214
var errTestFailure = errors.New("test failure")
@@ -81,3 +83,18 @@ func TestUpdatePriorityVLANTagIfRequiredIfCurrentValNotEqualDesiredValAndSetRetu
8183
result := updatePriorityVLANTagIfRequired(mockNetworkAdapter, 5)
8284
assert.EqualError(t, result, "error while setting Priority VLAN Tag value: test failure")
8385
}
86+
87+
func TestExecuteCommand(t *testing.T) {
88+
out, err := NewExecClient().ExecuteCommand("dir")
89+
require.NoError(t, err)
90+
require.NotEmpty(t, out)
91+
}
92+
93+
func TestExecuteCommandError(t *testing.T) {
94+
_, err := NewExecClient().ExecuteCommand("dontaddtopath")
95+
require.Error(t, err)
96+
97+
var xErr *exec.ExitError
98+
assert.ErrorAs(t, err, &xErr)
99+
assert.Equal(t, 1, xErr.ExitCode())
100+
}

0 commit comments

Comments
 (0)