예제 #1
0
 def test_encode_decode(self):
     kvp = {'key': 'key1', 'value': 'value1'}
     kvp_reporting = handlers.HyperVKvpReportingHandler()
     data = kvp_reporting._encode_kvp_item(kvp['key'], kvp['value'])
     self.assertEqual(len(data), kvp_reporting.HV_KVP_RECORD_SIZE)
     decoded_kvp = kvp_reporting._decode_kvp_item(data)
     self.assertEqual(kvp, decoded_kvp)
예제 #2
0
 def test_finish_event_result_is_logged(self):
     reporter = handlers.HyperVKvpReportingHandler(
         kvp_file_path=self.tmp_file_path)
     reporter.publish_event(
         events.FinishReportingEvent('name2',
                                     'description1',
                                     result=events.status.FAIL))
     reporter.q.join()
     self.assertIn('FAIL', list(reporter._iterate_kvps(0))[0]['value'])
예제 #3
0
 def test_file_operation_issue(self):
     os.remove(self.tmp_file_path)
     reporter = handlers.HyperVKvpReportingHandler(
         kvp_file_path=self.tmp_file_path)
     reporter.publish_event(
         events.FinishReportingEvent('name2',
                                     'description1',
                                     result=events.status.FAIL))
     reporter.q.join()
예제 #4
0
    def test_events_with_higher_incarnation_not_over_written(self):
        reporter = handlers.HyperVKvpReportingHandler(
            kvp_file_path=self.tmp_file_path)

        self.assertEqual(0, len(list(reporter._iterate_kvps(0))))

        reporter.publish_event(
            events.ReportingEvent('foo', 'name1', 'description'))
        reporter.publish_event(
            events.ReportingEvent('foo', 'name2', 'description'))
        reporter.q.join()
        self.assertEqual(2, len(list(reporter._iterate_kvps(0))))

        reporter3 = handlers.HyperVKvpReportingHandler(
            kvp_file_path=self.tmp_file_path)
        reporter3.incarnation_no = reporter.incarnation_no - 1
        reporter3.publish_event(
            events.ReportingEvent('foo', 'name3', 'description'))
        reporter3.q.join()
        self.assertEqual(3, len(list(reporter3._iterate_kvps(0))))
예제 #5
0
    def test_event_very_long(self):
        reporter = handlers.HyperVKvpReportingHandler(
            kvp_file_path=self.tmp_file_path)
        description = 'ab' * reporter.HV_KVP_EXCHANGE_MAX_VALUE_SIZE
        long_event = events.FinishReportingEvent('event_name',
                                                 description,
                                                 result=events.status.FAIL)
        reporter.publish_event(long_event)
        reporter.q.join()
        kvps = list(reporter._iterate_kvps(0))
        self.assertEqual(3, len(kvps))

        # restore from the kvp to see the content are all there
        full_description = ''
        for i in range(len(kvps)):
            msg_slice = json.loads(kvps[i]['value'])
            self.assertEqual(msg_slice['msg_i'], i)
            full_description += msg_slice['msg']
        self.assertEqual(description, full_description)
예제 #6
0
    def test_event_type_can_be_filtered(self):
        reporter = handlers.HyperVKvpReportingHandler(
            kvp_file_path=self.tmp_file_path, event_types=['foo', 'bar'])

        reporter.publish_event(
            events.ReportingEvent('foo', 'name', 'description'))
        reporter.publish_event(
            events.ReportingEvent('some_other', 'name', 'description3'))
        reporter.q.join()

        kvps = list(reporter._iterate_kvps(0))
        self.assertEqual(1, len(kvps))

        reporter.publish_event(
            events.ReportingEvent('bar', 'name', 'description2'))
        reporter.q.join()
        kvps = list(reporter._iterate_kvps(0))
        self.assertEqual(2, len(kvps))

        self.assertIn('foo', kvps[0]['key'])
        self.assertIn('bar', kvps[1]['key'])
        self.assertNotIn('some_other', kvps[0]['key'])
        self.assertNotIn('some_other', kvps[1]['key'])