1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
// Copyright (C) MongoDB, Inc. 2017-present.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
package session
import (
"bytes"
"testing"
"go.mongodb.org/mongo-driver/internal/testutil/assert"
"go.mongodb.org/mongo-driver/mongo/description"
)
func TestSessionPool(t *testing.T) {
t.Run("TestLifo", func(t *testing.T) {
descChan := make(chan description.Topology)
p := NewPool(descChan)
p.latestTopology = topologyDescription{
timeoutMinutes: 30, // Set to some arbitrarily high number greater than 1 minute.
}
first, err := p.GetSession()
assert.Nil(t, err, "GetSession error: %v", err)
firstID := first.SessionID
second, err := p.GetSession()
assert.Nil(t, err, "GetSession error: %v", err)
secondID := second.SessionID
p.ReturnSession(first)
p.ReturnSession(second)
sess, err := p.GetSession()
assert.Nil(t, err, "GetSession error: %v", err)
nextSess, err := p.GetSession()
assert.Nil(t, err, "GetSession error: %v", err)
assert.True(t, bytes.Equal(sess.SessionID, secondID),
"first session ID mismatch; expected %s, got %s", secondID, sess.SessionID)
assert.True(t, bytes.Equal(nextSess.SessionID, firstID),
"second session ID mismatch; expected %s, got %s", firstID, nextSess.SessionID)
})
t.Run("TestExpiredRemoved", func(t *testing.T) {
descChan := make(chan description.Topology)
p := NewPool(descChan)
// Set timeout minutes to 0 so new sessions will always become stale when returned
p.latestTopology = topologyDescription{}
first, err := p.GetSession()
assert.Nil(t, err, "GetSession error: %v", err)
firstID := first.SessionID
second, err := p.GetSession()
assert.Nil(t, err, "GetSession error: %v", err)
secondID := second.SessionID
p.ReturnSession(first)
p.ReturnSession(second)
sess, err := p.GetSession()
assert.Nil(t, err, "GetSession error: %v", err)
assert.False(t, bytes.Equal(sess.SessionID, firstID), "first expired session was not removed")
assert.False(t, bytes.Equal(sess.SessionID, secondID), "second expired session was not removed")
})
}
|