1package host 2 3import ( 4 "fmt" 5 "os" 6 "sync" 7 "testing" 8 9 "github.com/shirou/gopsutil/internal/common" 10) 11 12func skipIfNotImplementedErr(t *testing.T, err error) { 13 if err == common.ErrNotImplementedError { 14 t.Skip("not implemented") 15 } 16} 17 18func TestHostInfo(t *testing.T) { 19 v, err := Info() 20 skipIfNotImplementedErr(t, err) 21 if err != nil { 22 t.Errorf("error %v", err) 23 } 24 empty := &InfoStat{} 25 if v == empty { 26 t.Errorf("Could not get hostinfo %v", v) 27 } 28 if v.Procs == 0 { 29 t.Errorf("Could not determine the number of host processes") 30 } 31} 32 33func TestUptime(t *testing.T) { 34 if os.Getenv("CIRCLECI") == "true" { 35 t.Skip("Skip CI") 36 } 37 38 v, err := Uptime() 39 skipIfNotImplementedErr(t, err) 40 if err != nil { 41 t.Errorf("error %v", err) 42 } 43 if v == 0 { 44 t.Errorf("Could not get up time %v", v) 45 } 46} 47 48func TestBoot_time(t *testing.T) { 49 if os.Getenv("CIRCLECI") == "true" { 50 t.Skip("Skip CI") 51 } 52 v, err := BootTime() 53 skipIfNotImplementedErr(t, err) 54 if err != nil { 55 t.Errorf("error %v", err) 56 } 57 if v == 0 { 58 t.Errorf("Could not get boot time %v", v) 59 } 60 if v < 946652400 { 61 t.Errorf("Invalid Boottime, older than 2000-01-01") 62 } 63 t.Logf("first boot time: %d", v) 64 65 v2, err := BootTime() 66 skipIfNotImplementedErr(t, err) 67 if err != nil { 68 t.Errorf("error %v", err) 69 } 70 if v != v2 { 71 t.Errorf("cached boot time is different") 72 } 73 t.Logf("second boot time: %d", v2) 74} 75 76func TestUsers(t *testing.T) { 77 v, err := Users() 78 skipIfNotImplementedErr(t, err) 79 if err != nil { 80 t.Errorf("error %v", err) 81 } 82 empty := UserStat{} 83 if len(v) == 0 { 84 t.Skip("Users is empty") 85 } 86 for _, u := range v { 87 if u == empty { 88 t.Errorf("Could not Users %v", v) 89 } 90 } 91} 92 93func TestHostInfoStat_String(t *testing.T) { 94 v := InfoStat{ 95 Hostname: "test", 96 Uptime: 3000, 97 Procs: 100, 98 OS: "linux", 99 Platform: "ubuntu", 100 BootTime: 1447040000, 101 HostID: "edfd25ff-3c9c-b1a4-e660-bd826495ad35", 102 KernelArch: "x86_64", 103 } 104 e := `{"hostname":"test","uptime":3000,"bootTime":1447040000,"procs":100,"os":"linux","platform":"ubuntu","platformFamily":"","platformVersion":"","kernelVersion":"","kernelArch":"x86_64","virtualizationSystem":"","virtualizationRole":"","hostid":"edfd25ff-3c9c-b1a4-e660-bd826495ad35"}` 105 if e != fmt.Sprintf("%v", v) { 106 t.Errorf("HostInfoStat string is invalid:\ngot %v\nwant %v", v, e) 107 } 108} 109 110func TestUserStat_String(t *testing.T) { 111 v := UserStat{ 112 User: "user", 113 Terminal: "term", 114 Host: "host", 115 Started: 100, 116 } 117 e := `{"user":"user","terminal":"term","host":"host","started":100}` 118 if e != fmt.Sprintf("%v", v) { 119 t.Errorf("UserStat string is invalid: %v", v) 120 } 121} 122 123func TestHostGuid(t *testing.T) { 124 id, err := HostID() 125 skipIfNotImplementedErr(t, err) 126 if err != nil { 127 t.Error(err) 128 } 129 if id == "" { 130 t.Error("Host id is empty") 131 } else { 132 t.Logf("Host id value: %v", id) 133 } 134} 135 136func TestTemperatureStat_String(t *testing.T) { 137 v := TemperatureStat{ 138 SensorKey: "CPU", 139 Temperature: 1.1, 140 } 141 s := `{"sensorKey":"CPU","sensorTemperature":1.1}` 142 if s != fmt.Sprintf("%v", v) { 143 t.Errorf("TemperatureStat string is invalid") 144 } 145} 146 147func TestVirtualization(t *testing.T) { 148 wg := sync.WaitGroup{} 149 testCount := 10 150 wg.Add(testCount) 151 for i := 0; i < testCount; i++ { 152 go func(j int) { 153 system, role, err := Virtualization() 154 wg.Done() 155 skipIfNotImplementedErr(t, err) 156 if err != nil { 157 t.Errorf("Virtualization() failed, %v", err) 158 } 159 160 if j == 9 { 161 t.Logf("Virtualization(): %s, %s", system, role) 162 } 163 }(i) 164 } 165 wg.Wait() 166} 167 168func TestKernelVersion(t *testing.T) { 169 version, err := KernelVersion() 170 skipIfNotImplementedErr(t, err) 171 if err != nil { 172 t.Errorf("KernelVersion() failed, %v", err) 173 } 174 if version == "" { 175 t.Errorf("KernelVersion() returns empty: %s", version) 176 } 177 178 t.Logf("KernelVersion(): %s", version) 179} 180 181func TestPlatformInformation(t *testing.T) { 182 platform, family, version, err := PlatformInformation() 183 skipIfNotImplementedErr(t, err) 184 if err != nil { 185 t.Errorf("PlatformInformation() failed, %v", err) 186 } 187 if platform == "" { 188 t.Errorf("PlatformInformation() returns empty: %v", platform) 189 } 190 191 t.Logf("PlatformInformation(): %v, %v, %v", platform, family, version) 192} 193