def test_check_cert_exist_when_config_key_is_missing(self,
                                                         logging_mock,
                                                         config_mock):
        config_mock.get_config.return_value = {
            'ssl': {}
        }

        with self.assertRaises(KeyError) as error:
            scmb._has_valid_certificates()

        logging_mock.error.assert_called_with(
            'Invalid configuration for ssl cert. '
            'Verify the [ssl] section in config file')

        self.assertEqual("'SSLCertFile'", str(error.exception))
    def test_get_cert_already_exists(self, get_oneview_client, config_mock,
                                     _is_cert_working_with_scmb):
        config_mock.get_config.return_value = {
            'ssl': {
                'SSLCertFile': 'cert_file.crt'
            }
        }

        os.makedirs(name='scmb', exist_ok=True)
        self.addCleanup(shutil.rmtree, 'scmb')

        # Certs Generated with success
        oneview_client = mock.MagicMock()
        oneview_client.certificate_authority.get.return_value = "CA CERT"
        oneview_client.certificate_rabbitmq.generate.return_value = True
        oneview_client.certificate_rabbitmq.get_key_pair.return_value = {
            'base64SSLCertData': 'Client CERT',
            'base64SSLKeyData': 'Client Key'}
        get_oneview_client.return_value = oneview_client
        _is_cert_working_with_scmb.return_value = True

        # Certs already exist
        e = HPOneViewException({
            'errorCode': 'RABBITMQ_CLIENTCERT_CONFLICT',
            'message': 'certs already exist',
        })
        oneview_client.certificate_rabbitmq.generate.side_effect = e
        scmb.get_cert()
        self.assertTrue(scmb._has_valid_certificates())
    def test_init_event_service_with_valid_certificate(self,
                                                       get_oneview_client,
                                                       config_mock, conn_param,
                                                       block_conn, channel):
        config_mock.get_config.return_value = {
            'ssl': {
                'SSLCertFile': 'cert_file.crt'
            },
        }

        os.makedirs(name='scmb', exist_ok=True)
        self.addCleanup(shutil.rmtree, 'scmb')

        oneview_client = mock.MagicMock()
        oneview_client.certificate_authority.get.return_value = "CA CERT"
        oneview_client.certificate_rabbitmq.generate.return_value = True
        get_oneview_client.return_value = oneview_client
        oneview_client.certificate_rabbitmq.get_key_pair.return_value = {
            'base64SSLCertData': 'Client CERT',
            'base64SSLKeyData': 'Client Key'}

        pika_mock = mock.MagicMock()
        pika_mock.channel.Channel = {}
        block_conn.return_value = pika_mock
        conn_param.return_value = {}
        channel.return_value = {}

        scmb.init_event_service()

        self.assertTrue(scmb._has_valid_certificates())
        self.assertTrue(scmb._is_cert_working_with_scmb())
    def test_generate_new_cert_for_oneview(self, get_oneview_client,
                                           _is_cert_working_with_scmb,
                                           config_mock):
        config_mock.get_config.return_value = {
            'ssl': {
                'SSLCertFile': 'cert_file.crt'
            }
        }

        cert_key_pair = {
            'base64SSLCertData': 'Client CERT',
            'base64SSLKeyData': 'Client Key'
        }

        # Certs Generated with success
        oneview_client = mock.MagicMock()
        e = HPOneViewException({
            'errorCode': 'RESOURCE_NOT_FOUND',
            'message': 'Resource not found.',
        })

        oneview_client.certificate_authority.get.return_value = "CA CERT"
        oneview_client.certificate_rabbitmq.generate.return_value = True
        oneview_client.certificate_rabbitmq.get_key_pair.side_effect = \
            [e, cert_key_pair]
        get_oneview_client.return_value = oneview_client
        _is_cert_working_with_scmb.return_value = True
        scmb.get_cert()
        self.assertTrue(scmb._has_valid_certificates())
    def test_check_cert_exist(self, isfile, config_mock,
                              _is_cert_working_with_scmb):
        config_mock.get_config.return_value = {
            'ssl': {
                'SSLCertFile': ''
            }
        }

        # Files exist
        isfile.return_value = True
        _is_cert_working_with_scmb.return_value = True
        self.assertTrue(scmb._has_valid_certificates())

        # Certs files don't exist
        isfile.return_value = False
        _is_cert_working_with_scmb.return_value = False
        self.assertFalse(scmb._has_valid_certificates())
        self.assertFalse(scmb._has_valid_certificates())
    def test_init_event_service_with_certs_already_generated(self, config_mock,
                                                             get_ov_client,
                                                             _has_certs_path,
                                                             conn_param,
                                                             block_conn,
                                                             channel):
        config_mock.get_config.return_value = {
            'ssl': {
                'SSLCertFile': '/dir/cert_file.crt'
            },
        }

        pika_mock = mock.MagicMock()
        pika_mock.channel.Channel = {}
        block_conn.return_value = pika_mock
        conn_param.return_value = {}
        channel.return_value = {}
        oneview_client = mock.MagicMock()
        get_ov_client.return_value = oneview_client
        _has_certs_path.return_value = True

        scmb.init_event_service()

        self.assertTrue(scmb._has_valid_certificates())
    def test_init_event_service_on_session_mode(self, config_mock):
        config_mock.get_authentication_mode.return_value = 'session'
        scmb.init_event_service()

        self.assertFalse(scmb._has_valid_certificates())
        self.assertFalse(scmb._is_cert_working_with_scmb())