Ejemplo n.º 1
0
    def test_job_create_no_worker_assigned(self):
        fixture = {
            'action': 'snapshot',
            'tenant_id': unit_utils.TENANT1,
            'schedule_id': unit_utils.SCHEDULE_UUID2,
            'status': 'queued',
            'job_metadata': [
                {
                    'key': 'instance_id',
                    'value': 'my_instance',
                },
            ],
        }

        timeutils.set_time_override()
        now = timeutils.utcnow()
        job = self.db_api.job_create(fixture)
        timeutils.clear_time_override()

        self.assertTrue(uuidutils.is_uuid_like(job['id']))
        self.assertNotEqual(job['created_at'], None)
        self.assertNotEqual(job['updated_at'], None)
        self.assertEqual(job['timeout'], now + timedelta(seconds=30))
        self.assertEqual(job['hard_timeout'], now + timedelta(seconds=30))
        self.assertEqual(job['schedule_id'], fixture['schedule_id'])
        self.assertEqual(job['worker_id'], None)
        self.assertEqual(job['status'], fixture['status'])
        self.assertEqual(job['retry_count'], 0)
        metadata = job['job_metadata']
        self.assertEqual(len(metadata), 1)
        self.assertEqual(metadata[0]['key'],
                         fixture['job_metadata'][0]['key'])
        self.assertEqual(metadata[0]['value'],
                         fixture['job_metadata'][0]['value'])
Ejemplo n.º 2
0
Archivo: base.py Proyecto: isethi/qonos
    def test_schedule_update_remove_metadata(self):
        fixture = {
            'id': str(uuid.uuid4()),
            'tenant': str(uuid.uuid4()),
            'action': 'snapshot',
            'minute': 30,
            'hour': 2,
            'schedule_metadata': [
                {
                    'key': 'instance_id',
                    'value': 'my_instance',
                },
            ],
        }
        schedule = self.db_api.schedule_create(fixture)
        fixture = {
            'schedule_metadata': [],
        }

        timeutils.set_time_override()
        timeutils.advance_time_seconds(2)
        updated_schedule = self.db_api.schedule_update(schedule['id'], fixture)
        timeutils.clear_time_override()

        self.assertTrue(uuidutils.is_uuid_like(schedule['id']))
        self.assertEqual(updated_schedule['tenant'], schedule['tenant'])
        self.assertEqual(updated_schedule['action'], schedule['action'])
        self.assertEqual(updated_schedule['minute'], schedule['minute'])
        self.assertEqual(updated_schedule['hour'], schedule['hour'])
        metadata = updated_schedule['schedule_metadata']
        self.assertEqual(len(metadata), 0)
        # updated child metadata collection doesn't update the parent schedule
        self.assertEqual(updated_schedule['updated_at'],
                         schedule['updated_at'])
Ejemplo n.º 3
0
 def test_jobs_cleanup_hard_timed_out(self):
     workers = self.db_api.job_get_all()
     self.assertEqual(len(workers), 2)
     timeutils.set_time_override()
     timeutils.advance_time_seconds(61)
     self.db_api._jobs_cleanup_hard_timed_out()
     timeutils.clear_time_override()
     workers = self.db_api.job_get_all()
     self.assertEqual(len(workers), 0)
Ejemplo n.º 4
0
Archivo: base.py Proyecto: isethi/qonos
 def test_jobs_cleanup_hard_timed_out(self):
     jobs = self.db_api.job_get_all()
     self.assertEqual(len(jobs), 2)
     timeutils.set_time_override()
     timeutils.advance_time_delta(datetime.timedelta(hours=4, minutes=1))
     self.db_api._jobs_cleanup_hard_timed_out()
     timeutils.clear_time_override()
     jobs = self.db_api.job_get_all()
     self.assertEqual(len(jobs), 0)
Ejemplo n.º 5
0
    def test_get_schedules(self):
        timeutils.set_time_override()
        start_time = timeutils.isotime()
        timeutils.advance_time_seconds(30)
        end_time = timeutils.isotime()

        filter_args = {"next_run_after": start_time, "next_run_before": end_time}
        self.client.list_schedules(filter_args=filter_args).AndReturn([])
        self.mox.ReplayAll()
        self.scheduler.get_schedules(start_time, end_time)
        self.mox.VerifyAll()
Ejemplo n.º 6
0
    def test_get_schedules(self):
        timeutils.set_time_override()
        previous_run = timeutils.isotime()
        timeutils.advance_time_seconds(30)
        current_run = timeutils.isotime()

        filter_args = {'next_run_after': previous_run,
                       'next_run_before': current_run}
        self.client.list_schedules(filter_args=filter_args).AndReturn([])
        self.mox.ReplayAll()
        self.scheduler.get_schedules(previous_run, current_run)
        self.mox.VerifyAll()
Ejemplo n.º 7
0
 def test_get_next_job_unassigned(self):
     timeutils.set_time_override()
     self._create_jobs(10, self.job_fixture_1, self.job_fixture_2)
     job = db_api.job_get_and_assign_next_by_action('snapshot',
                                                    unit_utils.WORKER_UUID1)
     expected = self.jobs[0]
     self.assertEqual(job['id'], expected['id'])
     self.assertEqual(job['worker_id'], unit_utils.WORKER_UUID1)
     timeout = expected['created_at'] + timedelta(seconds=30)
     hard_timeout = expected['created_at'] + timedelta(seconds=30)
     self.assertEqual(job['timeout'], timeout)
     self.assertEqual(job['hard_timeout'], hard_timeout)
     self.assertEqual(job['retry_count'], expected['retry_count'] + 1)
Ejemplo n.º 8
0
    def test_run_loop(self):
        self.config(job_schedule_interval=5, group="scheduler")
        timeutils.set_time_override()
        current_time = timeutils.isotime()
        called = {"enqueue_jobs": False}

        def fake(end_time=None):  # assert only end_time kwarg is passed
            self.assertEqual(end_time, current_time)
            called["enqueue_jobs"] = True

        self.stubs.Set(self.scheduler, "enqueue_jobs", fake)
        fake_sleep = lambda x: None
        self.stubs.Set(time, "sleep", fake_sleep)

        self.scheduler.run(run_once=True)
        self.assertTrue(called["enqueue_jobs"])
Ejemplo n.º 9
0
    def test_schedule_update(self):
        fixture = {
            'id': str(uuid.uuid4()),
            'tenant_id': str(uuid.uuid4()),
            'action': 'snapshot',
            'minute': 30,
            'hour': 2,
        }
        schedule = self.db_api.schedule_create(fixture)
        fixture = {'hour': 3}
        timeutils.set_time_override()
        timeutils.advance_time_seconds(2)
        updated_schedule = self.db_api.schedule_update(schedule['id'], fixture)
        timeutils.clear_time_override()

        self.assertTrue(uuidutils.is_uuid_like(schedule['id']))
        self.assertEqual(updated_schedule['tenant_id'], schedule['tenant_id'])
        self.assertEqual(updated_schedule['action'], schedule['action'])
        self.assertEqual(updated_schedule['minute'], schedule['minute'])
        self.assertEqual(updated_schedule['hour'], fixture['hour'])
        self.assertEqual(updated_schedule['created_at'],
                         schedule['created_at'])
        self.assertNotEqual(updated_schedule['updated_at'],
                            schedule['updated_at'])
Ejemplo n.º 10
0
    def test_job_workflow(self):

        # (setup) create schedule
        meta1 = {'key': 'key1', 'value': 'value1'}
        meta2 = {'key': 'key2', 'value': 'value2'}
        request = {
            'schedule':
            {
                'tenant_id': TENANT1,
                'action': 'snapshot',
                'minute': '30',
                'hour': '12',
                'schedule_metadata': [
                    meta1,
                    meta2,
                ]
            }
        }
        schedule = self.client.create_schedule(request)

        # create job

        new_job = self.client.create_job(schedule['id'])
        self.assertIsNotNone(new_job.get('id'))
        self.assertEqual(new_job['schedule_id'], schedule['id'])
        self.assertEqual(new_job['tenant_id'], schedule['tenant_id'])
        self.assertEqual(new_job['action'], schedule['action'])
        self.assertEqual(new_job['status'], 'queued')
        self.assertMetadataInList(new_job['job_metadata'], meta1)
        self.assertMetadataInList(new_job['job_metadata'], meta2)

        # list jobs
        jobs = self.client.list_jobs()
        self.assertEqual(len(jobs), 1)
        self.assertEqual(jobs[0]['id'], new_job['id'])
        self.assertEqual(jobs[0]['schedule_id'], new_job['schedule_id'])
        self.assertEqual(jobs[0]['status'], new_job['status'])
        self.assertEqual(jobs[0]['retry_count'], new_job['retry_count'])

        # get job
        job = self.client.get_job(new_job['id'])
        self.assertEqual(job['id'], new_job['id'])
        self.assertEqual(job['schedule_id'], new_job['schedule_id'])
        self.assertEqual(job['status'], new_job['status'])
        self.assertEqual(job['retry_count'], new_job['retry_count'])

        # list job metadata
        metadata = self.client.list_job_metadata(new_job['id'])
        self.assertMetadataInList(metadata, meta1)
        self.assertMetadataInList(metadata, meta2)

        # get job metadata
        meta_value = self.client.get_job_metadata(new_job['id'], meta1['key'])
        self.assertEqual(meta_value, meta1['value'])

        # get heartbeat
        heartbeat = self.client.get_job_heartbeat(job['id'])['heartbeat']
        self.assertIsNotNone(heartbeat)

        # heartbeat
        timeutils.set_time_override()
        timeutils.advance_time_seconds(30)
        self.client.job_heartbeat(job['id'])
        new_heartbeat = self.client.get_job_heartbeat(job['id'])['heartbeat']
        self.assertNotEqual(new_heartbeat, heartbeat)
        timeutils.clear_time_override()

        # get status
        status = self.client.get_job_status(job['id'])['status']
        self.assertEqual(status, new_job['status'])

        # update status
        self.client.update_job_status(job['id'], 'done')
        status = self.client.get_job_status(job['id'])['status']
        self.assertNotEqual(status, new_job['status'])
        self.assertEqual(status, 'done')

        # delete job
        self.client.delete_job(job['id'])

        # make sure job no longer exists
        self.assertRaises(client_exc.NotFound, self.client.get_job,
                          job['id'])
Ejemplo n.º 11
0
Archivo: base.py Proyecto: isethi/qonos
 def setUp(self):
     super(TestJobsDBGetNextJobApi, self).setUp()
     self.db_api = db_api
     timeutils.set_time_override()
     self._create_job_fixtures()
Ejemplo n.º 12
0
Archivo: base.py Proyecto: isethi/qonos
 def setUp(self):
     super(TestSchedulesDBApi, self).setUp()
     self.db_api = db_api
     timeutils.set_time_override(datetime.datetime(
             year=2013, month=1, day=1, hour=9, minute=0))
     self._create_schedules()