def test_get_data(self): # Show that get_data accesses the given source and tries to retrieve # the right source_keys source_keys = ['source1', 'source2'] report1 = Mock() report2 = Mock() report1.hash = "report1_hash" report2.hash = "report2_hash" datastore = {'source1': report1, 'source2': report2} manager = Mock() logger = Mock() config, d = self.create_fake_config('test', **self.default_config_args) terminate_event = Mock() interval = 10 # Arbitrary for this test options = Mock() options.print_ = False destination_thread = DestinationThread(logger, config, source_keys=source_keys, source=datastore, dest=manager, interval=interval, terminate_event=terminate_event, oneshot=True, options=self.options) destination_thread.is_initial_run = False result_data = destination_thread._get_data() self.assertEqual(result_data, datastore)
def test_get_data_ignore_same_reports(self): # Show that the data returned from _get_data does not include those # reports whose hash is identical to that of the last one sent for # the given source source_keys = ['source1', 'source2'] report1 = Mock() report2 = Mock() report1.hash = "report1_hash" report2.hash = "report2_hash" datastore = {'source1': report1, 'source2': report2} last_report_for_source = {'source1': report1.hash} expected_data = {'source2': report2} manager = Mock() logger = Mock() config, d = self.create_fake_config('test', **self.default_config_args) terminate_event = Mock() interval = 10 # Arbitrary for this test options = Mock() options.print_ = False destination_thread = DestinationThread(logger, config, source_keys=source_keys, source=datastore, dest=manager, interval=interval, terminate_event=terminate_event, oneshot=True, options=self.options) destination_thread.is_initial_run = False destination_thread.last_report_for_source = last_report_for_source result_data = destination_thread._get_data() self.assertEqual(result_data, expected_data)
def test_get_data_ignore_same_reports(self): # Show that the data returned from _get_data does not include those # reports whose hash is identical to that of the last one sent for # the given source source_keys = ['source1', 'source2'] report1 = Mock() report2 = Mock() report1.hash = "report1_hash" report2.hash = "report2_hash" datastore = {'source1': report1, 'source2': report2} last_report_for_source = { 'source1': report1.hash } expected_data = { 'source2': report2 } manager = Mock() logger = Mock() config, d = self.create_fake_config('test', **self.default_config_args) terminate_event = Mock() interval = 10 # Arbitrary for this test options = Mock() options.print_ = False destination_thread = DestinationThread(logger, config, source_keys=source_keys, source=datastore, dest=manager, interval=interval, terminate_event=terminate_event, oneshot=True, options=self.options) destination_thread.is_initial_run = False destination_thread.last_report_for_source = last_report_for_source result_data = destination_thread._get_data() self.assertEqual(result_data, expected_data)
def test_get_data(self): # Show that get_data accesses the given source and tries to retrieve # the right source_keys source_keys = ['source1', 'source2'] report1 = Mock() report2 = Mock() report1.hash = "report1_hash" report2.hash = "report2_hash" datastore = {'source1': report1, 'source2': report2} manager = Mock() logger = Mock() config, d = self.create_fake_config('test', **self.default_config_args) terminate_event = Mock() interval = 10 # Arbitrary for this test options = Mock() options.print_ = False destination_thread = DestinationThread(logger, config, source_keys=source_keys, source=datastore, dest=manager, interval=interval, terminate_event=terminate_event, oneshot=True, options=self.options) destination_thread.is_initial_run = False result_data = destination_thread._get_data() self.assertEqual(result_data, datastore)
def test_duplicate_reports_are_ignored(self): """ Test that duplicate reports are filtered out when retrieving items from the data store """ source_keys = ['source1', 'source2'] interval = 1 terminate_event = Mock() virt1 = Mock() virt1.CONFIG_TYPE = 'esx' config, d = self.create_fake_config('test', **self.default_config_args) manager = Mock() guest1 = Guest('GUUID1', virt1.CONFIG_TYPE, Guest.STATE_RUNNING) report1 = DomainListReport(config, [guest1], hypervisor_id='hypervisor_id_1') report2 = DomainListReport(config, [guest1], hypervisor_id='hypervisor_id_2') report3 = DomainListReport(config, [guest1], hypervisor_id='hypervisor_id_3') datastore = { 'source1': report1, # Not changing, should be excluded later 'source2': report2, # Will change the report sent for source2 } data_to_send = { 'source1': report1, 'source2': report2, } logger = Mock() destination_thread = DestinationThread(logger, config, source_keys=source_keys, source=datastore, dest=manager, interval=interval, terminate_event=terminate_event, oneshot=False, options=self.options) destination_thread.is_initial_run = False destination_thread.is_terminated = Mock(return_value=False) destination_thread.record_status = Mock() destination_thread._send_data(data_to_send=data_to_send) expected_hashes = {} for source_key, report in data_to_send.items(): expected_hashes[source_key] = report.hash self.assertEqual(destination_thread.last_report_for_source, expected_hashes) # Pretend there were updates to the datastore from elsewhere destination_thread.source['source2'] = report3 next_data_to_send = destination_thread._get_data() expected_next_data_to_send = {'source2': report3} self.assertEqual(next_data_to_send, expected_next_data_to_send)
def test_duplicate_reports_are_ignored(self): """ Test that duplicate reports are filtered out when retrieving items from the data store """ source_keys = ['source1', 'source2'] interval = 1 terminate_event = Mock() virt1 = Mock() virt1.CONFIG_TYPE = 'esx' config, d = self.create_fake_config('test', **self.default_config_args) manager = Mock() guest1 = Guest('GUUID1', virt1.CONFIG_TYPE, Guest.STATE_RUNNING) report1 = DomainListReport(config, [guest1], hypervisor_id='hypervisor_id_1') report2 = DomainListReport(config, [guest1], hypervisor_id='hypervisor_id_2') report3 = DomainListReport(config, [guest1], hypervisor_id='hypervisor_id_3') datastore = { 'source1': report1, # Not changing, should be excluded later 'source2': report2, # Will change the report sent for source2 } data_to_send = { 'source1': report1, 'source2': report2, } logger = Mock() destination_thread = DestinationThread(logger, config, source_keys=source_keys, source=datastore, dest=manager, interval=interval, terminate_event=terminate_event, oneshot=False, options=self.options) destination_thread.is_initial_run = False destination_thread.is_terminated = Mock(return_value=False) destination_thread._send_data(data_to_send=data_to_send) expected_hashes = {} for source_key, report in data_to_send.items(): expected_hashes[source_key] = report.hash self.assertEqual(destination_thread.last_report_for_source, expected_hashes) # Pretend there were updates to the datastore from elsewhere destination_thread.source['source2'] = report3 next_data_to_send = destination_thread._get_data() expected_next_data_to_send = { 'source2': report3 } self.assertEqual(next_data_to_send, expected_next_data_to_send)
def test_send_data_clear_no_hypervisors(self): # BZ 1943486 # Show that a run of _send_data with zero hypervisors # for a config will clear the previous report hash source_keys = ['source1', 'source2'] report1 = Mock() report2 = Mock() report1.hash = "report1_hash" report2.hash = "report2_hash" datastore = {'source1': report1, 'source2': report2} last_report_for_source = { 'source1': report1.hash, 'source2': report2.hash } manager = Mock() logger = Mock() config, d = self.create_fake_config('source1', **self.default_config_args) terminate_event = Mock() interval = 10 # Arbitrary for this test options = Mock() options.print_ = False destination_thread = DestinationThread(logger, config, source_keys=source_keys, source=datastore, dest=manager, interval=interval, terminate_event=terminate_event, oneshot=True, options=self.options) destination_thread.is_initial_run = False destination_thread.last_report_for_source = last_report_for_source destination_thread.record_status = Mock() report = HostGuestAssociationReport(config, {'hypervisors': []}) destination_thread._send_data({'source1': report}) self.assertEqual(destination_thread.last_report_for_source, {'source2': report2.hash})