コード例 #1
0
ファイル: test_api.py プロジェクト: lnielsen/invenio-webhooks
    def test_webhook_post(self):
        r = Receiver(self.callable)
        Receiver.register('test-receiver-no-scope', r)

        payload = dict(somekey='somevalue')
        self.post(
            'receivereventlistresource',
            urlargs=dict(receiver_id='test-receiver-no-scope'),
            data=payload,
            code=403,
            user_id=self.user.id,
        )
コード例 #2
0
ファイル: test_api.py プロジェクト: lnielsen/invenio-webhooks
    def test_webhook_post(self):
        self.post(
            'receivereventlistresource',
            urlargs=dict(receiver_id='test-receiver'),
            code=404,
            user_id=self.user.id,
        )

        r = Receiver(self.callable)
        r_invalid = Receiver(self.callable_wrong_signature)

        Receiver.register('test-receiver', r)
        Receiver.register('test-broken-receiver', r_invalid)

        payload = dict(somekey='somevalue')
        self.post(
            'receivereventlistresource',
            urlargs=dict(receiver_id='test-receiver'),
            data=payload,
            code=202,
            user_id=self.user.id,
        )

        assert self.called == 1
        assert self.user_id == self.user.id
        assert self.payload == payload

        # Test invalid payload
        import pickle
        payload = dict(somekey='somevalue')
        self.post(
            'receivereventlistresource',
            urlargs=dict(receiver_id='test-receiver'),
            data=pickle.dumps(payload),
            is_json=False,
            headers=[('Content-Type', 'application/python-pickle')],
            code=415,
            user_id=self.user.id,
        )

        # Test invalid payload, with wrong content-type
        import pickle
        self.post(
            'receivereventlistresource',
            urlargs=dict(receiver_id='test-receiver'),
            data=pickle.dumps(payload),
            is_json=False,
            headers=[('Content-Type', 'application/json')],
            code=400,
            user_id=self.user.id,
        )
コード例 #3
0
    def test_signature_checking(self):
        """
        webhooks - checks signatures for payload
        """
        r = Receiver(self.callable, signature='X-Hub-Signature')
        Receiver.register('test-receiver-sign', r)

        # check correct signature
        payload = json.dumps(dict(somekey='somevalue'))
        headers = [('Content-Type', 'application/json'),
                   ('X-Hub-Signature', get_hmac(payload))]
        with self.app.test_request_context(headers=headers, data=payload):
            r.consume_event(2)
            assert self.payload == json.loads(payload)

        # check signature with prefix
        headers = [('Content-Type', 'application/json'),
                   ('X-Hub-Signature', 'sha1=' + get_hmac(payload))]
        with self.app.test_request_context(headers=headers, data=payload):
            r.consume_event(2)
            assert self.payload == json.loads(payload)

        # check incorrect signature
        headers = [('Content-Type', 'application/json'),
                   ('X-Hub-Signature', get_hmac("somevalue"))]
        with self.app.test_request_context(headers=headers, data=payload):
            self.assertRaises(InvalidSignature, r.consume_event, 2)
コード例 #4
0
    def test_hookurl(self):
        r = Receiver(self.callable)
        Receiver.register('test-receiver', r)

        self.assertEqual(
            Receiver.get_hook_url('test-receiver', 'token'),
            url_for(
                'receivereventlistresource',
                receiver_id='test-receiver',
                access_token='token',
                _external=True
            )
        )

        self.app.config['WEBHOOKS_DEBUG_RECEIVER_URLS'] = {
            'test-receiver': 'http://test.local/?access_token=%(token)s'
        }

        self.assertEqual(
            Receiver.get_hook_url('test-receiver', 'token'),
            'http://test.local/?access_token=token'
        )
コード例 #5
0
ファイル: github.py プロジェクト: jirikuncar/invenio-github
def register_webhook():
    """Setup webhook endpoint for github notifications."""
    Receiver.register(
        current_app.config.get('GITHUB_WEBHOOK_RECEIVER_ID'),
        CeleryReceiver(handle_github_payload)
    )
コード例 #6
0
    def test_receiver_registration(self):
        r = Receiver(self.callable)
        r_invalid = Receiver(self.callable_wrong_signature)

        Receiver.register('test-receiver', r)
        Receiver.register('test-invalid', r_invalid)

        assert 'test-receiver' in Receiver.all()
        assert Receiver.get('test-receiver') == r

        # Double registration
        self.assertRaises(RegistryError, Receiver.register, 'test-receiver', r)

        Receiver.unregister('test-receiver')
        assert 'test-receiver' not in Receiver.all()

        Receiver.register('test-receiver', r)

        # JSON payload parsing
        payload = json.dumps(dict(somekey='somevalue'))
        headers = [('Content-Type', 'application/json')]
        with self.app.test_request_context(headers=headers, data=payload):
            r.consume_event(2)
            assert self.called == 1
            assert self.payload == json.loads(payload)
            assert self.user_id == 2

            self.assertRaises(TypeError, r_invalid.consume_event, 2)
            assert self.called == 1

        # Form encoded values payload parsing
        payload = dict(somekey='somevalue')
        with self.app.test_request_context(method='POST', data=payload):
            r.consume_event(2)
            assert self.called == 2
            assert self.payload == dict(somekey=['somevalue'])

        # Test invalid post data
        with self.app.test_request_context(method='POST', data="invaliddata"):
            self.assertRaises(InvalidPayload, r.consume_event, 2)

        # Test Celery Receiver
        rcelery = CeleryReceiver(self.task_callable)
        CeleryReceiver.register('celery-receiver', rcelery)

        # Form encoded values payload parsing
        payload = dict(somekey='somevalue')
        with self.app.test_request_context(method='POST', data=payload):
            rcelery.consume_event(1)

        assert self.called == 3
        assert self.payload == dict(somekey=['somevalue'])
        assert self.user_id == 1
コード例 #7
0
def test_run_must_be_implemeted():
    """Test that run raises NotImplementedError if not overriden."""
    with pytest.raises(NotImplementedError):
        Receiver('not-implemented').run(None)