From 36e0b70df5577675baa4e0daae8a82dd02d6aee1 Mon Sep 17 00:00:00 2001 From: steiler Date: Tue, 6 Jun 2023 15:08:30 +0200 Subject: [PATCH 1/3] check commands len return early if == 0 --- driver/generic/sendcommands.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/driver/generic/sendcommands.go b/driver/generic/sendcommands.go index 97c4f3a..34e8676 100644 --- a/driver/generic/sendcommands.go +++ b/driver/generic/sendcommands.go @@ -19,6 +19,10 @@ func (d *Driver) SendCommands( m := response.NewMultiResponse(d.Transport.GetHost()) + if len(commands) == 0 { + return m, err + } + for _, input := range commands[:len(commands)-1] { var r *response.Response From 3cfc1f70b87bc3210472489163a427c8d871d449 Mon Sep 17 00:00:00 2001 From: Carl Montanari Date: Fri, 9 Jun 2023 15:09:15 -0700 Subject: [PATCH 2/3] refactor: return ErrNoOp if commands/configs is len 0 --- .golangci.yaml | 1 - driver/generic/sendcommands.go | 6 ++++++ driver/generic/sendcommands_test.go | 13 +++++++++++++ util/errors.go | 3 +++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/.golangci.yaml b/.golangci.yaml index d4eee2d..eb5b230 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -25,7 +25,6 @@ linters: - asciicheck - bodyclose - decorder - - depguard - dogsled - dupl - dupword diff --git a/driver/generic/sendcommands.go b/driver/generic/sendcommands.go index 34e8676..c08f104 100644 --- a/driver/generic/sendcommands.go +++ b/driver/generic/sendcommands.go @@ -1,6 +1,8 @@ package generic import ( + "fmt" + "github.com/scrapli/scrapligo/response" "github.com/scrapli/scrapligo/util" ) @@ -12,6 +14,10 @@ func (d *Driver) SendCommands( ) (*response.MultiResponse, error) { d.Logger.Infof("SendCommands requested, sending '%s'", commands) + if len(commands) == 0 { + return nil, fmt.Errorf("%w: no commands provided", util.ErrNoOp) + } + op, err := NewOperation(opts...) if err != nil { return nil, err diff --git a/driver/generic/sendcommands_test.go b/driver/generic/sendcommands_test.go index 114514d..b71feea 100644 --- a/driver/generic/sendcommands_test.go +++ b/driver/generic/sendcommands_test.go @@ -162,3 +162,16 @@ func TestSendCommandsFromFile(t *testing.T) { t.Run(testName, f) } } + +func TestSendCommandsNoOp(t *testing.T) { + testName := "send-commands-no-op" + + t.Logf("%s: starting", testName) + + d, _ := prepareDriver(t, testName, "send-commands-simple.txt") + + _, err := d.SendCommands(nil) + if err == nil { + t.Fatalf("no-op send commands did not return ErrNoOp") + } +} diff --git a/util/errors.go b/util/errors.go index 9e6b08d..894a42f 100644 --- a/util/errors.go +++ b/util/errors.go @@ -27,4 +27,7 @@ var ( ErrNetconfError = errors.New("errNetconfError") // ErrOperationError is returned for any "operation" issues -- mostly meaning ops timeouts. ErrOperationError = errors.New("errOperationError") + // ErrNoOp is an error returned when a "no op" event happens -- that is a SendCommands or + // SendConfigs method is called with an empty command/config slice provided. + ErrNoOp = errors.New("errNoOp") ) From f99da3be7f7f5ad4293592cc5b698ddd8fef0c45 Mon Sep 17 00:00:00 2001 From: Carl Montanari Date: Sat, 10 Jun 2023 09:35:29 -0700 Subject: [PATCH 3/3] fix: remove unnecessary cmd len check --- driver/generic/sendcommands.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/driver/generic/sendcommands.go b/driver/generic/sendcommands.go index c08f104..07210dd 100644 --- a/driver/generic/sendcommands.go +++ b/driver/generic/sendcommands.go @@ -15,7 +15,7 @@ func (d *Driver) SendCommands( d.Logger.Infof("SendCommands requested, sending '%s'", commands) if len(commands) == 0 { - return nil, fmt.Errorf("%w: no commands provided", util.ErrNoOp) + return nil, fmt.Errorf("%w: no inputs provided", util.ErrNoOp) } op, err := NewOperation(opts...) @@ -25,10 +25,6 @@ func (d *Driver) SendCommands( m := response.NewMultiResponse(d.Transport.GetHost()) - if len(commands) == 0 { - return m, err - } - for _, input := range commands[:len(commands)-1] { var r *response.Response