11import io
22import json
33import tempfile
4+ import time
45import unittest
56from pathlib import Path
67from unittest .mock import MagicMock , patch
@@ -90,20 +91,42 @@ def test_save_and_load_credentials(self, mock_open):
9091 self .assertEqual (loaded , tokens )
9192
9293 @patch ("codecarbon.cli.auth.requests.get" )
93- @patch ("codecarbon.cli.auth.JsonWebKey .import_key_set" )
94+ @patch ("codecarbon.cli.auth.KeySet .import_key_set" )
9495 @patch ("codecarbon.cli.auth.jose_jwt.decode" )
9596 def test_validate_access_token_valid (
9697 self , mock_decode , mock_import_key_set , mock_get
9798 ):
9899 mock_get .return_value .json .return_value = {"jwks_uri" : "jwks" }
99100 mock_get .return_value .raise_for_status .return_value = None
100101 mock_import_key_set .return_value = "keyset"
101- mock_decode .return_value .validate .return_value = None
102+ now = int (time .time ())
103+ mock_decode .return_value .claims = {
104+ "iat" : now - 10 ,
105+ "exp" : now + 300 ,
106+ "sub" : "user-123" ,
107+ }
102108 with patch (
103109 "codecarbon.cli.auth._discover_endpoints" , return_value = {"jwks_uri" : "jwks" }
104110 ):
105111 self .assertTrue (auth ._validate_access_token ("token" ))
106112
113+ @patch ("codecarbon.cli.auth.requests.get" )
114+ @patch ("codecarbon.cli.auth.KeySet.import_key_set" )
115+ @patch ("codecarbon.cli.auth.jose_jwt.decode" )
116+ def test_validate_access_token_expired_returns_false (
117+ self , mock_decode , mock_import_key_set , mock_get
118+ ):
119+ # Expired exp must trip JWTClaimsRegistry validation
120+ mock_get .return_value .json .return_value = {"jwks_uri" : "jwks" }
121+ mock_get .return_value .raise_for_status .return_value = None
122+ mock_import_key_set .return_value = "keyset"
123+ now = int (time .time ())
124+ mock_decode .return_value .claims = {"exp" : now - 10 }
125+ with patch (
126+ "codecarbon.cli.auth._discover_endpoints" , return_value = {"jwks_uri" : "jwks" }
127+ ):
128+ self .assertFalse (auth ._validate_access_token ("token" ))
129+
107130 @patch ("codecarbon.cli.auth._discover_endpoints" , return_value = {"jwks_uri" : "jwks" })
108131 @patch (
109132 "codecarbon.cli.auth.requests.get" ,
@@ -119,7 +142,7 @@ def test_validate_access_token_network_error_returns_true(
119142
120143 @patch ("codecarbon.cli.auth._discover_endpoints" , return_value = {"jwks_uri" : "jwks" })
121144 @patch ("codecarbon.cli.auth.requests.get" )
122- @patch ("codecarbon.cli.auth.JsonWebKey .import_key_set" )
145+ @patch ("codecarbon.cli.auth.KeySet .import_key_set" )
123146 @patch (
124147 "codecarbon.cli.auth.jose_jwt.decode" ,
125148 side_effect = Exception ("invalid" ),
0 commit comments