Changeset View
Changeset View
Standalone View
Standalone View
swh/scheduler/tests/updater/test_ghtorrent.py
# Copyright (C) 2018 The Software Heritage developers | # Copyright (C) 2018 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
import unittest | import unittest | ||||
from unittest.mock import patch | |||||
from hypothesis import given | from hypothesis import given | ||||
from hypothesis.strategies import sampled_from | from hypothesis.strategies import sampled_from | ||||
from nose.tools import istest | |||||
from unittest.mock import patch | |||||
from swh.scheduler.updater.events import SWHEvent | from swh.scheduler.updater.events import SWHEvent | ||||
from swh.scheduler.updater.ghtorrent import ( | from swh.scheduler.updater.ghtorrent import (INTERESTING_EVENT_KEYS, | ||||
events, GHTorrentConsumer, INTERESTING_EVENT_KEYS) | GHTorrentConsumer, events) | ||||
from . import from_regex, UpdaterTestUtil | from . import UpdaterTestUtil, from_regex | ||||
def event_values(): | def event_values(): | ||||
return set(events['evt']).union(set(events['ent'])) | return set(events['evt']).union(set(events['ent'])) | ||||
def ghtorrentize_event_name(event_name): | def ghtorrentize_event_name(event_name): | ||||
return '%sEvent' % event_name.capitalize() | return '%sEvent' % event_name.capitalize() | ||||
▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | def setUp(self): | ||||
'debug': True, | 'debug': True, | ||||
'batch_cache_write': 10, | 'batch_cache_write': 10, | ||||
'rabbitmq_prefetch_read': 100, | 'rabbitmq_prefetch_read': 100, | ||||
} | } | ||||
self.consumer = GHTorrentConsumer(self.fake_config, | self.consumer = GHTorrentConsumer(self.fake_config, | ||||
_connection_class=FakeConnection) | _connection_class=FakeConnection) | ||||
@istest | |||||
def test_init(self): | def test_init(self): | ||||
# given | # given | ||||
# check init is ok | # check init is ok | ||||
self.assertEqual(self.consumer.debug, | self.assertEqual(self.consumer.debug, | ||||
self.fake_config['debug']) | self.fake_config['debug']) | ||||
self.assertEqual(self.consumer.batch, | self.assertEqual(self.consumer.batch, | ||||
self.fake_config['batch_cache_write']) | self.fake_config['batch_cache_write']) | ||||
self.assertEqual(self.consumer.prefetch_read, | self.assertEqual(self.consumer.prefetch_read, | ||||
self.fake_config['rabbitmq_prefetch_read']) | self.fake_config['rabbitmq_prefetch_read']) | ||||
self.assertEqual(self.consumer.config, self.fake_config) | self.assertEqual(self.consumer.config, self.fake_config) | ||||
@istest | |||||
def test_has_events(self): | def test_has_events(self): | ||||
self.assertTrue(self.consumer.has_events()) | self.assertTrue(self.consumer.has_events()) | ||||
@istest | |||||
def test_connection(self): | def test_connection(self): | ||||
# when | # when | ||||
self.consumer.open_connection() | self.consumer.open_connection() | ||||
# then | # then | ||||
self.assertEqual(self.consumer.conn._conn_string, | self.assertEqual(self.consumer.conn._conn_string, | ||||
self.fake_config['conn']['url']) | self.fake_config['conn']['url']) | ||||
self.assertTrue(self.consumer.conn._connect) | self.assertTrue(self.consumer.conn._connect) | ||||
self.assertFalse(self.consumer.conn._release) | self.assertFalse(self.consumer.conn._release) | ||||
# when | # when | ||||
self.consumer.close_connection() | self.consumer.close_connection() | ||||
# then | # then | ||||
self.assertFalse(self.consumer.conn._connect) | self.assertFalse(self.consumer.conn._connect) | ||||
self.assertTrue(self.consumer.conn._release) | self.assertTrue(self.consumer.conn._release) | ||||
self.assertIsInstance(self.consumer.channel, FakeChannel) | self.assertIsInstance(self.consumer.channel, FakeChannel) | ||||
@istest | |||||
@given(sampled_from(EVENT_TYPES), | @given(sampled_from(EVENT_TYPES), | ||||
from_regex(r'^[a-z0-9]{5,7}/[a-z0-9]{3,10}$')) | from_regex(r'^[a-z0-9]{5,7}/[a-z0-9]{3,10}$')) | ||||
def convert_event_ok(self, event_type, name): | def test_convert_event_ok(self, event_type, name): | ||||
input_event = self._make_event(event_type, name, 'git') | input_event = self._make_event(event_type, name, 'git') | ||||
actual_event = self.consumer.convert_event(input_event) | actual_event = self.consumer.convert_event(input_event) | ||||
self.assertTrue(isinstance(actual_event, SWHEvent)) | self.assertTrue(isinstance(actual_event, SWHEvent)) | ||||
event = actual_event.get() | event = actual_event.get() | ||||
expected_event = { | expected_event = { | ||||
'type': event_type.lower().rstrip('Event'), | 'type': event_type.lower().rstrip('Event'), | ||||
'url': 'https://github.com/%s' % name, | 'url': 'https://github.com/%s' % name, | ||||
'last_seen': input_event['created_at'], | 'last_seen': input_event['created_at'], | ||||
'cnt': 1, | 'cnt': 1, | ||||
'origin_type': 'git', | 'origin_type': 'git', | ||||
} | } | ||||
self.assertEqual(event, expected_event) | self.assertEqual(event, expected_event) | ||||
@istest | |||||
@given(sampled_from(EVENT_TYPES), | @given(sampled_from(EVENT_TYPES), | ||||
from_regex(r'^[a-z0-9]{5,7}/[a-z0-9]{3,10}$'), | from_regex(r'^[a-z0-9]{5,7}/[a-z0-9]{3,10}$'), | ||||
sampled_from(INTERESTING_EVENT_KEYS)) | sampled_from(INTERESTING_EVENT_KEYS)) | ||||
def convert_event_ko(self, event_type, name, missing_data_key): | def test_convert_event_ko(self, event_type, name, missing_data_key): | ||||
input_event = self._make_incomplete_event( | input_event = self._make_incomplete_event( | ||||
event_type, name, 'git', missing_data_key) | event_type, name, 'git', missing_data_key) | ||||
actual_converted_event = self.consumer.convert_event(input_event) | actual_converted_event = self.consumer.convert_event(input_event) | ||||
self.assertIsNone(actual_converted_event) | self.assertIsNone(actual_converted_event) | ||||
@patch('swh.scheduler.updater.ghtorrent.collect_replies') | @patch('swh.scheduler.updater.ghtorrent.collect_replies') | ||||
@istest | def test_consume_events(self, mock_collect_replies): | ||||
def consume_events(self, mock_collect_replies): | |||||
# given | # given | ||||
self.consumer.queue = 'fake-queue' # hack | self.consumer.queue = 'fake-queue' # hack | ||||
self.consumer.open_connection() | self.consumer.open_connection() | ||||
fake_events = [ | fake_events = [ | ||||
self._make_event('PushEvent', 'user/some-repo', 'git'), | self._make_event('PushEvent', 'user/some-repo', 'git'), | ||||
self._make_event('PushEvent', 'user2/some-other-repo', 'git'), | self._make_event('PushEvent', 'user2/some-other-repo', 'git'), | ||||
] | ] | ||||
Show All 18 Lines |