Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

#!/usr/bin/env python
import datetime
import os
from builtins import Exception
import mozinfo
import mozunit
import requests
from mozproxy import get_playback
from support import tempdir
here = os.path.dirname(__file__)
os.environ["MOZPROXY_DIR"] = os.path.join(here, "files")
def get_status_code(url, playback):
response = requests.get(
url=url, proxies={"http": "http://%s:%s/" % (playback.host, playback.port)}
)
return response.status_code
def test_record_and_replay(*args):
# test setup
basename = "recording"
suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
filename = "_".join([basename, suffix])
recording_file = os.path.join(here, "files", ".".join([filename, "zip"]))
# Record part
config = {
"playback_tool": "mitmproxy",
"recording_file": recording_file,
"playback_version": "8.1.1",
"platform": mozinfo.os,
"run_local": "MOZ_AUTOMATION" not in os.environ,
"binary": "firefox",
"app": "firefox",
"host": "127.0.0.1",
"record": True,
}
with tempdir() as obj_path:
config["obj_path"] = obj_path
record = get_playback(config)
assert record is not None
try:
record.start()
assert get_status_code(url, record) == 200
finally:
record.stop()
# playback part
config["record"] = False
config["recording_file"] = None
config["playback_files"] = [recording_file]
playback = get_playback(config)
assert playback is not None
try:
playback.start()
assert get_status_code(url, playback) == 200
finally:
playback.stop()
# Cleanup
try:
os.remove(recording_file)
os.remove(os.path.join("distribution", "policies.json"))
except Exception:
pass
if __name__ == "__main__":
mozunit.main(runwith="pytest")