void
test_custom_configuration_directory (void)
{
    const gchar custom_configuration_directory[] = "/tmp/milter-manager/";

    cut_assert_equal_string(
        NULL,
        milter_manager_configuration_get_custom_configuration_directory(config));
    milter_manager_configuration_set_custom_configuration_directory(
        config, custom_configuration_directory);
    cut_assert_equal_string(
        custom_configuration_directory,
        milter_manager_configuration_get_custom_configuration_directory(config));
}
static void
append_custom_configuration_directory (MilterManagerConfiguration *config)
{
    struct passwd *password;
    const gchar *effective_user;
    gchar *custom_config_directory;

    effective_user = milter_manager_configuration_get_effective_user(config);
    if (!effective_user)
        return;

    password = find_password(effective_user);
    if (!password)
        return;

    custom_config_directory =
        g_strdup(milter_manager_configuration_get_custom_configuration_directory(config));
    if (!custom_config_directory)
        custom_config_directory = g_build_filename(password->pw_dir,
                                                   ".milter-manager",
                                                   NULL);
    if (!g_file_test(custom_config_directory, G_FILE_TEST_EXISTS)) {
        if (g_mkdir(custom_config_directory, 0700) == -1) {
            milter_manager_error("failed to create custom "
                                 "configuration directory: <%s>: %s",
                                 custom_config_directory,
                                 g_strerror(errno));
            return;
        }
        if (chown(custom_config_directory,
                  password->pw_uid, password->pw_gid) == -1) {
            milter_manager_error("failed to change owner and group of "
                                 "configuration directory: <%s>: <%u:%u>: %s",
                                 custom_config_directory,
                                 password->pw_uid, password->pw_gid,
                                 g_strerror(errno));
            return;
        }
    }

    milter_manager_configuration_append_load_path(config,
                                                  custom_config_directory);
    g_free(custom_config_directory);
}
static void
milter_assert_default_configuration_helper (MilterManagerConfiguration *config)
{
    cut_assert_false(milter_manager_configuration_is_privilege_mode(config));

    cut_assert_equal_string(
        MILTER_MANAGER_DEFAULT_CONNECTION_SPEC,
        milter_manager_configuration_get_manager_connection_spec(config));
    cut_assert_equal_string(
        NULL,
        milter_manager_configuration_get_controller_connection_spec(config));
    cut_assert_equal_string(
        MILTER_MANAGER_DEFAULT_EFFECTIVE_USER,
        milter_manager_configuration_get_effective_user(config));
    cut_assert_equal_string(
        MILTER_MANAGER_DEFAULT_EFFECTIVE_GROUP,
        milter_manager_configuration_get_effective_group(config));
    cut_assert_equal_string(
        MILTER_MANAGER_DEFAULT_PID_FILE,
        milter_manager_configuration_get_pid_file(config));
    cut_assert_equal_string(
        NULL,
        milter_manager_configuration_get_custom_configuration_directory(config));

    cut_assert_equal_uint(
        0660,
        milter_manager_configuration_get_manager_unix_socket_mode(config));
    cut_assert_equal_string(
        MILTER_MANAGER_DEFAULT_SOCKET_GROUP,
        milter_manager_configuration_get_manager_unix_socket_group(config));
    cut_assert_equal_uint(
        0660,
        milter_manager_configuration_get_controller_unix_socket_mode(config));
    cut_assert_equal_string(
        NULL,
        milter_manager_configuration_get_controller_unix_socket_group(config));

    cut_assert_true(milter_manager_configuration_is_remove_manager_unix_socket_on_close(config));
    cut_assert_true(milter_manager_configuration_is_remove_controller_unix_socket_on_close(config));
    cut_assert_true(milter_manager_configuration_is_remove_manager_unix_socket_on_create(config));
    cut_assert_true(milter_manager_configuration_is_remove_controller_unix_socket_on_create(config));
    cut_assert_false(milter_manager_configuration_is_daemon(config));

    cut_assert_equal_uint(
        10,
        milter_manager_configuration_get_maintenance_interval(config));
    cut_assert_equal_uint(
        MILTER_CLIENT_DEFAULT_SUSPEND_TIME_ON_UNACCEPTABLE,
        milter_manager_configuration_get_suspend_time_on_unacceptable(config));
    cut_assert_equal_uint(
        MILTER_CLIENT_DEFAULT_MAX_CONNECTIONS,
        milter_manager_configuration_get_max_connections(config));
    cut_assert_equal_uint(
        0,
        milter_manager_configuration_get_max_file_descriptors(config));

    gcut_assert_equal_enum(
        MILTER_TYPE_STATUS,
        MILTER_STATUS_ACCEPT,
        milter_manager_configuration_get_fallback_status(config));

    cut_assert_equal_string(
        MILTER_MANAGER_PACKAGE_PLATFORM,
        milter_manager_configuration_get_package_platform(config));
    cut_assert_equal_string(
        MILTER_MANAGER_PACKAGE_OPTIONS,
        milter_manager_configuration_get_package_options(config));

    cut_assert_equal_uint(
        0,
        milter_manager_configuration_get_connection_check_interval(config));

    gcut_assert_equal_enum(
        MILTER_TYPE_CLIENT_EVENT_LOOP_BACKEND,
        MILTER_CLIENT_EVENT_LOOP_BACKEND_GLIB,
        milter_manager_configuration_get_event_loop_backend(config));
    cut_assert_equal_uint(
        0,
        milter_manager_configuration_get_n_workers(config));

    cut_assert_equal_uint(
        0,
        milter_manager_configuration_get_default_packet_buffer_size(config));

    cut_assert_equal_boolean(
        TRUE,
        milter_manager_configuration_get_use_syslog(config));
    cut_assert_equal_string(
        NULL,
        milter_manager_configuration_get_syslog_facility(config));

    cut_assert_equal_uint(
        MILTER_CHUNK_SIZE,
        milter_manager_configuration_get_chunk_size(config));

    cut_assert_equal_uint(
        0,
        milter_manager_configuration_get_max_pending_finished_sessions(config));

    if (expected_children)
        g_object_unref(expected_children);
    expected_children = milter_manager_children_new(config, loop);
    if (actual_children)
        g_object_unref(actual_children);
    actual_children = milter_manager_children_new(config, loop);
    milter_manager_configuration_setup_children(config, actual_children, NULL);
    milter_assert_equal_children(expected_children, actual_children);
    g_object_unref(actual_children);
    actual_children = NULL;
}