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:
@@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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{
|
||||||
|
Reference in New Issue
Block a user