Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
test_import_jobs.c File Reference
#include "common/utility.h"
#include "common/variables.h"
#include "common/conf.h"
#include "common/image.h"
#include "control/control.h"
#include "control/jobs/import_jobs.h"
#include "darktable.h"
#include "imageio/imageio_jpeg.h"
#include "system/macros.h"
#include "system/mem_alloc.h"
#include <setjmp.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
#include <fcntl.h>
#include <cmocka.h>
#include <glib/gstdio.h>
#include <io.h>
+ Include dependency graph for test_import_jobs.c:

Go to the source code of this file.

Data Structures

struct  extension_case_t
 
struct  import_completion_t
 
struct  directory_failure_case_t
 
struct  directory_failure_fixture_t
 

Macros

#define test_dup   _dup
 
#define test_dup2   _dup2
 
#define test_close   _close
 

Typedefs

typedef struct extension_case_t extension_case_t
 
typedef struct import_completion_t import_completion_t
 
typedef struct directory_failure_case_t directory_failure_case_t
 
typedef struct directory_failure_fixture_t directory_failure_fixture_t
 

Functions

int _import_copy_file (const char *filename, const char *destination, dt_control_import_t *data, gchar *img_path_to_db, size_t pathname_len, GList **discarded)
 copy a file to a destination path after checking if everything is allright.
 
static void _import_completed (const char *source, gboolean success, gpointer user_data)
 
static void _import_job_disposed (gpointer user_data)
 
static void _completion_init (import_completion_t *completion, const int expected)
 
static void _completion_cleanup (import_completion_t *completion)
 
static void _remove_tree (const char *path)
 
static char * _make_jpeg (const char *directory, const char *name, const uint8_t value)
 
static void _assert_file_bytes (const char *path, const gchar *expected, const gsize expected_size)
 
static void _assert_different_bytes (const gchar *first, const gsize first_size, const gchar *second, const gsize second_size)
 
static void _assert_import (import_completion_t *completion, const int expected_successes)
 
static dt_control_import_t _copy_import (GList *sources, const int elements, const char *destination, const char *pattern, const dt_import_onconflict_t policy, import_completion_t *completion)
 
static void _test_public_siblings_keep_sequence_for_distinct_destinations (void **state G_GNUC_UNUSED)
 
static void _test_public_in_place_import_preserves_source (void **state G_GNUC_UNUSED)
 
static void _test_public_delete_source_requires_successful_copy (void **state G_GNUC_UNUSED)
 
static void _test_stream_comparison_boundaries (void **state G_GNUC_UNUSED)
 
static void _test_public_sibling_collision_reexpands_once (void **state G_GNUC_UNUSED)
 
static void _test_public_fixed_destination_follows_all_policies (void **state G_GNUC_UNUSED)
 
static void _test_public_unrelated_collision_has_no_sibling_fallback (void **state G_GNUC_UNUSED)
 
static void _test_public_failures_consume_sequences_and_complete_once (void **state G_GNUC_UNUSED)
 
static void _test_public_copy_failure_reservation_forces_sibling_fallback (void **state G_GNUC_UNUSED)
 
static void _test_public_database_failure_reservation_forces_sibling_fallback (void **state G_GNUC_UNUSED)
 
static void _test_public_reserved_fallback_reaches_policy_without_third_expansion (void **state G_GNUC_UNUSED)
 
static char * _prepare_test_datadir (const char *tmp_dir)
 
static int _setup (void **state G_GNUC_UNUSED)
 
static int _teardown (void **state G_GNUC_UNUSED)
 
static void _test_extension_contract (void **state G_GNUC_UNUSED)
 
static void _test_extension_utility_rejections (void **state G_GNUC_UNUSED)
 
static void _test_pattern_expansion_rejects_missing_patterns (void **state G_GNUC_UNUSED)
 
static void _test_image_import_extension_boundaries (void **state G_GNUC_UNUSED)
 
static int _directory_failure_teardown (void **state)
 Release fixture resources after setup failure, assertion failure, or skip.
 
static int _directory_failure_setup (void **state)
 Prepare both diagnostic cases without redirecting process-wide output.
 
static void _test_copy_directory_failure_reports_only_its_cause (void **state)
 
int main (void)
 

Variables

static const extension_case_t _extension_cases []
 
static char * _rcfile = NULL
 
static char * _integration_config = NULL
 
static char * _integration_cache = NULL
 
static char * _integration_tmp = NULL
 
static char * _integration_datadir = NULL
 
static const directory_failure_case_t _directory_failure_cases []
 

Macro Definition Documentation

◆ test_close

#define test_close   _close

Definition at line 35 of file test_import_jobs.c.

◆ test_dup

#define test_dup   _dup

Definition at line 33 of file test_import_jobs.c.

◆ test_dup2

#define test_dup2   _dup2

Definition at line 34 of file test_import_jobs.c.

Typedef Documentation

◆ directory_failure_case_t

◆ directory_failure_fixture_t

◆ extension_case_t

◆ import_completion_t

Function Documentation

◆ _assert_different_bytes()

◆ _assert_file_bytes()

◆ _assert_import()

◆ _completion_cleanup()

◆ _completion_init()

◆ _copy_import()

◆ _directory_failure_setup()

static int _directory_failure_setup ( void **  state)
static

◆ _directory_failure_teardown()

static int _directory_failure_teardown ( void **  state)
static

Release fixture resources after setup failure, assertion failure, or skip.

Definition at line 875 of file test_import_jobs.c.

References darktable_t::control, darktable, dt_free, dt_free_gpointer(), dt_pthread_mutex_destroy(), IS_NULL_PTR, L, state, and test_close.

Referenced by _directory_failure_setup(), and main().

◆ _import_completed()

static void _import_completed ( const char *  source,
gboolean  success,
gpointer  user_data 
)
static

◆ _import_copy_file()

int _import_copy_file ( const char *const  filename,
const char *const  dest_file_path,
dt_control_import_t *  data,
gchar *  img_path_to_db,
size_t  pathname_len,
GList **  discarded 
)
extern

copy a file to a destination path after checking if everything is allright.

Parameters
filenamesource file path.
dest_file_pathfinal borrowed destination selected before import.
dataimport module information.
img_path_to_dbwill be set to the file path for import.
pathname_lenthe img_path_to_db size.
discardedthe list of file pathes discarded because the target already exists
Returns
int -1 on copy error, 0 when the destination already existed, 1 when the file was copied

Definition at line 288 of file import_jobs.c.

References _copy_file(), _create_dir(), _file_exist(), _import_copy_txt(), _import_copy_xmp(), cleanup(), DT_DEBUG_IMPORT, DT_DEBUG_PRINT, dt_free, DT_IMPORT_ONCONFLICT_OVERWRITE, DT_IMPORT_ONCONFLICT_UNIQUE, dt_print(), dt_util_dir_exist(), dt_util_test_writable_dir(), FALSE, L, dt_control_import_t::on_conflict, and dt_control_import_t::target_dir.

Referenced by _import_image(), and _test_copy_directory_failure_reports_only_its_cause().

◆ _import_job_disposed()

static void _import_job_disposed ( gpointer  user_data)
static

Definition at line 90 of file test_import_jobs.c.

References import_completion_t::job_disposed, and TRUE.

Referenced by _copy_import().

◆ _make_jpeg()

◆ _prepare_test_datadir()

static char * _prepare_test_datadir ( const char *  tmp_dir)
static

Definition at line 688 of file test_import_jobs.c.

References ANSEL_TEST_SOURCE_DIR, dt_free, and L.

Referenced by main().

◆ _remove_tree()

◆ _setup()

static int _setup ( void **state  G_GNUC_UNUSED)
static

Definition at line 707 of file test_import_jobs.c.

References _rcfile, darktable_t::conf, darktable, dt_conf_init(), and L.

Referenced by main().

◆ _teardown()

static int _teardown ( void **state  G_GNUC_UNUSED)
static

Definition at line 716 of file test_import_jobs.c.

References _rcfile, darktable_t::conf, darktable, dt_conf_cleanup(), dt_free, and L.

Referenced by main().

◆ _test_copy_directory_failure_reports_only_its_cause()

static void _test_copy_directory_failure_reports_only_its_cause ( void **  state)
static

◆ _test_extension_contract()

◆ _test_extension_utility_rejections()

static void _test_extension_utility_rejections ( void **state  G_GNUC_UNUSED)
static

Definition at line 771 of file test_import_jobs.c.

References dt_copy_filename_extension(), dt_has_same_path_basename(), and L.

Referenced by main().

◆ _test_image_import_extension_boundaries()

static void _test_image_import_extension_boundaries ( void **state  G_GNUC_UNUSED)
static

◆ _test_pattern_expansion_rejects_missing_patterns()

◆ _test_public_copy_failure_reservation_forces_sibling_fallback()

static void _test_public_copy_failure_reservation_forces_sibling_fallback ( void **state  G_GNUC_UNUSED)
static

◆ _test_public_database_failure_reservation_forces_sibling_fallback()

◆ _test_public_delete_source_requires_successful_copy()

static void _test_public_delete_source_requires_successful_copy ( void **state  G_GNUC_UNUSED)
static

◆ _test_public_failures_consume_sequences_and_complete_once()

static void _test_public_failures_consume_sequences_and_complete_once ( void **state  G_GNUC_UNUSED)
static

◆ _test_public_fixed_destination_follows_all_policies()

◆ _test_public_in_place_import_preserves_source()

◆ _test_public_reserved_fallback_reaches_policy_without_third_expansion()

◆ _test_public_sibling_collision_reexpands_once()

◆ _test_public_siblings_keep_sequence_for_distinct_destinations()

static void _test_public_siblings_keep_sequence_for_distinct_destinations ( void **state  G_GNUC_UNUSED)
static

◆ _test_public_unrelated_collision_has_no_sibling_fallback()

◆ _test_stream_comparison_boundaries()

static void _test_stream_comparison_boundaries ( void **state  G_GNUC_UNUSED)
static

Definition at line 285 of file test_import_jobs.c.

References cleanup(), directory, dt_free, dt_util_streams_equal(), i, IS_NULL_PTR, L, and TRUE.

Referenced by main().

◆ main()

Variable Documentation

◆ _directory_failure_cases

const directory_failure_case_t _directory_failure_cases[]
static
Initial value:
= {
{ "blocker", "Unable to create the target folder", "Not allowed to write", TRUE },
{ "read-only", "Not allowed to write", "Unable to create the target folder", FALSE },
}
#define TRUE
Definition ashift_lsd.c:162
#define FALSE
Definition ashift_lsd.c:158

Definition at line 849 of file test_import_jobs.c.

Referenced by main().

◆ _extension_cases

const extension_case_t _extension_cases[]
static
Initial value:
= {
{ "capture.raw", "raw", "capture|capture|raw", "capture.jpg" },
{ ".profile.jpg", "jpg", ".profile|.profile|jpg", ".profile.jpg" },
{ "/a.b/capture", NULL, "capture|capture|", NULL },
{ "C:\\a.b\\capture", NULL, "capture|capture|", NULL },
{ ".profile", NULL, ".profile|.profile|", NULL },
{ "capture.", NULL, "capture.|capture.|", NULL },
{ "capture", NULL, "capture|capture|", NULL },
{ "", NULL, "||", NULL },
{ "/", NULL, "||", NULL },
{ "\\", NULL, "||", NULL },
}

Definition at line 54 of file test_import_jobs.c.

Referenced by _test_extension_contract().

◆ _integration_cache

char* _integration_cache = NULL
static

Definition at line 69 of file test_import_jobs.c.

Referenced by main().

◆ _integration_config

char* _integration_config = NULL
static

Definition at line 68 of file test_import_jobs.c.

Referenced by main().

◆ _integration_datadir

char* _integration_datadir = NULL
static

Definition at line 71 of file test_import_jobs.c.

Referenced by main().

◆ _integration_tmp

char* _integration_tmp = NULL
static

Definition at line 70 of file test_import_jobs.c.

Referenced by main().

◆ _rcfile

char* _rcfile = NULL
static

Definition at line 67 of file test_import_jobs.c.

Referenced by _setup(), and _teardown().