def test_worker_should_stop_if_someone_else_acquires_lock(monkeypatch): stream_name = "%0x" % random.randint(0, 2**64) run_calls = [] stop_calls = [] def fake_run(*args): run_calls.append(args) def fake_stop(*args): stop_calls.append(args) first = PlaylistWorker(stream_name) monkeypatch.setattr(first, 'run', fake_run) monkeypatch.setattr(first, 'stop', fake_stop) first.run_if_locking() assert 1 == len(run_calls) assert 0 == len(stop_calls) run_calls = [] second = PlaylistWorker(stream_name) monkeypatch.setattr(second, 'run', fake_run) monkeypatch.setattr(second, 'stop', fake_stop) second.run_if_locking() assert 0 == len(run_calls) assert 1 == len(stop_calls)
def run(self): playlists = discover_playlists(self.config) logging.info("Found the following playlists: %s" % playlists) combine_playlists(playlists, self.destination) for playlist, is_variant in self.get_stream_groups(playlists): worker = PlaylistWorker(playlist, is_variant) if not worker.other_is_running(): logging.debug('No worker found for playlist %s, %s' % (playlist, worker.lock.path)) self.start_worker_in_background(playlist, is_variant) else: logging.debug('Worker found for playlist %s, %s' % (playlist, worker.lock.path)) clean(self.destination, self.clean_maxage, self.ignores)
def test_second_worker_should_see_that_other_is_running(monkeypatch): stream_name = "%0x" % random.randint(0, 2**64) run_calls = [] def fake_run(*args): run_calls.append(args) def fake_stop(*args): pass first = PlaylistWorker(stream_name) monkeypatch.setattr(first, 'run', fake_run) monkeypatch.setattr(first, 'stop', fake_stop) first.run_if_locking() assert 1 == len(run_calls) second = PlaylistWorker(stream_name) assert True == second.other_is_running()
def test_lock_should_be_updated_when_run(monkeypatch): stream_name = "%0x" % random.randint(0, 2**64) run_calls = [] lock_update_calls = [] def fake_run(*args): run_calls.append(args) def fake_lock_update(*args): lock_update_calls.append(args) def fake_stop(*args): pass worker = PlaylistWorker(stream_name) monkeypatch.setattr(worker, 'run', fake_run) monkeypatch.setattr(worker, 'stop', fake_stop) monkeypatch.setattr(worker.lock, 'update_lock', fake_lock_update) worker.run_if_locking() assert 1 == len(run_calls) assert 1 == len(lock_update_calls)
import sys from hlsclient.workers.master import MasterWorker from hlsclient.workers.playlist import PlaylistWorker if __name__ == "__main__": if len(sys.argv) > 1: worker = PlaylistWorker(*sys.argv[1:]) worker.run_forever() else: master = MasterWorker() master.run_forever()