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