Scan files with clamdscan #77
@ -1 +0,0 @@
|
||||
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
|
@ -1,19 +1,12 @@
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
import unittest
|
||||
|
||||
from background_task.models import Task
|
||||
from django.conf import settings
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.test import TestCase, override_settings
|
||||
from django.test import TestCase
|
||||
|
||||
from common.admin import get_admin_change_path
|
||||
from common.log_entries import entries_for
|
||||
from common.tests.factories.files import FileFactory
|
||||
from files.models import File
|
||||
import files.tasks
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
@ -83,66 +76,3 @@ class FileTest(TestCase):
|
||||
response = self.client.get(path)
|
||||
|
||||
self.assertEqual(response.status_code, 200, path)
|
||||
|
||||
|
||||
@unittest.skipUnless(shutil.which('clamdscan'), 'requires clamdscan')
|
||||
@override_settings(MEDIA_ROOT='/tmp/')
|
||||
class FileScanTest(TestCase):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.temp_directory = tempfile.mkdtemp(prefix=settings.MEDIA_ROOT)
|
||||
|
||||
def tearDown(self):
|
||||
super().tearDown()
|
||||
shutil.rmtree(self.temp_directory)
|
||||
|
||||
def test_scan_flags_found_invalid(self):
|
||||
test_file_path = os.path.join(self.temp_directory, 'test_file.zip')
|
||||
test_content = (
|
||||
b'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' # noqa: W605
|
||||
)
|
||||
with open(test_file_path, 'wb+') as test_file:
|
||||
test_file.write(test_content)
|
||||
|
||||
file = FileFactory(source=test_file_path)
|
||||
|
||||
# A background task should have been created
|
||||
task = Task.objects.created_by(creator=file).first()
|
||||
self.assertIsNotNone(task)
|
||||
self.assertEqual(task.task_name, 'files.tasks.scan')
|
||||
self.assertEqual(task.task_params, f'[[], {{"file_id": {file.pk}}}]')
|
||||
|
||||
# Actually run the task as if by background runner
|
||||
task_args, task_kwargs = task.params()
|
||||
files.tasks.scan.task_function(*task_args, **task_kwargs)
|
||||
|
||||
self.assertFalse(file.validation.is_valid)
|
||||
result = file.validation.results['clamdscan']
|
||||
self.assertEqual(result['returncode'], 1)
|
||||
stdout_lines = result['stdout'].split('\n')
|
||||
self.assertIn(f'{file.source.name}: Win.Test.EICAR_HDB-1 FOUND', stdout_lines[0])
|
||||
self.assertEqual(result['stderr'], '')
|
||||
|
||||
def test_scan_flags_nothing_found_valid(self):
|
||||
test_file_path = os.path.join(self.temp_directory, 'test_file.zip')
|
||||
with open(test_file_path, 'wb+') as test_file:
|
||||
test_file.write(b'some file')
|
||||
|
||||
file = FileFactory(source=test_file_path)
|
||||
|
||||
# A background task should have been created
|
||||
task = Task.objects.created_by(creator=file).first()
|
||||
self.assertIsNotNone(task)
|
||||
self.assertEqual(task.task_name, 'files.tasks.scan')
|
||||
self.assertEqual(task.task_params, f'[[], {{"file_id": {file.pk}}}]')
|
||||
|
||||
# Actually run the task as if by background runner
|
||||
task_args, task_kwargs = task.params()
|
||||
files.tasks.scan.task_function(*task_args, **task_kwargs)
|
||||
|
||||
self.assertTrue(file.validation.is_valid)
|
||||
result = file.validation.results['clamdscan']
|
||||
self.assertEqual(result['returncode'], 0)
|
||||
stdout_lines = result['stdout'].split('\n')
|
||||
self.assertIn(f'{file.source.name}: OK', stdout_lines[0])
|
||||
self.assertEqual(result['stderr'], '')
|
||||
|
74
files/tests/test_signals.py
Normal file
74
files/tests/test_signals.py
Normal file
@ -0,0 +1,74 @@
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
import unittest
|
||||
|
||||
from background_task.models import Task
|
||||
from django.conf import settings
|
||||
from django.test import TestCase, override_settings
|
||||
|
||||
from common.tests.factories.files import FileFactory
|
||||
import files.tasks
|
||||
|
||||
|
||||
@unittest.skipUnless(shutil.which('clamdscan'), 'requires clamdscan')
|
||||
@override_settings(MEDIA_ROOT='/tmp/')
|
||||
class FileScanTest(TestCase):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.temp_directory = tempfile.mkdtemp(prefix=settings.MEDIA_ROOT)
|
||||
|
||||
def tearDown(self):
|
||||
super().tearDown()
|
||||
shutil.rmtree(self.temp_directory)
|
||||
|
||||
def test_scan_flags_found_invalid(self):
|
||||
test_file_path = os.path.join(self.temp_directory, 'test_file.zip')
|
||||
test_content = (
|
||||
b'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' # noqa: W605
|
||||
)
|
||||
with open(test_file_path, 'wb+') as test_file:
|
||||
test_file.write(test_content)
|
||||
|
||||
file = FileFactory(source=test_file_path)
|
||||
|
||||
# A background task should have been created
|
||||
task = Task.objects.created_by(creator=file).first()
|
||||
self.assertIsNotNone(task)
|
||||
self.assertEqual(task.task_name, 'files.tasks.scan')
|
||||
self.assertEqual(task.task_params, f'[[], {{"file_id": {file.pk}}}]')
|
||||
|
||||
# Actually run the task as if by background runner
|
||||
task_args, task_kwargs = task.params()
|
||||
files.tasks.scan.task_function(*task_args, **task_kwargs)
|
||||
|
||||
self.assertFalse(file.validation.is_valid)
|
||||
result = file.validation.results['clamdscan']
|
||||
self.assertEqual(result['returncode'], 1)
|
||||
stdout_lines = result['stdout'].split('\n')
|
||||
self.assertIn(f'{file.source.name}: Win.Test.EICAR_HDB-1 FOUND', stdout_lines[0])
|
||||
self.assertEqual(result['stderr'], '')
|
||||
|
||||
def test_scan_flags_nothing_found_valid(self):
|
||||
test_file_path = os.path.join(self.temp_directory, 'test_file.zip')
|
||||
with open(test_file_path, 'wb+') as test_file:
|
||||
test_file.write(b'some file')
|
||||
|
||||
file = FileFactory(source=test_file_path)
|
||||
|
||||
# A background task should have been created
|
||||
task = Task.objects.created_by(creator=file).first()
|
||||
self.assertIsNotNone(task)
|
||||
self.assertEqual(task.task_name, 'files.tasks.scan')
|
||||
self.assertEqual(task.task_params, f'[[], {{"file_id": {file.pk}}}]')
|
||||
|
||||
# Actually run the task as if by background runner
|
||||
task_args, task_kwargs = task.params()
|
||||
files.tasks.scan.task_function(*task_args, **task_kwargs)
|
||||
|
||||
self.assertTrue(file.validation.is_valid)
|
||||
result = file.validation.results['clamdscan']
|
||||
self.assertEqual(result['returncode'], 0)
|
||||
stdout_lines = result['stdout'].split('\n')
|
||||
self.assertIn(f'{file.source.name}: OK', stdout_lines[0])
|
||||
self.assertEqual(result['stderr'], '')
|
Loading…
Reference in New Issue
Block a user