@@ -137,9 +137,52 @@ func TestBasicSessionStore(t *testing.T) {
137137 assertEqualSessions (t , s2 , sessions [1 ])
138138 assertEqualSessions (t , s3 , sessions [2 ])
139139
140- sessions , err = db .ListSessions (StateInUse )
140+ sessions , err = db .ListSessions (StateReserved )
141141 require .NoError (t , err )
142142 require .Empty (t , sessions )
143+
144+ // Demonstrate deletion of a reserved session.
145+ //
146+ // Calling DeleteReservedSessions should have no effect yet since none
147+ // of the sessions are reserved.
148+ require .NoError (t , db .DeleteReservedSessions ())
149+
150+ sessions , err = db .ListSessions (StateReserved )
151+ require .NoError (t , err )
152+ require .Empty (t , sessions )
153+
154+ // Add a session and put it in the StateReserved state.
155+ s5 := newSession (t , db , clock , "session 5" , withState (StateReserved ))
156+ require .NoError (t , db .CreateSession (s5 ))
157+
158+ sessions , err = db .ListSessions (StateReserved )
159+ require .NoError (t , err )
160+ require .Equal (t , 1 , len (sessions ))
161+ assertEqualSessions (t , s5 , sessions [0 ])
162+
163+ // Show that the group ID/session ID index has also been populated with
164+ // this session.
165+ groupID , err := db .GetGroupID (s5 .ID )
166+ require .NoError (t , err )
167+ require .Equal (t , s5 .ID , groupID )
168+
169+ sessIDs , err := db .GetSessionIDs (s5 .GroupID )
170+ require .NoError (t , err )
171+ require .Equal (t , []ID {s5 .ID }, sessIDs )
172+
173+ // Now delete the reserved session and show that it is no longer in the
174+ // database and no longer in the group ID/session ID index.
175+ require .NoError (t , db .DeleteReservedSessions ())
176+
177+ sessions , err = db .ListSessions (StateReserved )
178+ require .NoError (t , err )
179+ require .Empty (t , sessions )
180+
181+ groupID , err = db .GetGroupID (s5 .ID )
182+ require .ErrorContains (t , err , "no index entry" )
183+
184+ sessIDs , err = db .GetSessionIDs (s5 .GroupID )
185+ require .ErrorContains (t , err , "no sessions for group ID" )
143186}
144187
145188// TestLinkingSessions tests that session linking works as expected.
@@ -354,6 +397,12 @@ func withType(t Type) testSessionModifier {
354397 }
355398}
356399
400+ func withState (state State ) testSessionModifier {
401+ return func (s * Session ) {
402+ s .State = state
403+ }
404+ }
405+
357406func newSession (t * testing.T , db Store , clock clock.Clock , label string ,
358407 mods ... testSessionModifier ) * Session {
359408
0 commit comments