pkg.re/essentialkaos/ek@v12.36.0+incompatible/system/info_test.go (about) 1 // +build linux 2 3 package system 4 5 // ////////////////////////////////////////////////////////////////////////////////// // 6 // // 7 // Copyright (c) 2021 ESSENTIAL KAOS // 8 // Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0> // 9 // // 10 // ////////////////////////////////////////////////////////////////////////////////// // 11 12 import ( 13 "io/ioutil" 14 "os" 15 "strconv" 16 "strings" 17 "testing" 18 "time" 19 20 . "pkg.re/essentialkaos/check.v1" 21 ) 22 23 // ////////////////////////////////////////////////////////////////////////////////// // 24 25 func Test(t *testing.T) { TestingT(t) } 26 27 type SystemSuite struct{} 28 29 // ////////////////////////////////////////////////////////////////////////////////// // 30 31 var _ = Suite(&SystemSuite{}) 32 33 // ////////////////////////////////////////////////////////////////////////////////// // 34 35 func (s *SystemSuite) TestUptime(c *C) { 36 uptime, err := GetUptime() 37 38 c.Assert(err, IsNil) 39 c.Assert(uptime, Not(Equals), 0) 40 41 procUptimeFile = "" 42 43 uptime, err = GetUptime() 44 45 c.Assert(err, NotNil) 46 c.Assert(uptime, Equals, uint64(0)) 47 48 procUptimeFile = s.CreateTestFile(c, "CORRUPTED") 49 50 uptime, err = GetUptime() 51 52 c.Assert(err, NotNil) 53 c.Assert(uptime, Equals, uint64(0)) 54 } 55 56 func (s *SystemSuite) TestLoadAvg(c *C) { 57 la, err := GetLA() 58 59 c.Assert(err, IsNil) 60 c.Assert(la, NotNil) 61 62 procLoadAvgFile = s.CreateTestFile(c, "1.15 2.25 3.35 5/234 16354") 63 64 la, err = GetLA() 65 66 c.Assert(err, IsNil) 67 c.Assert(la, NotNil) 68 69 c.Assert(la.Min1, Equals, 1.15) 70 c.Assert(la.Min5, Equals, 2.25) 71 c.Assert(la.Min15, Equals, 3.35) 72 c.Assert(la.RProc, Equals, 5) 73 c.Assert(la.TProc, Equals, 234) 74 75 procLoadAvgFile = "" 76 77 la, err = GetLA() 78 79 c.Assert(err, NotNil) 80 c.Assert(la, IsNil) 81 82 procLoadAvgFile = s.CreateTestFile(c, "CORRUPTED") 83 84 la, err = GetLA() 85 86 c.Assert(err, NotNil) 87 c.Assert(la, IsNil) 88 89 procLoadAvgFile = s.CreateTestFile(c, "1.15 2.25 3.35 5+234 16354") 90 91 la, err = GetLA() 92 93 c.Assert(err, NotNil) 94 c.Assert(la, IsNil) 95 } 96 97 func (s *SystemSuite) TestCPUUsage(c *C) { 98 cpu, err := GetCPUStats() 99 100 c.Assert(err, IsNil) 101 c.Assert(cpu, NotNil) 102 103 procStatFile = s.CreateTestFile(c, "cpu 10 11 12 13 14 15 16 17 0\ncpu0 0 0 0 0 0 0 0 0 0\ncpu1 0 0 0 0 0 0 0 0 0\n") 104 105 cpu, err = GetCPUStats() 106 107 c.Assert(err, IsNil) 108 c.Assert(cpu, NotNil) 109 c.Assert(cpu.Count, Equals, 2) 110 c.Assert(cpu.User, Equals, uint64(10)) 111 c.Assert(cpu.Nice, Equals, uint64(11)) 112 c.Assert(cpu.System, Equals, uint64(12)) 113 c.Assert(cpu.Idle, Equals, uint64(13)) 114 c.Assert(cpu.Wait, Equals, uint64(14)) 115 c.Assert(cpu.IRQ, Equals, uint64(15)) 116 c.Assert(cpu.SRQ, Equals, uint64(16)) 117 c.Assert(cpu.Steal, Equals, uint64(17)) 118 119 usage, err := GetCPUUsage(time.Millisecond) 120 121 c.Assert(err, IsNil) 122 c.Assert(usage, NotNil) 123 124 c1 := &CPUStats{10, 10, 10, 2, 2, 2, 2, 0, 34, 32} 125 c2 := &CPUStats{12, 12, 12, 3, 3, 3, 3, 0, 48, 32} 126 127 cpuInfo := CalculateCPUUsage(c1, c2) 128 129 c.Assert(cpuInfo, NotNil) 130 c.Assert(cpuInfo.System, Equals, 14.285714285714285) 131 c.Assert(cpuInfo.User, Equals, 14.285714285714285) 132 c.Assert(cpuInfo.Nice, Equals, 14.285714285714285) 133 c.Assert(cpuInfo.Wait, Equals, 7.142857142857142) 134 c.Assert(cpuInfo.Idle, Equals, 7.142857142857142) 135 c.Assert(cpuInfo.Average, Equals, 80.0) 136 c.Assert(cpuInfo.Count, Equals, 32) 137 138 procStatFile = "" 139 140 cpu, err = GetCPUStats() 141 142 c.Assert(err, NotNil) 143 c.Assert(cpu, IsNil) 144 145 procStatFile = s.CreateTestFile(c, "CORRUPTED") 146 147 cpu, err = GetCPUStats() 148 149 c.Assert(err, NotNil) 150 c.Assert(cpu, IsNil) 151 152 procStatFile = "/proc/stat" 153 } 154 155 func (s *SystemSuite) TestCPUInfoErrors(c *C) { 156 for i := 1; i <= 8; i++ { 157 data := strings.Replace("cpu 1 2 3 4 5 6 7 8 0", strconv.Itoa(i), "AB", -1) 158 159 procStatFile = s.CreateTestFile(c, data) 160 161 cpu, err := GetCPUStats() 162 163 c.Assert(err, NotNil) 164 c.Assert(cpu, IsNil) 165 } 166 167 procStatFile = "/proc/stat" 168 } 169 170 func (s *SystemSuite) TestCPUInfo(c *C) { 171 cpuInfoFile = s.CreateTestFile(c, "vendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1204.199\ncache size : 15360 KB\nphysical id : 0\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1199.908\ncache size : 15360 KB\nphysical id : 0\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1199.908\ncache size : 15360 KB\nphysical id : 0\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1199.908\ncache size : 15360 KB\nphysical id : 0\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1199.908\ncache size : 15360 KB\nphysical id : 0\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1199.792\ncache size : 15360 KB\nphysical id : 0\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1206.634\ncache size : 15360 KB\nphysical id : 1\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1281.085\ncache size : 15360 KB\nphysical id : 1\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1273.431\ncache size : 15360 KB\nphysical id : 1\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1199.908\ncache size : 15360 KB\nphysical id : 1\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1273.199\ncache size : 15360 KB\nphysical id : 1\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1200.024\ncache size : 15360 KB\nphysical id : 1\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1260.443\ncache size : 15360 KB\nphysical id : 0\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1195.385\ncache size : 15360 KB\nphysical id : 0\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1259.283\ncache size : 15360 KB\nphysical id : 0\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1199.908\ncache size : 15360 KB\nphysical id : 0\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1199.908\ncache size : 15360 KB\nphysical id : 0\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1203.387\ncache size : 15360 KB\nphysical id : 0\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1276.330\ncache size : 15360 KB\nphysical id : 1\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1305.670\ncache size : 15360 KB\nphysical id : 1\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1275.750\ncache size : 15360 KB\nphysical id : 1\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1253.253\ncache size : 15360 KB\nphysical id : 1\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1337.677\ncache size : 15360 KB\nphysical id : 1\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\nvendor_id : GenuineIntel\nmodel name : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz\ncpu MHz : 1327.008\ncache size : 15360 KB\nphysical id : 1\nsiblings : 12\ncpu cores : 6\nflags : mmx\n\n") 172 173 info, err := GetCPUInfo() 174 175 c.Assert(err, IsNil) 176 c.Assert(info, NotNil) 177 c.Assert(info, HasLen, 2) 178 c.Assert(info[0].Vendor, Equals, "GenuineIntel") 179 c.Assert(info[0].Model, Equals, "Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz") 180 c.Assert(info[0].Cores, Equals, 6) 181 c.Assert(info[0].Siblings, Equals, 12) 182 c.Assert(info[0].CacheSize, Equals, uint64(15360*1024)) 183 c.Assert(info[0].Speed, DeepEquals, []float64{1204.199, 1199.908, 1199.908, 1199.908, 1199.908, 1199.792, 1260.443, 1195.385, 1259.283, 1199.908, 1199.908, 1203.387}) 184 c.Assert(info[1].Vendor, Equals, "GenuineIntel") 185 c.Assert(info[1].Model, Equals, "Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz") 186 c.Assert(info[1].Cores, Equals, 6) 187 c.Assert(info[1].Siblings, Equals, 12) 188 c.Assert(info[1].CacheSize, Equals, uint64(15360*1024)) 189 c.Assert(info[1].Speed, DeepEquals, []float64{1206.634, 1281.085, 1273.431, 1199.908, 1273.199, 1200.024, 1276.33, 1305.67, 1275.75, 1253.253, 1337.677, 1327.008}) 190 191 cpuInfoFile = s.CreateTestFile(c, "CORRUPTED") 192 193 info, err = GetCPUInfo() 194 195 c.Assert(err, NotNil) 196 c.Assert(info, IsNil) 197 198 cpuInfoFile = s.CreateTestFile(c, "cpu cores : ABCD") 199 200 info, err = GetCPUInfo() 201 202 c.Assert(err, NotNil) 203 c.Assert(info, IsNil) 204 205 cpuInfoFile = "" 206 207 info, err = GetCPUInfo() 208 209 c.Assert(err, NotNil) 210 c.Assert(info, IsNil) 211 } 212 213 func (s *SystemSuite) TestCPUCount(c *C) { 214 cpuPossibleFile = s.CreateTestFile(c, "0-127\n") 215 cpuPresentFile = s.CreateTestFile(c, "0-3\n") 216 cpuOnlineFile = s.CreateTestFile(c, "0-3\n") 217 cpuOfflineFile = s.CreateTestFile(c, "4-127\n") 218 219 info, err := GetCPUCount() 220 221 c.Assert(err, IsNil) 222 223 c.Assert(info.Possible, Equals, uint32(128)) 224 c.Assert(info.Present, Equals, uint32(4)) 225 c.Assert(info.Online, Equals, uint32(4)) 226 c.Assert(info.Offline, Equals, uint32(124)) 227 228 cpuOfflineFile = "/_UNKNOWN_" 229 _, err = GetCPUCount() 230 c.Assert(err, NotNil) 231 232 cpuOnlineFile = "/_UNKNOWN_" 233 _, err = GetCPUCount() 234 c.Assert(err, NotNil) 235 236 cpuPresentFile = "/_UNKNOWN_" 237 _, err = GetCPUCount() 238 c.Assert(err, NotNil) 239 240 cpuPossibleFile = "/_UNKNOWN_" 241 _, err = GetCPUCount() 242 c.Assert(err, NotNil) 243 } 244 245 func (s *SystemSuite) TestMemUsage(c *C) { 246 procMemInfoFile = s.CreateTestFile(c, "MemTotal: 32653288 kB\nMemFree: 531664 kB\nMemAvailable: 31243272 kB\nBuffers: 7912 kB\nCached: 28485940 kB\nSwapCached: 889 kB\nActive: 15379084 kB\nInactive: 13340308 kB\nActive(anon): 143408 kB\nInactive(anon): 247048 kB\nActive(file): 15235676 kB\nInactive(file): 13093260 kB\nUnevictable: 16 kB\nMlocked: 16 kB\nSwapTotal: 4194300 kB\nSwapFree: 2739454 kB\nDirty: 6744 kB\nWriteback: 0 kB\nAnonPages: 225604 kB\nMapped: 46404 kB\nShmem: 164916 kB\nSlab: 3021828 kB\nSReclaimable: 2789624 kB\nSUnreclaim: 232204 kB\nKernelStack: 3696 kB\n") 247 248 mem, err := GetMemUsage() 249 250 c.Assert(err, IsNil) 251 c.Assert(mem, NotNil) 252 c.Assert(mem.MemTotal, Equals, uint64(1024*32653288)) 253 c.Assert(mem.MemFree, Equals, uint64(1024*31650224)) 254 c.Assert(mem.MemUsed, Equals, uint64(1024*1003064)) 255 c.Assert(mem.Buffers, Equals, uint64(1024*7912)) 256 c.Assert(mem.Cached, Equals, uint64(1024*28485940)) 257 c.Assert(mem.Active, Equals, uint64(1024*15379084)) 258 c.Assert(mem.Inactive, Equals, uint64(1024*13340308)) 259 c.Assert(mem.SwapTotal, Equals, uint64(1024*4194300)) 260 c.Assert(mem.SwapFree, Equals, uint64(1024*2739454)) 261 c.Assert(mem.SwapUsed, Equals, uint64(1024*1454846)) 262 c.Assert(mem.SwapCached, Equals, uint64(1024*889)) 263 c.Assert(mem.Dirty, Equals, uint64(1024*6744)) 264 c.Assert(mem.Shmem, Equals, uint64(1024*164916)) 265 c.Assert(mem.Slab, Equals, uint64(1024*3021828)) 266 c.Assert(mem.SReclaimable, Equals, uint64(1024*2789624)) 267 268 procMemInfoFile = "" 269 270 mem, err = GetMemUsage() 271 272 c.Assert(err, NotNil) 273 c.Assert(mem, IsNil) 274 275 procMemInfoFile = s.CreateTestFile(c, "") 276 277 mem, err = GetMemUsage() 278 279 c.Assert(err, NotNil) 280 c.Assert(mem, IsNil) 281 282 procMemInfoFile = s.CreateTestFile(c, "MemTotal: ABC! kB") 283 284 mem, err = GetMemUsage() 285 286 c.Assert(err, NotNil) 287 c.Assert(mem, IsNil) 288 } 289 290 func (s *SystemSuite) TestNet(c *C) { 291 net, err := GetInterfacesStats() 292 293 c.Assert(err, IsNil) 294 c.Assert(net, NotNil) 295 296 procNetFile = s.CreateTestFile(c, "Inter-| Receive | Transmit\n face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed\neth0: 144612532790 216320765 0 0 0 0 0 0 366397171405 154518846 0 0 0 0 0 0\n") 297 298 net, err = GetInterfacesStats() 299 300 c.Assert(err, IsNil) 301 c.Assert(net, NotNil) 302 c.Assert(net["eth0"], NotNil) 303 c.Assert(net["eth0"].ReceivedBytes, Equals, uint64(144612532790)) 304 c.Assert(net["eth0"].ReceivedPackets, Equals, uint64(216320765)) 305 c.Assert(net["eth0"].TransmittedBytes, Equals, uint64(366397171405)) 306 c.Assert(net["eth0"].TransmittedPackets, Equals, uint64(154518846)) 307 308 _, _, err = GetNetworkSpeed(time.Second) 309 310 c.Assert(err, IsNil) 311 312 in, out := CalculateNetworkSpeed( 313 map[string]*InterfaceStats{"eth0": {0, 0, 0, 0}}, 314 map[string]*InterfaceStats{"eth0": {0, 0, 0, 0}}, 315 time.Second, 316 ) 317 318 c.Assert(in, Equals, uint64(0)) 319 c.Assert(out, Equals, uint64(0)) 320 321 procNetFile = "" 322 323 net, err = GetInterfacesStats() 324 325 c.Assert(err, NotNil) 326 c.Assert(net, IsNil) 327 328 procNetFile = s.CreateTestFile(c, "CORRUPTED") 329 330 net, err = GetInterfacesStats() 331 332 c.Assert(err, NotNil) 333 c.Assert(net, IsNil) 334 335 _, _, err = GetNetworkSpeed(time.Second) 336 337 c.Assert(err, NotNil) 338 } 339 340 func (s *SystemSuite) TestFSUsage(c *C) { 341 fs, err := GetFSUsage() 342 343 c.Assert(err, IsNil) 344 c.Assert(fs, NotNil) 345 346 util, err := GetIOUtil(time.Second) 347 348 c.Assert(err, IsNil) 349 c.Assert(util, NotNil) 350 351 mtabFile = "" 352 353 fs, err = GetFSUsage() 354 355 c.Assert(err, NotNil) 356 c.Assert(fs, IsNil) 357 358 mtabFile = s.CreateTestFile(c, "/CORRUPTED") 359 360 fs, err = GetFSUsage() 361 362 c.Assert(err, NotNil) 363 c.Assert(fs, IsNil) 364 365 mtabFile = s.CreateTestFile(c, "/CORRUPTED 0 0 0") 366 367 fs, err = GetFSUsage() 368 369 c.Assert(err, NotNil) 370 c.Assert(fs, IsNil) 371 372 procDiskStatsFile = "" 373 374 stats, err := GetIOStats() 375 376 c.Assert(err, NotNil) 377 c.Assert(stats, IsNil) 378 379 procDiskStatsFile = s.CreateTestFile(c, "CORRUPTED") 380 381 stats, err = GetIOStats() 382 383 c.Assert(err, NotNil) 384 c.Assert(stats, IsNil) 385 386 fs, err = GetFSUsage() 387 388 c.Assert(err, NotNil) 389 c.Assert(fs, IsNil) 390 391 util, err = GetIOUtil(time.Millisecond) 392 393 c.Assert(err, NotNil) 394 c.Assert(util, IsNil) 395 396 procStatFile = "" 397 mtabFile = "/etc/mtab" 398 procDiskStatsFile = "/proc/diskstats" 399 400 mtabFile = s.CreateTestFile(c, "/dev/abc1 / ext4 rw 0 0") 401 402 fs, err = GetFSUsage() 403 404 c.Assert(err, IsNil) 405 c.Assert(fs, NotNil) 406 407 util = CalculateIOUtil( 408 map[string]*IOStats{"abc": {IOMs: 10}}, 409 map[string]*IOStats{"abc": {IOMs: 1840}}, 410 time.Minute, 411 ) 412 413 c.Assert(util, NotNil) 414 c.Assert(util["abc"], Equals, 3.05) 415 416 procStatFile = "/proc/stat" 417 } 418 419 func (s *SystemSuite) TestDiskStatsParsingErrors(c *C) { 420 for i := 0; i < 11; i++ { 421 data := " 8 0 sda X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10" 422 data = strings.Replace(data, "X"+strconv.Itoa(i), "A", -1) 423 data = strings.Replace(data, "X", "", -1) 424 425 procDiskStatsFile = s.CreateTestFile(c, data) 426 427 stats, err := GetIOStats() 428 429 c.Assert(err, NotNil) 430 c.Assert(stats, IsNil) 431 } 432 433 procDiskStatsFile = "/proc/diskstats" 434 } 435 436 func (s *SystemSuite) TestUser(c *C) { 437 // This test can fail on Travis because workers 438 // doesn't have any active sessions 439 if os.Getenv("CI") == "" { 440 user, err := CurrentUser() 441 442 c.Assert(err, IsNil) 443 c.Assert(user, NotNil) 444 445 appendRealUserInfo(user) 446 447 c.Assert(user.IsRoot(), Equals, false) 448 c.Assert(user.IsSudo(), Equals, false) 449 c.Assert(user.GroupList(), NotNil) 450 451 user, err = CurrentUser() 452 453 c.Assert(err, IsNil) 454 c.Assert(user, NotNil) 455 456 sess, err := Who() 457 458 c.Assert(err, IsNil) 459 c.Assert(sess, NotNil) 460 461 user, err = LookupUser("") 462 463 c.Assert(err, NotNil) 464 c.Assert(user, IsNil) 465 466 group, err := LookupGroup("root") 467 468 c.Assert(err, IsNil) 469 c.Assert(group, NotNil) 470 471 group, err = LookupGroup("") 472 473 c.Assert(err, NotNil) 474 c.Assert(group, IsNil) 475 476 c.Assert(IsUserExist("root"), Equals, true) 477 c.Assert(IsUserExist("_UNKNOWN_"), Equals, false) 478 c.Assert(IsGroupExist("root"), Equals, true) 479 c.Assert(IsGroupExist("_UNKNOWN_"), Equals, false) 480 481 c.Assert(CurrentTTY(), Not(Equals), "") 482 483 uid, ok := getTDOwnerID() 484 485 c.Assert(uid, Not(Equals), -1) 486 c.Assert(ok, Equals, true) 487 488 os.Setenv("SUDO_USER", "testuser") 489 os.Setenv("SUDO_UID", "1234") 490 os.Setenv("SUDO_GID", "1234") 491 492 username, uid, gid := getRealUserFromEnv() 493 494 c.Assert(username, Equals, "testuser") 495 c.Assert(uid, Equals, 1234) 496 c.Assert(gid, Equals, 1234) 497 498 groups := extractGroupsInfo("uid=10123(john) gid=10123(john) groups=10123(john),10200(admins),10201(developers)") 499 500 c.Assert(groups[0].Name, Equals, "john") 501 c.Assert(groups[0].GID, Equals, 10123) 502 c.Assert(groups[2].Name, Equals, "developers") 503 c.Assert(groups[2].GID, Equals, 10201) 504 505 groups = extractGroupsInfo("uid=66(someone) gid=66(someone) groups=66(someone)\n\n") 506 507 c.Assert(groups[0].Name, Equals, "someone") 508 c.Assert(groups[0].GID, Equals, 66) 509 510 group, err = parseGetentGroupOutput("developers:*:10201:bob,john") 511 512 c.Assert(err, IsNil) 513 c.Assert(group, NotNil) 514 c.Assert(group.Name, Equals, "developers") 515 c.Assert(group.GID, Equals, 10201) 516 517 user, err = parseGetentPasswdOutput("bob:*:10567:10567::/home/bob:/bin/zsh") 518 519 c.Assert(err, IsNil) 520 c.Assert(user, NotNil) 521 c.Assert(user.Name, Equals, "bob") 522 c.Assert(user.UID, Equals, 10567) 523 c.Assert(user.GID, Equals, 10567) 524 c.Assert(user.Comment, Equals, "") 525 c.Assert(user.HomeDir, Equals, "/home/bob") 526 c.Assert(user.Shell, Equals, "/bin/zsh") 527 528 _, err = getOwner("") 529 530 c.Assert(err, NotNil) 531 532 _, err = getSessionInfo("ABC") 533 534 c.Assert(err, NotNil) 535 536 n, _ := fixCount(-100, nil) 537 538 c.Assert(n, Equals, 0) 539 540 ptsDir = "/not_exist" 541 542 sess, err = Who() 543 544 c.Assert(err, IsNil) 545 c.Assert(sess, HasLen, 0) 546 } 547 } 548 549 func (s *SystemSuite) TestGetInfo(c *C) { 550 osReleaseFile = "/_UNKNOWN_" 551 552 sysInfo, err := GetSystemInfo() 553 554 c.Assert(sysInfo, IsNil) 555 c.Assert(err, NotNil) 556 557 osReleaseFile = s.CreateTestFile(c, `NAME="Ubuntu" 558 VERSION="20.10 (Groovy Gorilla)" 559 ID=ubuntu 560 ID_LIKE=debian 561 PRETTY_NAME="Ubuntu 20.10" 562 VERSION_ID="20.10" 563 HOME_URL="https://www.ubuntu.com/" 564 SUPPORT_URL="https://help.ubuntu.com/" 565 BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" 566 VERSION_CODENAME=groovy`) 567 568 sysInfo, err = GetSystemInfo() 569 570 c.Assert(sysInfo, NotNil) 571 c.Assert(err, IsNil) 572 573 osInfo, err := GetOSInfo() 574 575 c.Assert(osInfo.Name, Equals, LINUX_UBUNTU) 576 c.Assert(osInfo.PrettyName, Equals, "Ubuntu 20.10") 577 c.Assert(osInfo.Version, Equals, "20.10 (Groovy Gorilla)") 578 c.Assert(osInfo.VersionID, Equals, "20.10") 579 c.Assert(osInfo.VersionCodename, Equals, "groovy") 580 c.Assert(osInfo.ID, Equals, "ubuntu") 581 c.Assert(osInfo.IDLike, Equals, "debian") 582 c.Assert(osInfo.HomeURL, Equals, "https://www.ubuntu.com/") 583 c.Assert(osInfo.BugReportURL, Equals, "https://bugs.launchpad.net/ubuntu/") 584 c.Assert(osInfo.SupportURL, Equals, "https://help.ubuntu.com/") 585 586 c.Assert(formatDistName("arch"), Equals, LINUX_ARCH) 587 c.Assert(formatDistName("centos"), Equals, LINUX_CENTOS) 588 c.Assert(formatDistName("debian"), Equals, LINUX_DEBIAN) 589 c.Assert(formatDistName("fedora"), Equals, LINUX_FEDORA) 590 c.Assert(formatDistName("gentoo"), Equals, LINUX_GENTOO) 591 c.Assert(formatDistName("rhel"), Equals, LINUX_RHEL) 592 c.Assert(formatDistName("suse"), Equals, LINUX_SUSE) 593 c.Assert(formatDistName("opensuse"), Equals, LINUX_OPEN_SUSE) 594 c.Assert(formatDistName("ubuntu"), Equals, LINUX_UBUNTU) 595 c.Assert(formatDistName("SuppaLinux"), Equals, "SuppaLinux") 596 } 597 598 func (s *SystemSuite) TestGetCPUArchBits(c *C) { 599 cpuInfoFile = "/_UNKNOWN_" 600 601 c.Assert(getCPUArchBits(), Equals, 0) 602 603 cpuInfoFile = s.CreateTestFile(c, "processor : 1\nflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64") 604 605 c.Assert(getCPUArchBits(), Equals, 64) 606 607 cpuInfoFile = s.CreateTestFile(c, "processor : 1\nflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64") 608 609 c.Assert(getCPUArchBits(), Equals, 32) 610 611 cpuInfoFile = "/proc/cpuinfo" 612 } 613 614 // ////////////////////////////////////////////////////////////////////////////////// // 615 616 func (s *SystemSuite) CreateTestFile(c *C, data string) string { 617 tmpDir := c.MkDir() 618 tmpFile := tmpDir + "/test.file" 619 620 if ioutil.WriteFile(tmpFile, []byte(data), 0644) != nil { 621 c.Fatal("Can't create temporary file") 622 } 623 624 return tmpFile 625 }