Skip to content

Commit cc778f9

Browse files
committed
[pkg/stanza]: fix tests
It was impossible to implement proper mocks for evt* functions by patching the LazyProc calls directly, as runtime/checkptr.go has too strict checks for that. Now, the evt* functions themselves are patched, which have the proper type parameters.
1 parent 389ce35 commit cc778f9

File tree

1 file changed

+65
-75
lines changed

1 file changed

+65
-75
lines changed

pkg/stanza/operator/input/windows/input_test.go

Lines changed: 65 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -195,43 +195,37 @@ func TestInputStart_RemoteSessionWithDomain(t *testing.T) {
195195
// TestInputRead_RPCInvalidBound tests that the Input handles RPC_S_INVALID_BOUND errors properly
196196
func TestInputRead_RPCInvalidBound(t *testing.T) {
197197
// Save original procs and restore after test
198-
originalNextProc := nextProc
199-
originalCloseProc := closeProc
200-
originalSubscribeProc := subscribeProc
198+
originalEvtNext := evtNext
199+
originalEvtClose := evtClose
200+
originalEvtSubscribe := evtSubscribe
201201

202202
// Track calls to our mocked functions
203203
var nextCalls, closeCalls, subscribeCalls int
204204

205205
// Mock the procs
206-
closeProc = MockProc{
207-
call: func(_ ...uintptr) (uintptr, uintptr, error) {
208-
closeCalls++
209-
return 1, 0, nil
210-
},
206+
evtClose = func(_ uintptr) error {
207+
closeCalls++
208+
return nil
211209
}
212210

213-
subscribeProc = MockProc{
214-
call: func(_ ...uintptr) (uintptr, uintptr, error) {
215-
subscribeCalls++
216-
return 42, 0, nil
217-
},
211+
evtSubscribe = func(_ uintptr, _ windows.Handle, _, _ *uint16, _, _, _ uintptr, _ uint32) (uintptr, error) {
212+
subscribeCalls++
213+
return 42, nil
218214
}
219215

220-
nextProc = MockProc{
221-
call: func(_ ...uintptr) (uintptr, uintptr, error) {
222-
nextCalls++
223-
if nextCalls == 1 {
224-
return 0, 0, windows.RPC_S_INVALID_BOUND
225-
}
216+
evtNext = func(_ uintptr, _ uint32, _ *uintptr, _, _ uint32, _ *uint32) error {
217+
nextCalls++
218+
if nextCalls == 1 {
219+
return windows.RPC_S_INVALID_BOUND
220+
}
226221

227-
return 1, 0, nil
228-
},
222+
return nil
229223
}
230224

231225
defer func() {
232-
nextProc = originalNextProc
233-
closeProc = originalCloseProc
234-
subscribeProc = originalSubscribeProc
226+
evtNext = originalEvtNext
227+
evtClose = originalEvtClose
228+
evtSubscribe = originalEvtSubscribe
235229
}()
236230

237231
// Create a logger with an observer for testing log output
@@ -402,78 +396,74 @@ func TestInputIncludeLogRecordOriginalFalse(t *testing.T) {
402396

403397
// TestInputRead_Batching tests that the Input handles MaxEventsPerPoll and MaxReads correctly
404398
func TestInputRead_Batching(t *testing.T) {
405-
originalNextProc := nextProc
406-
originalRenderProc := renderProc
407-
originalCloseProc := closeProc
408-
originalSubscribeProc := subscribeProc
399+
originalEvtNext := evtNext
400+
originalEvtRender := evtRender
401+
originalEvtClose := evtClose
402+
originalEvtSubscribe := evtSubscribe
409403
originalCreateBookmarkProc := createBookmarkProc
410-
originalUpdateBookmarkProc := updateBookmarkProc
404+
originalEvtUpdateBookmark := evtUpdateBookmark
411405
defer func() {
412-
nextProc = originalNextProc
413-
renderProc = originalRenderProc
414-
closeProc = originalCloseProc
415-
subscribeProc = originalSubscribeProc
406+
evtNext = originalEvtNext
407+
evtRender = originalEvtRender
408+
evtClose = originalEvtClose
409+
evtSubscribe = originalEvtSubscribe
416410
createBookmarkProc = originalCreateBookmarkProc
417-
updateBookmarkProc = originalUpdateBookmarkProc
411+
evtUpdateBookmark = originalEvtUpdateBookmark
418412
}()
419413

414+
evtSubscribe = func(_ uintptr, _ windows.Handle, _, _ *uint16, _, _, _ uintptr, _ uint32) (uintptr, error) {
415+
return 42, nil
416+
}
417+
418+
evtRender = func(_, _ uintptr, _, _ uint32, _ *byte) (*uint32, error) {
419+
bufferUsed := new(uint32)
420+
return bufferUsed, nil
421+
}
422+
423+
evtClose = func(_ uintptr) error {
424+
return nil
425+
}
426+
427+
createBookmarkProc = MockProc{
428+
call: func(_ ...uintptr) (uintptr, uintptr, error) {
429+
return 1, 0, nil
430+
},
431+
}
432+
433+
evtUpdateBookmark = func(_, _ uintptr) error {
434+
return nil
435+
}
436+
420437
var nextCalls, processedEvents, emittedEvents int
421438

422439
maxEventsToEmit := -1
423440

424441
mockBatch := make([]uintptr, 99)
425-
producedEvents := 0
426442
var pinner runtime.Pinner
427443
pinner.Pin(&mockBatch[0])
428-
pinner.Pin(&producedEvents)
429444
defer pinner.Unpin()
430445

446+
producedEvents := 0
447+
431448
for i := range mockBatch {
432449
mockBatch[i] = uintptr(i)
433450
}
434451

435-
renderProc = MockProc{
436-
call: func(_ ...uintptr) (uintptr, uintptr, error) {
437-
return 1, 0, nil
438-
},
439-
}
440-
createBookmarkProc = MockProc{
441-
call: func(_ ...uintptr) (uintptr, uintptr, error) {
442-
return 1, 0, nil
443-
},
444-
}
445-
closeProc = MockProc{
446-
call: func(_ ...uintptr) (uintptr, uintptr, error) {
447-
return 1, 0, nil
448-
},
449-
}
450-
subscribeProc = MockProc{
451-
call: func(_ ...uintptr) (uintptr, uintptr, error) {
452-
return 42, 0, nil
453-
},
454-
}
455-
updateBookmarkProc = MockProc{
456-
call: func(_ ...uintptr) (uintptr, uintptr, error) {
457-
return 1, 0, nil
458-
},
459-
}
460-
nextProc = MockProc{
461-
call: func(params ...uintptr) (uintptr, uintptr, error) {
462-
nextCalls++
463-
464-
wantsToRead := int(params[1])
465-
producedEvents = min(len(mockBatch), wantsToRead)
466-
if maxEventsToEmit >= 0 {
467-
producedEvents = min(producedEvents, maxEventsToEmit-emittedEvents)
468-
}
452+
evtNext = func(_ uintptr, eventsSize uint32, events *uintptr, _, _ uint32, returned *uint32) error {
453+
nextCalls++
469454

470-
*(*uint32)(unsafe.Pointer(params[5])) = uint32(producedEvents)
471-
*(*uintptr)(unsafe.Pointer(params[2])) = uintptr(unsafe.Pointer(&mockBatch[0]))
455+
wantsToRead := int(eventsSize)
456+
producedEvents = min(len(mockBatch), wantsToRead)
457+
if maxEventsToEmit >= 0 {
458+
producedEvents = min(producedEvents, maxEventsToEmit-emittedEvents)
459+
}
472460

473-
emittedEvents += producedEvents
461+
*returned = uint32(producedEvents)
462+
*events = uintptr(unsafe.Pointer(&mockBatch[0]))
474463

475-
return 1, 0, nil
476-
},
464+
emittedEvents += producedEvents
465+
466+
return nil
477467
}
478468

479469
input := newTestInput()

0 commit comments

Comments
 (0)