Skip to content

Commit 40cc29b

Browse files
committed
Convert tests to go test
1 parent bbcf56f commit 40cc29b

File tree

5 files changed

+277
-303
lines changed

5 files changed

+277
-303
lines changed

internal/mode/static/nginx/agent/broadcast/broadcast_test.go

+87-79
Original file line numberDiff line numberDiff line change
@@ -4,97 +4,105 @@ import (
44
"context"
55
"testing"
66

7-
. "github.com/onsi/ginkgo/v2"
87
. "github.com/onsi/gomega"
98

109
"github.com/nginxinc/nginx-gateway-fabric/internal/mode/static/nginx/agent/broadcast"
1110
)
1211

13-
func TestBroadcaster(t *testing.T) {
12+
func TestSubscribe(t *testing.T) {
1413
t.Parallel()
15-
RegisterFailHandler(Fail)
16-
RunSpecs(t, "Broadcaster Suite")
14+
g := NewWithT(t)
15+
16+
ctx, cancel := context.WithCancel(context.Background())
17+
defer cancel()
18+
19+
broadcaster := broadcast.NewDeploymentBroadcaster(ctx)
20+
21+
subscriber := broadcaster.Subscribe()
22+
g.Expect(subscriber.ID).NotTo(BeEmpty())
23+
24+
message := broadcast.NginxAgentMessage{
25+
ConfigVersion: "v1",
26+
Type: broadcast.ConfigApplyRequest,
27+
}
28+
29+
go func() {
30+
result := broadcaster.Send(message)
31+
g.Expect(result).To(BeTrue())
32+
}()
33+
34+
g.Eventually(subscriber.ListenCh).Should(Receive(Equal(message)))
1735
}
1836

19-
var _ = Describe("Broadcaster", func() {
20-
var (
21-
ctx context.Context
22-
cancel context.CancelFunc
23-
broadcaster broadcast.Broadcaster
24-
)
25-
26-
BeforeEach(func() {
27-
ctx, cancel = context.WithCancel(context.Background()) //nolint:fatcontext // ignore for test
28-
broadcaster = broadcast.NewDeploymentBroadcaster(ctx)
29-
})
30-
31-
AfterEach(func() {
32-
cancel()
33-
})
34-
35-
It("should allow a listener to subscribe and receive messages", func() {
36-
subscriber := broadcaster.Subscribe()
37-
Expect(subscriber.ID).NotTo(BeEmpty())
38-
39-
message := broadcast.NginxAgentMessage{
40-
ConfigVersion: "v1",
41-
Type: broadcast.ConfigApplyRequest,
42-
}
43-
44-
go func() {
45-
result := broadcaster.Send(message)
46-
Expect(result).To(BeTrue())
47-
}()
48-
49-
Eventually(subscriber.ListenCh).Should(Receive(Equal(message)))
50-
})
51-
52-
It("should send messages to all subscribers and wait for responses", func() {
53-
subscriber1 := broadcaster.Subscribe()
54-
subscriber2 := broadcaster.Subscribe()
55-
56-
message := broadcast.NginxAgentMessage{
57-
ConfigVersion: "v1",
58-
Type: broadcast.ConfigApplyRequest,
59-
}
60-
61-
go func() {
62-
result := broadcaster.Send(message)
63-
Expect(result).To(BeTrue())
64-
}()
65-
66-
Eventually(subscriber1.ListenCh).Should(Receive(Equal(message)))
67-
Eventually(subscriber2.ListenCh).Should(Receive(Equal(message)))
68-
69-
subscriber1.ResponseCh <- struct{}{}
70-
subscriber2.ResponseCh <- struct{}{}
71-
})
72-
73-
It("should return false if there are no listeners", func() {
74-
message := broadcast.NginxAgentMessage{
75-
ConfigVersion: "v1",
76-
Type: broadcast.ConfigApplyRequest,
77-
}
37+
func TestSubscribe_MultipleListeners(t *testing.T) {
38+
t.Parallel()
39+
g := NewWithT(t)
40+
41+
ctx, cancel := context.WithCancel(context.Background())
42+
defer cancel()
43+
44+
broadcaster := broadcast.NewDeploymentBroadcaster(ctx)
45+
46+
subscriber1 := broadcaster.Subscribe()
47+
subscriber2 := broadcaster.Subscribe()
7848

49+
message := broadcast.NginxAgentMessage{
50+
ConfigVersion: "v1",
51+
Type: broadcast.ConfigApplyRequest,
52+
}
53+
54+
go func() {
7955
result := broadcaster.Send(message)
80-
Expect(result).To(BeFalse())
81-
})
56+
g.Expect(result).To(BeTrue())
57+
}()
58+
59+
g.Eventually(subscriber1.ListenCh).Should(Receive(Equal(message)))
60+
g.Eventually(subscriber2.ListenCh).Should(Receive(Equal(message)))
61+
62+
subscriber1.ResponseCh <- struct{}{}
63+
subscriber2.ResponseCh <- struct{}{}
64+
}
65+
66+
func TestSubscribe_NoListeners(t *testing.T) {
67+
t.Parallel()
68+
g := NewWithT(t)
69+
70+
ctx, cancel := context.WithCancel(context.Background())
71+
defer cancel()
72+
73+
broadcaster := broadcast.NewDeploymentBroadcaster(ctx)
74+
75+
message := broadcast.NginxAgentMessage{
76+
ConfigVersion: "v1",
77+
Type: broadcast.ConfigApplyRequest,
78+
}
79+
80+
result := broadcaster.Send(message)
81+
g.Expect(result).To(BeFalse())
82+
}
83+
84+
func TestCancelSubscription(t *testing.T) {
85+
t.Parallel()
86+
g := NewWithT(t)
87+
88+
ctx, cancel := context.WithCancel(context.Background())
89+
defer cancel()
8290

83-
It("should remove a subscriber from the list", func() {
84-
subscriber := broadcaster.Subscribe()
91+
broadcaster := broadcast.NewDeploymentBroadcaster(ctx)
8592

86-
broadcaster.CancelSubscription(subscriber.ID)
93+
subscriber := broadcaster.Subscribe()
8794

88-
message := broadcast.NginxAgentMessage{
89-
ConfigVersion: "v1",
90-
Type: broadcast.ConfigApplyRequest,
91-
}
95+
broadcaster.CancelSubscription(subscriber.ID)
9296

93-
go func() {
94-
result := broadcaster.Send(message)
95-
Expect(result).To(BeFalse())
96-
}()
97+
message := broadcast.NginxAgentMessage{
98+
ConfigVersion: "v1",
99+
Type: broadcast.ConfigApplyRequest,
100+
}
97101

98-
Consistently(subscriber.ListenCh).ShouldNot(Receive())
99-
})
100-
})
102+
go func() {
103+
result := broadcaster.Send(message)
104+
g.Expect(result).To(BeFalse())
105+
}()
106+
107+
g.Consistently(subscriber.ListenCh).ShouldNot(Receive())
108+
}
Original file line numberDiff line numberDiff line change
@@ -1,93 +1,108 @@
11
package grpc_test
22

33
import (
4-
. "github.com/onsi/ginkgo/v2"
4+
"testing"
5+
56
. "github.com/onsi/gomega"
67
"k8s.io/apimachinery/pkg/types"
78

89
agentgrpc "github.com/nginxinc/nginx-gateway-fabric/internal/mode/static/nginx/agent/grpc"
910
)
1011

11-
var _ = Describe("ConnectionsTracker", func() {
12-
var tracker agentgrpc.ConnectionsTracker
13-
14-
BeforeEach(func() {
15-
tracker = agentgrpc.NewConnectionsTracker()
16-
})
17-
18-
It("should add a connection to the tracker", func() {
19-
conn := agentgrpc.Connection{
20-
PodName: "pod1",
21-
InstanceID: "instance1",
22-
Parent: types.NamespacedName{Namespace: "default", Name: "parent1"},
23-
}
24-
tracker.Track("key1", conn)
25-
26-
trackedConn := tracker.GetConnection("key1")
27-
Expect(trackedConn).To(Equal(conn))
28-
})
29-
30-
It("should return an empty connection if the key does not exist", func() {
31-
trackedConn := tracker.GetConnection("nonexistent")
32-
Expect(trackedConn).To(Equal(agentgrpc.Connection{}))
33-
})
34-
35-
It("should return true if the connection is ready", func() {
36-
conn := agentgrpc.Connection{
37-
PodName: "pod1",
38-
InstanceID: "instance1",
39-
Parent: types.NamespacedName{Namespace: "default", Name: "parent1"},
40-
}
41-
tracker.Track("key1", conn)
42-
43-
trackedConn, ready := tracker.ConnectionIsReady("key1")
44-
Expect(ready).To(BeTrue())
45-
Expect(trackedConn).To(Equal(conn))
46-
})
47-
48-
It("should return false if the connection is not ready when instanceID is not specified", func() {
49-
conn := agentgrpc.Connection{
50-
PodName: "pod1",
51-
Parent: types.NamespacedName{Namespace: "default", Name: "parent1"},
52-
}
53-
tracker.Track("key1", conn)
54-
55-
_, ready := tracker.ConnectionIsReady("key1")
56-
Expect(ready).To(BeFalse())
57-
})
58-
59-
It("should set the instance ID for a connection", func() {
60-
conn := agentgrpc.Connection{
61-
PodName: "pod1",
62-
Parent: types.NamespacedName{Namespace: "default", Name: "parent1"},
63-
}
64-
tracker.Track("key1", conn)
65-
66-
_, ready := tracker.ConnectionIsReady("key1")
67-
Expect(ready).To(BeFalse())
68-
69-
tracker.SetInstanceID("key1", "instance1")
70-
71-
trackedConn, ready := tracker.ConnectionIsReady("key1")
72-
Expect(ready).To(BeTrue())
73-
Expect(trackedConn.InstanceID).To(Equal("instance1"))
74-
})
75-
76-
It("should remove all connections for a given parent", func() {
77-
parent := types.NamespacedName{Namespace: "default", Name: "parent1"}
78-
conn1 := agentgrpc.Connection{PodName: "pod1", InstanceID: "instance1", Parent: parent}
79-
conn2 := agentgrpc.Connection{PodName: "pod2", InstanceID: "instance2", Parent: parent}
80-
81-
parent2 := types.NamespacedName{Namespace: "default", Name: "parent2"}
82-
conn3 := agentgrpc.Connection{PodName: "pod3", InstanceID: "instance3", Parent: parent2}
83-
84-
tracker.Track("key1", conn1)
85-
tracker.Track("key2", conn2)
86-
tracker.Track("key3", conn3)
87-
88-
tracker.UntrackConnectionsForParent(parent)
89-
Expect(tracker.GetConnection("key1")).To(Equal(agentgrpc.Connection{}))
90-
Expect(tracker.GetConnection("key2")).To(Equal(agentgrpc.Connection{}))
91-
Expect(tracker.GetConnection("key3")).To(Equal(conn3))
92-
})
93-
})
12+
func TestGetConnection(t *testing.T) {
13+
t.Parallel()
14+
g := NewWithT(t)
15+
16+
tracker := agentgrpc.NewConnectionsTracker()
17+
18+
conn := agentgrpc.Connection{
19+
PodName: "pod1",
20+
InstanceID: "instance1",
21+
Parent: types.NamespacedName{Namespace: "default", Name: "parent1"},
22+
}
23+
tracker.Track("key1", conn)
24+
25+
trackedConn := tracker.GetConnection("key1")
26+
g.Expect(trackedConn).To(Equal(conn))
27+
28+
nonExistent := tracker.GetConnection("nonexistent")
29+
g.Expect(nonExistent).To(Equal(agentgrpc.Connection{}))
30+
}
31+
32+
func TestConnectionIsReady(t *testing.T) {
33+
t.Parallel()
34+
g := NewWithT(t)
35+
36+
tracker := agentgrpc.NewConnectionsTracker()
37+
38+
conn := agentgrpc.Connection{
39+
PodName: "pod1",
40+
InstanceID: "instance1",
41+
Parent: types.NamespacedName{Namespace: "default", Name: "parent1"},
42+
}
43+
tracker.Track("key1", conn)
44+
45+
trackedConn, ready := tracker.ConnectionIsReady("key1")
46+
g.Expect(ready).To(BeTrue())
47+
g.Expect(trackedConn).To(Equal(conn))
48+
}
49+
50+
func TestConnectionIsNotReady(t *testing.T) {
51+
t.Parallel()
52+
g := NewWithT(t)
53+
54+
tracker := agentgrpc.NewConnectionsTracker()
55+
56+
conn := agentgrpc.Connection{
57+
PodName: "pod1",
58+
Parent: types.NamespacedName{Namespace: "default", Name: "parent1"},
59+
}
60+
tracker.Track("key1", conn)
61+
62+
_, ready := tracker.ConnectionIsReady("key1")
63+
g.Expect(ready).To(BeFalse())
64+
}
65+
66+
func TestSetInstanceID(t *testing.T) {
67+
t.Parallel()
68+
g := NewWithT(t)
69+
70+
tracker := agentgrpc.NewConnectionsTracker()
71+
conn := agentgrpc.Connection{
72+
PodName: "pod1",
73+
Parent: types.NamespacedName{Namespace: "default", Name: "parent1"},
74+
}
75+
tracker.Track("key1", conn)
76+
77+
_, ready := tracker.ConnectionIsReady("key1")
78+
g.Expect(ready).To(BeFalse())
79+
80+
tracker.SetInstanceID("key1", "instance1")
81+
82+
trackedConn, ready := tracker.ConnectionIsReady("key1")
83+
g.Expect(ready).To(BeTrue())
84+
g.Expect(trackedConn.InstanceID).To(Equal("instance1"))
85+
}
86+
87+
func TestUntrackConnectionsForParent(t *testing.T) {
88+
t.Parallel()
89+
g := NewWithT(t)
90+
91+
tracker := agentgrpc.NewConnectionsTracker()
92+
93+
parent := types.NamespacedName{Namespace: "default", Name: "parent1"}
94+
conn1 := agentgrpc.Connection{PodName: "pod1", InstanceID: "instance1", Parent: parent}
95+
conn2 := agentgrpc.Connection{PodName: "pod2", InstanceID: "instance2", Parent: parent}
96+
97+
parent2 := types.NamespacedName{Namespace: "default", Name: "parent2"}
98+
conn3 := agentgrpc.Connection{PodName: "pod3", InstanceID: "instance3", Parent: parent2}
99+
100+
tracker.Track("key1", conn1)
101+
tracker.Track("key2", conn2)
102+
tracker.Track("key3", conn3)
103+
104+
tracker.UntrackConnectionsForParent(parent)
105+
g.Expect(tracker.GetConnection("key1")).To(Equal(agentgrpc.Connection{}))
106+
g.Expect(tracker.GetConnection("key2")).To(Equal(agentgrpc.Connection{}))
107+
g.Expect(tracker.GetConnection("key3")).To(Equal(conn3))
108+
}

0 commit comments

Comments
 (0)