From 3fbb1bad9fed39cf62520e8e4e95954d0a5232ab Mon Sep 17 00:00:00 2001 From: rahulguptajss Date: Wed, 13 Nov 2024 15:02:53 +0530 Subject: [PATCH] fix: zapi collection --- cmd/poller/poller.go | 13 ++++----- cmd/poller/poller_test.go | 56 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 6 deletions(-) diff --git a/cmd/poller/poller.go b/cmd/poller/poller.go index 7c7a65b6c..a4ec90903 100644 --- a/cmd/poller/poller.go +++ b/cmd/poller/poller.go @@ -301,7 +301,7 @@ func (p *Poller) Init() error { return errs.New(errs.ErrNoCollector, "no collectors") } - p.negotiateONTAPAPI(filteredCollectors) + p.negotiateONTAPAPI(filteredCollectors, collectors.GatherClusterInfo) objectsToCollectors := make(map[string][]objectCollector) for _, c := range filteredCollectors { @@ -1491,7 +1491,7 @@ func (p *Poller) sendHarvestVersion() error { return nil } -func (p *Poller) negotiateONTAPAPI(cols []conf.Collector) { +func (p *Poller) negotiateONTAPAPI(cols []conf.Collector, gatherClusterInfo func(pollerName string, cred *auth.Credentials) (conf.Remote, error)) { anyONTAP := false for _, c := range cols { if _, ok := util.IsONTAPCollector[c.Name]; ok { @@ -1504,15 +1504,16 @@ func (p *Poller) negotiateONTAPAPI(cols []conf.Collector) { return } - remote, err := collectors.GatherClusterInfo(opts.Poller, p.auth) + remote, err := gatherClusterInfo(opts.Poller, p.auth) if err != nil { logger.Error("Failed to gather cluster info", slogx.Err(err)) - return } - slog.Info("Cluster info", slog.Any("remote", remote)) - p.remote = remote + + if remote.Version != "" { + slog.Info("Cluster info", slog.Any("remote", remote)) + } } func startPoller(_ *cobra.Command, _ []string) { diff --git a/cmd/poller/poller_test.go b/cmd/poller/poller_test.go index 813168186..9fadebf52 100644 --- a/cmd/poller/poller_test.go +++ b/cmd/poller/poller_test.go @@ -1,8 +1,10 @@ package main import ( + "errors" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" + "github.com/netapp/harvest/v2/pkg/auth" "github.com/netapp/harvest/v2/pkg/conf" "github.com/netapp/harvest/v2/pkg/tree/node" "strings" @@ -265,3 +267,57 @@ func objectCollectorMap(constructors ...string) map[string][]objectCollector { return objectsToCollectors } + +func TestNegotiateONTAPAPI(t *testing.T) { + + tests := []struct { + name string + collectors []conf.Collector + mockReturn conf.Remote + mockError error + expectedRemote conf.Remote + }{ + { + name: "No ONTAP Collector", + collectors: []conf.Collector{ + {Name: "StorageGrid"}, + }, + mockReturn: conf.Remote{}, + mockError: nil, + expectedRemote: conf.Remote{}, + }, + { + name: "ONTAP Collector with Success", + collectors: []conf.Collector{ + {Name: "Zapi"}, + }, + mockReturn: conf.Remote{Version: "9.11.1"}, + mockError: nil, + expectedRemote: conf.Remote{Version: "9.11.1"}, + }, + { + name: "ONTAP Collector with Error", + collectors: []conf.Collector{ + {Name: "Zapi"}, + }, + mockReturn: conf.Remote{Version: "9.11.1"}, + mockError: errors.New("failed to gather cluster info"), + expectedRemote: conf.Remote{Version: "9.11.1"}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mockGatherClusterInfo := func(_ string, _ *auth.Credentials) (conf.Remote, error) { + return tt.mockReturn, tt.mockError + } + poller := Poller{} + + poller.negotiateONTAPAPI(tt.collectors, mockGatherClusterInfo) + + if diff := cmp.Diff(poller.remote, tt.expectedRemote); diff != "" { + t.Errorf("negotiateONTAPAPI() mismatch (-got +want):\n%s", diff) + } + }) + } +}