diff --git a/swh/scheduler/tests/updater/__init__.py b/swh/scheduler/tests/updater/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/swh/scheduler/tests/test_scheduler_updater.py b/swh/scheduler/tests/updater/test_backend.py similarity index 93% rename from swh/scheduler/tests/test_scheduler_updater.py rename to swh/scheduler/tests/updater/test_backend.py index 228a7ee..8430687 100644 --- a/swh/scheduler/tests/test_scheduler_updater.py +++ b/swh/scheduler/tests/updater/test_backend.py @@ -1,67 +1,67 @@ # Copyright (C) 2018 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information import os import unittest from arrow import utcnow from nose.plugins.attrib import attr from nose.tools import istest from hypothesis import given from hypothesis.strategies import sets, from_regex from swh.core.tests.db_testing import SingleDbTestFixture from swh.scheduler.updater.backend import SchedulerUpdaterBackend from swh.scheduler.updater.events import SWHEvent TEST_DIR = os.path.dirname(os.path.abspath(__file__)) -TEST_DATA_DIR = os.path.join(TEST_DIR, '../../../../swh-storage-testdata') +TEST_DATA_DIR = os.path.join(TEST_DIR, '../../../../../swh-storage-testdata') @attr('db') -class SchedulerUpdaterTest(SingleDbTestFixture, unittest.TestCase): +class SchedulerUpdaterBackendTest(SingleDbTestFixture, unittest.TestCase): TEST_DB_NAME = 'softwareheritage-scheduler-updater-test' TEST_DB_DUMP = os.path.join(TEST_DATA_DIR, 'dumps/swh-scheduler-updater.dump') def setUp(self): super().setUp() config = { 'scheduling_updater_db': 'dbname=' + self.TEST_DB_NAME, 'time_window': '1 minute', } self.backend = SchedulerUpdaterBackend(**config) def _empty_tables(self): self.cursor.execute( """SELECT table_name FROM information_schema.tables WHERE table_schema = %s""", ('public', )) tables = set(table for (table,) in self.cursor.fetchall()) for table in tables: self.cursor.execute('truncate table %s cascade' % table) self.conn.commit() def tearDown(self): self.backend.close_connection() self._empty_tables() super().tearDown() @istest @given(sets( from_regex( r'^https://somewhere[.]org/[a-z0-9]{5,7}/[a-z0-9]{3,10}$'), min_size=10, max_size=15)) def cache_read(self, urls): def gen_events(urls): for url in urls: yield SWHEvent({ 'url': url, 'type': 'create' }) self.backend.cache_put(gen_events(urls)) r = self.backend.cache_read(timestamp=utcnow()) self.assertNotEqual(r, []) diff --git a/swh/scheduler/tests/test_events.py b/swh/scheduler/tests/updater/test_events.py similarity index 70% rename from swh/scheduler/tests/test_events.py rename to swh/scheduler/tests/updater/test_events.py index cb77461..3d497a9 100644 --- a/swh/scheduler/tests/test_events.py +++ b/swh/scheduler/tests/updater/test_events.py @@ -1,56 +1,50 @@ # Copyright (C) 2018 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information import unittest from arrow import utcnow from hypothesis import given from hypothesis.strategies import one_of, text, just, sampled_from from nose.tools import istest from swh.scheduler.updater.events import SWHEvent, LISTENED_EVENTS +from swh.scheduler.updater.ghtorrent import events def event_values_ko(): - return { - 'repos', 'org_members', 'teamadd', 'geo_cache', - 'follow', 'issue_comments', 'followers', 'forks', 'pagebuild', - 'pullrequest', 'pull_requests', 'commit_comments', 'watch', 'fork', - 'forkapply', 'commits', 'release', 'gollum', 'membership', 'watchers', - 'pullrequestreviewcomment', 'deployment', 'issuecomment', 'status', - 'repo_labels', 'issue_events', 'commitcomment', 'issues', 'member', - 'users', 'download', 'repo_collaborators', 'repository', - 'deploymentstatus', 'pull_request_comments', 'gist' - } + return set(events['evt']).union( + set(events['ent'])).difference( + set(LISTENED_EVENTS)) class EventTest(unittest.TestCase): def _make_event(self, event_name): return { 'type': event_name, 'url': 'something', 'last_seen': utcnow(), } @istest @given(sampled_from(LISTENED_EVENTS)) def check_ok(self, event_name): evt = self._make_event(event_name) self.assertTrue(SWHEvent(evt).check()) @istest @given(text()) def check_with_noisy_event_should_be_ko(self, event_name): if event_name in LISTENED_EVENTS: # just in generation generates a real and correct name, skip it return evt = self._make_event(event_name) self.assertFalse(SWHEvent(evt).check()) @istest @given(one_of(map(just, event_values_ko()))) def check_ko(self, event_name): evt = self._make_event(event_name) self.assertFalse(SWHEvent(evt).check())