From b39b8d9521edbc3495cfb6b8dd7d11850390baf8 Mon Sep 17 00:00:00 2001 From: Sebastian Zagrodzki Date: Sat, 29 Apr 2017 01:35:09 +0200 Subject: [PATCH] Add "empty" to confirm no transfers are in flight in fakeusb. Update endpoint_test - if buffer length is 0, no transfer is submitted. --- usb/endpoint_test.go | 61 ++++++++++++++++++++++++------------------ usb/fakelibusb_test.go | 5 ++++ 2 files changed, 40 insertions(+), 26 deletions(-) diff --git a/usb/endpoint_test.go b/usb/endpoint_test.go index 62ead9a..bbac9d0 100644 --- a/usb/endpoint_test.go +++ b/usb/endpoint_test.go @@ -57,41 +57,47 @@ func TestEndpoint(t *testing.T) { } { epData.intf.Endpoints = []EndpointInfo{epData.ei} for _, tc := range []struct { - desc string - buf []byte - ret int - status TransferStatus - want int - wantErr bool + desc string + buf []byte + ret int + wantSubmit bool + status TransferStatus + want int + wantErr bool }{ { - desc: "empty buffer", - buf: nil, - ret: 10, - want: 0, + desc: "empty buffer", + buf: nil, + ret: 10, + wantSubmit: false, + want: 0, }, { - desc: "128B buffer, 60 transferred", - buf: make([]byte, 128), - ret: 60, - want: 60, + desc: "128B buffer, 60 transferred", + buf: make([]byte, 128), + ret: 60, + wantSubmit: true, + want: 60, }, { - desc: "128B buffer, 10 transferred and then error", - buf: make([]byte, 128), - ret: 10, - status: TransferError, - want: 10, - wantErr: true, + desc: "128B buffer, 10 transferred and then error", + buf: make([]byte, 128), + ret: 10, + wantSubmit: true, + status: TransferError, + want: 10, + wantErr: true, }, } { ep := &endpoint{h: nil, InterfaceSetting: epData.intf, Info: epData.ei} - go func() { - fakeT := lib.waitForSubmitted() - fakeT.length = tc.ret - fakeT.status = tc.status - close(fakeT.done) - }() + if tc.wantSubmit { + go func() { + fakeT := lib.waitForSubmitted() + fakeT.length = tc.ret + fakeT.status = tc.status + close(fakeT.done) + }() + } got, err := ep.transfer(tc.buf) if (err != nil) != tc.wantErr { t.Errorf("%s, %s: ep.transfer(...): got err: %v, err != nil is %v, want %v", epData.ei, tc.desc, err, err != nil, tc.wantErr) @@ -100,6 +106,9 @@ func TestEndpoint(t *testing.T) { if got != tc.want { t.Errorf("%s, %s: ep.transfer(...): got %d bytes, want %d", epData.ei, tc.desc, got, tc.want) } + if !lib.empty() { + t.Fatalf("%s, %s: transfers still pending when none were expected", epData.ei, tc.desc) + } } } } diff --git a/usb/fakelibusb_test.go b/usb/fakelibusb_test.go index 0a7cce3..2aabcac 100644 --- a/usb/fakelibusb_test.go +++ b/usb/fakelibusb_test.go @@ -296,6 +296,11 @@ func (f *fakeLibusb) waitForSubmitted() *fakeTransfer { return <-f.submitted } +// empty can be used to confirm that all transfers were cleaned up. +func (f *fakeLibusb) empty() bool { + return len(f.submitted) == 0 +} + func newFakeLibusb() (*fakeLibusb, func() error) { origLibusb := libusb fl := &fakeLibusb{