github.com/netdata/go.d.plugin@v0.58.1/modules/openvpn/client/client_test.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package client 4 5 import ( 6 "bufio" 7 "bytes" 8 "fmt" 9 "os" 10 "strings" 11 "testing" 12 13 "github.com/netdata/go.d.plugin/pkg/socket" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 var ( 18 testLoadStatsData, _ = os.ReadFile("testdata/load-stats.txt") 19 testVersionData, _ = os.ReadFile("testdata/version.txt") 20 testStatus3Data, _ = os.ReadFile("testdata/status3.txt") 21 testMaxLinesExceededData = strings.Repeat(">CLIENT:ESTABLISHED,0\n", 501) 22 ) 23 24 func TestNew(t *testing.T) { assert.IsType(t, (*Client)(nil), New(socket.Config{})) } 25 26 func TestClient_GetVersion(t *testing.T) { 27 client := Client{Client: &mockSocketClient{}} 28 ver, err := client.Version() 29 assert.NoError(t, err) 30 expected := &Version{Major: 2, Minor: 3, Patch: 4, Management: 1} 31 assert.Equal(t, expected, ver) 32 } 33 34 func TestClient_GetLoadStats(t *testing.T) { 35 client := Client{Client: &mockSocketClient{}} 36 stats, err := client.LoadStats() 37 assert.NoError(t, err) 38 expected := &LoadStats{NumOfClients: 1, BytesIn: 7811, BytesOut: 7667} 39 assert.Equal(t, expected, stats) 40 } 41 42 func TestClient_GetUsers(t *testing.T) { 43 client := Client{ 44 Client: &mockSocketClient{}, 45 } 46 users, err := client.Users() 47 assert.NoError(t, err) 48 expected := Users{{ 49 CommonName: "pepehome", 50 RealAddress: "1.2.3.4:44347", 51 VirtualAddress: "10.9.0.5", 52 BytesReceived: 6043, 53 BytesSent: 5661, 54 ConnectedSince: 1555439465, 55 Username: "pepe", 56 }} 57 assert.Equal(t, expected, users) 58 } 59 60 func TestClient_MaxLineExceeded(t *testing.T) { 61 client := Client{ 62 Client: &mockSocketClient{maxLineExceeded: true}, 63 } 64 _, err := client.Users() 65 assert.Error(t, err) 66 } 67 68 type mockSocketClient struct { 69 maxLineExceeded bool 70 } 71 72 func (m *mockSocketClient) Connect() error { return nil } 73 74 func (m *mockSocketClient) Disconnect() error { return nil } 75 76 func (m *mockSocketClient) Command(command string, process socket.Processor) error { 77 var s *bufio.Scanner 78 switch command { 79 default: 80 return fmt.Errorf("unknown command : %s", command) 81 case commandExit: 82 case commandVersion: 83 s = bufio.NewScanner(bytes.NewReader(testVersionData)) 84 case commandStatus3: 85 if m.maxLineExceeded { 86 s = bufio.NewScanner(strings.NewReader(testMaxLinesExceededData)) 87 break 88 } 89 s = bufio.NewScanner(bytes.NewReader(testStatus3Data)) 90 case commandLoadStats: 91 s = bufio.NewScanner(bytes.NewReader(testLoadStatsData)) 92 } 93 94 for s.Scan() { 95 process(s.Bytes()) 96 } 97 return nil 98 }