go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/resources/uptime/unix_test.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package uptime_test 5 6 import ( 7 "testing" 8 "time" 9 10 "github.com/stretchr/testify/assert" 11 "go.mondoo.com/cnquery/providers/os/resources/uptime" 12 ) 13 14 func TestLinuxUptime(t *testing.T) { 15 // uptime 16 data := " 21:00:04 up 1 day, 5:29, 0 users, load average: 0.00, 0.13, 0.22" 17 duration, err := uptime.ParseUnixUptime(data) 18 assert.Nil(t, err) 19 assert.Equal(t, &uptime.UnixUptimeResult{ 20 Duration: 106140000000000, 21 Users: 0, 22 LoadOneMinute: float64(0.0), 23 LoadFiveMinutes: float64(0.13), 24 LoadFifteenMinutes: float64(0.22), 25 }, duration) 26 assert.Equal(t, "29h29m0s", time.Duration(duration.Duration).String()) 27 28 data = "23:41:57 up 16 min, 0 users, load average: 0.06, 0.02, 0.00" 29 duration, err = uptime.ParseUnixUptime(data) 30 assert.Nil(t, err) 31 assert.Equal(t, &uptime.UnixUptimeResult{ 32 Duration: 960000000000, 33 Users: 0, 34 LoadOneMinute: float64(0.06), 35 LoadFiveMinutes: float64(0.02), 36 LoadFifteenMinutes: float64(0.00), 37 }, duration) 38 assert.Equal(t, "16m0s", time.Duration(duration.Duration).String()) 39 } 40 41 func TestAlpineUptime(t *testing.T) { 42 // alpine 43 data := " 08:45:41 up 22 min, load average: 0.19, 0.15, 0.09" 44 duration, err := uptime.ParseUnixUptime(data) 45 assert.Nil(t, err) 46 assert.Equal(t, &uptime.UnixUptimeResult{ 47 Duration: 1320000000000, 48 Users: 0, 49 LoadOneMinute: float64(0.19), 50 LoadFiveMinutes: float64(0.15), 51 LoadFifteenMinutes: float64(0.09), 52 }, duration) 53 assert.Equal(t, "22m0s", time.Duration(duration.Duration).String()) 54 } 55 56 func TestLcNumericDeUptime(t *testing.T) { 57 // LC_NUMERIC=de_DE.UTF-8 on Ubuntu 22.04 58 data := " 06:47:21 up 1 day, 14:18, 1 user, load average: 0,19, 0,15, 0,09" 59 duration, err := uptime.ParseUnixUptime(data) 60 assert.Nil(t, err) 61 assert.Equal(t, &uptime.UnixUptimeResult{ 62 Duration: 137880000000000, 63 Users: 1, 64 LoadOneMinute: float64(0.19), 65 LoadFiveMinutes: float64(0.15), 66 LoadFifteenMinutes: float64(0.09), 67 }, duration) 68 assert.Equal(t, "38h18m0s", time.Duration(duration.Duration).String()) 69 } 70 71 func TestDebianUptime(t *testing.T) { 72 // debian 73 data := " 08:45:19 up 21 min, 0 users, load average: 0.10, 0.13, 0.09" 74 duration, err := uptime.ParseUnixUptime(data) 75 assert.Nil(t, err) 76 assert.Equal(t, &uptime.UnixUptimeResult{ 77 Duration: 1260000000000, 78 Users: 0, 79 LoadOneMinute: float64(0.10), 80 LoadFiveMinutes: float64(0.13), 81 LoadFifteenMinutes: float64(0.09), 82 }, duration) 83 assert.Equal(t, "21m0s", time.Duration(duration.Duration).String()) 84 } 85 86 func TestRhelUptime(t *testing.T) { 87 // rhel 88 data := " 12:27:22 up 8 min, 1 user, load average: 0.01, 0.02, 0.00" 89 duration, err := uptime.ParseUnixUptime(data) 90 assert.Nil(t, err) 91 assert.Equal(t, &uptime.UnixUptimeResult{ 92 Duration: 480000000000, 93 Users: 1, 94 LoadOneMinute: float64(0.01), 95 LoadFiveMinutes: float64(0.02), 96 LoadFifteenMinutes: float64(0.00), 97 }, duration) 98 assert.Equal(t, "8m0s", time.Duration(duration.Duration).String()) 99 100 data = "13:24:35 up 1:05, 2 users, load average: 0.00, 0.00, 0.00" 101 duration, err = uptime.ParseUnixUptime(data) 102 assert.Nil(t, err) 103 assert.Equal(t, &uptime.UnixUptimeResult{ 104 Duration: 3900000000000, 105 Users: 2, 106 LoadOneMinute: float64(0.00), 107 LoadFiveMinutes: float64(0.00), 108 LoadFifteenMinutes: float64(0.00), 109 }, duration) 110 assert.Equal(t, "1h5m0s", time.Duration(duration.Duration).String()) 111 } 112 113 func TestBusyboxUptime(t *testing.T) { 114 data := " 08:56:57 up 33 min, 0 users, load average: 0.09, 0.09, 0.08" 115 duration, err := uptime.ParseUnixUptime(data) 116 assert.Nil(t, err) 117 assert.Equal(t, &uptime.UnixUptimeResult{ 118 Duration: 1980000000000, 119 Users: 0, 120 LoadOneMinute: float64(0.09), 121 LoadFiveMinutes: float64(0.09), 122 LoadFifteenMinutes: float64(0.08), 123 }, duration) 124 assert.Equal(t, "33m0s", time.Duration(duration.Duration).String()) 125 } 126 127 func TestMacOSUptime(t *testing.T) { 128 // uptime 129 data := "23:04 up 24 days, 13:07, 9 users, load averages: 4.81 5.21 5.15" 130 duration, err := uptime.ParseUnixUptime(data) 131 assert.Nil(t, err) 132 assert.Equal(t, &uptime.UnixUptimeResult{ 133 Duration: 2120820000000000, 134 Users: 9, 135 LoadOneMinute: float64(4.81), 136 LoadFiveMinutes: float64(5.21), 137 LoadFifteenMinutes: float64(5.15), 138 }, duration) 139 assert.Equal(t, "589h7m0s", time.Duration(duration.Duration).String()) 140 141 data = "10:52 up 38 mins, 9 users, load averages: 2.27 2.54 3.72" 142 duration, err = uptime.ParseUnixUptime(data) 143 assert.Nil(t, err) 144 assert.Equal(t, &uptime.UnixUptimeResult{ 145 Duration: 2280000000000, 146 Users: 9, 147 LoadOneMinute: float64(2.27), 148 LoadFiveMinutes: float64(2.54), 149 LoadFifteenMinutes: float64(3.72), 150 }, duration) 151 assert.Equal(t, "38m0s", time.Duration(duration.Duration).String()) 152 153 data = "13:16 up 8 days, 13 mins, 6 users, load averages: 2.56 2.68 2.91" 154 duration, err = uptime.ParseUnixUptime(data) 155 assert.Nil(t, err) 156 assert.Equal(t, &uptime.UnixUptimeResult{ 157 Duration: 691980000000000, 158 Users: 6, 159 LoadOneMinute: float64(2.56), 160 LoadFiveMinutes: float64(2.68), 161 LoadFifteenMinutes: float64(2.91), 162 }, duration) 163 assert.Equal(t, "192h13m0s", time.Duration(duration.Duration).String()) 164 } 165 166 func TestFreebsdUptime(t *testing.T) { 167 data := " 9:57AM up 24 mins, 1 user, load averages: 0.64, 0.50, 0.37" 168 duration, err := uptime.ParseUnixUptime(data) 169 assert.Nil(t, err) 170 assert.Equal(t, &uptime.UnixUptimeResult{ 171 Duration: 1440000000000, 172 Users: 1, 173 LoadOneMinute: float64(0.64), 174 LoadFiveMinutes: float64(0.5), 175 LoadFifteenMinutes: float64(0.37), 176 }, duration) 177 assert.Equal(t, "24m0s", time.Duration(duration.Duration).String()) 178 }