add tests for mitmproxy.script.reloader

This commit is contained in:
Maximilian Hils 2016-03-18 19:03:56 +01:00
parent 898f5d10b9
commit 7e49b8c186
2 changed files with 32 additions and 3 deletions

View File

@ -1,7 +1,7 @@
import os
import sys
from watchdog.events import RegexMatchingEventHandler
if sys.platform == 'darwin':
if sys.platform == 'darwin': # pragma: no cover
from watchdog.observers.polling import PollingObserver as Observer
else:
from watchdog.observers import Observer
@ -14,8 +14,8 @@ _observers = {}
def watch(script, callback):
if script in _observers:
raise RuntimeError("Script already observed")
script_dir = os.path.dirname(os.path.abspath(script.args[0]))
script_name = os.path.basename(script.args[0])
script_dir = os.path.dirname(os.path.abspath(script.filename))
script_name = os.path.basename(script.filename)
event_handler = _ScriptModificationHandler(callback, filename=script_name)
observer = Observer()
observer.schedule(event_handler, script_dir)

View File

@ -0,0 +1,29 @@
import mock
from mitmproxy.script.reloader import watch, unwatch
from test.mitmproxy import tutils
from threading import Event
def test_simple():
with tutils.tmpdir():
with open("foo.py", "wb"):
pass
script = mock.Mock()
script.filename = "foo.py"
e = Event()
def _onchange():
e.set()
watch(script, _onchange)
with tutils.raises("already observed"):
watch(script, _onchange)
with open("foo.py", "ab") as f:
f.write(".")
assert e.wait(10)
unwatch(script)