1
1
package iscsi
2
2
3
3
import (
4
+ "os/exec"
4
5
"testing"
5
6
6
7
"github.com/prashantv/gostub"
@@ -68,20 +69,20 @@ iface.discovery_logout = <empty>
68
69
69
70
func TestDiscovery (t * testing.T ) {
70
71
tests := map [string ]struct {
71
- tgtPortal string
72
- iface string
73
- discoverySecret Secrets
74
- chapDiscovery bool
75
- wantErr bool
76
- mockedStdout string
77
- mockedExitStatus int
72
+ tgtPortal string
73
+ iface string
74
+ discoverySecret Secrets
75
+ chapDiscovery bool
76
+ wantErr bool
77
+ mockedStdout string
78
+ mockedCmdError error
78
79
}{
79
80
"DiscoverySuccess" : {
80
- tgtPortal : "172.18.0.2:3260" ,
81
- iface : "default" ,
82
- chapDiscovery : false ,
83
- mockedStdout : "172.18.0.2:3260,1 iqn.2016-09.com.openebs.jiva:store1\n " ,
84
- mockedExitStatus : 0 ,
81
+ tgtPortal : "172.18.0.2:3260" ,
82
+ iface : "default" ,
83
+ chapDiscovery : false ,
84
+ mockedStdout : "172.18.0.2:3260,1 iqn.2016-09.com.openebs.jiva:store1\n " ,
85
+ mockedCmdError : nil ,
85
86
},
86
87
87
88
"ConnectionFailure" : {
@@ -92,8 +93,8 @@ func TestDiscovery(t *testing.T) {
92
93
iscsiadm: cannot make connection to 172.18.0.2: Connection refused
93
94
iscsiadm: connection login retries (reopen_max) 5 exceeded
94
95
iscsiadm: Could not perform SendTargets discovery: encountered connection failure\n` ,
95
- mockedExitStatus : 4 ,
96
- wantErr : true ,
96
+ mockedCmdError : exec . Command ( "exit" , "4" ). Run () ,
97
+ wantErr : true ,
97
98
},
98
99
99
100
"ChapEntrySuccess" : {
@@ -104,8 +105,8 @@ iscsiadm: Could not perform SendTargets discovery: encountered connection failur
104
105
UserNameIn : "dummyuser" ,
105
106
PasswordIn : "dummypass" ,
106
107
},
107
- mockedStdout : "172.18.0.2:3260,1 iqn.2016-09.com.openebs.jiva:store1\n " ,
108
- mockedExitStatus : 0 ,
108
+ mockedStdout : "172.18.0.2:3260,1 iqn.2016-09.com.openebs.jiva:store1\n " ,
109
+ mockedCmdError : nil ,
109
110
},
110
111
111
112
"ChapEntryFailure" : {
@@ -119,14 +120,14 @@ iscsiadm: Could not perform SendTargets discovery: encountered connection failur
119
120
mockedStdout : `iscsiadm: Login failed to authenticate with target
120
121
iscsiadm: discovery login to 172.18.0.2 rejected: initiator error (02/01), non-retryable, giving up
121
122
iscsiadm: Could not perform SendTargets discovery.\n` ,
122
- mockedExitStatus : 4 ,
123
- wantErr : true ,
123
+ mockedCmdError : exec . Command ( "exit" , "4" ). Run () ,
124
+ wantErr : true ,
124
125
},
125
126
}
126
127
127
128
for name , tt := range tests {
128
129
t .Run (name , func (t * testing.T ) {
129
- defer gostub .Stub (& execCommand , makeFakeExecCommand ( tt .mockedExitStatus , tt .mockedStdout )).Reset ()
130
+ defer gostub .Stub (& execWithTimeout , makeFakeExecWithTimeout ( false , [] byte ( tt .mockedStdout ) , tt .mockedCmdError )).Reset ()
130
131
err := Discoverydb (tt .tgtPortal , tt .iface , tt .discoverySecret , tt .chapDiscovery )
131
132
if (err != nil ) != tt .wantErr {
132
133
t .Errorf ("Discoverydb() error = %v, wantErr %v" , err , tt .wantErr )
@@ -138,14 +139,14 @@ iscsiadm: Could not perform SendTargets discovery.\n`,
138
139
139
140
func TestCreateDBEntry (t * testing.T ) {
140
141
tests := map [string ]struct {
141
- tgtPortal string
142
- tgtIQN string
143
- iface string
144
- discoverySecret Secrets
145
- sessionSecret Secrets
146
- wantErr bool
147
- mockedStdout string
148
- mockedExitStatus int
142
+ tgtPortal string
143
+ tgtIQN string
144
+ iface string
145
+ discoverySecret Secrets
146
+ sessionSecret Secrets
147
+ wantErr bool
148
+ mockedStdout string
149
+ mockedCmdError error
149
150
}{
150
151
"CreateDBEntryWithChapDiscoverySuccess" : {
151
152
tgtPortal : "192.168.1.107:3260" ,
@@ -161,22 +162,22 @@ func TestCreateDBEntry(t *testing.T) {
161
162
PasswordIn : "dummypass" ,
162
163
SecretsType : "chap" ,
163
164
},
164
- mockedStdout : nodeDB ,
165
- mockedExitStatus : 0 ,
165
+ mockedStdout : nodeDB ,
166
+ mockedCmdError : nil ,
166
167
},
167
168
"CreateDBEntryWithChapDiscoveryFailure" : {
168
- tgtPortal : "172.18.0.2:3260" ,
169
- tgtIQN : "iqn.2016-09.com.openebs.jiva:store1" ,
170
- iface : "default" ,
171
- mockedStdout : "iscsiadm: No records found\n " ,
172
- mockedExitStatus : 21 ,
173
- wantErr : true ,
169
+ tgtPortal : "172.18.0.2:3260" ,
170
+ tgtIQN : "iqn.2016-09.com.openebs.jiva:store1" ,
171
+ iface : "default" ,
172
+ mockedStdout : "iscsiadm: No records found\n " ,
173
+ mockedCmdError : exec . Command ( "exit" , "21" ). Run () ,
174
+ wantErr : true ,
174
175
},
175
176
}
176
177
177
178
for name , tt := range tests {
178
179
t .Run (name , func (t * testing.T ) {
179
- defer gostub .Stub (& execCommand , makeFakeExecCommand ( tt .mockedExitStatus , tt .mockedStdout )).Reset ()
180
+ defer gostub .Stub (& execWithTimeout , makeFakeExecWithTimeout ( false , [] byte ( tt .mockedStdout ) , tt .mockedCmdError )).Reset ()
180
181
err := CreateDBEntry (tt .tgtIQN , tt .tgtPortal , tt .iface , tt .discoverySecret , tt .sessionSecret )
181
182
if (err != nil ) != tt .wantErr {
182
183
t .Errorf ("CreateDBEntry() error = %v, wantErr %v" , err , tt .wantErr )
@@ -189,41 +190,41 @@ func TestCreateDBEntry(t *testing.T) {
189
190
190
191
func TestListInterfaces (t * testing.T ) {
191
192
tests := map [string ]struct {
192
- mockedStdout string
193
- mockedExitStatus int
194
- interfaces []string
195
- wantErr bool
193
+ mockedStdout string
194
+ mockedCmdError error
195
+ interfaces []string
196
+ wantErr bool
196
197
}{
197
198
"EmptyOutput" : {
198
- mockedStdout : "" ,
199
- mockedExitStatus : 0 ,
200
- interfaces : []string {"" },
201
- wantErr : false ,
199
+ mockedStdout : "" ,
200
+ mockedCmdError : nil ,
201
+ interfaces : []string {"" },
202
+ wantErr : false ,
202
203
},
203
204
"DefaultInterface" : {
204
- mockedStdout : "default" ,
205
- mockedExitStatus : 0 ,
206
- interfaces : []string {"default" },
207
- wantErr : false ,
205
+ mockedStdout : "default" ,
206
+ mockedCmdError : nil ,
207
+ interfaces : []string {"default" },
208
+ wantErr : false ,
208
209
},
209
210
"TwoInterface" : {
210
- mockedStdout : "default\n test" ,
211
- mockedExitStatus : 0 ,
212
- interfaces : []string {"default" , "test" },
213
- wantErr : false ,
211
+ mockedStdout : "default\n test" ,
212
+ mockedCmdError : nil ,
213
+ interfaces : []string {"default" , "test" },
214
+ wantErr : false ,
214
215
},
215
216
"HasError" : {
216
- mockedStdout : "" ,
217
- mockedExitStatus : 1 ,
218
- interfaces : []string {},
219
- wantErr : true ,
217
+ mockedStdout : "" ,
218
+ mockedCmdError : exec . Command ( "exit" , "1" ). Run () ,
219
+ interfaces : []string {},
220
+ wantErr : true ,
220
221
},
221
222
}
222
223
223
224
for name , tt := range tests {
224
225
t .Run (name , func (t * testing.T ) {
225
226
assert := assert .New (t )
226
- defer gostub .Stub (& execCommand , makeFakeExecCommand ( tt .mockedExitStatus , tt .mockedStdout )).Reset ()
227
+ defer gostub .Stub (& execWithTimeout , makeFakeExecWithTimeout ( false , [] byte ( tt .mockedStdout ) , tt .mockedCmdError )).Reset ()
227
228
interfaces , err := ListInterfaces ()
228
229
229
230
if tt .wantErr {
@@ -238,29 +239,29 @@ func TestListInterfaces(t *testing.T) {
238
239
239
240
func TestShowInterface (t * testing.T ) {
240
241
tests := map [string ]struct {
241
- mockedStdout string
242
- mockedExitStatus int
243
- iFace string
244
- wantErr bool
242
+ mockedStdout string
243
+ mockedCmdError error
244
+ iFace string
245
+ wantErr bool
245
246
}{
246
247
"DefaultInterface" : {
247
- mockedStdout : defaultInterface ,
248
- mockedExitStatus : 0 ,
249
- iFace : defaultInterface ,
250
- wantErr : false ,
248
+ mockedStdout : defaultInterface ,
249
+ mockedCmdError : nil ,
250
+ iFace : defaultInterface ,
251
+ wantErr : false ,
251
252
},
252
253
"HasError" : {
253
- mockedStdout : "" ,
254
- mockedExitStatus : 1 ,
255
- iFace : "" ,
256
- wantErr : true ,
254
+ mockedStdout : "" ,
255
+ mockedCmdError : exec . Command ( "exit" , "1" ). Run () ,
256
+ iFace : "" ,
257
+ wantErr : true ,
257
258
},
258
259
}
259
260
260
261
for name , tt := range tests {
261
262
t .Run (name , func (t * testing.T ) {
262
263
assert := assert .New (t )
263
- defer gostub .Stub (& execCommand , makeFakeExecCommand ( tt .mockedExitStatus , tt .mockedStdout )).Reset ()
264
+ defer gostub .Stub (& execWithTimeout , makeFakeExecWithTimeout ( false , [] byte ( tt .mockedStdout ) , tt .mockedCmdError )).Reset ()
264
265
interfaces , err := ShowInterface ("default" )
265
266
266
267
if tt .wantErr {
0 commit comments