forked from bshuster-repo/logrus-logstash-hook
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpool_test.go
More file actions
166 lines (141 loc) · 3.22 KB
/
Copy pathpool_test.go
File metadata and controls
166 lines (141 loc) · 3.22 KB
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
package logrustash
import (
"log"
"math/rand"
"net"
"testing"
"time"
)
var (
initCap = 3
maxCap = 5
network = "tcp"
address = "127.0.0.1:7777"
srvBuffer *serverBuffer
)
func init() {
srvBuffer = &serverBuffer{}
// used for factory function
go simpleTCPServer()
time.Sleep(time.Millisecond * 300) // wait until tcp server has been settled
rand.Seed(time.Now().UTC().UnixNano())
}
type serverBuffer struct {
buf []byte
err error
}
func (s *serverBuffer) GetData() []byte {
return s.buf
}
func (s *serverBuffer) String() string {
return string(s.buf)
}
func (s *serverBuffer) Error() string {
return s.err.Error()
}
func simpleTCPServer() {
l, err := net.Listen(network, address)
if err != nil {
log.Fatal(err)
}
defer l.Close()
for {
conn, err := l.Accept()
if err != nil {
log.Fatal(err)
}
go func() {
buf := make([]byte, 256)
n, err := conn.Read(buf)
if err != nil {
srvBuffer.err = err
srvBuffer.buf = []byte{}
} else {
srvBuffer.buf = buf[:n]
srvBuffer.err = nil
}
}()
}
}
func TestNewPool(t *testing.T) {
hosts := []string{address}
pool, err := newPool(hosts, initCap, maxCap)
if err != nil {
t.Errorf("newPool error: %s", err)
}
defer pool.Close()
}
func TestNewPoolError_BadRange(t *testing.T) {
hosts := []string{address}
_, err := newPool(hosts, initCap, 2)
if err == nil {
t.Errorf("newPool expected an error")
}
expected := "invalid capacity settings"
if expected != err.Error() {
t.Errorf("expected to see '%s' in '%s'", expected, err.Error())
}
}
func TestNewPoolError_BadAddress(t *testing.T) {
hosts := []string{"127.0.0.1:7778"}
_, err := newPool(hosts, initCap, maxCap)
if err == nil {
t.Errorf("newPool expected an error")
}
expected := "factory is not able to fill the pool: dial tcp 127.0.0.1:7778: getsockopt: connection refused"
if expected != err.Error() {
t.Errorf("expected to see '%s' in '%s'", expected, err.Error())
}
}
func TestWrite(t *testing.T) {
hosts := []string{address}
pool, err := newPool(hosts, initCap, maxCap)
if err != nil {
t.Errorf("newPool error: %s", err)
}
defer pool.Close()
data := []byte("sample data")
n, werr := pool.Write(data)
if werr != nil {
t.Errorf("Write error: %s", werr)
}
if n != len(data) {
t.Errorf("expected to see '%d' in '%d'", len(data), n)
}
}
func TestWriteError(t *testing.T) {
hosts := []string{address}
pool, err := newPool(hosts, initCap, maxCap)
if err != nil {
t.Errorf("newPool error: %s", err)
}
defer pool.Close()
pool.conns.Close()
data := []byte("sample data")
_, werr := pool.Write(data)
if werr == nil {
t.Errorf("Write expected error")
}
expected := "pool is closed"
if expected != werr.Error() {
t.Errorf("expected to see '%s' in '%s'", expected, werr.Error())
}
}
func TestWriteTimeout(t *testing.T) {
hosts := []string{address}
pool, err := newPool(hosts, initCap, maxCap)
if err != nil {
t.Errorf("newPool error: %s", err)
}
defer pool.Close()
ms := time.Duration(500) * time.Millisecond
_ = pool.SetWriteDeadline(time.Now().Add(ms))
data := []byte("sample data")
n, werr := pool.Write(data)
if werr != nil {
t.Errorf("Write error: %s", werr)
}
if n != len(data) {
t.Errorf("expected to see '%d' in '%d'", len(data), n)
}
}