This commit is contained in:
Chris Moylan 2011-07-10 22:45:27 -05:00
parent ad35dd490c
commit 9df37e8a4a

View File

@ -15,7 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import urlparse
from os import getcwd
import pkg_resources
from nose.tools import assert_equal
@ -24,20 +24,18 @@ from mediagoblin.tests.tools import setup_fresh_app, get_test_app
from mediagoblin import mg_globals
from mediagoblin import util
IMAGE_ROOT = getcwd() + '/mediagoblin/tests/test_submission/'
GOOD_JPG = 'good.jpg'
GOOD_PNG = 'good.png'
EVIL_FILE = 'evil'
EVIL_JPG = 'evil.jpg'
EVIL_PNG = 'evil.png'
GOOD_JPG = pkg_resources.resource_filename(
'mediagoblin.tests', 'test_submission/good.jpg')
GOOD_PNG = pkg_resources.resource_filename(
'mediagoblin.tests', 'test_submission/good.png')
EVIL_FILE = pkg_resources.resource_filename(
'mediagoblin.tests', 'test_submission/evil')
EVIL_JPG = pkg_resources.resource_filename(
'mediagoblin.tests', 'test_submission/evil.jpg')
EVIL_PNG = pkg_resources.resource_filename(
'mediagoblin.tests', 'test_submission/evil.png')
# TODO:
# - Define test files as globals
# - supported mime types
# - unsupported mime type with supported extension
# - Remove any imports that aren't neccessary
class TestSubmission:
def setUp(self):
self.test_app = get_test_app()
@ -79,12 +77,6 @@ class TestSubmission:
def test_normal_uploads(self):
# FYI:
# upload_files is for file uploads. It should be a list of
# [(fieldname, filename, file_content)]. You can also use
# just [(fieldname, filename)] and the file content will be
# read from disk.
# Test JPG
# --------
util.clear_test_template_context()
@ -92,15 +84,15 @@ class TestSubmission:
'/submit/', {
'title': 'Normal upload 1'
}, upload_files=[(
'file', IMAGE_ROOT + GOOD_JPG)])
'file', GOOD_JPG)])
# User should be redirected
response.follow()
assert_equal(
urlparse.urlsplit(response.location)[2],
'/submit/success/')
'/u/chris/')
assert util.TEMPLATE_TEST_CONTEXT.has_key(
'mediagoblin/submit/success.html')
'mediagoblin/user_pages/user.html')
# Test PNG
# --------
@ -109,16 +101,14 @@ class TestSubmission:
'/submit/', {
'title': 'Normal upload 2'
}, upload_files=[(
'file', IMAGE_ROOT + GOOD_PNG)])
'file', GOOD_PNG)])
response.follow()
assert_equal(
urlparse.urlsplit(response.location)[2],
'/submit/success/')
'/u/chris/')
assert util.TEMPLATE_TEST_CONTEXT.has_key(
'mediagoblin/submit/success.html')
# TODO: Test additional supported formats
'mediagoblin/user_pages/user.html')
def test_malicious_uploads(self):
@ -129,35 +119,39 @@ class TestSubmission:
'/submit/', {
'title': 'Malicious Upload 2'
}, upload_files=[(
'file', IMAGE_ROOT + EVIL_FILE)])
'file', EVIL_FILE)])
context = util.TEMPLATE_TEST_CONTEXT['mediagoblin/submit/start.html']
form = context['submit_form']
assert form.file.errors == ['The file doesn\'t seem to be an image!']
# NOTE: The following 2 tests will fail. These can be uncommented
# after http://bugs.foocorp.net/issues/324 is resolved and
# bad files are handled properly.
# Test non-supported file with .jpg extension
# -------------------------------------------
util.clear_test_template_context()
response = self.test_app.post(
'/submit/', {
'title': 'Malicious Upload 2'
}, upload_files=[(
'file', IMAGE_ROOT + EVIL_JPG)])
#util.clear_test_template_context()
#response = self.test_app.post(
# '/submit/', {
# 'title': 'Malicious Upload 2'
# }, upload_files=[(
# 'file', EVIL_JPG)])
context = util.TEMPLATE_TEST_CONTEXT['mediagoblin/submit/start.html']
form = context['submit_form']
assert form.file.errors == ['The file doesn\'t seem to be an image!']
#context = util.TEMPLATE_TEST_CONTEXT['mediagoblin/submit/start.html']
#form = context['submit_form']
#assert form.file.errors == ['The file doesn\'t seem to be an image!']
# Test non-supported file with .png extension
# -------------------------------------------
util.clear_test_template_context()
response = self.test_app.post(
'/submit/', {
'title': 'Malicious Upload 3'
}, upload_files=[(
'file', IMAGE_ROOT + EVIL_PNG)])
#util.clear_test_template_context()
#response = self.test_app.post(
# '/submit/', {
# 'title': 'Malicious Upload 3'
# }, upload_files=[(
# 'file', EVIL_PNG)])
context = util.TEMPLATE_TEST_CONTEXT['mediagoblin/submit/start.html']
form = context['submit_form']
assert form.file.errors == ['The file doesn\'t seem to be an image!']
#context = util.TEMPLATE_TEST_CONTEXT['mediagoblin/submit/start.html']
#form = context['submit_form']
#assert form.file.errors == ['The file doesn\'t seem to be an image!']