master
go 88 lines 1.65 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package socket
4
5 import (
6 "testing"
7 "time"
8
9 "github.com/stretchr/testify/require"
10 )
11
12 func TestSocket_Command(t *testing.T) {
13 const (
14 testServerAddress = "tcp://127.0.0.1:9999"
15 testUdpServerAddress = "udp://127.0.0.1:9999"
16 testUnixServerAddress = "unix:///tmp/testSocketFD"
17 defaultTimeout = 1000 * time.Millisecond
18 )
19
20 type server interface {
21 Run() error
22 Close() error
23 }
24
25 tests := map[string]struct {
26 srv server
27 cfg Config
28 wantConnectErr bool
29 wantCommandErr bool
30 }{
31 "tcp": {
32 srv: newTCPServer(testServerAddress),
33 cfg: Config{
34 Address: testServerAddress,
35 Timeout: defaultTimeout,
36 },
37 },
38 "udp": {
39 srv: newUDPServer(testUdpServerAddress),
40 cfg: Config{
41 Address: testUdpServerAddress,
42 Timeout: defaultTimeout,
43 },
44 },
45 "unix": {
46 srv: newUnixServer(testUnixServerAddress),
47 cfg: Config{
48 Address: testUnixServerAddress,
49 Timeout: defaultTimeout,
50 },
51 },
52 }
53
54 for name, test := range tests {
55 t.Run(name, func(t *testing.T) {
56 go func() {
57 defer func() { _ = test.srv.Close() }()
58 require.NoError(t, test.srv.Run())
59 }()
60 time.Sleep(time.Millisecond * 500)
61
62 sock := New(test.cfg)
63
64 err := sock.Connect()
65
66 if test.wantConnectErr {
67 require.Error(t, err)
68 return
69 }
70 require.NoError(t, err)
71
72 defer sock.Disconnect()
73
74 var resp string
75 err = sock.Command("ping\n", func(bytes []byte) (bool, error) {
76 resp = string(bytes)
77 return false, nil
78 })
79
80 if test.wantCommandErr {
81 require.Error(t, err)
82 } else {
83 require.NoError(t, err)
84 require.Equal(t, "pong", resp)
85 }
86 })
87 }
88 }