Path: blob/master/web-gui/tests/unit/test_payload_api.py
1292 views
import os1import pytest2import shutil34from hashlib import md55from datetime import datetime6from random import getrandbits7from buildyourownbotnet.core.dao import payload_dao8from ..conftest import app_client, new_user, login, cleanup91011def test_api_payload_generate(app_client, new_user):12"""13Given an authenticated user,14when a POST request is sent to /api/payload/generate endpoint with valid parameters,15check that the payload is generated correctly and metadata is stored in the database correctly.16"""17login(app_client, new_user.username, 'test_password')18res = app_client.post('/api/payload/generate',19data={'format': 'py'},20follow_redirects=True,21headers = {"Content-Type":"application/x-www-form-urlencoded"}22)23# check request was successful24assert res.status_code == 2002526# check payload metadata stored in database correctly27user_payloads = payload_dao.get_user_payloads(new_user.id)28assert len(user_payloads) == 129user_payload = user_payloads[0]30# assert (datetime.utcnow() - user_payload.created).seconds <= 303132# check payload written to disk correctly33user_dir = os.path.join('./buildyourownbotnet/output/', new_user.username)34src_dir = os.path.join(user_dir, 'src')35user_files = os.listdir(src_dir)3637# check if a new payload file has been created in the last 5 seconds38for f in user_files:39fpath = os.path.join(src_dir, f)40ctime = datetime.fromtimestamp(os.stat(fpath).st_ctime)41if (datetime.now() - ctime).seconds <= 10:42break43else:44pytest.fail(f"No recently created payload found in {src_dir}")4546# clean up filesystem47shutil.rmtree(user_dir)484950