1
2
3
4
5
6
7 package session
8
9 import (
10 "bytes"
11 "testing"
12
13 "go.mongodb.org/mongo-driver/internal/assert"
14 "go.mongodb.org/mongo-driver/mongo/description"
15 )
16
17 func TestSessionPool(t *testing.T) {
18 int64ToPtr := func(i64 int64) *int64 { return &i64 }
19
20 t.Run("TestLifo", func(t *testing.T) {
21 descChan := make(chan description.Topology)
22 p := NewPool(descChan)
23 p.latestTopology = topologyDescription{
24 timeoutMinutes: int64ToPtr(30),
25 }
26
27 first, err := p.GetSession()
28 assert.Nil(t, err, "GetSession error: %v", err)
29 firstID := first.SessionID
30
31 second, err := p.GetSession()
32 assert.Nil(t, err, "GetSession error: %v", err)
33 secondID := second.SessionID
34
35 p.ReturnSession(first)
36 p.ReturnSession(second)
37
38 sess, err := p.GetSession()
39 assert.Nil(t, err, "GetSession error: %v", err)
40 nextSess, err := p.GetSession()
41 assert.Nil(t, err, "GetSession error: %v", err)
42
43 assert.True(t, bytes.Equal(sess.SessionID, secondID),
44 "first session ID mismatch; expected %s, got %s", secondID, sess.SessionID)
45 assert.True(t, bytes.Equal(nextSess.SessionID, firstID),
46 "second session ID mismatch; expected %s, got %s", firstID, nextSess.SessionID)
47 })
48
49 t.Run("TestExpiredRemoved", func(t *testing.T) {
50 descChan := make(chan description.Topology)
51 p := NewPool(descChan)
52
53 p.latestTopology = topologyDescription{}
54
55 first, err := p.GetSession()
56 assert.Nil(t, err, "GetSession error: %v", err)
57 firstID := first.SessionID
58
59 second, err := p.GetSession()
60 assert.Nil(t, err, "GetSession error: %v", err)
61 secondID := second.SessionID
62
63 p.ReturnSession(first)
64 p.ReturnSession(second)
65
66 sess, err := p.GetSession()
67 assert.Nil(t, err, "GetSession error: %v", err)
68
69 assert.False(t, bytes.Equal(sess.SessionID, firstID), "first expired session was not removed")
70 assert.False(t, bytes.Equal(sess.SessionID, secondID), "second expired session was not removed")
71 })
72 }
73
View as plain text