Esempio n. 1
0
 def test_check_config(self):
     service = GitHubStatusPush(Interpolate('XXYYZZ'))
     service.checkConfig(Interpolate('token'),
                         startDescription=Interpolate('start'),
                         endDescription=Interpolate('end'),
                         context=Interpolate('context'),
                         verbose=True,
                         builders=['builder1'])
Esempio n. 2
0
    def send(self, build):
        if build['complete']:
            if build['results'] == results.SUCCESS:
                self.endDescription = util.Interpolate(
                    'Build %(kw:state)s. imageName:%(kw:imageName)s',
                    state=results.Results[build['results']],
                    imageName=getImage)
            else:
                steps = yield self.master.data.get(
                    ('builds', build['buildid'], "steps"))
                logURL = ''
                for step in reversed(steps):
                    if step['results'] != results.SUCCESS:
                        logs = yield self.master.data.get(
                            ("steps", step['stepid'], 'logs'))
                        logURL = '{buildbotURL}api/v2/logs/{logid}/contents'.format(
                            buildbotURL=self.master.config.buildbotURL,
                            logid=logs[0]['logid'])
                        break

                self.endDescription = util.Interpolate(
                    'Build %(kw:state)s. logURL:%(kw:logURL)s',
                    state=results.Results[build['results']],
                    logURL=logURL)

        yield GitHubStatusPush.send(self, build)
Esempio n. 3
0
    def setUp(self):
        # ignore config error if txrequests is not installed
        config._errors = Mock()
        self.master = fakemaster.make_master(testcase=self,
                                             wantData=True, wantDb=True, wantMq=True)

        self.sp = sp = GitHubStatusPush('token')
        sp.sessionFactory = Mock(return_value=Mock())
        yield sp.setServiceParent(self.master)
        yield sp.startService()
        sp.session.headers = {}
Esempio n. 4
0
    def setUp(self):
        # ignore config error if txrequests is not installed
        self.patch(config, '_errors', Mock())
        self.master = fakemaster.make_master(testcase=self,
                                             wantData=True, wantDb=True, wantMq=True)

        yield self.master.startService()
        self._http = yield fakehttpclientservice.HTTPClientService.getFakeService(
            self.master, self,
            HOSTED_BASE_URL, headers={
                'Authorization': 'token XXYYZZ',
                'User-Agent': 'Buildbot'
            })
        self.sp = sp = GitHubStatusPush('XXYYZZ')
        sp.sessionFactory = Mock(return_value=Mock())
        yield sp.setServiceParent(self.master)
Esempio n. 5
0
 def setService(self):
     self.sp = GitHubStatusPush('XXYYZZ')
     return self.sp
Esempio n. 6
0
class TestGitHubStatusPush(unittest.TestCase, ReporterTestMixin):
    # project must be in the form <owner>/<project>
    TEST_PROJECT = u'buildbot/buildbot'

    @defer.inlineCallbacks
    def setUp(self):
        # ignore config error if txrequests is not installed
        self.patch(config, '_errors', Mock())
        self.master = fakemaster.make_master(testcase=self,
                                             wantData=True,
                                             wantDb=True,
                                             wantMq=True)

        yield self.master.startService()
        self._http = yield fakehttpclientservice.HTTPClientService.getFakeService(
            self.master,
            self,
            HOSTED_BASE_URL,
            headers={
                'Authorization': 'token XXYYZZ',
                'User-Agent': 'Buildbot'
            })
        sp = self.setService()
        sp.sessionFactory = Mock(return_value=Mock())
        yield sp.setServiceParent(self.master)

    def setService(self):
        self.sp = GitHubStatusPush('XXYYZZ')
        return self.sp

    def tearDown(self):
        return self.master.stopService()

    @defer.inlineCallbacks
    def setupBuildResults(self, buildResults):
        self.insertTestData([buildResults], buildResults)
        build = yield self.master.data.get(("builds", 20))
        defer.returnValue(build)

    @defer.inlineCallbacks
    def test_basic(self):
        build = yield self.setupBuildResults(SUCCESS)
        # we make sure proper calls to txrequests have been made
        self._http.expect('post',
                          '/repos/buildbot/buildbot/statuses/d34db33fd43db33f',
                          json={
                              'state': 'pending',
                              'target_url':
                              'http://localhost:8080/#builders/79/builds/0',
                              'description': 'Build started.',
                              'context': 'buildbot/Builder0'
                          })
        self._http.expect('post',
                          '/repos/buildbot/buildbot/statuses/d34db33fd43db33f',
                          json={
                              'state': 'success',
                              'target_url':
                              'http://localhost:8080/#builders/79/builds/0',
                              'description': 'Build done.',
                              'context': 'buildbot/Builder0'
                          })
        self._http.expect('post',
                          '/repos/buildbot/buildbot/statuses/d34db33fd43db33f',
                          json={
                              'state': 'failure',
                              'target_url':
                              'http://localhost:8080/#builders/79/builds/0',
                              'description': 'Build done.',
                              'context': 'buildbot/Builder0'
                          })

        build['complete'] = False
        self.sp.buildStarted(("build", 20, "started"), build)
        build['complete'] = True
        self.sp.buildFinished(("build", 20, "finished"), build)
        build['results'] = FAILURE
        self.sp.buildFinished(("build", 20, "finished"), build)

    @defer.inlineCallbacks
    def setupBuildResultsMin(self, buildResults):
        self.insertTestData([buildResults], buildResults, insertSS=False)
        build = yield self.master.data.get(("builds", 20))
        defer.returnValue(build)

    @defer.inlineCallbacks
    def test_empty(self):
        build = yield self.setupBuildResultsMin(SUCCESS)
        build['complete'] = False
        self.sp.buildStarted(("build", 20, "started"), build)
        build['complete'] = True
        self.sp.buildFinished(("build", 20, "finished"), build)
        build['results'] = FAILURE
        self.sp.buildFinished(("build", 20, "finished"), build)
Esempio n. 7
0
 def setService(self):
     self.sp = GitHubStatusPush(Interpolate('XXYYZZ'))
     return self.sp
Esempio n. 8
0
class TestGitHubStatusPush(TestReactorMixin, unittest.TestCase,
                           ReporterTestMixin):
    # project must be in the form <owner>/<project>
    TEST_PROJECT = 'buildbot/buildbot'

    @defer.inlineCallbacks
    def setUp(self):
        self.setUpTestReactor()
        # ignore config error if txrequests is not installed
        self.patch(config, '_errors', Mock())
        self.master = fakemaster.make_master(self,
                                             wantData=True,
                                             wantDb=True,
                                             wantMq=True)

        yield self.master.startService()
        self._http = yield fakehttpclientservice.HTTPClientService.getFakeService(
            self.master,
            self,
            HOSTED_BASE_URL,
            headers={
                'Authorization': 'token XXYYZZ',
                'User-Agent': 'Buildbot'
            },
            debug=None,
            verify=None)
        sp = self.setService()
        sp.sessionFactory = Mock(return_value=Mock())
        yield sp.setServiceParent(self.master)

    def setService(self):
        self.sp = GitHubStatusPush(Interpolate('XXYYZZ'))
        return self.sp

    def tearDown(self):
        return self.master.stopService()

    @defer.inlineCallbacks
    def setupBuildResults(self, buildResults):
        self.insertTestData([buildResults], buildResults)
        build = yield self.master.data.get(("builds", 20))
        return build

    @defer.inlineCallbacks
    def test_basic(self):
        build = yield self.setupBuildResults(SUCCESS)
        # we make sure proper calls to txrequests have been made
        self._http.expect('post',
                          '/repos/buildbot/buildbot/statuses/d34db33fd43db33f',
                          json={
                              'state': 'pending',
                              'target_url':
                              'http://localhost:8080/#builders/79/builds/0',
                              'description': 'Build started.',
                              'context': 'buildbot/Builder0'
                          })
        self._http.expect('post',
                          '/repos/buildbot/buildbot/statuses/d34db33fd43db33f',
                          json={
                              'state': 'success',
                              'target_url':
                              'http://localhost:8080/#builders/79/builds/0',
                              'description': 'Build done.',
                              'context': 'buildbot/Builder0'
                          })
        self._http.expect('post',
                          '/repos/buildbot/buildbot/statuses/d34db33fd43db33f',
                          json={
                              'state': 'failure',
                              'target_url':
                              'http://localhost:8080/#builders/79/builds/0',
                              'description': 'Build done.',
                              'context': 'buildbot/Builder0'
                          })

        build['complete'] = False
        self.sp.buildStarted(("build", 20, "started"), build)
        build['complete'] = True
        self.sp.buildFinished(("build", 20, "finished"), build)
        build['results'] = FAILURE
        self.sp.buildFinished(("build", 20, "finished"), build)

    @defer.inlineCallbacks
    def setupBuildResultsMin(self, buildResults):
        self.insertTestData([buildResults], buildResults, insertSS=False)
        build = yield self.master.data.get(("builds", 20))
        return build

    @defer.inlineCallbacks
    def test_empty(self):
        build = yield self.setupBuildResultsMin(SUCCESS)
        build['complete'] = False
        self.sp.buildStarted(("build", 20, "started"), build)
        build['complete'] = True
        self.sp.buildFinished(("build", 20, "finished"), build)
        build['results'] = FAILURE
        self.sp.buildFinished(("build", 20, "finished"), build)

    @defer.inlineCallbacks
    def test_multiple_source_stamps_no_props(self):
        repository = 'http://test_repo'
        project = 'test_user/test_project'
        codebase1 = 'test_codebase1'
        codebase2 = 'test_codebase2'
        codebase3 = 'test_codebase3'

        self._http.expect('post',
                          '/repos/test_user/test_project/statuses/rev1',
                          json={
                              'state': 'pending',
                              'target_url':
                              'http://localhost:8080/#builders/79/builds/0',
                              'description': 'Build started.',
                              'context': 'buildbot/Builder0'
                          })
        self._http.expect('post',
                          '/repos/test_user/test_project/statuses/rev3',
                          json={
                              'state': 'pending',
                              'target_url':
                              'http://localhost:8080/#builders/79/builds/0',
                              'description': 'Build started.',
                              'context': 'buildbot/Builder0'
                          })
        self._http.expect('post',
                          '/repos/test_user/test_project/statuses/rev1',
                          json={
                              'state': 'success',
                              'target_url':
                              'http://localhost:8080/#builders/79/builds/0',
                              'description': 'Build done.',
                              'context': 'buildbot/Builder0'
                          })
        self._http.expect('post',
                          '/repos/test_user/test_project/statuses/rev3',
                          json={
                              'state': 'success',
                              'target_url':
                              'http://localhost:8080/#builders/79/builds/0',
                              'description': 'Build done.',
                              'context': 'buildbot/Builder0'
                          })
        self._http.expect('post',
                          '/repos/test_user/test_project/statuses/rev1',
                          json={
                              'state': 'success',
                              'target_url':
                              'http://localhost:8080/#builders/79/builds/0',
                              'description': 'Build done.',
                              'context': 'buildbot/Builder0'
                          })
        self._http.expect('post',
                          '/repos/test_user/test_project/statuses/rev3',
                          json={
                              'state': 'success',
                              'target_url':
                              'http://localhost:8080/#builders/79/builds/0',
                              'description': 'Build done.',
                              'context': 'buildbot/Builder0'
                          })

        # note that the first sourcestamp only has revision, second only branch and only the third
        # has both
        self.master.db.insertTestData([
            fakedb.Master(id=92),
            fakedb.Worker(id=13, name='wrk'),
            fakedb.Builder(id=79, name='Builder0'),
            fakedb.Buildset(id=98, results=SUCCESS, reason="test_reason1"),
            fakedb.BuildsetSourceStamp(buildsetid=98, sourcestampid=234),
            fakedb.BuildsetSourceStamp(buildsetid=98, sourcestampid=235),
            fakedb.BuildsetSourceStamp(buildsetid=98, sourcestampid=236),
            fakedb.SourceStamp(id=234,
                               project=project,
                               branch=None,
                               revision='rev1',
                               repository=repository,
                               codebase=codebase1),
            fakedb.SourceStamp(id=235,
                               project=project,
                               branch='branch2',
                               revision=None,
                               repository=repository,
                               codebase=codebase2),
            fakedb.SourceStamp(id=236,
                               project=project,
                               branch='branch3',
                               revision='rev3',
                               repository=repository,
                               codebase=codebase3),
            fakedb.BuildRequest(id=11, buildsetid=98, builderid=79),
            fakedb.Build(id=20,
                         number=0,
                         builderid=79,
                         buildrequestid=11,
                         workerid=13,
                         masterid=92,
                         results=SUCCESS,
                         state_string="build_text"),
            fakedb.BuildProperty(buildid=20,
                                 name="buildername",
                                 value="Builder0"),
        ])

        build = yield self.master.data.get(("builds", 20))

        build['complete'] = False
        self.sp.buildStarted(("build", 20, "started"), build)
        build['complete'] = True
        self.sp.buildFinished(("build", 20, "finished"), build)
        build['results'] = SUCCESS
        self.sp.buildFinished(("build", 20, "finished"), build)
Esempio n. 9
0
 def createService(self):
     return GitHubStatusPush(Interpolate('XXYYZZ'))
Esempio n. 10
0
 def createService(self):
     return GitHubStatusPush('XXYYZZ')
Esempio n. 11
0
 def setService(self):
     self.sp = GitHubStatusPush(Interpolate('XXYYZZ'))
     return self.sp
Esempio n. 12
0
class TestGitHubStatusPush(TestReactorMixin, unittest.TestCase,
                           ReporterTestMixin):
    # project must be in the form <owner>/<project>
    TEST_PROJECT = 'buildbot/buildbot'

    @defer.inlineCallbacks
    def setUp(self):
        self.setUpTestReactor()
        # ignore config error if txrequests is not installed
        self.patch(config, '_errors', Mock())
        self.master = fakemaster.make_master(self, wantData=True, wantDb=True,
                                             wantMq=True)

        yield self.master.startService()
        self._http = yield fakehttpclientservice.HTTPClientService.getFakeService(
            self.master, self,
            HOSTED_BASE_URL, headers={
                'Authorization': 'token XXYYZZ',
                'User-Agent': 'Buildbot'
            },
            debug=None, verify=None)
        sp = self.setService()
        sp.sessionFactory = Mock(return_value=Mock())
        yield sp.setServiceParent(self.master)

    def setService(self):
        self.sp = GitHubStatusPush(Interpolate('XXYYZZ'))
        return self.sp

    def tearDown(self):
        return self.master.stopService()

    @defer.inlineCallbacks
    def setupBuildResults(self, buildResults):
        self.insertTestData([buildResults], buildResults)
        build = yield self.master.data.get(("builds", 20))
        return build

    @defer.inlineCallbacks
    def test_basic(self):
        build = yield self.setupBuildResults(SUCCESS)
        # we make sure proper calls to txrequests have been made
        self._http.expect(
            'post',
            '/repos/buildbot/buildbot/statuses/d34db33fd43db33f',
            json={'state': 'pending',
                  'target_url': 'http://localhost:8080/#builders/79/builds/0',
                  'description': 'Build started.', 'context': 'buildbot/Builder0'})
        self._http.expect(
            'post',
            '/repos/buildbot/buildbot/statuses/d34db33fd43db33f',
            json={'state': 'success',
                  'target_url': 'http://localhost:8080/#builders/79/builds/0',
                  'description': 'Build done.', 'context': 'buildbot/Builder0'})
        self._http.expect(
            'post',
            '/repos/buildbot/buildbot/statuses/d34db33fd43db33f',
            json={'state': 'failure',
                  'target_url': 'http://localhost:8080/#builders/79/builds/0',
                  'description': 'Build done.', 'context': 'buildbot/Builder0'})

        build['complete'] = False
        self.sp.buildStarted(("build", 20, "started"), build)
        build['complete'] = True
        self.sp.buildFinished(("build", 20, "finished"), build)
        build['results'] = FAILURE
        self.sp.buildFinished(("build", 20, "finished"), build)

    @defer.inlineCallbacks
    def setupBuildResultsMin(self, buildResults):
        self.insertTestData([buildResults], buildResults, insertSS=False)
        build = yield self.master.data.get(("builds", 20))
        return build

    @defer.inlineCallbacks
    def test_empty(self):
        build = yield self.setupBuildResultsMin(SUCCESS)
        build['complete'] = False
        self.sp.buildStarted(("build", 20, "started"), build)
        build['complete'] = True
        self.sp.buildFinished(("build", 20, "finished"), build)
        build['results'] = FAILURE
        self.sp.buildFinished(("build", 20, "finished"), build)
Esempio n. 13
0
 def setService(self):
     self.sp = GitHubStatusPush('XXYYZZ')
     return self.sp
Esempio n. 14
0
class TestGitHubStatusPushURL(TestReactorMixin, unittest.TestCase,
                              ReporterTestMixin):
    # project must be in the form <owner>/<project>
    TEST_PROJECT = 'buildbot'
    TEST_REPO = 'https://github.com/buildbot1/buildbot1.git'

    @defer.inlineCallbacks
    def setUp(self):
        self.setUpTestReactor()

        # ignore config error if txrequests is not installed
        self.patch(config, '_errors', Mock())
        self.master = fakemaster.make_master(self,
                                             wantData=True,
                                             wantDb=True,
                                             wantMq=True)

        yield self.master.startService()
        self._http = yield fakehttpclientservice.HTTPClientService.getFakeService(
            self.master,
            self,
            HOSTED_BASE_URL,
            headers={
                'Authorization': 'token XXYYZZ',
                'User-Agent': 'Buildbot'
            },
            debug=None,
            verify=None)
        sp = self.setService()
        sp.sessionFactory = Mock(return_value=Mock())
        yield sp.setServiceParent(self.master)

    def setService(self):
        self.sp = GitHubStatusPush('XXYYZZ')
        return self.sp

    def tearDown(self):
        return self.master.stopService()

    @defer.inlineCallbacks
    def test_ssh(self):
        self.TEST_REPO = '[email protected]:buildbot2/buildbot2.git'

        build = yield self.insert_build_new()
        # we make sure proper calls to txrequests have been made
        self._http.expect(
            'post',
            '/repos/buildbot2/buildbot2/statuses/d34db33fd43db33f',
            json={
                'state': 'pending',
                'target_url': 'http://localhost:8080/#builders/79/builds/0',
                'description': 'Build started.',
                'context': 'buildbot/Builder0'
            })
        self._http.expect(
            'post',
            '/repos/buildbot2/buildbot2/statuses/d34db33fd43db33f',
            json={
                'state': 'success',
                'target_url': 'http://localhost:8080/#builders/79/builds/0',
                'description': 'Build done.',
                'context': 'buildbot/Builder0'
            })
        self._http.expect(
            'post',
            '/repos/buildbot2/buildbot2/statuses/d34db33fd43db33f',
            json={
                'state': 'failure',
                'target_url': 'http://localhost:8080/#builders/79/builds/0',
                'description': 'Build done.',
                'context': 'buildbot/Builder0'
            })

        yield self.sp._got_event(('builds', 20, 'new'), build)
        build['complete'] = True
        build['results'] = SUCCESS
        yield self.sp._got_event(('builds', 20, 'finished'), build)
        build['results'] = FAILURE
        yield self.sp._got_event(('builds', 20, 'finished'), build)

    @defer.inlineCallbacks
    def test_https(self):
        build = yield self.insert_build_new()
        # we make sure proper calls to txrequests have been made
        self._http.expect(
            'post',
            '/repos/buildbot1/buildbot1/statuses/d34db33fd43db33f',
            json={
                'state': 'pending',
                'target_url': 'http://localhost:8080/#builders/79/builds/0',
                'description': 'Build started.',
                'context': 'buildbot/Builder0'
            })
        self._http.expect(
            'post',
            '/repos/buildbot1/buildbot1/statuses/d34db33fd43db33f',
            json={
                'state': 'success',
                'target_url': 'http://localhost:8080/#builders/79/builds/0',
                'description': 'Build done.',
                'context': 'buildbot/Builder0'
            })
        self._http.expect(
            'post',
            '/repos/buildbot1/buildbot1/statuses/d34db33fd43db33f',
            json={
                'state': 'failure',
                'target_url': 'http://localhost:8080/#builders/79/builds/0',
                'description': 'Build done.',
                'context': 'buildbot/Builder0'
            })

        yield self.sp._got_event(('builds', 20, 'new'), build)
        build['complete'] = True
        build['results'] = SUCCESS
        yield self.sp._got_event(('builds', 20, 'finished'), build)
        build['results'] = FAILURE
        yield self.sp._got_event(('builds', 20, 'finished'), build)