Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2834)

Unified Diff: appengine/monorail/framework/test/actionlimit_test.py

Issue 1868553004: Open Source Monorail (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « appengine/monorail/framework/test/__init__.py ('k') | appengine/monorail/framework/test/alerts_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: appengine/monorail/framework/test/actionlimit_test.py
diff --git a/appengine/monorail/framework/test/actionlimit_test.py b/appengine/monorail/framework/test/actionlimit_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..707c5c6b1c72a32437b9206731ca389b33c948cc
--- /dev/null
+++ b/appengine/monorail/framework/test/actionlimit_test.py
@@ -0,0 +1,165 @@
+# Copyright 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is govered by a BSD-style
+# license that can be found in the LICENSE file or at
+# https://developers.google.com/open-source/licenses/bsd
+
+"""Tests for actionlimit module."""
+
+import time
+import unittest
+
+from framework import actionlimit
+from proto import user_pb2
+
+
+class ActionLimitTest(unittest.TestCase):
+
+ def testNeedCaptchaNoUser(self):
+ action = actionlimit.ISSUE_COMMENT
+ self.assertFalse(actionlimit.NeedCaptcha(None, action))
+
+ def testNeedCaptchaAuthUserNoPreviousActions(self):
+ action = actionlimit.ISSUE_COMMENT
+ user = user_pb2.User()
+ self.assertFalse(actionlimit.NeedCaptcha(user, action))
+
+ def testNeedCaptchaAuthUserLifetimeExcessiveActivityException(self):
+ action = actionlimit.ISSUE_COMMENT
+ user = user_pb2.User()
+ life_max = actionlimit.ACTION_LIMITS[action][3]
+
+ for _i in range(0, life_max):
+ actionlimit.CountAction(user, action)
+
+ self.assertRaises(
+ actionlimit.ExcessiveActivityException,
+ actionlimit.NeedCaptcha, user, action)
+
+ def testNeedCaptchaAuthUserLifetimeIgnoresTimeout(self):
+ action = actionlimit.ISSUE_COMMENT
+ user = user_pb2.User()
+ (period, _soft_limit, _hard_limit,
+ life_max) = actionlimit.ACTION_LIMITS[action]
+ now = int(time.time())
+ later = now + period + 1 # a future in which our timestamp is expired
+
+ for _i in range(0, life_max):
+ actionlimit.CountAction(user, action, now=now)
+
+ self.assertRaises(
+ actionlimit.ExcessiveActivityException,
+ actionlimit.NeedCaptcha, user, action, now=later)
+
+ # TODO(jrobbins): write a soft limit captcha test.
+
+ def testNeedCaptchaAuthUserHardLimitExcessiveActivityException(self):
+ action = actionlimit.ISSUE_COMMENT
+ user = user_pb2.User()
+ (_period, _soft_limit, hard_limit,
+ _life_max) = actionlimit.ACTION_LIMITS[action]
+
+ for _i in range(0, hard_limit):
+ actionlimit.CountAction(user, action)
+
+ self.assertRaises(
+ actionlimit.ExcessiveActivityException,
+ actionlimit.NeedCaptcha, user, action)
+
+ def testNeedCaptchaAuthUserHardLimitRespectsTimeout(self):
+ action = actionlimit.ISSUE_COMMENT
+ user = user_pb2.User()
+ (period, _soft_limit, hard_limit,
+ _life_max) = actionlimit.ACTION_LIMITS[action]
+ now = int(time.time())
+ later = now + period + 1 # a future in which our timestamp is expired
+
+ for _i in range(0, hard_limit):
+ actionlimit.CountAction(user, action, now=now)
+
+ # if we didn't pass later, we'd get an exception
+ self.assertFalse(actionlimit.NeedCaptcha(user, action, now=later))
+
+ def testNeedCaptchaNoLifetimeLimit(self):
+ action = actionlimit.ISSUE_COMMENT
+ user = user_pb2.User()
+ life_max = actionlimit.ACTION_LIMITS[action][3]
+ actionlimit.GetLimitPB(user, action).lifetime_count = life_max + 1
+
+ self.assertRaises(
+ actionlimit.ExcessiveActivityException,
+ actionlimit.NeedCaptcha, user, action, skip_lifetime_check=False)
+ self.assertFalse(
+ actionlimit.NeedCaptcha(user, action, skip_lifetime_check=True))
+
+ def testCountActionResetRecentActions(self):
+ action = actionlimit.ISSUE_COMMENT
+ user = user_pb2.User()
+ limit = actionlimit.GetLimitPB(user, action)
+ limit.recent_count = 10
+ limit.reset_timestamp = 11
+
+ limit = actionlimit.GetLimitPB(user, action)
+ self.assertEqual(10, limit.recent_count)
+ self.assertEqual(11, limit.reset_timestamp)
+
+ actionlimit.ResetRecentActions(user, action)
+
+ limit = actionlimit.GetLimitPB(user, action)
+ self.assertEqual(0, limit.recent_count)
+ self.assertEqual(0, limit.reset_timestamp)
+
+ def testCountActionIncrementsRecentCount(self):
+ action = actionlimit.ISSUE_COMMENT
+ user = user_pb2.User()
+ (_period, soft_limit, _hard_limit,
+ _life_max) = actionlimit.ACTION_LIMITS[action]
+
+ for i in range(1, soft_limit):
+ actionlimit.CountAction(user, action)
+ limit = actionlimit.GetLimitPB(user, action)
+ self.assertEqual(i, limit.recent_count)
+ self.assertEqual(i, limit.lifetime_count)
+
+ def testCountActionPeriodExpiration(self):
+ action = actionlimit.ISSUE_COMMENT
+ user = user_pb2.User()
+ (period, soft_limit, _hard_limit,
+ _life_max) = actionlimit.ACTION_LIMITS[action]
+ now = int(time.time())
+ later = now + period + 1 # a future in which our timestamp is expired
+
+ for i in range(1, soft_limit):
+ actionlimit.CountAction(user, action, now=now)
+ limit = actionlimit.GetLimitPB(user, action)
+ self.assertEqual(i, limit.recent_count)
+ self.assertEqual(i, limit.lifetime_count)
+
+ actionlimit.CountAction(user, action, now=now)
+ self.assertEqual(soft_limit, limit.recent_count)
+ self.assertEqual(soft_limit, limit.lifetime_count)
+
+ actionlimit.CountAction(user, action, now=later)
+ self.assertEqual(1, limit.recent_count)
+ self.assertEqual(soft_limit + 1, limit.lifetime_count)
+
+ def testCustomizeLifetimeLimit(self):
+ user = user_pb2.User()
+
+ self.assertIsNone(user.get_assigned_value('issue_comment_limit'))
+ actionlimit.CustomizeLimit(user, actionlimit.ISSUE_COMMENT, 10, 100, 500)
+ self.assertIsNotNone(user.get_assigned_value('issue_comment_limit'))
+ limit = user.issue_comment_limit
+
+ # sets the specified limit
+ self.assertIsNotNone(limit.get_assigned_value('lifetime_limit'))
+ self.assertEqual(500, limit.lifetime_limit)
+ self.assertEqual(10, limit.period_soft_limit)
+ self.assertEqual(100, limit.period_hard_limit)
+
+ # sets initial values to zero
+ self.assertEqual(0, limit.recent_count)
+ self.assertEqual(0, limit.reset_timestamp)
+
+
+if __name__ == '__main__':
+ unittest.main()
« no previous file with comments | « appengine/monorail/framework/test/__init__.py ('k') | appengine/monorail/framework/test/alerts_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698