@@ -142,9 +142,52 @@ func TestBasicSessionStore(t *testing.T) {
142142 require .NoError (t , err )
143143 require .Empty (t , sessions )
144144
145- sessions , err = db .ListSessionsByState (StateInUse )
145+ sessions , err = db .ListSessionsByState (StateReserved )
146146 require .NoError (t , err )
147147 require .Empty (t , sessions )
148+
149+ // Demonstrate deletion of a reserved session.
150+ //
151+ // Calling DeleteReservedSessions should have no effect yet since none
152+ // of the sessions are reserved.
153+ require .NoError (t , db .DeleteReservedSessions ())
154+
155+ sessions , err = db .ListSessionsByState (StateReserved )
156+ require .NoError (t , err )
157+ require .Empty (t , sessions )
158+
159+ // Add a session and put it in the StateReserved state.
160+ s5 := newSession (t , db , clock , "session 5" , withState (StateReserved ))
161+ require .NoError (t , db .CreateSession (s5 ))
162+
163+ sessions , err = db .ListSessionsByState (StateReserved )
164+ require .NoError (t , err )
165+ require .Equal (t , 1 , len (sessions ))
166+ assertEqualSessions (t , s5 , sessions [0 ])
167+
168+ // Show that the group ID/session ID index has also been populated with
169+ // this session.
170+ groupID , err := db .GetGroupID (s5 .ID )
171+ require .NoError (t , err )
172+ require .Equal (t , s5 .ID , groupID )
173+
174+ sessIDs , err := db .GetSessionIDs (s5 .GroupID )
175+ require .NoError (t , err )
176+ require .Equal (t , []ID {s5 .ID }, sessIDs )
177+
178+ // Now delete the reserved session and show that it is no longer in the
179+ // database and no longer in the group ID/session ID index.
180+ require .NoError (t , db .DeleteReservedSessions ())
181+
182+ sessions , err = db .ListSessionsByState (StateReserved )
183+ require .NoError (t , err )
184+ require .Empty (t , sessions )
185+
186+ groupID , err = db .GetGroupID (s5 .ID )
187+ require .ErrorContains (t , err , "no index entry" )
188+
189+ sessIDs , err = db .GetSessionIDs (s5 .GroupID )
190+ require .ErrorContains (t , err , "no sessions for group ID" )
148191}
149192
150193// TestLinkingSessions tests that session linking works as expected.
@@ -359,6 +402,12 @@ func withType(t Type) testSessionModifier {
359402 }
360403}
361404
405+ func withState (state State ) testSessionModifier {
406+ return func (s * Session ) {
407+ s .State = state
408+ }
409+ }
410+
362411func newSession (t * testing.T , db Store , clock clock.Clock , label string ,
363412 mods ... testSessionModifier ) * Session {
364413
0 commit comments