2014-12-30 21:09:05 +08:00
|
|
|
package cpu
|
2014-04-18 15:34:47 +08:00
|
|
|
|
|
|
|
import (
|
2014-05-12 10:51:08 +08:00
|
|
|
"fmt"
|
2014-11-02 11:05:52 +08:00
|
|
|
"runtime"
|
2014-04-18 15:34:47 +08:00
|
|
|
"testing"
|
2014-11-02 11:05:52 +08:00
|
|
|
"time"
|
2014-04-18 15:34:47 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestCpu_times(t *testing.T) {
|
2014-05-23 09:31:47 +08:00
|
|
|
v, err := CPUTimes(false)
|
2014-04-18 15:34:47 +08:00
|
|
|
if err != nil {
|
|
|
|
t.Errorf("error %v", err)
|
|
|
|
}
|
|
|
|
if len(v) == 0 {
|
2014-08-16 01:09:43 +08:00
|
|
|
t.Error("could not get CPUs ", err)
|
2014-04-18 15:34:47 +08:00
|
|
|
}
|
2014-05-23 09:31:47 +08:00
|
|
|
empty := CPUTimesStat{}
|
2014-04-18 15:34:47 +08:00
|
|
|
for _, vv := range v {
|
2014-05-12 10:51:08 +08:00
|
|
|
if vv == empty {
|
2014-04-18 15:34:47 +08:00
|
|
|
t.Errorf("could not get CPU User: %v", vv)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCpu_counts(t *testing.T) {
|
2014-05-23 09:31:47 +08:00
|
|
|
v, err := CPUCounts(true)
|
2014-04-18 15:34:47 +08:00
|
|
|
if err != nil {
|
|
|
|
t.Errorf("error %v", err)
|
|
|
|
}
|
|
|
|
if v == 0 {
|
|
|
|
t.Errorf("could not get CPU counts: %v", v)
|
|
|
|
}
|
|
|
|
}
|
2014-05-12 10:51:08 +08:00
|
|
|
|
|
|
|
func TestCPUTimeStat_String(t *testing.T) {
|
2014-05-23 09:31:47 +08:00
|
|
|
v := CPUTimesStat{
|
2014-05-12 10:51:08 +08:00
|
|
|
CPU: "cpu0",
|
|
|
|
User: 100.1,
|
|
|
|
System: 200.1,
|
|
|
|
Idle: 300.1,
|
|
|
|
}
|
2015-02-13 22:11:27 +08:00
|
|
|
e := `{"cpu":"cpu0","user":100.1,"system":200.1,"idle":300.1,"nice":0.0,"iowait":0.0,"irq":0.0,"softirq":0.0,"steal":0.0,"guest":0.0,"guest_nice":0.0,"stolen":0.0}`
|
2014-05-12 10:51:08 +08:00
|
|
|
if e != fmt.Sprintf("%v", v) {
|
|
|
|
t.Errorf("CPUTimesStat string is invalid: %v", v)
|
|
|
|
}
|
|
|
|
}
|
2014-05-16 17:12:18 +08:00
|
|
|
|
|
|
|
func TestCpuInfo(t *testing.T) {
|
2014-05-23 09:31:47 +08:00
|
|
|
v, err := CPUInfo()
|
2014-05-16 17:12:18 +08:00
|
|
|
if err != nil {
|
|
|
|
t.Errorf("error %v", err)
|
|
|
|
}
|
2015-02-15 20:25:33 +08:00
|
|
|
if len(v) == 0 {
|
|
|
|
t.Errorf("could not get CPU Info")
|
|
|
|
}
|
2014-05-16 17:12:18 +08:00
|
|
|
for _, vv := range v {
|
2014-05-16 17:39:17 +08:00
|
|
|
if vv.ModelName == "" {
|
2014-05-16 17:12:18 +08:00
|
|
|
t.Errorf("could not get CPU Info: %v", vv)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2014-11-02 11:05:52 +08:00
|
|
|
|
|
|
|
func testCPUPercent(t *testing.T, percpu bool) {
|
|
|
|
numcpu := runtime.NumCPU()
|
2015-03-11 22:00:06 +08:00
|
|
|
testCount := 3
|
|
|
|
|
2015-03-07 20:52:43 +08:00
|
|
|
if runtime.GOOS != "windows" {
|
2015-03-11 22:00:06 +08:00
|
|
|
testCount = 100
|
2015-03-07 20:52:43 +08:00
|
|
|
v, err := CPUPercent(time.Millisecond, percpu)
|
|
|
|
if err != nil {
|
|
|
|
t.Errorf("error %v", err)
|
|
|
|
}
|
|
|
|
if (percpu && len(v) != numcpu) || (!percpu && len(v) != 1) {
|
|
|
|
t.Fatalf("wrong number of entries from CPUPercent: %v", v)
|
|
|
|
}
|
2014-11-02 11:05:52 +08:00
|
|
|
}
|
2015-03-11 22:00:06 +08:00
|
|
|
for i := 0; i < testCount; i++ {
|
2014-11-12 10:17:55 +08:00
|
|
|
duration := time.Duration(10) * time.Microsecond
|
|
|
|
v, err := CPUPercent(duration, percpu)
|
2014-11-02 11:05:52 +08:00
|
|
|
if err != nil {
|
|
|
|
t.Errorf("error %v", err)
|
|
|
|
}
|
|
|
|
for _, percent := range v {
|
2015-02-13 21:45:12 +08:00
|
|
|
if percent < 0.0 || percent > 100.0*float64(numcpu) {
|
2014-11-02 11:05:52 +08:00
|
|
|
t.Fatalf("CPUPercent value is invalid: %f", percent)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCPUPercent(t *testing.T) {
|
|
|
|
testCPUPercent(t, false)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCPUPercentPerCpu(t *testing.T) {
|
|
|
|
testCPUPercent(t, true)
|
|
|
|
}
|