From a5758f28ef684c5aea0496826b59bc4642aa0a22 Mon Sep 17 00:00:00 2001 From: Sebastien Binet <binet@cern.ch> Date: Mon, 2 Mar 2020 10:47:43 +0100 Subject: [PATCH] dif: improve doc strings & Readout test coverage --- dif/readout.go | 4 ++- dif/readout_test.go | 72 ++++++++++++++++++++++++++++++++++++++------- 2 files changed, 64 insertions(+), 12 deletions(-) diff --git a/dif/readout.go b/dif/readout.go index aa25b87..7e89d35 100644 --- a/dif/readout.go +++ b/dif/readout.go @@ -21,6 +21,7 @@ const ( hardrocASIC asicKind = 2 ) +// Readout reads data out of a digital interface board (DIF). type Readout struct { msg log.MsgStream dev *device @@ -40,6 +41,7 @@ type Readout struct { temp [2]float32 // temperatures } +// NewReadout creates a new DIF readout. func NewReadout(name string, prodID uint32, msg log.MsgStream) (*Readout, error) { dev, err := newDevice(0x0403, uint16(prodID)) if err != nil { @@ -59,7 +61,7 @@ func NewReadout(name string, prodID uint32, msg log.MsgStream) (*Readout, error) rdo.reg.pd2daq = 0x4e rdo.reg.daq2pd = 0x4e rdo.reg.pd2pa = 0x4e - _, err = fmt.Sscanf(name, "FT101%d", &rdo.difID) + _, err = fmt.Sscanf(name, "FT101%03d", &rdo.difID) if err != nil { _ = dev.close() return nil, xerrors.Errorf("could not find DIF-id from %q: %w", name, err) diff --git a/dif/readout_test.go b/dif/readout_test.go index 8fe7391..bc6f9c2 100644 --- a/dif/readout_test.go +++ b/dif/readout_test.go @@ -8,6 +8,7 @@ import ( "bytes" "io" "os" + "strings" "testing" "github.com/go-daq/tdaq/log" @@ -25,17 +26,46 @@ func TestReadout(t *testing.T) { ftdiOpen = ftdiOpenImpl }() - { - const name = "FT101xxx" - rdo, err := NewReadout(name, 0x6014, nil) - if err == nil { - rdo.close() - t.Fatalf("expected an error") - } - want := xerrors.Errorf("could not find DIF-id from %q: %s", name, xerrors.New("expected integer")) - if got, want := err.Error(), want.Error(); got != want { - t.Fatalf("invalid error:\ngot= %v\nwant=%v", got, want) - } + for _, tc := range []struct { + name string + err error + id uint32 + }{ + { + name: "FT101xxx", + err: xerrors.Errorf("could not find DIF-id from %q: %s", "FT101xxx", xerrors.New("expected integer")), + }, + { + name: "FT101", + err: xerrors.Errorf("could not find DIF-id from %q: %s", "FT101", io.EOF), + }, + { + name: "FT10142", + id: 42, + }, + { + name: "FT101042", + id: 42, + }, + } { + t.Run(tc.name, func(t *testing.T) { + rdo, err := NewReadout(tc.name, 0x6014, nil) + if err == nil && tc.err != nil { + rdo.close() + t.Fatalf("expected an error") + } + switch { + case tc.err != nil: + if got, want := err.Error(), tc.err.Error(); got != want { + t.Fatalf("invalid error:\ngot= %v\nwant=%v", got, want) + } + default: + defer rdo.close() + if rdo.difID != tc.id { + t.Fatalf("invalid DIF-id: got=%d, want=%d", rdo.difID, tc.id) + } + } + }) } const ( @@ -47,6 +77,9 @@ func TestReadout(t *testing.T) { if err != nil { t.Fatalf("could not create readout: %+v", err) } + if got, want := rdo.difID, uint32(42); got != want { + t.Fatalf("invalid DIF-ID: got=%d, want=%d", got, want) + } err = rdo.configureRegisters() if err != nil { @@ -121,6 +154,23 @@ func TestReadout(t *testing.T) { } } +func TestInvalidReadout(t *testing.T) { + want := xerrors.Errorf("no such device") + ftdiOpen = func(vid, pid uint16) (ftdiDevice, error) { return nil, want } + defer func() { + ftdiOpen = ftdiOpenImpl + }() + + rdo, err := NewReadout("FT101042", 0x6014, nil) + if err == nil { + _ = rdo.close() + t.Fatalf("expected an error, got=%v", err) + } + if got, want := err.Error(), want.Error(); !strings.Contains(got, want) { + t.Fatalf("invalid error.\ngot= %v\nwant=%v\n", got, want) + } +} + type fakeDevice struct { buf io.ReadWriter } -- GitLab