Changeset View
Changeset View
Standalone View
Standalone View
swh/journal/tests/test_publisher.py
Show First 20 Lines • Show All 72 Lines • ▼ Show 20 Lines | ORIGINS = [ | ||||
'type': 'git', | 'type': 'git', | ||||
}, | }, | ||||
{ | { | ||||
'url': 'https://overtherainbow.org/fox/den', | 'url': 'https://overtherainbow.org/fox/den', | ||||
'type': 'svn', | 'type': 'svn', | ||||
} | } | ||||
] | ] | ||||
ORIGIN_VISITS = [ | |||||
{ | |||||
vlorentz: Nitpick: ISO 8601 is better | |||||
'date': '2013-05-07T04:20:39.369271+00:00', | |||||
}, | |||||
{ | |||||
'date': '2018-11-27T17:20:39.000000+00:00', | |||||
} | |||||
] | |||||
class JournalPublisherTest(SWHJournalPublisher): | class JournalPublisherTest(SWHJournalPublisher): | ||||
def parse_config_file(self): | def parse_config_file(self): | ||||
return { | return { | ||||
'brokers': ['localhost'], | 'brokers': ['localhost'], | ||||
'temporary_prefix': 'swh.tmp_journal.new', | 'temporary_prefix': 'swh.tmp_journal.new', | ||||
'final_prefix': 'swh.journal.objects', | 'final_prefix': 'swh.journal.objects', | ||||
'consumer_id': 'swh.journal.test.publisher', | 'consumer_id': 'swh.journal.test.publisher', | ||||
'publisher_id': 'swh.journal.test.publisher', | 'publisher_id': 'swh.journal.test.publisher', | ||||
'object_types': ['content'], | 'object_types': ['content'], | ||||
'max_messages': 3, | 'max_messages': 3, | ||||
} | } | ||||
def _prepare_storage(self, config): | def _prepare_storage(self, config): | ||||
self.storage = Storage() | self.storage = Storage() | ||||
self.storage.content_add({'data': b'42', **c} for c in CONTENTS) | self.storage.content_add({'data': b'42', **c} for c in CONTENTS) | ||||
self.storage.revision_add(REVISIONS) | self.storage.revision_add(REVISIONS) | ||||
self.storage.release_add(RELEASES) | self.storage.release_add(RELEASES) | ||||
self.storage.origin_add(ORIGINS) | origins = self.storage.origin_add(ORIGINS) | ||||
origin_visits = [] | |||||
for i, ov in enumerate(ORIGIN_VISITS): | |||||
origin_id = origins[i]['id'] | |||||
ov = self.storage.origin_visit_add(origin_id, ov['date']) | |||||
origin_visits.append(ov) | |||||
self.origins = origins | |||||
self.origin_visits = origin_visits | |||||
def _prepare_journal(self, config): | def _prepare_journal(self, config): | ||||
"""No journal for now | """No journal for now | ||||
""" | """ | ||||
pass | pass | ||||
class TestPublisher(unittest.TestCase): | class TestPublisher(unittest.TestCase): | ||||
def setUp(self): | def setUp(self): | ||||
self.publisher = JournalPublisherTest() | self.publisher = JournalPublisherTest() | ||||
self.contents = [{b'sha1': c['sha1']} for c in CONTENTS] | self.contents = [{b'sha1': c['sha1']} for c in CONTENTS] | ||||
self.revisions = [{b'id': c['id']} for c in REVISIONS] | self.revisions = [{b'id': c['id']} for c in REVISIONS] | ||||
self.releases = [{b'id': c['id']} for c in RELEASES] | self.releases = [{b'id': c['id']} for c in RELEASES] | ||||
self.origins = ORIGINS | # those needs id generation from the storage | ||||
# so initialization is different than other entities | |||||
self.origins = [{'url': o['url'], | |||||
'type': o['type']} | |||||
for o in self.publisher.origins] | |||||
self.origin_visits = [{'origin': ov['origin'], | |||||
'visit': ov['visit']} | |||||
for ov in self.publisher.origin_visits] | |||||
# full objects | |||||
storage = self.publisher.storage | |||||
ovs = [] | |||||
for ov in self.origin_visits: | |||||
ovs.append(storage.origin_visit_get_by(**ov)) | |||||
self.expected_origin_visits = ovs | |||||
def test_process_contents(self): | def test_process_contents(self): | ||||
actual_contents = self.publisher.process_contents(self.contents) | actual_contents = self.publisher.process_contents(self.contents) | ||||
expected_contents = [(c['sha1'], c) for c in CONTENTS] | expected_contents = [(c['sha1'], c) for c in CONTENTS] | ||||
self.assertEqual(actual_contents, expected_contents) | self.assertEqual(actual_contents, expected_contents) | ||||
def test_process_revisions(self): | def test_process_revisions(self): | ||||
actual_revisions = self.publisher.process_revisions(self.revisions) | actual_revisions = self.publisher.process_revisions(self.revisions) | ||||
expected_revisions = [(c['id'], c) for c in REVISIONS] | expected_revisions = [(c['id'], c) for c in REVISIONS] | ||||
self.assertEqual(actual_revisions, expected_revisions) | self.assertEqual(actual_revisions, expected_revisions) | ||||
def test_process_releases(self): | def test_process_releases(self): | ||||
actual_releases = self.publisher.process_releases(self.releases) | actual_releases = self.publisher.process_releases(self.releases) | ||||
expected_releases = [(c['id'], c) for c in RELEASES] | expected_releases = [(c['id'], c) for c in RELEASES] | ||||
self.assertEqual(actual_releases, expected_releases) | self.assertEqual(actual_releases, expected_releases) | ||||
def test_process_origins(self): | def test_process_origins(self): | ||||
actual_releases = self.publisher.process_origins(self.origins) | actual_origins = self.publisher.process_origins(self.origins) | ||||
expected_releases = self.origins | expected_origins = self.origins | ||||
self.assertEqual(actual_releases, expected_releases) | self.assertEqual(actual_origins, expected_origins) | ||||
def test_process_origin_visits(self): | |||||
actual_ovs = self.publisher.process_origin_visits(self.origin_visits) | |||||
expected_ovs = [((ov['origin'], ov['visit']), ov) | |||||
for ov in self.expected_origin_visits] | |||||
self.assertEqual(actual_ovs, expected_ovs) | |||||
def test_process_objects(self): | def test_process_objects(self): | ||||
messages = { | messages = { | ||||
'content': self.contents, | 'content': self.contents, | ||||
'revision': self.revisions, | 'revision': self.revisions, | ||||
'release': self.releases, | 'release': self.releases, | ||||
'origin': self.origins, | 'origin': self.origins, | ||||
'origin_visit': self.origin_visits, | |||||
} | } | ||||
actual_objects = self.publisher.process_objects(messages) | actual_objects = self.publisher.process_objects(messages) | ||||
expected_contents = [(c['sha1'], c) for c in CONTENTS] | expected_contents = [(c['sha1'], c) for c in CONTENTS] | ||||
expected_revisions = [(c['id'], c) for c in REVISIONS] | expected_revisions = [(c['id'], c) for c in REVISIONS] | ||||
expected_releases = [(c['id'], c) for c in RELEASES] | expected_releases = [(c['id'], c) for c in RELEASES] | ||||
expected_origins = ORIGINS | expected_origins = ORIGINS | ||||
expected_ovs = [((ov['origin'], ov['visit']), ov) | |||||
for ov in self.expected_origin_visits] | |||||
expected_objects = { | expected_objects = { | ||||
'content': expected_contents, | 'content': expected_contents, | ||||
'revision': expected_revisions, | 'revision': expected_revisions, | ||||
'release': expected_releases, | 'release': expected_releases, | ||||
'origin': expected_origins, | 'origin': expected_origins, | ||||
'origin_visit': expected_ovs, | |||||
} | } | ||||
self.assertEqual(actual_objects, expected_objects) | self.assertEqual(actual_objects, expected_objects) |
Nitpick: ISO 8601 is better