Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

61 lines
1.4 KiB

// 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)
}