Skip to content

Commit

Permalink
Merge branch 'open_smp' of github.com:univlorraine/Esup-Pod into open…
Browse files Browse the repository at this point in the history
…_smp
  • Loading branch information
mattbild committed Apr 15, 2024
2 parents 5a4e746 + f22a2c1 commit e258803
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 37 deletions.
6 changes: 3 additions & 3 deletions pod/recorder/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,9 @@ def test_clean_method(self):
recorder1.credentials_login = ""
with self.assertRaises(Exception) as context:
recorder1.clean()
self.assertTrue('credentials_password' in str(context.exception))
self.assertTrue('credentials_login' in str(context.exception))
self.assertTrue('salt' in str(context.exception))
self.assertTrue("credentials_password" in str(context.exception))
self.assertTrue("credentials_login" in str(context.exception))
self.assertTrue("salt" in str(context.exception))

def test_ipunder(self):
recorder1 = Recorder.objects.get(id=1)
Expand Down
66 changes: 44 additions & 22 deletions pod/recorder/tests/test_utils.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
"""Unit tests for recorder utils."""

import os
import time
from xml.dom import minidom
Expand All @@ -9,8 +10,16 @@

from pod.video.models import Type
from ..models import Recorder, Recording
from ..utils import add_comment, studio_clean_old_entries, get_id_media, create_xml_element, \
create_digest_auth_response, get_auth_headers_as_dict, digest_is_valid, compute_digest
from ..utils import (
add_comment,
studio_clean_old_entries,
get_id_media,
create_xml_element,
create_digest_auth_response,
get_auth_headers_as_dict,
digest_is_valid,
compute_digest,
)
from ...settings import BASE_DIR

MEDIA_ROOT = getattr(settings, "MEDIA_ROOT", os.path.join(BASE_DIR, "media"))
Expand Down Expand Up @@ -42,7 +51,7 @@ def setUp(self):
type=v_type,
source_file=source_file,
recorder=recorder1,
comment="line1"
comment="line1",
)
recording.save()

Expand Down Expand Up @@ -99,17 +108,17 @@ def test_clean_old_files(self):

def test_get_id_media(self):
# Test with no data
request = RequestFactory().post('/')
request = RequestFactory().post("/")
id_media = get_id_media(request)
self.assertIsNone(id_media)

# Test with invalid data
request = RequestFactory().post('/', {'mediaPackage': ''})
request = RequestFactory().post("/", {"mediaPackage": ""})
id_media = get_id_media(request)
self.assertIsNone(id_media)

# Test with invalid data
request = RequestFactory().post('/', {'mediaPackage': '{}'})
request = RequestFactory().post("/", {"mediaPackage": "{}"})
id_media = get_id_media(request)
self.assertIsNone(id_media)

Expand All @@ -119,7 +128,7 @@ def test_get_id_media(self):
<other_tag>xxx</other_tag>
</mediapackage>
"""
request = RequestFactory().post('/', {'mediaPackage': media_package_xml})
request = RequestFactory().post("/", {"mediaPackage": media_package_xml})
id_media = get_id_media(request)
self.assertEqual(id_media, "1111")

Expand Down Expand Up @@ -147,7 +156,12 @@ def test_create_xml_element(self):
url_text = "https://example.com/audio.mp3"
opencast_filename = "audio.mp3"
element = create_xml_element(
mediaPackage_content, element_name, type_name, mimetype, url_text, opencast_filename
mediaPackage_content,
element_name,
type_name,
mimetype,
url_text,
opencast_filename,
)

# Check that the element is created correctly
Expand Down Expand Up @@ -196,62 +210,62 @@ def setUp(self):
print(" ---> SetUp of UtilsTestCase: OK!")

def test_create_digest_auth_response(self):
request = RequestFactory().get('/')
request = RequestFactory().get("/")

# test 403
request.META['REMOTE_ADDR'] = '999.99.99.99'
request.META["REMOTE_ADDR"] = "999.99.99.99"
response = create_digest_auth_response(request)
self.assertEqual(response.status_code, 403)

# test 401
recorder = Recorder.objects.get(id=1)
request.META['REMOTE_ADDR'] = recorder.address_ip
request.META["REMOTE_ADDR"] = recorder.address_ip
response = create_digest_auth_response(request)

self.assertEqual(response.status_code, 401)
self.assertTrue('WWW-Authenticate' in response)
self.assertIn(recorder.salt, response['WWW-Authenticate'])
self.assertTrue("WWW-Authenticate" in response)
self.assertIn(recorder.salt, response["WWW-Authenticate"])

print(" ---> test_create_digest_auth_response of DigestTestCase: OK!")

def test_get_auth_headers_as_dict(self):
# test no auth_headers
request = RequestFactory().get('/')
request = RequestFactory().get("/")
response = get_auth_headers_as_dict(request)
self.assertEqual(response, {})

# headers with key Authorization
header = {"HTTP_Authorization": 'a="1", b="2"'}
request = RequestFactory().get('/', {}, **header)
request = RequestFactory().get("/", {}, **header)
response = get_auth_headers_as_dict(request)
self.assertEqual(response, {"a": "1", "b": "2"})

print(" ---> test_get_auth_headers_as_dict of DigestTestCase: OK!")

def test_digest_is_valid(self):
# test no auth_headers
request = RequestFactory().get('/')
request = RequestFactory().get("/")
response = digest_is_valid(request)
self.assertFalse(response)

# request with Authorization header but needed keys missing (missing data to compute hash)
header = {"HTTP_Authorization": 'a="1"'}
request = RequestFactory().get('/', {}, **header)
request = RequestFactory().get("/", {}, **header)
response = digest_is_valid(request)
self.assertFalse(response)

# request with Authorization header having keys
header = {"HTTP_Authorization": 'username="", realm="", uri="", response=""'}
request = RequestFactory().get('/', {}, **header)
request = RequestFactory().get("/", {}, **header)

# test ip does not match any Recorder address_ip
request.META['REMOTE_ADDR'] = '999.99.99.99'
request.META["REMOTE_ADDR"] = "999.99.99.99"
response = digest_is_valid(request)
self.assertFalse(response)

# test ip match but recorder.credentials_login is wrong
recorder = Recorder.objects.get(id=1)
request.META['REMOTE_ADDR'] = recorder.address_ip
request.META["REMOTE_ADDR"] = recorder.address_ip
response = digest_is_valid(request)
self.assertFalse(response)

Expand All @@ -267,11 +281,19 @@ def test_digest_is_valid(self):
# Request Ip and Username match Recorder address_ip and credentials_login
# Computed Hash sent by the client must be the same as th one calculated by the server
header = {
"HTTP_Authorization": 'username="' + lg + '",realm="' + rlm + '",uri="' + uri + '",response="' + cpt + '"'
"HTTP_Authorization": 'username="'
+ lg
+ '",realm="'
+ rlm
+ '",uri="'
+ uri
+ '",response="'
+ cpt
+ '"'
}

request = RequestFactory().get(uri, {}, **header)
request.META['REMOTE_ADDR'] = recorder.address_ip
request.META["REMOTE_ADDR"] = recorder.address_ip
response = digest_is_valid(request)
self.assertTrue(response)
print(" ---> test_digest_is_valid of DigestTestCase: OK!")
16 changes: 7 additions & 9 deletions pod/recorder/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,8 @@ def test_recorder_notify(self):

response = self.client.get(
url + "?key=abc&mediapath"
"=/some/path&recordingPlace=16_3_10_37"
"&course_title=title"
"=/some/path&recordingPlace=16_3_10_37"
"&course_title=title"
)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b"nok : key is not valid")
Expand All @@ -153,7 +153,7 @@ def test_recorder_notify(self):
m.update(record.ipunder().encode("utf-8") + record.salt.encode("utf-8"))
response = self.client.get(
url + "?key=" + m.hexdigest() + "&mediapath=/some/path&recordingPlace"
"=16_3_10_37&course_title=title"
"=16_3_10_37&course_title=title"
)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b"ok")
Expand Down Expand Up @@ -296,9 +296,7 @@ def test_studio_ingest_createMediaPackage(self):
mediapackage = mediaPackage_content.getElementsByTagName("mediapackage")[0]
self.assertEqual(mediapackage.getAttribute("id"), idMedia)

print(
" --> test_studio_ingest_createMediaPackage of StudioPodTestView", ": OK!"
)
print(" --> test_studio_ingest_createMediaPackage of StudioPodTestView", ": OK!")

def test_studio_ingest_createMediaPackage_with_presenter(self):
self.client = Client()
Expand Down Expand Up @@ -776,21 +774,21 @@ def test_digest_hosts_json(self):

def test_digest_capture_admin_config(self):
self.client = Client()
url = reverse("recorder_digest:capture_admin_config", kwargs={'name': 'test'})
url = reverse("recorder_digest:capture_admin_config", kwargs={"name": "test"})
response = self.client.post(url)
self.assertEqual(response.status_code, 403)
print(" ---> test_digest_capture_admin_config of StudioDigestViews: OK!")

def test_digest_capture_admin(self):
self.client = Client()
url = reverse("recorder_digest:capture_admin_agent", kwargs={'name': 'test'})
url = reverse("recorder_digest:capture_admin_agent", kwargs={"name": "test"})
response = self.client.post(url)
self.assertEqual(response.status_code, 403)
print(" ---> test_digest_capture_admin of StudioDigestViews: OK!")

def test_digest_capture_admin_recordings(self):
self.client = Client()
url = reverse("recorder_digest:capture_admin_recordings", kwargs={'name': 'test'})
url = reverse("recorder_digest:capture_admin_recordings", kwargs={"name": "test"})
response = self.client.get(url)
self.assertEqual(response.status_code, 403)
print(" ---> test_digest_capture_admin_recordings of StudioDigestViews: OK!")
Expand Down
4 changes: 1 addition & 3 deletions pod/recorder/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,7 @@ def handle_upload_file(request, element_name, mimetype, tag_name):
idMedia = get_id_media(request)
if request.POST.get("flavor", "") != "":
type_name = request.POST.get("flavor")
mediaPackage_dir = os.path.join(
MEDIA_ROOT, OPENCAST_FILES_DIR, "%s" % idMedia
)
mediaPackage_dir = os.path.join(MEDIA_ROOT, OPENCAST_FILES_DIR, "%s" % idMedia)

mediaPackage_content, mediaPackage_file = get_media_package_content(
mediaPackage_dir, idMedia
Expand Down

0 comments on commit e258803

Please sign in to comment.