Ejemplo n.º 1
0
    def test_too_quick_close(self):
        # https://github.com/ansible/ansible/issues/37518
        datafile = u'tests/fixtures/needs_info/2_noclose.yml'
        with get_issue(datafile, self.statusfile) as iw:
            facts = needs_info.needs_info_timeout_facts(iw, self.meta)

            self.assertEquals(facts[u'needs_info_action'], None)
Ejemplo n.º 2
0
    def test_too_quick_close2(self):
        # https://github.com/ansible/ansible/issues/20977
        datafile = 'tests/fixtures/needs_info/3_noclose.yml'
        with get_issue(datafile, self.statusfile) as iw:
            facts = needs_info.needs_info_timeout_facts(iw, self.meta)

            self.assertEqual(facts['needs_info_action'], 'warn')
Ejemplo n.º 3
0
    def test_submitter_is_core_team_and_maintainer(self):
        """
        Submitter is a namespace maintainer *and* a core team member: approval
        must be automatically added
        https://github.com/ansible/ansible/pull/21620
        """
        datafile = u'tests/fixtures/shipit/1_issue.yml'
        statusfile = u'tests/fixtures/shipit/1_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            namespace_maintainers = [u'LinusU']

            _meta = self.meta.copy()
            _meta[u'component_maintainers'] = []
            _meta[
                u'component_namespace_maintainers'] = namespace_maintainers[:]

            facts = get_shipit_facts(iw,
                                     _meta,
                                     ModuleIndexerMock(namespace_maintainers),
                                     core_team=[u'bcoca', u'mscherer'],
                                     botnames=[u'ansibot'])

            self.assertEqual(iw.submitter, u'mscherer')
            self.assertEqual([u'LinusU'], facts[u'community_usernames'])
            self.assertEqual([u'LinusU', u'mscherer'], facts[u'shipit_actors'])
            self.assertEqual(facts[u'shipit_count_ansible'],
                             1)  # bcoca, mscherer
            self.assertEqual(facts[u'shipit_count_maintainer'], 0)  # abulimov
            self.assertEqual(facts[u'shipit_count_community'], 1)  # LinusU
            self.assertTrue(facts[u'shipit'])
Ejemplo n.º 4
0
    def test_shipit_overrides_changes_requested_github_review(self):
        """
        Ansibot should ignore CHANGES_REQUESTED Github review when the author of the
        CHANGES_REQUESTED review used the shipit command.
        """
        datafile = u'tests/fixtures/needs_revision/0_issue.yml'
        statusfile = u'tests/fixtures/needs_revision/0_prstatus.json'
        with mock.patch.multiple(IssueWrapper,
                               mergeable_state=mock.PropertyMock(return_value='clean'),
                               pullrequest_filepath_exists=mock.Mock(return_value=True)):
            with get_issue(datafile, statusfile) as iw:
                iw._merge_commits = []
                iw._committer_emails = [u'*****@*****.**']

                pullrequest = mock.Mock(spec_set=github.PullRequest.PullRequest)
                pullrequest.head.repo.__return_value__ = True
                iw._pr = pullrequest

                with open(u'tests/fixtures/needs_revision/0_reviews.json') as reviews:
                    iw._pr_reviews = json.load(reviews)
                    iw._history.merge_reviews(iw.reviews)

                self.meta[u'component_maintainers'] = [u'robinro']
                facts = get_needs_revision_facts(AnsibleTriageMock(), iw, self.meta, ShippableRunsMock())

                self.assertFalse(facts[u'is_needs_revision'])
                self.assertFalse(facts[u'stale_reviews'])
Ejemplo n.º 5
0
    def test_too_quick_close2(self):
        # https://github.com/ansible/ansible/issues/20977
        datafile = u'tests/fixtures/needs_info/3_noclose.yml'
        with get_issue(datafile, self.statusfile) as iw:
            facts = needs_info.needs_info_timeout_facts(iw, self.meta)

            self.assertEquals(facts[u'needs_info_action'], u'warn')
Ejemplo n.º 6
0
    def test_owner_pr_module_utils_and_modules_updated_submitter_maintainer_2(self):
        """
        PR updates 2 files (one below modules, the other below module_utils),
        submitter is a maintainer from both, check that owner_pr is set.
        Submitter is maintainer from module_utils file.
        """
        BOTMETA = u"""
        ---
        macros:
            modules: lib/ansible/modules
            module_utils: lib/ansible/module_utils
        files:
            $modules/foo/bar.py:
                maintainers: ElsA ZaZa
            $module_utils/baz/bar.py:
                maintainers: TiTi mscherer
        """

        modules = {u'lib/ansible/modules/foo/bar.py': None}
        module_indexer = create_indexer(textwrap.dedent(BOTMETA), modules)

        self.assertEqual(len(module_indexer.modules), 2)  # ensure only fake data are loaded
        self.assertEqual(sorted(module_indexer.botmeta[u'files'][u'lib/ansible/modules/foo/bar.py'][u'maintainers']), [u'ElsA', u'ZaZa'])
        self.assertEqual(sorted(module_indexer.botmeta[u'files'][u'lib/ansible/module_utils/baz/bar.py'][u'maintainers']), [u'TiTi', u'mscherer'])

        CM = ComponentMatcherMock()
        CM.expected_results = [
            {
                u'repo_filename': u'lib/ansible/module_utils/foo/bar.py',
                u'labels': [],
                u'support': None,
                u'maintainers': [u'ElsA', u'mscherer'],
                u'notify': [u'ElsA', u'mscherer'],
                u'ignore': [],
            },
            {
                u'repo_filename': u'lib/ansible/modules/baz/bar.py',
                u'labels': [],
                u'support': None,
                u'maintainers': [u'TiTi', u'ZaZa'],
                u'notify': [u'TiTi', u'ZaZa'],
                u'ignore': [],
            }
        ]

        meta = self.meta.copy()

        datafile = u'tests/fixtures/shipit/0_issue.yml'
        statusfile = u'tests/fixtures/shipit/0_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            iw.pr_files = [
                MockFile(u'lib/ansible/modules/foo/bar.py'),
                MockFile(u'lib/ansible/module_utils/baz/bar.py')
            ]
            iw.file_indexer = FileIndexerMock()
            meta.update(get_component_match_facts(iw, CM, []))
            facts = get_shipit_facts(iw, meta, module_indexer, core_team=[u'bcoca'], botnames=[u'ansibot'])

        self.assertEqual(iw.submitter, u'mscherer')
        self.assertFalse(facts[u'owner_pr'])
Ejemplo n.º 7
0
    def test_shipit_removes_needs_revision(self):
        """
        Ansibot should remove needs_revision if the same user that set it gave shipit afterwards.
        https://github.com/ansible/ansibullbot/issues/994
        """
        datafile = u'tests/fixtures/needs_revision/1_issue.yml'
        statusfile = u'tests/fixtures/needs_revision/0_prstatus.json'
        with mock.patch.multiple(IssueWrapper,
                               mergeable_state=mock.PropertyMock(return_value='clean'),
                               pullrequest_filepath_exists=mock.Mock(return_value=True)):
            with get_issue(datafile, statusfile) as iw:
                iw._merge_commits = []
                iw._committer_emails = [u'*****@*****.**']

                pullrequest = mock.Mock(spec_set=github.PullRequest.PullRequest)
                pullrequest.head.repo.__return_value__ = True
                iw._pr = pullrequest

                with open(u'tests/fixtures/needs_revision/1_reviews.json') as reviews:
                    iw._pr_reviews = json.load(reviews)
                    iw._history.merge_reviews(iw.reviews)

                self.meta[u'component_maintainers'] = [u'mkrizek']
                facts = get_needs_revision_facts(AnsibleTriageMock(), iw, self.meta)

                self.assertFalse(facts[u'is_needs_revision'])
Ejemplo n.º 8
0
    def test_submitter_is_maintainer(self):
        """
        Submitter is a namespace maintainer: approval must be automatically
        added
        """
        datafile = 'tests/fixtures/shipit/0_issue.yml'
        statusfile = 'tests/fixtures/shipit/0_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            namespace_maintainers = ['LinusU', 'mscherer']

            _meta = self.meta.copy()
            _meta['component_maintainers'] = []
            _meta['component_namespace_maintainers'] = namespace_maintainers[:]

            facts = get_shipit_facts(iw,
                                     _meta,
                                     ModuleIndexerMock(namespace_maintainers),
                                     core_team=['bcoca'],
                                     botnames=['ansibot'])

            self.assertEqual(iw.submitter, 'mscherer')
            self.assertEqual(['LinusU', 'mscherer'],
                             facts['community_usernames'])
            self.assertEqual(['mscherer'], facts['shipit_actors'])
            self.assertEqual(facts['shipit_count_ansible'], 0)  # bcoca
            self.assertEqual(facts['shipit_count_maintainer'], 0)  # abulimov
            self.assertEqual(facts['shipit_count_community'],
                             1)  # LinusU, mscherer
            self.assertFalse(facts['shipit'])
Ejemplo n.º 9
0
    def test_shipit_removes_needs_revision(self):
        """
        Ansibot should remove needs_revision if the same user that set it gave shipit afterwards.
        https://github.com/ansible/ansibullbot/issues/994
        """
        datafile = u'tests/fixtures/needs_revision/1_issue.yml'
        statusfile = u'tests/fixtures/needs_revision/0_prstatus.json'
        with mock.patch.multiple(IssueWrapper,
                               mergeable_state=mock.PropertyMock(return_value='clean'),
                               pullrequest_filepath_exists=mock.Mock(return_value=True)):
            with get_issue(datafile, statusfile) as iw:
                iw._merge_commits = []
                iw._committer_emails = [u'*****@*****.**']

                pullrequest = mock.Mock(spec_set=github.PullRequest.PullRequest)
                pullrequest.head.repo.__return_value__ = True
                iw._pr = pullrequest

                with open(u'tests/fixtures/needs_revision/1_reviews.json') as reviews:
                    iw._pr_reviews = json.load(reviews)
                    iw._history.merge_reviews(iw.reviews)

                self.meta[u'component_maintainers'] = [u'mkrizek']
                facts = get_needs_revision_facts(AnsibleTriageMock(), iw, self.meta, ShippableRunsMock())

                self.assertFalse(facts[u'is_needs_revision'])
Ejemplo n.º 10
0
    def test_owner_pr_submitter_is_maintainer_new_module(self):
        """
        Submitter is a maintainer: pull request adds a new module: ensure owner_pr is False
        """
        botmeta_files = {u'lib/ansible/modules/foo/bar.py': {u'maintainers': [u'ElsA', u'mscherer']}}
        CM = ComponentMatcherMock()
        CM.expected_results = [
            {
                u'repo_filename': u'lib/ansible/modules/foo/bar.py',
                u'labels': [],
                u'support': None,
                u'maintainers': [u'ElsA', u'mscherer'],
                u'notify': [u'ElsA', u'mscherer'],
                u'ignore': [],
            }
        ]

        meta = self.meta.copy()

        datafile = u'tests/fixtures/shipit/0_issue.yml'
        statusfile = u'tests/fixtures/shipit/0_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            iw.pr_files = [MockFile(u'lib/ansible/modules/foo/bar.py')]
            iw.gitrepo = GitRepoWrapperMock()

            meta.update(get_component_match_facts(iw, CM, []))
            facts = get_shipit_facts(iw, meta, botmeta_files, core_team=[u'bcoca'], botnames=[u'ansibot'])

        self.assertEqual(iw.submitter, u'mscherer')
        self.assertFalse(facts[u'owner_pr'])
Ejemplo n.º 11
0
    def test_owner_pr_submitter_is_maintainer_one_module_utils_file_updated(self):
        """
        Submitter is a maintainer: ensure owner_pr is set (only one file below module_utils updated)
        """
        botmeta_files = {'lib/ansible/module_utils/foo/bar.py': {'maintainers': ['ElsA', 'Oliver']}}
        datafile = u'tests/fixtures/shipit/2_issue.yml'
        statusfile = u'tests/fixtures/shipit/2_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            iw.pr_files = [MockFile(u'lib/ansible/module_utils/foo/bar.py')]
            # need to give the wrapper a list of known files to compare against
            iw.gitrepo = GitRepoWrapperMock()
            iw.gitrepo.files.append(u'lib/ansible/modules/foo/bar.py')

            # predefine what the matcher is going to return
            CM = ComponentMatcherMock()
            CM.expected_results = [
                {
                    u'repo_filename': u'lib/ansible/module_utils/foo/bar.py',
                    u'labels': [],
                    u'support': None,
                    u'maintainers': [u'ElsA', u'Oliver'],
                    u'notify': [u'ElsA', u'Oliver'],
                    u'ignore': [],
                }
            ]

            meta = self.meta.copy()
            iw._commits = []
            meta.update(get_component_match_facts(iw, CM, []))
            facts = get_shipit_facts(iw, meta, botmeta_files, core_team=[u'bcoca', u'mscherer'], botnames=[u'ansibot'])

            self.assertEqual(iw.submitter, u'ElsA')
            self.assertTrue(facts[u'owner_pr'])
Ejemplo n.º 12
0
    def test_shipit_overrides_changes_requested_github_review(self):
        """
        Ansibot should ignore CHANGES_REQUESTED Github review when the author of the
        CHANGES_REQUESTED review used the shipit command.
        """
        datafile = u'tests/fixtures/needs_revision/0_issue.yml'
        statusfile = u'tests/fixtures/needs_revision/0_prstatus.json'
        with mock.patch.multiple(IssueWrapper,
                               mergeable_state=mock.PropertyMock(return_value='clean'),
                               pullrequest_filepath_exists=mock.Mock(return_value=True)):
            with get_issue(datafile, statusfile) as iw:
                iw._merge_commits = []
                iw._committer_emails = [u'*****@*****.**']

                pullrequest = mock.Mock(spec_set=github.PullRequest.PullRequest)
                pullrequest.head.repo.__return_value__ = True
                iw._pr = pullrequest

                with open(u'tests/fixtures/needs_revision/0_reviews.json') as reviews:
                    iw._pr_reviews = json.load(reviews)
                    iw._history.merge_reviews(iw.reviews)

                self.meta[u'component_maintainers'] = [u'robinro']
                facts = get_needs_revision_facts(AnsibleTriageMock(), iw, self.meta)

                self.assertFalse(facts[u'is_needs_revision'])
                self.assertFalse(facts[u'stale_reviews'])
Ejemplo n.º 13
0
 def test_needs_contributor_command(self):
     datafile = 'tests/fixtures/needs_contributor/0_issue.yml'
     with get_issue(datafile, self.statusfile) as iw:
         #import epdb; epdb.st()
         facts = get_needs_contributor_facts(AnsibleTriageMock(), iw,
                                             self.meta)
         self.assertTrue(facts['is_needs_contributor'])
Ejemplo n.º 14
0
def iw(meta, statusfile):
    datafile = 'tests/fixtures/needs_contributor/0_issue.yml'
    with get_issue(datafile, statusfile) as iw:
        iw._assignees = []
        iw._merge_commits = []
        iw.repo = RepoMock(meta['component_maintainers'] +
                           meta['component_notifiers'])
        return iw
Ejemplo n.º 15
0
    def test_owner_pr_module_utils_and_modules_updated_submitter_maintainer_1(
            self):
        """
        PR updates 2 files (one below modules, the other below module_utils),
        submitter is a maintainer from both, check that owner_pr is set.
        Submitter is maintainer from module file.
        """
        botmeta_files = {
            'lib/ansible/modules/foo/bar.py': {
                'maintainers': ['ElsA', 'mscherer']
            },
            'lib/ansible/module_utils/baz/bar.py': {
                'maintainers': ['TiTi', 'ZaZa']
            },
        }
        CM = ComponentMatcherMock()
        CM.expected_results = [{
            'repo_filename': 'lib/ansible/module_utils/foo/bar.py',
            'labels': [],
            'support': None,
            'maintainers': ['ElsA', 'mscherer'],
            'notify': ['ElsA', 'mscherer'],
            'ignore': [],
        }, {
            'repo_filename': 'lib/ansible/modules/baz/bar.py',
            'labels': [],
            'support': None,
            'maintainers': ['TiTi', 'ZaZa'],
            'notify': ['TiTi', 'ZaZa'],
            'ignore': [],
        }]

        meta = self.meta.copy()

        datafile = 'tests/fixtures/shipit/0_issue.yml'
        statusfile = 'tests/fixtures/shipit/0_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            iw.pr_files = [
                MockFile('lib/ansible/modules/foo/bar.py'),
                MockFile('lib/ansible/module_utils/baz/bar.py')
            ]
            iw.gitrepo = GitRepoWrapperMock()
            iw.gitrepo.files = [
                'lib/ansible/modules/foo/bar.py',
                'lib/ansible/module_utils/baz/bar.py'
            ]

            iw._commits = []
            meta.update(get_component_match_facts(iw, CM, []))
            facts = get_shipit_facts(iw,
                                     meta,
                                     botmeta_files,
                                     core_team=['bcoca', 'mscherer'],
                                     botnames=['ansibot'])

        self.assertEqual(iw.submitter, 'mscherer')
        self.assertFalse(facts['owner_pr'])
Ejemplo n.º 16
0
    def test_owner_pr_submitter_is_maintainer_one_module_file_updated_changelog(
            self):
        """
        Submitter is a maintainer: ensure owner_pr is set even if changelog fragment is present
        """
        BOTMETA = u"""
        ---
        macros:
            modules: lib/ansible/modules
        files:
            $modules/foo/bar.py:
                maintainers: ElsA Oliver
        """

        modules = {u'lib/ansible/modules/foo/bar.py': None}
        module_indexer = create_indexer(textwrap.dedent(BOTMETA), modules)

        self.assertEqual(len(module_indexer.modules),
                         2)  # ensure only fake data are loaded
        self.assertEqual(
            sorted(module_indexer.botmeta[u'files']
                   [u'lib/ansible/modules/foo/bar.py'][u'maintainers']),
            [u'ElsA', u'Oliver'])

        datafile = u'tests/fixtures/shipit/2_issue.yml'
        statusfile = u'tests/fixtures/shipit/2_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            iw.pr_files = [
                MockFile(u'lib/ansible/modules/foo/bar.py'),
                MockFile(u'changelogs/fragments/00000-fragment.yaml')
            ]
            # need to give the wrapper a list of known files to compare against
            iw.file_indexer = FileIndexerMock()
            iw.file_indexer.files.append(u'lib/ansible/modules/foo/bar.py')

            # predefine what the matcher is going to return
            CM = ComponentMatcherMock()
            CM.expected_results = [{
                u'repo_filename': u'lib/ansible/modules/foo/bar.py',
                u'labels': [],
                u'support': None,
                u'maintainers': [u'ElsA', u'Oliver'],
                u'notify': [u'ElsA', u'Oliver'],
                u'ignore': [],
            }]

            meta = self.meta.copy()
            iw._commits = []
            meta.update(get_component_match_facts(iw, CM, []))
            facts = get_shipit_facts(iw,
                                     meta,
                                     module_indexer,
                                     core_team=[u'bcoca', u'mscherer'],
                                     botnames=[u'ansibot'])

            self.assertEqual(iw.submitter, u'ElsA')
            self.assertTrue(facts[u'owner_pr'])
Ejemplo n.º 17
0
    def test_owner_pr_submitter_is_maintainer_new_module(self):
        """
        Submitter is a maintainer: pull request adds a new module: ensure owner_pr is False
        """
        BOTMETA = """
        ---
        macros:
            modules: lib/ansible/modules
            module_utils: lib/ansible/module_utils
        files:
            $modules/foo/bar.py:
                maintainers: ElsA mscherer
        """

        modules = {}  # new module
        module_indexer = create_indexer(textwrap.dedent(BOTMETA), modules)

        self.assertEqual(len(module_indexer.modules),
                         1)  # ensure only fake data are loaded
        # Ensure that BOTMETA.yml updates doesn't interfere
        self.assertEqual(
            sorted(module_indexer.botmeta['files']
                   ['lib/ansible/modules/foo/bar.py']['maintainers']),
            ['ElsA', 'mscherer'])

        CM = ComponentMatcherMock()
        CM.expected_results = [{
            'repo_filename': 'lib/ansible/modules/foo/bar.py',
            'labels': [],
            'support': None,
            'maintainers': ['ElsA', 'mscherer'],
            'notify': ['ElsA', 'mscherer'],
            'ignore': [],
        }]

        meta = self.meta.copy()

        datafile = 'tests/fixtures/shipit/0_issue.yml'
        statusfile = 'tests/fixtures/shipit/0_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            iw.pr_files = [MockFile('lib/ansible/modules/foo/bar.py')]
            iw.file_indexer = FileIndexerMock()
            #iw.file_indexer.files.append('lib/ansible/modules/foo/bar.py')

            meta.update(
                get_component_match_facts(iw, {}, CM, iw.file_indexer,
                                          module_indexer, []))
            facts = get_shipit_facts(iw,
                                     meta,
                                     module_indexer,
                                     core_team=['bcoca'],
                                     botnames=['ansibot'])

        self.assertEqual(iw.submitter, 'mscherer')
        self.assertFalse(facts['owner_pr'])
Ejemplo n.º 18
0
    def test_owner_pr_module_utils_and_modules_updated_submitter_maintainer_2(
            self):
        """
        PR updates 2 files (one below modules, the other below module_utils),
        submitter is a maintainer from both, check that owner_pr is set.
        Submitter is maintainer from module_utils file.
        """
        BOTMETA = """
        ---
        macros:
            modules: lib/ansible/modules
            module_utils: lib/ansible/module_utils
        files:
            $modules/foo/bar.py:
                maintainers: ElsA ZaZa
            $module_utils/baz/bar.py:
                maintainers: TiTi mscherer
        """

        modules = {'lib/ansible/modules/foo/bar.py': None}
        module_indexer = create_indexer(textwrap.dedent(BOTMETA), modules)

        self.assertEqual(len(module_indexer.modules),
                         2)  # ensure only fake data are loaded
        self.assertEqual(
            sorted(module_indexer.botmeta['files']
                   ['lib/ansible/modules/foo/bar.py']['maintainers']),
            ['ElsA', 'ZaZa'])
        self.assertEqual(
            sorted(module_indexer.botmeta['files']
                   ['lib/ansible/module_utils/baz/bar.py']['maintainers']),
            ['TiTi', 'mscherer'])

        meta = self.meta.copy()

        datafile = 'tests/fixtures/shipit/0_issue.yml'
        statusfile = 'tests/fixtures/shipit/0_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            iw.pr_files = [
                MockFile('lib/ansible/modules/foo/bar.py'),
                MockFile('lib/ansible/module_utils/baz/bar.py')
            ]
            meta.update(
                get_component_match_facts(iw, {}, FileIndexerMock(),
                                          module_indexer, []))
            facts = get_shipit_facts(iw,
                                     meta,
                                     module_indexer,
                                     core_team=['bcoca'],
                                     botnames=['ansibot'])

        self.assertEqual(iw.submitter, 'mscherer')
        self.assertFalse(facts['owner_pr'])
Ejemplo n.º 19
0
    def test_review_facts_are_defined_module_utils(self):
        BOTMETA = u"""
        ---
        macros:
            modules: lib/ansible/modules
            module_utils: lib/ansible/module_utils
        files:
            $module_utils:
              support: community
            $modules/foo/bar.py:
                maintainers: ElsA ZaZa
            $module_utils/baz/bar.py:
                maintainers: TiTi mscherer
        """

        modules = {u'lib/ansible/modules/foo/bar.py': None}
        module_indexer = create_indexer(textwrap.dedent(BOTMETA), modules)

        self.assertEqual(len(module_indexer.modules), 2)  # ensure only fake data are loaded
        self.assertEqual(sorted(module_indexer.botmeta[u'files'][u'lib/ansible/modules/foo/bar.py'][u'maintainers']),[u'ElsA', u'ZaZa'])
        self.assertEqual(sorted(module_indexer.botmeta[u'files'][u'lib/ansible/module_utils/baz/bar.py'][u'maintainers']),[u'TiTi', u'mscherer'])

        datafile = u'tests/fixtures/shipit/2_issue.yml'
        statusfile = u'tests/fixtures/shipit/2_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            iw.pr_files = [MockFile(u'lib/ansible/module_utils/foo/bar.py')]
            # need to give the wrapper a list of known files to compare against
            iw.file_indexer = FileIndexerMock()
            iw.file_indexer.files.append(u'lib/ansible/modules/foo/bar.py')

            # predefine what the matcher is going to return
            CM = ComponentMatcherMock()
            CM.expected_results = [
                {
                    u'repo_filename': u'lib/ansible/module_utils/foo/bar.py',
                    u'labels': [],
                    u'support': None,
                    u'maintainers': [u'ElsA', u'Oliver'],
                    u'notify': [u'ElsA', u'Oliver'],
                    u'ignore': [],
                }
            ]

            meta = self.meta.copy()
            iw._commits = []
            meta.update(get_component_match_facts(iw, CM, []))
            meta.update(get_shipit_facts(iw, meta, module_indexer, core_team=[u'bcoca'], botnames=[u'ansibot']))
            facts = get_review_facts(iw, meta)

        self.assertTrue(facts[u'community_review'])
        self.assertFalse(facts[u'core_review'])
        self.assertFalse(facts[u'committer_review'])
Ejemplo n.º 20
0
    def needs_rebase_or_revision_prevent_shipit(self, meta):
        datafile = u'tests/fixtures/shipit/1_issue.yml'
        statusfile = u'tests/fixtures/shipit/1_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            facts = get_shipit_facts(iw, meta, {}, core_team=[u'bcoca', u'mscherer'], botnames=[u'ansibot'])

            self.assertEqual(iw.submitter, u'mscherer')
            self.assertFalse(facts[u'community_usernames'])
            self.assertFalse(facts[u'shipit_actors'])
            self.assertEqual(facts[u'shipit_count_ansible'], 0)
            self.assertEqual(facts[u'shipit_count_maintainer'], 0)
            self.assertEqual(facts[u'shipit_count_community'], 0)
            self.assertFalse(facts[u'shipit'])
Ejemplo n.º 21
0
 def test2(self):
     # command given, time to rebuild but not merge
     datafile = 'tests/fixtures/rebuild_merge/2_issue.yml'
     statusfile = 'tests/fixtures/rebuild_merge/2_prstatus.json'
     with get_issue(datafile, statusfile) as iw:
         meta = {
             'is_pullrequest': True,
             'is_needs_revision': False,
             'is_needs_rebase': False,
             'needs_rebuild': False,
             'rebuild_run_number': 0
         }
         rbfacts = get_rebuild_merge_facts(iw, meta, ['superman'], None)
         assert rbfacts['needs_rebuild'] == True
         assert rbfacts['admin_merge'] == False
Ejemplo n.º 22
0
 def test0(self):
     # command issued, test ran, time to merge
     datafile = u'tests/fixtures/rebuild_merge/0_issue.yml'
     statusfile = u'tests/fixtures/rebuild_merge/0_prstatus.json'
     with get_issue(datafile, statusfile) as iw:
         meta = {
             u'is_pullrequest': True,
             u'is_needs_revision': False,
             u'is_needs_rebase': False,
             u'needs_rebuild': False,
             u'ci_run_number': 0,
         }
         rbfacts = get_rebuild_merge_facts(iw, meta, [u'superman'])
         assert rbfacts[u'needs_rebuild'] == False
         assert rbfacts[u'admin_merge'] == True
Ejemplo n.º 23
0
 def test1(self):
     # new test is in progress, do not rebuild and do not merge
     datafile = u'tests/fixtures/rebuild_merge/1_issue.yml'
     statusfile = u'tests/fixtures/rebuild_merge/1_prstatus.json'
     with get_issue(datafile, statusfile) as iw:
         meta = {
             u'is_pullrequest': True,
             u'is_needs_revision': False,
             u'is_needs_rebase': False,
             u'needs_rebuild': False,
             u'ci_run_number': 0
         }
         rbfacts = get_rebuild_merge_facts(iw, meta, [u'superman'])
         assert rbfacts[u'needs_rebuild'] == False
         assert rbfacts[u'admin_merge'] == False
Ejemplo n.º 24
0
    def needs_rebase_or_revision_prevent_shipit(self, meta):
        datafile = u'tests/fixtures/shipit/1_issue.yml'
        statusfile = u'tests/fixtures/shipit/1_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            namespace_maintainers = [u'LinusU']

            facts = get_shipit_facts(iw, meta, ModuleIndexerMock(namespace_maintainers), core_team=[u'bcoca', u'mscherer'], botnames=[u'ansibot'])

            self.assertEqual(iw.submitter, u'mscherer')
            self.assertFalse(facts[u'community_usernames'])
            self.assertFalse(facts[u'shipit_actors'])
            self.assertEqual(facts[u'shipit_count_ansible'], 0)
            self.assertEqual(facts[u'shipit_count_maintainer'], 0)
            self.assertEqual(facts[u'shipit_count_community'], 0)
            self.assertFalse(facts[u'shipit'])
Ejemplo n.º 25
0
 def test3(self):
     # command given, new commit created, do not rebuild or merge
     datafile = u'tests/fixtures/rebuild_merge/3_issue.yml'
     statusfile = u'tests/fixtures/rebuild_merge/3_prstatus.json'
     with get_issue(datafile, statusfile) as iw:
         meta = {
             u'is_pullrequest': True,
             u'is_needs_revision': False,
             u'is_needs_rebase': False,
             u'needs_rebuild': False,
             u'ci_run_number': 0
         }
         rbfacts = get_rebuild_merge_facts(iw, meta, [u'superman'])
         assert rbfacts[u'needs_rebuild'] == False
         assert rbfacts[u'admin_merge'] == False
Ejemplo n.º 26
0
 def test3(self):
     # command given, new commit created, do not rebuild or merge
     datafile = u'tests/fixtures/rebuild_merge/3_issue.yml'
     statusfile = u'tests/fixtures/rebuild_merge/3_prstatus.json'
     with get_issue(datafile, statusfile) as iw:
         meta = {
             u'is_pullrequest': True,
             u'is_needs_revision': False,
             u'is_needs_rebase': False,
             u'needs_rebuild': False,
             u'ci_run_number': 0
         }
         rbfacts = get_rebuild_merge_facts(iw, meta, [u'superman'])
         assert rbfacts[u'needs_rebuild'] == False
         assert rbfacts[u'admin_merge'] == False
Ejemplo n.º 27
0
 def test0(self):
     # command issued, test ran, time to merge
     datafile = u'tests/fixtures/rebuild_merge/0_issue.yml'
     statusfile = u'tests/fixtures/rebuild_merge/0_prstatus.json'
     with get_issue(datafile, statusfile) as iw:
         meta = {
             u'is_pullrequest': True,
             u'is_needs_revision': False,
             u'is_needs_rebase': False,
             u'needs_rebuild': False,
             u'ci_run_number': 0,
         }
         rbfacts = get_rebuild_merge_facts(iw, meta, [u'superman'])
         assert rbfacts[u'needs_rebuild'] == False
         assert rbfacts[u'admin_merge'] == True
Ejemplo n.º 28
0
 def test1(self):
     # new test is in progress, do not rebuild and do not merge
     datafile = u'tests/fixtures/rebuild_merge/1_issue.yml'
     statusfile = u'tests/fixtures/rebuild_merge/1_prstatus.json'
     with get_issue(datafile, statusfile) as iw:
         meta = {
             u'is_pullrequest': True,
             u'is_needs_revision': False,
             u'is_needs_rebase': False,
             u'needs_rebuild': False,
             u'ci_run_number': 0
         }
         rbfacts = get_rebuild_merge_facts(iw, meta, [u'superman'])
         assert rbfacts[u'needs_rebuild'] == False
         assert rbfacts[u'admin_merge'] == False
Ejemplo n.º 29
0
def test3():
    """command given, new commit created, do not rebuild or merge"""
    datafile = 'tests/fixtures/rebuild_merge/3_issue.yml'
    statusfile = 'tests/fixtures/rebuild_merge/3_prstatus.json'
    with get_issue(datafile, statusfile) as iw:
        meta = {
            'is_pullrequest': True,
            'is_needs_revision': False,
            'is_needs_rebase': False,
            'needs_rebuild': False,
            'ci_run_number': 0
        }
        rbfacts = get_rebuild_merge_facts(iw, meta, ['superman'], None)
        assert not rbfacts['needs_rebuild']
        assert not rbfacts['needs_rebuild_all']
        assert not rbfacts['admin_merge']
Ejemplo n.º 30
0
def test_rebuild_command():
    """Test ran and failed. /rebuild command issued."""
    datafile = 'tests/fixtures/rebuild/0_issue.yml'
    statusfile = 'tests/fixtures/rebuild/0_prstatus.json'
    with get_issue(datafile, statusfile) as iw:
        meta = {
            'is_pullrequest': True,
            'is_needs_revision': False,
            'is_needs_rebase': False,
            'needs_rebuild': False,
            'ci_run_number': 0,
        }
        rbfacts = get_rebuild_command_facts(iw, meta, None)
        assert rbfacts['needs_rebuild']
        assert rbfacts['needs_rebuild_all']
        assert not rbfacts['needs_rebuild_failed']
Ejemplo n.º 31
0
def test2():
    """command given, time to rebuild but not merge"""
    datafile = u'tests/fixtures/rebuild_merge/2_issue.yml'
    statusfile = u'tests/fixtures/rebuild_merge/2_prstatus.json'
    with get_issue(datafile, statusfile) as iw:
        meta = {
            u'is_pullrequest': True,
            u'is_needs_revision': False,
            u'is_needs_rebase': False,
            u'needs_rebuild': False,
            u'ci_run_number': 0
        }
        rbfacts = get_rebuild_merge_facts(iw, meta, [u'superman'], ShippableCI)
        assert rbfacts[u'needs_rebuild']
        assert rbfacts[u'needs_rebuild_all']
        assert not rbfacts[u'admin_merge']
Ejemplo n.º 32
0
def test_rebuild_failed_and_rebuild_commands():
    """Test ran and failed. /rebuild_failed and /rebuild commands issued, in that order."""
    datafile = u'tests/fixtures/rebuild/3_issue.yml'
    statusfile = u'tests/fixtures/rebuild/3_prstatus.json'
    with get_issue(datafile, statusfile) as iw:
        meta = {
            u'is_pullrequest': True,
            u'is_needs_revision': False,
            u'is_needs_rebase': False,
            u'needs_rebuild': False,
            u'ci_run_number': 0,
        }
        rbfacts = get_rebuild_command_facts(iw, meta, ShippableCI)
        assert rbfacts[u'needs_rebuild']
        assert rbfacts[u'needs_rebuild_all']
        assert not rbfacts[u'needs_rebuild_failed']
Ejemplo n.º 33
0
def test0():
    """command issued, test ran, time to merge"""
    datafile = 'tests/fixtures/rebuild_merge/0_issue.yml'
    statusfile = 'tests/fixtures/rebuild_merge/0_prstatus.json'
    with get_issue(datafile, statusfile) as iw:
        meta = {
            'is_pullrequest': True,
            'is_needs_revision': False,
            'is_needs_rebase': False,
            'needs_rebuild': False,
            'ci_run_number': 0,
        }
        rbfacts = get_rebuild_merge_facts(iw, meta, ['superman'], None)
        assert not rbfacts['needs_rebuild']
        assert not rbfacts['needs_rebuild_all']
        assert rbfacts['admin_merge']
Ejemplo n.º 34
0
def test1():
    """new test is in progress, do not rebuild and do not merge"""
    datafile = 'tests/fixtures/rebuild_merge/1_issue.yml'
    statusfile = 'tests/fixtures/rebuild_merge/1_prstatus.json'
    with get_issue(datafile, statusfile) as iw:
        meta = {
            'is_pullrequest': True,
            'is_needs_revision': False,
            'is_needs_rebase': False,
            'needs_rebuild': False,
            'ci_run_number': 0
        }
        rbfacts = get_rebuild_merge_facts(iw, meta, ['superman'], None)
        assert not rbfacts['needs_rebuild']
        assert not rbfacts['needs_rebuild_all']
        assert not rbfacts['admin_merge']
Ejemplo n.º 35
0
    def test_owner_pr_submitter_is_maintainer_new_module(self):
        """
        Submitter is a maintainer: pull request adds a new module: ensure owner_pr is False
        """
        BOTMETA = u"""
        ---
        macros:
            modules: lib/ansible/modules
            module_utils: lib/ansible/module_utils
        files:
            $modules/foo/bar.py:
                maintainers: ElsA mscherer
        """

        modules = {}  # new module
        module_indexer = create_indexer(textwrap.dedent(BOTMETA), modules)

        self.assertEqual(len(module_indexer.modules), 1)  # ensure only fake data are loaded
        # Ensure that BOTMETA.yml updates doesn't interfere
        self.assertEqual(sorted(module_indexer.botmeta[u'files'][u'lib/ansible/modules/foo/bar.py'][u'maintainers']), [u'ElsA', u'mscherer'])

        CM = ComponentMatcherMock()
        CM.expected_results = [
            {
                u'repo_filename': u'lib/ansible/modules/foo/bar.py',
                u'labels': [],
                u'support': None,
                u'maintainers': [u'ElsA', u'mscherer'],
                u'notify': [u'ElsA', u'mscherer'],
                u'ignore': [],
            }
        ]

        meta = self.meta.copy()

        datafile = u'tests/fixtures/shipit/0_issue.yml'
        statusfile = u'tests/fixtures/shipit/0_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            iw.pr_files = [MockFile(u'lib/ansible/modules/foo/bar.py')]
            iw.file_indexer = FileIndexerMock()

            meta.update(get_component_match_facts(iw, CM, []))
            facts = get_shipit_facts(iw, meta, module_indexer, core_team=[u'bcoca'], botnames=[u'ansibot'])

        self.assertEqual(iw.submitter, u'mscherer')
        self.assertFalse(facts[u'owner_pr'])
Ejemplo n.º 36
0
    def test_review_facts_are_defined_module_utils(self):
        botmeta_files = {
            'lib/ansible/module_utils': {
                'support': 'community'
            },
            'lib/ansible/modules/foo/bar.py': {
                'maintainers': ['ElsA', 'ZaZa']
            },
            'lib/ansible/module_utils/baz/bar.py': {
                'maintainers': ['TiTi', 'mscherer']
            },
        }
        datafile = 'tests/fixtures/shipit/2_issue.yml'
        statusfile = 'tests/fixtures/shipit/2_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            iw.pr_files = [MockFile('lib/ansible/module_utils/foo/bar.py')]
            # need to give the wrapper a list of known files to compare against
            iw.gitrepo = GitRepoWrapperMock()
            iw.gitrepo.files.append('lib/ansible/modules/foo/bar.py')

            # predefine what the matcher is going to return
            CM = ComponentMatcherMock()
            CM.expected_results = [{
                'repo_filename': 'lib/ansible/module_utils/foo/bar.py',
                'labels': [],
                'support': None,
                'maintainers': ['ElsA', 'Oliver'],
                'notify': ['ElsA', 'Oliver'],
                'ignore': [],
            }]

            meta = self.meta.copy()
            iw._commits = []
            meta.update(get_component_match_facts(iw, CM, []))
            meta.update(
                get_shipit_facts(iw,
                                 meta,
                                 botmeta_files,
                                 core_team=['bcoca'],
                                 botnames=['ansibot']))
            facts = get_review_facts(iw, meta)

        self.assertTrue(facts['community_review'])
        self.assertFalse(facts['core_review'])
        self.assertFalse(facts['committer_review'])
Ejemplo n.º 37
0
    def test_owner_pr_submitter_is_maintainer_one_module_file_updated_changelog(
            self):
        """
        Submitter is a maintainer: ensure owner_pr is set even if changelog fragment is present
        """
        botmeta_files = {
            'lib/ansible/modules/foo/bar.py': {
                'maintainers': ['ElsA', 'Oliver']
            }
        }
        datafile = 'tests/fixtures/shipit/2_issue.yml'
        statusfile = 'tests/fixtures/shipit/2_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            iw._pr_files = [
                MockFile('lib/ansible/modules/foo/bar.py'),
                MockFile('changelogs/fragments/00000-fragment.yaml')
            ]
            # need to give the wrapper a list of known files to compare against
            iw.gitrepo = GitRepoWrapperMock()
            iw.gitrepo.files.append('lib/ansible/modules/foo/bar.py')

            # predefine what the matcher is going to return
            CM = ComponentMatcherMock()
            CM.expected_results = [{
                'repo_filename': 'lib/ansible/modules/foo/bar.py',
                'labels': [],
                'support': None,
                'maintainers': ['ElsA', 'Oliver'],
                'notify': ['ElsA', 'Oliver'],
                'ignore': [],
            }]

            meta = self.meta.copy()
            iw._commits = []
            meta.update(get_component_match_facts(iw, CM, []))
            facts = get_shipit_facts(iw,
                                     meta,
                                     botmeta_files,
                                     core_team=['bcoca', 'mscherer'],
                                     botnames=['ansibot'])

            self.assertEqual(iw.submitter, 'ElsA')
            self.assertTrue(facts['owner_pr'])
Ejemplo n.º 38
0
    def needs_rebase_or_revision_prevent_shipit(self, meta):
        datafile = 'tests/fixtures/shipit/1_issue.yml'
        statusfile = 'tests/fixtures/shipit/1_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            namespace_maintainers = ['LinusU']

            facts = get_shipit_facts(iw,
                                     meta,
                                     ModuleIndexerMock(namespace_maintainers),
                                     core_team=['bcoca', 'mscherer'],
                                     botnames=['ansibot'])

            self.assertEqual(iw.submitter, 'mscherer')
            self.assertFalse(facts['community_usernames'])
            self.assertFalse(facts['shipit_actors'])
            self.assertEqual(facts['shipit_count_ansible'], 0)
            self.assertEqual(facts['shipit_count_maintainer'], 0)
            self.assertEqual(facts['shipit_count_community'], 0)
            self.assertFalse(facts['shipit'])
Ejemplo n.º 39
0
    def test_submitter_is_maintainer(self):
        """
        Submitter is a namespace maintainer: approval must be automatically
        added
        """
        datafile = u'tests/fixtures/shipit/0_issue.yml'
        statusfile = u'tests/fixtures/shipit/0_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            namespace_maintainers = [u'LinusU', u'mscherer']

            _meta = self.meta.copy()
            _meta[u'component_maintainers'] = []
            _meta[u'component_namespace_maintainers'] = namespace_maintainers[:]

            facts = get_shipit_facts(iw, _meta, ModuleIndexerMock(namespace_maintainers), core_team=[u'bcoca'], botnames=[u'ansibot'])

            self.assertEqual(iw.submitter, u'mscherer')
            self.assertEqual([u'LinusU', u'mscherer'], facts[u'community_usernames'])
            self.assertEqual([u'mscherer'], facts[u'shipit_actors'])
            self.assertEqual(facts[u'shipit_count_ansible'], 0)     # bcoca
            self.assertEqual(facts[u'shipit_count_maintainer'], 0)  # abulimov
            self.assertEqual(facts[u'shipit_count_community'], 1)   # LinusU, mscherer
            self.assertFalse(facts[u'shipit'])
Ejemplo n.º 40
0
def iw(meta, statusfile):
    datafile = u'tests/fixtures/needs_contributor/0_issue.yml'
    with get_issue(datafile, statusfile) as iw:
        iw.get_assignees = lambda: []
        iw.repo = RepoMock(meta[u'component_maintainers'] + meta[u'component_notifiers'])
        return iw
Ejemplo n.º 41
0
    def test_close_1(self):
        datafile = u'tests/fixtures/needs_info/1_close.yml'
        with get_issue(datafile, self.statusfile) as iw:
            facts = needs_info.needs_info_timeout_facts(iw, self.meta)

            self.assertEquals(facts[u'needs_info_action'], u'close')
Ejemplo n.º 42
0
 def test_waiting_on_contributor_label(self):
     datafile = u'tests/fixtures/needs_contributor/2_issue.yml'
     with get_issue(datafile, self.statusfile) as iw:
         facts = get_needs_contributor_facts(AnsibleTriageMock(), iw, self.meta)
         self.assertTrue(facts[u'is_needs_contributor'])
Ejemplo n.º 43
0
 def test_not_needs_contributor_command(self):
     datafile = u'tests/fixtures/needs_contributor/1_issue.yml'
     with get_issue(datafile, self.statusfile) as iw:
         facts = get_needs_contributor_facts(AnsibleTriageMock(), iw, self.meta)
         self.assertFalse(facts[u'is_needs_contributor'])