diff --git a/enumerator/usb_windows_test.go b/enumerator/usb_windows_test.go index 3d39e0a..adb6370 100644 --- a/enumerator/usb_windows_test.go +++ b/enumerator/usb_windows_test.go @@ -8,8 +8,6 @@ package enumerator import ( "testing" - - "github.com/stretchr/testify/require" ) func parseAndReturnDeviceID(deviceID string) *PortDetails { @@ -19,31 +17,57 @@ func parseAndReturnDeviceID(deviceID string) *PortDetails { } func TestParseDeviceID(t *testing.T) { - r := require.New(t) - test := func(deviceId, vid, pid, serialNo string) { - res := parseAndReturnDeviceID(deviceId) - r.True(res.IsUSB) - r.Equal(vid, res.VID) - r.Equal(pid, res.PID) - r.Equal(serialNo, res.SerialNumber) + tests := []struct { + name string + deviceID string + vid string + pid string + serialNo string + }{ + {name: "FTDI FT232", deviceID: "FTDIBUS\\VID_0403+PID_6001+A6004CCFA\\0000", vid: "0403", pid: "6001", serialNo: "A6004CCFA"}, + {name: "Teensy USB serial", deviceID: "USB\\VID_16C0&PID_0483\\12345", vid: "16C0", pid: "0483", serialNo: "12345"}, + {name: "Arduino with serial number", deviceID: "USB\\VID_2341&PID_0000\\64936333936351400000", vid: "2341", pid: "0000", serialNo: "64936333936351400000"}, + {name: "Arduino with different serial number", deviceID: "USB\\VID_2341&PID_0000\\6493234373835191F1F1", vid: "2341", pid: "0000", serialNo: "6493234373835191F1F1"}, + {name: "Arduino MKR composite", deviceID: "USB\\VID_2341&PID_804E&MI_00\\6&279A3900&0&0000", vid: "2341", pid: "804E", serialNo: ""}, + {name: "Arduino MKR1000 bootloader", deviceID: "USB\\VID_2341&PID_004E\\5&C3DC240&0&1", vid: "2341", pid: "004E", serialNo: ""}, + {name: "Atmel EDBG debugger", deviceID: "USB\\VID_03EB&PID_2111&MI_01\\6&21F3553F&0&0001", vid: "03EB", pid: "2111", serialNo: ""}, + {name: "Arduino Zero composite", deviceID: "USB\\VID_2341&PID_804D&MI_00\\6&1026E213&0&0000", vid: "2341", pid: "804D", serialNo: ""}, + {name: "Arduino Zero bootloader", deviceID: "USB\\VID_2341&PID_004D\\5&C3DC240&0&1", vid: "2341", pid: "004D", serialNo: ""}, + {name: "Prolific PL2303", deviceID: "USB\\VID_067B&PID_2303\\6&2C4CB384&0&3", vid: "067B", pid: "2303", serialNo: ""}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + res := parseAndReturnDeviceID(tt.deviceID) + if !res.IsUSB { + t.Fatal("expected IsUSB to be true") + } + if res.VID != tt.vid { + t.Errorf("VID: got %q, expected %q", res.VID, tt.vid) + } + if res.PID != tt.pid { + t.Errorf("PID: got %q, expected %q", res.PID, tt.pid) + } + if res.SerialNumber != tt.serialNo { + t.Errorf("SerialNumber: got %q, expected %q", res.SerialNumber, tt.serialNo) + } + }) } - - test("FTDIBUS\\VID_0403+PID_6001+A6004CCFA\\0000", "0403", "6001", "A6004CCFA") - test("USB\\VID_16C0&PID_0483\\12345", "16C0", "0483", "12345") - test("USB\\VID_2341&PID_0000\\64936333936351400000", "2341", "0000", "64936333936351400000") - test("USB\\VID_2341&PID_0000\\6493234373835191F1F1", "2341", "0000", "6493234373835191F1F1") - test("USB\\VID_2341&PID_804E&MI_00\\6&279A3900&0&0000", "2341", "804E", "") - test("USB\\VID_2341&PID_004E\\5&C3DC240&0&1", "2341", "004E", "") - test("USB\\VID_03EB&PID_2111&MI_01\\6&21F3553F&0&0001", "03EB", "2111", "") // Atmel EDBG - test("USB\\VID_2341&PID_804D&MI_00\\6&1026E213&0&0000", "2341", "804D", "") - test("USB\\VID_2341&PID_004D\\5&C3DC240&0&1", "2341", "004D", "") - test("USB\\VID_067B&PID_2303\\6&2C4CB384&0&3", "067B", "2303", "") // PL2303 } func TestParseDeviceIDWithInvalidStrings(t *testing.T) { - r := require.New(t) - res := parseAndReturnDeviceID("ABC") - r.False(res.IsUSB) - res2 := parseAndReturnDeviceID("USB") - r.False(res2.IsUSB) + tests := []struct { + name string + deviceID string + }{ + {name: "unrecognized prefix", deviceID: "ABC"}, + {name: "USB prefix without fields", deviceID: "USB"}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + res := parseAndReturnDeviceID(tt.deviceID) + if res.IsUSB { + t.Fatal("expected IsUSB to be false") + } + }) + } } diff --git a/go.mod b/go.mod index 7513460..b81c73b 100644 --- a/go.mod +++ b/go.mod @@ -1,14 +1,5 @@ module go.bug.st/serial -go 1.17 +go 1.26.0 -require ( - github.com/stretchr/testify v1.8.4 - golang.org/x/sys v0.19.0 -) - -require ( - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -) +require golang.org/x/sys v0.43.0 diff --git a/go.sum b/go.sum index 239af81..71016e3 100644 --- a/go.sum +++ b/go.sum @@ -1,19 +1,2 @@ -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= diff --git a/serial_linux_test.go b/serial_linux_test.go index 4a76fbe..701430a 100644 --- a/serial_linux_test.go +++ b/serial_linux_test.go @@ -14,21 +14,25 @@ import ( "os/exec" "testing" "time" - - "github.com/stretchr/testify/require" ) func startSocatAndWaitForPort(t *testing.T, ctx context.Context) *exec.Cmd { + t.Helper() cmd := exec.CommandContext(ctx, "socat", "-D", "STDIO", "pty,link=/tmp/faketty") r, err := cmd.StderrPipe() - require.NoError(t, err) - require.NoError(t, cmd.Start()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if err := cmd.Start(); err != nil { + t.Fatalf("unexpected error: %v", err) + } // Let our fake serial port node appear. // socat will write to stderr before starting transfer phase; // we don't really care what, just that it did, because then it's ready. buf := make([]byte, 1024) - _, err = r.Read(buf) - require.NoError(t, err) + if _, err = r.Read(buf); err != nil { + t.Fatalf("unexpected error: %v", err) + } return cmd } @@ -43,7 +47,9 @@ func TestSerialReadAndCloseConcurrency(t *testing.T) { go cmd.Wait() port, err := Open("/tmp/faketty", &Mode{}) - require.NoError(t, err) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } buf := make([]byte, 100) go port.Read(buf) // let port.Read to start @@ -58,7 +64,13 @@ func TestDoubleCloseIsNoop(t *testing.T) { go cmd.Wait() port, err := Open("/tmp/faketty", &Mode{}) - require.NoError(t, err) - require.NoError(t, port.Close()) - require.NoError(t, port.Close()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if err := port.Close(); err != nil { + t.Fatalf("unexpected error: %v", err) + } + if err := port.Close(); err != nil { + t.Fatalf("unexpected error: %v", err) + } }