Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
malwaredllc
GitHub Repository: malwaredllc/byob
Path: blob/master/web-gui/tests/unit/test_payload_api.py
1292 views
1
import os
2
import pytest
3
import shutil
4
5
from hashlib import md5
6
from datetime import datetime
7
from random import getrandbits
8
from buildyourownbotnet.core.dao import payload_dao
9
from ..conftest import app_client, new_user, login, cleanup
10
11
12
def test_api_payload_generate(app_client, new_user):
13
"""
14
Given an authenticated user,
15
when a POST request is sent to /api/payload/generate endpoint with valid parameters,
16
check that the payload is generated correctly and metadata is stored in the database correctly.
17
"""
18
login(app_client, new_user.username, 'test_password')
19
res = app_client.post('/api/payload/generate',
20
data={'format': 'py'},
21
follow_redirects=True,
22
headers = {"Content-Type":"application/x-www-form-urlencoded"}
23
)
24
# check request was successful
25
assert res.status_code == 200
26
27
# check payload metadata stored in database correctly
28
user_payloads = payload_dao.get_user_payloads(new_user.id)
29
assert len(user_payloads) == 1
30
user_payload = user_payloads[0]
31
# assert (datetime.utcnow() - user_payload.created).seconds <= 30
32
33
# check payload written to disk correctly
34
user_dir = os.path.join('./buildyourownbotnet/output/', new_user.username)
35
src_dir = os.path.join(user_dir, 'src')
36
user_files = os.listdir(src_dir)
37
38
# check if a new payload file has been created in the last 5 seconds
39
for f in user_files:
40
fpath = os.path.join(src_dir, f)
41
ctime = datetime.fromtimestamp(os.stat(fpath).st_ctime)
42
if (datetime.now() - ctime).seconds <= 10:
43
break
44
else:
45
pytest.fail(f"No recently created payload found in {src_dir}")
46
47
# clean up filesystem
48
shutil.rmtree(user_dir)
49
50