@@ -29,6 +29,9 @@ def get_basic_auth_header(username, password):
2929auto_refresh_knox = knox_settings .defaults .copy ()
3030auto_refresh_knox ["AUTO_REFRESH" ] = True
3131
32+ auto_refresh_max_ttl_knox = auto_refresh_knox .copy ()
33+ auto_refresh_max_ttl_knox ["AUTO_REFRESH_MAX_TTL" ] = timedelta (hours = 12 )
34+
3235token_user_limit_knox = knox_settings .defaults .copy ()
3336token_user_limit_knox ["TOKEN_LIMIT_PER_USER" ] = 10
3437
@@ -318,6 +321,36 @@ def test_token_expiry_is_not_extended_within_MIN_REFRESH_INTERVAL(self):
318321 self .assertEqual (response .status_code , 200 )
319322 self .assertEqual (original_expiry , AuthToken .objects .get ().expiry )
320323
324+ def test_token_expiry_is_not_extended_past_max_ttl (self ):
325+ ttl = knox_settings .TOKEN_TTL
326+ self .assertEqual (ttl , timedelta (hours = 10 ))
327+ original_time = datetime (2018 , 7 , 25 , 0 , 0 , 0 , 0 )
328+
329+ with freeze_time (original_time ):
330+ instance , token = AuthToken .objects .create (user = self .user )
331+
332+ self .client .credentials (HTTP_AUTHORIZATION = ('Token %s' % token ))
333+ five_hours_later = original_time + timedelta (hours = 5 )
334+ with override_settings (REST_KNOX = auto_refresh_max_ttl_knox ):
335+ reload (auth ) # necessary to reload settings in core code
336+ self .assertEqual (auth .knox_settings .AUTO_REFRESH , True )
337+ self .assertEqual (auth .knox_settings .AUTO_REFRESH_MAX_TTL , timedelta (hours = 12 ))
338+ with freeze_time (five_hours_later ):
339+ response = self .client .get (root_url , {}, format = 'json' )
340+ reload (auth ) # necessary to reload settings in core code
341+ self .assertEqual (response .status_code , 200 )
342+
343+ # original expiry date was extended, but not past max_ttl:
344+ new_expiry = AuthToken .objects .get ().expiry
345+ expected_expiry = original_time + timedelta (hours = 12 )
346+ self .assertEqual (new_expiry .replace (tzinfo = None ), expected_expiry ,
347+ "Expiry time should have been extended to {} but is {}."
348+ .format (expected_expiry , new_expiry ))
349+
350+ with freeze_time (expected_expiry + timedelta (seconds = 1 )):
351+ response = self .client .get (root_url , {}, format = 'json' )
352+ self .assertEqual (response .status_code , 401 )
353+
321354 def test_expiry_signals (self ):
322355 self .signal_was_called = False
323356
0 commit comments