@@ -832,6 +832,66 @@ func TestEntraidTokenManager_Streaming(t *testing.T) {
832
832
mock .AssertExpectationsForObjects (t , idp , listener )
833
833
})
834
834
835
+ t .Run ("Start and Listen with 0 renewal duration and closing the manager" , func (t * testing.T ) {
836
+ idp := & mockIdentityProvider {}
837
+ listener := & mockTokenListener {}
838
+ tokenManager , err := NewTokenManager (idp ,
839
+ TokenManagerOptions {
840
+ LowerRefreshBoundMs : 1000 * 60 * 60 , // 1 hour
841
+ RetryOptions : RetryOptions {
842
+ InitialDelayMs : 5000 , // 5 seconds
843
+ },
844
+ },
845
+ )
846
+ assert .NoError (t , err )
847
+ assert .NotNil (t , tokenManager )
848
+ tm , ok := tokenManager .(* entraidTokenManager )
849
+ assert .True (t , ok )
850
+ assert .Nil (t , tm .listener )
851
+
852
+ assert .NoError (t , err )
853
+
854
+ expiresIn := time .Second
855
+ expiresOn := time .Now ().Add (expiresIn ).UTC ()
856
+ res := & public.AuthResult {
857
+ ExpiresOn : expiresOn ,
858
+ }
859
+ idpResponse , err := NewIDPResponse (ResponseTypeAuthResult ,
860
+ res )
861
+ assert .NoError (t , err )
862
+ idp .On ("RequestToken" ).Run (func (args mock.Arguments ) {
863
+ expiresOn := time .Now ().Add (expiresIn ).UTC ()
864
+ res := & public.AuthResult {
865
+ ExpiresOn : expiresOn ,
866
+ }
867
+ response := idpResponse .(* authResult )
868
+ response .authResult = res
869
+ }).Return (idpResponse , nil )
870
+
871
+ listener .On ("OnTokenNext" , mock .AnythingOfType ("*entraid.Token" )).Return ()
872
+
873
+ cancel , err := tokenManager .Start (listener )
874
+ assert .NotNil (t , cancel )
875
+ assert .NoError (t , err )
876
+ assert .NotNil (t , tm .listener )
877
+
878
+ toRenewal := tm .durationToRenewal ()
879
+ assert .Equal (t , time .Duration (0 ), toRenewal )
880
+ assert .True (t , expiresIn > toRenewal )
881
+
882
+ <- time .After (time .Duration (tm .retryOptions .InitialDelayMs / 2 ) * time .Millisecond )
883
+ assert .NoError (t , cancel ())
884
+ assert .Nil (t , tm .listener )
885
+ assert .Panics (t , func () {
886
+ close (tm .closed )
887
+ })
888
+
889
+ // called only once since the token manager was closed prior to initial delay passing
890
+ idp .AssertNumberOfCalls (t , "RequestToken" , 1 )
891
+ listener .AssertNumberOfCalls (t , "OnTokenNext" , 1 )
892
+ mock .AssertExpectationsForObjects (t , idp , listener )
893
+ })
894
+
835
895
t .Run ("Start and Listen" , func (t * testing.T ) {
836
896
idp := & mockIdentityProvider {}
837
897
listener := & mockTokenListener {}
0 commit comments