aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/kylelemons/gousb/usb/transfer_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/kylelemons/gousb/usb/transfer_test.go')
-rw-r--r--vendor/github.com/kylelemons/gousb/usb/transfer_test.go145
1 files changed, 145 insertions, 0 deletions
diff --git a/vendor/github.com/kylelemons/gousb/usb/transfer_test.go b/vendor/github.com/kylelemons/gousb/usb/transfer_test.go
new file mode 100644
index 0000000..4e4fcea
--- /dev/null
+++ b/vendor/github.com/kylelemons/gousb/usb/transfer_test.go
@@ -0,0 +1,145 @@
+// Copyright 2017 the gousb Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package usb
+
+import (
+ "testing"
+ "time"
+)
+
+func TestNewTransfer(t *testing.T) {
+ defer func(i libusbIntf) { libusb = i }(libusb)
+ libusb = newFakeLibusb()
+
+ for _, tc := range []struct {
+ desc string
+ dir EndpointDirection
+ tt TransferType
+ maxPkt uint16
+ maxIso uint32
+ buf int
+ timeout time.Duration
+ wantIso int
+ wantLength int
+ wantTimeout int
+ }{
+ {
+ desc: "bulk in transfer, 512B packets",
+ dir: ENDPOINT_DIR_IN,
+ tt: TRANSFER_TYPE_BULK,
+ maxPkt: 512,
+ buf: 1024,
+ timeout: time.Second,
+ wantLength: 1024,
+ },
+ {
+ desc: "iso out transfer, 3 * 1024B packets",
+ dir: ENDPOINT_DIR_OUT,
+ tt: TRANSFER_TYPE_ISOCHRONOUS,
+ maxPkt: 2<<11 + 1024,
+ maxIso: 3 * 1024,
+ buf: 10000,
+ wantLength: 10000,
+ },
+ } {
+ xfer, err := newUSBTransfer(nil, EndpointInfo{
+ Address: uint8(tc.dir) | 0x02,
+ Attributes: uint8(tc.tt),
+ MaxPacketSize: tc.maxPkt,
+ MaxIsoPacket: tc.maxIso,
+ PollInterval: 1,
+ }, make([]byte, tc.buf), tc.timeout)
+
+ if err != nil {
+ t.Fatalf("newUSBTransfer(): %v", err)
+ }
+ if got, want := len(xfer.buf), tc.wantLength; got != want {
+ t.Errorf("xfer.buf: got %d bytes, want %d", got, want)
+ }
+ }
+}
+
+func TestTransferProtocol(t *testing.T) {
+ defer func(i libusbIntf) { libusb = i }(libusb)
+
+ f := newFakeLibusb()
+ libusb = f
+
+ xfers := make([]*usbTransfer, 2)
+ var err error
+ for i := 0; i < 2; i++ {
+ xfers[i], err = newUSBTransfer(nil, EndpointInfo{
+ Address: 0x86,
+ Attributes: uint8(TRANSFER_TYPE_BULK),
+ MaxPacketSize: 512,
+ PollInterval: 1,
+ }, make([]byte, 10240), time.Second)
+ if err != nil {
+ t.Fatalf("newUSBTransfer: %v", err)
+ }
+ }
+
+ go func() {
+ ft := f.waitForSubmitted()
+ ft.length = 5
+ ft.status = LIBUSB_TRANSFER_COMPLETED
+ copy(ft.buf, []byte{1, 2, 3, 4, 5})
+ close(ft.done)
+
+ ft = f.waitForSubmitted()
+ ft.length = 99
+ ft.status = LIBUSB_TRANSFER_COMPLETED
+ copy(ft.buf, []byte{12, 12, 12, 12, 12})
+ close(ft.done)
+
+ ft = f.waitForSubmitted()
+ ft.length = 123
+ ft.status = LIBUSB_TRANSFER_CANCELLED
+ close(ft.done)
+ }()
+
+ xfers[0].submit()
+ xfers[1].submit()
+ got, err := xfers[0].wait()
+ if err != nil {
+ t.Errorf("xfer#0.wait returned error %v, want nil", err)
+ }
+ if want := 5; got != want {
+ t.Errorf("xfer#0.wait returned %d bytes, want %d", got, want)
+ }
+ got, err = xfers[1].wait()
+ if err != nil {
+ t.Errorf("xfer#0.wait returned error %v, want nil", err)
+ }
+ if want := 99; got != want {
+ t.Errorf("xfer#0.wait returned %d bytes, want %d", got, want)
+ }
+
+ xfers[1].submit()
+ xfers[1].cancel()
+ got, err = xfers[1].wait()
+ if err == nil {
+ t.Error("xfer#1(resubmitted).wait returned error nil, want non-nil")
+ }
+ if want := 123; got != want {
+ t.Errorf("xfer#1(resubmitted).wait returned %d bytes, want %d", got, want)
+ }
+
+ for _, x := range xfers {
+ x.cancel()
+ x.wait()
+ x.free()
+ }
+}