def test_expiring_reservation(self): with session.begin(): # recipe running /distribution/reservesys expiring soon expiring_soon = data_setup.create_recipe_reservation(self.user, u'/distribution/reservesys', (self.reservation_expiry - 1) * 3600) # recipe running /distribution/reservesys expiring after the cut-off expiring_later = data_setup.create_recipe_reservation(self.user, u'/distribution/reservesys', (self.reservation_expiry * 2) * 3600) # recipe expiring soon but running a real task not_reserved = data_setup.create_recipe_reservation(self.user, u'/something/else', (self.reservation_expiry - 1) * 3600) beaker_usage = BeakerUsage(self.user, self.reservation_expiry, self.reservation_length, self.waiting_recipe_age, self.delayed_job_age) expiring_reservations = beaker_usage.expiring_reservations() self.assertEqual(len(expiring_reservations), 1) self.assertEqual(expiring_reservations[0][1], expiring_soon.resource.fqdn)
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')