@@ -679,11 +679,28 @@ def _test_acquire_token_by_client_secret(
679
679
680
680
class PopWithExternalKeyTestCase (LabBasedTestCase ):
681
681
def _test_service_principal (self ):
682
- # Any SP can obtain an ssh-cert. Here we use the lab app.
683
- result = get_lab_app () .acquire_token_for_client (self .SCOPE , data = self .DATA1 )
682
+ app = get_lab_app () # Any SP can obtain an ssh-cert. Here we use the lab app.
683
+ result = app .acquire_token_for_client (self .SCOPE , data = self .DATA1 )
684
684
self .assertIsNotNone (result .get ("access_token" ), "Encountered {}: {}" .format (
685
685
result .get ("error" ), result .get ("error_description" )))
686
686
self .assertEqual (self .EXPECTED_TOKEN_TYPE , result ["token_type" ])
687
+ self .assertEqual (result ["token_source" ], "identity_provider" )
688
+
689
+ # Test cache hit
690
+ cached_result = app .acquire_token_for_client (self .SCOPE , data = self .DATA1 )
691
+ self .assertIsNotNone (
692
+ cached_result .get ("access_token" ), "Encountered {}: {}" .format (
693
+ cached_result .get ("error" ), cached_result .get ("error_description" )))
694
+ self .assertEqual (self .EXPECTED_TOKEN_TYPE , cached_result ["token_type" ])
695
+ self .assertEqual (cached_result ["token_source" ], "cache" )
696
+
697
+ # refresh_token grant can fetch an ssh-cert bound to a different key
698
+ refreshed_result = app .acquire_token_for_client (self .SCOPE , data = self .DATA2 )
699
+ self .assertIsNotNone (
700
+ refreshed_result .get ("access_token" ), "Encountered {}: {}" .format (
701
+ refreshed_result .get ("error" ), refreshed_result .get ("error_description" )))
702
+ self .assertEqual (self .EXPECTED_TOKEN_TYPE , refreshed_result ["token_type" ])
703
+ self .assertEqual (refreshed_result ["token_source" ], "identity_provider" )
687
704
688
705
def _test_user_account (self ):
689
706
lab_user = self .get_lab_user (usertype = "cloud" )
@@ -701,16 +718,30 @@ def _test_user_account(self):
701
718
self .assertIsNotNone (result .get ("access_token" ), "Encountered {}: {}" .format (
702
719
result .get ("error" ), result .get ("error_description" )))
703
720
self .assertEqual (self .EXPECTED_TOKEN_TYPE , result ["token_type" ])
721
+ self .assertEqual (result ["token_source" ], "identity_provider" )
704
722
logger .debug ("%s.cache = %s" ,
705
723
self .id (), json .dumps (self .app .token_cache ._cache , indent = 4 ))
706
724
725
+ # refresh_token grant can hit an ssh-cert bound to the same key
726
+ account = self .app .get_accounts ()[0 ]
727
+ cached_result = self .app .acquire_token_silent (
728
+ self .SCOPE , account = account , data = self .DATA1 )
729
+ self .assertIsNotNone (cached_result )
730
+ self .assertEqual (self .EXPECTED_TOKEN_TYPE , cached_result ["token_type" ])
731
+ ## Actually, the self._test_acquire_token_interactive() already contained
732
+ ## a built-in refresh test, so the token in cache has been refreshed already.
733
+ ## Therefore, the following line won't pass, which is expected.
734
+ #self.assertEqual(result["access_token"], cached_result['access_token'])
735
+ self .assertEqual (cached_result ["token_source" ], "cache" )
736
+
707
737
# refresh_token grant can fetch an ssh-cert bound to a different key
708
738
account = self .app .get_accounts ()[0 ]
709
- refreshed_ssh_cert = self .app .acquire_token_silent (
739
+ refreshed_result = self .app .acquire_token_silent (
710
740
self .SCOPE , account = account , data = self .DATA2 )
711
- self .assertIsNotNone (refreshed_ssh_cert )
712
- self .assertEqual (self .EXPECTED_TOKEN_TYPE , refreshed_ssh_cert ["token_type" ])
713
- self .assertNotEqual (result ["access_token" ], refreshed_ssh_cert ['access_token' ])
741
+ self .assertIsNotNone (refreshed_result )
742
+ self .assertEqual (self .EXPECTED_TOKEN_TYPE , refreshed_result ["token_type" ])
743
+ self .assertNotEqual (result ["access_token" ], refreshed_result ['access_token' ])
744
+ self .assertEqual (refreshed_result ["token_source" ], "identity_provider" )
714
745
715
746
716
747
class SshCertTestCase (PopWithExternalKeyTestCase ):
0 commit comments