def testNewPipelineRun(self): # this test currently relies on the fixture data so that # it actually tests anything workloads = Workload.objects.all() if len(workloads) > 0: runs_before = len(PipelineRun.objects.all()) run_background_tasks.delay() runs_after = len(PipelineRun.objects.all()) self.assertEqual(runs_before + 1, runs_after)
def testNoModifiedWorkload(self): # First Execution of Modified Workloads run_background_tasks.delay() first_pipeline_run = PipelineRun.objects.get_latest() # Second Execution with no modified workloads run_background_tasks.delay() second_pipeline_run = PipelineRun.objects.get_latest() # Check that the BG task has not run self.assertEqual(first_pipeline_run.start_time, second_pipeline_run.start_time)
def checkNewTask(self, task_type): workloads = Workload.objects.all() pruned_before = [len(PipelineData.objects.filter( workload=workload, task_type=task_type)) for workload in workloads] run_background_tasks.delay() pruned_after = [len(PipelineData.objects.filter( workload=workload, task_type=task_type)) for workload in workloads] for before, after in zip(pruned_before, pruned_after): self.assertEqual(before + 1, after)
def testUniqueKnobConfigurationWorkload(self): # Get workload to copy data from origin_workload = Workload.objects.get(pk=1) origin_session = Session.objects.get(pk=1) # Create empty workload fix_workload = Workload.objects.create_workload( dbms=origin_workload.dbms, hardware=origin_workload.hardware, name="fixed_knob_workload", project=origin_workload.project) fix_knob_data = Result.objects.filter( workload=origin_workload, session=origin_session)[0].knob_data # Add 5 Result with the same Knob Configuration for res in Result.objects.filter(workload=origin_workload, session=origin_session)[:4]: Result.objects.create_result(res.session, res.dbms, fix_workload, fix_knob_data, res.metric_data, res.observation_start_time, res.observation_end_time, res.observation_time) result = run_background_tasks.delay() # Check that BG task successfully finished self.assertTrue(result.successful()) # Check that the empty workload is still in MODIFIED Status self.assertEqual(fix_workload.status, 1) pipeline_data = PipelineData.objects.filter( pipeline_run=PipelineRun.objects.get_latest()) # Check that the empty workload is not in the pipeline datas self.assertNotIn(fix_workload.pk, pipeline_data.values_list('workload_id', flat=True))
def testNoWorkloads(self): # delete any existing workloads workloads = Workload.objects.all() workloads.delete() # background task should not fail result = run_background_tasks.delay() self.assertTrue(result.successful())
def testEmptyWorkload(self): with transaction.atomic(): # Create empty workload empty_workload = Workload.objects.create_workload(dbms=DBMSCatalog.objects.get(pk=1), hardware=Hardware.objects.get(pk=1), name="empty_workload") result = run_background_tasks.delay() # Check that BG task successfully finished self.assertTrue(result.successful()) # Check that the empty workload is still in MODIFIED Status self.assertEqual(empty_workload.status, 1) pipeline_data = PipelineData.objects.filter(pipeline_run=PipelineRun.objects.get_latest()) # Check that the empty workload is not in the pipeline datas self.assertNotIn(empty_workload.pk, pipeline_data.values_list('workload_id', flat=True))
def testProcessedWorkloadStatus(self): before_workloads = Workload.objects.filter( status=WorkloadStatusType.MODIFIED) run_background_tasks.delay() for w in before_workloads: self.assertEqual(w.status, WorkloadStatusType.PROCESSED)
def testNoError(self): result = run_background_tasks.delay() self.assertTrue(result.successful())