def unit_test_6():
    ctrl_be = CtrlBEDummy()
    ctrl_be.helper.content = ["#Start", "[mysql]", "port=3306"]
    cfg = wb_admin_config_file_be.ConfigFileSource((5, 1, 8), ctrl_be, profile)
    cfg.file_name = "dummy_name"
    cfg.parse_file_contents(ctrl_be.helper.content)

    ret = False

    opt = cfg.get_option("binlog-do-db")
    values = opt.get_values()
    values.append(option.Value("db1", True))
    values.append(option.Value("db2", True))
    opt.set_values(values)

    new_lines = cfg.generate_file_content()
    cfg = wb_admin_config_file_be.ConfigFileSource((5, 1, 8), ctrl_be, profile)
    cfg.file_name = "dummy_name"
    cfg.parse_file_contents(new_lines)

    ret = 'binlog-do-db = db2' in new_lines and 'binlog-do-db = db1' in new_lines

    new_lines = cfg.generate_file_content()
    ret = ret and 'binlog-do-db = db2' in new_lines and 'binlog-do-db = db1' in new_lines

    return (ret,
            "Adding multi-line option to non-empty file with missing [mysqld]")
def unit_test_10():
    ctrl_be = CtrlBEDummy()
    ctrl_be.helper.content = [
        "[mysqld]", "local-infile = 0", 'general-log-file="sdf1"',
        '#general_log_file="sdf2"', "replicate-ignore-db='data1'",
        "replicate-ignore-db='data2'", "replicate-ignore-db='data3'",
        "port=3306", "port=3307"
    ]
    cfg = wb_admin_config_file_be.ConfigFileSource((5, 1, 8), ctrl_be, profile)
    cfg.file_name = "dummy_name"
    cfg.parse_file_contents(ctrl_be.helper.content)

    ret = False

    opt = cfg.get_option("local-infile")
    (c, r, a) = opt.get_changeset()
    ret = len(c) == len(r) == len(a) == 0

    opt = cfg.get_option("tmpdir")
    values = opt.get_values()
    values.append(option.Value("", True))
    opt.set_values(values)

    #print cfg.generate_file_content()

    return (ret, "Testing cfg")
def unit_test_2():
    ctrl_be = CtrlBEDummy()
    ctrl_be.helper.content = [
        "#Start\n", "[mysqld]\n", "binlog-do-db=db1\n", "binlog-do-db=db2\n"
    ]
    cfg = wb_admin_config_file_be.ConfigFileSource((5, 1, 8), ctrl_be, profile)
    cfg.file_name = "dummy_name"
    cfg.parse_file_contents(ctrl_be.helper.content)

    ret = False

    cfg_opts = {}
    for name, opt in cfg.options.items():
        values = opt.get_values()
        default = opt.default_value()
        if len(values) == 2:
            cfg_opts[id(opt)] = opt

    ret = len(cfg_opts) == 1 and len(list(
        cfg_opts.values())[0].get_values()) == 2

    values = list(cfg_opts.values())[0].get_values()
    ret = ret and values[0].value == "db1" and values[1].value == "db2"

    return (ret, "Reading simple config with multiline option")
def unit_test_4():
    ctrl_be = CtrlBEDummy()
    ctrl_be.helper.content = []
    cfg = wb_admin_config_file_be.ConfigFileSource((5, 1, 8), ctrl_be, profile)
    cfg.file_name = "dummy_name"
    cfg.parse_file_contents(ctrl_be.helper.content)

    ret = False
    new_lines = cfg.generate_file_content()
    ret = '[mysqld]' in new_lines

    return (ret, "Parsing empty config")
def unit_test_3():
    ctrl_be = CtrlBEDummy()
    ctrl_be.helper.content = ["#Start\n", "[mysqld]\n", "ansi\n"]
    cfg = wb_admin_config_file_be.ConfigFileSource((5, 1, 8), ctrl_be, profile)
    cfg.file_name = "dummy_name"
    cfg.parse_file_contents(ctrl_be.helper.content)

    ret = False

    opt = cfg.get_option("chroot")
    values = opt.get_values()
    values.append(option.Value("/var/ww/mydir", True))
    opt.set_values(values)

    new_lines = cfg.generate_file_content()
    cfg = wb_admin_config_file_be.ConfigFileSource((5, 1, 8), ctrl_be, profile)
    cfg.file_name = "dummy_name"
    cfg.parse_file_contents(new_lines)

    opt = cfg.get_option("chroot")
    ret = opt.get_values()[0].value == '"/var/ww/mydir"'

    return (ret, "Adding dirname/filename option")
def unit_test_1():
    ctrl_be = CtrlBEDummy()
    ctrl_be.helper.content = ["#Start\n", "[mysqld]\n", "ansi\n"]
    cfg = wb_admin_config_file_be.ConfigFileSource((5, 1, 8), ctrl_be, profile)
    cfg.file_name = "dummy_name"
    cfg.parse_file_contents(ctrl_be.helper.content)

    ret = False

    for name, opt in cfg.options.iteritems():
        values = opt.get_values()
        default = opt.default_value()
        if len(values) > 0:
            if default is not True:
                if name == 'ansi' and values[0].enabled == True:
                    ret = True

    return (ret, "Reading simple config")
def unit_test_9():
    ctrl_be = CtrlBEDummy()
    ctrl_be.helper.content = [
        "[mysqld]", "local-infile = 0", 'general-log-file="sdf1"',
        '#general_log_file="sdf2"', "replicate-ignore-db='data1'",
        "replicate-ignore-db='data2'", "replicate-ignore-db='data3'",
        "port=3306", "port=3307"
    ]
    cfg = wb_admin_config_file_be.ConfigFileSource((5, 1, 8), ctrl_be, profile)
    cfg.file_name = "dummy_name"
    cfg.parse_file_contents(ctrl_be.helper.content)

    ret = False

    opt = cfg.get_option("replicate-ignore-db")
    values = opt.get_values()
    ret = len(values) == 3

    return (ret, "Testing cfg")
def unit_test_8():
    ctrl_be = CtrlBEDummy()
    ctrl_be.helper.content = [
        "#Start", "[mysql]", "port=3306", "[mysqld]", 'binlog-do-db = db1',
        'binlog-do-db = db2'
    ]
    cfg = wb_admin_config_file_be.ConfigFileSource((5, 1, 8), ctrl_be, profile)
    cfg.file_name = "dummy_name"
    cfg.parse_file_contents(ctrl_be.helper.content)

    ret = False

    opt = cfg.get_option("binlog-do-db")
    values = opt.get_values()
    values[1].enabled = False

    new_lines = cfg.generate_file_content()
    ret = 'binlog-do-db = db2' not in new_lines and 'binlog-do-db = db1' in new_lines

    return (ret, "Deleting one value from a multi-line option")
def unit_test_11():
    ctrl_be = CtrlBEDummy()
    ctrl_be.helper.content = [
        "[mysqld]", "local-infile = 0", 'general-log-file="sdf1"',
        '#general_log_file="sdf2"', "replicate-ignore-db='data1'",
        "replicate-ignore-db='data2'", "replicate-ignore-db='data3'",
        "port=3306", "port=3307"
    ]
    cfg = wb_admin_config_file_be.ConfigFileSource((5, 1, 8), ctrl_be, profile)
    cfg.file_name = "dummy_name"
    cfg.parse_file_contents(ctrl_be.helper.content)

    ret = False

    opt = cfg.get_option("skip-networking")
    opt.set_values([option.Value(None, True)])
    opt.set_values([option.Value(None, False)])
    (c, r, a) = opt.get_changeset()

    cont = cfg.generate_file_content()

    return (ret, "Testing cfg")