示例#1
0
    def test_really_fetch_sets_testjob_can_resubmit_and_testrun_completed2(
            self, get_implementation, __now__):
        metadata = {"foo": "bar"}
        tests = {}
        metrics = {}
        results = ('Incomplete', False, metadata, tests, metrics, "abc")
        #                        ^^^^^ job resulted in an infra failure

        impl = MagicMock()
        impl.fetch = MagicMock(return_value=results)
        impl.job_url = MagicMock(return_value="http://www.example.com")
        get_implementation.return_value = impl

        test_job = self.create_test_job(
            backend=self.backend,
            definition='foo: 1',
            environment='myenv',
            job_id='999',
        )

        self.backend.really_fetch(test_job)
        self.assertTrue(test_job.can_resubmit)

        # should not crash
        core_models.TestRun.objects.get(
            build__project=self.project,
            environment__slug='myenv',
            build__version='1',
            job_id='999',
            job_status='Incomplete',
            completed=False,
        )
示例#2
0
    def test_really_fetch_sets_fetched_on_invalid_metadata(
            self, get_implementation, __now__):
        metadata = {"foo": "bar"}
        tests = {"foo": "pass"}
        metrics = {"bar": 1}
        results = ('Complete', True, metadata, tests, metrics, "abc")

        impl = MagicMock()
        impl.fetch = MagicMock(return_value=results)
        impl.job_url = MagicMock(return_value="http://www.example.com")
        get_implementation.return_value = impl

        environment = self.project.environments.create(slug='myenv')
        self.build.test_runs.create(
            environment=environment,
            job_id='999',
            job_status='Complete',
            completed=True,
        )

        test_job = self.create_test_job(
            backend=self.backend,
            definition='foo: 1',
            environment='myenv',
            job_id='999',
        )

        self.backend.really_fetch(test_job)

        self.assertTrue(test_job.fetched)
        self.assertIsNotNone(test_job.failure)
示例#3
0
    def test_create_testrun_job_url(self, get_implementation, __now__):
        metadata = {"foo": "bar"}
        tests = {"foo": "pass"}
        metrics = {"bar": 1}
        results = ('Complete', True, metadata, tests, metrics, "abc")
        test_job_url = "http://www.example.com"

        impl = MagicMock()
        impl.fetch = MagicMock(return_value=results)
        impl.job_url = MagicMock(return_value=test_job_url)
        get_implementation.return_value = impl

        test_job = self.create_test_job(
            backend=self.backend,
            definition='foo: 1',
            environment='myenv',
            job_id='999',
        )

        self.backend.really_fetch(test_job)

        # should not crash
        test_run = core_models.TestRun.objects.get(
            build__project=self.project,
            environment__slug='myenv',
            build__version='1',
            job_id='999',
            job_status='Complete',
            completed=True,
        )
        self.assertEqual(test_run.job_url, test_job_url)
示例#4
0
    def test_fetch_with_only_metrics(self, get_implementation, __now__):
        metadata = {"foo": "bar"}
        tests = {}
        metrics = {"foo": {"value": 10, "unit": "boxes"}}
        results = ('Complete', True, metadata, tests, metrics, "abc")

        impl = MagicMock()
        impl.fetch = MagicMock(return_value=results)
        impl.job_url = MagicMock(return_value="http://www.example.com")
        get_implementation.return_value = impl

        test_job = self.create_test_job(
            backend=self.backend,
            definition='foo: 1',
            environment='myenv',
            job_id='999',
        )

        self.backend.fetch(test_job.id)

        # should not crash
        test_run = core_models.TestRun.objects.get(
            build__project=self.project,
            environment__slug='myenv',
            build__version='1',
            job_id='999',
            job_status='Complete',
        )
        test_job.refresh_from_db()
        self.assertFalse(test_job.can_resubmit)
        self.assertTrue(test_run.completed)
示例#5
0
    def test_really_fetch_sets_testjob_can_resubmit_and_testrun_completed2(self, get_implementation, __now__):
        metadata = {"foo": "bar"}
        tests = {}
        metrics = {}
        results = ('Incomplete', False, metadata, tests, metrics, "abc")
        #                        ^^^^^ job resulted in an infra failure

        impl = MagicMock()
        impl.fetch = MagicMock(return_value=results)
        impl.job_url = MagicMock(return_value="http://www.example.com")
        get_implementation.return_value = impl

        test_job = self.create_test_job(
            backend=self.backend,
            definition='foo: 1',
            environment='myenv',
            job_id='999',
        )

        self.backend.really_fetch(test_job)
        self.assertTrue(test_job.can_resubmit)

        # should not crash
        core_models.TestRun.objects.get(
            build__project=self.project,
            environment__slug='myenv',
            build__version='1',
            job_id='999',
            job_status='Incomplete',
            completed=False,
        )
示例#6
0
    def test_create_testrun_job_url(self, get_implementation, __now__):
        metadata = {"foo": "bar"}
        tests = {"foo": "pass"}
        metrics = {"bar": 1}
        results = ('Complete', True, metadata, tests, metrics, "abc")
        test_job_url = "http://www.example.com"

        impl = MagicMock()
        impl.fetch = MagicMock(return_value=results)
        impl.job_url = MagicMock(return_value=test_job_url)
        get_implementation.return_value = impl

        test_job = self.create_test_job(
            backend=self.backend,
            definition='foo: 1',
            environment='myenv',
            job_id='999',
        )

        self.backend.really_fetch(test_job)

        # should not crash
        test_run = core_models.TestRun.objects.get(
            build__project=self.project,
            environment__slug='myenv',
            build__version='1',
            job_id='999',
            job_status='Complete',
            completed=True,
        )
        self.assertEqual(test_run.job_url, test_job_url)
示例#7
0
    def test_really_fetch_sets_fetched_on_invalid_metadata(self, get_implementation, __now__):
        metadata = {"foo": "bar"}
        tests = {"foo": "pass"}
        metrics = {"bar": 1}
        results = ('Complete', True, metadata, tests, metrics, "abc")

        impl = MagicMock()
        impl.fetch = MagicMock(return_value=results)
        impl.job_url = MagicMock(return_value="http://www.example.com")
        get_implementation.return_value = impl

        environment = self.project.environments.create(slug='myenv')
        self.build.test_runs.create(
            environment=environment,
            job_id='999',
            job_status='Complete',
            completed=True,
        )

        test_job = self.create_test_job(
            backend=self.backend,
            definition='foo: 1',
            environment='myenv',
            job_id='999',
        )

        self.backend.really_fetch(test_job)

        self.assertTrue(test_job.fetched)
        self.assertIsNotNone(test_job.failure)
示例#8
0
    def test_fetch_creates_testrun(self, get_implementation, __now__):
        metadata = {"foo": "bar"}
        tests = {"foo": "pass"}
        metrics = {"bar": {"value": 1, "unit": ""}}
        results = ('Complete', True, metadata, tests, metrics, "abc")

        project_status = self.build.status
        tests_pass_so_far = project_status.tests_pass

        impl = MagicMock()
        impl.fetch = MagicMock(return_value=results)
        impl.job_url = MagicMock(return_value="http://www.example.com")
        get_implementation.return_value = impl

        test_job = self.create_test_job(
            backend=self.backend,
            definition='foo: 1',
            environment='myenv',
            job_id='999',
        )

        self.backend.fetch(test_job.id)

        # should not crash
        test_run = core_models.TestRun.objects.get(
            build__project=self.project,
            environment__slug='myenv',
            build__version='1',
            job_id='999',
            job_status='Complete',
            completed=True,
        )
        self.assertEqual(
            1,
            core_models.Test.objects.filter(
                test_run=test_run,
                metadata__name="foo",
                result=True,
            ).count()
        )
        self.assertEqual(
            1,
            core_models.Metric.objects.filter(
                test_run=test_run,
                metadata__name="bar",
                result=1,
            ).count()
        )
        project_status.refresh_from_db()
        self.assertEqual(project_status.tests_pass, tests_pass_so_far + 1)
        test_job.refresh_from_db()
        self.assertTrue(test_job.fetched)
示例#9
0
    def test_really_fetch(self, get_implementation, __now__):
        impl = MagicMock()
        impl.fetch = MagicMock(return_value=None)
        get_implementation.return_value = impl

        test_job = self.create_test_job()
        self.backend.really_fetch(test_job)

        test_job.refresh_from_db()
        self.assertEqual(NOW, test_job.last_fetch_attempt)
        self.assertFalse(test_job.fetched)

        get_implementation.assert_called()
        impl.fetch.assert_called()
示例#10
0
    def test_really_fetch(self, get_implementation, __now__):
        impl = MagicMock()
        impl.fetch = MagicMock(return_value=None)
        get_implementation.return_value = impl

        test_job = self.create_test_job()
        self.backend.really_fetch(test_job)

        test_job.refresh_from_db()
        self.assertEqual(NOW, test_job.last_fetch_attempt)
        self.assertFalse(test_job.fetched)

        get_implementation.assert_called()
        impl.fetch.assert_called()
示例#11
0
    def test_fetch_ignores_results_from_incomplete_job(self,
                                                       get_implementation,
                                                       __now__):
        metadata = {"foo": "bar"}
        tests = {"foo": "pass"}
        metrics = {"bar": {"value": 1, "unit": ""}}
        results = ('Incomplete', False, metadata, tests, metrics, "abc")
        #                        ^^^^^ job resulted in an infra failure

        impl = MagicMock()
        impl.fetch = MagicMock(return_value=results)
        impl.job_url = MagicMock(return_value="http://www.example.com")
        get_implementation.return_value = impl

        test_job = self.create_test_job(
            backend=self.backend,
            definition='foo: 1',
            environment='myenv',
            job_id='999',
        )

        self.backend.fetch(test_job.id)
        test_job.refresh_from_db()
        self.assertTrue(test_job.can_resubmit)

        # should not crash
        testrun = core_models.TestRun.objects.get(
            build__project=self.project,
            environment__slug='myenv',
            build__version='1',
            job_id='999',
            job_status='Incomplete',
            completed=False,  # even if results are not empty
        )

        # no results get recorded
        self.assertEqual(0, testrun.tests.count())
        self.assertEqual(0, testrun.metrics.count())