@@ -32,6 +32,9 @@ import (
3232 "testing"
3333 "time"
3434
35+ "github.com/golang/mock/gomock"
36+ "github.com/pkg/errors"
37+
3538 "github.com/stretchr/testify/assert"
3639 "github.com/tidwall/gjson"
3740
@@ -225,6 +228,7 @@ func TestGetConsentRequest(t *testing.T) {
225228}
226229
227230func TestDeleteConsentSession (t * testing.T ) {
231+
228232 newWg := func (add int ) * sync.WaitGroup {
229233 var wg sync.WaitGroup
230234 wg .Add (add )
@@ -238,7 +242,9 @@ func TestDeleteConsentSession(t *testing.T) {
238242 cl := createClientWithBackChannelEndpoint (t , reg , "client-1" , []string {"login-session-1" }, backChannelWG )
239243 performLoginFlow (t , reg , "1" , cl )
240244 performLoginFlow (t , reg , "2" , cl )
241- performDeleteConsentSession (t , reg , "client-1" , "login-session-1" , true )
245+
246+ performDeleteConsentSession (t , reg , "client-1" , "login-session-1" , true , false )
247+
242248 c1 , err := reg .ConsentManager ().GetConsentRequest (context .Background (), "consent-challenge-1" )
243249 require .Error (t , x .ErrNotFound , err )
244250 require .Nil (t , c1 )
@@ -255,7 +261,9 @@ func TestDeleteConsentSession(t *testing.T) {
255261 cl := createClientWithBackChannelEndpoint (t , reg , "client-1" , []string {}, backChannelWG )
256262 performLoginFlow (t , reg , "1" , cl )
257263 performLoginFlow (t , reg , "2" , cl )
258- performDeleteConsentSession (t , reg , "client-1" , "login-session-1" , false )
264+
265+ performDeleteConsentSession (t , reg , "client-1" , "login-session-1" , false , false )
266+
259267 c1 , err := reg .ConsentManager ().GetConsentRequest (context .Background (), "consent-challenge-1" )
260268 require .Error (t , x .ErrNotFound , err )
261269 require .Nil (t , c1 )
@@ -265,6 +273,32 @@ func TestDeleteConsentSession(t *testing.T) {
265273 backChannelWG .Wait ()
266274 })
267275
276+ t .Run ("case=subject=subject-1,client=client-1,session=session-1,expect revoke error" , func (t * testing.T ) {
277+ conf := internal .NewConfigurationWithDefaults ()
278+ reg := internal .NewRegistryMemory (t , conf )
279+ ctrl := gomock .NewController (t )
280+ persister := reg .Persister ()
281+ mockPersister := NewMockManager (ctrl )
282+ defer ctrl .Finish ()
283+ mockPersister .EXPECT ().RevokeSubjectClientLoginSessionConsentSession (gomock .Any (), gomock .Any (), gomock .Any (), gomock .Any ()).Return (errors .New ("SqlError" ))
284+ backChannelWG := newWg (0 )
285+ cl := createClientWithBackChannelEndpoint (t , reg , "client-1" , []string {"login-session-1" }, backChannelWG )
286+ performLoginFlow (t , reg , "1" , cl )
287+ performLoginFlow (t , reg , "2" , cl )
288+
289+ reg .WithPersister (mockPersister )
290+ performDeleteConsentSession (t , reg , "client-1" , "login-session-1" , false , true )
291+ reg .WithPersister (persister )
292+
293+ c1 , err := reg .ConsentManager ().GetConsentRequest (context .Background (), "consent-challenge-1" )
294+ require .NoError (t , err )
295+ require .NotNil (t , c1 )
296+ c2 , err := reg .ConsentManager ().GetConsentRequest (context .Background (), "consent-challenge-2" )
297+ require .NoError (t , err )
298+ require .NotNil (t , c2 )
299+ backChannelWG .Wait ()
300+ })
301+
268302 t .Run ("case=subject=subject-1,client=client-1,trigger_back_channel_logout=true" , func (t * testing.T ) {
269303 conf := internal .NewConfigurationWithDefaults ()
270304 reg := internal .NewRegistryMemory (t , conf )
@@ -273,7 +307,7 @@ func TestDeleteConsentSession(t *testing.T) {
273307 performLoginFlow (t , reg , "1" , cl )
274308 performLoginFlow (t , reg , "2" , cl )
275309
276- performDeleteConsentSession (t , reg , "client-1" , nil , true )
310+ performDeleteConsentSession (t , reg , "client-1" , nil , true , false )
277311
278312 c1 , err := reg .ConsentManager ().GetConsentRequest (context .Background (), "consent-challenge-1" )
279313 require .Error (t , x .ErrNotFound , err )
@@ -292,7 +326,7 @@ func TestDeleteConsentSession(t *testing.T) {
292326 performLoginFlow (t , reg , "1" , cl )
293327 performLoginFlow (t , reg , "2" , cl )
294328
295- performDeleteConsentSession (t , reg , "client-1" , nil , false )
329+ performDeleteConsentSession (t , reg , "client-1" , nil , false , false )
296330
297331 c1 , err := reg .ConsentManager ().GetConsentRequest (context .Background (), "consent-challenge-1" )
298332 require .Error (t , x .ErrNotFound , err )
@@ -303,6 +337,32 @@ func TestDeleteConsentSession(t *testing.T) {
303337 backChannelWG .Wait ()
304338 })
305339
340+ t .Run ("case=subject=subject-1,client=client-1,expect revoke error" , func (t * testing.T ) {
341+ conf := internal .NewConfigurationWithDefaults ()
342+ reg := internal .NewRegistryMemory (t , conf )
343+ ctrl := gomock .NewController (t )
344+ persister := reg .Persister ()
345+ mockPersister := NewMockManager (ctrl )
346+ defer ctrl .Finish ()
347+ mockPersister .EXPECT ().RevokeSubjectClientConsentSession (gomock .Any (), gomock .Any (), gomock .Any ()).Return (errors .New ("SqlError" ))
348+ backChannelWG := newWg (0 )
349+ cl := createClientWithBackChannelEndpoint (t , reg , "client-1" , []string {"login-session-1" }, backChannelWG )
350+ performLoginFlow (t , reg , "1" , cl )
351+ performLoginFlow (t , reg , "2" , cl )
352+
353+ reg .WithPersister (mockPersister )
354+ performDeleteConsentSession (t , reg , "client-1" , nil , false , true )
355+ reg .WithPersister (persister )
356+
357+ c1 , err := reg .ConsentManager ().GetConsentRequest (context .Background (), "consent-challenge-1" )
358+ require .NoError (t , err )
359+ require .NotNil (t , c1 )
360+ c2 , err := reg .ConsentManager ().GetConsentRequest (context .Background (), "consent-challenge-2" )
361+ require .NoError (t , err )
362+ require .NotNil (t , c2 )
363+ backChannelWG .Wait ()
364+ })
365+
306366 t .Run ("case=subject=subject-1,all=true,session=session-1,trigger_back_channel_logout=true" , func (t * testing.T ) {
307367 conf := internal .NewConfigurationWithDefaults ()
308368 reg := internal .NewRegistryMemory (t , conf )
@@ -312,7 +372,7 @@ func TestDeleteConsentSession(t *testing.T) {
312372 performLoginFlow (t , reg , "1" , cl1 )
313373 performLoginFlow (t , reg , "2" , cl2 )
314374
315- performDeleteConsentSession (t , reg , nil , "login-session-1" , true )
375+ performDeleteConsentSession (t , reg , nil , "login-session-1" , true , false )
316376
317377 c1 , err := reg .ConsentManager ().GetConsentRequest (context .Background (), "consent-challenge-1" )
318378 require .Error (t , x .ErrNotFound , err )
@@ -332,7 +392,7 @@ func TestDeleteConsentSession(t *testing.T) {
332392 performLoginFlow (t , reg , "1" , cl1 )
333393 performLoginFlow (t , reg , "2" , cl2 )
334394
335- performDeleteConsentSession (t , reg , nil , "login-session-1" , false )
395+ performDeleteConsentSession (t , reg , nil , "login-session-1" , false , false )
336396
337397 c1 , err := reg .ConsentManager ().GetConsentRequest (context .Background (), "consent-challenge-1" )
338398 require .Error (t , x .ErrNotFound , err )
@@ -343,6 +403,33 @@ func TestDeleteConsentSession(t *testing.T) {
343403 backChannelWG .Wait ()
344404 })
345405
406+ t .Run ("case=subject=subject-1,all=true,session=session-1,expect revoke error" , func (t * testing.T ) {
407+ conf := internal .NewConfigurationWithDefaults ()
408+ reg := internal .NewRegistryMemory (t , conf )
409+ ctrl := gomock .NewController (t )
410+ persister := reg .Persister ()
411+ mockPersister := NewMockManager (ctrl )
412+ defer ctrl .Finish ()
413+ mockPersister .EXPECT ().RevokeLoginSessionConsentSession (gomock .Any (), gomock .Any ()).Return (errors .New ("SqlError" ))
414+ backChannelWG := newWg (0 )
415+ cl1 := createClientWithBackChannelEndpoint (t , reg , "client-1" , []string {}, backChannelWG )
416+ cl2 := createClientWithBackChannelEndpoint (t , reg , "client-2" , []string {}, backChannelWG )
417+ performLoginFlow (t , reg , "1" , cl1 )
418+ performLoginFlow (t , reg , "2" , cl2 )
419+
420+ reg .WithPersister (mockPersister )
421+ performDeleteConsentSession (t , reg , nil , "login-session-1" , false , true )
422+ reg .WithPersister (persister )
423+
424+ c1 , err := reg .ConsentManager ().GetConsentRequest (context .Background (), "consent-challenge-1" )
425+ require .NoError (t , err )
426+ require .NotNil (t , c1 )
427+ c2 , err := reg .ConsentManager ().GetConsentRequest (context .Background (), "consent-challenge-2" )
428+ require .NoError (t , err )
429+ require .NotNil (t , c2 )
430+ backChannelWG .Wait ()
431+ })
432+
346433 t .Run ("case=subject=subject-1,all=true,trigger_back_channel_logout=true" , func (t * testing.T ) {
347434 conf := internal .NewConfigurationWithDefaults ()
348435 reg := internal .NewRegistryMemory (t , conf )
@@ -352,7 +439,7 @@ func TestDeleteConsentSession(t *testing.T) {
352439 performLoginFlow (t , reg , "1" , cl1 )
353440 performLoginFlow (t , reg , "2" , cl2 )
354441
355- performDeleteConsentSession (t , reg , nil , nil , true )
442+ performDeleteConsentSession (t , reg , nil , nil , true , false )
356443
357444 c1 , err := reg .ConsentManager ().GetConsentRequest (context .Background (), "consent-challenge-1" )
358445 require .Error (t , x .ErrNotFound , err )
@@ -372,7 +459,7 @@ func TestDeleteConsentSession(t *testing.T) {
372459 performLoginFlow (t , reg , "1" , cl1 )
373460 performLoginFlow (t , reg , "2" , cl2 )
374461
375- performDeleteConsentSession (t , reg , nil , nil , false )
462+ performDeleteConsentSession (t , reg , nil , nil , false , false )
376463
377464 c1 , err := reg .ConsentManager ().GetConsentRequest (context .Background (), "consent-challenge-1" )
378465 require .Error (t , x .ErrNotFound , err )
@@ -382,9 +469,36 @@ func TestDeleteConsentSession(t *testing.T) {
382469 require .Nil (t , c2 )
383470 backChannelWG .Wait ()
384471 })
472+
473+ t .Run ("case=subject=subject-1,all=true,expect revoke error" , func (t * testing.T ) {
474+ conf := internal .NewConfigurationWithDefaults ()
475+ reg := internal .NewRegistryMemory (t , conf )
476+ ctrl := gomock .NewController (t )
477+ persister := reg .Persister ()
478+ mockPersister := NewMockManager (ctrl )
479+ defer ctrl .Finish ()
480+ mockPersister .EXPECT ().RevokeSubjectConsentSession (gomock .Any (), gomock .Any ()).Return (errors .New ("SqlError" ))
481+ backChannelWG := newWg (0 )
482+ cl1 := createClientWithBackChannelEndpoint (t , reg , "client-1" , []string {}, backChannelWG )
483+ cl2 := createClientWithBackChannelEndpoint (t , reg , "client-2" , []string {}, backChannelWG )
484+ performLoginFlow (t , reg , "1" , cl1 )
485+ performLoginFlow (t , reg , "2" , cl2 )
486+
487+ reg .WithPersister (mockPersister )
488+ performDeleteConsentSession (t , reg , nil , nil , false , true )
489+ reg .WithPersister (persister )
490+
491+ c1 , err := reg .ConsentManager ().GetConsentRequest (context .Background (), "consent-challenge-1" )
492+ require .NoError (t , err )
493+ require .NotNil (t , c1 )
494+ c2 , err := reg .ConsentManager ().GetConsentRequest (context .Background (), "consent-challenge-2" )
495+ require .NoError (t , err )
496+ require .NotNil (t , c2 )
497+ backChannelWG .Wait ()
498+ })
385499}
386500
387- func performDeleteConsentSession (t * testing.T , reg driver.Registry , client , loginSessionId interface {}, triggerBackChannelLogout bool ) {
501+ func performDeleteConsentSession (t * testing.T , reg driver.Registry , client , loginSessionId interface {}, triggerBackChannelLogout bool , expectError bool ) {
388502 h := NewHandler (reg , reg .Config ())
389503 r := x .NewRouterAdmin ()
390504 h .SetRoutes (r )
@@ -410,8 +524,12 @@ func performDeleteConsentSession(t *testing.T, reg driver.Registry, client, logi
410524 req , err := http .NewRequest (http .MethodDelete , u .String (), nil )
411525
412526 require .NoError (t , err )
413- _ , err = c .Do (req )
414- require .NoError (t , err )
527+ res , err := c .Do (req )
528+ if expectError {
529+ require .Equal (t , 500 , res .StatusCode )
530+ } else {
531+ require .Equal (t , 204 , res .StatusCode )
532+ }
415533}
416534
417535func performLoginFlow (t * testing.T , reg driver.Registry , flowId string , cl * client.Client ) {
0 commit comments