@@ -308,7 +308,7 @@ func TestTokenManager_Start(t *testing.T) {
308
308
go func () {
309
309
defer wg .Done ()
310
310
time .Sleep (time .Duration (int64 (rand .Intn (100 )) * int64 (time .Millisecond )))
311
- _ , err = tokenManager .Start (listener )
311
+ _ , err : = tokenManager .Start (listener )
312
312
if err == nil {
313
313
hasStarted += 1
314
314
return
@@ -554,6 +554,7 @@ func TestEntraidTokenManager_GetToken(t *testing.T) {
554
554
assert .NotNil (t , token )
555
555
556
556
})
557
+
557
558
t .Run ("GetToken with parse error" , func (t * testing.T ) {
558
559
idp := & mockIdentityProvider {}
559
560
listener := & mockTokenListener {}
@@ -580,7 +581,93 @@ func TestEntraidTokenManager_GetToken(t *testing.T) {
580
581
assert .Error (t , err )
581
582
assert .Nil (t , cancel )
582
583
assert .NotNil (t , tm .listener )
584
+ })
585
+ t .Run ("GetToken with expired token" , func (t * testing.T ) {
586
+ idp := & mockIdentityProvider {}
587
+ tokenManager , err := NewTokenManager (idp ,
588
+ TokenManagerOptions {},
589
+ )
590
+ assert .NoError (t , err )
591
+
592
+ authResult := & public.AuthResult {
593
+ ExpiresOn : time .Now ().Add (- time .Hour ).UTC (),
594
+ }
595
+ idpResponse , err := NewIDPResponse (ResponseTypeAuthResult ,
596
+ authResult )
597
+ assert .NoError (t , err )
598
+ assert .NotNil (t , tokenManager )
599
+ tm , ok := tokenManager .(* entraidTokenManager )
600
+ assert .True (t , ok )
601
+ assert .Nil (t , tm .listener )
602
+
603
+ idp .On ("RequestToken" ).Return (idpResponse , nil )
604
+
605
+ token , err := tokenManager .GetToken ()
606
+ assert .Error (t , err )
607
+ assert .Nil (t , token )
608
+ })
609
+
610
+ t .Run ("GetToken with nil token" , func (t * testing.T ) {
611
+ idp := & mockIdentityProvider {}
612
+ tokenManager , err := NewTokenManager (idp ,
613
+ TokenManagerOptions {},
614
+ )
615
+ assert .NoError (t , err )
616
+ assert .NotNil (t , tokenManager )
617
+ _ , ok := tokenManager .(* entraidTokenManager )
618
+ assert .True (t , ok )
619
+
620
+ rawResponse , err := NewIDPResponse (ResponseTypeRawToken , "test" )
621
+ assert .NoError (t , err )
622
+
623
+ idp .On ("RequestToken" ).Return (rawResponse , nil )
624
+
625
+ token , err := tokenManager .GetToken ()
626
+ assert .Error (t , err )
627
+ assert .Nil (t , token )
628
+ })
629
+
630
+ t .Run ("GetToken with nil from parser" , func (t * testing.T ) {
631
+ idp := & mockIdentityProvider {}
632
+ mParser := & mockIdentityProviderResponseParser {}
633
+ tokenManager , err := NewTokenManager (idp ,
634
+ TokenManagerOptions {
635
+ IdentityProviderResponseParser : mParser ,
636
+ },
637
+ )
638
+ assert .NoError (t , err )
639
+ assert .NotNil (t , tokenManager )
640
+ _ , ok := tokenManager .(* entraidTokenManager )
641
+ assert .True (t , ok )
642
+
643
+ idpResponse , err := NewIDPResponse (ResponseTypeRawToken , "test" )
644
+ assert .NoError (t , err )
645
+ idp .On ("RequestToken" ).Return (idpResponse , nil )
646
+ mParser .On ("ParseResponse" , idpResponse ).Return (nil , nil )
647
+
648
+ token , err := tokenManager .GetToken ()
649
+ assert .Error (t , err )
650
+ assert .Nil (t , token )
651
+ })
583
652
653
+ t .Run ("GetToken with idp error" , func (t * testing.T ) {
654
+ idp := & mockIdentityProvider {}
655
+ mParser := & mockIdentityProviderResponseParser {}
656
+ tokenManager , err := NewTokenManager (idp ,
657
+ TokenManagerOptions {
658
+ IdentityProviderResponseParser : mParser ,
659
+ },
660
+ )
661
+ assert .NoError (t , err )
662
+ assert .NotNil (t , tokenManager )
663
+ _ , ok := tokenManager .(* entraidTokenManager )
664
+ assert .True (t , ok )
665
+
666
+ idp .On ("RequestToken" ).Return (nil , fmt .Errorf ("idp error" ))
667
+
668
+ token , err := tokenManager .GetToken ()
669
+ assert .Error (t , err )
670
+ assert .Nil (t , token )
584
671
})
585
672
}
586
673
@@ -591,7 +678,6 @@ func TestEntraidTokenManager_durationToRenewal(t *testing.T) {
591
678
idp := & mockIdentityProvider {}
592
679
tokenManager , err := NewTokenManager (idp , TokenManagerOptions {
593
680
LowerRefreshBoundMs : 1000 * 60 * 60 , // 1 hour
594
-
595
681
})
596
682
assert .NoError (t , err )
597
683
assert .NotNil (t , tokenManager )
@@ -610,15 +696,89 @@ func TestEntraidTokenManager_durationToRenewal(t *testing.T) {
610
696
idpResponse , err := NewIDPResponse (ResponseTypeAuthResult ,
611
697
expiresSoon )
612
698
assert .NoError (t , err )
613
- idp .On ("RequestToken" ).Return (idpResponse , nil )
699
+ idp .On ("RequestToken" ).Return (idpResponse , nil ).Once ()
700
+ tm .token = nil
701
+ _ , err = tm .GetToken ()
702
+ assert .NoError (t , err )
703
+ assert .NotNil (t , tm .token )
704
+
705
+ // return zero, should happen now since it expires before the lower bound
706
+ result = tm .durationToRenewal ()
707
+ assert .Equal (t , time .Duration (0 ), result )
708
+ })
614
709
710
+ // get token that expires after the lower bound and expirationRefreshRatio to 1
711
+ assert .NotPanics (t , func () {
712
+ tm .expirationRefreshRatio = 1
713
+ expiresAfterlb := & public.AuthResult {
714
+ ExpiresOn : time .Now ().Add (time .Duration (tm .lowerBoundDuration ) + time .Hour ).UTC (),
715
+ }
716
+ idpResponse , err := NewIDPResponse (ResponseTypeAuthResult ,
717
+ expiresAfterlb )
718
+ assert .NoError (t , err )
719
+ idp .On ("RequestToken" ).Return (idpResponse , nil ).Once ()
720
+ tm .token = nil
615
721
_ , err = tm .GetToken ()
616
722
assert .NoError (t , err )
617
723
assert .NotNil (t , tm .token )
724
+
725
+ // return time to lower bound, if the returned time will be after the lower bound
726
+ result = tm .durationToRenewal ()
727
+ assert .InDelta (t , time .Until (tm .token .expiresOn .Add (- 1 * tm .lowerBoundDuration )), result , float64 (time .Second ))
618
728
})
619
729
620
- // return the lower bound
621
- result = tm .durationToRenewal ()
622
- assert .Equal (t , tm .lowerBoundDuration , result )
730
+ })
731
+ }
732
+
733
+ func TestEntraidTokenManager_Streaming (t * testing.T ) {
734
+ // write a test that will cover the goroutine in the Start
735
+ t .Parallel ()
736
+ t .Run ("Streaming" , func (t * testing.T ) {
737
+ idp := & mockIdentityProvider {}
738
+ listener := & mockTokenListener {}
739
+ mParser := & mockIdentityProviderResponseParser {}
740
+ tokenManager , err := NewTokenManager (idp ,
741
+ TokenManagerOptions {
742
+ IdentityProviderResponseParser : mParser ,
743
+ },
744
+ )
745
+ assert .NoError (t , err )
746
+ assert .NotNil (t , tokenManager )
747
+ tm , ok := tokenManager .(* entraidTokenManager )
748
+ assert .True (t , ok )
749
+ assert .Nil (t , tm .listener )
750
+
751
+ expiresIn := 10 * time .Millisecond
752
+ expiresOn := time .Now ().Add (expiresIn ).UTC ()
753
+ authResult := & public.AuthResult {
754
+ ExpiresOn : expiresOn ,
755
+ }
756
+ idpResponse , err := NewIDPResponse (ResponseTypeAuthResult ,
757
+ authResult )
758
+ assert .NoError (t , err )
759
+
760
+ idp .On ("RequestToken" ).Return (idpResponse , nil )
761
+ token := NewToken (
762
+ "test" ,
763
+ "test" ,
764
+ "test" ,
765
+ expiresOn ,
766
+ time .Now (),
767
+ int64 (time .Until (expiresOn )),
768
+ )
769
+
770
+ mParser .On ("ParseResponse" , idpResponse ).Return (token , nil )
771
+ listener .On ("OnTokenNext" , token ).Return ()
772
+
773
+ cancel , err := tokenManager .Start (listener )
774
+ assert .NotNil (t , cancel )
775
+ assert .NoError (t , err )
776
+ assert .NotNil (t , tm .listener )
777
+
778
+ toRenewal := tm .durationToRenewal ()
779
+ assert .NotEqual (t , 0 , toRenewal )
780
+ assert .NotEqual (t , expiresIn , toRenewal )
781
+ assert .True (t , expiresIn > toRenewal )
782
+ // should fail on mocks
623
783
})
624
784
}
0 commit comments