コード例 #1
0
    def test_get_notification_recipients_tag_without_build(
            self, readPackageList, get_user):
        ### with tag without build makes no sense
        build = None
        tag_id = 123
        state = koji.BUILD_STATES['CANCELED']
        self.queries = []

        with self.assertRaises(koji.GenericError):
            kojihub.get_notification_recipients(build, tag_id, state)
        self.assertEqual(self.queries, [])
        readPackageList.assert_not_called()
コード例 #2
0
    def test_get_notification_recipients_watchers(self, readPackageList,
                                                  get_user):
        # without build / tag_id
        build = None
        tag_id = None
        state = koji.BUILD_STATES['CANCELED']

        emails = kojihub.get_notification_recipients(build, tag_id, state)
        self.assertEqual(emails, [])

        # only query to watchers
        self.assertEqual(len(self.queries), 1)
        q = self.queries[0]
        self.assertEqual(q.columns, ['email', 'user_id'])
        self.assertEqual(q.tables, ['build_notifications'])
        self.assertEqual(q.clauses, [
            'package_id IS NULL', 'status = %(users_status)i',
            'success_only = FALSE', 'tag_id IS NULL',
            'usertype IN %(users_usertypes)s'
        ])
        self.assertEqual(
            q.joins, ['JOIN users ON build_notifications.user_id = users.id'])
        self.assertEqual(q.values['state'], state)
        self.assertEqual(q.values['build'], build)
        self.assertEqual(q.values['tag_id'], tag_id)
        '''
        q = self.queries[1]
        self.assertEqual(q.columns, ['user_id'])
        self.assertEqual(q.tables, ['build_notifications_block'])
        self.assertEqual(q.clauses, ['user_id IN %(user_ids)s'])
        self.assertEqual(q.joins, [])
        self.assertEqual(q.values['user_ids'], None)
        '''
        readPackageList.assert_not_called()
コード例 #3
0
 def test_get_notification_recipients_optout(self, readPackageList,
                                             get_user):
     # blocked package owner
     build = {
         'package_id': 12345,
         'owner_name': 'owner_name',
         'owner_id': 5
     }
     tag_id = 123
     state = koji.BUILD_STATES['CANCELED']
     get_user.return_value = {
         'id': 342,
         'name': 'pkg_owner_name',
         'status': koji.USER_STATUS['NORMAL'],
         'usertype': koji.USERTYPES['NORMAL']
     }
     self.set_queries([[{
         'user_id':
         5,
         'email':
         'owner_name@%s' % self.context.opts['EmailDomain']
     }], [{
         'user_id': 5
     }]])
     emails = kojihub.get_notification_recipients(build, tag_id, state)
     self.assertEqual(emails, [])
コード例 #4
0
    def test_get_notification_recipients_build_without_tag(
            self, readPackageList, get_user):
        ### with build without tag
        tag_id = None
        state = koji.BUILD_STATES['CANCELED']
        build = {
            'package_id': 12345,
            'owner_name': 'owner_name',
            'owner_id': 5
        }
        self.queries = []
        self.set_queries([[{
            'user_id':
            5,
            'email':
            'owner_name@%s' % self.context.opts['EmailDomain']
        }], []])

        emails = kojihub.get_notification_recipients(build, tag_id, state)
        self.assertEqual(emails, ['*****@*****.**'])

        # there should be only query to watchers
        self.assertEqual(len(self.queries), 2)
        q = self.queries[0]
        self.assertEqual(q.columns, ['email', 'user_id'])
        self.assertEqual(q.tables, ['build_notifications'])
        self.assertEqual(q.clauses, [
            'package_id = %(package_id)i OR package_id IS NULL',
            'status = %(users_status)i', 'success_only = FALSE',
            'tag_id IS NULL', 'usertype IN %(users_usertypes)s'
        ])
        self.assertEqual(
            q.joins, ['JOIN users ON build_notifications.user_id = users.id'])
        self.assertEqual(q.values['package_id'], build['package_id'])
        self.assertEqual(q.values['state'], state)
        self.assertEqual(q.values['build'], build)
        self.assertEqual(q.values['tag_id'], tag_id)

        q = self.queries[1]
        self.assertEqual(q.columns, ['user_id'])
        self.assertEqual(q.tables, ['build_notifications_block'])
        self.assertEqual(q.clauses, [
            'package_id = %(package_id)i OR package_id IS NULL',
            'tag_id IS NULL',
            'user_id IN %(user_ids)s',
        ])
        self.assertEqual(q.joins, None)
        self.assertEqual(q.values['user_ids'], [5])

        readPackageList.assert_not_called()
コード例 #5
0
    def test_get_notification_recipients_tag_with_build(
            self, readPackageList, get_user):
        ### with tag and build
        build = {
            'package_id': 12345,
            'owner_name': 'owner_name',
            'owner_id': 5
        }
        tag_id = 123
        state = koji.BUILD_STATES['CANCELED']
        readPackageList.return_value = {
            12345: {
                'blocked': False,
                'owner_id': 'owner_id'
            }
        }
        get_user.return_value = {
            'id': 342,
            'name': 'pkg_owner_name',
            'status': koji.USER_STATUS['NORMAL'],
            'usertype': koji.USERTYPES['NORMAL']
        }
        self.set_queries([[{
            'user_id':
            5,
            'email':
            'owner_name@%s' % self.context.opts['EmailDomain']
        }], []])

        emails = kojihub.get_notification_recipients(build, tag_id, state)
        self.assertEqual(
            sorted(emails),
            ['*****@*****.**', '*****@*****.**'])

        # there should be only query to watchers
        self.assertEqual(len(self.queries), 2)
        q = self.queries[0]
        self.assertEqual(q.columns, ['email', 'user_id'])
        self.assertEqual(q.tables, ['build_notifications'])
        self.assertEqual(q.clauses, [
            'package_id = %(package_id)i OR package_id IS NULL',
            'status = %(users_status)i',
            'success_only = FALSE',
            'tag_id = %(tag_id)i OR tag_id IS NULL',
            'usertype IN %(users_usertypes)s',
        ])
        self.assertEqual(
            q.joins, ['JOIN users ON build_notifications.user_id = users.id'])
        self.assertEqual(q.values['package_id'], build['package_id'])
        self.assertEqual(q.values['state'], state)
        self.assertEqual(q.values['build'], build)
        self.assertEqual(q.values['tag_id'], tag_id)

        q = self.queries[1]
        self.assertEqual(q.columns, ['user_id'])
        self.assertEqual(q.tables, ['build_notifications_block'])
        self.assertEqual(q.clauses, [
            'package_id = %(package_id)i OR package_id IS NULL',
            'tag_id = %(tag_id)i OR tag_id IS NULL',
            'user_id IN %(user_ids)s',
        ])
        self.assertEqual(q.joins, None)
        self.assertEqual(sorted(q.values['user_ids']), [5, 342])
        readPackageList.assert_called_once_with(pkgID=build['package_id'],
                                                tagID=tag_id,
                                                inherit=True)
        get_user.asssert_called_once_with(342, strict=True)
コード例 #6
0
    def test_get_notification_recipients(self, readPackageList, get_user):
        # without build / tag_id
        build = None
        tag_id = None
        state = koji.BUILD_STATES['CANCELED']

        emails = kojihub.get_notification_recipients(build, tag_id, state)
        self.assertEqual(emails, [])

        # only query to watchers
        self.assertEqual(len(self.queries), 1)
        q = self.queries[0]
        self.assertEqual(q.columns, ('email', ))
        self.assertEqual(q.tables, ['build_notifications'])
        self.assertEqual(q.clauses, [
            'status = %(users_status)i', 'usertype IN %(users_usertypes)s',
            'package_id IS NULL', 'tag_id IS NULL', 'success_only = FALSE'
        ])
        self.assertEqual(
            q.joins, ['JOIN users ON build_notifications.user_id = users.id'])
        self.assertEqual(q.values['state'], state)
        self.assertEqual(q.values['build'], build)
        self.assertEqual(q.values['tag_id'], tag_id)
        readPackageList.assert_not_called()

        ### with build without tag
        build = {'package_id': 12345, 'owner_name': 'owner_name'}
        self.queries = []

        emails = kojihub.get_notification_recipients(build, tag_id, state)
        self.assertEqual(emails, ['*****@*****.**'])

        # there should be only query to watchers
        self.assertEqual(len(self.queries), 1)
        q = self.queries[0]
        self.assertEqual(q.columns, ('email', ))
        self.assertEqual(q.tables, ['build_notifications'])
        self.assertEqual(q.clauses, [
            'status = %(users_status)i', 'usertype IN %(users_usertypes)s',
            'package_id = %(package_id)i OR package_id IS NULL',
            'tag_id IS NULL', 'success_only = FALSE'
        ])
        self.assertEqual(
            q.joins, ['JOIN users ON build_notifications.user_id = users.id'])
        self.assertEqual(q.values['package_id'], build['package_id'])
        self.assertEqual(q.values['state'], state)
        self.assertEqual(q.values['build'], build)
        self.assertEqual(q.values['tag_id'], tag_id)
        readPackageList.assert_not_called()

        ### with tag without build makes no sense
        build = None
        tag_id = 123
        self.queries = []

        with self.assertRaises(koji.GenericError):
            kojihub.get_notification_recipients(build, tag_id, state)
        self.assertEqual(self.queries, [])
        readPackageList.assert_not_called()

        ### with tag and build
        build = {'package_id': 12345, 'owner_name': 'owner_name'}
        tag_id = 123
        self.queries = []
        readPackageList.return_value = {
            12345: {
                'blocked': False,
                'owner_id': 'owner_id'
            }
        }
        get_user.return_value = {
            'id': 'owner_id',
            'name': 'pkg_owner_name',
            'status': koji.USER_STATUS['NORMAL'],
            'usertype': koji.USERTYPES['NORMAL']
        }

        emails = kojihub.get_notification_recipients(build, tag_id, state)
        self.assertEqual(
            emails,
            ['*****@*****.**', '*****@*****.**'])

        # there should be only query to watchers
        self.assertEqual(len(self.queries), 1)
        q = self.queries[0]
        self.assertEqual(q.columns, ('email', ))
        self.assertEqual(q.tables, ['build_notifications'])
        self.assertEqual(q.clauses, [
            'status = %(users_status)i', 'usertype IN %(users_usertypes)s',
            'package_id = %(package_id)i OR package_id IS NULL',
            'tag_id = %(tag_id)i OR tag_id IS NULL', 'success_only = FALSE'
        ])
        self.assertEqual(
            q.joins, ['JOIN users ON build_notifications.user_id = users.id'])
        self.assertEqual(q.values['package_id'], build['package_id'])
        self.assertEqual(q.values['state'], state)
        self.assertEqual(q.values['build'], build)
        self.assertEqual(q.values['tag_id'], tag_id)
        readPackageList.assert_called_once_with(pkgID=build['package_id'],
                                                tagID=tag_id,
                                                inherit=True)
        get_user.asssert_called_once_with('owner_id', strict=True)

        # blocked package owner
        get_user.return_value = {
            'id': 'owner_id',
            'name': 'pkg_owner_name',
            'status': koji.USER_STATUS['BLOCKED'],
            'usertype': koji.USERTYPES['NORMAL']
        }
        emails = kojihub.get_notification_recipients(build, tag_id, state)
        self.assertEqual(emails, ['*****@*****.**'])

        # package owner is machine
        get_user.return_value = {
            'id': 'owner_id',
            'name': 'pkg_owner_name',
            'status': koji.USER_STATUS['NORMAL'],
            'usertype': koji.USERTYPES['HOST']
        }
        emails = kojihub.get_notification_recipients(build, tag_id, state)
        self.assertEqual(emails, ['*****@*****.**'])
コード例 #7
0
    def test_get_notification_recipients(self, readPackageList, get_user):
        # without build / tag_id
        build = None
        tag_id = None
        state = koji.BUILD_STATES['CANCELED']

        emails = kojihub.get_notification_recipients(build, tag_id, state)
        self.assertEqual(emails, [])

        # only query to watchers
        self.assertEqual(len(self.queries), 1)
        q = self.queries[0]
        self.assertEqual(q.columns, ['email'])
        self.assertEqual(q.tables, ['build_notifications'])
        self.assertEqual(q.clauses, ['package_id IS NULL',
                                     'status = %(users_status)i',
                                     'success_only = FALSE',
                                     'tag_id IS NULL',
                                     'usertype IN %(users_usertypes)s'])
        self.assertEqual(q.joins, ['JOIN users ON build_notifications.user_id = users.id'])
        self.assertEqual(q.values['state'], state)
        self.assertEqual(q.values['build'], build)
        self.assertEqual(q.values['tag_id'], tag_id)
        readPackageList.assert_not_called()


        ### with build without tag
        build = {'package_id': 12345, 'owner_name': 'owner_name'}
        self.queries = []

        emails = kojihub.get_notification_recipients(build, tag_id, state)
        self.assertEqual(emails, ['*****@*****.**'])

        # there should be only query to watchers
        self.assertEqual(len(self.queries), 1)
        q = self.queries[0]
        self.assertEqual(q.columns, ['email'])
        self.assertEqual(q.tables, ['build_notifications'])
        self.assertEqual(q.clauses, ['package_id = %(package_id)i OR package_id IS NULL',
                                     'status = %(users_status)i',
                                     'success_only = FALSE',
                                     'tag_id IS NULL',
                                     'usertype IN %(users_usertypes)s'])
        self.assertEqual(q.joins, ['JOIN users ON build_notifications.user_id = users.id'])
        self.assertEqual(q.values['package_id'], build['package_id'])
        self.assertEqual(q.values['state'], state)
        self.assertEqual(q.values['build'], build)
        self.assertEqual(q.values['tag_id'], tag_id)
        readPackageList.assert_not_called()

        ### with tag without build makes no sense
        build = None
        tag_id = 123
        self.queries = []

        with self.assertRaises(koji.GenericError):
            kojihub.get_notification_recipients(build, tag_id, state)
        self.assertEqual(self.queries, [])
        readPackageList.assert_not_called()


        ### with tag and build
        build = {'package_id': 12345, 'owner_name': 'owner_name'}
        tag_id = 123
        self.queries = []
        readPackageList.return_value = {12345: {'blocked': False, 'owner_id': 'owner_id'}}
        get_user.return_value = {
            'id': 'owner_id',
            'name': 'pkg_owner_name',
            'status': koji.USER_STATUS['NORMAL'],
            'usertype': koji.USERTYPES['NORMAL']
        }

        emails = kojihub.get_notification_recipients(build, tag_id, state)
        self.assertEqual(sorted(emails), ['*****@*****.**', '*****@*****.**'])


        # there should be only query to watchers
        self.assertEqual(len(self.queries), 1)
        q = self.queries[0]
        self.assertEqual(q.columns, ['email'])
        self.assertEqual(q.tables, ['build_notifications'])
        self.assertEqual(q.clauses, ['package_id = %(package_id)i OR package_id IS NULL',
                                     'status = %(users_status)i',
                                     'success_only = FALSE',
                                     'tag_id = %(tag_id)i OR tag_id IS NULL',
                                     'usertype IN %(users_usertypes)s'])
        self.assertEqual(q.joins, ['JOIN users ON build_notifications.user_id = users.id'])
        self.assertEqual(q.values['package_id'], build['package_id'])
        self.assertEqual(q.values['state'], state)
        self.assertEqual(q.values['build'], build)
        self.assertEqual(q.values['tag_id'], tag_id)
        readPackageList.assert_called_once_with(pkgID=build['package_id'], tagID=tag_id, inherit=True)
        get_user.asssert_called_once_with('owner_id', strict=True)

        # blocked package owner
        get_user.return_value = {
            'id': 'owner_id',
            'name': 'pkg_owner_name',
            'status': koji.USER_STATUS['BLOCKED'],
            'usertype': koji.USERTYPES['NORMAL']
        }
        emails = kojihub.get_notification_recipients(build, tag_id, state)
        self.assertEqual(emails, ['*****@*****.**'])

        # package owner is machine
        get_user.return_value = {
            'id': 'owner_id',
            'name': 'pkg_owner_name',
            'status': koji.USER_STATUS['NORMAL'],
            'usertype': koji.USERTYPES['HOST']
        }
        emails = kojihub.get_notification_recipients(build, tag_id, state)
        self.assertEqual(emails, ['*****@*****.**'])