Ejemplo n.º 1
0
 def _populate_session_state(self, job, state):
     io_log = [
         IOLogRecord(count, 'stdout', line.encode('utf-8'))
         for count, line in enumerate(
             job.get_record_value('io_log').splitlines(keepends=True))
     ]
     result = MemoryJobResult({
         'outcome':
         job.get_record_value('outcome', job.get_record_value('status')),
         'comments':
         job.get_record_value('comments'),
         'execution_duration':
         job.get_record_value('duration'),
         'io_log':
         io_log,
     })
     state.update_job_result(job, result)
     if job.plugin == 'resource':
         new_resource_list = []
         for record in gen_rfc822_records_from_io_log(job, result):
             resource = Resource(record.data)
             new_resource_list.append(resource)
         if not new_resource_list:
             new_resource_list = [Resource({})]
         state.set_resource_list(job.id, new_resource_list)
     job_state = state.job_state_map[job.id]
     job_state.effective_category_id = job.get_record_value(
         'category_id', 'com.canonical.plainbox::uncategorised')
     job_state.effective_certification_status = job.get_record_value(
         'certification_status', 'unspecified')
Ejemplo n.º 2
0
 def test_parse_typical(self):
     """
     verify typical operation without any parsing errors
     """
     # Setup a mock job and result, give some io log to the result
     job = mock.Mock(spec=JobDefinition)
     result = mock.Mock(spec=IJobResult)
     result.get_io_log.return_value = [(0, 'stdout', b'attr: value1\n'),
                                       (0, 'stdout', b'\n'),
                                       (0, 'stdout', b'attr: value2\n')]
     # Parse the IO log records
     records = list(gen_rfc822_records_from_io_log(job, result))
     # Ensure that we saw both records
     self.assertEqual(records, [
         RFC822Record({'attr': 'value1'},
                      Origin(JobOutputTextSource(job), 1, 1)),
         RFC822Record({'attr': 'value2'},
                      Origin(JobOutputTextSource(job), 3, 3)),
     ])
Ejemplo n.º 3
0
 def test_parse_typical(self):
     """
     verify typical operation without any parsing errors
     """
     # Setup a mock job and result, give some io log to the result
     job = mock.Mock(spec=JobDefinition)
     result = mock.Mock(spec=IJobResult)
     result.get_io_log.return_value = [
         (0, 'stdout', b'attr: value1\n'),
         (0, 'stdout', b'\n'),
         (0, 'stdout', b'attr: value2\n')]
     # Parse the IO log records
     records = list(gen_rfc822_records_from_io_log(job, result))
     # Ensure that we saw both records
     self.assertEqual(records, [
         RFC822Record(
             {'attr': 'value1'}, Origin(JobOutputTextSource(job), 1, 1)),
         RFC822Record(
             {'attr': 'value2'}, Origin(JobOutputTextSource(job), 3, 3)),
     ])
Ejemplo n.º 4
0
 def test_parse_error(self, mock_logger):
     # Setup a mock job and result, give some io log to the result
     job = mock.Mock(spec=JobDefinition)
     result = mock.Mock(spec=IJobResult)
     result.get_io_log.return_value = [(0, 'stdout', b'attr: value1\n'),
                                       (0, 'stdout', b'\n'),
                                       (0, 'stdout', b'error\n'),
                                       (0, 'stdout', b'\n'),
                                       (0, 'stdout', b'attr: value2\n')]
     # Parse the IO log records
     records = list(gen_rfc822_records_from_io_log(job, result))
     # Ensure that only the first record was generated
     self.assertEqual(records, [
         RFC822Record({'attr': 'value1'},
                      Origin(JobOutputTextSource(job), 1, 1)),
     ])
     # Ensure that a warning was logged
     mock_logger.warning.assert_called_once_with(
         "local script %s returned invalid RFC822 data: %s", job,
         RFC822SyntaxError(None, 3,
                           "Unexpected non-empty line: 'error\\n'"))
Ejemplo n.º 5
0
 def test_parse_error(self, mock_logger):
     # Setup a mock job and result, give some io log to the result
     job = mock.Mock(spec=JobDefinition)
     result = mock.Mock(spec=IJobResult)
     result.get_io_log.return_value = [
         (0, 'stdout', b'attr: value1\n'),
         (0, 'stdout', b'\n'),
         (0, 'stdout', b'error\n'),
         (0, 'stdout', b'\n'),
         (0, 'stdout', b'attr: value2\n')]
     # Parse the IO log records
     records = list(gen_rfc822_records_from_io_log(job, result))
     # Ensure that only the first record was generated
     self.assertEqual(records, [
         RFC822Record(
             {'attr': 'value1'}, Origin(JobOutputTextSource(job), 1, 1)),
     ])
     # Ensure that a warning was logged
     mock_logger.warning.assert_called_once_with(
         "local script %s returned invalid RFC822 data: %s",
         job, RFC822SyntaxError(
             None, 3, "Unexpected non-empty line: 'error\\n'"))