#!/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() url = "https://m.media-amazon.com/images/G/01/csm/showads.v2.js" 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() url = "https://m.media-amazon.com/images/G/01/csm/showads.v2.js" 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")