Exemple #1
0
 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)
Exemple #2
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
     """
     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)
Exemple #3
0
    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)
Exemple #8
0
    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)
Exemple #9
0
    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)
Exemple #10
0
 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')
Exemple #11
0
 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)
Exemple #15
0
 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)
Exemple #16
0
 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)
Exemple #18
0
 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)
Exemple #19
0
    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)
Exemple #23
0
 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)
Exemple #24
0
 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')
Exemple #25
0
 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)
Exemple #26
0
 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)
Exemple #27
0
 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')
Exemple #28
0
 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)
Exemple #29
0
 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)
Exemple #30
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)
Exemple #31
0
 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))
Exemple #32
0
 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)
Exemple #35
0
    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)
Exemple #36
0
 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)
Exemple #39
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)
Exemple #40
0
 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)
Exemple #43
0
 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)
Exemple #45
0
 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)
Exemple #47
0
 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)