From bed9bbf7154296d1c2e9797629a02c77d798841b Mon Sep 17 00:00:00 2001
From: Garet Halliday <me@garet.holiday>
Date: Thu, 7 Dec 2023 15:13:36 -0600
Subject: [PATCH] ah

---
 contrib/extension/subscription/client.go      |  4 ++++
 contrib/extension/subscription/client_test.go | 23 ++++++++++++-------
 2 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/contrib/extension/subscription/client.go b/contrib/extension/subscription/client.go
index ac5a38e..f329e00 100644
--- a/contrib/extension/subscription/client.go
+++ b/contrib/extension/subscription/client.go
@@ -76,6 +76,10 @@ func (c *WrapClient) Subscribe(ctx context.Context, namespace string, channel an
 		return nil, ErrSubscriptionNotFound
 	}
 
+	// FIXME(garet): we can lose subscription messages here. if they send a notification and the server handles it
+	// before we finish adding it to the subs, the message will be lost. Ping will almost always be much much longer
+	// than us adding the sub so it probably doesn't matter. but it fails the unit tests :(
+
 	// now create a client sub
 	sub := &clientSub{
 		engine:    c,
diff --git a/contrib/extension/subscription/client_test.go b/contrib/extension/subscription/client_test.go
index 4d6c688..cc7a8eb 100644
--- a/contrib/extension/subscription/client_test.go
+++ b/contrib/extension/subscription/client_test.go
@@ -28,11 +28,14 @@ func TestSubscription(t *testing.T) {
 			return
 		}
 
-		for i := 0; i < count; i++ {
-			if err := notifier.Notify(i); err != nil {
-				panic(err)
+		go func() {
+			time.Sleep(10 * time.Millisecond)
+			for i := 0; i < count; i++ {
+				if err := notifier.Notify(i); err != nil {
+					panic(err)
+				}
 			}
-		}
+		}()
 	})
 
 	srv := server.NewServer(r)
@@ -80,11 +83,14 @@ func TestUnsubscribeNoRead(t *testing.T) {
 			return
 		}
 
-		for i := 0; i < 10; i++ {
-			if err := notifier.Notify(i); err != nil {
-				panic(err)
+		go func() {
+			time.Sleep(10 * time.Millisecond)
+			for i := 0; i < 10; i++ {
+				if err := notifier.Notify(i); err != nil {
+					panic(err)
+				}
 			}
-		}
+		}()
 	})
 
 	srv := server.NewServer(r)
@@ -136,6 +142,7 @@ func TestWrapClient(t *testing.T) {
 			return
 		}
 		go func() {
+			time.Sleep(10 * time.Millisecond)
 			idx := 0
 			for {
 				select {
-- 
GitLab