def test_set_archived_after_to_utc(self):
        """Check whether dates are converted to UTC"""

        dt = datetime.datetime(2001,
                               12,
                               1,
                               23,
                               15,
                               32,
                               tzinfo=dateutil.tz.tzoffset(None, -21600))
        expected = datetime.datetime(2001,
                                     12,
                                     2,
                                     5,
                                     15,
                                     32,
                                     tzinfo=dateutil.tz.tzutc())

        archiving_cfg = ArchivingTaskConfig('/tmp/archive',
                                            True,
                                            archived_after=dt)
        # Date should have been converted to UTC
        self.assertEqual(archiving_cfg.archived_after, expected)

        archiving_cfg.archived_after = datetime.datetime(
            2001, 12, 2, 5, 15, 32)
        self.assertEqual(archiving_cfg.archived_after, expected)
    def test_set_fetch_from_archive(self):
        """Test if fetch_from_archive property can be set"""

        archiving_cfg = ArchivingTaskConfig('/tmp/archive', True)
        self.assertEqual(archiving_cfg.fetch_from_archive, True)

        archiving_cfg.fetch_from_archive = False
        self.assertEqual(archiving_cfg.fetch_from_archive, False)
    def test_set_archive_path(self):
        """Test if archive_path property can be set"""

        archiving_cfg = ArchivingTaskConfig('/tmp/archive', False)
        self.assertEqual(archiving_cfg.archive_path, '/tmp/archive')

        archiving_cfg.archive_path = '/tmp/oldarchive'
        self.assertEqual(archiving_cfg.archive_path, '/tmp/oldarchive')
Exemplo n.º 4
0
    def test_add_task(self):
        """Test to add tasks to the registry"""

        args = {'from_date': '1970-01-01', 'component': 'test'}
        archive = ArchivingTaskConfig('/tmp/archive',
                                      False,
                                      archived_after=None)
        sched = SchedulingTaskConfig(delay=10, max_retries=2)

        registry = TaskRegistry()
        before = datetime.datetime.now().timestamp()
        new_task = registry.add('mytask', 'git', 'commit', args)

        tasks = registry.tasks
        self.assertEqual(len(tasks), 1)

        task = tasks[0]
        self.assertIsInstance(task, Task)
        self.assertEqual(task, new_task)
        self.assertEqual(task.task_id, 'mytask')
        self.assertEqual(task.status, TaskStatus.NEW)
        self.assertEqual(task.age, 0)
        self.assertListEqual(task.jobs, [])
        self.assertEqual(task.category, 'commit')
        self.assertEqual(task.backend, 'git')
        self.assertDictEqual(task.backend_args, args)
        self.assertEqual(task.archiving_cfg, None)
        self.assertEqual(task.scheduling_cfg, None)
        self.assertGreater(task.created_on, before)

        before = datetime.datetime.now().timestamp()
        _ = registry.add('atask',
                         'git',
                         'commit',
                         args,
                         archiving_cfg=archive,
                         scheduling_cfg=sched)

        tasks = registry.tasks
        self.assertEqual(len(tasks), 2)

        task0 = tasks[0]
        self.assertIsInstance(task0, Task)
        self.assertEqual(task0.task_id, 'atask')
        self.assertEqual(task0.status, TaskStatus.NEW)
        self.assertEqual(task.age, 0)
        self.assertListEqual(task.jobs, [])
        self.assertEqual(task0.backend, 'git')
        self.assertEqual(task0.category, 'commit')
        self.assertDictEqual(task0.backend_args, args)
        self.assertEqual(task0.archiving_cfg, archive)
        self.assertEqual(task0.scheduling_cfg, sched)
        self.assertGreater(task0.created_on, before)

        task1 = tasks[1]
        self.assertEqual(task1.task_id, 'mytask')
        self.assertGreater(task0.created_on, task1.created_on)
Exemplo n.º 5
0
    def test_set_archived_after(self):
        """Test if archived_after property can be set"""

        archiving_cfg = ArchivingTaskConfig('/tmp/archive', True)
        self.assertEqual(archiving_cfg.archived_after, None)

        dt = datetime.datetime(2001, 12, 1, 23, 15, 32,
                               tzinfo=dateutil.tz.tzutc())

        archiving_cfg = ArchivingTaskConfig('/tmp/archive', True,
                                            archived_after=dt)
        self.assertEqual(archiving_cfg.archived_after, dt)

        dt = datetime.datetime(2018, 1, 1,
                               tzinfo=dateutil.tz.tzutc())

        archiving_cfg.archived_after = dt
        self.assertEqual(archiving_cfg.archived_after, dt)
Exemplo n.º 6
0
    def test_set_archived_after_from_date_string(self):
        """Test if archived_after property can be set from a date string"""

        date_str = '2001-12-01 23:15:32 -0600'

        expected = datetime.datetime(2001, 12, 2, 5, 15, 32,
                                     tzinfo=dateutil.tz.tzutc())

        archiving_cfg = ArchivingTaskConfig('/tmp/archive', True,
                                            archived_after=date_str)
        self.assertEqual(archiving_cfg.archived_after, expected)
Exemplo n.º 7
0
    def test_init(self):
        """Test whether object properties are initialized"""

        dt = datetime.datetime(2001, 12, 1, 23, 15, 32,
                               tzinfo=dateutil.tz.tzutc())

        archiving_cfg = ArchivingTaskConfig('/tmp/archive', True,
                                            archived_after=dt)
        self.assertEqual(archiving_cfg.archive_path, '/tmp/archive')
        self.assertEqual(archiving_cfg.fetch_from_archive, True)
        self.assertEqual(archiving_cfg.archived_after, dt)
Exemplo n.º 8
0
    def test_to_dict(self):
        """Check whether the object is converted into a dict"""

        args = {'from_date': '1970-01-01', 'component': 'test'}
        category = 'commit'
        archive = ArchivingTaskConfig('/tmp/archive',
                                      False,
                                      archived_after=None)
        sched = SchedulingTaskConfig(delay=10,
                                     max_retries=2,
                                     max_age=5,
                                     queue='myqueue')
        before = datetime.datetime.now().timestamp()

        task = Task('mytask',
                    'git',
                    category,
                    args,
                    archiving_cfg=archive,
                    scheduling_cfg=sched)
        task.set_job('job-0', 0)
        task.set_job('job-1', 1)

        d = task.to_dict()

        expected_job_0 = {'job_id': 'job-0', 'job_number': 0}
        expected_job_1 = {'job_id': 'job-1', 'job_number': 1}
        expected = {
            'task_id': 'mytask',
            'status': 'NEW',
            'age': 0,
            'num_failures': 0,
            'jobs': [expected_job_0, expected_job_1],
            'backend': 'git',
            'backend_args': args,
            'category': category,
            'archiving_cfg': {
                'archive_path': '/tmp/archive',
                'archived_after': None,
                'fetch_from_archive': False
            },
            'scheduling_cfg': {
                'delay': 10,
                'max_retries': 2,
                'max_age': 5,
                'queue': 'myqueue'
            }
        }

        created_on = d.pop('created_on')
        self.assertGreater(created_on, before)
        self.assertDictEqual(d, expected)
Exemplo n.º 9
0
    def test_backend_not_found(self):
        """Test if it raises an exception when a backend is not found"""

        archive = ArchivingTaskConfig('/tmp/archive',
                                      False,
                                      archived_after=None)
        sched = SchedulingTaskConfig(delay=10, max_retries=2, max_age=5)

        with self.assertRaises(NotFoundError) as e:
            _ = Task('mytask',
                     'mock_backend',
                     'mock_item', {},
                     archiving_cfg=archive,
                     scheduling_cfg=sched)
            self.assertEqual(e.exception.element, 'mock_backend')
    def test_task_not_rescheduled_archive_task(self):
        """Check if archive tasks are not rescheduled"""

        handler = CompletedJobHandler(self.task_scheduler)

        archiving_cfg = ArchivingTaskConfig('/tmp/archive', True)
        task = self.registry.add('mytask', 'git', 'commit', {},
                                 archiving_cfg=archiving_cfg)
        result = JobResult(0, 'mytask', 'git', 'commit',
                           'FFFFFFFF', 1392185439.0, 9)
        event = JobEvent(JobEventType.COMPLETED, 0, 'mytask', result)

        handled = handler(event)
        self.assertEqual(handled, True)
        self.assertEqual(task.status, TaskStatus.COMPLETED)
Exemplo n.º 11
0
    def test_set_invalid_archived_after(self):
        """Check if an exception is raised for invalid archived_after values"""

        with self.assertRaisesRegex(ValueError, INVALID_ARCHIVED_AFTER_ERROR):
            archiving_cfg = ArchivingTaskConfig('/tmp/archive', False,
                                                archived_after=1.0)
        with self.assertRaisesRegex(ValueError, INVALID_ARCHIVED_AFTER_INVALID_DATE_ERROR):
            archiving_cfg = ArchivingTaskConfig('/tmp/archive', False,
                                                archived_after='this date')

        archiving_cfg = ArchivingTaskConfig('/tmp/archive', True)

        with self.assertRaisesRegex(ValueError, INVALID_ARCHIVED_AFTER_ERROR):
            archiving_cfg.archived_after = 1.0

        with self.assertRaisesRegex(ValueError, INVALID_ARCHIVED_AFTER_INVALID_DATE_ERROR):
            archiving_cfg.archived_after = ''

        self.assertEqual(archiving_cfg.archived_after, None)
Exemplo n.º 12
0
    def test_init(self, mock_utcnow):
        """Check arguments initialization"""

        mock_utcnow.return_value = datetime.datetime(
            2017, 1, 1, tzinfo=dateutil.tz.tzutc())

        args = {'from_date': '1970-01-01', 'component': 'test'}

        task = Task('mytask', 'git', 'commit', args)

        self.assertEqual(task.task_id, 'mytask')
        self.assertEqual(task.status, TaskStatus.NEW)
        self.assertEqual(task.age, 0)
        self.assertListEqual(task.jobs, [])
        self.assertEqual(task.backend, 'git')
        self.assertEqual(task.category, 'commit')
        self.assertDictEqual(task.backend_args, args)
        self.assertEqual(task.archiving_cfg, None)
        self.assertEqual(task.scheduling_cfg, None)
        self.assertEqual(task.created_on, 1483228800.0)

        # Test when archive and scheduler arguments are given
        archive = ArchivingTaskConfig('/tmp/archive',
                                      False,
                                      archived_after=None)
        sched = SchedulingTaskConfig(delay=10, max_retries=2, max_age=5)

        task = Task('mytask',
                    'git',
                    'commit',
                    args,
                    archiving_cfg=archive,
                    scheduling_cfg=sched)

        self.assertEqual(task.task_id, 'mytask')
        self.assertEqual(task.status, TaskStatus.NEW)
        self.assertEqual(task.age, 0)
        self.assertListEqual(task.jobs, [])
        self.assertEqual(task.backend, 'git')
        self.assertEqual(task.category, 'commit')
        self.assertDictEqual(task.backend_args, args)
        self.assertEqual(task.archiving_cfg, archive)
        self.assertEqual(task.scheduling_cfg, sched)
        self.assertEqual(task.created_on, 1483228800.0)
Exemplo n.º 13
0
    def test_to_dict(self):
        """Check whether the object is converted into a dict"""

        args = {'from_date': '1970-01-01', 'component': 'test'}
        category = 'mocked_category'
        archive = ArchivingTaskConfig('/tmp/archive',
                                      False,
                                      archived_after=None)
        sched = SchedulingTaskConfig(delay=10, max_retries=2)
        before = datetime.datetime.now().timestamp()

        task = Task('mytask',
                    'mock_backend',
                    category,
                    args,
                    archiving_cfg=archive,
                    scheduling_cfg=sched)
        task.jobs.append('job-0')
        task.jobs.append('job-1')

        d = task.to_dict()

        expected = {
            'task_id': 'mytask',
            'status': 'NEW',
            'age': 0,
            'jobs': ['job-0', 'job-1'],
            'backend': 'mock_backend',
            'backend_args': args,
            'category': category,
            'archiving_cfg': {
                'archive_path': '/tmp/archive',
                'archived_after': None,
                'fetch_from_archive': False
            },
            'scheduling_cfg': {
                'delay': 10,
                'max_retries': 2
            }
        }

        created_on = d.pop('created_on')
        self.assertGreater(created_on, before)
        self.assertDictEqual(d, expected)
Exemplo n.º 14
0
    def test_set_invalid_fetch_from_archive(self):
        """Check if an exception is raised for invalid fetch_from_archive values"""

        with self.assertRaisesRegex(ValueError, INVALID_FETCH_FROM_ARCHIVE_ERROR):
            archiving_cfg = ArchivingTaskConfig('/tmp/archive', 'False')

        archiving_cfg = ArchivingTaskConfig('/tmp/archive', True)

        with self.assertRaisesRegex(ValueError, INVALID_FETCH_FROM_ARCHIVE_ERROR):
            archiving_cfg.fetch_from_archive = 1.0

        with self.assertRaisesRegex(ValueError, INVALID_FETCH_FROM_ARCHIVE_ERROR):
            archiving_cfg.fetch_from_archive = 'False'

        self.assertEqual(archiving_cfg.fetch_from_archive, True)
Exemplo n.º 15
0
    def test_set_invalid_archive_path(self):
        """Check if an exception is raised for invalid archive_path values"""

        with self.assertRaisesRegex(ValueError, INVALID_ARCHIVE_PATH_ERROR):
            archiving_cfg = ArchivingTaskConfig(5.0, False)

        archiving_cfg = ArchivingTaskConfig('/tmp/archive', False)

        with self.assertRaisesRegex(ValueError, INVALID_ARCHIVE_PATH_ERROR):
            archiving_cfg.archive_path = 1.0

        with self.assertRaisesRegex(ValueError, INVALID_ARCHIVE_PATH_ERROR):
            archiving_cfg.archive_path = True

        self.assertEqual(archiving_cfg.archive_path, '/tmp/archive')
Exemplo n.º 16
0
    def test_task_not_rescheduled_archive_task(self):
        """Check if archive tasks are not rescheduled"""

        handler = CompletedJobHandler(self.task_scheduler)

        archiving_cfg = ArchivingTaskConfig('/tmp/archive', True)
        task = self.registry.add('mytask', 'git', 'commit', {},
                                 archiving_cfg=archiving_cfg)

        result = JobResult(0, 1, 'mytask', 'git', 'commit')

        summary = Summary()
        summary.fetched = 10
        summary.last_updated_on = datetime.datetime(2010, 1, 1, 1, 0, 0, tzinfo=UTC)
        summary.max_updated_on = datetime.datetime(2014, 2, 12, 6, 10, 39, tzinfo=UTC)
        result.summary = summary

        event = JobEvent(JobEventType.COMPLETED, 0, 'mytask', result)

        handled = handler(event)
        self.assertEqual(handled, True)
        self.assertEqual(task.status, TaskStatus.COMPLETED)
Exemplo n.º 17
0
    def test_init(self):
        """Check arguments initialization"""

        args = {'from_date': '1970-01-01', 'component': 'test'}
        before = datetime.datetime.now().timestamp()

        task = Task('mytask', 'mock_backend', 'category', args)

        self.assertEqual(task.task_id, 'mytask')
        self.assertEqual(task.backend, 'mock_backend')
        self.assertEqual(task.category, 'category')
        self.assertDictEqual(task.backend_args, args)
        self.assertEqual(task.archiving_cfg, None)
        self.assertEqual(task.scheduling_cfg, None)
        self.assertGreater(task.created_on, before)

        # Test when archive and scheduler arguments are given
        archive = ArchivingTaskConfig('/tmp/archive',
                                      False,
                                      archived_after=None)
        sched = SchedulingTaskConfig(delay=10, max_retries=2)

        before = datetime.datetime.now().timestamp()

        task = Task('mytask',
                    'mock_backend',
                    'category',
                    args,
                    archiving_cfg=archive,
                    scheduling_cfg=sched)

        self.assertEqual(task.task_id, 'mytask')
        self.assertEqual(task.backend, 'mock_backend')
        self.assertEqual(task.category, 'category')
        self.assertDictEqual(task.backend_args, args)
        self.assertEqual(task.archiving_cfg, archive)
        self.assertEqual(task.scheduling_cfg, sched)
        self.assertGreater(task.created_on, before)