Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2a/3 Update hostmetrics disk scraper to use new perfcounters package #1836

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,41 +19,25 @@ package diskscraper
import (
"context"
"errors"
"runtime"
"testing"

"github.com/shirou/gopsutil/disk"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"go.opentelemetry.io/collector/consumer/pdata"
)

func TestScrapeMetrics_Others(t *testing.T) {
type testCase struct {
name string
bootTimeFunc func() (uint64, error)
ioCountersFunc func(names ...string) (map[string]disk.IOCountersStat, error)
expectedStartTime pdata.TimestampUnixNano
initializationErr string
expectedErr string
name string
ioCountersFunc func(names ...string) (map[string]disk.IOCountersStat, error)
expectedErr string
}

testCases := []testCase{
{
name: "Validate Start Time",
bootTimeFunc: func() (uint64, error) { return 100, nil },
expectedStartTime: 100 * 1e9,
},
{
name: "Boot Time Error",
bootTimeFunc: func() (uint64, error) { return 0, errors.New("err1") },
initializationErr: "err1",
},
{
name: "Error",
ioCountersFunc: func(names ...string) (map[string]disk.IOCountersStat, error) { return nil, errors.New("err2") },
expectedErr: "err2",
ioCountersFunc: func(names ...string) (map[string]disk.IOCountersStat, error) { return nil, errors.New("err1") },
expectedErr: "err1",
},
}

Expand All @@ -62,37 +46,16 @@ func TestScrapeMetrics_Others(t *testing.T) {
scraper, err := newDiskScraper(context.Background(), &Config{})
require.NoError(t, err, "Failed to create disk scraper: %v", err)

if test.bootTimeFunc != nil {
scraper.bootTime = test.bootTimeFunc
}
if test.ioCountersFunc != nil {
scraper.ioCounters = test.ioCountersFunc
}

err = scraper.Initialize(context.Background())
if test.initializationErr != "" {
assert.EqualError(t, err, test.initializationErr)
return
}
require.NoError(t, err, "Failed to initialize disk scraper: %v", err)
defer func() { assert.NoError(t, scraper.Close(context.Background())) }()

metrics, err := scraper.ScrapeMetrics(context.Background())
if test.expectedErr != "" {
assert.EqualError(t, err, test.expectedErr)
return
}

require.NoError(t, err, "Failed to scrape metrics: %v", err)

assertInt64DiskMetricValid(t, metrics.At(0), diskIODescriptor, test.expectedStartTime)
assertInt64DiskMetricValid(t, metrics.At(1), diskOpsDescriptor, test.expectedStartTime)
assertDoubleDiskMetricValid(t, metrics.At(2), diskTimeDescriptor, test.expectedStartTime)
assertDiskPendingOperationsMetricValid(t, metrics.At(3))

if runtime.GOOS == "linux" {
assertInt64DiskMetricValid(t, metrics.At(4), diskMergedDescriptor, test.expectedStartTime)
}
_, err = scraper.ScrapeMetrics(context.Background())
assert.EqualError(t, err, test.expectedErr)
})
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ package diskscraper

import (
"context"
"errors"
"runtime"
"testing"

Expand All @@ -29,17 +30,31 @@ import (

func TestScrapeMetrics(t *testing.T) {
type testCase struct {
name string
config Config
expectMetrics bool
newErrRegex string
name string
config Config
bootTimeFunc func() (uint64, error)
newErrRegex string
initializationErr string
expectMetrics bool
expectedStartTime pdata.TimestampUnixNano
}

testCases := []testCase{
{
name: "Standard",
expectMetrics: true,
},
{
name: "Validate Start Time",
bootTimeFunc: func() (uint64, error) { return 100, nil },
expectMetrics: true,
expectedStartTime: 100 * 1e9,
},
{
name: "Boot Time Error",
bootTimeFunc: func() (uint64, error) { return 0, errors.New("err1") },
initializationErr: "err1",
},
{
name: "Include Filter that matches nothing",
config: Config{Include: MatchConfig{filterset.Config{MatchType: "strict"}, []string{"@*^#&*$^#)"}}},
Expand Down Expand Up @@ -67,7 +82,15 @@ func TestScrapeMetrics(t *testing.T) {
}
require.NoError(t, err, "Failed to create disk scraper: %v", err)

if test.bootTimeFunc != nil {
scraper.bootTime = test.bootTimeFunc
}

err = scraper.Initialize(context.Background())
if test.initializationErr != "" {
assert.EqualError(t, err, test.initializationErr)
return
}
require.NoError(t, err, "Failed to initialize disk scraper: %v", err)
defer func() { assert.NoError(t, scraper.Close(context.Background())) }()

Expand All @@ -81,13 +104,13 @@ func TestScrapeMetrics(t *testing.T) {

assert.GreaterOrEqual(t, metrics.Len(), 4)

assertInt64DiskMetricValid(t, metrics.At(0), diskIODescriptor, 0)
assertInt64DiskMetricValid(t, metrics.At(1), diskOpsDescriptor, 0)
assertDoubleDiskMetricValid(t, metrics.At(2), diskTimeDescriptor, 0)
assertInt64DiskMetricValid(t, metrics.At(0), diskIODescriptor, test.expectedStartTime)
assertInt64DiskMetricValid(t, metrics.At(1), diskOpsDescriptor, test.expectedStartTime)
assertDoubleDiskMetricValid(t, metrics.At(2), diskTimeDescriptor, test.expectedStartTime)
assertDiskPendingOperationsMetricValid(t, metrics.At(3))

if runtime.GOOS == "linux" {
assertInt64DiskMetricValid(t, metrics.At(4), diskMergedDescriptor, 0)
assertInt64DiskMetricValid(t, metrics.At(4), diskMergedDescriptor, test.expectedStartTime)
}

internal.AssertSameTimeStampForAllMetrics(t, metrics)
Expand Down
Loading