// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: BUSL-1.1 package hoststats import ( "math" "os" "testing" "time" "github.com/hashicorp/consul/sdk/testutil" "github.com/shirou/gopsutil/v3/cpu" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestHostStats_CPU(t *testing.T) { logger := testutil.Logger(t) cwd, err := os.Getwd() assert.Nil(t, err) hs := initCollector(logger, cwd) // Collect twice so we can calculate percents we need to generate some work // so that the cpu values change hs.collect() for begin := time.Now(); time.Now().Sub(begin) < 100*time.Millisecond; { } hs.collect() stats := hs.Stats() assert.NotZero(t, len(stats.CPU)) for _, cpu := range stats.CPU { assert.False(t, math.IsNaN(cpu.Idle)) assert.False(t, math.IsNaN(cpu.Total)) assert.False(t, math.IsNaN(cpu.System)) assert.False(t, math.IsNaN(cpu.User)) assert.False(t, math.IsInf(cpu.Idle, 0)) assert.False(t, math.IsInf(cpu.Total, 0)) assert.False(t, math.IsInf(cpu.System, 0)) assert.False(t, math.IsInf(cpu.User, 0)) } } func TestCpuStatsCalculator_Nan(t *testing.T) { times := cpu.TimesStat{ User: 0.0, Idle: 100.0, System: 0.0, } calculator := &cpuStatsCalculator{} calculator.calculate(times) stats := calculator.calculate(times) require.Equal(t, 100.0, stats.Idle) require.Zero(t, stats.User) require.Zero(t, stats.System) require.Zero(t, stats.Iowait) require.Zero(t, stats.Total) }