def test_submit_400(self, __submit__): lava = LAVABackend(None) testjob = TestJob( job_id='1234', backend=self.backend) with self.assertRaises(SubmissionIssue): lava.submit(testjob)
def test_submit_unauthorized(self, __submit__): lava = LAVABackend(None) testjob = TestJob( job_id='1234', backend=self.backend) with self.assertRaises(TemporarySubmissionIssue): lava.submit(testjob)
def test_receive_event_no_testjob(self): backend = MagicMock() backend.url = 'https://foo.tld/RPC2' lava = LAVABackend(backend) # just not crashing is OK lava.receive_event('foo.com.testjob', {})
def test_parse_results(self, get_results, get_details): lava = LAVABackend(None) testjob = TestJob(job_id='1234', backend=self.backend) status, metadata, results, metrics = lava.fetch(testjob) self.assertEqual(len(results), 1) self.assertEqual(len(metrics), 1)
def test_submit_multinode(self, __submit__): lava = LAVABackend(None) test_definition = "foo: 1\njob_name: bar" testjob = TestJob(definition=test_definition, backend=self.backend) self.assertEqual(['1234.0', '1234.1'], lava.submit(testjob)) self.assertEqual('bar', testjob.name) __submit__.assert_called_with(test_definition)
def test_receive_event_wrong_topic(self): backend = MagicMock() backend.url = 'https://foo.tld/RPC2' lava = LAVABackend(backend) # just not crashing is OK lava.receive_event('foo.com.device', {'job': '123'})
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' }) # 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)
def test_parse_results_metadata(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(JOB_METADATA, metadata)
def test_fetch_not_finished(self, get_results, get_details): lava = LAVABackend(None) testjob = TestJob( job_id='9999', backend=self.backend) lava.fetch(testjob) get_results.assert_not_called()
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)
def test_parse_results_metadata_with_suite_versions(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({"suite1": "1.0"}, metadata['suite_versions'])
def test_lava_log_parsing(self): lava = LAVABackend(self.backend) log_data = open( os.path.join(os.path.dirname(__file__), 'example-lava-log.yaml')).read() log = lava.__parse_log__(log_data) self.assertIn("target message", log) self.assertNotIn("info message", log)
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)
def test_submit_503(self, __submit__): lava = LAVABackend(None) testjob = TestJob( job_id='1234', target=self.project, backend=self.backend) with self.assertRaises(TemporarySubmissionIssue): lava.submit(testjob)
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)
def test_parse_results_empty_metadata(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({}, metadata)
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])
def test_parse_results_metadata_with_suite_versions( 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({"suite1": "1.0"}, metadata['suite_versions'])
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)
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))
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'])
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)
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)
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])
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)
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())
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)
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)
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()
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), 2) self.assertEqual(len(metrics), 2) self.assertEqual(10, metrics['DefinitionFoo/case_foo']) self.assertEqual('job_foo', testjob.name)
def test_automated_resubmit4(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)
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)
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)
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)
def test_receive_event_no_status(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'}) self.assertEqual('Unknown', TestJob.objects.get(pk=testjob.id).job_status)
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)
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)
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)
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))
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'}) # 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)
def test_lava_log_parsing(self): lava = LAVABackend(self.backend) log_data = open(os.path.join(os.path.dirname(__file__), 'example-lava-log.yaml')).read() log = lava.__parse_log__(log_data) self.assertIn("target message", log) self.assertNotIn("info message", log)