예제 #1
0
 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)
예제 #2
0
 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)
예제 #3
0
 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)
예제 #4
0
    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))
예제 #5
0
    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())
예제 #6
0
    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))
예제 #7
0
 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)
예제 #8
0
 def testNoError(self):
     result = run_background_tasks.delay()
     self.assertTrue(result.successful())