Пример #1
0
 def test_log_not_delete(self):
     # Job that is not within it's expiry time
     with session.begin():
         job_not_delete = data_setup.create_completed_job(
             start_time=datetime.datetime.utcnow() -
             datetime.timedelta(days=60),
             finish_time=datetime.datetime.utcnow() -
             datetime.timedelta(days=29))
     job_not_delete.recipesets[0].recipes[0].logs.append(
         LogRecipe(filename=u'test.log'))
     r_not_delete = job_not_delete.recipesets[0].recipes[0]
     dir_not_delete = os.path.join(r_not_delete.logspath,
                                   r_not_delete.filepath)
     self.make_dir(dir_not_delete)
     ft = open(os.path.join(dir_not_delete, 'test.log'), 'w')
     ft.close()
     session.flush()
     log_delete.log_delete()
     self.assertRaises(AssertionError, self._assert_logs_not_in_db,
                       self.job_to_delete)
     try:
         self.check_dir_not_there(dir_not_delete)
         raise Exception('%s was deleted when it shold not have been' %
                         dir_not_delete)
     except AssertionError:
         pass
Пример #2
0
    def test_limit(self):
        limit = 10

        def _create_jobs():
            with session.begin():
                for i in range(limit + 1):
                    job_to_delete = data_setup.create_completed_job(
                            start_time=datetime.datetime.utcnow() - datetime.timedelta(days=60),
                            finish_time=datetime.datetime.utcnow() - datetime.timedelta(days=31))
                    job_to_delete.recipesets[0].recipes[0].logs.append(LogRecipe(filename=u'test.log'))

        def _get_output(f):
            tmp_file =  tempfile.TemporaryFile()
            sys_std_out = sys.stdout
            sys.stdout = tmp_file
            f()
            tmp_file.seek(0)
            log_delete_output = tmp_file.read()
            tmp_file.close()
            sys.stdout = sys_std_out
            return log_delete_output

        # Test with limit
        _create_jobs()
        with_limit = _get_output(lambda:
            log_delete.log_delete(dry=True, print_logs=True, limit=10))
        self.assert_(len(with_limit.splitlines()) == limit)

        # Test no limit set
        _create_jobs()
        no_limit = _get_output(lambda:
            log_delete.log_delete(dry=True, print_logs=True))
        self.assert_(len(no_limit.splitlines()) > limit)
Пример #3
0
    def test_limit(self):
        limit = 10

        def _create_jobs():
            with session.begin():
                for i in range(limit + 1):
                    job_to_delete = data_setup.create_completed_job(
                            start_time=datetime.datetime.utcnow() - datetime.timedelta(days=60),
                            finish_time=datetime.datetime.utcnow() - datetime.timedelta(days=31))
                    job_to_delete.recipesets[0].recipes[0].logs.append(LogRecipe(filename=u'test.log'))

        def _get_output(f):
            tmp_file =  tempfile.TemporaryFile()
            sys_std_out = sys.stdout
            sys.stdout = tmp_file
            f()
            tmp_file.seek(0)
            log_delete_output = tmp_file.read()
            tmp_file.close()
            sys.stdout = sys_std_out
            return log_delete_output

        # Test with limit
        _create_jobs()
        with_limit = _get_output(lambda:
            log_delete.log_delete(dry=True, print_logs=True, limit=10))
        self.assert_(len(with_limit.splitlines()) == limit)

        # Test no limit set
        _create_jobs()
        no_limit = _get_output(lambda:
            log_delete.log_delete(dry=True, print_logs=True))
        self.assert_(len(no_limit.splitlines()) > limit)
Пример #4
0
 def test_recipe_task_result_rows_are_deleted(self):
     with session.begin():
         self.job_to_delete.to_delete = datetime.datetime.utcnow()
         recipe = self.job_to_delete.recipesets[0].recipes[0]
         recipetask = recipe.tasks[0]
         self.assertEqual(len(recipetask.results), 1)
     log_delete.log_delete()
     with session.begin():
         recipetask = RecipeTask.by_id(recipetask.id)
         self.assertEqual(len(recipetask.results), 0)
Пример #5
0
 def test_rendered_kickstart_is_deleted(self):
     with session.begin():
         self.job_to_delete.to_delete = datetime.datetime.utcnow()
         recipe = self.job_to_delete.recipesets[0].recipes[0]
         ks = RenderedKickstart(kickstart=u'This is not a real kickstart.')
         recipe.rendered_kickstart = ks
     log_delete.log_delete()
     with session.begin():
         self.assertEqual(Recipe.by_id(recipe.id).rendered_kickstart, None)
         self.assertRaises(NoResultFound, RenderedKickstart.by_id, ks.id)
Пример #6
0
 def test_rendered_kickstart_is_deleted(self):
     with session.begin():
         self.job_to_delete.to_delete = datetime.datetime.utcnow()
         recipe = self.job_to_delete.recipesets[0].recipes[0]
         ks = RenderedKickstart(kickstart=u'This is not a real kickstart.')
         recipe.rendered_kickstart = ks
     log_delete.log_delete()
     with session.begin():
         self.assertEqual(Recipe.by_id(recipe.id).rendered_kickstart, None)
         self.assertRaises(NoResultFound, RenderedKickstart.by_id, ks.id)
Пример #7
0
 def test_log_delete_to_delete(self):
     with session.begin():
         self.job_to_delete.to_delete = datetime.datetime.utcnow()
         self.job_to_delete.recipesets[0].recipes[0].logs.append(LogRecipe(filename=u'test.log'))
     r_ = self.job_to_delete.recipesets[0].recipes[0]
     dir = os.path.join(r_.logspath ,r_.filepath)
     self.make_dir(dir)
     f = open(os.path.join(dir,'test.log'), 'w')
     f.close()
     log_delete.log_delete()
     self._assert_logs_not_in_db(Job.by_id(self.job_to_delete.id))
     self.check_dir_not_there(dir)
Пример #8
0
 def test_log_delete_to_delete(self):
     with session.begin():
         self.job_to_delete.to_delete = datetime.datetime.utcnow()
         self.job_to_delete.recipesets[0].recipes[0].logs.append(LogRecipe(filename=u'test.log'))
     r_ = self.job_to_delete.recipesets[0].recipes[0]
     dir = os.path.join(r_.logspath ,r_.filepath)
     self.make_dir(dir)
     f = open(os.path.join(dir,'test.log'), 'w')
     f.close()
     log_delete.log_delete()
     self._assert_logs_not_in_db(Job.by_id(self.job_to_delete.id))
     self.check_dir_not_there(dir)
Пример #9
0
    def test_log_delete_expired(self):
        with session.begin():
            job_to_delete = data_setup.create_completed_job(
                    start_time=datetime.datetime.utcnow() - datetime.timedelta(days=60),
                    finish_time=datetime.datetime.utcnow() - datetime.timedelta(days=31))
            self.job_to_delete.owner = self.user
            job_to_delete.recipesets[0].recipes[0].logs.append(LogRecipe(filename=u'test.log'))
            r_delete = job_to_delete.recipesets[0].recipes[0]
            dir_delete = os.path.join(r_delete.logspath ,r_delete.filepath)

        self.make_dir(dir_delete)
        fd = open(os.path.join(dir_delete,'test.log'), 'w')
        fd.close()
        log_delete.log_delete()
        self._assert_logs_not_in_db(Job.by_id(job_to_delete.id))
        self.check_dir_not_there(dir_delete)
Пример #10
0
    def test_log_delete_expired(self):
        with session.begin():
            job_to_delete = data_setup.create_completed_job(
                    start_time=datetime.datetime.utcnow() - datetime.timedelta(days=60),
                    finish_time=datetime.datetime.utcnow() - datetime.timedelta(days=31))
            self.job_to_delete.owner = self.user
            job_to_delete.recipesets[0].recipes[0].logs.append(LogRecipe(filename=u'test.log'))
            r_delete = job_to_delete.recipesets[0].recipes[0]
            dir_delete = os.path.join(r_delete.logspath ,r_delete.filepath)

        self.make_dir(dir_delete)
        fd = open(os.path.join(dir_delete,'test.log'), 'w')
        fd.close()
        log_delete.log_delete()
        self._assert_logs_not_in_db(Job.by_id(job_to_delete.id))
        self.check_dir_not_there(dir_delete)
Пример #11
0
    def test_does_not_load_RecipeTaskResults(self):
        # In large jobs with many RecipeTasks and RecipeTaskResults,
        # beaker-log-delete would previously take a long time and a lot of
        # memory, because it was traversing the entire object graph down to
        # RecipeTaskResult and loading them all into memory.
        # This test is asserting that no RecipeTask or RecipeTaskResult
        # instances are loaded when beaker-log-delete runs.

        with session.begin():
            job = data_setup.create_completed_job()
            job.deleted = datetime.datetime.utcnow()
            recipe = job.recipesets[0].recipes[0]

            server = self.log_server_url + '/recipe/'
            open(os.path.join(self.recipe_logs_dir, 'recipe.log'), 'w').write('dummy')
            recipe.logs[:] = [LogRecipe(server=server, filename=u'recipe.log')]
            open(os.path.join(self.recipe_logs_dir, 'task.log'), 'w').write('dummy')
            recipe.tasks[0].logs[:] = [LogRecipeTask(server=server, filename=u'task.log')]
            open(os.path.join(self.recipe_logs_dir, 'result.log'), 'w').write('dummy')
            recipe.tasks[0].results[0].logs[:] = \
                [LogRecipeTaskResult(server=server, filename=u'result.log')]

        # RecipeTasks/RecipeTaskResults are already loaded from the data_setup
        # calls above, expunge the session so that log_delete starts from
        # a clean slate.
        session.expunge_all()

        with mock.patch.object(RecipeTask, '__new__', side_effect=AssertionError):
            with mock.patch.object(RecipeTaskResult, '__new__', side_effect=AssertionError):
                self.assertEquals(log_delete.log_delete(), 0)  # exit status

        # Check that we really deleted something, if not the test setup was faulty.
        with session.begin():
            job = Job.by_id(job.id)
            self.assertIsNotNone(job.purged)
Пример #12
0
 def test_deletion(self):
     os.mkdir(os.path.join(self.logs_dir, 'recipe'))
     open(os.path.join(self.logs_dir, 'recipe', 'dummy.txt'), 'w').write('dummy')
     os.mkdir(os.path.join(self.logs_dir, 'dont_tase_me_bro'))
     self.create_deleted_job_with_log(u'recipe/', u'dummy.txt')
     self.assertEquals(log_delete.log_delete(), 0) # exit status
     self.assert_(not os.path.exists(os.path.join(self.logs_dir, 'recipe')))
     self.assert_(os.path.exists(os.path.join(self.logs_dir, 'dont_tase_me_bro')))
Пример #13
0
 def test_deletes_old_jobs_which_never_started(self):
     with session.begin():
         the_past = datetime.datetime.utcnow() - datetime.timedelta(days=31)
         cancelled_job = data_setup.create_job(queue_time=the_past)
         cancelled_job.cancel()
         cancelled_job.update_status()
         aborted_job = data_setup.create_job(queue_time=the_past)
         aborted_job.abort()
         aborted_job.update_status()
         self.assertEqual(cancelled_job.status, TaskStatus.cancelled)
         self.assertEqual(aborted_job.status, TaskStatus.aborted)
         self.assertIsNone(cancelled_job.recipesets[0].recipes[0].finish_time)
         self.assertIsNone(aborted_job.recipesets[0].recipes[0].finish_time)
         self.assertIsNone(cancelled_job.deleted)
         self.assertIsNone(aborted_job.deleted)
     log_delete.log_delete()
     with session.begin():
         self.assertIsNotNone(Job.by_id(cancelled_job.id).deleted)
         self.assertIsNotNone(Job.by_id(aborted_job.id).deleted)
Пример #14
0
 def test_log_not_delete(self):
     # Job that is not within it's expiry time
     with session.begin():
         job_not_delete = data_setup.create_completed_job(
                 start_time=datetime.datetime.utcnow() - datetime.timedelta(days=60),
                 finish_time=datetime.datetime.utcnow() - datetime.timedelta(days=29))
     job_not_delete.recipesets[0].recipes[0].logs.append(LogRecipe(filename=u'test.log'))
     r_not_delete = job_not_delete.recipesets[0].recipes[0]
     dir_not_delete = os.path.join(r_not_delete.logspath ,r_not_delete.filepath)
     self.make_dir(dir_not_delete)
     ft = open(os.path.join(dir_not_delete,'test.log'), 'w')
     ft.close()
     session.flush()
     log_delete.log_delete()
     self.assertRaises(AssertionError, self._assert_logs_not_in_db, self.job_to_delete)
     try:
         self.check_dir_not_there(dir_not_delete)
         raise Exception('%s was deleted when it shold not have been' % dir_not_delete)
     except AssertionError:
         pass
Пример #15
0
    def test_does_not_load_RecipeTaskResults(self):
        # In large jobs with many RecipeTasks and RecipeTaskResults, 
        # beaker-log-delete would previously take a long time and a lot of 
        # memory, because it was traversing the entire object graph down to 
        # RecipeTaskResult and loading them all into memory.
        # This test is asserting that no RecipeTask or RecipeTaskResult 
        # instances are loaded when beaker-log-delete runs.

        with session.begin():
            job = data_setup.create_completed_job()
            job.to_delete = datetime.datetime.utcnow()
            self.assertTrue(job.is_expired)
            recipe = job.recipesets[0].recipes[0]

            server = self.log_server_url + '/recipe/'
            open(os.path.join(self.recipe_logs_dir, 'recipe.log'), 'w').write('dummy')
            recipe.logs[:] = [LogRecipe(server=server, filename=u'recipe.log')]
            open(os.path.join(self.recipe_logs_dir, 'task.log'), 'w').write('dummy')
            recipe.tasks[0].logs[:] = [LogRecipeTask(server=server, filename=u'task.log')]
            open(os.path.join(self.recipe_logs_dir, 'result.log'), 'w').write('dummy')
            recipe.tasks[0].results[0].logs[:] = \
                [LogRecipeTaskResult(server=server, filename=u'result.log')]

        # RecipeTasks/RecipeTaskResults are already loaded from the data_setup 
        # calls above, expunge the session so that log_delete starts from 
        # a clean slate.
        session.expunge_all()

        with mock.patch.object(RecipeTask, '__new__', side_effect=AssertionError):
            with mock.patch.object(RecipeTaskResult, '__new__', side_effect=AssertionError):
                self.assertEquals(log_delete.log_delete(), 0) # exit status

        # Check that we really deleted something, if not the test setup was faulty.
        with session.begin():
            job = Job.by_id(job.id)
            self.assertIsNotNone(job.deleted)
Пример #16
0
 def test_404(self):
     self.create_deleted_job_with_log(u'notexist/', u'dummy.txt')
     self.assertEquals(log_delete.log_delete(), 0) # exit status
Пример #17
0
 def test_302_redirect(self):
     os.mkdir(os.path.join(self.logs_dir, 'recipe'))
     open(os.path.join(self.logs_dir, 'recipe', 'dummy.txt'), 'w').write('dummy')
     self.create_deleted_job_with_log(u'redirect/302/recipe/', u'dummy.txt')
     self.assertEquals(log_delete.log_delete(), 0) # exit status
     self.assert_(not os.path.exists(os.path.join(self.logs_dir, 'recipe')))
Пример #18
0
 def test_404(self):
     self.create_deleted_job_with_log(u'notexist/', u'dummy.txt')
     self.assertEquals(log_delete.log_delete(), 0) # exit status
Пример #19
0
 def test_302_redirect(self):
     open(os.path.join(self.recipe_logs_dir, 'dummy.txt'), 'w').write('dummy')
     self.create_deleted_job_with_log(u'redirect/302/recipe/', u'dummy.txt')
     self.assertEquals(log_delete.log_delete(), 0) # exit status
     self.assert_(not os.path.exists(os.path.join(self.logs_dir, 'recipe')))