Esempio n. 1
0
def _fail_unexpected(build, exception):
    r = Run(build, "build-failure")
    db.session.add(r)
    r.set_status(BuildStatus.FAILED)
    db.session.commit()
    storage = Storage()
    with storage.console_logfd(r, "a") as f:
        f.write("Unexpected error prevented build from running:\n")
        f.write(str(exception))
    storage.copy_log(r)

    if BUILD_URL_FMT:
        url = BUILD_URL_FMT.format(project=build.project.name,
                                   build=build.build_id)
    else:
        url = url_for(
            "api_run.run_get_artifact",
            proj=build.project.name,
            build_id=build.build_id,
            run=r.name,
            path="console.log",
        )

    exception = ApiError(500, str(exception))
    exception.resp.headers.extend({"Location": url})
    return exception
Esempio n. 2
0
class SendmailTest(JobServTest):
    def setUp(self):
        super().setUp()
        self.create_projects("job-1")
        self.proj = Project.query.filter_by(name="job-1").first_or_404()
        self.build = Build.create(self.proj)

        self.run = Run(self.build, "run-name")
        db.session.add(self.run)
        self.run.set_status(BuildStatus.FAILED)

    @patch("jobserv.notify.smtplib")
    def test_notify_build_complete(self, smtplib):
        smtplib.SMTP().starttls.return_value = (220, b"ok")
        smtplib.SMTP().login.return_value = (235, b"ok")
        notify_build_complete_email(self.build, "*****@*****.**")
        msg = smtplib.SMTP().send_message.call_args_list[0][0][0]
        self.assertEqual("jobserv: job-1 build #1 : FAILED", msg["Subject"])
        self.assertIn("\n  run-name: FAILED", msg.get_payload())

    def test_get_build_stats(self):
        # we already have one build created from constructor
        for i in range(9):
            b = Build.create(self.proj)
            r = Run(b, "run-name")
            db.session.add(r)
            if i % 2:
                r.set_status(BuildStatus.FAILED)
            else:
                r.set_status(BuildStatus.PASSED)
        db.session.commit()
        stats = _get_build_stats(b)
        self.assertEqual(10, stats["total"])
        self.assertEqual(5, stats["passes"])
        self.assertEqual(50, stats["pass_rate"])
Esempio n. 3
0
 def test_get_build_stats(self):
     # we already have one build created from constructor
     for i in range(9):
         b = Build.create(self.proj)
         r = Run(b, "run-name")
         db.session.add(r)
         if i % 2:
             r.set_status(BuildStatus.FAILED)
         else:
             r.set_status(BuildStatus.PASSED)
     db.session.commit()
     stats = _get_build_stats(b)
     self.assertEqual(10, stats["total"])
     self.assertEqual(5, stats["passes"])
     self.assertEqual(50, stats["pass_rate"])
Esempio n. 4
0
    def test_run_get(self, storage):
        db.session.add(Run(self.build, "run0"))
        db.session.add(Run(self.build, "run1"))

        # be a little anal and make sure our DB queries can handle
        # multiple jobs with the same run names
        self.create_projects("proj-2")
        p = Project.query.all()[1]
        b = Build.create(p)
        r = Run(b, "run0")
        db.session.add(r)
        r.set_status(BuildStatus.PASSED)
        r = Run(b, "run1")
        db.session.add(r)
        r.set_status(BuildStatus.FAILED)

        data = self.get_json(self.urlbase + "run1/")["run"]
        self.assertEqual("run1", data["name"])
        self.assertEqual("QUEUED", data["status"])

        url = "/projects/proj-2/builds/%d/runs/%s/" % (b.build_id, "run1")
        data = self.get_json(url)["run"]
        self.assertEqual("FAILED", data["status"])
        self.assertEqual("FAILED", data["status_events"][0]["status"])
Esempio n. 5
0
    def test_run_get(self, storage):
        db.session.add(Run(self.build, 'run0'))
        db.session.add(Run(self.build, 'run1'))

        # be a little anal and make sure our DB queries can handle
        # multiple jobs with the same run names
        self.create_projects('proj-2')
        p = Project.query.all()[1]
        b = Build.create(p)
        r = Run(b, 'run0')
        db.session.add(r)
        r.set_status(BuildStatus.PASSED)
        r = Run(b, 'run1')
        db.session.add(r)
        r.set_status(BuildStatus.FAILED)

        data = self.get_json(self.urlbase + 'run1/')['run']
        self.assertEqual('run1', data['name'])
        self.assertEqual('QUEUED', data['status'])

        url = '/projects/proj-2/builds/%d/runs/%s/' % (b.build_id, 'run1')
        data = self.get_json(url)['run']
        self.assertEqual('FAILED', data['status'])
        self.assertEqual('FAILED', data['status_events'][0]['status'])