Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion qtp_job_output_folder/summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def _folder_listing(folder):
for f in glob(f'{folder}/*'):
if isdir(f):
results.append(('folder', f))
results.extend(_folder_listing(f'{f}/*'))
results.extend(_folder_listing(f))
else:
results.append(('file', f))
return results
Expand Down
29 changes: 25 additions & 4 deletions qtp_job_output_folder/tests/test_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,19 @@
class PluginTests(PluginTestCase):
def setUp(self):
self.out_dir = mkdtemp()
self.source_dir = join(mkdtemp(), 'test_data')
# need to refer to a valid mountpoint (here: job) and a directory
# that exists in Qiita DB as 'directory' as fetching via https will
# fail otherwise. To avoid collisions, a mid-level directory name is
# a random string (= _get_candidate_names())
self.mountpoint = 'job'
# only adapt filepaths
self.source_dir = self.deposite_in_qiita_basedir(
join(self.mountpoint, '2_test_folder'), True)
source = join(dirname(abspath(getfile(currentframe()))), 'test_data')
copytree(source, self.source_dir)
self._clean_up_files = [self.out_dir]
self.qclient.push_file_to_central(self.source_dir)
self._clean_up_files = [self.out_dir, dirname(self.source_dir)]
self._clean_up_remote_files = []

def tearDown(self):
for fp in self._clean_up_files:
Expand All @@ -35,6 +44,8 @@ def tearDown(self):
rmtree(fp)
else:
remove(fp)
for fp in self._clean_up_remote_files:
self.qclient.delete_file_from_central(fp)

def _wait_job(self, job_id):
for i in range(20):
Expand All @@ -47,7 +58,8 @@ def _wait_job(self, job_id):
def test_plugin_summary(self):
# creating new artifact
files = [(self.source_dir, 'directory')]
data = {'filepaths': dumps(files), 'type': 'job-output-folder',
atype = 'job-output-folder'
data = {'filepaths': dumps(files), 'type': atype,
'name': "A name", 'data_type': 'Job Output Folder'}
aid = self.qclient.post('/apitest/artifact/', data=data)['artifact']
data = {'command': dumps(['qtp-job-output-folder', __version__,
Expand All @@ -57,17 +69,22 @@ def test_plugin_summary(self):
job_id = self.qclient.post(
'/apitest/processing_job/', data=data)['job']
plugin("https://localhost:21174", job_id, self.out_dir)
fp_target_dir = '%s/%s' % (self.source_dir.split(
'/%s/' % self.mountpoint)[0], atype)
self._clean_up_remote_files.append(fp_target_dir)
self._clean_up_files.append(fp_target_dir)
self._wait_job(job_id)
obs = self.qclient.get_job_info(job_id)
self.assertEqual(obs['status'], 'success')

def test_plugin_validate(self):
# test success
files = {'directory': [self.source_dir]}
atype = 'job-output-folder'
parameters = {'template': None,
'analysis': None,
'files': dumps(files),
'artifact_type': 'job-output-folder'}
'artifact_type': atype}
data = {
'command': dumps(
['qtp-job-output-folder', __version__, 'Validate']),
Expand All @@ -76,6 +93,10 @@ def test_plugin_validate(self):
job_id = self.qclient.post(
'/apitest/processing_job/', data=data)['job']
plugin("https://localhost:21174", job_id, self.out_dir)
fp_target_dir = '%s/%s' % (self.source_dir.split(
'/%s/' % self.mountpoint)[0], atype)
self._clean_up_remote_files.append(fp_target_dir)
self._clean_up_files.append(fp_target_dir)
self._wait_job(job_id)
obs = self.qclient.get_job_info(job_id)
self.assertEqual(obs['status'], 'success')
Expand Down
61 changes: 39 additions & 22 deletions qtp_job_output_folder/tests/test_summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,20 @@
class SummaryTests(PluginTestCase):
def setUp(self):
self.out_dir = mkdtemp()
self.source_dir = join(mkdtemp(), 'test_data')
# need to refer to a valid mountpoint (here: job) and a directory
# that exists in Qiita DB as 'directory' as fetching via https will
# fail otherwise. To avoid collisions, a mid-level directory name is
# a random string (= _get_candidate_names())
self.mountpoint = 'job'
# only adapt filepaths
self.exp_dirname = '2_test_folder'
self.source_dir = self.deposite_in_qiita_basedir(
join(self.mountpoint, self.exp_dirname), True)
source = join(dirname(abspath(getfile(currentframe()))), 'test_data')
copytree(source, self.source_dir)
self._clean_up_files = [self.out_dir]
self.qclient.push_file_to_central(self.source_dir)
self._clean_up_files = [self.out_dir, dirname(self.source_dir)]
self._clean_up_remote_files = []

def tearDown(self):
for fp in self._clean_up_files:
Expand All @@ -35,10 +45,13 @@ def tearDown(self):
rmtree(fp)
else:
remove(fp)
for fp in self._clean_up_remote_files:
self.qclient.delete_file_from_central(fp)

def test_summary(self):
files = [(self.source_dir, 'directory')]
data = {'filepaths': dumps(files), 'type': 'job-output-folder',
atype = 'job-output-folder'
data = {'filepaths': dumps(files), 'type': atype,
'name': "A name", 'data_type': 'Job Output Folder'}
aid = self.qclient.post('/apitest/artifact/', data=data)['artifact']
parameters = {'input_data': aid}
Expand All @@ -52,6 +65,10 @@ def test_summary(self):
# Run the test
obs_success, obs_ainfo, obs_error = generate_html_summary(
self.qclient, job_id, parameters, self.out_dir)
fp_target_dir = '%s/%s' % (self.source_dir.split(
'/%s/' % self.mountpoint)[0], atype)
self._clean_up_remote_files.append(fp_target_dir)
self._clean_up_files.append(fp_target_dir)

# asserting reply
self.assertTrue(obs_success)
Expand All @@ -63,33 +80,33 @@ def test_summary(self):
# cleaning artifact files, to avoid errors
[self._clean_up_files.extend([ff['filepath']])
for f in res['files'].values() for ff in f]
html_fp = res['files']['html_summary'][0]['filepath']
html_fp = self.qclient.fetch_file_from_central(
res['files']['html_summary'][0]['filepath'])
with open(html_fp) as html_f:
html = html_f.read()

self.assertCountEqual(
sorted(html.replace('<br/>', '').split('\n')),
sorted(EXP_HTML.format(aid=aid).replace('<br/>', '').split('\n')))
sorted(EXP_HTML.format(
aid=aid,
dir=self.exp_dirname).replace('<br/>', '').split('\n')))


EXP_HTML = (
'<a href="./{aid}/test_data/folder_a" type="folder" target="_blank">'
'test_data/folder_a</a><br/>\n'
'<a href="./{aid}/test_data/folder_a/folder_b/folder_c" type="folder" '
'target="_blank">test_data/folder_a/folder_b/folder_c</a><br/>\n'
'<a href="./{aid}/test_data/file_2" type="file" target="_blank">'
'test_data/file_2</a><br/>\n'
'<a href="./{aid}/test_data/file_1" type="file" target="_blank">'
'test_data/file_1</a><br/>\n'
'<a href="./{aid}/test_data/test_data" type="folder" target="_blank">'
'test_data/test_data</a><br/>\n'
'<a href="./{aid}/test_data/test_data/folder_a/folder_b" type="folder" '
'target="_blank">test_data/test_data/folder_a/folder_b</a><br/>\n'
'<a href="./{aid}/test_data/test_data/folder_a/folder_b/folder_c/file_c" '
'type="file" target="_blank">test_data/test_data/folder_a/folder_b/'
'<a href="./{aid}/{dir}/folder_a" type="folder" target="_blank">'
'{dir}/folder_a</a><br/>\n'
'<a href="./{aid}/{dir}/folder_a/folder_b/folder_c" type="folder" '
'target="_blank">{dir}/folder_a/folder_b/folder_c</a><br/>\n'
'<a href="./{aid}/{dir}/file_2" type="file" target="_blank">'
'{dir}/file_2</a><br/>\n'
'<a href="./{aid}/{dir}/file_1" type="file" target="_blank">'
'{dir}/file_1</a><br/>\n'
'<a href="./{aid}/{dir}/folder_a/folder_b" type="folder" '
'target="_blank">{dir}/folder_a/folder_b</a><br/>\n'
'<a href="./{aid}/{dir}/folder_a/folder_b/folder_c/file_c" '
'type="file" target="_blank">{dir}/folder_a/folder_b/'
'folder_c/file_c</a><br/>\n'
'<a href="./{aid}/test_data/test_data/folder_a/file_a" type="file" '
'target="_blank">test_data/test_data/folder_a/file_a</a>')
'<a href="./{aid}/{dir}/folder_a/file_a" type="file" '
'target="_blank">{dir}/folder_a/file_a</a>')


if __name__ == '__main__':
Expand Down
27 changes: 19 additions & 8 deletions qtp_job_output_folder/tests/test_validate.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,17 @@
class ValidateTests(PluginTestCase):
def setUp(self):
self.out_dir = mkdtemp()
self.source_dir = join(mkdtemp(), 'test_data')
# need to refer to a valid mountpoint (here: job) and a directory
# that exists in Qiita DB as 'directory' as fetching via https will
# fail otherwise
self.mountpoint = 'job'
self.source_dir = self.deposite_in_qiita_basedir(
join(self.mountpoint, '2_test_folder'), True)
source = join(dirname(abspath(getfile(currentframe()))), 'test_data')
copytree(source, self.source_dir)
self._clean_up_files = [self.out_dir]
self.qclient.push_file_to_central(self.source_dir)
self._clean_up_files = [self.out_dir, dirname(self.source_dir)]
self._clean_up_remote_files = []

def tearDown(self):
for fp in self._clean_up_files:
Expand All @@ -37,13 +44,16 @@ def tearDown(self):
rmtree(fp)
else:
remove(fp)
for fp in self._clean_up_remote_files:
self.qclient.delete_file_from_central(fp)

def test_validate(self):
files = {'directory': [self.source_dir]}
atype = 'job-output-folder'
parameters = {'template': None,
'analysis': None,
'files': dumps(files),
'artifact_type': 'job-output-folder'}
'artifact_type': atype}
data = {
'command': dumps(
['qtp-job-output-folder', __version__, 'Validate']),
Expand All @@ -52,15 +62,16 @@ def test_validate(self):
job_id = self.qclient.post(
'/apitest/processing_job/', data=data)['job']

out_dir = mkdtemp()
self._clean_up_files.append(out_dir)
obs_success, obs_ainfo, obs_error = validate(
self.qclient, job_id, parameters, out_dir)

self.qclient, job_id, parameters, self.out_dir)
for suffix in [atype, self.mountpoint]:
self._clean_up_remote_files.append(
'%s/%s' % (self.source_dir.split('/%s/' % self.mountpoint)[0],
suffix))
self.assertTrue(obs_success)
filepaths = [
(f'{self.source_dir}', 'directory'),
(f'{out_dir}/summary.html', 'html_summary')]
(f'{self.out_dir}/summary.html', 'html_summary')]
exp = [ArtifactInfo(None, 'job-output-folder', filepaths)]
self.assertEqual(obs_ainfo, exp)
self.assertEqual(obs_error, "")
Expand Down
6 changes: 4 additions & 2 deletions scripts/configure_qtp_job_output_folder
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,13 @@ from qtp_job_output_folder import plugin
@click.option('--env-script', prompt='Environment script',
default='conda activate qtp-job-output-folder')
@click.option('--ca-cert', prompt='Server certificate', default='None')
def config(env_script, ca_cert):
@click.argument('plugincoupling', required=False, default='filesystem')
def config(env_script, ca_cert, plugincoupling):
"""Generates the Qiita configuration files"""
if ca_cert == 'None':
ca_cert = None
plugin.generate_config(env_script, 'start_qtp_job_output_folder', ca_cert)
plugin.generate_config(env_script, 'start_qtp_job_output_folder', ca_cert,
plugin_coupling=plugincoupling)


if __name__ == '__main__':
Expand Down
Loading