Skip to content

Commit 289102f

Browse files
authored
bug: fix nil check in host collector filter (#1653)
* add nil check in filter host collector
1 parent 77fd7da commit 289102f

File tree

2 files changed

+50
-5
lines changed

2 files changed

+50
-5
lines changed

pkg/supportbundle/collect.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,6 @@ func collectHost(ctx context.Context, filteredCollectors []FilteredCollector, op
290290
if err != nil {
291291
span.SetStatus(codes.Error, err.Error())
292292
opts.ProgressChan <- fmt.Sprintf("[%s] Error: %v", collector.Title(), err)
293-
return errors.Wrap(err, "failed to run host collector")
294293
}
295294

296295
// Send progress event: completed successfully
@@ -332,13 +331,14 @@ func filterHostCollectors(ctx context.Context, collectSpecs []*troubleshootv1bet
332331

333332
for _, desiredCollector := range collectSpecs {
334333
collector, ok := collect.GetHostCollector(desiredCollector, bundlePath)
335-
_, span := otel.Tracer(constants.LIB_TRACER_NAME).Start(ctx, collector.Title())
336-
span.SetAttributes(attribute.String("type", reflect.TypeOf(collector).String()))
337-
338334
if !ok {
339-
return nil, collect.ErrHostCollectorNotFound
335+
opts.ProgressChan <- "Host collector not found"
336+
continue
340337
}
341338

339+
_, span := otel.Tracer(constants.LIB_TRACER_NAME).Start(ctx, collector.Title())
340+
span.SetAttributes(attribute.String("type", reflect.TypeOf(collector).String()))
341+
342342
isExcluded, _ := collector.IsExcluded()
343343
if isExcluded {
344344
opts.ProgressChan <- fmt.Sprintf("[%s] Excluding host collector", collector.Title())

pkg/supportbundle/collect_test.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package supportbundle
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
v1beta2 "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta2"
8+
"go.opentelemetry.io/otel"
9+
"go.opentelemetry.io/otel/trace/noop"
10+
)
11+
12+
func Test_filterHostCollectors(t *testing.T) {
13+
otel.SetTracerProvider(noop.NewTracerProvider())
14+
15+
testCases := []struct {
16+
name string
17+
collectSpecs []*v1beta2.HostCollect
18+
bundlePath string
19+
opts SupportBundleCreateOpts
20+
expectedResult []FilteredCollector
21+
expectedError error
22+
}{
23+
{
24+
name: "nil host collectors spec",
25+
collectSpecs: []*v1beta2.HostCollect{},
26+
bundlePath: "/tmp",
27+
opts: SupportBundleCreateOpts{
28+
ProgressChan: make(chan interface{}, 10),
29+
},
30+
expectedResult: []FilteredCollector{},
31+
expectedError: nil,
32+
},
33+
}
34+
for _, tc := range testCases {
35+
t.Run(tc.name, func(t *testing.T) {
36+
filtered, err := filterHostCollectors(context.TODO(), tc.collectSpecs, tc.bundlePath, tc.opts)
37+
if err != tc.expectedError {
38+
t.Fatalf("expected error %v, got %v", tc.expectedError, err)
39+
}
40+
if len(filtered) != len(tc.expectedResult) {
41+
t.Fatalf("expected %d filtered collectors, got %d", len(tc.expectedResult), len(filtered))
42+
}
43+
})
44+
}
45+
}

0 commit comments

Comments
 (0)