def test_sends_results_raises_podactionfail_on_signalexception(self): mock_signal = self.patch(pods, "signal") err_msg = factory.make_name("error_message") mock_signal.side_effect = SignalException(err_msg) name = (factory.make_name("name"),) system_id = factory.make_name("system_id") fake_driver = MagicMock() fake_driver.get_commissioning_data.return_value = succeed( {factory.make_name("filename"): factory.make_name("data")} ) self.patch(PodDriverRegistry, "get_item").return_value = fake_driver with ExpectedException( exceptions.PodActionFail, re.escape( f"Unable to send Pod commissioning information for {name}({system_id}): {err_msg}" ), ): yield pods.send_pod_commissioning_results( pod_type=factory.make_name("type"), context={}, pod_id=random.randint(1, 10), name=name, system_id=system_id, consumer_key=factory.make_name("consumer_key"), token_key=factory.make_name("token_key"), token_secret=factory.make_name("token_secret"), metadata_url=urlparse(factory.make_url()), )
def test_unknown_pod_raises_UnknownPodType(self): with ExpectedException(exceptions.UnknownPodType): yield pods.send_pod_commissioning_results( pod_type=factory.make_name("type"), context={}, pod_id=random.randint(1, 10), name=factory.make_name("name"), system_id=factory.make_name("system_id"), consumer_key=factory.make_name("consumer_key"), token_key=factory.make_name("token_key"), token_secret=factory.make_name("token_secret"), metadata_url=urlparse(factory.make_url()), )
def test_handles_driver_raising_NotImplementedError(self): fake_driver = MagicMock() fake_driver.get_commissioning_data.return_value = fail( NotImplementedError()) self.patch(PodDriverRegistry, "get_item").return_value = fake_driver with ExpectedException(NotImplementedError): yield pods.send_pod_commissioning_results( pod_type=factory.make_name("type"), context={}, pod_id=random.randint(1, 10), name=factory.make_name("name"), system_id=factory.make_name("system_id"), consumer_key=factory.make_name("consumer_key"), token_key=factory.make_name("token_key"), token_secret=factory.make_name("token_secret"), metadata_url=urlparse(factory.make_url()), )
def test_handles_driver_raising_any_Exception(self): fake_driver = MagicMock() fake_exception_type = factory.make_exception_type() fake_exception_msg = factory.make_name("error") fake_exception = fake_exception_type(fake_exception_msg) fake_driver.get_commissioning_data.return_value = fail(fake_exception) self.patch(PodDriverRegistry, "get_item").return_value = fake_driver with ExpectedException( exceptions.PodActionFail, re.escape("Failed talking to pod: " + fake_exception_msg), ): yield pods.send_pod_commissioning_results( pod_type=factory.make_name("type"), context={}, pod_id=random.randint(1, 10), name=factory.make_name("name"), system_id=factory.make_name("system_id"), consumer_key=factory.make_name("consumer_key"), token_key=factory.make_name("token_key"), token_secret=factory.make_name("token_secret"), metadata_url=urlparse(factory.make_url()), )
def test_handles_driver_not_returning_Deferred(self): pod_type = factory.make_name("type") fake_driver = MagicMock() fake_driver.get_commissioning_data.return_value = None self.patch(PodDriverRegistry, "get_item").return_value = fake_driver with ExpectedException( exceptions.PodActionFail, re.escape( f"bad pod driver '{pod_type}'; 'get_commissioning_data' did not " "return Deferred."), ): yield pods.send_pod_commissioning_results( pod_type=pod_type, context={}, pod_id=random.randint(1, 10), name=factory.make_name("name"), system_id=factory.make_name("system_id"), consumer_key=factory.make_name("consumer_key"), token_key=factory.make_name("token_key"), token_secret=factory.make_name("token_secret"), metadata_url=urlparse(factory.make_url()), )
def test_sends_results(self): mock_signal = self.patch(pods, "signal") consumer_key = factory.make_name("consumer_key") token_key = factory.make_name("token_key") token_secret = factory.make_name("token_secret") metadata_url = factory.make_url() filename1 = factory.make_name("filename1") data1 = {factory.make_name("key1"): factory.make_name("value1")} filename2 = factory.make_name("filename2") data2 = {factory.make_name("key2"): factory.make_name("value2")} fake_driver = MagicMock() fake_driver.get_commissioning_data.return_value = succeed( {filename1: data1, filename2: data2} ) self.patch(PodDriverRegistry, "get_item").return_value = fake_driver ret = yield pods.send_pod_commissioning_results( pod_type=factory.make_name("type"), context={}, pod_id=random.randint(1, 10), name=factory.make_name("name"), system_id=factory.make_name("system_id"), consumer_key=consumer_key, token_key=token_key, token_secret=token_secret, metadata_url=urlparse(metadata_url), ) self.assertDictEqual({}, ret) self.assertThat( mock_signal, MockCallsMatch( call( url=metadata_url, creds={ "consumer_key": consumer_key, "token_key": token_key, "token_secret": token_secret, "consumer_secret": "", }, status="WORKING", files={ filename1: json.dumps(data1, indent=4).encode(), f"{filename1}.out": json.dumps( data1, indent=4 ).encode(), f"{filename1}.err": b"", f"{filename1}.yaml": b"", }, exit_status=0, error=f"Finished {filename1}: 0", ), call( url=metadata_url, creds={ "consumer_key": consumer_key, "token_key": token_key, "token_secret": token_secret, "consumer_secret": "", }, status="WORKING", files={ filename2: json.dumps(data2, indent=4).encode(), f"{filename2}.out": json.dumps( data2, indent=4 ).encode(), f"{filename2}.err": b"", f"{filename2}.yaml": b"", }, exit_status=0, error=f"Finished {filename2}: 0", ), ), )