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