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)
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
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)
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)
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')
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
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')
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")
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)
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)
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' )
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 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)
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)
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)
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)
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
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)
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")
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 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()
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)
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)
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")
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')
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)
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")
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
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
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")
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")
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)
def setUp(self): self.request_data = { 'builder': ['TestBuilder'], 'size': 'normal', } self.request = FakeRequest(self.request_data) self.request.uri = '/png' self.request.method = 'GET'
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)
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')
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")
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
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")
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')
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)
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)
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")
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