Mercurial > p > roundup > code
diff test/test_cgi.py @ 5973:fe334430ca07
issue2550919 - Anti-bot signup using 4 second delay
Took the code by erik forsberg and massaged it into the core.
So this is no longer needed in the tracker.
Updated devel and responsive trackers to remove timestamp.py and
update input field name.
Docs, changes and tests complete. Hopefully these tracker changes
won't cause an issue for other tests.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sat, 09 Nov 2019 00:30:37 -0500 |
| parents | b40059d7036f |
| children | 71c68961d9f4 |
line wrap: on
line diff
--- a/test/test_cgi.py Thu Nov 07 21:09:02 2019 -0500 +++ b/test/test_cgi.py Sat Nov 09 00:30:37 2019 -0500 @@ -14,7 +14,7 @@ import pytest from roundup.cgi import client, actions, exceptions -from roundup.cgi.exceptions import FormError, NotFound +from roundup.cgi.exceptions import FormError, NotFound, Redirect from roundup.exceptions import UsageError from roundup.cgi.templating import HTMLItem, HTMLRequest, NoTemplate from roundup.cgi.templating import HTMLProperty, _HTMLItem, anti_csrf_nonce @@ -22,6 +22,8 @@ from roundup import init, instance, password, hyperdb, date from roundup.anypy.strings import StringIO, u2s, b2s +from time import sleep + # For testing very simple rendering from roundup.cgi.engine_zopetal import RoundupPageTemplate @@ -1540,6 +1542,72 @@ k = self.db.keyword.getnode('2') self.assertEqual(k.name, 'newkey2') + def testRegisterAction(self): + from roundup.cgi.timestamp import pack_timestamp + + # need to set SENDMAILDEBUG to prevent + # downstream issue when email is sent on successful + # issue creation. Also delete the file afterwards + # just tomake sure that someother test looking for + # SENDMAILDEBUG won't trip over ours. + if 'SENDMAILDEBUG' not in os.environ: + os.environ['SENDMAILDEBUG'] = 'mail-test1.log' + SENDMAILDEBUG = os.environ['SENDMAILDEBUG'] + + + # missing opaqueregister + cl = self._make_client({'username':'new_user1', 'password':'secret', + '@confirm@password':'secret', 'address':'new_user@bork.bork'}, + nodeid=None, userid='2') + with self.assertRaises(FormError) as cm: + actions.RegisterAction(cl).handle() + self.assertEqual(cm.exception.args, + ('Form is corrupted, missing: opaqueregister.',)) + + # broken/invalid opaqueregister + # strings chosen to generate: + # binascii.Error Incorrect padding + # struct.error requires a string argument of length 4 + cl = self._make_client({'username':'new_user1', + 'password':'secret', + '@confirm@password':'secret', + 'address':'new_user@bork.bork', + 'opaqueregister': 'zzz' }, + nodeid=None, userid='2') + with self.assertRaises(FormError) as cm: + actions.RegisterAction(cl).handle() + self.assertEqual(cm.exception.args, ('Form is corrupted.',)) + + cl = self._make_client({'username':'new_user1', + 'password':'secret', + '@confirm@password':'secret', + 'address':'new_user@bork.bork', + 'opaqueregister': 'xyzzyzl=' }, + nodeid=None, userid='2') + with self.assertRaises(FormError) as cm: + actions.RegisterAction(cl).handle() + self.assertEqual(cm.exception.args, ('Form is corrupted.',)) + + # valid opaqueregister + cl = self._make_client({'username':'new_user1', 'password':'secret', + '@confirm@password':'secret', 'address':'new_user@bork.bork', + 'opaqueregister': pack_timestamp() }, + nodeid=None, userid='2') + # submitted too fast, so raises error + with self.assertRaises(FormError) as cm: + actions.RegisterAction(cl).handle() + self.assertEqual(cm.exception.args, + ('Responding to form too quickly.',)) + + sleep(4.1) # sleep as requested so submit will take long enough + self.assertRaises(Redirect, actions.RegisterAction(cl).handle) + + # FIXME check that email output makes sense at some point + + # clean up from email log + if os.path.exists(SENDMAILDEBUG): + os.remove(SENDMAILDEBUG) + def testserve_static_files(self): # make a client instance cl = self._make_client({})
