-
Notifications
You must be signed in to change notification settings - Fork 242
/
Copy pathos_windows_test.go
148 lines (120 loc) · 5.38 KB
/
os_windows_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
package platform
import (
"context"
"errors"
"os/exec"
"testing"
"time"
"github.com/Azure/azure-container-networking/platform/windows/adapter/mocks"
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
var errTestFailure = errors.New("test failure")
// Test if hasNetworkAdapter returns false on actual error or empty adapter name(an error)
func TestHasNetworkAdapterReturnsError(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
mockNetworkAdapter := mocks.NewMockNetworkAdapter(ctrl)
mockNetworkAdapter.EXPECT().GetAdapterName().Return("", errTestFailure)
result := hasNetworkAdapter(mockNetworkAdapter)
assert.False(t, result)
}
// Test if hasNetworkAdapter returns false on actual error or empty adapter name(an error)
func TestHasNetworkAdapterAdapterReturnsEmptyAdapterName(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
mockNetworkAdapter := mocks.NewMockNetworkAdapter(ctrl)
mockNetworkAdapter.EXPECT().GetAdapterName().Return("Ethernet 3", nil)
result := hasNetworkAdapter(mockNetworkAdapter)
assert.True(t, result)
}
// Test if updatePriorityVLANTagIfRequired returns error on getting error on calling getpriorityvlantag
func TestUpdatePriorityVLANTagIfRequiredReturnsError(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
mockNetworkAdapter := mocks.NewMockNetworkAdapter(ctrl)
mockNetworkAdapter.EXPECT().GetPriorityVLANTag().Return(0, errTestFailure)
result := updatePriorityVLANTagIfRequired(mockNetworkAdapter, 3)
assert.EqualError(t, result, "error while getting Priority VLAN Tag value: test failure")
}
// Test if updatePriorityVLANTagIfRequired returns nil if currentval == desiredvalue (SetPriorityVLANTag not being called)
func TestUpdatePriorityVLANTagIfRequiredIfCurrentValEqualDesiredValue(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
mockNetworkAdapter := mocks.NewMockNetworkAdapter(ctrl)
mockNetworkAdapter.EXPECT().GetPriorityVLANTag().Return(4, nil)
result := updatePriorityVLANTagIfRequired(mockNetworkAdapter, 4)
assert.NoError(t, result)
}
// Test if updatePriorityVLANTagIfRequired returns nil if SetPriorityVLANTag being called to set value
func TestUpdatePriorityVLANTagIfRequiredIfCurrentValNotEqualDesiredValAndSetReturnsNoError(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
mockNetworkAdapter := mocks.NewMockNetworkAdapter(ctrl)
mockNetworkAdapter.EXPECT().GetPriorityVLANTag().Return(1, nil)
mockNetworkAdapter.EXPECT().SetPriorityVLANTag(2).Return(nil)
result := updatePriorityVLANTagIfRequired(mockNetworkAdapter, 2)
assert.NoError(t, result)
}
// Test if updatePriorityVLANTagIfRequired returns error if SetPriorityVLANTag throwing error
func TestUpdatePriorityVLANTagIfRequiredIfCurrentValNotEqualDesiredValAndSetReturnsError(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
mockNetworkAdapter := mocks.NewMockNetworkAdapter(ctrl)
mockNetworkAdapter.EXPECT().GetPriorityVLANTag().Return(1, nil)
mockNetworkAdapter.EXPECT().SetPriorityVLANTag(5).Return(errTestFailure)
result := updatePriorityVLANTagIfRequired(mockNetworkAdapter, 5)
assert.EqualError(t, result, "error while setting Priority VLAN Tag value: test failure")
}
func TestExecuteRawCommand(t *testing.T) {
out, err := NewExecClient(nil).ExecuteRawCommand("dir")
require.NoError(t, err)
require.NotEmpty(t, out)
}
func TestExecuteRawCommandError(t *testing.T) {
_, err := NewExecClient(nil).ExecuteRawCommand("dontaddtopath")
require.Error(t, err)
var xErr *exec.ExitError
assert.ErrorAs(t, err, &xErr)
assert.Equal(t, 1, xErr.ExitCode())
}
func TestExecuteCommand(t *testing.T) {
_, err := NewExecClient(nil).ExecuteCommand(context.Background(), "ping", "localhost")
if err != nil {
t.Errorf("TestExecuteCommand failed with error %v", err)
}
}
func TestExecuteCommandError(t *testing.T) {
_, err := NewExecClient(nil).ExecuteCommand(context.Background(), "dontaddtopath")
require.Error(t, err)
require.ErrorIs(t, err, exec.ErrNotFound)
}
func TestFetchPnpIDMapping(t *testing.T) {
mockExecClient := NewMockExecClient(false)
// happy path
mockExecClient.SetPowershellCommandResponder(func(cmd string) (string, error) {
return "6C-A1-00-50-E4-2D PCI\\VEN_8086&DEV_2723&SUBSYS_00808086&REV_1A\\4&328243d9&0&00E0\n80-6D-97-1E-CF-4E USB\\VID_17EF&PID_A359\\3010019E3", nil
})
vfmapping, _ := FetchMacAddressPnpIDMapping(context.Background(), mockExecClient)
require.Len(t, vfmapping, 2)
// Test when no adapters are found
mockExecClient.SetPowershellCommandResponder(func(cmd string) (string, error) {
return "", nil
})
vfmapping, _ = FetchMacAddressPnpIDMapping(context.Background(), mockExecClient)
require.Empty(t, vfmapping)
// Adding carriage returns
mockExecClient.SetPowershellCommandResponder(func(cmd string) (string, error) {
return "6C-A1-00-50-E4-2D PCI\\VEN_8086&DEV_2723&SUBSYS_00808086&REV_1A\\4&328243d9&0&00E0\r\n\r80-6D-97-1E-CF-4E USB\\VID_17EF&PID_A359\\3010019E3", nil
})
vfmapping, _ = FetchMacAddressPnpIDMapping(context.Background(), mockExecClient)
require.Len(t, vfmapping, 2)
}
// ping -t localhost will ping indefinitely and should exceed the 5 second timeout
func TestExecuteCommandTimeout(t *testing.T) {
const timeout = 5 * time.Second
client := NewExecClientTimeout(timeout)
_, err := client.ExecuteCommand(context.Background(), "ping", "-t", "localhost")
require.Error(t, err)
}