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
|
from testfixtures import log_capture
from tests.base_test import BaseTest
from tests import config
from core.sessions import SessionURL
from core import modules
import utils
from core import messages
import subprocess
import tempfile
import os
def setUpModule():
subprocess.check_output("""
BASE_FOLDER="{config.base_folder}/test_file_upload2web/"
rm -rf "$BASE_FOLDER"
mkdir -p "$BASE_FOLDER/0777/0555/0777/0555"
chown www-data: -R "$BASE_FOLDER/"
chmod 0777 "$BASE_FOLDER/0777"
chmod 0777 "$BASE_FOLDER/0777/0555/0777/"
chmod 0555 "$BASE_FOLDER/0777/0555"
chmod 0555 "$BASE_FOLDER/0777/0555/0777/0555"
""".format(
config = config
), shell=True)
class UploadWeb(BaseTest):
def setUp(self):
self.session = SessionURL(
self.url,
self.password,
volatile = True
)
modules.load_modules(self.session)
# Create the folder tree
self.folders_rel = [
'test_file_upload2web/0777/',
'test_file_upload2web/0777/0555/',
'test_file_upload2web/0777/0555/0777/',
'test_file_upload2web/0777/0555/0777/0555'
]
self.run_argv = modules.loaded['file_upload2web'].run_argv
def _get_path_url(self, folder_deepness, filename):
rurl = os.path.sep.join([
config.base_url.rstrip('/'),
self.folders_rel[folder_deepness].strip('/'),
filename.lstrip('/')]
)
rpath = os.path.sep.join([
config.base_folder.rstrip('/'),
self.folders_rel[folder_deepness].strip('/'),
filename.lstrip('/')]
)
return rpath, rurl
def test_file_uploadweb(self):
# Upload lfile with a specific path
temp_file = tempfile.NamedTemporaryFile()
rpath, rurl = self._get_path_url(0, 'f1')
self.assertEqual(
self.run_argv([ temp_file.name, rpath ]),
[ ( rpath, rurl ) ]
)
temp_file.close()
# Upload lfile guessing first writable path starting from [0]
temp_file = tempfile.NamedTemporaryFile()
temp_folder, temp_filename = os.path.split(temp_file.name)
rpath, rurl = self._get_path_url(0, temp_filename)
self.assertEqual(
self.run_argv([ temp_file.name, self.folders_rel[0] ]),
[ ( rpath, rurl ) ]
)
temp_file.close()
# Upload lfile guessing first writable path from [1],
# that is [2]
temp_file = tempfile.NamedTemporaryFile()
temp_folder, temp_filename = os.path.split(temp_file.name)
rpath, rurl = self._get_path_url(2, temp_filename)
self.assertEqual(
self.run_argv([ temp_file.name, self.folders_rel[1] ]),
[ ( rpath, rurl ) ]
)
temp_file.close()
def test_file_uploadweb_content(self):
# Upload content with fake lfile guessing first writable path from [1],
# that is [2]
temp_file_name = '/tmp/nonexistant'
temp_folder, temp_filename = os.path.split(temp_file_name)
rpath, rurl = self._get_path_url(2, temp_filename)
self.assertEqual(
self.run_argv([ temp_file_name, self.folders_rel[1], '-content', '1' ]),
[ ( rpath, rurl ) ]
)
@log_capture()
def test_uploadweb_errs(self, log_captured):
# Upload a not existant lpath
self.assertIsNone(self.run_argv([ 'bogus', self.folders_rel[0] ]))
self.assertEqual(log_captured.records[-1].msg[:18],
messages.generic.error_loading_file_s_s[:18])
# Upload a not existant rpath
temp_file = tempfile.NamedTemporaryFile()
self.assertIsNone(self.run_argv([ temp_file.name, self.folders_rel[0] + '/bogus/bogus' ]))
self.assertEqual(log_captured.records[-1].msg,
messages.module_file_upload.failed_upload_file)
# Upload a not writable folder
temp_file = tempfile.NamedTemporaryFile()
self.assertIsNone(self.run_argv([ temp_file.name, self.folders_rel[3] + '/bogus' ]))
self.assertEqual(log_captured.records[-1].msg,
messages.module_file_upload.failed_upload_file)
|