# -*- Autotest -*-
AT_BANNER([xorg utils lib])
AT_TESTCFUN([xorg_utils_skip_pfx],
[$XORG_UTILS_CFLAGS],
[$XORG_UTILS_LDFLAGS],
[[
#include "libabrt.h"
#include "xorg-utils.h"
int main(void)
{
const char *str[] = {
"[xxx xxx] (EE) Foo",
" (EE) Foo",
"(EE) Foo",
" Foo",
"Foo",
NULL
};
for (int i = 0; str[i] != NULL; ++i)
{
char *result = skip_pfx((char *)str[i]);
if (strcmp(result, "Foo") != 0)
{
printf("Error: expected: 'Foo' got: '%s'\n", result);
return 1;
}
}
return 0;
}
]])
AT_TESTCFUN([xorg_crash_info_save_in_dump_dir],
[$XORG_UTILS_CFLAGS],
[$XORG_UTILS_LDFLAGS],
[[
#include "libabrt.h"
#include "xorg-utils.h"
void test(const char *backtrace, const char *exp_backtrace,
const char *reason, const char *exp_reason,
const char *exe, const char *exp_exe)
{
char template[] = "/tmp/XXXXXX/dump_dir";
char *last_slash = strrchr(template, '/');
*last_slash = '\0';
if (mkdtemp(template) == NULL) {
perror("mkdtemp()");
return EXIT_FAILURE;
}
*last_slash = '/';
struct dump_dir *dd = dd_create(template, (uid_t)-1, 0640);
dd_create_basic_files(dd, (uid_t)-1, NULL);
struct xorg_crash_info *crash_info = xmalloc(sizeof(struct xorg_crash_info));
crash_info->backtrace = xstrdup(backtrace);
crash_info->reason = xstrdup(reason);
crash_info->exe = xstrdup(exe);
xorg_crash_info_save_in_dump_dir(crash_info, dd);
dd_close(dd);
dd = NULL;
dd = dd_opendir(template, 0);
assert(dd != NULL);
assert(strcmp(dd->dd_dirname, template) == 0);
problem_data_t *pd = create_problem_data_from_dump_dir(dd);
assert(strcmp(problem_data_get_content_or_NULL(pd, FILENAME_ANALYZER), "abrt-xorg") == 0);
assert(strcmp(problem_data_get_content_or_NULL(pd, FILENAME_TYPE), "xorg") == 0);
assert(strcmp(problem_data_get_content_or_NULL(pd, FILENAME_REASON), exp_reason) == 0);
assert(strcmp(problem_data_get_content_or_NULL(pd, FILENAME_BACKTRACE), exp_backtrace) == 0);
assert(strncmp(problem_data_get_content_or_NULL(pd, FILENAME_EXECUTABLE), exp_exe, strlen(exp_exe)) == 0);
problem_data_free(pd);
xorg_crash_info_free(crash_info);
dd_delete(dd);
struct stat dd_st;
assert(stat(template, &dd_st) != 0);
*last_slash = '\0';
assert(rmdir(template) == 0);
}
int main(void)
{
g_verbose = 3;
const char *b = "I am a backtrace";
const char *r = "Reason here!";
const char *e = "Executable here!";
test(b, b, r, r, e, e);
test(b, b, r, r, NULL, "/usr/bin/X");
return EXIT_SUCCESS;
}
]])