-
Notifications
You must be signed in to change notification settings - Fork 2
/
test_clamav.py
137 lines (106 loc) · 5.8 KB
/
test_clamav.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# -*- coding: utf-8 -*-
from datetime import datetime
import logging
import os
import magic
import requests
from selenium.common.exceptions import WebDriverException
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from django.conf import settings
from django.urls import reverse
from django.test import override_settings, tag
from browser.models import Upload
from tests.base_selenium_test_case import SeleniumBaseTestCase
from tests.test_uploads import TEST_BZ_PUB_MED_SMALL_ARCHIVE, TEST_GZIP_PUB_MED_SMALL_ARCHIVE, TEST_BZ_OVID_ARCHIVE, TEST_GZIP_OVID_ARCHIVE
logger = logging.getLogger(__name__)
BASE_DIR = os.path.dirname(__file__)
VIRUS_TXT_FILE_URL = "https://secure.eicar.org/eicar.com.txt"
VIRUS_ZIP_FILE_URL = "https://secure.eicar.org/eicar_com.zip"
VIRUS_DEEP_ZIP_FILE_URL = "https://secure.eicar.org/eicarcom2.zip"
@tag('clamav', 'selenium-test')
class ScanOnUploadInterface(SeleniumBaseTestCase):
fixtures = ['test_searching_mesh_terms.json']
def _upload_file(self, url, file_path):
self.driver.get("%s%s" % (self.live_server_url, url))
self.driver.find_element(By.ID, "id_abstracts_upload").send_keys(file_path)
self.driver.find_element(By.ID, "upload_button").send_keys(Keys.RETURN)
def _assert_file_upload(self, url, file_path):
logger.debug('_assert_file_upload %s %s ' % (url, file_path))
previous_upload_count = Upload.objects.all().count()
self._upload_file(url, file_path)
self.assertEqual(Upload.objects.all().count(), previous_upload_count + 1)
uploaded_file = Upload.objects.all().order_by("id").last().abstracts_upload.file
mime_type = magic.from_buffer(uploaded_file.read(2048), mime=True)
self.assertEqual(mime_type, "text/plain")
def _assert_virus_scanning(self, upload_url, virus_file_url):
file_path = BASE_DIR + "/test_virus_file"
response = requests.get(virus_file_url)
with open(file_path, 'wb') as f:
f.write(response.content)
previous_upload_count = Upload.objects.all().count()
self._upload_file(upload_url, file_path)
# Verify no new Upload objects were created.
self.assertEqual(Upload.objects.all().count(), previous_upload_count)
# Assert reason for lack of upload
self.assertTrue("File is infected with malware" in self.driver.page_source)
# delete virus file
os.remove(file_path)
class ScanOnArchiveUploadTestCase(ScanOnUploadInterface):
"""Test ClamAV enabled with archive abstract files"""
@tag('upload')
def test_upload_pub_med_bz_archive(self):
self._assert_file_upload(url=reverse("search_pubmed"), file_path=TEST_BZ_PUB_MED_SMALL_ARCHIVE)
@tag('upload')
def test_upload_pub_med_gzip_archive(self):
self._assert_file_upload(url=reverse("search_pubmed"), file_path=TEST_GZIP_PUB_MED_SMALL_ARCHIVE)
@tag('upload')
def test_upload_ovid_bz_archive(self):
self._assert_file_upload(url=reverse("search_ovid_medline"), file_path=TEST_BZ_OVID_ARCHIVE)
@tag('upload')
def test_upload_ovid_gzip_archive(self):
self._assert_file_upload(url=reverse("search_ovid_medline"), file_path=TEST_GZIP_OVID_ARCHIVE)
@tag('upload')
def test_upload_sample_a_pub_med_gzip_archive(self):
abstract_file_path = os.path.join(BASE_DIR, "08-15-08-insulin-may-27-2019.txt.gz")
self._assert_file_upload(url=reverse("search_ovid_medline"), file_path=abstract_file_path)
@tag('upload')
def test_upload_sample_b_ovid_bz_archive(self):
abstract_file_path = os.path.join(BASE_DIR, "07-32-54-exercise-inflamm-breast-cancer-may-3-2019-expanded-terms.txt.gz")
self._assert_file_upload(url=reverse("search_ovid_medline"), file_path=abstract_file_path)
@tag('scanning')
def test_scanning_ovid_zip_files(self):
"Trigger virus scanner file uploads with EICAR zip with OVID upload form."
self._assert_virus_scanning(reverse("search_ovid_medline"), VIRUS_ZIP_FILE_URL)
@tag('scanning')
def test_scanning_ovid_deep_zip_files(self):
"Trigger virus scanner file uploads with EICAR deep zip with OVID upload form."
self._assert_virus_scanning(reverse("search_ovid_medline"), VIRUS_DEEP_ZIP_FILE_URL)
@tag('scanning')
def test_scanning_pubmed_zip_files(self):
"Trigger virus scanner file uploads with EICAR zip with PubMed upload form."
self._assert_virus_scanning(reverse("search_pubmed"), VIRUS_ZIP_FILE_URL)
@tag('scanning')
def test_scanning_oubmed_deep_zip_files(self):
"Trigger virus scanner file uploads with EICAR deep zip with PubMed upload form."
self._assert_virus_scanning(reverse("search_pubmed"), VIRUS_DEEP_ZIP_FILE_URL)
class ScanOnUploadTestCase(ScanOnUploadInterface):
"""Test ClamAV enabled with text abstract upload files"""
@tag('upload')
def test_upload_ovid_file(self):
"Test can upload OVID abstract files"
file_path = os.path.join(BASE_DIR, 'test-abstract-ovid-test-sample-5.txt')
self._assert_file_upload(url=reverse("search_ovid_medline"), file_path=file_path)
@tag('upload')
def test_upload_pubmed_file(self):
"Test can upload PubMed abstract files"
file_path = os.path.join(BASE_DIR, 'test-abstract-pubmed-1.txt')
self._assert_file_upload(url=reverse("search_pubmed"), file_path=file_path)
@tag('scanning')
def test_scanning_ovid_txt_files(self):
"Trigger virus scanner file uploads with EICAR txt with OVID upload form."
self._assert_virus_scanning(reverse("search_ovid_medline"), VIRUS_TXT_FILE_URL)
@tag('scanning')
def test_scanning_pubmed_txt_files(self):
"Trigger virus scanner file uploads with EICAR txt with PubMed upload form."
self._assert_virus_scanning(reverse("search_pubmed"), VIRUS_TXT_FILE_URL)