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  }