def test_user_raises_certificate_hostname_mismatch_error( self, mock_init_logic): mock_init_logic.fetch_account_from_server = MagicMock( side_effect=CertificateHostnameMismatchException) init_controller = InitController(ConjurrcData(account=None), mock_init_logic, False, self.ssl_verification_metadata) with self.assertRaises(CertificateHostnameMismatchException): init_controller._get_account_info_if_not_exist()
def test_user_does_not_input_https_will_raises_error(self, mock_input): mock_conjurrc_data = ConjurrcData(conjur_url='somehost') with self.assertRaises(InvalidURLFormatException) as context: init_controller = InitController(mock_conjurrc_data, self.init_logic, self.force_overwrite, self.ssl_verification_metadata) init_controller._validate_conjur_url(MOCK_FORMATTED_URL) self.assertRegex(str(context.exception), 'Error: undefined behavior')
def test_user_does_not_input_url_raises_error(self, mock_input): mock_conjurrc_data = ConjurrcData(conjur_url=None) with self.assertRaises(InvalidURLFormatException) as context: init_controller = InitController(mock_conjurrc_data, self.init_logic, self.force_overwrite, self.ssl_verification_metadata) init_controller._prompt_for_conjur_url() self.assertRegex(str(context.exception), 'Error: URL is required')
def test_init_without_host_raises_error(self, mock_init_logic, mock_input): mock_init_logic.fetch_account_from_server = MagicMock( side_effect=HttpStatusError(status=401)) mock_conjurrc_data = ConjurrcData() with self.assertRaises(MissingRequiredParameterException): mock_conjurrc_data.conjur_url = 'https://someurl' mock_init_controller = InitController( mock_conjurrc_data, mock_init_logic, False, self.ssl_verification_metadata) mock_init_controller._get_account_info_if_not_exist()
def test_init_host_is_added_to_conjurrc_object(self, mock_init_logic, mock_input): mock_init_logic.fetch_account_from_server = MagicMock( side_effect=HttpStatusError(status=401)) mock_conjurrc_data = ConjurrcData() mock_conjurrc_data.conjur_url = "https://someaccount" mock_init_controller = InitController(mock_conjurrc_data, mock_init_logic, False, self.ssl_verification_metadata) mock_init_controller._get_account_info_if_not_exist() self.assertEquals(mock_conjurrc_data.conjur_account, 'someaccount')
def test_init_user_trusts_cert_returns_cert(self, mock_input): mock_certificate = "cert" self.conjurrc_data.conjur_url = "https://someurl" self.init_logic.get_certificate = MagicMock( return_value=["12:AB", mock_certificate]) init_controller = InitController(self.conjurrc_data, self.init_logic, self.force_overwrite, self.ssl_verification_metadata) fetched_certificate = init_controller._get_server_certificate( MOCK_FORMATTED_URL) self.assertEquals(fetched_certificate, mock_certificate)
def test_user_supplied_certificate_returns_none(self, mock_input): cert_file = "/some/path/somepem.pem" self.conjurrc_data.cert_file = cert_file ssl_verification_data = SslVerificationMetadata( SslVerificationMode.CA_BUNDLE, cert_file) init_controller = InitController(self.conjurrc_data, self.init_logic, self.force_overwrite, ssl_verification_data) fetched_certificate = init_controller._get_server_certificate( MOCK_FORMATTED_URL) assert self.conjurrc_data.cert_file == "/some/path/somepem.pem" self.assertEquals(fetched_certificate, None)
def test_init_not_trusting_cert_raises_error(self, mock_input): self.conjurrc_data.conjur_url = 'https://someurl' ctx = SSL.Context(method=SSL.TLSv1_2_METHOD) sock = OpenSSL.SSL.Connection(ctx) self.init_logic.connect = MagicMock(return_value=sock) self.init_logic.get_certificate = MagicMock( return_value=["12:AB", "somecertchain"]) with self.assertRaises(CertificateNotTrustedException): init_controller = InitController(self.conjurrc_data, self.init_logic, self.force_overwrite, self.ssl_verification_metadata) init_controller._get_server_certificate(MOCK_FORMATTED_URL)
def test_user_confirms_force_overwrites_writes_conjurrc_to_file( self, mock_input, mock_init_logic): with redirect_stdout(self.capture_stream): self.conjurrc_data.conjur_url = "https://someurl" init_controller = InitController(self.conjurrc_data, mock_init_logic, False, self.ssl_verification_metadata) # Mock that a conjurrc file already exists mock_init_logic.write_conjurrc.return_value = False init_controller.write_conjurrc() self.assertRegex(self.capture_stream.getvalue(), "Configuration written to") mock_init_logic.write_conjurrc.assert_called_with( '/root/.conjurrc', self.conjurrc_data, True) self.assertEquals(mock_init_logic.write_conjurrc.call_count, 2)
def test_init_constructor(self): mock_conjurrc_data = None mock_init_logic = None mock_force = False mock_ssl_verification_data = SslVerificationMetadata( SslVerificationMode.INSECURE) InitController(mock_conjurrc_data, mock_init_logic, mock_force, mock_ssl_verification_data) assert InitController.conjurrc_data == mock_conjurrc_data assert InitController.init_logic == mock_init_logic assert InitController.force_overwrite == mock_force
def test_user_does_not_overwrite_raises_error(self, mock_input): init_controller = InitController(ConjurrcData, InitLogic, False, self.ssl_verification_metadata) with self.assertRaises(Exception): init_controller.ensure_overwrite_file('someconfig')
def test_user_supplies_cert_writes_to_file_not_called( self, mock_init_logic): InitController._write_certificate(self, "https://some/cert/path") mock_init_logic.write_certificate_to_file.assert_not_called()