Add Device.OutEndpoint, simplify endpoint test.
This commit is contained in:
@@ -19,85 +19,88 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// IN bulk endpoint
|
||||
var testBulkInEP = EndpointInfo{
|
||||
Number: 2,
|
||||
Direction: EndpointDirectionIn,
|
||||
MaxPacketSize: 512,
|
||||
TransferType: TransferTypeBulk,
|
||||
}
|
||||
|
||||
var testBulkInSetting = InterfaceSetting{
|
||||
Number: 0,
|
||||
Alternate: 0,
|
||||
Class: ClassVendorSpec,
|
||||
Endpoints: []EndpointInfo{testBulkInEP},
|
||||
}
|
||||
|
||||
// OUT iso endpoint
|
||||
var testIsoOutEP = EndpointInfo{
|
||||
Number: 6,
|
||||
MaxPacketSize: 3 * 1024,
|
||||
TransferType: TransferTypeIsochronous,
|
||||
PollInterval: 125 * time.Microsecond,
|
||||
UsageType: IsoUsageTypeData,
|
||||
}
|
||||
|
||||
var testIsoOutSetting = InterfaceSetting{
|
||||
Number: 0,
|
||||
Alternate: 0,
|
||||
Class: ClassVendorSpec,
|
||||
Endpoints: []EndpointInfo{testIsoOutEP},
|
||||
}
|
||||
|
||||
func TestInEndpoint(t *testing.T) {
|
||||
func TestEndpoint(t *testing.T) {
|
||||
defer func(i libusbIntf) { libusb = i }(libusb)
|
||||
for _, tc := range []struct {
|
||||
desc string
|
||||
buf []byte
|
||||
ret int
|
||||
status TransferStatus
|
||||
want int
|
||||
wantErr bool
|
||||
for _, epData := range []struct {
|
||||
ei EndpointInfo
|
||||
intf InterfaceSetting
|
||||
}{
|
||||
{
|
||||
desc: "empty buffer",
|
||||
buf: nil,
|
||||
ret: 10,
|
||||
want: 0,
|
||||
ei: EndpointInfo{
|
||||
Number: 2,
|
||||
Direction: EndpointDirectionIn,
|
||||
MaxPacketSize: 512,
|
||||
TransferType: TransferTypeBulk,
|
||||
},
|
||||
intf: InterfaceSetting{
|
||||
Number: 0,
|
||||
Alternate: 0,
|
||||
Class: ClassVendorSpec,
|
||||
},
|
||||
},
|
||||
{
|
||||
desc: "128B buffer, 60 transferred",
|
||||
buf: make([]byte, 128),
|
||||
ret: 60,
|
||||
want: 60,
|
||||
},
|
||||
{
|
||||
desc: "128B buffer, 10 transferred and then error",
|
||||
buf: make([]byte, 128),
|
||||
ret: 10,
|
||||
status: TransferError,
|
||||
want: 10,
|
||||
wantErr: true,
|
||||
ei: EndpointInfo{
|
||||
Number: 6,
|
||||
MaxPacketSize: 3 * 1024,
|
||||
TransferType: TransferTypeIsochronous,
|
||||
PollInterval: 125 * time.Microsecond,
|
||||
UsageType: IsoUsageTypeData,
|
||||
},
|
||||
intf: InterfaceSetting{
|
||||
Number: 0,
|
||||
Alternate: 0,
|
||||
Class: ClassVendorSpec,
|
||||
},
|
||||
},
|
||||
} {
|
||||
lib := newFakeLibusb()
|
||||
libusb = lib
|
||||
epData.intf.Endpoints = []EndpointInfo{epData.ei}
|
||||
for _, tc := range []struct {
|
||||
desc string
|
||||
buf []byte
|
||||
ret int
|
||||
status TransferStatus
|
||||
want int
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
desc: "empty buffer",
|
||||
buf: nil,
|
||||
ret: 10,
|
||||
want: 0,
|
||||
},
|
||||
{
|
||||
desc: "128B buffer, 60 transferred",
|
||||
buf: make([]byte, 128),
|
||||
ret: 60,
|
||||
want: 60,
|
||||
},
|
||||
{
|
||||
desc: "128B buffer, 10 transferred and then error",
|
||||
buf: make([]byte, 128),
|
||||
ret: 10,
|
||||
status: TransferError,
|
||||
want: 10,
|
||||
wantErr: true,
|
||||
},
|
||||
} {
|
||||
lib := newFakeLibusb()
|
||||
libusb = lib
|
||||
|
||||
ep := InEndpoint{newEndpoint(nil, testBulkInSetting, testBulkInEP), time.Second}
|
||||
go func() {
|
||||
fakeT := lib.waitForSubmitted()
|
||||
fakeT.length = tc.ret
|
||||
fakeT.status = tc.status
|
||||
close(fakeT.done)
|
||||
}()
|
||||
got, err := ep.Read(tc.buf)
|
||||
if (err != nil) != tc.wantErr {
|
||||
t.Errorf("%s: bulkInEP.Read(): got err: %v, err != nil is %v, want %v", tc.desc, err, err != nil, tc.wantErr)
|
||||
continue
|
||||
}
|
||||
if got != tc.want {
|
||||
t.Errorf("%s: bulkInEP.Read(): got %d bytes, want %d", tc.desc, got, tc.want)
|
||||
ep := newEndpoint(nil, epData.intf, epData.ei)
|
||||
go func() {
|
||||
fakeT := lib.waitForSubmitted()
|
||||
fakeT.length = tc.ret
|
||||
fakeT.status = tc.status
|
||||
close(fakeT.done)
|
||||
}()
|
||||
got, err := ep.transfer(tc.buf, time.Second)
|
||||
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)
|
||||
continue
|
||||
}
|
||||
if got != tc.want {
|
||||
t.Errorf("%s, %s: ep.transfer(...): got %d bytes, want %d", epData.ei, tc.desc, got, tc.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user