Exemple #1
0
    def test_simple(self):
        project = self.create_project()
        plan = self.create_plan()
        plan.projects.append(project)
        build = self.create_build(project)
        job = self.create_job(build)

        db.session.add(ItemOption(
            item_id=plan.id,
            name='mail.notify-author',
            value='0',
        ))

        db.session.add(ProjectOption(
            project_id=project.id,
            name='mail.notify-author',
            value='1',
        ))

        db.session.add(ProjectOption(
            project_id=project.id,
            name='mail.notify-addresses',
            value='*****@*****.**',
        ))
        db.session.flush()

        self.create_job_plan(job, plan)

        db.session.commit()

        handler = MailNotificationHandler()
        assert handler.get_job_options(job) == {
            'mail.notify-addresses': '*****@*****.**',
            'mail.notify-author': '0',
        }
Exemple #2
0
    def test_simple(self):
        project = self.project
        plan = self.create_plan()
        plan.projects.append(project)
        build = self.create_build(project)
        job = self.create_job(build)
        self.create_job_plan(job, plan)

        db.session.add(
            ItemOption(
                item_id=plan.id,
                name='mail.notify-author',
                value='0',
            ))

        db.session.add(
            ProjectOption(
                project_id=project.id,
                name='mail.notify-author',
                value='1',
            ))

        db.session.add(
            ProjectOption(
                project_id=project.id,
                name='mail.notify-addresses',
                value='*****@*****.**',
            ))
        db.session.commit()

        handler = MailNotificationHandler()
        assert handler.get_job_options(job) == {
            'mail.notify-addresses': '*****@*****.**',
            'mail.notify-author': '0',
        }
Exemple #3
0
    def test_simple(self):
        project = self.create_project()
        plan = self.create_plan(project)
        build = self.create_build(project, result=Result.failed)
        job = self.create_job(build, result=Result.failed)

        db.session.add(ItemOption(
            item_id=plan.id,
            name='mail.notify-author',
            value='0',
        ))

        db.session.add(ProjectOption(
            project_id=project.id,
            name='mail.notify-author',
            value='1',
        ))

        db.session.add(ProjectOption(
            project_id=project.id,
            name='mail.notify-addresses',
            value='*****@*****.**',
        ))
        db.session.flush()

        self.create_job_plan(job, plan)

        db.session.commit()

        handler = MailNotificationHandler()
        assert handler.get_build_options(build) == {
            'mail.notify-addresses': {'*****@*****.**'},
            'mail.notify-addresses-revisions': set(),
            'mail.notify-author': False,
        }
Exemple #4
0
    def test_with_revision_addressees(self):
        db.session.add(ProjectOption(project=self.project, name="mail.notify-author", value="1"))
        db.session.add(
            ProjectOption(
                project=self.project, name="mail.notify-addresses-revisions", value="[email protected], [email protected]"
            )
        )

        author = self.create_author("*****@*****.**")
        patch = Patch(repository=self.repo, project=self.project, label="foo", diff="")
        source = self.create_source(self.project, patch=patch)
        build = self.create_build(project=self.project, source=source, author=author, result=Result.failed)
        job = self.create_job(build=build)
        db.session.commit()

        handler = MailNotificationHandler()
        recipients = handler.get_recipients(job)

        assert recipients == ["{0} <*****@*****.**>".format(author.name)]

        build = self.create_build(project=self.project, result=Result.failed, author=author)
        job = self.create_job(build=build)

        job_finished_handler(job)

        handler = MailNotificationHandler()
        recipients = handler.get_recipients(job)

        assert recipients == ["{0} <*****@*****.**>".format(author.name), "*****@*****.**", "*****@*****.**"]
Exemple #5
0
    def test_multiple_jobs(self):
        project = self.create_project()
        build = self.create_build(project, result=Result.failed)
        job1 = self.create_job(build, result=Result.failed)
        job2 = self.create_job(build, result=Result.failed)
        plan1 = self.create_plan(project)
        plan2 = self.create_plan(project)

        # Plan1 options.
        db.session.add(ItemOption(
            item_id=plan1.id,
            name='mail.notify-addresses',
            value='*****@*****.**',
        ))
        db.session.add(ItemOption(
            item_id=plan1.id,
            name='mail.notify-author',
            value='0',
        ))

        # Plan2 options.
        db.session.add(ItemOption(
            item_id=plan2.id,
            name='mail.notify-addresses',
            value='*****@*****.**',
        ))
        db.session.add(ItemOption(
            item_id=plan2.id,
            name='mail.notify-author',
            value='1',
        ))

        # Project options (notify-author is set to test that plan options can
        # override it).
        db.session.add(ProjectOption(
            project_id=project.id,
            name='mail.notify-author',
            value='0',
        ))

        # Set notify addresses to verify that it is not used when all jobs
        # override it.
        db.session.add(ProjectOption(
            project_id=project.id,
            name='mail.notify-addresses',
            value='*****@*****.**',
        ))
        db.session.flush()

        for job, plan in [(job1, plan1), (job2, plan2)]:
            self.create_job_plan(job, plan)

        db.session.commit()

        handler = MailNotificationHandler()
        assert handler.get_build_options(build) == {
            'mail.notify-addresses': {'*****@*****.**', '*****@*****.**'},
            'mail.notify-addresses-revisions': set(),
            'mail.notify-author': True,
        }
Exemple #6
0
    def test_with_addressees(self):
        db.session.add(
            ProjectOption(project=self.project,
                          name='mail.notify-author',
                          value='1'))
        db.session.add(
            ProjectOption(project=self.project,
                          name='mail.notify-addresses',
                          value='[email protected], [email protected]'))

        author = self.create_author('*****@*****.**')
        build = self.create_build(self.project,
                                  result=Result.failed,
                                  author=author)
        job = self.create_job(build)
        db.session.commit()

        handler = MailNotificationHandler()
        recipients = handler.get_recipients(job)

        assert recipients == [
            '{0} <*****@*****.**>'.format(author.name),
            '*****@*****.**',
            '*****@*****.**',
        ]
Exemple #7
0
    def test_default_options(self):
        author = self.create_author('*****@*****.**')
        build = self.create_build(self.project, result=Result.passed, author=author)
        job = self.create_job(build)

        handler = MailNotificationHandler()
        recipients = handler.get_recipients(job)

        assert recipients == ['{0} <*****@*****.**>'.format(author.name)]
Exemple #8
0
    def test_multiple_sources(self, get_recipients):
        project = self.create_project(name='test', slug='test')
        build = self.create_build(project, target='D1234')
        job = self.create_job(build=build, result=Result.failed)
        phase = self.create_jobphase(job=job)
        step = self.create_jobstep(phase=phase)
        logsource = self.create_logsource(
            step=step,
            name='console',
        )
        self.create_logchunk(
            source=logsource,
            text='hello world',
        )
        phase2 = self.create_jobphase(job=job, label='other')
        step2 = self.create_jobstep(phase=phase2)
        logsource2 = self.create_logsource(
            step=step2,
            name='other',
        )
        self.create_logchunk(
            source=logsource2,
            text='hello world',
        )

        job_link = 'http://example.com/projects/test/builds/%s/jobs/%s/' % (
            build.id.hex,
            job.id.hex,
        )
        log_link1 = '%slogs/%s/' % (job_link, logsource.id.hex)
        log_link2 = '%slogs/%s/' % (job_link, logsource2.id.hex)

        get_recipients.return_value = [
            '*****@*****.**', 'Bob <*****@*****.**>'
        ]

        handler = MailNotificationHandler()
        handler.send(job, None)

        assert len(self.outbox) == 1
        msg = self.outbox[0]

        assert msg.subject == '%s FAILED - %s %s #%s.%s' % (
            job.build.target, job.project.name, job.build.label,
            job.build.number, job.number)
        assert msg.recipients == ['*****@*****.**', 'Bob <*****@*****.**>']
        assert msg.extra_headers[
            'Reply-To'] == '[email protected], Bob <*****@*****.**>'

        assert job_link in msg.html
        assert job_link in msg.body
        assert log_link1 in msg.html
        assert log_link1 in msg.body
        assert log_link2 in msg.html
        assert log_link2 in msg.body

        assert msg.as_string()
Exemple #9
0
    def test_subject_branch(self, get_recipients):
        project = self.create_project(name='test', slug='test')
        repo = project.repository
        branches = ['master', 'branch1']
        branch_str = ' (%s)' % ','.join(branches)
        revision = self.create_revision(repository=repo, branches=branches)
        source = self.create_source(
            project=project,
            revision=revision,
        )
        build = self.create_build(
            project=project,
            source=source,
            label='Test diff',
            target='D1234',
        )
        job = self.create_job(build=build, result=Result.failed)
        phase = self.create_jobphase(job=job)
        step = self.create_jobstep(phase=phase)
        logsource = self.create_logsource(
            step=step,
            name='console',
        )
        self.create_logchunk(
            source=logsource,
            text='hello world',
        )

        job_link = 'http://example.com/projects/test/builds/%s/jobs/%s/' % (
            build.id.hex,
            job.id.hex,
        )
        log_link = '%slogs/%s/' % (job_link, logsource.id.hex)

        get_recipients.return_value = [
            '*****@*****.**', 'Bob <*****@*****.**>'
        ]

        handler = MailNotificationHandler()
        handler.send(job, None)

        assert len(self.outbox) == 1
        msg = self.outbox[0]

        assert msg.subject == '%s FAILED - %s%s %s #%s.%s' % (
            job.build.target, job.project.name, branch_str, job.build.label,
            job.build.number, job.number)
        assert msg.recipients == ['*****@*****.**', 'Bob <*****@*****.**>']
        assert msg.extra_headers[
            'Reply-To'] == '[email protected], Bob <*****@*****.**>'

        assert job_link in msg.html
        assert job_link in msg.body
        assert log_link in msg.html
        assert log_link in msg.body

        assert msg.as_string()
Exemple #10
0
    def test_default_options(self):
        project = self.create_project()
        author = self.create_author('*****@*****.**')
        build = self.create_build(project, result=Result.failed, author=author)

        handler = MailNotificationHandler()
        recipients = handler.get_build_recipients(build)

        assert recipients == ['{0} <*****@*****.**>'.format(author.name)]
Exemple #11
0
    def test_default_options(self):
        project = self.create_project()
        author = self.create_author('*****@*****.**')
        build = self.create_build(project, result=Result.failed, author=author)

        handler = MailNotificationHandler()
        recipients = handler.get_build_recipients(build)

        assert recipients == ['{0} <*****@*****.**>'.format(author.name)]
Exemple #12
0
    def test_multiple_sources(self, get_collection_recipients):
        project = self.create_project(name='test', slug='test')
        build = self.create_build(
            project,
            date_started=datetime.utcnow(),
            result=Result.failed,
        )
        job = self.create_job(build=build, result=Result.failed)
        phase = self.create_jobphase(job=job)
        step = self.create_jobstep(phase=phase)
        logsource = self.create_logsource(
            step=step,
            name='console',
        )
        self.create_logchunk(
            source=logsource,
            text='hello world',
        )
        phase2 = self.create_jobphase(job=job, label='other')
        step2 = self.create_jobstep(phase=phase2)
        logsource2 = self.create_logsource(
            step=step2,
            name='other',
        )
        self.create_logchunk(
            source=logsource2,
            text='hello world',
        )

        job_link = 'http://example.com/projects/%s/builds/%s/jobs/%s/' % (
            project.slug, build.id.hex, job.id.hex,)
        log_link1 = '%slogs/%s/' % (job_link, logsource.id.hex)
        log_link2 = '%slogs/%s/' % (job_link, logsource2.id.hex)

        get_collection_recipients.return_value = ['*****@*****.**', 'Bob <*****@*****.**>']

        handler = MailNotificationHandler()
        context = handler.get_collection_context([build])
        msg = handler.get_msg(context)
        handler.send(msg, build)

        assert len(self.outbox) == 1
        msg = self.outbox[0]

        assert msg.subject == '%s failed - %s' % (
            'D1234', job.build.label)
        assert msg.recipients == ['*****@*****.**', 'Bob <*****@*****.**>']
        assert msg.extra_headers['Reply-To'] == '[email protected], Bob <*****@*****.**>'

        assert job_link in msg.html
        assert job_link in msg.body
        assert log_link1 in msg.html
        assert log_link1 in msg.body
        assert log_link2 in msg.html
        assert log_link2 in msg.body

        assert msg.as_string()
Exemple #13
0
    def test_without_author_option(self):
        db.session.add(ProjectOption(project=self.project, name="mail.notify-author", value="0"))
        author = self.create_author("*****@*****.**")
        build = self.create_build(self.project, result=Result.failed, author=author)
        job = self.create_job(build)
        db.session.commit()

        handler = MailNotificationHandler()
        recipients = handler.get_recipients(job)

        assert recipients == []
Exemple #14
0
    def test_default_options(self):
        author = self.create_author('*****@*****.**')
        build = self.create_build(self.project,
                                  result=Result.passed,
                                  author=author)
        job = self.create_job(build)

        handler = MailNotificationHandler()
        recipients = handler.get_recipients(job)

        assert recipients == ['{0} <*****@*****.**>'.format(author.name)]
Exemple #15
0
    def test_without_author_option(self):
        project = self.create_project()
        db.session.add(ProjectOption(
            project=project, name='mail.notify-author', value='0'))
        author = self.create_author('*****@*****.**')
        build = self.create_build(project, result=Result.failed, author=author)
        db.session.commit()

        handler = MailNotificationHandler()
        recipients = handler.get_build_recipients(build)

        assert recipients == []
Exemple #16
0
    def test_subject_branch(self, get_recipients):
        project = self.create_project(name='test', slug='test')
        repo = project.repository
        branches = ['master', 'branch1']
        branch_str = ' (%s)' % ','.join(branches)
        revision = self.create_revision(repository=repo, branches=branches)
        source = self.create_source(
            project=project,
            revision=revision,
        )
        build = self.create_build(
            project=project,
            source=source,
            label='Test diff',
            target='D1234',
        )
        job = self.create_job(build=build, result=Result.failed)
        phase = self.create_jobphase(job=job)
        step = self.create_jobstep(phase=phase)
        logsource = self.create_logsource(
            step=step,
            name='console',
        )
        self.create_logchunk(
            source=logsource,
            text='hello world',
        )

        job_link = 'http://example.com/projects/test/builds/%s/jobs/%s/' % (build.id.hex, job.id.hex,)
        log_link = '%slogs/%s/' % (job_link, logsource.id.hex)

        get_recipients.return_value = ['*****@*****.**', 'Bob <*****@*****.**>']

        handler = MailNotificationHandler()
        handler.send(job, None)

        assert len(self.outbox) == 1
        msg = self.outbox[0]

        assert msg.subject == '%s FAILED - %s%s %s #%s.%s' % (
            job.build.target, job.project.name, branch_str, job.build.label, job.build.number, job.number)
        assert msg.recipients == ['*****@*****.**', 'Bob <*****@*****.**>']
        assert msg.extra_headers['Reply-To'] == '[email protected], Bob <*****@*****.**>'

        assert job_link in msg.html
        assert job_link in msg.body
        assert log_link in msg.html
        assert log_link in msg.body

        assert msg.as_string()
    def test_with_revision_addressees(self):
        project = self.create_project()
        db.session.add(
            ProjectOption(project=project,
                          name='mail.notify-author',
                          value='1'))
        db.session.add(
            ProjectOption(project=project,
                          name='mail.notify-addresses-revisions',
                          value='[email protected], [email protected]'))

        author = self.create_author('*****@*****.**')
        author_recipient = '{0} <{1}>'.format(author.name, author.email)
        patch = self.create_patch(repository=project.repository)
        source = self.create_source(project, patch=patch)

        patch_build = self.create_build(
            project=project,
            source=source,
            author=author,
            result=Result.failed,
        )
        db.session.commit()
        patch_recipients = MailNotificationHandler().get_build_recipients(
            patch_build)
        assert patch_recipients == [author_recipient]

        ss_build = self.create_build(
            project=project,
            result=Result.failed,
            author=author,
            tags=['test-snapshot'],
        )
        ss_recipients = MailNotificationHandler().get_build_recipients(
            ss_build)
        assert ss_recipients == [author_recipient]

        commit_build = self.create_build(
            project=project,
            result=Result.failed,
            author=author,
            tags=['commit'],
        )
        commit_recipients = MailNotificationHandler().get_build_recipients(
            commit_build)
        assert commit_recipients == [
            author_recipient,
            '*****@*****.**',
            '*****@*****.**',
        ]
Exemple #18
0
    def test_without_author_option(self):
        project = self.create_project()
        db.session.add(
            ProjectOption(project=project,
                          name='mail.notify-author',
                          value='0'))
        author = self.create_author('*****@*****.**')
        build = self.create_build(project, result=Result.failed, author=author)
        db.session.commit()

        handler = MailNotificationHandler()
        recipients = handler.get_build_recipients(build)

        assert recipients == []
Exemple #19
0
    def test_multiple_sources(self, get_recipients):
        project = self.create_project(name='test', slug='test')
        build = self.create_build(project, target='D1234')
        job = self.create_job(build=build, result=Result.failed)
        phase = self.create_jobphase(job=job)
        step = self.create_jobstep(phase=phase)
        logsource = self.create_logsource(
            step=step,
            name='console',
        )
        self.create_logchunk(
            source=logsource,
            text='hello world',
        )
        phase2 = self.create_jobphase(job=job, label='other')
        step2 = self.create_jobstep(phase=phase2)
        logsource2 = self.create_logsource(
            step=step2,
            name='other',
        )
        self.create_logchunk(
            source=logsource2,
            text='hello world',
        )

        job_link = 'http://example.com/projects/test/builds/%s/jobs/%s/' % (build.id.hex, job.id.hex,)
        log_link1 = '%slogs/%s/' % (job_link, logsource.id.hex)
        log_link2 = '%slogs/%s/' % (job_link, logsource2.id.hex)

        get_recipients.return_value = ['*****@*****.**', 'Bob <*****@*****.**>']

        handler = MailNotificationHandler()
        handler.send(job, None)

        assert len(self.outbox) == 1
        msg = self.outbox[0]

        assert msg.subject == '%s Failed - %s #%s.%s' % (
            job.build.target, job.project.name, job.build.number, job.number)
        assert msg.recipients == ['*****@*****.**', 'Bob <*****@*****.**>']
        assert msg.extra_headers['Reply-To'] == '[email protected], Bob <*****@*****.**>'

        assert job_link in msg.html
        assert job_link in msg.body
        assert log_link1 in msg.html
        assert log_link1 in msg.body
        assert log_link2 in msg.html
        assert log_link2 in msg.body

        assert msg.as_string()
Exemple #20
0
    def get(self, job_id):
        job = Job.query.get(job_id)

        assert job

        handler = MailNotificationHandler()

        parent = handler.get_parent(job)
        context = handler.get_context(job, parent)

        html_content = Markup(toronado.from_string(
            render_template('listeners/mail/notification.html', **context)
        ))

        return render_template('debug/email.html', html_content=html_content)
Exemple #21
0
    def test_with_addressees(self):
        db.session.add(ProjectOption(project=self.project, name="mail.notify-author", value="1"))
        db.session.add(
            ProjectOption(project=self.project, name="mail.notify-addresses", value="[email protected], [email protected]")
        )

        author = self.create_author("*****@*****.**")
        build = self.create_build(self.project, result=Result.failed, author=author)
        job = self.create_job(build)
        db.session.commit()

        handler = MailNotificationHandler()
        recipients = handler.get_recipients(job)

        assert recipients == ["{0} <*****@*****.**>".format(author.name), "*****@*****.**", "*****@*****.**"]
    def get(self, build_id):
        build = Build.query.get(build_id)
        assert build, 'There is no build for {}'.format(build_id)

        builds = list(
            Build.query.filter(Build.collection_id == build.collection_id))
        notification_handler = MailNotificationHandler()
        context = notification_handler.get_collection_context(builds)
        msg = notification_handler.get_msg(context)
        return render_template(
            'debug/email.html',
            recipients=msg.recipients,
            subject=msg.subject,
            text_content=msg.body,
            html_content=msg.html,
        )
Exemple #23
0
    def test_simple(self):
        project = self.project
        plan = self.create_plan()
        plan.projects.append(project)
        build = self.create_build(project)
        job = self.create_job(build)
        self.create_job_plan(job, plan)

        db.session.add(ItemOption(item_id=plan.id, name="mail.notify-author", value="0"))

        db.session.add(ProjectOption(project_id=project.id, name="mail.notify-author", value="1"))

        db.session.add(ProjectOption(project_id=project.id, name="mail.notify-addresses", value="*****@*****.**"))
        db.session.commit()

        handler = MailNotificationHandler()
        assert handler.get_job_options(job) == {"mail.notify-addresses": "*****@*****.**", "mail.notify-author": "0"}
Exemple #24
0
    def test_get_subject(self):
        handler = MailNotificationHandler()

        self.assertEqual(
            'D123 passed - My \u00fcnicode diff',
            handler.get_subject('D123', 'My \u00fcnicode diff', Result.passed),
        )

        self.assertEqual(
            'Build passed - My \u00fcnicode diff',
            handler.get_subject(None, 'My \u00fcnicode diff', Result.passed),
        )

        self.assertEqual(
            'Build passed - My \u00fcnicode diff...',
            handler.get_subject(
                None, 'My \u00fcnicode diff\nwith many lines', Result.passed),
        )
Exemple #25
0
    def test_with_revision_addressees(self):
        db.session.add(ProjectOption(
            project=self.project, name='mail.notify-author', value='1'))
        db.session.add(ProjectOption(
            project=self.project, name='mail.notify-addresses-revisions',
            value='[email protected], [email protected]'))

        author = self.create_author('*****@*****.**')
        patch = Patch(
            repository=self.repo, project=self.project, label='foo',
            diff='',
        )
        source = self.create_source(self.project, patch=patch)
        build = self.create_build(
            project=self.project,
            source=source,
            author=author,
            result=Result.failed,
        )
        job = self.create_job(build=build)
        db.session.commit()

        handler = MailNotificationHandler()
        recipients = handler.get_recipients(job)

        assert recipients == ['{0} <*****@*****.**>'.format(author.name)]

        build = self.create_build(
            project=self.project,
            result=Result.failed,
            author=author,
        )
        job = self.create_job(build=build)

        job_finished_handler(job)

        handler = MailNotificationHandler()
        recipients = handler.get_recipients(job)

        assert recipients == [
            '{0} <*****@*****.**>'.format(author.name),
            '*****@*****.**',
            '*****@*****.**',
        ]
Exemple #26
0
    def test_with_addressees(self):
        project = self.create_project()
        db.session.add(ProjectOption(
            project=project, name='mail.notify-author', value='1'))
        db.session.add(ProjectOption(
            project=project, name='mail.notify-addresses',
            value='[email protected], [email protected]'))

        author = self.create_author('*****@*****.**')
        build = self.create_build(project, result=Result.failed, author=author)
        db.session.commit()

        handler = MailNotificationHandler()
        recipients = handler.get_build_recipients(build)

        assert recipients == [
            '{0} <*****@*****.**>'.format(author.name),
            '*****@*****.**',
            '*****@*****.**',
        ]
    def test_diff_all_failed(self):
        project = self.create_project()
        db.session.add(
            ProjectOption(project=project,
                          name='mail.notify-author',
                          value='1'))
        db.session.add(
            ProjectOption(project=project,
                          name='mail.notify-addresses-revisions',
                          value='[email protected], [email protected]'))

        author = self.create_author('*****@*****.**')
        author_recipient = '{0} <{1}>'.format(author.name, author.email)

        patch_build = self.create_build(
            project=project,
            source=self.create_source(
                project,
                patch=self.create_patch(repository=project.repository)),
            author=author,
            result=Result.failed,
        )

        project2 = self.create_project()
        db.session.add(
            ProjectOption(project=project2,
                          name='mail.notify-author',
                          value='0'))
        db.session.add(
            ProjectOption(project=project2,
                          name='mail.notify-addresses-revisions',
                          value='[email protected], [email protected]'))

        author2 = self.create_author('*****@*****.**')
        author2_recipient = '{0} <{1}>'.format(author2.name, author2.email)

        patch_build2 = self.create_build(
            project=project2,
            source=self.create_source(
                project2,
                patch=self.create_patch(repository=project2.repository)),
            author=author2,
            result=Result.failed,
        )
        db.session.commit()

        mock_context = mock.Mock(builds=[{
            'build': patch_build
        }, {
            'build': patch_build2
        }])
        recipients = MailNotificationHandler().get_collection_recipients(
            mock_context)
        assert recipients == [author_recipient]
Exemple #28
0
    def test_simple(self):
        project = self.create_project()
        build = self.create_build(project)
        job = self.create_job(build)

        logsource = LogSource(
            project=project,
            job=job,
            name='console',
        )
        db.session.add(logsource)

        logchunk = LogChunk(
            project=project,
            job=job,
            source=logsource,
            offset=0,
            size=11,
            text='hello\nworld\n',
        )
        db.session.add(logchunk)
        logchunk = LogChunk(
            project=project,
            job=job,
            source=logsource,
            offset=11,
            size=11,
            text='hello\nworld\n',
        )
        db.session.add(logchunk)
        db.session.commit()

        handler = MailNotificationHandler()
        result = handler.get_log_clipping(logsource, max_size=200, max_lines=3)
        assert result == "world\r\nhello\r\nworld"

        result = handler.get_log_clipping(logsource, max_size=200, max_lines=1)
        assert result == "world"

        result = handler.get_log_clipping(logsource, max_size=5, max_lines=3)
        assert result == "world"
Exemple #29
0
    def test_with_revision_addressees(self):
        project = self.create_project()
        db.session.add(ProjectOption(
            project=project, name='mail.notify-author', value='1'))
        db.session.add(ProjectOption(
            project=project, name='mail.notify-addresses-revisions',
            value='[email protected], [email protected]'))

        author = self.create_author('*****@*****.**')
        patch = self.create_patch(repository=project.repository)
        source = self.create_source(project, patch=patch)
        build = self.create_build(
            project=project,
            source=source,
            author=author,
            result=Result.failed,
        )
        db.session.commit()

        handler = MailNotificationHandler()
        recipients = handler.get_build_recipients(build)

        assert recipients == ['{0} <*****@*****.**>'.format(author.name)]

        build = self.create_build(
            project=project,
            result=Result.failed,
            author=author,
            tags=['commit'],
        )

        handler = MailNotificationHandler()
        recipients = handler.get_build_recipients(build)

        assert recipients == [
            '{0} <*****@*****.**>'.format(author.name),
            '*****@*****.**',
            '*****@*****.**',
        ]
Exemple #30
0
    def test_simple(self):
        project = self.create_project()
        plan = self.create_plan(project)
        build = self.create_build(project, result=Result.failed)
        job = self.create_job(build, result=Result.failed)

        db.session.add(
            ItemOption(
                item_id=plan.id,
                name='mail.notify-author',
                value='0',
            ))

        db.session.add(
            ProjectOption(
                project_id=project.id,
                name='mail.notify-author',
                value='1',
            ))

        db.session.add(
            ProjectOption(
                project_id=project.id,
                name='mail.notify-addresses',
                value='*****@*****.**',
            ))
        db.session.flush()

        self.create_job_plan(job, plan)

        db.session.commit()

        handler = MailNotificationHandler()
        assert handler.get_build_options(build) == {
            'mail.notify-addresses': {'*****@*****.**'},
            'mail.notify-addresses-revisions': set(),
            'mail.notify-author': False,
        }
Exemple #31
0
    def test_simple(self, get_recipients):
        build = self.create_build(self.project)
        job = self.create_job(build=build, result=Result.failed)
        logsource = LogSource(project=self.project, job=job, name="console")
        db.session.add(logsource)

        logchunk = LogChunk(project=self.project, job=job, source=logsource, offset=0, size=11, text="hello world")
        db.session.add(logchunk)

        job_link = "http://example.com/projects/test/builds/%s/jobs/%s/" % (build.id.hex, job.id.hex)
        log_link = "%slogs/%s/" % (job_link, logsource.id.hex)
        db.session.commit()

        get_recipients.return_value = ["*****@*****.**", "Bob <*****@*****.**>"]

        handler = MailNotificationHandler()
        handler.send(job, None)

        assert len(self.outbox) == 1
        msg = self.outbox[0]

        assert msg.subject == "Build Failed - %s #%s.%s (%s)" % (
            job.project.name,
            job.build.number,
            job.number,
            job.build.source.revision_sha,
        )
        assert msg.recipients == ["*****@*****.**", "Bob <*****@*****.**>"]
        assert msg.extra_headers["Reply-To"] == "[email protected], Bob <*****@*****.**>"
        print msg.body

        assert job_link in msg.html
        assert job_link in msg.body
        assert log_link in msg.html
        assert log_link in msg.body

        assert msg.as_string()
Exemple #32
0
    def test_with_revision_addressees(self):
        db.session.add(
            ProjectOption(project=self.project,
                          name='mail.notify-author',
                          value='1'))
        db.session.add(
            ProjectOption(project=self.project,
                          name='mail.notify-addresses-revisions',
                          value='[email protected], [email protected]'))

        author = self.create_author('*****@*****.**')
        patch = Patch(
            repository=self.repo,
            project=self.project,
            label='foo',
            diff='',
        )
        source = self.create_source(self.project, patch=patch)
        build = self.create_build(
            project=self.project,
            source=source,
            author=author,
            result=Result.failed,
        )
        job = self.create_job(build=build)
        db.session.commit()

        handler = MailNotificationHandler()
        recipients = handler.get_recipients(job)

        assert recipients == ['{0} <*****@*****.**>'.format(author.name)]

        build = self.create_build(
            project=self.project,
            result=Result.failed,
            author=author,
        )
        job = self.create_job(build=build)

        job_finished_handler(job)

        handler = MailNotificationHandler()
        recipients = handler.get_recipients(job)

        assert recipients == [
            '{0} <*****@*****.**>'.format(author.name),
            '*****@*****.**',
            '*****@*****.**',
        ]
Exemple #33
0
    def test_with_revision_addressees(self):
        project = self.create_project()
        db.session.add(
            ProjectOption(project=project,
                          name='mail.notify-author',
                          value='1'))
        db.session.add(
            ProjectOption(project=project,
                          name='mail.notify-addresses-revisions',
                          value='[email protected], [email protected]'))

        author = self.create_author('*****@*****.**')
        patch = self.create_patch(repository=project.repository)
        source = self.create_source(project, patch=patch)
        build = self.create_build(
            project=project,
            source=source,
            author=author,
            result=Result.failed,
        )
        db.session.commit()

        handler = MailNotificationHandler()
        recipients = handler.get_build_recipients(build)

        assert recipients == ['{0} <*****@*****.**>'.format(author.name)]

        build = self.create_build(
            project=project,
            result=Result.failed,
            author=author,
        )

        handler = MailNotificationHandler()
        recipients = handler.get_build_recipients(build)

        assert recipients == [
            '{0} <*****@*****.**>'.format(author.name),
            '*****@*****.**',
            '*****@*****.**',
        ]
Exemple #34
0
    def test_multiple_jobs(self):
        project = self.create_project()
        build = self.create_build(project, result=Result.failed)
        job1 = self.create_job(build, result=Result.failed)
        job2 = self.create_job(build, result=Result.failed)
        plan1 = self.create_plan(project)
        plan2 = self.create_plan(project)

        # Plan1 options.
        db.session.add(
            ItemOption(
                item_id=plan1.id,
                name='mail.notify-addresses',
                value='*****@*****.**',
            ))
        db.session.add(
            ItemOption(
                item_id=plan1.id,
                name='mail.notify-author',
                value='0',
            ))

        # Plan2 options.
        db.session.add(
            ItemOption(
                item_id=plan2.id,
                name='mail.notify-addresses',
                value='*****@*****.**',
            ))
        db.session.add(
            ItemOption(
                item_id=plan2.id,
                name='mail.notify-author',
                value='1',
            ))

        # Project options (notify-author is set to test that plan options can
        # override it).
        db.session.add(
            ProjectOption(
                project_id=project.id,
                name='mail.notify-author',
                value='0',
            ))

        # Set notify addresses to verify that it is not used when all jobs
        # override it.
        db.session.add(
            ProjectOption(
                project_id=project.id,
                name='mail.notify-addresses',
                value='*****@*****.**',
            ))
        db.session.flush()

        for job, plan in [(job1, plan1), (job2, plan2)]:
            self.create_job_plan(job, plan)

        db.session.commit()

        handler = MailNotificationHandler()
        assert handler.get_build_options(build) == {
            'mail.notify-addresses':
            {'*****@*****.**', '*****@*****.**'},
            'mail.notify-addresses-revisions': set(),
            'mail.notify-author': True,
        }