def test_recipe_running_then_watchdog_expired(self): """ This tests the case where the recipe is running, has a valid reservation request, but the watchdog expires before it's completed. """ with session.begin(): recipe = data_setup.create_recipe( task_list=[Task.by_name(u'/distribution/install')], reservesys=True) job = data_setup.create_job_for_recipes([recipe]) job_id = job.id data_setup.mark_recipe_tasks_finished( recipe, task_status=TaskStatus.aborted) job.recipesets[0].recipes[0].abort() beakerd.update_dirty_jobs() with session.begin(): job = Job.by_id(job_id) self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.reserved) job.recipesets[0].recipes[0].return_reservation() beakerd.update_dirty_jobs() with session.begin(): job = Job.by_id(job_id) self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.aborted)
def test_task_aborted_return_reservation(self): """ This tests the case where the task was aborted, then the recipe goes to Reserved state and then finally the reservation is returned """ with session.begin(): recipe = data_setup.create_recipe( task_list=[Task.by_name(u'/distribution/install')], reservesys=True) job = data_setup.create_job_for_recipes([recipe]) job_id = job.id data_setup.mark_recipe_tasks_finished( recipe, result=TaskResult.warn, task_status=TaskStatus.aborted) job._mark_dirty() beakerd.update_dirty_jobs() with session.begin(): job = Job.by_id(job_id) self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.reserved) job.recipesets[0].recipes[0].return_reservation() beakerd.update_dirty_jobs() with session.begin(): job = Job.by_id(job_id) self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.aborted)
def test_return_system_reservation(self): b = self.browser with session.begin(): recipe = data_setup.create_recipe( task_list=[data_setup.create_task()], reservesys=True, reservesys_duration=1800, ) job = data_setup.create_job_for_recipes([recipe], owner=self.user) data_setup.mark_recipe_tasks_finished(job.recipesets[0].recipes[0]) job.update_status() self.go_to_recipe_view(recipe) b.find_element_by_xpath('//span[@class="statusReserved"]') duration = b.find_element_by_xpath( '//span[@class="reservation_duration"]').text self.assertRegexpMatches(duration, r'(0:\d\d:\d\d remaining)') b.find_element_by_link_text('Release System').click() b.find_element_by_xpath( '//h1[text()="Release reserved system for Recipe %s"]' % recipe.id) b.find_element_by_xpath( '//form[@id="end_recipe_reservation"]//input[@type="submit"]' ).click() flash_text = b.find_element_by_class_name('flash').text self.assertEquals( 'Successfully released reserved system for %s' % recipe.t_id, flash_text)
def test_recipe_running_then_watchdog_expired(self): """ This tests the case where the recipe is running, has a valid reservation request, but the watchdog expires before it's completed. """ with session.begin(): recipe = data_setup.create_recipe( task_list=[Task.by_name(u'/distribution/install')], reservesys=True) job = data_setup.create_job_for_recipes([recipe]) job_id = job.id data_setup.mark_recipe_tasks_finished(recipe, task_status=TaskStatus.aborted) job.recipesets[0].recipes[0].abort() beakerd.update_dirty_jobs() with session.begin(): job = Job.by_id(job_id) self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.reserved) job.recipesets[0].recipes[0].return_reservation() beakerd.update_dirty_jobs() with session.begin(): job = Job.by_id(job_id) self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.aborted)
def test_task_aborted_return_reservation(self): """ This tests the case where the task was aborted, then the recipe goes to Reserved state and then finally the reservation is returned """ with session.begin(): recipe = data_setup.create_recipe( task_list=[Task.by_name(u'/distribution/install')], reservesys=True) job = data_setup.create_job_for_recipes([recipe]) job_id = job.id data_setup.mark_recipe_tasks_finished(recipe, result=TaskResult.warn, task_status=TaskStatus.aborted) job._mark_dirty() beakerd.update_dirty_jobs() with session.begin(): job = Job.by_id(job_id) self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.reserved) job.recipesets[0].recipes[0].return_reservation() beakerd.update_dirty_jobs() with session.begin(): job = Job.by_id(job_id) self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.aborted)
def test_reserved_then_watchdog_expired(self): """ This tests the case where the external watchdog expires when the recipe is in Reserved state """ data_setup.mark_recipe_tasks_finished(self.recipe) self.job.update_status() self.assertEqual(self.recipe.status, TaskStatus.reserved) self.recipe.abort() self.job.update_status() self.assertEqual(self.recipe.status, TaskStatus.completed)
def test_reserved_then_job_cancelled(self): """ This tests the case where the recipe is Reserved but the job is cancelled """ data_setup.mark_recipe_tasks_finished(self.recipe) self.job.update_status() self.assertEqual(self.recipe.status, TaskStatus.reserved) self.job.cancel() self.job.update_status() self.assertEqual(self.recipe.status, TaskStatus.completed)
def test_reserved_then_job_cancelled(self): """ This tests the case where the recipe is Reserved but the job is cancelled """ data_setup.mark_recipe_tasks_finished(self.recipe) self.job.update_status() self.assertEqual(self.recipe.status, TaskStatus.reserved) self.job.cancel() self.job.update_status() self.assertEqual(self.recipe.status, TaskStatus.completed)
def test_reserved_then_watchdog_expired(self): """ This tests the case where the external watchdog expires when the recipe is in Reserved state """ data_setup.mark_recipe_tasks_finished(self.recipe) self.job.update_status() self.assertEqual(self.recipe.status, TaskStatus.reserved) self.recipe.abort() self.job.update_status() self.assertEqual(self.recipe.status, TaskStatus.completed)
def test_shows_reservation_tab_when_reserved(self): with session.begin(): recipe = data_setup.create_recipe(reservesys=True) job = data_setup.create_job_for_recipes([recipe]) data_setup.mark_recipe_tasks_finished(recipe) job.update_status() self.assertEqual(recipe.status, TaskStatus.reserved) b = self.browser go_to_recipe_view(b, recipe) b.find_element_by_css_selector('#reservation.active') _, fragment = urlparse.urldefrag(b.current_url) self.assertEquals(fragment, 'reservation')
def test_shows_reservation_tab_when_reserved(self): with session.begin(): recipe = data_setup.create_recipe(reservesys=True) job = data_setup.create_job_for_recipes([recipe]) data_setup.mark_recipe_tasks_finished(recipe) job.update_status() self.assertEqual(recipe.status, TaskStatus.reserved) b = self.browser go_to_recipe_view(b, recipe) b.find_element_by_css_selector('#reservation.active') _, fragment = urlparse.urldefrag(b.current_url) self.assertEquals(fragment, 'reservation')
def test_reserved_then_job_cancelled(self): """ This tests the case where the recipe is Reserved but the job is cancelled """ recipe = data_setup.create_recipe(task_list=[Task.by_name(u"/distribution/install")], reservesys=True) job = data_setup.create_job_for_recipes([recipe]) data_setup.mark_recipe_tasks_finished(recipe) job.update_status() self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.reserved) job.cancel() job.update_status() self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.completed)
def test_recipe_running_then_watchdog_expired(self): """ This tests the case where the recipe is running, has a valid reservation request, but the watchdog expires before it's completed. """ data_setup.mark_recipe_tasks_finished(self.recipe, task_status=TaskStatus.aborted) self.job.update_status() self.assertEqual(self.recipe.status, TaskStatus.reserved) self.recipe.return_reservation() self.job.update_status() self.assertEqual(self.recipe.status, TaskStatus.aborted)
def test_reserved_then_watchdog_expired(self): """ This tests the case where the external watchdog expires when the recipe is in Reserved state """ recipe = data_setup.create_recipe(task_list=[Task.by_name(u"/distribution/install")], reservesys=True) job = data_setup.create_job_for_recipes([recipe]) data_setup.mark_recipe_tasks_finished(recipe) job._mark_dirty() job.update_status() self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.reserved) job.recipesets[0].recipes[0].abort() job.update_status() self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.completed)
def test_reserves_system_when_recipe_waiting(self): # Anaconda installs the OS (Status: Installing) and reboots # beakerd comes along and calls update_dirty_jobs which sets the recipe to: Waiting data_setup.mark_recipe_waiting(self.recipe) # In the meantime however our task has finished really quickly, which # means the min_status is TaskStatus.completed and therefore finished data_setup.mark_recipe_tasks_finished(self.recipe, only=True) # beakerd hasn't come along and updated our recipe yet, so it's still # in waiting self.assertEqual(self.recipe.status, TaskStatus.waiting) # Now beakerd updates it and should reserve our system self.job.update_status() self.assertEqual(self.recipe.status, TaskStatus.reserved)
def test_tasks_are_expanded_according_to_anchor(self): with session.begin(): recipe = data_setup.create_recipe(num_tasks=2) job = data_setup.create_job_for_recipes([recipe]) data_setup.mark_recipe_tasks_finished(recipe, result=TaskResult.pass_) job.update_status() b = self.browser b.get(get_server_base() + 'recipes/%s#task%s,task%s' % (recipe.id, recipe.tasks[0].id, recipe.tasks[1].id)) b.find_element_by_css_selector('#task%s .recipe-task-details.collapse.in' % recipe.tasks[0].id) b.find_element_by_css_selector('#task%s .recipe-task-details.collapse.in' % recipe.tasks[1].id)
def test_task_aborted_return_reservation(self): """ This tests the case where the task was aborted, then the recipe goes to Reserved state and then finally the reservation is returned """ recipe = data_setup.create_recipe(task_list=[Task.by_name(u"/distribution/install")], reservesys=True) job = data_setup.create_job_for_recipes([recipe]) data_setup.mark_recipe_tasks_finished(recipe, result=TaskResult.warn, task_status=TaskStatus.aborted) job.update_status() self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.reserved) job.recipesets[0].recipes[0].return_reservation() job.update_status() self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.aborted)
def test_tasks_are_expanded_according_to_anchor(self): with session.begin(): recipe = data_setup.create_recipe(num_tasks=2) job = data_setup.create_job_for_recipes([recipe]) data_setup.mark_recipe_tasks_finished(recipe, result=TaskResult.pass_) job.update_status() b = self.browser b.get(get_server_base() + 'recipes/%s#task%s,task%s' % (recipe.id, recipe.tasks[0].id, recipe.tasks[1].id)) b.find_element_by_css_selector('#task%s .recipe-task-details.collapse.in' % recipe.tasks[0].id) b.find_element_by_css_selector('#task%s .recipe-task-details.collapse.in' % recipe.tasks[1].id)
def test_recipe_running_then_watchdog_expired(self): """ This tests the case where the recipe is running, has a valid reservation request, but the watchdog expires before it's completed. """ data_setup.mark_recipe_tasks_finished(self.recipe, task_status=TaskStatus.aborted) self.job.update_status() self.assertEqual(self.recipe.status, TaskStatus.reserved) self.recipe.return_reservation() self.job.update_status() self.assertEqual(self.recipe.status, TaskStatus.aborted)
def test_reserves_system_when_recipe_waiting(self): # Anaconda installs the OS (Status: Installing) and reboots # beakerd comes along and calls update_dirty_jobs which sets the recipe to: Waiting data_setup.mark_recipe_waiting(self.recipe) # In the meantime however our task has finished really quickly, which # means the min_status is TaskStatus.completed and therefore finished data_setup.mark_recipe_tasks_finished(self.recipe, only=True) # beakerd hasn't come along and updated our recipe yet, so it's still # in waiting self.assertEqual(self.recipe.status, TaskStatus.waiting) # Now beakerd updates it and should reserve our system self.job.update_status() self.assertEqual(self.recipe.status, TaskStatus.reserved)
def test_recipe_running_then_watchdog_expired(self): """ This tests the case where the recipe is running, has a valid reservation request, but the watchdog expires before it's completed. """ recipe = data_setup.create_recipe(task_list=[Task.by_name(u"/distribution/install")], reservesys=True) job = data_setup.create_job_for_recipes([recipe]) data_setup.mark_recipe_tasks_finished(recipe, task_status=TaskStatus.aborted) job.recipesets[0].recipes[0].abort() job.update_status() self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.reserved) job.recipesets[0].recipes[0].return_reservation() job.update_status() self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.aborted)
def test_reserves_system_when_recipe_waiting(self): recipe = data_setup.create_recipe(task_list=[Task.by_name(u"/distribution/utils/dummy")], reservesys=True) job = data_setup.create_job_for_recipes([recipe]) # Anaconda installs the OS (Status: Installing) and reboots # beakerd comes along and calls update_dirty_jobs which sets the recipe to: Waiting data_setup.mark_recipe_waiting(recipe) # In the meantime however our task has finished really quickly, which # means the min_status is TaskStatus.completed and therefore finished data_setup.mark_recipe_tasks_finished(recipe, only=True) # beakerd hasn't come along and updated our recipe yet, so it's still # in waiting self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.waiting) # Now beakerd updates it and should reserve our system job.update_status() self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.reserved)
def test_first_failed_task_should_expand_when_first_loading(self): with session.begin(): recipe = data_setup.create_recipe(task_list=[ Task.by_name(u'/distribution/install'), Task.by_name(u'/distribution/reservesys') ]) job = data_setup.create_job_for_recipes([recipe]) data_setup.mark_recipe_tasks_finished(recipe, result=TaskResult.fail) job.update_status() b = self.browser go_to_recipe_view(b, recipe) # The in class is an indication that a task is expanded. b.find_element_by_css_selector('#task%s .recipe-task-details.collapse.in' % recipe.tasks[0].id) _, fragment = urlparse.urldefrag(b.current_url) self.assertEquals(fragment, 'task%s' % recipe.tasks[0].id)
def test_task_without_failed_results_should_not_expand(self): with session.begin(): recipe = data_setup.create_recipe(task_list=[ Task.by_name(u'/distribution/install'), Task.by_name(u'/distribution/reservesys') ]) job = data_setup.create_job_for_recipes([recipe]) data_setup.mark_recipe_tasks_finished(recipe, result=TaskResult.pass_) job.update_status() b = self.browser go_to_recipe_view(b, recipe) for task in recipe.tasks: b.find_element_by_xpath('//div[@id="recipe-task-details-%s" and ' 'not(contains(@class, "in"))]' % task.id) _, fragment = urlparse.urldefrag(b.current_url) self.assertEquals(fragment, 'tasks')
def test_reserved_then_job_cancelled(self): """ This tests the case where the recipe is Reserved but the job is cancelled """ recipe = data_setup.create_recipe( task_list=[Task.by_name(u'/distribution/install')], reservesys=True) job = data_setup.create_job_for_recipes([recipe]) data_setup.mark_recipe_tasks_finished(recipe) job.update_status() self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.reserved) job.cancel() job.update_status() self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.completed)
def test_first_failed_task_should_expand_when_first_loading(self): with session.begin(): recipe = data_setup.create_recipe(task_list=[ Task.by_name(u'/distribution/install'), Task.by_name(u'/distribution/reservesys') ]) job = data_setup.create_job_for_recipes([recipe]) data_setup.mark_recipe_tasks_finished(recipe, result=TaskResult.fail) job.update_status() b = self.browser go_to_recipe_view(b, recipe) # The in class is an indication that a task is expanded. b.find_element_by_css_selector('#task%s .recipe-task-details.collapse.in' % recipe.tasks[0].id) _, fragment = urlparse.urldefrag(b.current_url) self.assertEquals(fragment, 'task%s' % recipe.tasks[0].id)
def test_task_without_failed_results_should_not_expand(self): with session.begin(): recipe = data_setup.create_recipe(task_list=[ Task.by_name(u'/distribution/install'), Task.by_name(u'/distribution/reservesys') ]) job = data_setup.create_job_for_recipes([recipe]) data_setup.mark_recipe_tasks_finished(recipe, result=TaskResult.pass_) job.update_status() b = self.browser go_to_recipe_view(b, recipe) for task in recipe.tasks: b.find_element_by_xpath('//div[@id="recipe-task-details-%s" and ' 'not(contains(@class, "in"))]' % task.id) _, fragment = urlparse.urldefrag(b.current_url) self.assertEquals(fragment, 'tasks')
def test_reserved_then_watchdog_expired(self): """ This tests the case where the external watchdog expires when the recipe is in Reserved state """ recipe = data_setup.create_recipe( task_list=[Task.by_name(u'/distribution/install')], reservesys=True) job = data_setup.create_job_for_recipes([recipe]) data_setup.mark_recipe_tasks_finished(recipe) job._mark_dirty() job.update_status() self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.reserved) job.recipesets[0].recipes[0].abort() job.update_status() self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.completed)
def test_authenticated_user_can_return_reservation(self): with session.begin(): data_setup.mark_recipe_tasks_finished(self.recipe, only=True) self.job.update_status() b = self.browser login(b) go_to_recipe_view(b, self.recipe, tab='Reservation') tab = b.find_element_by_id('reservation') tab.find_element_by_xpath('.//button[contains(text(), "Return the reservation")]')\ .click() modal = b.find_element_by_class_name('modal') modal.find_element_by_xpath('.//button[text()="OK"]').click() b.find_element_by_xpath('//body[not(.//div[contains(@class, "modal")])]') # The `Return the reservtion` button should be gone. tab.find_element_by_xpath('//div[not(.//button[normalize-space(string(.))=' '"Return the reservation"])]') with session.begin(): session.expire_all() self.assertLessEqual(self.recipe.status_watchdog(), 0)
def test_task_aborted_return_reservation(self): """ This tests the case where the task was aborted, then the recipe goes to Reserved state and then finally the reservation is returned """ recipe = data_setup.create_recipe( task_list=[Task.by_name(u'/distribution/install')], reservesys=True) job = data_setup.create_job_for_recipes([recipe]) data_setup.mark_recipe_tasks_finished(recipe, result=TaskResult.warn, task_status=TaskStatus.aborted) job.update_status() self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.reserved) job.recipesets[0].recipes[0].return_reservation() job.update_status() self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.aborted)
def test_authenticated_user_can_extend_reservation(self): with session.begin(): data_setup.mark_recipe_tasks_finished(self.recipe, only=True) self.job.update_status() b = self.browser login(b) go_to_recipe_view(b, self.recipe, tab='Reservation') tab = b.find_element_by_id('reservation') tab.find_element_by_xpath('.//button[contains(text(), "Extend the reservation")]')\ .click() modal = b.find_element_by_class_name('modal') modal.find_element_by_name('kill_time').clear() modal.find_element_by_name('kill_time').send_keys('600') modal.find_element_by_xpath('.//button[text()="Save changes"]').click() b.find_element_by_xpath('//body[not(.//div[contains(@class, "modal")])]') with session.begin(): session.expire_all() assert_datetime_within(self.recipe.watchdog.kill_time, tolerance=datetime.timedelta(seconds=10), reference=datetime.datetime.utcnow() + datetime.timedelta(seconds=600))
def test_authenticated_user_can_extend_reservation(self): with session.begin(): data_setup.mark_recipe_tasks_finished(self.recipe, only=True) self.job.update_status() b = self.browser login(b) go_to_recipe_view(b, self.recipe, tab='Reservation') tab = b.find_element_by_id('reservation') tab.find_element_by_xpath('.//button[contains(text(), "Extend the reservation")]')\ .click() modal = b.find_element_by_class_name('modal') modal.find_element_by_name('kill_time').clear() modal.find_element_by_name('kill_time').send_keys('600') modal.find_element_by_xpath('.//button[text()="Save changes"]').click() b.find_element_by_xpath('//body[not(.//div[contains(@class, "modal")])]') with session.begin(): session.expire_all() assert_datetime_within(self.recipe.watchdog.kill_time, tolerance=datetime.timedelta(seconds=10), reference=datetime.datetime.utcnow() + datetime.timedelta(seconds=600))
def test_system_reserved_on_recipe(self): with session.begin(): user = data_setup.create_user(password=u'password') lc = data_setup.create_labcontroller() system = data_setup.create_system(owner=user, lab_controller=lc) recipe = data_setup.create_recipe(reservesys=True) job = data_setup.create_job_for_recipes([recipe]) data_setup.mark_recipe_tasks_finished(recipe, system=system) job.update_status() self.assertEquals(recipe.status, TaskStatus.reserved) s = requests.Session() requests_login(s, user.user_name, 'password') response = put_json(get_server_base() + 'systems/%s/reservations/+current' % system.fqdn, session=s, data=dict(finish_time='now')) response.raise_for_status() with session.begin(): session.expire_all() job.update_status() self.assertEquals(job.status, TaskStatus.completed) self.assertEquals(system.user, None)
def test_system_reserved_on_recipe(self): with session.begin(): user = data_setup.create_user(password=u'password') lc = data_setup.create_labcontroller() system = data_setup.create_system(owner=user, lab_controller=lc) recipe = data_setup.create_recipe(reservesys=True) job = data_setup.create_job_for_recipes([recipe]) data_setup.mark_recipe_tasks_finished(recipe, system=system) job.update_status() self.assertEquals(recipe.status, TaskStatus.reserved) s = requests.Session() requests_login(s, user.user_name, 'password') response = put_json(get_server_base() + 'systems/%s/reservations/+current' % system.fqdn, session=s, data=dict(finish_time='now')) response.raise_for_status() with session.begin(): session.expire_all() job.update_status() self.assertEquals(job.status, TaskStatus.completed) self.assertEquals(system.user, None)
def test_return_system_reservation(self): b = self.browser with session.begin(): recipe = data_setup.create_recipe( task_list=[data_setup.create_task()], reservesys=True, reservesys_duration=1800, ) job = data_setup.create_job_for_recipes([recipe], owner=self.user) data_setup.mark_recipe_tasks_finished(job.recipesets[0].recipes[0]) job.update_status() self.go_to_recipe_view(recipe) b.find_element_by_xpath('//span[@class="statusReserved"]') duration = b.find_element_by_xpath('//span[@class="reservation_duration"]').text self.assertRegexpMatches(duration, r'(0:\d\d:\d\d remaining)') b.find_element_by_link_text('Release System').click() b.find_element_by_xpath('//h1[text()="Release reserved system for Recipe %s"]' % recipe.id) b.find_element_by_xpath('//form[@id="end_recipe_reservation"]//input[@type="submit"]').click() flash_text = b.find_element_by_class_name('flash').text self.assertEquals('Successfully released reserved system for %s' % recipe.t_id, flash_text)
def test_authenticated_user_can_return_reservation(self): with session.begin(): data_setup.mark_recipe_tasks_finished(self.recipe, only=True) self.job.update_status() b = self.browser login(b) go_to_recipe_view(b, self.recipe, tab='Reservation') tab = b.find_element_by_id('reservation') tab.find_element_by_xpath('.//button[contains(text(), "Return the reservation")]')\ .click() # Button goes to "Returning..." and confirmation modal appears tab.find_element_by_xpath(u'.//button[normalize-space(string(.))="Returning\u2026"]') modal = b.find_element_by_class_name('modal') modal.find_element_by_xpath('.//button[text()="OK"]').click() # Modal disappears, but the request is still going... b.find_element_by_xpath('//body[not(.//div[contains(@class, "modal")])]') # The "Returning..." button disappears when the request is complete tab.find_element_by_xpath(u'//body[not(.//button[normalize-space(string(.))=' '"Returning\u2026"])]') with session.begin(): session.expire_all() self.assertLessEqual(self.recipe.status_watchdog(), 0)
def test_reserved_then_job_cancelled(self): """ This tests the case where the recipe is Reserved but the job is cancelled """ with session.begin(): recipe = data_setup.create_recipe( task_list=[Task.by_name(u'/distribution/install')], reservesys=True) job = data_setup.create_job_for_recipes([recipe]) job_id = job.id data_setup.mark_recipe_tasks_finished(recipe) job._mark_dirty() beakerd.update_dirty_jobs() with session.begin(): job = Job.by_id(job_id) self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.reserved) job.cancel() beakerd.update_dirty_jobs() with session.begin(): job = Job.by_id(job_id) self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.completed)
def test_reserved_then_watchdog_expired(self): """ This tests the case where the external watchdog expires when the recipe is in Reserved state """ with session.begin(): recipe = data_setup.create_recipe( task_list=[Task.by_name(u'/distribution/install')], reservesys=True) job = data_setup.create_job_for_recipes([recipe]) job_id = job.id data_setup.mark_recipe_tasks_finished(recipe) job._mark_dirty() beakerd.update_dirty_jobs() with session.begin(): job = Job.by_id(job_id) self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.reserved) job.recipesets[0].recipes[0].abort() job._update_status() with session.begin(): job = Job.by_id(job_id) self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.completed)
def test_reserved_then_job_cancelled(self): """ This tests the case where the recipe is Reserved but the job is cancelled """ with session.begin(): recipe = data_setup.create_recipe( task_list=[Task.by_name(u'/distribution/install')], reservesys=True) job = data_setup.create_job_for_recipes([recipe]) job_id = job.id data_setup.mark_recipe_tasks_finished(recipe) job._mark_dirty() beakerd.update_dirty_jobs() with session.begin(): job = Job.by_id(job_id) self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.reserved) job.cancel() beakerd.update_dirty_jobs() with session.begin(): job = Job.by_id(job_id) self.assertEqual(job.recipesets[0].recipes[0].status, TaskStatus.completed)
def test_onwarn_reserves_when_completed_with_warnings(self): self.recipe.reservation_request.when = RecipeReservationCondition.onwarn data_setup.mark_recipe_tasks_finished(self.recipe, result=TaskResult.warn) self.job.update_status() self.assertEquals(self.recipe.status, TaskStatus.reserved)
def test_onwarn_reserves_when_aborted(self): self.recipe.reservation_request.when = RecipeReservationCondition.onwarn data_setup.mark_recipe_tasks_finished(self.recipe, task_status=TaskStatus.aborted) self.job.update_status() self.assertEquals(self.recipe.status, TaskStatus.reserved)
def test_onwarn_reserves_when_completed_with_warnings(self): self.recipe.reservation_request.when = RecipeReservationCondition.onwarn data_setup.mark_recipe_tasks_finished(self.recipe, result=TaskResult.warn) self.job.update_status() self.assertEquals(self.recipe.status, TaskStatus.reserved)
def test_onabort_does_not_reserve_when_completed(self): self.recipe.reservation_request.when = RecipeReservationCondition.onabort data_setup.mark_recipe_tasks_finished(self.recipe) self.job.update_status() self.assertEquals(self.recipe.status, TaskStatus.completed)
def test_onwarn_does_not_reserve_when_all_passing(self): self.recipe.reservation_request.when = RecipeReservationCondition.onwarn data_setup.mark_recipe_tasks_finished(self.recipe, result=TaskResult.pass_) self.job.update_status() self.assertEquals(self.recipe.status, TaskStatus.completed)
def test_onwarn_reserves_when_aborted(self): self.recipe.reservation_request.when = RecipeReservationCondition.onwarn data_setup.mark_recipe_tasks_finished(self.recipe, task_status=TaskStatus.aborted) self.job.update_status() self.assertEquals(self.recipe.status, TaskStatus.reserved)
def test_onabort_does_not_reserve_when_completed(self): self.recipe.reservation_request.when = RecipeReservationCondition.onabort data_setup.mark_recipe_tasks_finished(self.recipe) self.job.update_status() self.assertEquals(self.recipe.status, TaskStatus.completed)
def test_onwarn_does_not_reserve_when_all_passing(self): self.recipe.reservation_request.when = RecipeReservationCondition.onwarn data_setup.mark_recipe_tasks_finished(self.recipe, result=TaskResult.pass_) self.job.update_status() self.assertEquals(self.recipe.status, TaskStatus.completed)