def test_bb_v2_push(self, *mocks): payload = self._handle_first_push(get_obj('payload_bb_v2_push'), *mocks) launch_build, launch_notify, bbAPIcall = mocks[:3] payload = get_payload(get_obj('payload_bb_v2_push_2commits')) payload.handle() launch_notify.assert_called_once() launch_build.assert_not_called() # Prepare api response and push tag api_mock = bbAPIcall.return_value api_mock.branches_tags.return_value = { 'branches': [{ 'name': 'master', 'changeset': 'fd0af720f9465c98ed795b544b82334b0b5cc9b4' }], 'tags': [{ 'name': '0.0.1', 'changeset': 'fd0af720f9465c98ed795b544b82334b0b5cc9b4' }] } payload = get_payload(get_obj('payload_bb_v2_push_tag')) payload.handle() api_mock.branches_tags.assert_called_once() launch_build.assert_called_once()
def test_bb_v2_push(self, *mocks): payload = self._handle_first_push( get_obj('payload_bb_v2_push'), *mocks ) launch_build, launch_notify, bbAPIcall = mocks[:3] payload = get_payload(get_obj('payload_bb_v2_push_2commits')) payload.handle() launch_notify.assert_called_once() launch_build.assert_not_called() # Prepare api response and push tag api_mock = bbAPIcall.return_value api_mock.branches_tags.return_value = { 'branches': [ { 'name': 'master', 'changeset': 'fd0af720f9465c98ed795b544b82334b0b5cc9b4' } ], 'tags': [ { 'name': '0.0.1', 'changeset': 'fd0af720f9465c98ed795b544b82334b0b5cc9b4' } ] } payload = get_payload(get_obj('payload_bb_v2_push_tag')) payload.handle() api_mock.branches_tags.assert_called_once() launch_build.assert_called_once()
def handle_wi(self, wid): """ Workitem handling function """ wid.result = False if wid.fields.payload is None: raise RuntimeError("Missing mandatory field: payload") md5 = hashlib.md5(json.dumps(wid.fields.payload.as_dict(), sort_keys=True)).hexdigest() now = time.time() # purge seen hashes for seen_md5, seen_time in self.seen.items(): if now - seen_time > 30: del self.seen[seen_md5] if md5 in self.seen: print("Ignoring duplicate webhook (possible resend or " "github hook set at both repo and orginisation level)") print("Last seen %ss ago" % (now - self.seen[md5])) wid.result = True return self.seen[md5] = now print("Handling a webhook payload") payload = get_payload(wid.fields.payload.as_dict()) payload.handle() print("Webhook handled") wid.result = True
def handle_wi(self, wid): """ Workitem handling function """ wid.result = False if wid.fields.payload is None: raise RuntimeError("Missing mandatory field: payload") md5 = hashlib.md5(json.dumps(wid.fields.payload.as_dict(), sort_keys=True)).hexdigest() now = time.time() # purge seen hashes for seen_md5, seen_time in self.seen.items(): if now - seen_time > 30: del self.seen[seen_md5] if md5 in self.seen: print("Ignoring duplicate webhook (possible resend or " "github hook set at both repo and orginisation level)") print("Last seen %ss ago" % now - seen_time) wid.result = True return self.seen[md5] = now print("Handling a webhook payload") payload = get_payload(wid.fields.payload.as_dict()) payload.handle() print("Webhook handled") wid.result = True
def handle_wi(self, wid): """ Workitem handling function """ wid.result = False if wid.fields.payload is None: raise RuntimeError("Missing mandatory field: payload") payload = get_payload(wid.fields.payload.as_dict()) payload.relay() wid.result = True
def trigger_relay(self, request, relaytargets): payloads = [] for rt in relaytargets: urls = set([str(src) for src in rt.sources]) mapobjs = WebHookMapping.objects.filter( reduce(operator.or_, (models.Q(repourl__contains=u) for u in urls))) for mapobj in mapobjs: lsr = mapobj.lsr if lsr and lsr.payload: payloads.append(get_payload(lsr.payload)) for pld in payloads: pld.relay(relays=relaytargets)
def test_bb_v2_push(self, *mocks): payload = self._handle_first_push(get_obj('payload_bb_v2_push'), *mocks) launch_build, launch_notify, bbAPIcall = mocks[:3] payload = get_payload(get_obj('payload_bb_v2_push_2commits')) payload.handle() launch_notify.assert_called_once() launch_build.assert_not_called() # Prepare api response and push tag api_mock = bbAPIcall.return_value api_mock.branches.return_value = [ # Actual response has more stuf but only these are currently used { "name": "master", "target": { "hash": "fd0af720f9465c98ed795b544b82334b0b5cc9b4" }, }, ] payload = get_payload(get_obj('payload_bb_v2_push_tag')) payload.handle() api_mock.branches.assert_called_once() launch_build.assert_called_once()
def trigger_relay(self, request, relaytargets): payloads = [] for rt in relaytargets: urls = set([str(src) for src in rt.sources]) mapobjs = WebHookMapping.objects.filter( reduce( operator.or_, (models.Q(repourl__contains=u) for u in urls) ) ) for mapobj in mapobjs: lsr = mapobj.lsr if lsr and lsr.payload: payloads.append(get_payload(lsr.payload)) for pld in payloads: pld.relay(relays=relaytargets)
def _handle_first_push(self, data, launch_build, launch_notify, bbAPIcall, requests): # First push creates the placeholder mapping payload = get_payload(data) payload.handle() self.assertEqual(WebHookMapping.objects.count(), 1) self.assertEqual(LastSeenRevision.objects.count(), 1) whm = WebHookMapping.objects.first() launch_notify.assert_not_called() launch_build.assert_not_called() # Enable mapping whm.build = True whm.notify = True whm.project = 'test' whm.package = 'test' whm.save() return payload
def _handle_first_push( self, data, launch_build, launch_notify, bbAPIcall, requests ): # First push creates the placeholder mapping payload = get_payload(data) payload.handle() self.assertEqual( WebHookMapping.objects.count(), 1 ) self.assertEqual( LastSeenRevision.objects.count(), 1 ) whm = WebHookMapping.objects.first() launch_notify.assert_not_called() launch_build.assert_not_called() # Enable mapping whm.build = True whm.notify = True whm.project = 'test' whm.package = 'test' whm.save() return payload
def test_gh_push(self): p = get_payload(get_obj('payload_gh_push')) self.assertIsInstance(p, GhPush)
def test_bb_v2_push(self): p = get_payload(get_obj('payload_bb_v2_push')) self.assertIsInstance(p, BbPushV2)