def test_40_failcounter_exceeded(self): from privacyidea.lib.tokenclass import (FAILCOUNTER_EXCEEDED, FAILCOUNTER_CLEAR_TIMEOUT) db_token = Token("failcounter", tokentype="spass") db_token.save() token_obj = TokenClass(db_token) for i in range(0, 11): token_obj.inc_failcount() now = datetime.datetime.now(tzlocal()).strftime(DATE_FORMAT) # Now the FAILCOUNTER_EXCEEDED is set ti = token_obj.get_tokeninfo(FAILCOUNTER_EXCEEDED) # We only compare the date self.assertEqual(ti[:10], now[:10]) # and the timezone self.assertEqual(ti[-5:], now[-5:]) # reset the failcounter token_obj.reset() ti = token_obj.get_tokeninfo(FAILCOUNTER_EXCEEDED) self.assertEqual(ti, None) # Now check with failcounter clear, with timeout 5 minutes set_privacyidea_config(FAILCOUNTER_CLEAR_TIMEOUT, 5) token_obj.set_failcount(10) failed_recently = (datetime.datetime.now(tzlocal()) - datetime.timedelta(minutes=3)).strftime(DATE_FORMAT) token_obj.add_tokeninfo(FAILCOUNTER_EXCEEDED, failed_recently) r = token_obj.check_failcount() # the fail is only 3 minutes ago, so we will not reset and check will # be false self.assertFalse(r) # Set the timeout to a shorter value set_privacyidea_config(FAILCOUNTER_CLEAR_TIMEOUT, 2) r = token_obj.check_failcount() # The fail is longer ago. self.assertTrue(r) # The tokeninfo of this token is deleted and the failcounter is 0 self.assertEqual(token_obj.get_tokeninfo(FAILCOUNTER_EXCEEDED), None) self.assertEqual(token_obj.get_failcount(), 0) token_obj.delete_token()