Exemplo n.º 1
0
    def testGitWithChange(self):
        changeDict = {b"payload": [gitJsonPayload]}
        self.request = FakeRequest(changeDict)
        self.request.uri = b"/change_hook/gitorious"
        self.request.method = b"POST"
        yield self.request.test_render(self.changeHook)

        self.assertEqual(len(self.changeHook.master.data.updates.changesAdded),
                         1)
        change = self.changeHook.master.data.updates.changesAdded[0]

        # Gitorious doesn't send changed files
        self.assertEqual(change['files'], [])
        self.assertEqual(change["repository"],
                         "http://gitorious.org/q/mainline")
        self.assertEqual(change["when_timestamp"], 1326218547)
        self.assertEqual(change["author"], "jason <*****@*****.**>")
        self.assertEqual(change["revision"],
                         'df5744f7bc8663b39717f87742dc94f52ccbf4dd')
        self.assertEqual(change["comments"],
                         "added a place to put the docstring for Book")
        self.assertEqual(change["branch"], "new_look")
        revlink = ("http://gitorious.org/q/mainline/commit/"
                   "df5744f7bc8663b39717f87742dc94f52ccbf4dd")
        self.assertEqual(change["revlink"], revlink)
Exemplo n.º 2
0
def FakeRequestMR(content):
    request = FakeRequest(content=content)
    request.uri = b"/change_hook/gitlab"
    request.args = {b'codebase': [b'MyCodebase']}
    request.received_headers[_HEADER_EVENT] = b"Merge Request Hook"
    request.method = b"POST"
    return request
Exemplo n.º 3
0
 def testGitWithChange(self):
     self.request = FakeRequest(content=gitJsonPayload)
     self.request.uri = b"/change_hook/gitlab"
     self.request.method = b"POST"
     self.request.received_headers[_HEADER_EVENT] = b"Push Hook"
     res = yield self.request.test_render(self.changeHook)
     self.check_changes_push_event(res)
Exemplo n.º 4
0
class TestChangeHookGiteaSecretPhrase(unittest.TestCase, TestReactorMixin):
    def setUp(self):
        self.setUpTestReactor()
        self.changeHook = change_hook.ChangeHookResource(
            dialects={'gitea': {
                "secret": "test"
            }},
            master=fakeMasterForHooks(self))

    @defer.inlineCallbacks
    def testValidSecret(self):
        self.request = FakeRequest(content=giteaJsonPushPayload)
        self.request.uri = b'/change_hook/gitea'
        self.request.method = b'POST'
        self.request.received_headers[_HEADER_EVENT_TYPE] = b"push"
        self.request.received_headers[
            _HEADER_SIGNATURE] = giteaJsonPushPayload_Signature
        yield self.request.test_render(self.changeHook)
        self.assertEqual(len(self.changeHook.master.data.updates.changesAdded),
                         2)

    @defer.inlineCallbacks
    def testInvalidSecret(self):
        self.request = FakeRequest(content=giteaInvalidSecretPush)
        self.request.uri = b'/change_hook/gitea'
        self.request.method = b'POST'
        self.request.received_headers[_HEADER_EVENT_TYPE] = b"push"
        self.request.received_headers[
            _HEADER_SIGNATURE] = giteaJsonPushPayload_Signature
        yield self.request.test_render(self.changeHook)
        self.assertEqual(len(self.changeHook.master.data.updates.changesAdded),
                         0)
Exemplo n.º 5
0
    def testMercurialWithChange(self):
        change_dict = {'payload': [mercurialJsonPayload]}

        request = FakeRequest(change_dict)
        request.uri = '/change_hook/bitbucket'
        request.method = 'POST'

        yield request.test_render(self.change_hook)

        self.assertEqual(len(self.change_hook.master.addedChanges), 1)
        commit = self.change_hook.master.addedChanges[0]

        self.assertEqual(commit['files'], ['somefile.py'])
        self.assertEqual(commit['repository'],
                         'https://bitbucket.org/marcus/project-x/')
        self.assertEqual(
            calendar.timegm(commit['when_timestamp'].utctimetuple()),
            1338350336)
        self.assertEqual(commit['author'],
                         'Marcus Bertrand <*****@*****.**>')
        self.assertEqual(commit['revision'],
                         '620ade18607ac42d872b568bb92acaa9a28620e9')
        self.assertEqual(commit['comments'],
                         'Added some more things to somefile.py')
        self.assertEqual(commit['branch'], 'master')
        self.assertEqual(
            commit['revlink'],
            'https://bitbucket.org/marcus/project-x/commits/'
            '620ade18607ac42d872b568bb92acaa9a28620e9')
Exemplo n.º 6
0
def _prepare_request(event, payload, _secret=None, headers=None):
    if headers is None:
        headers = dict()

    request = FakeRequest()

    request.uri = b"/change_hook/github"
    request.method = b"GET"
    request.received_headers = {
        _HEADER_EVENT: event
    }

    if isinstance(payload, (string_types, bytes)):
        if isinstance(payload, text_type):
            request.content = StringIO(payload)
        elif isinstance(payload, bytes):
            request.content = BytesIO(payload)
        request.received_headers[_HEADER_CT] = _CT_JSON

        if _secret is not None:
            signature = hmac.new(unicode2bytes(_secret),
                                 msg=unicode2bytes(payload),
                                 digestmod=sha1)
            request.received_headers[_HEADER_SIGNATURE] = \
                'sha1={}'.format(signature.hexdigest())
    else:
        request.args['payload'] = payload
        request.received_headers[_HEADER_CT] = _CT_ENCODED

    request.received_headers.update(headers)

    # print request.received_headers

    return request
Exemplo n.º 7
0
def _prepare_request(event, payload, _secret=None, headers=None):
    if headers is None:
        headers = dict()

    request = FakeRequest()

    request.uri = "/change_hook/github"
    request.method = "GET"
    request.received_headers = {
        _HEADER_EVENT: event
    }

    if isinstance(payload, str):
        request.content = StringIO(payload)
        request.received_headers[_HEADER_CT] = _CT_JSON

        if _secret is not None:
            signature = hmac.new(_secret, msg=payload, digestmod=sha1)
            request.received_headers[_HEADER_SIGNATURE] = \
                'sha1=%s' % (signature.hexdigest(),)
    else:
        request.args['payload'] = payload
        request.received_headers[_HEADER_CT] = _CT_ENCODED

    request.received_headers.update(headers)

    # print request.received_headers

    return request
    def testGitWithChange(self):
        change_dict = {b'payload': [gitJsonPayload]}

        request = FakeRequest(change_dict)
        request.received_headers[_HEADER_EVENT] = b"repo:push"
        request.uri = b'/change_hook/bitbucket'
        request.method = b'POST'

        yield request.test_render(self.change_hook)

        self.assertEqual(len(self.change_hook.master.addedChanges), 1)
        commit = self.change_hook.master.addedChanges[0]

        self.assertEqual(commit['files'], ['somefile.py'])
        self.assertEqual(
            commit['repository'], 'https://bitbucket.org/marcus/project-x/')
        self.assertEqual(
            calendar.timegm(commit['when_timestamp'].utctimetuple()),
            1338350336
        )
        self.assertEqual(
            commit['author'], 'Marcus Bertrand <*****@*****.**>')
        self.assertEqual(
            commit['revision'], '620ade18607ac42d872b568bb92acaa9a28620e9')
        self.assertEqual(
            commit['comments'], 'Added some more things to somefile.py')
        self.assertEqual(commit['branch'], 'master')
        self.assertEqual(
            commit['revlink'],
            'https://bitbucket.org/marcus/project-x/commits/'
            '620ade18607ac42d872b568bb92acaa9a28620e9'
        )
        self.assertEqual(
            commit['properties']['event'],
            'repo:push')
Exemplo n.º 9
0
 def testGitWithChange_WithProjectToo(self):
     self.request = FakeRequest(content=gitJsonPayload)
     self.request.uri = "/change_hook/gitlab"
     self.request.args = {'project': ['MyProject']}
     self.request.method = "POST"
     res = yield self.request.test_render(self.changeHook)
     self.check_changes(res, project="MyProject")
Exemplo n.º 10
0
 def test_valid_secret(self):
     self.request = FakeRequest(content=gitJsonPayload)
     self.request.received_headers[_HEADER_GITLAB_TOKEN] = self._SECRET
     self.request.uri = b"/change_hook/gitlab"
     self.request.method = b"POST"
     yield self.request.test_render(self.changeHook)
     self.assertEqual(len(self.changeHook.master.addedChanges), 2)
Exemplo n.º 11
0
 def testChangedFiles(self):
     self.request = FakeRequest(content=giteaJsonPushModifiedFiles)
     self.request.uri = b'/change_hook/gitea'
     self.request.method = b'POST'
     self.request.received_headers[_HEADER_EVENT_TYPE] = b"push"
     res = yield self.request.test_render(self.changeHook)
     self.checkFileChanges(res)
Exemplo n.º 12
0
def _prepare_request(event, payload, _secret=None, headers=None):
    if headers is None:
        headers = dict()

    request = FakeRequest()

    request.uri = b"/change_hook/github"
    request.method = b"GET"
    request.received_headers = {
        _HEADER_EVENT: event
    }

    assert isinstance(payload, (bytes, list)), \
        "payload can only be bytes or list, not {}".format(type(payload))

    if isinstance(payload, bytes):
        request.content = BytesIO(payload)
        request.received_headers[_HEADER_CT] = _CT_JSON

        if _secret is not None:
            signature = hmac.new(unicode2bytes(_secret),
                                 msg=unicode2bytes(payload),
                                 digestmod=sha1)
            request.received_headers[_HEADER_SIGNATURE] = \
                'sha1={}'.format(signature.hexdigest())
    else:
        request.args[b'payload'] = payload
        request.received_headers[_HEADER_CT] = _CT_ENCODED

    request.received_headers.update(headers)

    # print request.received_headers

    return request
    def testMercurialWithChange(self):
        change_dict = {'payload': [mercurialJsonPayload]}

        request = FakeRequest(change_dict)
        request.uri = '/change_hook/bitbucket'
        request.method = 'POST'

        yield request.test_render(self.change_hook)

        self.assertEqual(len(request.addedChanges), 1)
        commit = request.addedChanges[0]

        self.assertEqual(commit['files'], ['somefile.py'])
        self.assertEqual(
            commit['repository'], 'https://bitbucket.org/marcus/project-x/')
        self.assertEqual(
            calendar.timegm(commit['when_timestamp'].utctimetuple()),
            1338350336
        )
        self.assertEqual(
            commit['author'], 'Marcus Bertrand <*****@*****.**>')
        self.assertEqual(
            commit['revision'], '620ade18607ac42d872b568bb92acaa9a28620e9')
        self.assertEqual(
            commit['comments'], 'Added some more things to somefile.py')
        self.assertEqual(commit['branch'], 'master')
        self.assertEqual(
            commit['revlink'],
            'https://bitbucket.org/marcus/project-x/commits/'
            '620ade18607ac42d872b568bb92acaa9a28620e9'
        )
Exemplo n.º 14
0
    def testGitWithChange(self):
        changeDict = {"payload": [gitJsonPayload]}
        self.request = FakeRequest(changeDict)
        self.request.uri = "/change_hook/gitorious"
        self.request.method = "POST"
        d = self.request.test_render(self.changeHook)

        def check_changes(r):
            self.assertEquals(len(self.changeHook.master.addedChanges), 1)
            change = self.changeHook.master.addedChanges[0]

            # Gitorious doesn't send changed files
            self.assertEquals(change['files'], [])
            self.assertEquals(change["repository"],
                              "http://gitorious.org/q/mainline")
            self.assertEquals(
                calendar.timegm(change["when_timestamp"].utctimetuple()),
                1326218547
            )
            self.assertEquals(change["author"], "jason <*****@*****.**>")
            self.assertEquals(change["revision"],
                              'df5744f7bc8663b39717f87742dc94f52ccbf4dd')
            self.assertEquals(change["comments"],
                              "added a place to put the docstring for Book")
            self.assertEquals(change["branch"], "new_look")
            revlink = ("http://gitorious.org/q/mainline/commit/"
                       "df5744f7bc8663b39717f87742dc94f52ccbf4dd")
            self.assertEquals(change["revlink"], revlink)

        d.addCallback(check_changes)
        return d
Exemplo n.º 15
0
    def setUpRequest(self, args, options=True, activate=True):
        self.request = FakeRequest(args=args)
        self.request.uri = "/change_hook/poller"
        self.request.method = "GET"
        www = self.request.site.master.www
        self.master = master = self.request.site.master = fakemaster.make_master(
            testcase=self, wantData=True)
        master.www = www
        yield self.master.startService()
        self.changeHook = change_hook.ChangeHookResource(
            dialects={'poller': options}, master=master)
        master.change_svc = ChangeManager()
        yield master.change_svc.setServiceParent(master)
        self.changesrc = self.Subclass("example", 21)
        yield self.changesrc.setServiceParent(master.change_svc)

        self.otherpoller = self.Subclass("otherpoller", 22)
        yield self.otherpoller.setServiceParent(master.change_svc)

        anotherchangesrc = base.ChangeSource(name='notapoller')
        anotherchangesrc.setName(u"notapoller")
        yield anotherchangesrc.setServiceParent(master.change_svc)

        yield self.request.test_render(self.changeHook)
        yield util.asyncSleep(0.1)
Exemplo n.º 16
0
class TestChangeHookConfiguredWithSecret(unittest.TestCase):

    _SECRET = 'thesecret'

    def setUp(self):
        self.changeHook = change_hook.ChangeHookResource(
            dialects={'gitlab': {
                'secret': self._SECRET
            }},
            master=fakeMasterForHooks(self))

    @defer.inlineCallbacks
    def test_missing_secret(self):
        self.request = FakeRequest(content=gitJsonPayloadTag)
        self.request.uri = b"/change_hook/gitlab"
        self.request.args = {b'codebase': [b'MyCodebase']}
        self.request.method = b"POST"
        self.request.received_headers[_HEADER_EVENT] = b"Push Hook"
        yield self.request.test_render(self.changeHook)
        expected = b'Invalid secret'
        self.assertEqual(self.request.written, expected)
        self.assertEqual(len(self.changeHook.master.data.updates.changesAdded),
                         0)

    @defer.inlineCallbacks
    def test_valid_secret(self):
        self.request = FakeRequest(content=gitJsonPayload)
        self.request.received_headers[_HEADER_GITLAB_TOKEN] = self._SECRET
        self.request.received_headers[_HEADER_EVENT] = b"Push Hook"
        self.request.uri = b"/change_hook/gitlab"
        self.request.method = b"POST"
        yield self.request.test_render(self.changeHook)
        self.assertEqual(len(self.changeHook.master.data.updates.changesAdded),
                         2)
Exemplo n.º 17
0
    def setUpRequest(self, args, options=True, activate=True):
        self.changeHook = change_hook.ChangeHookResource(dialects={'poller': options}, master=mock.Mock())

        self.request = FakeRequest(args=args)
        self.request.uri = "/change_hook/poller"
        self.request.method = "GET"

        master = self.request.site.master
        master.change_svc = ChangeManager()
        master.change_svc.setServiceParent(master)
        self.changesrc = self.Subclass("example", 21)
        self.changesrc.setServiceParent(master.change_svc)
        if activate:
            self.changesrc.activate()

        self.otherpoller = self.Subclass("otherpoller", 22)
        self.otherpoller.setServiceParent(master.change_svc)
        if activate:
            self.otherpoller.activate()

        anotherchangesrc = base.ChangeSource(name='notapoller')
        anotherchangesrc.setName("notapoller")
        anotherchangesrc.setServiceParent(master.change_svc)

        yield self.request.test_render(self.changeHook)
        yield util.asyncSleep(0)
Exemplo n.º 18
0
class TestChangeHookConfiguredWithSecret(unittest.TestCase):

    _SECRET = 'thesecret'

    def setUp(self):
        self.changeHook = change_hook.ChangeHookResource(
            dialects={'gitlab': {'secret': self._SECRET}},
            master=fakeMasterForHooks())

    @defer.inlineCallbacks
    def test_missing_secret(self):
        self.request = FakeRequest(content=gitJsonPayloadTag)
        self.request.uri = b"/change_hook/gitlab"
        self.request.args = {b'codebase': [b'MyCodebase']}
        self.request.method = b"POST"
        self.request.received_headers[_HEADER_EVENT] = b"Push Hook"
        yield self.request.test_render(self.changeHook)
        expected = b'Invalid secret'
        self.assertEqual(self.request.written, expected)
        self.assertEqual(len(self.changeHook.master.addedChanges), 0)

    @defer.inlineCallbacks
    def test_valid_secret(self):
        self.request = FakeRequest(content=gitJsonPayload)
        self.request.received_headers[_HEADER_GITLAB_TOKEN] = self._SECRET
        self.request.received_headers[_HEADER_EVENT] = b"Push Hook"
        self.request.uri = b"/change_hook/gitlab"
        self.request.method = b"POST"
        yield self.request.test_render(self.changeHook)
        self.assertEqual(len(self.changeHook.master.addedChanges), 2)
Exemplo n.º 19
0
    def testDefaultWithNoChange(self):
        self.request = FakeRequest()
        self.request.uri = "/change_hook/"
        self.request.method = "GET"

        def namedModuleMock(name):
            if name == 'buildbot.status.web.hooks.base':
                class mock_hook_module(object):

                    def getChanges(self, request, options):
                        raise AssertionError
                return mock_hook_module()
        self.patch(change_hook, "namedModule", namedModuleMock)

        d = self.request.test_render(self.changeHook)

        def check_changes(r):
            expected = "Error processing changes."
            self.assertEquals(len(self.request.addedChanges), 0)
            self.assertEqual(self.request.written, expected)
            self.request.setResponseCode.assert_called_with(500, expected)
            self.assertEqual(len(self.flushLoggedErrors(AssertionError)), 1)

        d.addCallback(check_changes)
        return d
Exemplo n.º 20
0
 def testPullRequestForkEvent(self):
     self.request = FakeRequest(content=giteaJsonPullRequestFork)
     self.request.uri = b'/change_hook/gitea'
     self.request.method = b'POST'
     self.request.received_headers[_HEADER_EVENT_TYPE] = b"pull_request"
     res = yield self.request.test_render(self.changeHook)
     self.checkChangesFromPullRequestFork(res)
Exemplo n.º 21
0
    def testGitWithDistinctFalse(self):
        changeDict = {
            "payload": [
                gitJsonPayload.replace('"distinct": true,',
                                       '"distinct": false,')
            ]
        }
        self.request = FakeRequest(changeDict)
        self.request.uri = "/change_hook/github"
        self.request.method = "GET"
        self.request.received_headers = {
            _HEADER_CT: _CT_ENCODED,
            _HEADER_EVENT: 'push'
        }
        yield self.request.test_render(self.changeHook)
        self.assertEqual(len(self.request.addedChanges), 1)
        change = self.request.addedChanges[0]

        self.assertEqual(change['files'], ['modfile', 'removedFile'])
        self.assertEqual(change["repository"],
                         "http://github.com/defunkt/github")
        self.assertEqual(timegm(change["when_timestamp"].utctimetuple()),
                         1203114994)
        self.assertEqual(change["author"],
                         "Fred Flinstone <*****@*****.**>")
        self.assertEqual(change["src"], "git")
        self.assertEqual(change["revision"],
                         'de8251ff97ee194a289832576287d6f8ad74e3d0')
        self.assertEqual(change["comments"], "update pricing a tad")
        self.assertEqual(change["branch"], "master")
        self.assertEqual(
            change["revlink"], "http://github.com/defunkt/github/commit/"
            "de8251ff97ee194a289832576287d6f8ad74e3d0")
Exemplo n.º 22
0
 def testGitWithChange_WithCodebaseToo(self):
     self.request = FakeRequest(content=gitJsonPayload)
     self.request.uri = "/change_hook/gitlab"
     self.request.args = {'codebase': ['MyCodebase']}
     self.request.method = "POST"
     res = yield self.request.test_render(self.changeHook)
     self.check_changes(res, codebase="MyCodebase")
Exemplo n.º 23
0
    def testNewHandler(self):
        self.request = FakeRequest(content=giteaJsonPushPayload)
        self.request.uri = b'/change_hook/gitea'
        self.request.method = b'POST'
        self.request.received_headers[_HEADER_EVENT_TYPE] = b'release'
        yield self.request.test_render(self.changeHook)

        self.checkChanges()
Exemplo n.º 24
0
    def test_render_new_style_logs(self):  # bug 2930
        self.setupStep(NewStyleStep())
        bs = yield self.runStep()

        # now try to render it in the WebStatus
        log_rsrc = logs.TextLog(bs.getSteps()[0].getLogs()[0])
        request = FakeRequest()
        yield request.test_render(log_rsrc)
Exemplo n.º 25
0
 def testPullRequestMergedEvent(self):
     self.request = FakeRequest(content=giteaJsonPullRequestPayloadMerged)
     self.request.uri = b'/change_hook/gitea'
     self.request.method = b'POST'
     self.request.received_headers[_HEADER_EVENT_TYPE] = b"pull_request"
     yield self.request.test_render(self.changeHook)
     self.assertEqual(len(self.changeHook.master.data.updates.changesAdded),
                      0)
Exemplo n.º 26
0
 def testGitWithChange_WithPushTag(self):
     self.request = FakeRequest(content=gitJsonPayloadTag)
     self.request.uri = b"/change_hook/gitlab"
     self.request.args = {b'codebase': [b'MyCodebase']}
     self.request.received_headers[_HEADER_EVENT] = b"Push Hook"
     self.request.method = b"POST"
     res = yield self.request.test_render(self.changeHook)
     self.check_changes_tag_event(res, codebase="MyCodebase")
Exemplo n.º 27
0
    def testReturnedUnknownPngOnUnkwnownBuilder(self):
        status = FakeStatus()
        self.request = FakeRequest({'builder': [':)'], 'size': 'normal'})
        self.request.uri = '/png'
        self.request.method = 'GET'
        yield self.request.test_render(pngstatus.PngStatusResource(status))

        self.assertPngFile(self.request.written, 'unknown_normal')
Exemplo n.º 28
0
 def testInvalidSecret(self):
     self.request = FakeRequest(content=giteaInvalidSecretPush)
     self.request.uri = b'/change_hook/gitea'
     self.request.method = b'POST'
     self.request.received_headers[_HEADER_EVENT_TYPE] = b"push"
     yield self.request.test_render(self.changeHook)
     self.assertEqual(len(self.changeHook.master.data.updates.changesAdded),
                      0)
Exemplo n.º 29
0
 def testGitWithChange_WithProjectToo(self):
     self.request = FakeRequest(content=gitJsonPayload)
     self.request.uri = b"/change_hook/gitlab"
     self.request.args = {b'project': [b'MyProject']}
     self.request.received_headers[_HEADER_EVENT] = b"Push Hook"
     self.request.method = b"POST"
     res = yield self.request.test_render(self.changeHook)
     self.check_changes_push_event(res, project="MyProject")
Exemplo n.º 30
0
 def prepare_request(self, **kwargs):
     payload = {"update_id": 12345}
     payload.update(kwargs)
     content = unicode2bytes(json.dumps(payload))
     request = FakeRequest(content=content)
     request.uri = b"/bot12345:secret"
     request.method = b"POST"
     request.received_headers[b'Content-Type'] = b"application/json"
     return request
Exemplo n.º 31
0
 def testPushEvent(self):
     self.request = FakeRequest(content=giteaJsonPushPayload)
     self.request.uri = b'/change_hook/gitea'
     self.request.method = b'POST'
     self.request.received_headers[_HEADER_EVENT_TYPE] = b"push"
     self.request.received_headers[
         _HEADER_SIGNATURE] = giteaJsonPushPayload_Signature
     res = yield self.request.test_render(self.changeHook)
     self.checkChangesFromPush(res)
class TestChangeHookConfiguredWithGitChange(unittest.TestCase):
    def setUp(self):
        self.changeHook = change_hook.ChangeHookResource(dialects={'gitlab': True})

    # Test 'base' hook with attributes. We should get a json string representing
    # a Change object as a dictionary. All values show be set.
    def testGitWithChange(self):
        self.request = FakeRequest(content=gitJsonPayload)
        self.request.uri = "/change_hook/gitlab"
        self.request.method = "POST"
        d = self.request.test_render(self.changeHook)

        def check_changes(r):
            self.assertEquals(len(self.request.addedChanges), 2)
            change = self.request.addedChanges[0]

            self.assertEquals(change["repository"], "git@localhost:diaspora.git")
            self.assertEquals(
                calendar.timegm(change["when_timestamp"].utctimetuple()),
                1323692851
            )
            self.assertEquals(change["author"], "Jordi Mallach <*****@*****.**>")
            self.assertEquals(change["revision"], 'b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327')
            self.assertEquals(change["comments"], "Update Catalan translation to e38cb41.")
            self.assertEquals(change["branch"], "master")
            self.assertEquals(change["revlink"], "http://localhost/diaspora/commits/b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327")

            change = self.request.addedChanges[1]
            self.assertEquals(change["repository"], "git@localhost:diaspora.git")
            self.assertEquals(
                calendar.timegm(change["when_timestamp"].utctimetuple()),
                1325626589
            )
            self.assertEquals(change["author"], "GitLab dev user <gitlabdev@dv6700.(none)>")
            self.assertEquals(change["src"], "git")
            self.assertEquals(change["revision"], 'da1560886d4f094c3e6c9ef40349f7d38b5d27d7')
            self.assertEquals(change["comments"], "fixed readme")
            self.assertEquals(change["branch"], "master")
            self.assertEquals(change["revlink"], "http://localhost/diaspora/commits/da1560886d4f094c3e6c9ef40349f7d38b5d27d7")

        d.addCallback(check_changes)
        return d

    def testGitWithNoJson(self):
        self.request = FakeRequest()
        self.request.uri = "/change_hook/gitlab"
        self.request.method = "POST"
        d = self.request.test_render(self.changeHook)

        def check_changes(r):
            expected = "No JSON object could be decoded"
            self.assertEquals(len(self.request.addedChanges), 0)
            self.assertEqual(self.request.written, expected)
            self.request.setResponseCode.assert_called_with(400, expected)

        d.addCallback(check_changes)
        return d
def _prepare_request(payload, headers=None, change_dict=None):
    headers = headers or {}
    request = FakeRequest(change_dict)
    request.uri = "/change_hook/bitbucketserver"
    request.method = "POST"
    request.content = StringIO(payload)
    request.received_headers['Content-Type'] = _CT_JSON
    request.received_headers.update(headers)
    return request
Exemplo n.º 34
0
 def test_event_property(self):
     self.request = FakeRequest(content=gitJsonPayload)
     self.request.received_headers[_HEADER_EVENT] = "Push Hook"
     self.request.uri = b"/change_hook/gitlab"
     self.request.method = b"POST"
     yield self.request.test_render(self.changeHook)
     self.assertEqual(len(self.changeHook.master.addedChanges), 2)
     change = self.changeHook.master.addedChanges[0]
     self.assertEqual(change["properties"]["event"], "Push Hook")
Exemplo n.º 35
0
 def testGitWithChange(self):
     self.request = FakeRequest()
     self.request.content = StringIO(gitJsonPayload)
     self.request.received_headers[_HEADER_CT] = _CT_JSON
     self.request.uri = "/change_hook/planio"
     self.request.method = "POST"
     res = yield self.request.test_render(self.changeHook)
     self.check_changes(
         res, project="sample_project.buildout", codebase="myCode")
Exemplo n.º 36
0
 def test_missing_secret(self):
     self.request = FakeRequest(content=gitJsonPayloadTag)
     self.request.uri = b"/change_hook/gitlab"
     self.request.args = {'codebase': ['MyCodebase']}
     self.request.method = b"POST"
     yield self.request.test_render(self.changeHook)
     expected = b'Invalid secret'
     self.assertEqual(self.request.written, expected)
     self.assertEqual(len(self.changeHook.master.addedChanges), 0)
Exemplo n.º 37
0
    def setUp(self):
        self.request_data = {
            'builder': ['TestBuilder'],
            'size': 'normal',
        }

        self.request = FakeRequest(self.request_data)
        self.request.uri = '/png'
        self.request.method = 'GET'
Exemplo n.º 38
0
class TestChangeHookConfiguredWithGitChange(unittest.TestCase):

    def setUp(self):
        dialects = {'gitorious': True}
        self.changeHook = change_hook.ChangeHookResource(
            dialects=dialects, master=fakeMasterForHooks())

    # Test 'base' hook with attributes. We should get a json string
    # representing a Change object as a dictionary. All values show be set.
    def testGitWithChange(self):
        changeDict = {"payload": [gitJsonPayload]}
        self.request = FakeRequest(changeDict)
        self.request.uri = "/change_hook/gitorious"
        self.request.method = "POST"
        d = self.request.test_render(self.changeHook)

        def check_changes(r):
            self.assertEquals(len(self.changeHook.master.addedChanges), 1)
            change = self.changeHook.master.addedChanges[0]

            # Gitorious doesn't send changed files
            self.assertEquals(change['files'], [])
            self.assertEquals(change["repository"],
                              "http://gitorious.org/q/mainline")
            self.assertEquals(
                calendar.timegm(change["when_timestamp"].utctimetuple()),
                1326218547
            )
            self.assertEquals(change["author"], "jason <*****@*****.**>")
            self.assertEquals(change["revision"],
                              'df5744f7bc8663b39717f87742dc94f52ccbf4dd')
            self.assertEquals(change["comments"],
                              "added a place to put the docstring for Book")
            self.assertEquals(change["branch"], "new_look")
            revlink = ("http://gitorious.org/q/mainline/commit/"
                       "df5744f7bc8663b39717f87742dc94f52ccbf4dd")
            self.assertEquals(change["revlink"], revlink)

        d.addCallback(check_changes)
        return d

    def testGitWithNoJson(self):
        self.request = FakeRequest()
        self.request.uri = "/change_hook/gitorious"
        self.request.method = "GET"
        d = self.request.test_render(self.changeHook)

        def check_changes(r):
            expected = "Error processing changes."
            self.assertEquals(len(self.changeHook.master.addedChanges), 0)
            self.assertEqual(self.request.written, expected)
            self.request.setResponseCode.assert_called_with(500, expected)
            self.assertEqual(len(self.flushLoggedErrors()), 1)

        d.addCallback(check_changes)
        return d
    def testWithNoJson(self):
        request = FakeRequest()
        request.uri = "/change_hook/bitbucket"
        request.method = "POST"

        yield request.test_render(self.change_hook)
        self.assertEqual(len(request.addedChanges), 0)
        self.assertEqual(request.written, "Error processing changes.")
        request.setResponseCode.assert_called_with(500, "Error processing changes.")
        self.assertEqual(len(self.flushLoggedErrors()), 1)
Exemplo n.º 40
0
def _prepare_request(event, payload, _secret=None, headers=None):
    if headers is None:
        headers = dict()

    request = FakeRequest()

    request.uri = "/change_hook/github"
    request.method = "GET"
    request.received_headers = {
        _HEADER_EVENT: event
    }

    if isinstance(payload, str):
        request.content = StringIO(payload)
        request.received_headers[_HEADER_CT] = _CT_JSON

        if _secret is not None:
            signature = hmac.new(_secret, msg=payload, digestmod=sha1)
            request.received_headers[_HEADER_SIGNATURE] = \
                'sha1=%s' % (signature.hexdigest(),)
    else:
        request.args['payload'] = payload
        request.received_headers[_HEADER_CT] = _CT_ENCODED

    request.received_headers.update(headers)

    # print request.received_headers

    return request
Exemplo n.º 41
0
    def testGitWithNoCommitsPayload(self):
        change_dict = {b'payload': [gitJsonNoCommitsPayload]}

        request = FakeRequest(change_dict)
        request.uri = b'/change_hook/bitbucket'
        request.method = b'POST'

        yield request.test_render(self.change_hook)

        self.assertEqual(len(self.change_hook.master.addedChanges), 0)
        self.assertEqual(request.written, b'no change found')
    def testMercurialWithNoCommitsPayload(self):
        change_dict = {'payload': [mercurialJsonNoCommitsPayload]}

        request = FakeRequest(change_dict)
        request.uri = '/change_hook/bitbucket'
        request.method = 'POST'

        yield request.test_render(self.change_hook)

        self.assertEqual(len(request.addedChanges), 0)
        self.assertEqual(request.written, 'no changes found')
Exemplo n.º 43
0
    def testWithNoJson(self):
        request = FakeRequest()
        request.uri = '/change_hook/bitbucket'
        request.method = 'POST'

        yield request.test_render(self.change_hook)
        self.assertEqual(len(self.change_hook.master.addedChanges), 0)
        self.assertEqual(request.written, b'Error processing changes.')
        request.setResponseCode.assert_called_with(
            500, b'Error processing changes.')
        self.assertEqual(len(self.flushLoggedErrors()), 1)
    def testGitWithNoCommitsPayload(self):
        change_dict = {"payload": [gitJsonNoCommitsPayload]}

        request = FakeRequest(change_dict)
        request.uri = "/change_hook/bitbucket"
        request.method = "POST"

        yield request.test_render(self.change_hook)

        self.assertEqual(len(request.addedChanges), 0)
        self.assertEqual(request.written, "no changes found")
Exemplo n.º 45
0
def _prepare_request(payload, headers=None, change_dict=None):
    headers = headers or {}
    request = FakeRequest(change_dict)
    request.uri = b"/change_hook/bitbucketcloud"
    request.method = b"POST"
    if isinstance(payload, text_type):
        payload = unicode2bytes(payload)
    request.content = BytesIO(payload)
    request.received_headers[b'Content-Type'] = _CT_JSON
    request.received_headers.update(headers)
    return request
Exemplo n.º 46
0
    def testMercurialWithNoCommitsPayload(self):
        change_dict = {b'payload': [mercurialJsonNoCommitsPayload]}

        request = FakeRequest(change_dict)
        request.uri = b'/change_hook/bitbucket'
        request.method = b'POST'

        yield request.test_render(self.change_hook)

        self.assertEqual(len(self.change_hook.master.data.updates.changesAdded), 0)
        self.assertEqual(request.written, b'no change found')
    def testGitWithChangeAndProject(self):
        change_dict = {"payload": [gitJsonPayload], "project": ["project-name"]}

        request = FakeRequest(change_dict)
        request.uri = "/change_hook/bitbucket"
        request.method = "POST"

        yield request.test_render(self.change_hook)

        self.assertEqual(len(request.addedChanges), 1)
        commit = request.addedChanges[0]

        self.assertEqual(commit["project"], "project-name")
Exemplo n.º 48
0
    def testGitWithChangeAndProject(self):
        change_dict = {
            b'payload': [gitJsonPayload],
            b'project': [b'project-name']}

        request = FakeRequest(change_dict)
        request.uri = b'/change_hook/bitbucket'
        request.method = b'POST'

        yield request.test_render(self.change_hook)

        self.assertEqual(len(self.change_hook.master.data.updates.changesAdded), 1)
        commit = self.change_hook.master.data.updates.changesAdded[0]

        self.assertEqual(commit['project'], 'project-name')
    def testGitWithChangeAndProject(self):
        change_dict = {
            'payload': [gitJsonPayload],
            'project': ['project-name']}

        request = FakeRequest(change_dict)
        request.uri = '/change_hook/bitbucket'
        request.method = 'POST'

        yield request.test_render(self.change_hook)

        self.assertEqual(len(request.addedChanges), 1)
        commit = request.addedChanges[0]

        self.assertEqual(commit['project'], 'project-name')
Exemplo n.º 50
0
    def setUpRequest(self, args, options=True, activate=True):
        self.request = FakeRequest(args=args)
        self.request.uri = b"/change_hook/poller"
        self.request.method = b"GET"
        www = self.request.site.master.www
        self.master = master = self.request.site.master = fakemaster.make_master(
            testcase=self, wantData=True)
        master.www = www
        yield self.master.startService()
        self.changeHook = change_hook.ChangeHookResource(
            dialects={'poller': options}, master=master)
        master.change_svc = ChangeManager()
        yield master.change_svc.setServiceParent(master)
        self.changesrc = self.Subclass(21, name='example')
        yield self.changesrc.setServiceParent(master.change_svc)

        self.otherpoller = self.Subclass(22, name="otherpoller")
        yield self.otherpoller.setServiceParent(master.change_svc)

        anotherchangesrc = base.ChangeSource(name='notapoller')
        anotherchangesrc.setName(u"notapoller")
        yield anotherchangesrc.setServiceParent(master.change_svc)

        yield self.request.test_render(self.changeHook)
        yield util.asyncSleep(0.1)
Exemplo n.º 51
0
 def testGitWithChange_WithProjectToo(self):
     self.request = FakeRequest(content=gitJsonPayload)
     self.request.uri = "/change_hook/gitlab"
     self.request.args = {'project': ['MyProject']}
     self.request.method = "POST"
     res = yield self.request.test_render(self.changeHook)
     self.check_changes(res, project="MyProject")
Exemplo n.º 52
0
    def setUpRequest(self, args, options=True, activate=True):
        self.request = FakeRequest(args=args)
        self.request.uri = "/change_hook/poller"
        self.request.method = "GET"
        master = self.request.site.master

        self.changeHook = change_hook.ChangeHookResource(dialects={'poller': options}, master=master)
        master.change_svc = ChangeManager()
        master.change_svc.setServiceParent(master)
        self.changesrc = self.Subclass("example", 21)
        self.changesrc.setServiceParent(master.change_svc)
        if activate:
            self.changesrc.activate()

        self.otherpoller = self.Subclass("otherpoller", 22)
        self.otherpoller.setServiceParent(master.change_svc)
        if activate:
            self.otherpoller.activate()

        anotherchangesrc = base.ChangeSource(name='notapoller')
        anotherchangesrc.setName("notapoller")
        anotherchangesrc.setServiceParent(master.change_svc)

        yield self.request.test_render(self.changeHook)
        yield util.asyncSleep(0.1)
Exemplo n.º 53
0
 def testGitWithChange(self):
     self.request = FakeRequest(content=gitJsonPayload)
     self.request.uri = b"/change_hook/gitlab"
     self.request.method = b"POST"
     self.request.received_headers[_HEADER_EVENT] = b"Push Hook"
     res = yield self.request.test_render(self.changeHook)
     self.check_changes_push_event(res)
    def testGitWithChange(self):
        changeDict={"payload" : [gitJsonPayload]}
        self.request = FakeRequest(changeDict)
        self.request.uri = "/change_hook/github"
        self.request.method = "GET"
        d = self.request.test_render(self.changeHook)
        def check_changes(r):
            self.assertEquals(len(self.request.addedChanges), 2)
            change = self.request.addedChanges[0]

            self.assertEquals(change['files'], ['filepath.rb'])
            self.assertEquals(change["repository"], "http://github.com/defunkt/github")
            self.assertEquals(change["when"], 1203116237)
            self.assertEquals(change["who"], "Fred Flinstone <*****@*****.**>")
            self.assertEquals(change["revision"], '41a212ee83ca127e3c8cf465891ab7216a705f59')
            self.assertEquals(change["comments"], "okay i give in")
            self.assertEquals(change["branch"], "master")
            self.assertEquals(change["revlink"], "http://github.com/defunkt/github/commit/41a212ee83ca127e3c8cf465891ab7216a705f59")

            change = self.request.addedChanges[1]
            self.assertEquals(change['files'], [ 'modfile', 'removedFile' ])
            self.assertEquals(change["repository"], "http://github.com/defunkt/github")
            self.assertEquals(change["when"], 1203114994)
            self.assertEquals(change["who"], "Fred Flinstone <*****@*****.**>")
            self.assertEquals(change["src"], "git")
            self.assertEquals(change["revision"], 'de8251ff97ee194a289832576287d6f8ad74e3d0')
            self.assertEquals(change["comments"], "update pricing a tad")
            self.assertEquals(change["branch"], "master")
            self.assertEquals(change["revlink"], "http://github.com/defunkt/github/commit/de8251ff97ee194a289832576287d6f8ad74e3d0")

        d.addCallback(check_changes)
        return d
    def testGitWithDistinctFalse(self):
        changeDict = {
            "payload": [gitJsonPayload.replace('"distinct": true,',
                                               '"distinct": false,')]
        }
        self.request = FakeRequest(changeDict)
        self.request.uri = "/change_hook/github"
        self.request.method = "GET"
        self.request.received_headers = {
            _HEADER_CT: _CT_ENCODED,
            _HEADER_EVENT: 'push'
        }
        yield self.request.test_render(self.changeHook)
        self.assertEqual(len(self.request.addedChanges), 1)
        change = self.request.addedChanges[0]

        self.assertEqual(change['files'],
                         ['modfile', 'removedFile'])
        self.assertEqual(change["repository"],
                         "http://github.com/defunkt/github")
        self.assertEqual(timegm(change["when_timestamp"].utctimetuple()),
                         1203114994)
        self.assertEqual(change["author"],
                         "Fred Flinstone <*****@*****.**>")
        self.assertEqual(change["src"], "git")
        self.assertEqual(change["revision"],
                         'de8251ff97ee194a289832576287d6f8ad74e3d0')
        self.assertEqual(change["comments"], "update pricing a tad")
        self.assertEqual(change["branch"], "master")
        self.assertEqual(change["revlink"],
                         "http://github.com/defunkt/github/commit/"
                         "de8251ff97ee194a289832576287d6f8ad74e3d0")
Exemplo n.º 56
0
 def testGitWithChange_WithCodebaseToo(self):
     self.request = FakeRequest(content=gitJsonPayload)
     self.request.uri = "/change_hook/gitlab"
     self.request.args = {'codebase': ['MyCodebase']}
     self.request.method = "POST"
     res = yield self.request.test_render(self.changeHook)
     self.check_changes(res, codebase="MyCodebase")
    def testGitWithDistinctFalse(self):
        changeDict = {"payload": [gitJsonPayload.replace('"distinct": true,', '"distinct": false,')]}
        self.request = FakeRequest(changeDict)
        self.request.uri = "/change_hook/github"
        self.request.method = "GET"
        d = self.request.test_render(self.changeHook)

        def check_changes(r):
            self.assertEqual(len(self.request.addedChanges), 1)
            change = self.request.addedChanges[0]

            self.assertEqual(change["files"], ["modfile", "removedFile"])
            self.assertEqual(change["repository"], "http://github.com/defunkt/github")
            self.assertEqual(calendar.timegm(change["when_timestamp"].utctimetuple()), 1203114994)
            self.assertEqual(change["author"], "Fred Flinstone <*****@*****.**>")
            self.assertEqual(change["src"], "git")
            self.assertEqual(change["revision"], "de8251ff97ee194a289832576287d6f8ad74e3d0")
            self.assertEqual(change["comments"], "update pricing a tad")
            self.assertEqual(change["branch"], "master")
            self.assertEqual(
                change["revlink"], "http://github.com/defunkt/github/commit/" "de8251ff97ee194a289832576287d6f8ad74e3d0"
            )

        d.addCallback(check_changes)
        return d