forked from logsearch/nats_to_syslog
/
nats_to_syslog_test.go
96 lines (76 loc) · 2.21 KB
/
nats_to_syslog_test.go
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
package main_test
import (
"bufio"
"github.com/nats-io/nats"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"github.com/onsi/gomega/gexec"
"net"
"os/exec"
"time"
)
var testBinaryPath string
var _ = BeforeSuite(func() {
var err error
testBinaryPath, err = gexec.Build("github.com/logsearch/nats-to-syslog")
handleError(err)
})
var _ = AfterSuite(func() {
gexec.CleanupBuildArtifacts()
})
var _ = Describe("NatsToSyslog", func() {
var (
gnatsd *gexec.Session
natsClient *nats.Conn
syslogServer *net.TCPListener
)
BeforeEach(func() {
gnatsd = startGNATSd()
var err error
natsClient, err = nats.Connect("nats://nats:c1oudc0w@127.0.0.1:4567")
handleError(err)
syslogServer = startSyslogServer()
})
It("forwards NATS messages to syslog", func() {
testBinary := exec.Command(testBinaryPath, "-nats-uri", "nats://nats:c1oudc0w@127.0.0.1:4567", "-syslog-endpoint", "localhost:6789", "-nats-subject", "testSubject", "-debug", "true")
testSession, err := gexec.Start(testBinary, GinkgoWriter, GinkgoWriter)
handleError(err)
defer testSession.Kill()
var remoteClient net.Conn
go func() {
var err error
remoteClient, err = syslogServer.AcceptTCP()
remoteClient.SetReadDeadline(time.Now().Add(2 * time.Second))
handleError(err)
}()
time.Sleep(500 * time.Millisecond)
reader := bufio.NewReader(remoteClient)
defer remoteClient.Close()
natsClient.Publish("testSubject", []byte("test message"))
time.Sleep(1 * time.Second)
logLine, _, err := reader.ReadLine()
handleError(err)
Expect(string(logLine)).To(MatchRegexp(`^<6>.*nats-to-syslog.*{"Data":"test message","Reply":"","Subject":"testSubject"}`))
})
AfterEach(func() {
gnatsd.Kill()
syslogServer.Close()
})
})
func startSyslogServer() *net.TCPListener {
listener, err := net.ListenTCP("tcp", &net.TCPAddr{IP: net.ParseIP("0.0.0.0"), Port: 6789})
handleError(err)
return listener
}
func startGNATSd() *gexec.Session {
cmd := exec.Command("gnatsd", "--port", "4567", "--user", "nats", "--pass", "c1oudc0w", "-D", "-V")
session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter)
time.Sleep(1 * time.Second)
handleError(err)
return session
}
func handleError(err error) {
if err != nil {
panic(err)
}
}