1
+ //go:build windows
1
2
// +build windows
2
3
3
4
package wincred
4
5
5
6
import (
6
7
"errors"
7
8
"testing"
8
- "unsafe"
9
9
10
10
"github.com/stretchr/testify/assert"
11
11
"github.com/stretchr/testify/mock"
@@ -32,80 +32,6 @@ func (t *mockProc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) {
32
32
return uintptr (args .Int (0 )), uintptr (args .Int (1 )), args .Error (2 )
33
33
}
34
34
35
- func TestSysCredRead_MockFailure (t * testing.T ) {
36
- // The test error
37
- testError := errors .New ("test error" )
38
- // Mock `CreadRead`: returns failure state and the error
39
- mockCredRead := new (mockProc )
40
- mockCredRead .On ("Call" , mock .AnythingOfType ("[]uintptr" )).Return (0 , 0 , testError )
41
- mockCredRead .Setup (& procCredRead )
42
- defer mockCredRead .TearDown ()
43
- // Mock `CredFree`: Must not be called
44
- mockCredFree := new (mockProc )
45
- mockCredFree .On ("Call" , mock .AnythingOfType ("[]uintptr" )).Return (0 , 0 , nil )
46
- mockCredFree .Setup (& procCredFree )
47
- defer mockCredFree .TearDown ()
48
-
49
- // Test it:
50
- var res * Credential
51
- var err error
52
- assert .NotPanics (t , func () { res , err = sysCredRead ("foo" , sysCRED_TYPE_GENERIC ) })
53
- assert .Nil (t , res )
54
- assert .NotNil (t , err )
55
- assert .Equal (t , "test error" , err .Error ())
56
- mockCredRead .AssertNumberOfCalls (t , "Call" , 1 )
57
- mockCredFree .AssertNumberOfCalls (t , "Call" , 0 )
58
- }
59
-
60
- func TestSysCredRead_Mock (t * testing.T ) {
61
- // prepare some test data
62
- cred := new (Credential )
63
- cred .TargetName = "Foo"
64
- cred .Comment = "Bar"
65
- cred .CredentialBlob = []byte {1 , 2 , 3 }
66
- credSys := sysFromCredential (cred )
67
- t .Log (credSys ) // Workaround to keep the object alive
68
-
69
- // Mock `CreadRead`: returns success and sets the pointer to the prepared sysCred struct
70
- mockCredRead := new (mockProc )
71
- mockCredRead .
72
- On ("Call" , mock .AnythingOfType ("[]uintptr" )).
73
- Return (1 , 0 , nil ).
74
- Run (func (args mock.Arguments ) {
75
- arg := args .Get (0 ).([]uintptr )
76
- assert .Equal (t , 4 , len (arg ))
77
- * (* * sysCREDENTIAL )(unsafe .Pointer (arg [3 ])) = credSys
78
- })
79
- mockCredRead .Setup (& procCredRead )
80
- defer mockCredRead .TearDown ()
81
-
82
- // Mock `CredFree`: Must be called as well with the correct pointer
83
- mockCredFree := new (mockProc )
84
- mockCredFree .
85
- On ("Call" , mock .AnythingOfType ("[]uintptr" )).
86
- Return (0 , 0 , nil ).
87
- Run (func (args mock.Arguments ) {
88
- arg := args .Get (0 ).([]uintptr )
89
- assert .Equal (t , 1 , len (arg ))
90
- assert .Equal (t , uintptr (unsafe .Pointer (credSys )), arg [0 ])
91
- })
92
- mockCredFree .Setup (& procCredFree )
93
- defer mockCredFree .TearDown ()
94
-
95
- // Test it:
96
- var res * Credential
97
- var err error
98
- assert .NotPanics (t , func () { res , err = sysCredRead ("Foo" , sysCRED_TYPE_GENERIC ) })
99
- mockCredRead .AssertNumberOfCalls (t , "Call" , 1 )
100
- mockCredFree .AssertNumberOfCalls (t , "Call" , 1 )
101
- assert .NotNil (t , res )
102
- assert .Nil (t , err )
103
- assert .Equal (t , "Foo" , res .TargetName )
104
- assert .Equal (t , "Bar" , res .Comment )
105
- assert .Equal (t , []byte {1 , 2 , 3 }, res .CredentialBlob )
106
- assert .NotEqual (t , & cred , & res )
107
- }
108
-
109
35
func TestSysCredWrite_MockFailure (t * testing.T ) {
110
36
// Mock `CreadWrite`: returns failure state and the error
111
37
mockCredWrite := new (mockProc )
@@ -163,80 +89,3 @@ func TestSysCredDelete_Mock(t *testing.T) {
163
89
assert .Nil (t , err )
164
90
mockCredDelete .AssertNumberOfCalls (t , "Call" , 1 )
165
91
}
166
-
167
- func TestSysCredEnumerate_MockFailure (t * testing.T ) {
168
- // The test error
169
- testError := errors .New ("test error" )
170
- // Mock `CreadEnumerate`: returns failure state and the error
171
- mockCredEnumerate := new (mockProc )
172
- mockCredEnumerate .On ("Call" , mock .AnythingOfType ("[]uintptr" )).Return (0 , 0 , testError )
173
- mockCredEnumerate .Setup (& procCredEnumerate )
174
- defer mockCredEnumerate .TearDown ()
175
- // Mock `CredFree`: Must not be called
176
- mockCredFree := new (mockProc )
177
- mockCredFree .On ("Call" , mock .AnythingOfType ("[]uintptr" )).Return (0 , 0 , nil )
178
- mockCredFree .Setup (& procCredFree )
179
- defer mockCredFree .TearDown ()
180
-
181
- // Test it:
182
- var res []* Credential
183
- var err error
184
- assert .NotPanics (t , func () { res , err = sysCredEnumerate ("" , true ) })
185
- assert .Nil (t , res )
186
- assert .NotNil (t , err )
187
- assert .Equal (t , "test error" , err .Error ())
188
- mockCredEnumerate .AssertNumberOfCalls (t , "Call" , 1 )
189
- mockCredFree .AssertNumberOfCalls (t , "Call" , 0 )
190
- }
191
-
192
- func TestSysCredEnumerate_Mock (t * testing.T ) {
193
- // prepare some test data
194
- creds := []* Credential {new (Credential ), new (Credential )}
195
- creds [0 ].TargetName = "Foo"
196
- creds [1 ].TargetName = "Bar"
197
- credsSys := [](* sysCREDENTIAL ){
198
- sysFromCredential (creds [0 ]),
199
- sysFromCredential (creds [1 ]),
200
- }
201
- t .Log (credsSys [0 ]) // Workaround to keep the object alive
202
- t .Log (credsSys [1 ]) // Workaround to keep the object alive
203
-
204
- // Mock `CreadEnumerate`: returns success and sets the pointer to the prepared sysCreds array
205
- mockCredEnumerate := new (mockProc )
206
- mockCredEnumerate .
207
- On ("Call" , mock .AnythingOfType ("[]uintptr" )).
208
- Return (1 , 0 , nil ).
209
- Run (func (args mock.Arguments ) {
210
- arg := args .Get (0 ).([]uintptr )
211
- assert .Equal (t , 4 , len (arg ))
212
- * (* int )(unsafe .Pointer (arg [2 ])) = len (credsSys )
213
- * (* []* sysCREDENTIAL )(unsafe .Pointer (arg [3 ])) = credsSys
214
- })
215
- mockCredEnumerate .Setup (& procCredEnumerate )
216
- defer mockCredEnumerate .TearDown ()
217
-
218
- // Mock `CredFree`: Must be called as well with the correct pointer
219
- mockCredFree := new (mockProc )
220
- mockCredFree .
221
- On ("Call" , mock .AnythingOfType ("[]uintptr" )).
222
- Return (0 , 0 , nil ).
223
- Run (func (args mock.Arguments ) {
224
- arg := args .Get (0 ).([]uintptr )
225
- assert .Equal (t , 1 , len (arg ))
226
- assert .Equal (t , uintptr (unsafe .Pointer (& credsSys [0 ])), arg [0 ])
227
- })
228
- mockCredFree .Setup (& procCredFree )
229
- defer mockCredFree .TearDown ()
230
-
231
- // Test it:
232
- var res []* Credential
233
- var err error
234
- assert .NotPanics (t , func () { res , err = sysCredEnumerate ("" , true ) })
235
- mockCredEnumerate .AssertNumberOfCalls (t , "Call" , 1 )
236
- mockCredFree .AssertNumberOfCalls (t , "Call" , 1 )
237
- assert .NotNil (t , res )
238
- assert .Nil (t , err )
239
- assert .Equal (t , 2 , len (res ))
240
- assert .Equal (t , "Foo" , res [0 ].TargetName )
241
- assert .Equal (t , "Bar" , res [1 ].TargetName )
242
- }
0 commit comments