From afdfaa15da3c40d44f18563a8beeb8c499823524 Mon Sep 17 00:00:00 2001 From: Kevin Chung Date: Thu, 6 Dec 2018 20:43:14 -0500 Subject: [PATCH] Fix CTF resets in mysql (#785) * Extend test for CTFd resets and fix issue in MySQL * Expand reset test and fix helper for fails and tracking --- CTFd/admin/__init__.py | 6 +++--- tests/admin/test_config.py | 17 +++++++++++++---- tests/helpers.py | 6 +++--- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/CTFd/admin/__init__.py b/CTFd/admin/__init__.py index 9bec4d7a..82d629a1 100644 --- a/CTFd/admin/__init__.py +++ b/CTFd/admin/__init__.py @@ -176,12 +176,12 @@ def reset(): if request.method == 'POST': # Truncate Users, Teams, Submissions, Solves, Notifications, Awards, Unlocks, Tracking Tracking.query.delete() - Users.query.delete() - Teams.query.delete() - Submissions.query.delete() Solves.query.delete() + Submissions.query.delete() Awards.query.delete() Unlocks.query.delete() + Users.query.delete() + Teams.query.delete() set_config('setup', False) db.session.commit() cache.clear() diff --git a/tests/admin/test_config.py b/tests/admin/test_config.py index c031be11..64d10b7b 100644 --- a/tests/admin/test_config.py +++ b/tests/admin/test_config.py @@ -1,5 +1,6 @@ from CTFd.models import Users, Challenges from tests.helpers import * +import random def test_get_admin_config(): @@ -16,15 +17,20 @@ def test_reset(): app = create_ctfd() with app.app_context(): base_user = 'user' - for x in range(10): - user = base_user + str(x) - user_email = user + "@ctfd.io" - gen_user(app.db, name=user, email=user_email) for x in range(10): chal = gen_challenge(app.db, name='chal_name{}'.format(x)) gen_flag(app.db, challenge_id=chal.id, content='flag') + for x in range(10): + user = base_user + str(x) + user_email = user + "@ctfd.io" + user_obj = gen_user(app.db, name=user, email=user_email) + gen_award(app.db, user_id=user_obj.id) + gen_solve(app.db, user_id=user_obj.id, challenge_id=random.randint(1, 10)) + gen_fail(app.db, user_id=user_obj.id, challenge_id=random.randint(1, 10)) + gen_tracking(app.db, user_id=user_obj.id) + assert Users.query.count() == 11 # 11 because of the first admin user assert Challenges.query.count() == 10 @@ -39,4 +45,7 @@ def test_reset(): assert Users.query.count() == 0 assert Challenges.query.count() == 10 + assert Solves.query.count() == 0 + assert Fails.query.count() == 0 + assert Tracking.query.count() == 0 destroy_ctfd(app) diff --git a/tests/helpers.py b/tests/helpers.py index 5a9e61ff..6ac9d384 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -186,15 +186,15 @@ def gen_solve(db, user_id, team_id=None, challenge_id=None, ip='127.0.0.1', prov return solve -def gen_fail(db, user_id, team_id=None, challenge_id=None, ip='127.0.0.1', content='wrongkey', **kwargs): - fail = Fails(user_id=user_id, team_id=team_id, challenge_id=challenge_id, ip=ip, content=content) +def gen_fail(db, user_id, team_id=None, challenge_id=None, ip='127.0.0.1', provided='wrongkey', **kwargs): + fail = Fails(user_id=user_id, team_id=team_id, challenge_id=challenge_id, ip=ip, provided=provided, **kwargs) fail.date = datetime.datetime.utcnow() db.session.add(fail) db.session.commit() return fail -def gen_tracking(db, ip, user_id, **kwargs): +def gen_tracking(db, user_id=None, ip='127.0.0.1', **kwargs): tracking = Tracking(ip=ip, user_id=user_id, **kwargs) db.session.add(tracking) db.session.commit()