...

Source file src/github.com/shirou/gopsutil/net/net_darwin_test.go

Documentation: github.com/shirou/gopsutil/net

     1  package net
     2  
     3  import (
     4  	"testing"
     5  
     6  	assert "github.com/stretchr/testify/require"
     7  )
     8  
     9  const (
    10  	netstatTruncated = `Name  Mtu   Network       Address            Ipkts Ierrs     Ibytes    Opkts Oerrs     Obytes  Coll Drop
    11  lo0   16384 <Link#1>                         31241     0    3769823    31241     0    3769823     0   0
    12  lo0   16384 ::1/128     ::1                  31241     -    3769823    31241     -    3769823     -   -
    13  lo0   16384 127           127.0.0.1          31241     -    3769823    31241     -    3769823     -   -
    14  lo0   16384 fe80::1%lo0 fe80:1::1            31241     -    3769823    31241     -    3769823     -   -
    15  gif0* 1280  <Link#2>                             0     0          0        0     0          0     0   0
    16  stf0* 1280  <Link#3>                             0     0          0        0     0          0     0   0
    17  utun8 1500  <Link#88>                          286     0      27175        0     0          0     0   0
    18  utun8 1500  <Link#90>                          286     0      29554        0     0          0     0   0
    19  utun8 1500  <Link#92>                          286     0      29244        0     0          0     0   0
    20  utun8 1500  <Link#93>                          286     0      28267        0     0          0     0   0
    21  utun8 1500  <Link#95>                          286     0      28593        0     0          0     0   0`
    22  	netstatNotTruncated = `Name  Mtu   Network       Address            Ipkts Ierrs     Ibytes    Opkts Oerrs     Obytes  Coll Drop
    23  lo0   16384 <Link#1>                      27190978     0 12824763793 27190978     0 12824763793     0   0
    24  lo0   16384 ::1/128     ::1               27190978     - 12824763793 27190978     - 12824763793     -   -
    25  lo0   16384 127           127.0.0.1       27190978     - 12824763793 27190978     - 12824763793     -   -
    26  lo0   16384 fe80::1%lo0 fe80:1::1         27190978     - 12824763793 27190978     - 12824763793     -   -
    27  gif0* 1280  <Link#2>                             0     0          0        0     0          0     0   0
    28  stf0* 1280  <Link#3>                             0     0          0        0     0          0     0   0
    29  en0   1500  <Link#4>    a8:66:7f:dd:ee:ff  5708989     0 7295722068  3494252     0  379533492     0 230
    30  en0   1500  fe80::aa66: fe80:4::aa66:7fff  5708989     - 7295722068  3494252     -  379533492     -   -`
    31  )
    32  
    33  func TestParseNetstatLineHeader(t *testing.T) {
    34  	stat, linkIkd, err := parseNetstatLine(`Name  Mtu   Network       Address            Ipkts Ierrs     Ibytes    Opkts Oerrs     Obytes  Coll Drop`)
    35  	assert.Nil(t, linkIkd)
    36  	assert.Nil(t, stat)
    37  	assert.Error(t, err)
    38  	assert.Equal(t, errNetstatHeader, err)
    39  }
    40  
    41  func assertLoopbackStat(t *testing.T, err error, stat *IOCountersStat) {
    42  	assert.NoError(t, err)
    43  	assert.Equal(t, uint64(869107), stat.PacketsRecv)
    44  	assert.Equal(t, uint64(0), stat.Errin)
    45  	assert.Equal(t, uint64(169411755), stat.BytesRecv)
    46  	assert.Equal(t, uint64(869108), stat.PacketsSent)
    47  	assert.Equal(t, uint64(1), stat.Errout)
    48  	assert.Equal(t, uint64(169411756), stat.BytesSent)
    49  }
    50  
    51  func TestParseNetstatLineLink(t *testing.T) {
    52  	stat, linkID, err := parseNetstatLine(
    53  		`lo0   16384 <Link#1>                        869107     0  169411755   869108     1  169411756     0   0`,
    54  	)
    55  	assertLoopbackStat(t, err, stat)
    56  	assert.NotNil(t, linkID)
    57  	assert.Equal(t, uint(1), *linkID)
    58  }
    59  
    60  func TestParseNetstatLineIPv6(t *testing.T) {
    61  	stat, linkID, err := parseNetstatLine(
    62  		`lo0   16384 ::1/128     ::1                 869107     -  169411755   869108     1  169411756     -   -`,
    63  	)
    64  	assertLoopbackStat(t, err, stat)
    65  	assert.Nil(t, linkID)
    66  }
    67  
    68  func TestParseNetstatLineIPv4(t *testing.T) {
    69  	stat, linkID, err := parseNetstatLine(
    70  		`lo0   16384 127           127.0.0.1         869107     -  169411755   869108     1  169411756     -   -`,
    71  	)
    72  	assertLoopbackStat(t, err, stat)
    73  	assert.Nil(t, linkID)
    74  }
    75  
    76  func TestParseNetstatOutput(t *testing.T) {
    77  	nsInterfaces, err := parseNetstatOutput(netstatNotTruncated)
    78  	assert.NoError(t, err)
    79  	assert.Len(t, nsInterfaces, 8)
    80  	for index := range nsInterfaces {
    81  		assert.NotNil(t, nsInterfaces[index].stat, "Index %d", index)
    82  	}
    83  
    84  	assert.NotNil(t, nsInterfaces[0].linkID)
    85  	assert.Equal(t, uint(1), *nsInterfaces[0].linkID)
    86  
    87  	assert.Nil(t, nsInterfaces[1].linkID)
    88  	assert.Nil(t, nsInterfaces[2].linkID)
    89  	assert.Nil(t, nsInterfaces[3].linkID)
    90  
    91  	assert.NotNil(t, nsInterfaces[4].linkID)
    92  	assert.Equal(t, uint(2), *nsInterfaces[4].linkID)
    93  
    94  	assert.NotNil(t, nsInterfaces[5].linkID)
    95  	assert.Equal(t, uint(3), *nsInterfaces[5].linkID)
    96  
    97  	assert.NotNil(t, nsInterfaces[6].linkID)
    98  	assert.Equal(t, uint(4), *nsInterfaces[6].linkID)
    99  
   100  	assert.Nil(t, nsInterfaces[7].linkID)
   101  
   102  	mapUsage := newMapInterfaceNameUsage(nsInterfaces)
   103  	assert.False(t, mapUsage.isTruncated())
   104  	assert.Len(t, mapUsage.notTruncated(), 4)
   105  }
   106  
   107  func TestParseNetstatTruncated(t *testing.T) {
   108  	nsInterfaces, err := parseNetstatOutput(netstatTruncated)
   109  	assert.NoError(t, err)
   110  	assert.Len(t, nsInterfaces, 11)
   111  	for index := range nsInterfaces {
   112  		assert.NotNil(t, nsInterfaces[index].stat, "Index %d", index)
   113  	}
   114  
   115  	const truncatedIface = "utun8"
   116  
   117  	assert.NotNil(t, nsInterfaces[6].linkID)
   118  	assert.Equal(t, uint(88), *nsInterfaces[6].linkID)
   119  	assert.Equal(t, truncatedIface, nsInterfaces[6].stat.Name)
   120  
   121  	assert.NotNil(t, nsInterfaces[7].linkID)
   122  	assert.Equal(t, uint(90), *nsInterfaces[7].linkID)
   123  	assert.Equal(t, truncatedIface, nsInterfaces[7].stat.Name)
   124  
   125  	assert.NotNil(t, nsInterfaces[8].linkID)
   126  	assert.Equal(t, uint(92), *nsInterfaces[8].linkID)
   127  	assert.Equal(t, truncatedIface, nsInterfaces[8].stat.Name)
   128  
   129  	assert.NotNil(t, nsInterfaces[9].linkID)
   130  	assert.Equal(t, uint(93), *nsInterfaces[9].linkID)
   131  	assert.Equal(t, truncatedIface, nsInterfaces[9].stat.Name)
   132  
   133  	assert.NotNil(t, nsInterfaces[10].linkID)
   134  	assert.Equal(t, uint(95), *nsInterfaces[10].linkID)
   135  	assert.Equal(t, truncatedIface, nsInterfaces[10].stat.Name)
   136  
   137  	mapUsage := newMapInterfaceNameUsage(nsInterfaces)
   138  	assert.True(t, mapUsage.isTruncated())
   139  	assert.Equal(t, 3, len(mapUsage.notTruncated()), "en0, gif0 and stf0")
   140  }
   141  

View as plain text