Skip to content
Snippets Groups Projects
Commit 1ebee253 authored by Andreas Valder's avatar Andreas Valder
Browse files

added unit tests for livestreams

parent 31005d24
Branches
No related tags found
No related merge requests found
......@@ -114,7 +114,6 @@ def update_lecture_videos(jobid, jobtype, data, state, status):
@edit_handler('chapters')
def chapter_changed(table, column, value, id, user):
print('chapter_changed')
chapters = query('SELECT * FROM chapters WHERE id = ?', id)
if not chapters:
return
......
......@@ -2,6 +2,7 @@ from server import *
import traceback
import json
import random
from time import sleep
job_handlers = {}
def job_handler(*types, state='finished'):
......@@ -147,8 +148,7 @@ def jobs_schedule(hostname):
try:
query("BEGIN")
for i in query('SELECT * FROM jobs WHERE state = "ready" ORDER BY priority DESC'):
if i['type'] in hostdata['jobtypes'] and \
i['queue'] in hostdata['queues']:
if i['type'] in hostdata['jobtypes'] and i['queue'] in hostdata['queues']:
job = i
break
if not job:
......
......@@ -10,9 +10,10 @@ def livestream_thumbnail():
@app.route('/internal/streaming/legacy_auth/<server>', methods=['GET', 'POST'])
def streamauth(server=None):
internal = False
for net in config.get('FSMPI_IP_RANGES', []):
if ip_address(request.headers['X-Real-IP']) in ip_network(net):
internal = True
if 'X-Real-IP' in request.headers:
for net in config.get('FSMPI_IP_RANGES', []):
if ip_address(request.headers['X-Real-IP']) in ip_network(net):
internal = True
if request.values['app'] != 'live':
return 'Bad request', 400
if not internal:
......
......@@ -36,6 +36,7 @@ if sys.argv[0].endswith('tests.py'):
config['SQLITE_INIT_SCHEMA'] = True
config['DEBUG'] = True
config['DISABLE_SCHEDULER'] = True
config['JOBS_API_KEY'] = '1'
if config['DEBUG']:
app.jinja_env.auto_reload = True
......
......@@ -3,6 +3,7 @@
import os
import unittest
import server
import json
import flask
from flask import url_for
......@@ -210,6 +211,41 @@ class VideoTestCase(unittest.TestCase):
assert r.status_code == 302
assert url_for('embed', id='4105', course='14ws-ex3') in r.data.decode()
def test_livestream(self):
with self.app as c:
# fails because no ip is sent
r = self.app.get('/internal/streaming/legacy_auth', data={'app': 'live', 'call': 'publish', 'pass': 'caisoh8aht0wuSu', 'lecture': 7011, 'name': '16ss-dsal'})
assert r.status_code == 403
r = self.app.get('/internal/streaming/legacy_auth/testserver', data={'app': 'live', 'call': 'publish', 'pass': 'caisoh8aht0wuSu', 'lecture': 6981, 'name': '15ws-afi'}, headers={'X-Real-IP': '137.226.35.193'})
assert r.status_code == 200
# test for livestream job
r = self.app.post('/internal/jobs/api/worker/test/schedule', data=json.dumps({'jobtypes': ['simple_live_transcode'], 'queues': ['default'], 'apikey': '1'}), content_type='application/json')
assert r.status_code == 200
jobdata = json.loads(json.loads(r.data.decode())['data'])
assert jobdata.get('src') == 'rtmp://testserver/live/15ws-afi'
# test for thumbnail job
import livestreams
livestreams.livestream_thumbnail()
r = self.app.post('/internal/jobs/api/worker/test/schedule', data=json.dumps({'jobtypes': ['thumbnail'], 'queues': ['default'], 'apikey': '1'}), content_type='application/json')
assert r.status_code == 200
jobdata = json.loads(json.loads(r.data.decode())['data'])
assert jobdata.get('lectureid') == '6981'
assert jobdata.get('path') == 'pub/hls/15ws-afi.m3u8'
r = self.app.get('/internal/streaming/legacy_auth/testserver', data={'app': 'live', 'call': 'publish_done', 'pass': 'caisoh8aht0wuSu', 'lecture': 6981, 'name': '15ws-afi'}, headers={'X-Real-IP': '137.226.35.193'})
assert r.status_code == 200
# test if there are more jobs
r = self.app.post('/internal/jobs/api/worker/test/schedule', data=json.dumps({'jobtypes': ['simple_live_transcode'], 'queues': ['default'], 'apikey': '1'}), content_type='application/json')
assert r.status_code == 503
# test if job was cancled
r = self.app.post('/internal/jobs/api/job/1/ping', data={'apikey': '1', 'host': 'test', 'status': '{}', 'state': '{}'})
assert r.status_code == 205
if __name__ == '__main__':
unittest.main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment