import logging
import pytest
import os
from lib389.utils import generate_ds_params
from lib389._constants import *
from lib389.topologies import topology_m2 as topo

DEBUGGING = os.getenv("DEBUGGING", default=False)
if DEBUGGING:
    logging.getLogger(__name__).setLevel(logging.DEBUG)
else:
    logging.getLogger(__name__).setLevel(logging.INFO)
log = logging.getLogger(__name__)


def test_mmr_ssl(topo):
    """Check that multi-master setup with SSL works"""

    log.info('Enabling SSL for all masters')
    for master in topo.ms.values():
        inst_num = int(master.serverid.split("master")[1])
        instance_data = generate_ds_params(inst_num, ReplicaRole.MASTER)
        secure_port = instance_data[SER_SECURE_PORT]

        master.stop()
        assert master.nss_ssl.reinit() is True
        assert master.nss_ssl.create_rsa_ca() is True
        assert master.nss_ssl.create_rsa_key_and_cert() is True
        master.start()

        master.rsa.create()
        master.config.set('nsslapd-secureport', str(secure_port))
        master.config.set('nsslapd-security', 'on')
        master.sslport = secure_port
        master.restart(post_open=False)

        log.info("Open a secure connection for {}".format(master.serverid))
        sec_conn = master.openConnection(certdir=master.get_cert_dir(), connOnly=True)
        assert sec_conn.whoami_s() == master.binddn


if __name__ == '__main__':
    # Run isolated
    # -s for DEBUG mode
    CURRENT_FILE = os.path.realpath(__file__)
    pytest.main("-s %s" % CURRENT_FILE)


