1 #include "clar_libgit2.h"
3 void test_core_errors__public_api(void)
8 cl_assert(giterr_last() == NULL
);
12 cl_assert(giterr_last() != NULL
);
13 cl_assert(giterr_last()->klass
== GITERR_NOMEMORY
);
14 str_in_error
= strstr(giterr_last()->message
, "memory");
15 cl_assert(str_in_error
!= NULL
);
19 giterr_set_str(GITERR_REPOSITORY
, "This is a test");
21 cl_assert(giterr_last() != NULL
);
22 str_in_error
= strstr(giterr_last()->message
, "This is a test");
23 cl_assert(str_in_error
!= NULL
);
26 cl_assert(giterr_last() == NULL
);
33 void test_core_errors__new_school(void)
38 cl_assert(giterr_last() == NULL
);
40 giterr_set_oom(); /* internal fn */
42 cl_assert(giterr_last() != NULL
);
43 cl_assert(giterr_last()->klass
== GITERR_NOMEMORY
);
44 str_in_error
= strstr(giterr_last()->message
, "memory");
45 cl_assert(str_in_error
!= NULL
);
49 giterr_set(GITERR_REPOSITORY
, "This is a test"); /* internal fn */
51 cl_assert(giterr_last() != NULL
);
52 str_in_error
= strstr(giterr_last()->message
, "This is a test");
53 cl_assert(str_in_error
!= NULL
);
56 cl_assert(giterr_last() == NULL
);
60 memset(&st
, 0, sizeof(st
));
61 cl_assert(p_lstat("this_file_does_not_exist", &st
) < 0);
64 giterr_set(GITERR_OS
, "stat failed"); /* internal fn */
66 cl_assert(giterr_last() != NULL
);
67 str_in_error
= strstr(giterr_last()->message
, "stat failed");
68 cl_assert(str_in_error
!= NULL
);
69 cl_assert(git__prefixcmp(str_in_error
, "stat failed: ") == 0);
70 cl_assert(strlen(str_in_error
) > strlen("stat failed: "));
75 /* The MSDN docs use this to generate a sample error */
76 cl_assert(GetProcessId(NULL
) == 0);
77 giterr_set(GITERR_OS
, "GetProcessId failed"); /* internal fn */
79 cl_assert(giterr_last() != NULL
);
80 str_in_error
= strstr(giterr_last()->message
, "GetProcessId failed");
81 cl_assert(str_in_error
!= NULL
);
82 cl_assert(git__prefixcmp(str_in_error
, "GetProcessId failed: ") == 0);
83 cl_assert(strlen(str_in_error
) > strlen("GetProcessId failed: "));
89 void test_core_errors__restore(void)
91 git_error_state err_state
= {0};
94 cl_assert(giterr_last() == NULL
);
96 cl_assert_equal_i(0, giterr_capture(&err_state
, 0));
98 memset(&err_state
, 0x0, sizeof(git_error_state
));
100 giterr_set(42, "Foo: %s", "bar");
101 cl_assert_equal_i(-1, giterr_capture(&err_state
, -1));
103 cl_assert(giterr_last() == NULL
);
105 giterr_set(99, "Bar: %s", "foo");
107 giterr_restore(&err_state
);
109 cl_assert_equal_i(42, giterr_last()->klass
);
110 cl_assert_equal_s("Foo: bar", giterr_last()->message
);
113 static int test_arraysize_multiply(size_t nelem
, size_t size
)
115 GITERR_CHECK_ALLOC_MULTIPLY(nelem
, size
);
119 void test_core_errors__integer_overflow_alloc_multiply(void)
121 cl_git_pass(test_arraysize_multiply(10, 10));
122 cl_git_pass(test_arraysize_multiply(1000, 1000));
123 cl_git_pass(test_arraysize_multiply(SIZE_MAX
/sizeof(void *), sizeof(void *)));
124 cl_git_pass(test_arraysize_multiply(0, 10));
125 cl_git_pass(test_arraysize_multiply(10, 0));
127 cl_git_fail(test_arraysize_multiply(SIZE_MAX
-1, sizeof(void *)));
128 cl_git_fail(test_arraysize_multiply((SIZE_MAX
/sizeof(void *))+1, sizeof(void *)));
130 cl_assert_equal_i(GITERR_NOMEMORY
, giterr_last()->klass
);
131 cl_assert_equal_s("Out of memory", giterr_last()->message
);
134 static int test_arraysize_add(size_t one
, size_t two
)
136 GITERR_CHECK_ALLOC_ADD(one
, two
);
140 void test_core_errors__integer_overflow_alloc_add(void)
142 cl_git_pass(test_arraysize_add(10, 10));
143 cl_git_pass(test_arraysize_add(1000, 1000));
144 cl_git_pass(test_arraysize_add(SIZE_MAX
-10, 10));
146 cl_git_fail(test_arraysize_multiply(SIZE_MAX
-1, 2));
147 cl_git_fail(test_arraysize_multiply(SIZE_MAX
, SIZE_MAX
));
149 cl_assert_equal_i(GITERR_NOMEMORY
, giterr_last()->klass
);
150 cl_assert_equal_s("Out of memory", giterr_last()->message
);