Skip to content

Commit 32b2817

Browse files
Add tests for welcome message output
1 parent a8cfbf4 commit 32b2817

2 files changed

Lines changed: 110 additions & 2 deletions

File tree

main.go

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,25 @@ import (
1616
"github.com/fabricekabongo/loggerhead/query"
1717
"github.com/fabricekabongo/loggerhead/server"
1818
"github.com/fabricekabongo/loggerhead/world"
19+
"github.com/hashicorp/memberlist"
1920
)
2021

22+
type nodeInfoProvider interface {
23+
LocalNode() *memberlist.Node
24+
}
25+
26+
type clusterInfo interface {
27+
MemberList() nodeInfoProvider
28+
}
29+
30+
type clusterAdapter struct {
31+
cluster *clustering.Cluster
32+
}
33+
34+
func (c clusterAdapter) MemberList() nodeInfoProvider {
35+
return c.cluster.MemberList()
36+
}
37+
2138
func main() {
2239

2340
ctx := context.Background()
@@ -60,7 +77,7 @@ func main() {
6077

6178
defer svr.Stop()
6279

63-
printWelcomeMessage(cfg, cluster)
80+
printWelcomeMessage(cfg, clusterAdapter{cluster: cluster})
6481
sigc := make(chan os.Signal, 1)
6582
signal.Notify(sigc, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
6683

@@ -83,7 +100,7 @@ func main() {
83100
svr.Start()
84101
}
85102

86-
func printWelcomeMessage(cfg config.Config, cluster *clustering.Cluster) {
103+
func printWelcomeMessage(cfg config.Config, cluster clusterInfo) {
87104
fmt.Println("===========================================================")
88105
fmt.Println("Starting the Database Server")
89106
fmt.Println("===========================================================")

main_welcome_test.go

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package main
2+
3+
import (
4+
"bytes"
5+
"net"
6+
"os"
7+
"strings"
8+
"testing"
9+
"time"
10+
11+
"github.com/fabricekabongo/loggerhead/clustering"
12+
"github.com/fabricekabongo/loggerhead/config"
13+
"github.com/hashicorp/memberlist"
14+
)
15+
16+
type stubMemberList struct {
17+
node *memberlist.Node
18+
}
19+
20+
func (s stubMemberList) LocalNode() *memberlist.Node {
21+
return s.node
22+
}
23+
24+
type stubCluster struct {
25+
memberList nodeInfoProvider
26+
}
27+
28+
func (s stubCluster) MemberList() nodeInfoProvider {
29+
return s.memberList
30+
}
31+
32+
func TestPrintWelcomeMessage(t *testing.T) {
33+
cfg := config.Config{
34+
ClusterDNS: "cluster.local",
35+
MaxConnections: 15,
36+
SeedNode: "10.0.0.1",
37+
ReadPort: 1111,
38+
WritePort: 2222,
39+
HttpPort: 3333,
40+
ClusterPort: 4444,
41+
MaxEOFWait: 5 * time.Second,
42+
}
43+
44+
cluster := stubCluster{
45+
memberList: stubMemberList{node: &memberlist.Node{
46+
Name: "node-1",
47+
Addr: net.ParseIP("192.168.0.1"),
48+
State: memberlist.StateAlive,
49+
}},
50+
}
51+
52+
readEnd, writeEnd, err := os.Pipe()
53+
if err != nil {
54+
t.Fatalf("failed to create pipe: %v", err)
55+
}
56+
57+
originalStdout := os.Stdout
58+
os.Stdout = writeEnd
59+
defer func() {
60+
os.Stdout = originalStdout
61+
}()
62+
63+
printWelcomeMessage(cfg, cluster)
64+
writeEnd.Close()
65+
66+
var output bytes.Buffer
67+
if _, err := output.ReadFrom(readEnd); err != nil {
68+
t.Fatalf("failed to read output: %v", err)
69+
}
70+
71+
got := output.String()
72+
expectedSnippets := []string{
73+
"Read Port: 1111",
74+
"Write Port: 2222",
75+
"Cluster Port: 4444",
76+
"Admin & Prometheus Port: 3333",
77+
"Max Connections: 15",
78+
"Max EOF Wait: 5s",
79+
"Cluster DNS: cluster.local",
80+
"Seed Node: 10.0.0.1",
81+
"My IP: 192.168.0.1",
82+
"Node Name: node-1",
83+
"Node State: " + clustering.StateToString(memberlist.StateAlive),
84+
}
85+
86+
for _, snippet := range expectedSnippets {
87+
if !strings.Contains(got, snippet) {
88+
t.Fatalf("expected output to contain %q, got %q", snippet, got)
89+
}
90+
}
91+
}

0 commit comments

Comments
 (0)