Skip to content
Snippets Groups Projects
Commit d4429f09 authored by Fanna Lautenbach's avatar Fanna Lautenbach
Browse files

Auto submit error integration tests

parent d0f5682d
No related branches found
No related tags found
Loading
...@@ -20,6 +20,7 @@ Setup ATDB and LDVSPEC ...@@ -20,6 +20,7 @@ Setup ATDB and LDVSPEC
Add Data Product 1 srm://lofar-srm.fz-juelich.de:8443/pnfs/fz-juelich.de/data/lofar/ops/projects/idols/1/L876420_SAP000_SB019_uv.MS_5840d22a.tar Add Data Product 1 srm://lofar-srm.fz-juelich.de:8443/pnfs/fz-juelich.de/data/lofar/ops/projects/idols/1/L876420_SAP000_SB019_uv.MS_5840d22a.tar
Add Data Product 5 srm://lofar-srm.fz-juelich.de:8443/pnfs/fz-juelich.de/data/lofar/ops/projects/idols/5/L876420_SAP000_SB019_uv.MS_5840d22b.tar Add Data Product 5 srm://lofar-srm.fz-juelich.de:8443/pnfs/fz-juelich.de/data/lofar/ops/projects/idols/5/L876420_SAP000_SB019_uv.MS_5840d22b.tar
Add Data Product 13 srm://lofar-srm.fz-juelich.de:8443/pnfs/fz-juelich.de/data/lofar/ops/projects/idols/13/L876420_SAP000_SB019_uv.MS_5840d22c.tar Add Data Product 13 srm://lofar-srm.fz-juelich.de:8443/pnfs/fz-juelich.de/data/lofar/ops/projects/idols/13/L876420_SAP000_SB019_uv.MS_5840d22c.tar
Add Data Product 13 srm://lofar-srm.fz-juelich.de:8443/pnfs/fz-juelich.de/data/lofar/ops/projects/idols/13/L876420_SAP000_SB019_uv.MS_1234567b.tar
*** Test Cases *** *** Test Cases ***
...@@ -30,7 +31,18 @@ Test create and submit a work specification ...@@ -30,7 +31,18 @@ Test create and submit a work specification
${id}= Add Work Specification 5 ${id}= Add Work Specification 5
Submit Work Specification ${id} Submit Work Specification ${id}
Check if Task Exists in ATDB ldv-spec:${id} ${count}= Get Tasks Count In ATDB ldv-spec:${id}
Should Be Equal As Integers ${count} 1
Test create work specification with auto-submit and 2 batches
[Tags] Workspecification
Login to LDV Spec Admin Interface
${id}= Add Work Specification 13
Alter Work Specification Batches And Auto Submit ${id}
${count}= Get Tasks Count In ATDB ldv-spec:${id}
Should Be Equal As Integers ${count} 2
Test create a group with a few work specifications Test create a group with a few work specifications
[Tags] Workspecification [Tags] Workspecification
......
...@@ -62,12 +62,25 @@ Submit Work Specification ...@@ -62,12 +62,25 @@ Submit Work Specification
Submit Work Specification 1 Submit Work Specification 1
[Teardown] Close Browser [Teardown] Close Browser
Check if Task Exists in ATDB Alter Work Specification Batches And Auto Submit
[Tags] Keyword [Tags] Keyword
[Documentation] ***Description*** [Documentation] ***Description***
... Prerequisite: submission of work specification with ID 1 succeeded ... Altering work specification depends on a non-submitted work specification to be present.
... To ensure this, also a work specification is created in this test.
... The rules w.r.t. adding a work specification thus also apply here
Login to LDV Spec Admin Interface
${id}= Add Work Specification 1
Alter Work Specification Batches And Auto Submit ${id}
[Teardown] Close Browser
Get Tasks Count in ATDB Should Equal One
[Tags] Keyword
[Documentation] ***Description***
... Prerequisite: submission of work specification with ID 1 succeeded.
... Note that checking for equality should specify the type (integers, numbers, strings).
Login To ATDB Admin Interface Login To ATDB Admin Interface
Check if Task Exists in ATDB ldv-spec:1 ${count}= Get Tasks Count In ATDB ldv-spec:1
Should Be Equal As Integers ${count} 1
[Teardown] Close Browser [Teardown] Close Browser
......
...@@ -49,9 +49,20 @@ Add Work Specification ...@@ -49,9 +49,20 @@ Add Work Specification
Select From List By Value //*[@data-test-id="workflow"] https://example.com/workflow-1 Select From List By Value //*[@data-test-id="workflow"] https://example.com/workflow-1
Input Text //*[@data-test-id="obs_id"] ${obs_id} Input Text //*[@data-test-id="obs_id"] ${obs_id}
Click Button //*[@data-test-id="create-update"] Click Button //*[@data-test-id="create-update"]
${id}= Get Text (//a[@data-test-id="specification-id"])[1] ${id}= Get Text (//div[@data-test-id="ungrouped"]/..//a[@data-test-id="specification-id"])[last()]
RETURN ${id} RETURN ${id}
Alter Work Specification Batches And Auto Submit
[Arguments] ${specification_id}
Go To ${LDVSPEC}specification/update/${specification_id}/
Select Checkbox //*[@data-test-id="auto-submit-checkbox"]
Checkbox Should Be Selected //*[@data-test-id="auto-submit-checkbox"]
Input Text //*[@data-test-id="batch-size-input"] 2
Click Button //*[@data-test-id="create-update"]
Go To ${LDVSPEC}specification/${specification_id}/
Element Should Contain //*[@data-test-id="batch-size"] 2
Wait Until Element Contains //*[@data-test-id="submission-status"] Submitted timeout=30s
Add Data Product Add Data Product
[Arguments] ${obs_id} ${uniqueSurl} [Arguments] ${obs_id} ${uniqueSurl}
Go To ${LDVSPEC}admin/lofardata/dataproduct/add/ Go To ${LDVSPEC}admin/lofardata/dataproduct/add/
...@@ -120,10 +131,12 @@ Login to ATDB Admin Interface ...@@ -120,10 +131,12 @@ Login to ATDB Admin Interface
Input Django Admin Password admin Input Django Admin Password admin
Submit credentials Submit credentials
Check if Task Exists in ATDB Get Tasks Count in ATDB
[Arguments] ${element} [Arguments] ${element}
Open Browser to ATDB landing page Open Browser to ATDB landing page
Page Should Contain ${element} ${count}= Get Element Count //*[text()[contains(.,'${element}')]]
RETURN ${count}
# Shared # Shared
......
...@@ -157,6 +157,12 @@ class WorkSpecification(models.Model): ...@@ -157,6 +157,12 @@ class WorkSpecification(models.Model):
max_length=16, choices=PURGE_POLICY.choices, default=PURGE_POLICY.NO max_length=16, choices=PURGE_POLICY.choices, default=PURGE_POLICY.NO
) )
__original_submission_status = None
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.__original_submission_status = self.submission_status
def created_by_display_value(self): def created_by_display_value(self):
if self.created_by is None: if self.created_by is None:
return "Unknown" return "Unknown"
...@@ -206,6 +212,16 @@ class WorkSpecification(models.Model): ...@@ -206,6 +212,16 @@ class WorkSpecification(models.Model):
total_size, number_of_files, average_file_size = inputs_processor.compute_size_of_inputs(self.inputs) total_size, number_of_files, average_file_size = inputs_processor.compute_size_of_inputs(self.inputs)
return total_size, number_of_files, average_file_size return total_size, number_of_files, average_file_size
@property
def did_submission_status_change(self):
return self.submission_status != self.__original_submission_status
@property
def should_auto_submit(self):
is_ready = self.submission_status == SUBMISSION_STATUS.READY
contains_files = self.get_file_info[1] > 0
return is_ready and contains_files and self.is_auto_submit
def __str__(self): def __str__(self):
return str(self.id) + ' - ' + str(self.filters) + " (" + str(self.created_on) + ")" return str(self.id) + ' - ' + str(self.filters) + " (" + str(self.created_on) + ")"
...@@ -228,9 +244,14 @@ class WorkSpecification(models.Model): ...@@ -228,9 +244,14 @@ class WorkSpecification(models.Model):
using=using, using=using,
update_fields=update_fields, update_fields=update_fields,
) )
if self.should_auto_submit:
from lofardata.task.tasks import insert_task_into_atdb
insert_task_into_atdb.delay(self.pk)
if self.async_task_result is None: if self.async_task_result is None:
from lofardata.task.tasks import define_work_specification from lofardata.task.tasks import define_work_specification
res: AsyncResult = define_work_specification.delay(self.pk) res: AsyncResult = define_work_specification.delay(self.pk)
self.async_task_result = res.id self.async_task_result = res.id
super(WorkSpecification, self).save(update_fields=["async_task_result"]) super(WorkSpecification, self).save(update_fields=["async_task_result"])
...@@ -127,11 +127,11 @@ ...@@ -127,11 +127,11 @@
<a class="tooltip-dias tooltip-dias-right custom--tooltip" <a class="tooltip-dias tooltip-dias-right custom--tooltip"
data-tooltip="{{ form.batch_size.help_text }}">m</a> data-tooltip="{{ form.batch_size.help_text }}">m</a>
</div> </div>
{% render_field form.batch_size class="input input--select custom__input--fixed-width margin-left margin-bottom" type="number" %} {% render_field form.batch_size class="input input--select custom__input--fixed-width margin-left margin-bottom" type="number" data-test-id='batch-size-input' %}
</div> </div>
<div class="flex-wrapper flex-wrapper--row" id="div_id_auto_submit"> <div class="flex-wrapper flex-wrapper--row" id="div_id_auto_submit">
{% render_field form.is_auto_submit class="input custom--checkbox margin-top" type="checkbox" %} {% render_field form.is_auto_submit class="input custom--checkbox margin-top" type="checkbox" data-test-id='auto-submit-checkbox' %}
<label class="input__label">{{ form.is_auto_submit.label }}</label> <label class="input__label">{{ form.is_auto_submit.label }}</label>
<a class="tooltip-dias tooltip-dias-right custom--tooltip" <a class="tooltip-dias tooltip-dias-right custom--tooltip"
data-tooltip="{{ form.is_auto_submit.help_text }}">m</a> data-tooltip="{{ form.is_auto_submit.help_text }}">m</a>
......
...@@ -206,12 +206,14 @@ ...@@ -206,12 +206,14 @@
<div class="table__row table__row--dark table__row--padding"> <div class="table__row table__row--dark table__row--padding">
<div class="table__cell table__cell--title">Files per task</div> <div class="table__cell table__cell--title">Files per task</div>
<div class="table__cell" data-test-id="batch-size">
{% if object.batch_size == 0 %} {% if object.batch_size == 0 %}
<div class="table__cell">{{ number_of_files }}</div> {{ number_of_files }}
{% else %} {% else %}
<div class="table__cell">{{ object.batch_size }}</div> {{ object.batch_size }}
{% endif %} {% endif %}
</div> </div>
</div>
<div class="table__row table__row--dark table__row--padding"> <div class="table__row table__row--dark table__row--padding">
<div class="table__cell table__cell--title">Total size</div> <div class="table__cell table__cell--title">Total size</div>
......
import unittest
from lofardata.models import WorkSpecification, SUBMISSION_STATUS
class WorkSpecificationShouldAutoSubmit(unittest.TestCase):
@unittest.mock.patch('lofardata.models.WorkSpecification.get_file_info')
def test_submission_status_ready_auto_submit_with_files(self, mock_file_info):
mock_file_info.__get__ = unittest.mock.Mock(return_value=[10, 10, 10])
work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.READY,
is_auto_submit=True)
self.assertTrue(work_spec.should_auto_submit)
def test_submission_status_loading(self):
work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.LOADING)
self.assertFalse(work_spec.should_auto_submit)
def test_submission_status_ready_no_auto_submit(self):
work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.READY)
self.assertFalse(work_spec.should_auto_submit)
def test_submission_status_ready_auto_submit_no_files(self):
work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.READY,
is_auto_submit=True)
self.assertFalse(work_spec.should_auto_submit)
def test_submission_status_defining(self):
work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.DEFINING)
self.assertFalse(work_spec.should_auto_submit)
def test_submission_status_submitted(self):
work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.SUBMITTED)
self.assertFalse(work_spec.should_auto_submit)
def test_submission_status_error(self):
work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.ERROR)
self.assertFalse(work_spec.should_auto_submit)
class WorkSpecificationDidSubmissionStatusChange(unittest.TestCase):
def test_change(self):
work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.READY)
work_spec.submission_status = SUBMISSION_STATUS.LOADING
self.assertTrue(work_spec.did_submission_status_change)
def test_no_change(self):
work_spec = WorkSpecification()
self.assertFalse(work_spec.did_submission_status_change)
def test_no_change_with_setters(self):
work_spec = WorkSpecification(submission_status=SUBMISSION_STATUS.READY)
work_spec.submission_status = SUBMISSION_STATUS.READY
self.assertFalse(work_spec.did_submission_status_change)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment