Kaynağa Gözat

Fix test and retry

binwiederhier 2 yıl önce
ebeveyn
işleme
c997e4911a
2 değiştirilmiş dosya ile 10 ekleme ve 19 silme
  1. 5 13
      server/topic.go
  2. 5 6
      server/topic_test.go

+ 5 - 13
server/topic.go

@@ -45,24 +45,16 @@ func newTopic(id string) *topic {
 }
 }
 
 
 // Subscribe subscribes to this topic
 // Subscribe subscribes to this topic
-func (t *topic) Subscribe(s subscriber, userID string, cancel func()) int {
-	max_retries := 5
-	retries := 1
+func (t *topic) Subscribe(s subscriber, userID string, cancel func()) (subscriberID int) {
 	t.mu.Lock()
 	t.mu.Lock()
 	defer t.mu.Unlock()
 	defer t.mu.Unlock()
-
-	subscriberID := rand.Int()
-	// simple check for existing id in maps
-	for {
-		_, ok := t.subscribers[subscriberID]
-		if ok && retries <= max_retries {
-			subscriberID = rand.Int()
-			retries++
-		} else {
+	for i := 0; i < 5; i++ { // Best effort retry
+		subscriberID = rand.Int()
+		_, exists := t.subscribers[subscriberID]
+		if !exists {
 			break
 			break
 		}
 		}
 	}
 	}
-
 	t.subscribers[subscriberID] = &topicSubscriber{
 	t.subscribers[subscriberID] = &topicSubscriber{
 		userID:     userID, // May be empty
 		userID:     userID, // May be empty
 		subscriber: s,
 		subscriber: s,

+ 5 - 6
server/topic_test.go

@@ -42,12 +42,11 @@ func TestTopic_Keepalive(t *testing.T) {
 	require.True(t, to.LastAccess().Unix() <= time.Now().Unix()+2)
 	require.True(t, to.LastAccess().Unix() <= time.Now().Unix()+2)
 }
 }
 
 
-func TestTopic_Subscribe_duplicateID(t *testing.T) {
+func TestTopic_Subscribe_DuplicateID(t *testing.T) {
 	t.Parallel()
 	t.Parallel()
-
 	to := newTopic("mytopic")
 	to := newTopic("mytopic")
 
 
-	// fix random seed to force same number generation
+	// Fix random seed to force same number generation
 	rand.Seed(1)
 	rand.Seed(1)
 	a := rand.Int()
 	a := rand.Int()
 	to.subscribers[a] = &topicSubscriber{
 	to.subscribers[a] = &topicSubscriber{
@@ -60,11 +59,11 @@ func TestTopic_Subscribe_duplicateID(t *testing.T) {
 		return nil
 		return nil
 	}
 	}
 
 
-	// force rand.Int to generate the same id once more
+	// Force rand.Int to generate the same id once more
 	rand.Seed(1)
 	rand.Seed(1)
 	id := to.Subscribe(subFn, "b", func() {})
 	id := to.Subscribe(subFn, "b", func() {})
 	res := to.subscribers[id]
 	res := to.subscribers[id]
 
 
-	require.False(t, id == a)
-	require.True(t, res.userID == "b")
+	require.NotEqual(t, id, a)
+	require.Equal(t, "b", res.userID, "b")
 }
 }