Skip to content

Commit 30f7b69

Browse files
authored
Merge pull request #10 from gatewayd-io/add-unit-tests
Add unit tests
2 parents 5c2d50f + c61de63 commit 30f7b69

File tree

12 files changed

+479
-5
lines changed

12 files changed

+479
-5
lines changed

go.mod

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,21 @@ module github.com/gatewayd-io/gatewayd
33
go 1.18
44

55
require (
6+
github.com/fergusstrange/embedded-postgres v1.19.0
67
github.com/panjf2000/gnet/v2 v2.1.2
78
github.com/sirupsen/logrus v1.9.0
9+
github.com/stretchr/testify v1.8.1
810
)
911

1012
require (
13+
github.com/davecgh/go-spew v1.1.1 // indirect
14+
github.com/lib/pq v1.10.7 // indirect
15+
github.com/pmezard/go-difflib v1.0.0 // indirect
16+
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect
1117
go.uber.org/atomic v1.10.0 // indirect
1218
go.uber.org/multierr v1.8.0 // indirect
1319
go.uber.org/zap v1.23.0 // indirect
1420
golang.org/x/sys v0.1.0 // indirect
1521
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
22+
gopkg.in/yaml.v3 v3.0.1 // indirect
1623
)

go.sum

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,16 @@ github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZx
55
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
66
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
77
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
8+
github.com/fergusstrange/embedded-postgres v1.19.0 h1:NqDufJHeA03U7biULlPHZ0pZ10/mDOMKPILEpT50Fyk=
9+
github.com/fergusstrange/embedded-postgres v1.19.0/go.mod h1:0B+3bPsMvcNgR9nN+bdM2x9YaNYDnf3ksUqYp1OAub0=
10+
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
811
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
912
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
13+
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
1014
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
15+
github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
16+
github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=
17+
github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
1118
github.com/panjf2000/ants/v2 v2.4.8 h1:JgTbolX6K6RreZ4+bfctI0Ifs+3mrE5BIHudQxUDQ9k=
1219
github.com/panjf2000/ants/v2 v2.4.8/go.mod h1:f6F0NZVFsGCp5A7QW/Zj/m92atWwOkY0OIhFxRNFr4A=
1320
github.com/panjf2000/gnet/v2 v2.1.2 h1:WJ/PkbfV6G0wcGOng2pyCwv8oadKiqtP8p+38smN7ao=
@@ -19,19 +26,27 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
1926
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
2027
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
2128
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
29+
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
30+
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
2231
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
2332
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
2433
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
25-
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
34+
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
35+
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
36+
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
37+
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
2638
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
2739
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
40+
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo=
41+
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
2842
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
2943
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
3044
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
3145
go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
3246
go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
33-
go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI=
3447
go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
48+
go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA=
49+
go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
3550
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
3651
go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak=
3752
go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8=
@@ -69,6 +84,7 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
6984
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
7085
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
7186
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
87+
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
7288
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
7389
gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
7490
gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
@@ -79,3 +95,4 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
7995
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
8096
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
8197
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
98+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ func main() {
1515
server := &network.Server{
1616
Network: "tcp",
1717
Address: "0.0.0.0:15432",
18+
Status: network.Stopped,
1819
Options: []gnet.Option{
1920
// Scheduling options
2021
gnet.WithMulticore(true),

network/client.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func NewClient(network, address string, receiveBufferSize int) *Client {
5959
return &client
6060
}
6161

62-
func (c Client) Send(data []byte) error {
62+
func (c *Client) Send(data []byte) error {
6363
_, err := c.Write(data)
6464
if err != nil {
6565
logrus.Errorf("Couldn't send data to the server: %s", err)
@@ -70,7 +70,7 @@ func (c Client) Send(data []byte) error {
7070
return nil
7171
}
7272

73-
func (c Client) Receive() (int, []byte, error) {
73+
func (c *Client) Receive() (int, []byte, error) {
7474
buf := make([]byte, c.ReceiveBufferSize)
7575
read, err := c.Read(buf)
7676
if err != nil {
@@ -82,9 +82,14 @@ func (c Client) Receive() (int, []byte, error) {
8282
return read, buf, nil
8383
}
8484

85-
func (c Client) Close() {
85+
func (c *Client) Close() {
8686
logrus.Debugf("Closing connection to %s", c.Address)
8787
if c.Conn != nil {
8888
c.Conn.Close()
8989
}
90+
c.ID = ""
91+
c.Conn = nil
92+
c.Address = ""
93+
c.Network = ""
94+
c.ReceiveBufferSize = 0
9095
}

network/client_test.go

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package network
2+
3+
import (
4+
"testing"
5+
6+
embeddedpostgres "github.com/fergusstrange/embedded-postgres"
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestNewClient(t *testing.T) {
11+
postgres := embeddedpostgres.NewDatabase()
12+
if err := postgres.Start(); err != nil {
13+
t.Fatal(err)
14+
}
15+
16+
defer func() {
17+
if err := postgres.Stop(); err != nil {
18+
t.Fatal(err)
19+
}
20+
}()
21+
22+
c := NewClient("tcp", "localhost:5432", 4096)
23+
defer c.Close()
24+
25+
assert.Equal(t, "tcp", c.Network)
26+
assert.Equal(t, "127.0.0.1:5432", c.Address)
27+
assert.Equal(t, 4096, c.ReceiveBufferSize)
28+
assert.NotEmpty(t, c.ID)
29+
assert.NotNil(t, c.Conn)
30+
}
31+
32+
func TestSend(t *testing.T) {
33+
postgres := embeddedpostgres.NewDatabase()
34+
if err := postgres.Start(); err != nil {
35+
t.Fatal(err)
36+
}
37+
38+
defer func() {
39+
if err := postgres.Stop(); err != nil {
40+
t.Fatal(err)
41+
}
42+
}()
43+
44+
c := NewClient("tcp", "localhost:5432", 4096)
45+
defer c.Close()
46+
47+
assert.NotNil(t, c)
48+
err := c.Send(CreatePostgreSQLPacket('Q', []byte("select 1;")))
49+
assert.Nil(t, err)
50+
}
51+
52+
func TestReceive(t *testing.T) {
53+
postgres := embeddedpostgres.NewDatabase()
54+
if err := postgres.Start(); err != nil {
55+
t.Fatal(err)
56+
}
57+
58+
defer func() {
59+
if err := postgres.Stop(); err != nil {
60+
t.Fatal(err)
61+
}
62+
}()
63+
64+
c := NewClient("tcp", "localhost:5432", 4096)
65+
defer c.Close()
66+
67+
assert.NotNil(t, c)
68+
err := c.Send(CreatePostgreSQLPacket('Q', []byte("select 1;")))
69+
assert.Nil(t, err)
70+
71+
size, data, err := c.Receive()
72+
msg := "SFATAL\x00VFATAL\x00C0A000\x00Munsupported frontend protocol 0.0: server supports 3.0 to 3.0\x00Fpostmaster.c\x00L2138\x00RProcessStartupPacket\x00\x00"
73+
assert.Equal(t, 132, size)
74+
assert.Equal(t, len(data[:size]), size)
75+
assert.Nil(t, err)
76+
assert.NotEmpty(t, data[:size])
77+
assert.Equal(t, msg, string(data[5:size]))
78+
assert.Equal(t, "E", string(data[0]))
79+
assert.Equal(t, 83, int(data[5]))
80+
}
81+
82+
func TestClose(t *testing.T) {
83+
postgres := embeddedpostgres.NewDatabase()
84+
if err := postgres.Start(); err != nil {
85+
t.Fatal(err)
86+
}
87+
88+
defer func() {
89+
if err := postgres.Stop(); err != nil {
90+
t.Fatal(err)
91+
}
92+
}()
93+
94+
c := NewClient("tcp", "localhost:5432", 4096)
95+
assert.NotNil(t, c)
96+
c.Close()
97+
assert.Equal(t, "", c.ID)
98+
assert.Equal(t, "", c.Network)
99+
assert.Equal(t, "", c.Address)
100+
assert.Nil(t, c.Conn)
101+
assert.Equal(t, 0, c.ReceiveBufferSize)
102+
}

network/network_helpers_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package network
2+
3+
import "encoding/binary"
4+
5+
func CreatePostgreSQLPacket(typ byte, msg []byte) []byte {
6+
packet := make([]byte, 1+4+len(msg))
7+
8+
packet = append(packet, typ)
9+
binary.BigEndian.PutUint32(packet, uint32(len(msg)+4))
10+
packet = append(packet, msg...)
11+
12+
return packet
13+
}

network/pool.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ func (p *PoolImpl) Shutdown() {
8989
p.pool.Delete(key)
9090
return true
9191
})
92+
93+
p.pool = sync.Map{}
9294
}
9395

9496
func NewPool() *PoolImpl {

0 commit comments

Comments
 (0)