def test__calling_importer_issues_rpc_calls_to_clusters(self): # Some clusters that we'll ask to import resources. rack_1 = factory.make_RackController() rack_2 = factory.make_RackController() # Connect only cluster #1. rack_1_conn = self.rpc.makeCluster(rack_1, ImportBootImages) rack_1_conn.ImportBootImages.return_value = succeed({}) # Do the import. importer = RackControllersImporter.new( [rack_1.system_id, rack_2.system_id]) results = importer(lock=DeferredLock()).wait(5) # The results are a list (it's from a DeferredList). self.assertThat( results, MatchesListwise(( # Success when calling rack_1. Equals((True, {})), # Failure when calling rack_1: no connection. MatchesListwise(( Is(False), MatchesAll( IsInstance(Failure), MatchesStructure( value=IsInstance(NoConnectionsAvailable)), ), )), )), )
def test__new_obtains_system_ids_for_accepted_clusters_if_not_given(self): rack = factory.make_RackController() importer = RackControllersImporter.new(sources=[], proxy=None) self.assertThat( importer, MatchesStructure(system_ids=Equals((rack.system_id, ))))
def test_new_obtains_None_proxy_if_disabled(self): # Disable boot source cache signals. self.addCleanup(bootsources.signals.enable) bootsources.signals.disable() proxy = factory.make_simple_http_url() Config.objects.set_config("http_proxy", proxy) Config.objects.set_config("enable_http_proxy", False) importer = RackControllersImporter.new(system_ids=[], sources=[]) self.assertThat(importer, MatchesStructure(proxy=Equals(None)))
def test_run_calls_importer_and_reports_results(self): # Some clusters that we'll ask to import resources. rack_1 = factory.make_RackController() rack_2 = factory.make_RackController() rack_3 = factory.make_RackController() # Cluster #1 will work fine. cluster_1 = self.rpc.makeCluster(rack_1, ImportBootImages) cluster_1.ImportBootImages.return_value = succeed({}) # Cluster #2 will break. cluster_2 = self.rpc.makeCluster(rack_2, ImportBootImages) cluster_2.ImportBootImages.return_value = fail(ZeroDivisionError()) # Cluster #3 is not connected. # Do the import with reporting. importer = RackControllersImporter.new( [rack_1.system_id, rack_2.system_id, rack_3.system_id] ) with TwistedLoggerFixture() as logger: importer.run().wait(5) self.assertDocTestMatches( """\ ... --- Rack controller (%s) has imported boot resources. --- Rack controller (%s) failed to import boot resources. Traceback (most recent call last): ... --- Rack controller (%s) did not import boot resources; it is not connected to the region at this time. """ % (rack_1.system_id, rack_2.system_id, rack_3.system_id), logger.output, )
def test_new_obtains_sources_if_not_given(self): importer = RackControllersImporter.new(system_ids=[], proxy=None) self.assertThat( importer, MatchesStructure(sources=Equals([get_simplestream_endpoint()])), )
def test_new_obtains_system_ids_if_not_given(self): importer = RackControllersImporter.new(sources=[], proxy=None) self.assertThat(importer, MatchesStructure(system_ids=Equals(())))