コード例 #1
0
 def test_submit_unauthorized(self, __submit__):
     lava = LAVABackend(None)
     testjob = TestJob(
         job_id='1234',
         target=self.project,
         backend=self.backend)
     with self.assertRaises(TemporarySubmissionIssue):
         lava.submit(testjob)
コード例 #2
0
    def test_fetch_basics(self, get_results, get_details, get_logs):
        lava = LAVABackend(None)
        testjob = TestJob(job_id='9999', backend=self.backend)
        results = lava.fetch(testjob)

        get_details.assert_called_with('9999')
        get_results.assert_called_with('9999')
        self.assertEqual('Complete', results[0])
コード例 #3
0
 def test_lava_log_download_rest(self, requests_get):
     # check REST API path
     self.backend.url.replace("RPC2/", "api/v0.2/")
     lava2 = LAVABackend(self.backend)
     requests_get.side_effect = requests.exceptions.ChunkedEncodingError("Connection closed")
     log = lava2.__download_full_log__(999)
     requests_get.assert_called()
     self.assertEqual(b'', log)
コード例 #4
0
 def test_canceled(self, get_results, get_details, get_logs):
     lava = LAVABackend(None)
     testjob = TestJob(
         job_id='1234',
         backend=self.backend,
         target=self.project)
     status, completed, metadata, results, metrics, logs = lava.fetch(testjob)
     self.assertFalse(completed)
コード例 #5
0
ファイル: test_lava.py プロジェクト: loicpoulain/squad
 def test_admin_notification(self, get_results, get_details, get_logs):
     self.project.admin_subscriptions.create(email='*****@*****.**')
     lava = LAVABackend(None)
     testjob = TestJob(job_id='1234',
                       backend=self.backend,
                       target=self.project)
     status, completed, metadata, results, metrics, logs = lava.fetch(
         testjob)
     self.assertEqual(1, len(mail.outbox))
コード例 #6
0
    def test_parse_results(self, get_results, get_details, get_logs):
        lava = LAVABackend(None)
        testjob = TestJob(job_id='1234', backend=self.backend)
        status, completed, metadata, results, metrics, logs = lava.fetch(
            testjob)

        self.assertEqual(len(results), 1)
        self.assertEqual(len(metrics), 1)
        self.assertEqual(10, metrics['DefinitionFoo/case_foo'])
コード例 #7
0
    def test_fetch_not_finished(self, get_results, get_details):
        lava = LAVABackend(None)
        testjob = TestJob(
            job_id='9999',
            target=self.project,
            backend=self.backend)
        lava.fetch(testjob)

        get_results.assert_not_called()
コード例 #8
0
 def test_submit(self, __submit__):
     lava = LAVABackend(None)
     test_definition = "foo: 1\njob_name: bar"
     testjob = TestJob(
         definition=test_definition,
         backend=self.backend)
     self.assertEqual('1234', lava.submit(testjob))
     self.assertEqual('bar', testjob.name)
     __submit__.assert_called_with(test_definition)
コード例 #9
0
    def test_parse_results_empty_metadata(self, get_results, get_details, test_log):
        lava = LAVABackend(None)
        testjob = TestJob(
            job_id='1234',
            target=self.project,
            backend=self.backend)
        status, completed, metadata, results, metrics, logs = lava.fetch(testjob)

        self.assertEqual({}, metadata)
コード例 #10
0
 def test_incomplete_string_results_metadata(self, get_results, get_details, get_logs):
     lava = LAVABackend(None)
     testjob = TestJob(
         job_id='1234',
         backend=self.backend,
         target=self.project)
     status, completed, metadata, results, metrics, logs = lava.fetch(testjob)
     self.assertFalse(completed)
     self.assertEqual(TEST_RESULTS_INFRA_FAILURE_STR[0]['metadata'], testjob.failure)
コード例 #11
0
    def test_parse_results_metadata_with_suite_versions(self, get_results, get_details, test_log):
        lava = LAVABackend(None)
        testjob = TestJob(
            job_id='1234',
            target=self.project,
            backend=self.backend)
        status, completed, metadata, results, metrics, logs = lava.fetch(testjob)

        self.assertEqual({"suite1": "1.0"}, metadata['suite_versions'])
コード例 #12
0
 def test_submit_multinode(self, __submit__):
     lava = LAVABackend(None)
     test_definition = "foo: 1\njob_name: bar"
     testjob = TestJob(
         definition=test_definition,
         target=self.project,
         backend=self.backend)
     self.assertEqual(['1234.0', '1234.1'], lava.submit(testjob))
     self.assertEqual('bar', testjob.name)
     __submit__.assert_called_with(test_definition)
コード例 #13
0
    def test_get_listen_url(self):
        backend = MagicMock()
        backend.url = 'https://foo.tld/RPC2'
        lava = LAVABackend(backend)

        lava.__get_publisher_event_socket__ = MagicMock(return_value='tcp://bar.tld:9999')
        self.assertEqual('tcp://bar.tld:9999', lava.get_listener_url())

        lava.__get_publisher_event_socket__ = MagicMock(return_value='tcp://*:9999')
        self.assertEqual('tcp://foo.tld:9999', lava.get_listener_url())
コード例 #14
0
 def test_resubmit_deleted_job(self, __resubmit__):
     lava = LAVABackend(None)
     test_definition = "foo: 1\njob_name: bar"
     testjob = TestJob(
         definition=test_definition,
         backend=self.backend,
         job_id='9999',
     )
     with self.assertRaises(SubmissionIssue):
         lava.resubmit(testjob)
コード例 #15
0
    def test_parse_results(self, get_results, get_details, download_test_log):
        lava = LAVABackend(self.backend)
        testjob = TestJob(job_id='1234', backend=self.backend)
        status, completed, metadata, results, metrics, logs = lava.fetch(
            testjob)

        self.assertEqual(len(results), 2)
        self.assertIn('log', results['DefinitionFoo/case_bar'].keys())
        self.assertEqual(len(metrics), 2)
        self.assertEqual(10, metrics['DefinitionFoo/case_foo'])
        self.assertEqual('job_foo', testjob.name)
コード例 #16
0
 def test_incomplete_string_results_metadata_null_error_msg(self, get_results, get_details, get_logs, resubmit):
     self.project.project_settings = '{"CI_LAVA_INFRA_ERROR_MESSAGES": "not-really-important"}'
     self.project.save()
     lava = LAVABackend(None)
     testjob = TestJob(
         job_id='1234',
         backend=self.backend,
         target=self.project)
     status, completed, metadata, results, metrics, logs = lava.fetch(testjob)
     self.assertFalse(completed)
     resubmit.assert_not_called()
コード例 #17
0
 def test_automated_resubmit3(self, lava_resubmit, get_results, get_details, get_logs):
     lava = LAVABackend(self.backend)
     testjob = TestJob(
         job_id='1234',
         backend=self.backend,
         target=self.project)
     status, completed, metadata, results, metrics, logs = lava.fetch(testjob)
     lava_resubmit.assert_called()
     new_test_job = TestJob.objects.all().last()
     self.assertEqual(1, new_test_job.resubmitted_count)
     self.assertFalse(testjob.can_resubmit)
コード例 #18
0
    def test_fetch_timeout(self, get_details):
        lava = LAVABackend(None)
        testjob = TestJob(
            job_id='9999',
            target=self.project,
            backend=self.backend)

        # Make sure lava.fetch() raises fetch issue,
        # backend.fetch() will increase testjob.fetch_attempt accordingly
        with self.assertRaises(TemporaryFetchIssue):
            lava.fetch(testjob)
コード例 #19
0
 def test_automated_resubmit_with_project_settings(self, lava_resubmit, get_results, get_details, get_logs):
     self.project.project_settings = yaml.dump({'CI_LAVA_INFRA_ERROR_MESSAGES': [TEST_RESULT_FAILURE_CUSTOM]})
     lava = LAVABackend(self.backend)
     testjob = TestJob(
         job_id='1234',
         backend=self.backend,
         target=self.project)
     status, completed, metadata, results, metrics, logs = lava.fetch(testjob)
     lava_resubmit.assert_called()
     new_test_job = TestJob.objects.all().last()
     self.assertEqual(1, new_test_job.resubmitted_count)
     self.assertFalse(testjob.can_resubmit)
コード例 #20
0
    def test_fetch_missing_dates(self, get_results, get_details, test_log):
        lava = LAVABackend(None)
        testjob = TestJob(
            job_id='9999',
            target=self.project,
            backend=self.backend)
        results = lava.fetch(testjob)

        get_details.assert_called_with('9999')
        get_results.assert_called_with('9999')
        self.assertEqual('Complete', results[0])
        testjob.refresh_from_db()
        self.assertIsNotNone(testjob.started_at)
        self.assertIsNone(testjob.ended_at)
コード例 #21
0
    def test_parse_results_rest(self, get_results, get_details, download_test_log):
        # this test is a workaround of LAVA bug
        # https://git.lavasoftware.org/lava/lava/-/issues/449
        lava = LAVABackend(self.backend)
        testjob = TestJob(
            job_id='1234',
            target=self.project,
            backend=self.backend)
        status, completed, metadata, results, metrics, logs = lava.fetch(testjob)

        self.assertEqual(len(results), 2)
        self.assertIn('log', results['DefinitionFoo/case_bar'].keys())
        self.assertEqual(len(metrics), 2)
        self.assertEqual(10, metrics['DefinitionFoo/case_foo']["value"])
        self.assertEqual('job_foo', testjob.name)
コード例 #22
0
    def test_receive_event_no_status(self, fetch):
        lava = LAVABackend(self.backend)
        testjob = TestJob.objects.create(
            backend=self.backend,
            target=self.project,
            build='1',
            environment='myenv',
            submitted=True,
            fetched=False,
            job_id='123',
            name="foo",
        )

        lava.receive_event('foo.com.testjob', {"job": '123'})
        self.assertEqual('Unknown', TestJob.objects.get(pk=testjob.id).job_status)
コード例 #23
0
    def test_receive_event(self, fetch):
        lava = LAVABackend(self.backend)
        testjob = TestJob.objects.create(
            backend=self.backend,
            target=self.project,
            target_build=self.build,
            environment='myenv',
            submitted=True,
            fetched=False,
            job_id='123',
            name="foo",
        )

        lava.receive_event('foo.com.testjob', {"job": '123', 'state': 'Finished', 'health': 'Complete'})
        fetch.apply_async.assert_called_with(args=[testjob.id])
        self.assertEqual('Complete', TestJob.objects.get(pk=testjob.id).job_status)
コード例 #24
0
 def test_automated_resubmit_email(self, get_results, get_details,
                                   get_logs):
     self.project.admin_subscriptions.create(email='*****@*****.**')
     lava = LAVABackend(self.backend)
     testjob = TestJob(job_id='1234',
                       backend=self.backend,
                       target=self.project)
     resubmitted_job = TestJob(job_id='1235',
                               backend=self.backend,
                               target=self.project,
                               resubmitted_count=1)
     resubmitted_job.save()
     lava.resubmit = MagicMock(return_value=resubmitted_job)
     status, completed, metadata, results, metrics, logs = lava.fetch(
         testjob)
     lava.resubmit.assert_called()
     # there should be an admin email sent after resubmission
     self.assertEqual(1, len(mail.outbox))
コード例 #25
0
    def test_resubmit_canceled_job(self, __resubmit__):
        """
            There might be a scenario where a test job got submitted and then canceled
            and never make it to LAVA to get a job_id from it.

            Because testjob had no job_id, __resubmit__ returns None, which
            breaks upper functions.
        """
        lava = LAVABackend(None)
        test_definition = "foo: 1\njob_name: bar"
        testjob = TestJob(
            definition=test_definition,
            backend=self.backend,
            target=self.project,
            submitted=True,
            job_status='Canceled',
        )
        job_id = lava.resubmit(testjob)
        self.assertEqual(job_id, ['1235'])
コード例 #26
0
    def test_parse_results_clone_measurements(self, get_results, get_details, test_log):
        self.backend.backend_settings = '{"CI_LAVA_CLONE_MEASUREMENTS": true, "CI_LAVA_HANDLE_BOOT": true}'

        # Project settings has higher priority than backend settings
        self.project.project_settings = 'CI_LAVA_CLONE_MEASUREMENTS: true'

        lava = LAVABackend(self.backend)
        testjob = TestJob(
            job_id='1235',
            backend=self.backend,
            target=self.project,
            target_build=self.build,
            environment="foo_env")
        status, completed, metadata, results, metrics, logs = lava.fetch(testjob)

        self.assertEqual(len(results), 3)
        self.assertEqual(len(metrics), 2)
        self.assertEqual(10, metrics['DefinitionFoo/case_foo']["value"])
        self.assertEqual('job_foo', testjob.name)
コード例 #27
0
    def test_receive_event(self, fetch):
        lava = LAVABackend(self.backend)
        testjob = TestJob.objects.create(
            backend=self.backend,
            target=self.project,
            build='1',
            environment='myenv',
            submitted=True,
            fetched=False,
            job_id='123',
            name="foo",
        )

        lava.receive_event('foo.com.testjob', {"job": '123', 'state': 'Finished', 'health': 'Complete'})
        # this is workaround to LAVA issues
        # it should be removed when LAVA bug is fixed
        fetch.apply_async.assert_called_with(args=[testjob.id], countdown=120)
        # proper solution below
        # fetch.fetch.assert_called_with(testjob.id)
        self.assertEqual('Complete', TestJob.objects.get(pk=testjob.id).job_status)
コード例 #28
0
 def test_submit_503(self, __submit__):
     lava = LAVABackend(None)
     testjob = TestJob(job_id='1234', backend=self.backend)
     with self.assertRaises(TemporarySubmissionIssue):
         lava.submit(testjob)
コード例 #29
0
 def test_submit(self, __submit__):
     lava = LAVABackend(None)
     testjob = TestJob(definition="foo: 1\n", backend=self.backend)
     self.assertEqual('1234', lava.submit(testjob))
     __submit__.assert_called_with("foo: 1\n")
コード例 #30
0
 def test_empty_lava_log_parsing(self):
     lava = LAVABackend(self.backend)
     log_data = BytesIO()
     log = lava.__parse_log__(log_data)
     self.assertEqual(0, len(log))