Add "empty" to confirm no transfers are in flight in fakeusb.

Update endpoint_test - if buffer length is 0, no transfer is submitted.
This commit is contained in:
Sebastian Zagrodzki
2017-04-29 01:35:09 +02:00
parent c2d1a4c03d
commit b39b8d9521
2 changed files with 40 additions and 26 deletions

View File

@@ -57,41 +57,47 @@ func TestEndpoint(t *testing.T) {
} { } {
epData.intf.Endpoints = []EndpointInfo{epData.ei} epData.intf.Endpoints = []EndpointInfo{epData.ei}
for _, tc := range []struct { for _, tc := range []struct {
desc string desc string
buf []byte buf []byte
ret int ret int
status TransferStatus wantSubmit bool
want int status TransferStatus
wantErr bool want int
wantErr bool
}{ }{
{ {
desc: "empty buffer", desc: "empty buffer",
buf: nil, buf: nil,
ret: 10, ret: 10,
want: 0, wantSubmit: false,
want: 0,
}, },
{ {
desc: "128B buffer, 60 transferred", desc: "128B buffer, 60 transferred",
buf: make([]byte, 128), buf: make([]byte, 128),
ret: 60, ret: 60,
want: 60, wantSubmit: true,
want: 60,
}, },
{ {
desc: "128B buffer, 10 transferred and then error", desc: "128B buffer, 10 transferred and then error",
buf: make([]byte, 128), buf: make([]byte, 128),
ret: 10, ret: 10,
status: TransferError, wantSubmit: true,
want: 10, status: TransferError,
wantErr: true, want: 10,
wantErr: true,
}, },
} { } {
ep := &endpoint{h: nil, InterfaceSetting: epData.intf, Info: epData.ei} ep := &endpoint{h: nil, InterfaceSetting: epData.intf, Info: epData.ei}
go func() { if tc.wantSubmit {
fakeT := lib.waitForSubmitted() go func() {
fakeT.length = tc.ret fakeT := lib.waitForSubmitted()
fakeT.status = tc.status fakeT.length = tc.ret
close(fakeT.done) fakeT.status = tc.status
}() close(fakeT.done)
}()
}
got, err := ep.transfer(tc.buf) got, err := ep.transfer(tc.buf)
if (err != nil) != tc.wantErr { 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) 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 { if got != tc.want {
t.Errorf("%s, %s: ep.transfer(...): got %d bytes, want %d", epData.ei, tc.desc, 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)
}
} }
} }
} }

View File

@@ -296,6 +296,11 @@ func (f *fakeLibusb) waitForSubmitted() *fakeTransfer {
return <-f.submitted 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) { func newFakeLibusb() (*fakeLibusb, func() error) {
origLibusb := libusb origLibusb := libusb
fl := &fakeLibusb{ fl := &fakeLibusb{