def test_delayed_jobs(self): with session.begin(): # Create a queued job that was submitted a long time ago recipe = data_setup.create_recipe() job = data_setup.create_job_for_recipes([recipe]) job.owner = self.user data_setup.mark_job_queued(job) job.recipesets[0].queue_time = datetime.utcnow() - timedelta(days=self.delayed_job_age) # create a job with two recipes, one Queued and one Scheduled # which was submitted a long time ago queued_recipe = data_setup.create_recipe() scheduled_recipe = data_setup.create_recipe() job_with_multiple_recipes = data_setup.create_job_for_recipes([queued_recipe, scheduled_recipe]) job_with_multiple_recipes.owner = self.user # mark recipe Queued queued_recipe.process() queued_recipe.queue() # mark recipe Scheduled scheduled_recipe.process() scheduled_recipe.queue() scheduled_recipe.schedule() data_setup.mark_job_queued(job_with_multiple_recipes) job_with_multiple_recipes.recipesets[0].queue_time = datetime.utcnow()\ - timedelta(days=self.delayed_job_age) # create a new submmited job for just now recently_submmited_job = data_setup.create_job_for_recipes([recipe]) recently_submmited_job.owner = self.user data_setup.mark_job_queued(recently_submmited_job) beaker_usage = BeakerUsage(self.user, self.reservation_expiry, self.reservation_length, self.waiting_recipe_age, self.delayed_job_age) delayed_jobs = beaker_usage.delayed_jobs() self.assertEqual(len(delayed_jobs), 2) self.assertEqual(absolute_url('/jobs/%s' % job.id), delayed_jobs[0][1]) self.assertEqual(absolute_url('/jobs/%s' % job_with_multiple_recipes.id), delayed_jobs[1][1])
def test_send_usage_reminder(self): with session.begin(): email_content = self._create_expiring_reservation() email_content += self._create_open_reservation() email_content += self._create_delayed_job() beaker_usage = BeakerUsage(self.user, self.reservation_expiry, self.reservation_length, self.waiting_recipe_age, self.delayed_job_age) current_date = datetime.utcnow().strftime("%Y-%m-%d") data = { 'user_name': self.user.user_name, 'current_date': current_date, 'beaker_fqdn': absolute_url('/'), 'reservation_expiry': self.reservation_expiry, 'reservation_length': self.reservation_length, 'waiting_recipe_age': self.waiting_recipe_age, 'delayed_job_age': self.delayed_job_age, 'expiring_reservations': beaker_usage.expiring_reservations(), 'open_reservations': beaker_usage.open_in_demand_systems(), 'delayed_jobs': beaker_usage.delayed_jobs() } mail_capture_thread.start_capturing() with session.begin(): bkr.server.mail.send_usage_reminder(self.user, data) captured_mails = mail_capture_thread.stop_capturing() self.assertEqual(len(captured_mails), 1) sender, rcpts, raw_msg = captured_mails[0] self.assertEqual(rcpts, [self.user.email_address]) msg = email.message_from_string(raw_msg) self.assertEqual(msg['To'], self.user.email_address) self.assertTrue( msg['Subject'], '[Beaker] Usage report for %s (%s)' % (self.user.user_name, current_date)) expected_mail_body = u"""========= [Beaker] Usage report for %s (%s) ========= Hi %s, %s =========""" % (self.user.user_name, current_date, self.user.user_name, email_content) actual_mail_body = msg.get_payload(decode=True) self.assertEqual(actual_mail_body, expected_mail_body) self.assertEqual(msg['X-Beaker-Notification'], 'usage-report')
def test_send_usage_reminder(self): with session.begin(): email_content = self._create_expiring_reservation() email_content += self._create_open_reservation() email_content += self._create_delayed_job() beaker_usage = BeakerUsage(self.user, self.reservation_expiry, self.reservation_length, self.waiting_recipe_age, self.delayed_job_age) current_date = datetime.utcnow().strftime("%Y-%m-%d") data = { 'user_name': self.user.user_name, 'current_date': current_date, 'beaker_fqdn': absolute_url('/'), 'reservation_expiry': self.reservation_expiry, 'reservation_length': self.reservation_length, 'waiting_recipe_age': self.waiting_recipe_age, 'delayed_job_age': self.delayed_job_age, 'expiring_reservations': beaker_usage.expiring_reservations(), 'open_reservations': beaker_usage.open_in_demand_systems(), 'delayed_jobs': beaker_usage.delayed_jobs() } mail_capture_thread.start_capturing() with session.begin(): bkr.server.mail.send_usage_reminder(self.user, data) captured_mails = mail_capture_thread.stop_capturing() self.assertEqual(len(captured_mails),1) sender, rcpts, raw_msg = captured_mails[0] self.assertEqual(rcpts, [self.user.email_address]) msg = email.message_from_string(raw_msg) self.assertEqual(msg['To'], self.user.email_address) self.assertTrue(msg['Subject'], '[Beaker] Usage report for %s (%s)' % (self.user.user_name, current_date)) expected_mail_body = u"""========= [Beaker] Usage report for %s (%s) ========= Hi %s, %s =========""" % (self.user.user_name, current_date, self.user.user_name, email_content) actual_mail_body = msg.get_payload(decode=True) self.assertEqual(actual_mail_body, expected_mail_body) self.assertEqual(msg['X-Beaker-Notification'], 'usage-report')