Blame tests/problem_report.at

Packit Service 779887
# -*- Autotest -*-
Packit Service 779887
Packit Service 779887
AT_BANNER([problem report])
Packit Service 779887
Packit Service 779887
## ------- ##
Packit Service 779887
## summary ##
Packit Service 779887
## ------- ##
Packit Service 779887
Packit Service 779887
AT_TESTFUN([summary],
Packit Service 779887
[[
Packit Service 779887
#include "problem_report.h"
Packit Service 779887
#include "internal_libreport.h"
Packit Service 779887
#include <assert.h>
Packit Service 779887
Packit Service 779887
int main(int argc, char **argv)
Packit Service 779887
{
Packit Service 779887
    const char *const test_format_result[][2] = {
Packit Service 779887
        {
Packit Service 779887
            "%summary:: [abrt] trivial string",
Packit Service 779887
            "[abrt] trivial string"
Packit Service 779887
        },
Packit Service 779887
Packit Service 779887
        {
Packit Service 779887
            "%summary:: [abrt] %package%",
Packit Service 779887
            "[abrt] libreport"
Packit Service 779887
        },
Packit Service 779887
Packit Service 779887
        {
Packit Service 779887
            "%summary:: [abrt] %package%[[ : %crash_function%()]][[ : %does_not_exist%]][[ : %reason%]][[ TAINTED: %taint_flags%]]",
Packit Service 779887
            "[abrt] libreport : run_event() : Killed by SIGSEGV"
Packit Service 779887
        },
Packit Service 779887
Packit Service 779887
        {
Packit Service 779887
            "%summary:: [abrt] %package%[[ : %crash_function%[[ : %does_not_exist%]]()]][[ : %reason%]]",
Packit Service 779887
            "[abrt] libreport : run_event() : Killed by SIGSEGV"
Packit Service 779887
        },
Packit Service 779887
Packit Service 779887
        {
Packit Service 779887
            "%summary:: [abrt] %package%[[ : %does_not_exist%[[ : %crash_function%()]]]][[ : %reason%]]",
Packit Service 779887
            "[abrt] libreport : Killed by SIGSEGV"
Packit Service 779887
        },
Packit Service 779887
Packit Service 779887
        {
Packit Service 779887
            "%summary:: [[%does_not_exist%]][[%once_more%]][abrt] %package%",
Packit Service 779887
            "[abrt] libreport"
Packit Service 779887
        },
Packit Service 779887
Packit Service 779887
        {
Packit Service 779887
            "",
Packit Service 779887
            "Killed by SIGSEGV"
Packit Service 779887
        },
Packit Service 779887
    };
Packit Service 779887
Packit Service 779887
    g_verbose = 3;
Packit Service 779887
Packit Service 779887
    problem_data_t *data = problem_data_new();
Packit Service 779887
    problem_data_add_text_noteditable(data, "package", "libreport");
Packit Service 779887
    problem_data_add_text_noteditable(data, "crash_function", "run_event");
Packit Service 779887
    problem_data_add_text_noteditable(data, "reason", "Killed by SIGSEGV");
Packit Service 779887
Packit Service 779887
    for (size_t i = 0; i < sizeof(test_format_result)/sizeof(*test_format_result); ++i) {
Packit Service 779887
        problem_formatter_t *pf = problem_formatter_new();
Packit Service 779887
        assert(!problem_formatter_load_string(pf, test_format_result[i][0]));
Packit Service 779887
Packit Service 779887
        problem_report_t *pr = NULL;
Packit Service 779887
        assert(!problem_formatter_generate_report(pf, data, &pr);;
Packit Service 779887
        assert(pr != NULL);
Packit Service 779887
Packit Service 779887
        const char *summary = problem_report_get_summary(pr);
Packit Service 779887
        assert(summary != NULL);
Packit Service 779887
Packit Service 779887
        fprintf(stderr, "expected: '%s'\n", test_format_result[i][1]);
Packit Service 779887
        fprintf(stderr, "result  : '%s'\n", summary);
Packit Service 779887
Packit Service 779887
        assert(strcmp(test_format_result[i][1], summary) == 0);
Packit Service 779887
Packit Service 779887
        problem_report_free(pr);
Packit Service 779887
        problem_formatter_free(pf);
Packit Service 779887
    }
Packit Service 779887
Packit Service 779887
    problem_data_free(data);
Packit Service 779887
Packit Service 779887
    return 0;
Packit Service 779887
}
Packit Service 779887
]])
Packit Service 779887
Packit Service 779887
## ---------- ##
Packit Service 779887
## desciption ##
Packit Service 779887
## ---------- ##
Packit Service 779887
Packit Service 779887
AT_TESTFUN([description],
Packit Service 779887
[[
Packit Service 779887
#include "problem_report.h"
Packit Service 779887
#include "internal_libreport.h"
Packit Service 779887
#include <assert.h>
Packit Service 779887
#include "testsuite.h"
Packit Service 779887
Packit Service 779887
int main(int argc, char **argv)
Packit Service 779887
{
Packit Service 779887
    const char *const test_format_result[][2] = {
Packit Service 779887
        {
Packit Service 779887
            "\n"\
Packit Service 779887
            "\n"\
Packit Service 779887
            "\n"\
Packit Service 779887
            "Single line\n"
Packit Service 779887
            "\n"\
Packit Service 779887
            "\n"\
Packit Service 779887
            "\n",
Packit Service 779887
Packit Service 779887
            "Single line\n"
Packit Service 779887
        },
Packit Service 779887
Packit Service 779887
        {
Packit Service 779887
            "\n"\
Packit Service 779887
            "\n"\
Packit Service 779887
            "\n"\
Packit Service 779887
            "Comment:: %bare_comment"
Packit Service 779887
            "\n"\
Packit Service 779887
            "\n"\
Packit Service 779887
            "\n"\
Packit Service 779887
            "Ad-hoc line\n"
Packit Service 779887
            "\n"\
Packit Service 779887
            "\n"\
Packit Service 779887
            "\n"\
Packit Service 779887
            "Additional:: package,\\\n"
Packit Service 779887
            "uuid,cwd\\\\"
Packit Service 779887
            ",user_name"
Packit Service 779887
            "\n"\
Packit Service 779887
            "\n",
Packit Service 779887
Packit Service 779887
            "Comment:\n" \
Packit Service 779887
            "Hello, world!\n"
Packit Service 779887
            "\n"\
Packit Service 779887
            "\n"\
Packit Service 779887
            "Ad-hoc line\n"
Packit Service 779887
            "\n"\
Packit Service 779887
            "\n"\
Packit Service 779887
            "\n"\
Packit Service 779887
            "Additional:\n"\
Packit Service 779887
            "package:        libreport\n"\
Packit Service 779887
            "uuid:           123456789ABCDEF\n"\
Packit Service 779887
            "user_name:      abrt\n",
Packit Service 779887
        },
Packit Service 779887
Packit Service 779887
        {
Packit Service 779887
            ":: %bare_description",
Packit Service 779887
Packit Service 779887
            "I run will_segfault and\n"\
Packit Service 779887
            "it crashed as expected\n"
Packit Service 779887
        },
Packit Service 779887
Packit Service 779887
        {
Packit Service 779887
            "User:: %bare_user_name,uid\n"\
Packit Service 779887
            "Additional info:: -uuid,%oneline,-comment,-package",
Packit Service 779887
Packit Service 779887
            "User:\n"\
Packit Service 779887
            "abrt\n"\
Packit Service 779887
            "uid:            69\n"\
Packit Service 779887
            "Additional info:\n"\
Packit Service 779887
            "analyzer:       CCpp\n"\
Packit Service 779887
            "root:           /var/run/mock/abrt\n"\
Packit Service 779887
            "type:           CCpp\n"
Packit Service 779887
        },
Packit Service 779887
Packit Service 779887
        {
Packit Service 779887
            ":: %reporter",
Packit Service 779887
            NULL /* do no check results*/
Packit Service 779887
        },
Packit Service 779887
Packit Service 779887
        {
Packit Service 779887
            "Truncated backtrace:: %bare_%short_backtrace",
Packit Service 779887
Packit Service 779887
            "Truncated backtrace:\n"
Packit Service 779887
            "Thread no. 0 (7 frames)\n"
Packit Service 779887
            " #1 crash at will_segfault.c:19\n"
Packit Service 779887
            " #2 varargs at will_segfault.c:31\n"
Packit Service 779887
            " #3 inlined at will_segfault.c:40\n"
Packit Service 779887
            " #4 f at will_segfault.c:45\n"
Packit Service 779887
            " #5 callback at will_segfault.c:50\n"
Packit Service 779887
            " #6 call_me_back at libwillcrash.c:8\n"
Packit Service 779887
            " #7 recursive at will_segfault.c:59\n"
Packit Service 779887
        },
Packit Service 779887
    };
Packit Service 779887
Packit Service 779887
    g_verbose = 3;
Packit Service 779887
Packit Service 779887
    problem_data_t *data = problem_data_new();
Packit Service 779887
    problem_data_add_text_noteditable(data, "package", "libreport");
Packit Service 779887
    problem_data_add_text_noteditable(data, "analyzer", "CCpp");
Packit Service 779887
    problem_data_add_text_noteditable(data, "type", "CCpp");
Packit Service 779887
    problem_data_add_text_noteditable(data, "comment", "Hello, world!");
Packit Service 779887
    problem_data_add_text_noteditable(data, "uuid", "123456789ABCDEF");
Packit Service 779887
    problem_data_add_text_noteditable(data, "uid", "69");
Packit Service 779887
    problem_data_add_text_noteditable(data, "user_name", "abrt");
Packit Service 779887
    problem_data_add_text_noteditable(data, "root", "/var/run/mock/abrt");
Packit Service 779887
    problem_data_add_text_noteditable(data, "description", "I run will_segfault and\nit crashed as expected\n");
Packit Service 779887
    problem_data_add_text_noteditable(data, "backtrace",
Packit Service 779887
"Thread 1 (LWP 11865):\n"\
Packit Service 779887
"#0  printf (__fmt=0x400acf \"Result: %d\\n\") at /usr/include/bits/stdio2.h:104\n"\
Packit Service 779887
"No locals.\n"\
Packit Service 779887
"#1  crash (p=p@entry=0x0) at will_segfault.c:19\n"\
Packit Service 779887
"i = <error reading variable i (Cannot access memory at address 0x0)>\n"\
Packit Service 779887
"#2  0x0000000000400964 in varargs (num_args=1, num_args@entry=2) at will_segfault.c:31\n"\
Packit Service 779887
"p = <optimized out>\n"\
Packit Service 779887
"ap = {{gp_offset = 24, fp_offset = 32767, overflow_arg_area = 0x7fff4fc8a0c0, reg_save_area = 0x7fff4fc8a080}}\n"\
Packit Service 779887
"#3  0x00000000004009be in inlined (p=0x0) at will_segfault.c:40\n"\
Packit Service 779887
"num = 42\n"\
Packit Service 779887
"#4  f (p=p@entry=0x0) at will_segfault.c:45\n"\
Packit Service 779887
"No locals.\n"\
Packit Service 779887
"#5  0x00000000004009e9 in callback (data=data@entry=0x0) at will_segfault.c:50\n"\
Packit Service 779887
"No locals.\n"\
Packit Service 779887
"#6  0x00000032f76006f9 in call_me_back (cb=cb@entry=0x4009e0 <callback>, data=data@entry=0x0) at libwillcrash.c:8\n"\
Packit Service 779887
"res = <optimized out>\n"\
Packit Service 779887
"#7  0x0000000000400a14 in recursive (i=i@entry=0) at will_segfault.c:59\n"\
Packit Service 779887
"p = <optimized out>\n"\
Packit Service 779887
"#8  0x0000000000400a00 in recursive (i=i@entry=1) at will_segfault.c:66\n"\
Packit Service 779887
"No locals.\n"\
Packit Service 779887
"#9  0x0000000000400a00 in recursive (i=i@entry=2) at will_segfault.c:66\n"\
Packit Service 779887
"No locals.\n"\
Packit Service 779887
"#10 0x0000000000400775 in main (argc=<optimized out>, argv=<optimized out>) at will_segfault.c:83\n"\
Packit Service 779887
"No locals.\n"\
Packit Service 779887
"From                To                  Syms Read   Shared Object Library\n"\
Packit Service 779887
"0x00000032f76005f0  0x00000032f7600712  Yes         /lib64/libwillcrash.so.0\n"\
Packit Service 779887
"0x0000003245c1f4f0  0x0000003245d6aca4  Yes         /lib64/libc.so.6\n"\
Packit Service 779887
"0x0000003245800b10  0x000000324581b6d0  Yes         /lib64/ld-linux-x86-64.so.2\n"\
Packit Service 779887
"$1 = 0x0\n"
Packit Service 779887
"No symbol \"__glib_assert_msg\" in current context.\n"\
Packit Service 779887
"rax            0xf      15\n"\
Packit Service 779887
"rbx            0x0      0\n"\
Packit Service 779887
"rcx            0x7ff96f752000   140709293531136\n"\
Packit Service 779887
"rdx            0x3245fb9a40     215922481728\n"\
Packit Service 779887
"rsi            0x7ff96f752000   140709293531136\n"\
Packit Service 779887
"rdi            0x1      1\n"\
Packit Service 779887
"rbp            0x400a30 0x400a30 <__libc_csu_init>\n"\
Packit Service 779887
"rsp            0x7fff4fc8a050   0x7fff4fc8a050\n"\
Packit Service 779887
"r8             0xffffffff       4294967295\n"\
Packit Service 779887
"r9             0x0      0\n"\
Packit Service 779887
"r10            0x22     34\n"\
Packit Service 779887
"r11            0x246    582\n"\
Packit Service 779887
"r12            0x40079f 4196255\n"\
Packit Service 779887
"r13            0x7fff4fc8a210   140734531936784\n"\
Packit Service 779887
"r14            0x0      0\n"\
Packit Service 779887
"r15            0x0      0\n"\
Packit Service 779887
"rip            0x4008ae 0x4008ae <crash+14>\n"\
Packit Service 779887
"eflags         0x10246  [ PF ZF IF RF ]\n"\
Packit Service 779887
"cs             0x33     51\n"\
Packit Service 779887
"ss             0x2b     43\n"\
Packit Service 779887
"ds             0x0      0\n"\
Packit Service 779887
"es             0x0      0\n"\
Packit Service 779887
"fs             0x0      0\n"\
Packit Service 779887
"gs             0x0      0\n"\
Packit Service 779887
"st0            0        (raw 0x00000000000000000000)\n"\
Packit Service 779887
"st1            0        (raw 0x00000000000000000000)\n"\
Packit Service 779887
"st2            0        (raw 0x00000000000000000000)\n"\
Packit Service 779887
"st3            0        (raw 0x00000000000000000000)\n"\
Packit Service 779887
"st4            0        (raw 0x00000000000000000000)\n"\
Packit Service 779887
"st5            0        (raw 0x00000000000000000000)\n"\
Packit Service 779887
"st6            0        (raw 0x00000000000000000000)\n"\
Packit Service 779887
"st7            0        (raw 0x00000000000000000000)\n"\
Packit Service 779887
"fctrl          0x37f    895\n"\
Packit Service 779887
"fstat          0x0      0\n"\
Packit Service 779887
"ftag           0xffff   65535\n"\
Packit Service 779887
"fiseg          0x0      0\n"\
Packit Service 779887
"fioff          0x0      0\n"\
Packit Service 779887
"foseg          0x0      0\n"\
Packit Service 779887
"fooff          0x0      0\n"\
Packit Service 779887
"fop            0x0      0\n"\
Packit Service 779887
"xmm0           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm1           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x2f <repeats 16 times>}, v8_int16 = {0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f}, v4_int32 = {0x2f2f2f2f, 0x2f2f2f2f, 0x2f2f2f2f, 0x2f2f2f2f}, v2_int64 = {0x2f2f2f2f2f2f2f2f, 0x2f2f2f2f2f2f2f2f}, uint128 = 0x2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f}\n"\
Packit Service 779887
"xmm2           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm3           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 13 times>, 0xff, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff00, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0xff00}, v2_int64 = {0x0, 0xff0000000000}, uint128 = 0x0000ff00000000000000000000000000}\n"\
Packit Service 779887
"xmm4           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0xff0000, 0x0}, v2_int64 = {0x0, 0xff0000}, uint128 = 0x0000000000ff00000000000000000000}\n"\
Packit Service 779887
"xmm5           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm6           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm7           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm8           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm9           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm10          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm11          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm12          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 14 times>, 0xff, 0x0}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff}, v4_int32 = {0x0, 0x0, 0x0, 0xff0000}, v2_int64 = {0x0, 0xff000000000000}, uint128 = 0x00ff0000000000000000000000000000}\n"\
Packit Service 779887
"xmm13          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm14          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm15          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"mxcsr          0x1f80   [ IM DM ZM OM UM PM ]\n"\
Packit Service 779887
"Dump of assembler code for function crash:\n"\
Packit Service 779887
"   0x00000000004008a0 <+0>:     push   %rbx\n"\
Packit Service 779887
"   0x00000000004008a1 <+1>:     mov    %rdi,%rbx\n"\
Packit Service 779887
"   0x00000000004008a4 <+4>:     mov    $0x400ac0,%edi\n"\
Packit Service 779887
"   0x00000000004008a9 <+9>:     callq  0x4006f0 <puts@plt>\n"\
Packit Service 779887
"   => 0x00000000004008ae <+14>:    mov    (%rbx),%edx\n"\
Packit Service 779887
"   0x00000000004008b0 <+16>:    mov    $0x400acf,%esi\n"\
Packit Service 779887
"   0x00000000004008b5 <+21>:    mov    $0x1,%edi\n"\
Packit Service 779887
"   0x00000000004008ba <+26>:    xor    %eax,%eax\n"\
Packit Service 779887
"   0x00000000004008bc <+28>:    callq  0x400740 <__printf_chk@plt>\n"\
Packit Service 779887
"   0x00000000004008c1 <+33>:    pop    %rbx\n"\
Packit Service 779887
"   0x00000000004008c2 <+34>:    retq\n"\
Packit Service 779887
"End of assembler dump.\n"
Packit Service 779887
            );
Packit Service 779887
Packit Service 779887
    for (size_t i = 0; i < sizeof(test_format_result)/sizeof(*test_format_result); ++i) {
Packit Service 779887
        problem_formatter_t *pf = problem_formatter_new();
Packit Service 779887
        assert(!problem_formatter_load_string(pf, test_format_result[i][0]));
Packit Service 779887
Packit Service 779887
        problem_report_t *pr = NULL;
Packit Service 779887
        assert(!problem_formatter_generate_report(pf, data, &pr);;
Packit Service 779887
        assert(pr != NULL);
Packit Service 779887
Packit Service 779887
        const char *summary = problem_report_get_description(pr);
Packit Service 779887
        assert(summary != NULL);
Packit Service 779887
Packit Service 779887
        if (test_format_result[i][1] != NULL) {
Packit Service 779887
            fprintf(stderr, "####\n");
Packit Service 779887
            fprintf(stderr, "expected: '%s'\n", test_format_result[i][1]);
Packit Service 779887
            fprintf(stderr, "====\n");
Packit Service 779887
            fprintf(stderr, "result  : '%s'\n", summary);
Packit Service 779887
            fprintf(stderr, "####\n");
Packit Service 779887
Packit Service 779887
            TS_ASSERT_STRING_EQ(summary, test_format_result[i][1], "Correct summary");
Packit Service 779887
        }
Packit Service 779887
Packit Service 779887
        problem_report_free(pr);
Packit Service 779887
        problem_formatter_free(pf);
Packit Service 779887
    }
Packit Service 779887
Packit Service 779887
    problem_data_free(data);
Packit Service 779887
Packit Service 779887
    return 0;
Packit Service 779887
}
Packit Service 779887
]])
Packit Service 779887
Packit Service 779887
## --------------- ##
Packit Service 779887
## short_backtrace ##
Packit Service 779887
## --------------- ##
Packit Service 779887
Packit Service 779887
AT_TESTFUN([short_backtrace],
Packit Service 779887
[[
Packit Service 779887
#include "problem_report.h"
Packit Service 779887
#include "internal_libreport.h"
Packit Service 779887
#include <assert.h>
Packit Service 779887
Packit Service 779887
#define BACKTRACE_CONTENT \
Packit Service 779887
"Thread 1 (LWP 11865):\n"\
Packit Service 779887
"#0  printf (__fmt=0x400acf \"Result: %d\\n\") at /usr/include/bits/stdio2.h:104\n"\
Packit Service 779887
"No locals.\n"\
Packit Service 779887
"#1  crash (p=p@entry=0x0) at will_segfault.c:19\n"\
Packit Service 779887
"i = <error reading variable i (Cannot access memory at address 0x0)>\n"\
Packit Service 779887
"#2  0x0000000000400964 in varargs (num_args=1, num_args@entry=2) at will_segfault.c:31\n"\
Packit Service 779887
"p = <optimized out>\n"\
Packit Service 779887
"ap = {{gp_offset = 24, fp_offset = 32767, overflow_arg_area = 0x7fff4fc8a0c0, reg_save_area = 0x7fff4fc8a080}}\n"\
Packit Service 779887
"#3  0x00000000004009be in inlined (p=0x0) at will_segfault.c:40\n"\
Packit Service 779887
"num = 42\n"\
Packit Service 779887
"#4  f (p=p@entry=0x0) at will_segfault.c:45\n"\
Packit Service 779887
"No locals.\n"\
Packit Service 779887
"#5  0x00000000004009e9 in callback (data=data@entry=0x0) at will_segfault.c:50\n"\
Packit Service 779887
"No locals.\n"\
Packit Service 779887
"#6  0x00000032f76006f9 in call_me_back (cb=cb@entry=0x4009e0 <callback>, data=data@entry=0x0) at libwillcrash.c:8\n"\
Packit Service 779887
"res = <optimized out>\n"\
Packit Service 779887
"#7  0x0000000000400a14 in recursive (i=i@entry=0) at will_segfault.c:59\n"\
Packit Service 779887
"p = <optimized out>\n"\
Packit Service 779887
"#8  0x0000000000400a00 in recursive (i=i@entry=1) at will_segfault.c:66\n"\
Packit Service 779887
"No locals.\n"\
Packit Service 779887
"#9  0x0000000000400a00 in recursive (i=i@entry=2) at will_segfault.c:66\n"\
Packit Service 779887
"No locals.\n"\
Packit Service 779887
"#10 0x0000000000400775 in main (argc=<optimized out>, argv=<optimized out>) at will_segfault.c:83\n"\
Packit Service 779887
"No locals.\n"\
Packit Service 779887
"From                To                  Syms Read   Shared Object Library\n"\
Packit Service 779887
"0x00000032f76005f0  0x00000032f7600712  Yes         /lib64/libwillcrash.so.0\n"\
Packit Service 779887
"0x0000003245c1f4f0  0x0000003245d6aca4  Yes         /lib64/libc.so.6\n"\
Packit Service 779887
"0x0000003245800b10  0x000000324581b6d0  Yes         /lib64/ld-linux-x86-64.so.2\n"\
Packit Service 779887
"$1 = 0x0\n"\
Packit Service 779887
"No symbol \"__glib_assert_msg\" in current context.\n"\
Packit Service 779887
"rax            0xf      15\n"\
Packit Service 779887
"rbx            0x0      0\n"\
Packit Service 779887
"rcx            0x7ff96f752000   140709293531136\n"\
Packit Service 779887
"rdx            0x3245fb9a40     215922481728\n"\
Packit Service 779887
"rsi            0x7ff96f752000   140709293531136\n"\
Packit Service 779887
"rdi            0x1      1\n"\
Packit Service 779887
"rbp            0x400a30 0x400a30 <__libc_csu_init>\n"\
Packit Service 779887
"rsp            0x7fff4fc8a050   0x7fff4fc8a050\n"\
Packit Service 779887
"r8             0xffffffff       4294967295\n"\
Packit Service 779887
"r9             0x0      0\n"\
Packit Service 779887
"r10            0x22     34\n"\
Packit Service 779887
"r11            0x246    582\n"\
Packit Service 779887
"r12            0x40079f 4196255\n"\
Packit Service 779887
"r13            0x7fff4fc8a210   140734531936784\n"\
Packit Service 779887
"r14            0x0      0\n"\
Packit Service 779887
"r15            0x0      0\n"\
Packit Service 779887
"rip            0x4008ae 0x4008ae <crash+14>\n"\
Packit Service 779887
"eflags         0x10246  [ PF ZF IF RF ]\n"\
Packit Service 779887
"cs             0x33     51\n"\
Packit Service 779887
"ss             0x2b     43\n"\
Packit Service 779887
"ds             0x0      0\n"\
Packit Service 779887
"es             0x0      0\n"\
Packit Service 779887
"fs             0x0      0\n"\
Packit Service 779887
"gs             0x0      0\n"\
Packit Service 779887
"st0            0        (raw 0x00000000000000000000)\n"\
Packit Service 779887
"st1            0        (raw 0x00000000000000000000)\n"\
Packit Service 779887
"st2            0        (raw 0x00000000000000000000)\n"\
Packit Service 779887
"st3            0        (raw 0x00000000000000000000)\n"\
Packit Service 779887
"st4            0        (raw 0x00000000000000000000)\n"\
Packit Service 779887
"st5            0        (raw 0x00000000000000000000)\n"\
Packit Service 779887
"st6            0        (raw 0x00000000000000000000)\n"\
Packit Service 779887
"st7            0        (raw 0x00000000000000000000)\n"\
Packit Service 779887
"fctrl          0x37f    895\n"\
Packit Service 779887
"fstat          0x0      0\n"\
Packit Service 779887
"ftag           0xffff   65535\n"\
Packit Service 779887
"fiseg          0x0      0\n"\
Packit Service 779887
"fioff          0x0      0\n"\
Packit Service 779887
"foseg          0x0      0\n"\
Packit Service 779887
"fooff          0x0      0\n"\
Packit Service 779887
"fop            0x0      0\n"\
Packit Service 779887
"xmm0           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm1           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x2f <repeats 16 times>}, v8_int16 = {0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f}, v4_int32 = {0x2f2f2f2f, 0x2f2f2f2f, 0x2f2f2f2f, 0x2f2f2f2f}, v2_int64 = {0x2f2f2f2f2f2f2f2f, 0x2f2f2f2f2f2f2f2f}, uint128 = 0x2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f}\n"\
Packit Service 779887
"xmm2           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm3           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 13 times>, 0xff, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff00, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0xff00}, v2_int64 = {0x0, 0xff0000000000}, uint128 = 0x0000ff00000000000000000000000000}\n"\
Packit Service 779887
"xmm4           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0xff0000, 0x0}, v2_int64 = {0x0, 0xff0000}, uint128 = 0x0000000000ff00000000000000000000}\n"\
Packit Service 779887
"xmm5           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm6           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm7           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm8           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm9           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm10          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm11          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm12          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 14 times>, 0xff, 0x0}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff}, v4_int32 = {0x0, 0x0, 0x0, 0xff0000}, v2_int64 = {0x0, 0xff000000000000}, uint128 = 0x00ff0000000000000000000000000000}\n"\
Packit Service 779887
"xmm13          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm14          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"xmm15          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}\n"\
Packit Service 779887
"mxcsr          0x1f80   [ IM DM ZM OM UM PM ]\n"\
Packit Service 779887
"Dump of assembler code for function crash:\n"\
Packit Service 779887
"   0x00000000004008a0 <+0>:     push   %rbx\n"\
Packit Service 779887
"   0x00000000004008a1 <+1>:     mov    %rdi,%rbx\n"\
Packit Service 779887
"   0x00000000004008a4 <+4>:     mov    $0x400ac0,%edi\n"\
Packit Service 779887
"   0x00000000004008a9 <+9>:     callq  0x4006f0 <puts@plt>\n"\
Packit Service 779887
"   => 0x00000000004008ae <+14>:    mov    (%rbx),%edx\n"\
Packit Service 779887
"   0x00000000004008b0 <+16>:    mov    $0x400acf,%esi\n"\
Packit Service 779887
"   0x00000000004008b5 <+21>:    mov    $0x1,%edi\n"\
Packit Service 779887
"   0x00000000004008ba <+26>:    xor    %eax,%eax\n"\
Packit Service 779887
"   0x00000000004008bc <+28>:    callq  0x400740 <__printf_chk@plt>\n"\
Packit Service 779887
"   0x00000000004008c1 <+33>:    pop    %rbx\n"\
Packit Service 779887
"   0x00000000004008c2 <+34>:    retq\n"\
Packit Service 779887
"End of assembler dump.\n"
Packit Service 779887
Packit Service 779887
#define CORE_BACKTRACE_CONTENT \
Packit Service 779887
"{   \"signal\": 11\n"\
Packit Service 779887
",   \"only_crash_thread\": true\n"\
Packit Service 779887
",   \"stacktrace\":\n"\
Packit Service 779887
"      [ {   \"crash_thread\": true\n"\
Packit Service 779887
"        ,   \"frames\":\n"\
Packit Service 779887
"              [ {   \"address\": 93894060571040\n"\
Packit Service 779887
"                ,   \"build_id\": \"a4711308c3fe2f0699ea740b0fc13370629f52f2\"\n"\
Packit Service 779887
"                ,   \"build_id_offset\": 2464\n"\
Packit Service 779887
"                ,   \"function_name\": \"crash\"\n"\
Packit Service 779887
"                ,   \"file_name\": \"/usr/bin/will_segfault\"\n"\
Packit Service 779887
"                }\n"\
Packit Service 779887
"              , {   \"address\": 93894060571239\n"\
Packit Service 779887
"                ,   \"build_id\": \"a4711308c3fe2f0699ea740b0fc13370629f52f2\"\n"\
Packit Service 779887
"                ,   \"build_id_offset\": 2663\n"\
Packit Service 779887
"                ,   \"function_name\": \"varargs\"\n"\
Packit Service 779887
"                ,   \"file_name\": \"/usr/bin/will_segfault\"\n"\
Packit Service 779887
"                }\n"\
Packit Service 779887
"              , {   \"address\": 93894060571294\n"\
Packit Service 779887
"                ,   \"build_id\": \"a4711308c3fe2f0699ea740b0fc13370629f52f2\"\n"\
Packit Service 779887
"                ,   \"build_id_offset\": 2718\n"\
Packit Service 779887
"                ,   \"function_name\": \"f\"\n"\
Packit Service 779887
"                ,   \"file_name\": \"/usr/bin/will_segfault\"\n"\
Packit Service 779887
"                }\n"\
Packit Service 779887
"              , {   \"address\": 93894060571337\n"\
Packit Service 779887
"                ,   \"build_id\": \"a4711308c3fe2f0699ea740b0fc13370629f52f2\"\n"\
Packit Service 779887
"                ,   \"build_id_offset\": 2761\n"\
Packit Service 779887
"                ,   \"function_name\": \"callback\"\n"\
Packit Service 779887
"                ,   \"file_name\": \"/usr/bin/will_segfault\"\n"\
Packit Service 779887
"                }\n"\
Packit Service 779887
"              , {   \"address\": 140458064176825\n"\
Packit Service 779887
"                ,   \"build_id\": \"61ee70f1ceca4897eadb680f1afaa669782c53cf\"\n"\
Packit Service 779887
"                ,   \"build_id_offset\": 1721\n"\
Packit Service 779887
"                ,   \"function_name\": \"call_me_back\"\n"\
Packit Service 779887
"                ,   \"file_name\": \"/usr/lib64/libwillcrash.so.0.0.0\"\n"\
Packit Service 779887
"                }\n"\
Packit Service 779887
"              , {   \"address\": 93894060571382\n"\
Packit Service 779887
"                ,   \"build_id\": \"a4711308c3fe2f0699ea740b0fc13370629f52f2\"\n"\
Packit Service 779887
"                ,   \"build_id_offset\": 2806\n"\
Packit Service 779887
"                ,   \"function_name\": \"recursive\"\n"\
Packit Service 779887
"                ,   \"file_name\": \"/usr/bin/will_segfault\"\n"\
Packit Service 779887
"                }\n"\
Packit Service 779887
"              , {   \"address\": 93894060571360\n"\
Packit Service 779887
"                ,   \"build_id\": \"a4711308c3fe2f0699ea740b0fc13370629f52f2\"\n"\
Packit Service 779887
"                ,   \"build_id_offset\": 2784\n"\
Packit Service 779887
"                ,   \"function_name\": \"recursive\"\n"\
Packit Service 779887
"                ,   \"file_name\": \"/usr/bin/will_segfault\"\n"\
Packit Service 779887
"                }\n"\
Packit Service 779887
"              , {   \"address\": 93894060571360\n"\
Packit Service 779887
"                ,   \"build_id\": \"a4711308c3fe2f0699ea740b0fc13370629f52f2\"\n"\
Packit Service 779887
"                ,   \"build_id_offset\": 2784\n"\
Packit Service 779887
"                ,   \"function_name\": \"recursive\"\n"\
Packit Service 779887
"                ,   \"file_name\": \"/usr/bin/will_segfault\"\n"\
Packit Service 779887
"                }\n"\
Packit Service 779887
"              , {   \"address\": 93894060570663\n"\
Packit Service 779887
"                ,   \"build_id\": \"a4711308c3fe2f0699ea740b0fc13370629f52f2\"\n"\
Packit Service 779887
"                ,   \"build_id_offset\": 2087\n"\
Packit Service 779887
"                ,   \"function_name\": \"main\"\n"\
Packit Service 779887
"                ,   \"file_name\": \"/usr/bin/will_segfault\"\n"\
Packit Service 779887
"                } ]\n"\
Packit Service 779887
"        } ]\n"\
Packit Service 779887
"}\n"
Packit Service 779887
Packit Service 779887
typedef struct backtrace_result {
Packit Service 779887
    const char *format;
Packit Service 779887
    const char *result;
Packit Service 779887
    int max_text_size;
Packit Service 779887
    int max_frames;
Packit Service 779887
} backtrace_result_t;
Packit Service 779887
Packit Service 779887
void check(problem_data_t *data, backtrace_result_t br)
Packit Service 779887
{
Packit Service 779887
    problem_formatter_t *pf = problem_formatter_new();
Packit Service 779887
    assert(!problem_formatter_load_string(pf, br.format));
Packit Service 779887
Packit Service 779887
    problem_report_t *pr = NULL;
Packit Service 779887
    problem_report_settings_t report_settings = problem_formatter_get_settings(pf);
Packit Service 779887
    if (br.max_frames >= 0)
Packit Service 779887
        report_settings.prs_shortbt_max_frames = br.max_frames;
Packit Service 779887
    if (br.max_text_size >= 0)
Packit Service 779887
        report_settings.prs_shortbt_max_text_size = br.max_text_size; /* always short bt */
Packit Service 779887
    problem_formatter_set_settings(pf, report_settings);
Packit Service 779887
Packit Service 779887
    assert(!problem_formatter_generate_report(pf, data, &pr);;
Packit Service 779887
    assert(pr != NULL);
Packit Service 779887
Packit Service 779887
    const char *summary = problem_report_get_description(pr);
Packit Service 779887
    assert(summary != NULL);
Packit Service 779887
Packit Service 779887
    if (br.result != NULL) {
Packit Service 779887
        fprintf(stderr, "####\n");
Packit Service 779887
        fprintf(stderr, "# max_text_size %d, max_frames %d\n", br.max_text_size, br.max_frames);
Packit Service 779887
        fprintf(stderr, "expected: '%s'\n", br.result);
Packit Service 779887
        fprintf(stderr, "====\n");
Packit Service 779887
        fprintf(stderr, "result  : '%s'\n", summary);
Packit Service 779887
        fprintf(stderr, "####\n");
Packit Service 779887
Packit Service 779887
        assert(strcmp(br.result, summary) == 0);
Packit Service 779887
    }
Packit Service 779887
Packit Service 779887
    problem_report_free(pr);
Packit Service 779887
    problem_formatter_free(pf);
Packit Service 779887
}
Packit Service 779887
Packit Service 779887
int main(int argc, char **argv)
Packit Service 779887
{
Packit Service 779887
    g_verbose = 3;
Packit Service 779887
Packit Service 779887
    problem_data_t *data = problem_data_new();
Packit Service 779887
    problem_data_add_text_noteditable(data, "package", "libreport");
Packit Service 779887
    problem_data_add_text_noteditable(data, "analyzer", "CCpp");
Packit Service 779887
    problem_data_add_text_noteditable(data, "type", "CCpp");
Packit Service 779887
    problem_data_add_text_noteditable(data, "comment", "Hello, world!");
Packit Service 779887
    problem_data_add_text_noteditable(data, "uuid", "123456789ABCDEF");
Packit Service 779887
    problem_data_add_text_noteditable(data, "uid", "69");
Packit Service 779887
    problem_data_add_text_noteditable(data, "user_name", "abrt");
Packit Service 779887
    problem_data_add_text_noteditable(data, "root", "/var/run/mock/abrt");
Packit Service 779887
    problem_data_add_text_noteditable(data, "description", "I run will_segfault and\nit crashed as expected\n");
Packit Service 779887
    problem_data_add_text_noteditable(data, "core_backtrace", CORE_BACKTRACE_CONTENT);
Packit Service 779887
Packit Service 779887
    backtrace_result_t core_backtrace_result[] = {
Packit Service 779887
        {
Packit Service 779887
            .format = "Truncated backtrace:: %bare_%short_backtrace",
Packit Service 779887
            .result = "Truncated backtrace:\n"
Packit Service 779887
                      "#1 crash in /usr/bin/will_segfault\n"
Packit Service 779887
                      "#2 varargs in /usr/bin/will_segfault\n"
Packit Service 779887
                      "#3 f in /usr/bin/will_segfault\n"
Packit Service 779887
                      "#4 callback in /usr/bin/will_segfault\n"
Packit Service 779887
                      "#5 call_me_back in /usr/lib64/libwillcrash.so.0.0.0\n"
Packit Service 779887
                      "#6 recursive in /usr/bin/will_segfault\n"
Packit Service 779887
                      "#7 main in /usr/bin/will_segfault\n",
Packit Service 779887
            .max_text_size = -1,
Packit Service 779887
            .max_frames = -1
Packit Service 779887
        },
Packit Service 779887
        {
Packit Service 779887
            .format = "Truncated backtrace:: %bare_%short_backtrace",
Packit Service 779887
            .result = "Truncated backtrace:\n"
Packit Service 779887
                      "#1 crash in /usr/bin/will_segfault\n"
Packit Service 779887
                      "#2 varargs in /usr/bin/will_segfault\n"
Packit Service 779887
                      "#3 f in /usr/bin/will_segfault\n"
Packit Service 779887
                      "#4 callback in /usr/bin/will_segfault\n"
Packit Service 779887
                      "#5 call_me_back in /usr/lib64/libwillcrash.so.0.0.0\n",
Packit Service 779887
            .max_text_size = -1,
Packit Service 779887
            .max_frames = 5
Packit Service 779887
        },
Packit Service 779887
        {
Packit Service 779887
            .format = "Truncated backtrace:: %bare_%short_backtrace",
Packit Service 779887
            .result = "Truncated backtrace:\n"
Packit Service 779887
                      "#1 crash in /usr/bin/will_segfault\n",
Packit Service 779887
            .max_text_size = -1,
Packit Service 779887
            .max_frames = 1
Packit Service 779887
        },
Packit Service 779887
        {
Packit Service 779887
            .format = "Truncated backtrace:: %bare_%short_backtrace",
Packit Service 779887
            .result = "Truncated backtrace:\n"
Packit Service 779887
                      "#1 crash in /usr/bin/will_segfault\n",
Packit Service 779887
            .max_text_size = 0,
Packit Service 779887
            .max_frames = 1
Packit Service 779887
        },
Packit Service 779887
        /* core_backtrase is always truncated */
Packit Service 779887
        {
Packit Service 779887
            .format = "Truncated backtrace:: %bare_%short_backtrace",
Packit Service 779887
            .result = "Truncated backtrace:\n"
Packit Service 779887
                      "#1 crash in /usr/bin/will_segfault\n",
Packit Service 779887
            .max_text_size = strlen(CORE_BACKTRACE_CONTENT) + 1,
Packit Service 779887
            .max_frames = 1
Packit Service 779887
        },
Packit Service 779887
    };
Packit Service 779887
Packit Service 779887
    /* if only core_backtrace exist, use it */
Packit Service 779887
    for (size_t i = 0; i < sizeof(core_backtrace_result)/sizeof(*core_backtrace_result); ++i) {
Packit Service 779887
        check(data, core_backtrace_result[i]);
Packit Service 779887
    }
Packit Service 779887
Packit Service 779887
    /* use backtrace, if core_backtrace and backtrace exist */
Packit Service 779887
    problem_data_add_text_noteditable(data, "backtrace", BACKTRACE_CONTENT);
Packit Service 779887
Packit Service 779887
    backtrace_result_t backtrace_result[] = {
Packit Service 779887
        {
Packit Service 779887
            .format = "Truncated backtrace:: %bare_%short_backtrace",
Packit Service 779887
            .result = "Truncated backtrace:\n"
Packit Service 779887
                      "Thread no. 0 (7 frames)\n"
Packit Service 779887
                      " #1 crash at will_segfault.c:19\n"
Packit Service 779887
                      " #2 varargs at will_segfault.c:31\n"
Packit Service 779887
                      " #3 inlined at will_segfault.c:40\n"
Packit Service 779887
                      " #4 f at will_segfault.c:45\n"
Packit Service 779887
                      " #5 callback at will_segfault.c:50\n"
Packit Service 779887
                      " #6 call_me_back at libwillcrash.c:8\n"
Packit Service 779887
                      " #7 recursive at will_segfault.c:59\n",
Packit Service 779887
            .max_text_size = -1,
Packit Service 779887
            .max_frames = -1
Packit Service 779887
        },
Packit Service 779887
        {
Packit Service 779887
            .format = "Truncated backtrace:: %bare_%short_backtrace",
Packit Service 779887
            .result = "Truncated backtrace:\n"
Packit Service 779887
                      "Thread no. 0 (5 frames)\n"
Packit Service 779887
                      " #1 crash at will_segfault.c:19\n"
Packit Service 779887
                      " #2 varargs at will_segfault.c:31\n"
Packit Service 779887
                      " #3 inlined at will_segfault.c:40\n"
Packit Service 779887
                      " #4 f at will_segfault.c:45\n"
Packit Service 779887
                      " #5 callback at will_segfault.c:50\n",
Packit Service 779887
            .max_text_size = -1,
Packit Service 779887
            .max_frames = 5
Packit Service 779887
        },
Packit Service 779887
        {
Packit Service 779887
            .format = "Truncated backtrace:: %bare_%short_backtrace",
Packit Service 779887
            .result = "Truncated backtrace:\n"
Packit Service 779887
                      "Thread no. 0 (1 frames)\n"
Packit Service 779887
                      " #1 crash at will_segfault.c:19\n",
Packit Service 779887
            .max_text_size = -1,
Packit Service 779887
            .max_frames = 1
Packit Service 779887
        },
Packit Service 779887
        {
Packit Service 779887
            .format = "Truncated backtrace:: %bare_%short_backtrace",
Packit Service 779887
            .result = "Truncated backtrace:\n"
Packit Service 779887
                      "Thread no. 0 (1 frames)\n"
Packit Service 779887
                      " #1 crash at will_segfault.c:19\n",
Packit Service 779887
            .max_text_size = 0,
Packit Service 779887
            .max_frames = 1
Packit Service 779887
        },
Packit Service 779887
        {
Packit Service 779887
            .format = "Truncated backtrace:: %bare_%short_backtrace",
Packit Service 779887
            .result = "Truncated backtrace:\n"BACKTRACE_CONTENT,
Packit Service 779887
            .max_text_size = strlen(BACKTRACE_CONTENT) + 1,
Packit Service 779887
            .max_frames = 1
Packit Service 779887
        },
Packit Service 779887
    };
Packit Service 779887
Packit Service 779887
    for (size_t i = 0; i < sizeof(backtrace_result)/sizeof(*backtrace_result); ++i) {
Packit Service 779887
        check(data, backtrace_result[i]);
Packit Service 779887
    }
Packit Service 779887
Packit Service 779887
    problem_data_free(data);
Packit Service 779887
Packit Service 779887
    return 0;
Packit Service 779887
}
Packit Service 779887
]])
Packit Service 779887
## ------ ##
Packit Service 779887
## attach ##
Packit Service 779887
## ------ ##
Packit Service 779887
Packit Service 779887
AT_TESTFUN([attach],
Packit Service 779887
[[
Packit Service 779887
#include "problem_report.h"
Packit Service 779887
#include "internal_libreport.h"
Packit Service 779887
#include <assert.h>
Packit Service 779887
Packit Service 779887
int main(int argc, char **argv)
Packit Service 779887
{
Packit Service 779887
    g_verbose = 3;
Packit Service 779887
Packit Service 779887
    const char *fst[] = { "backtrace", "screenshot", "description", NULL };
Packit Service 779887
Packit Service 779887
    struct test_case {
Packit Service 779887
        const char *format;
Packit Service 779887
        const char *const *files;
Packit Service 779887
    } cases [] = {
Packit Service 779887
        {
Packit Service 779887
            .format = "%attach:: %multiline,%binary,-coredump",
Packit Service 779887
            .files = fst,
Packit Service 779887
        }
Packit Service 779887
    };
Packit Service 779887
Packit Service 779887
    problem_data_t *data = problem_data_new();
Packit Service 779887
    problem_data_add_text_noteditable(data, "package", "libreport");
Packit Service 779887
    problem_data_add_text_noteditable(data, "analyzer", "CCpp");
Packit Service 779887
    problem_data_add_text_noteditable(data, "type", "CCpp");
Packit Service 779887
    problem_data_add_text_noteditable(data, "comment", "Hello, world!");
Packit Service 779887
    problem_data_add_text_noteditable(data, "uuid", "123456789ABCDEF");
Packit Service 779887
    problem_data_add_text_noteditable(data, "uid", "69");
Packit Service 779887
    problem_data_add_text_noteditable(data, "user_name", "abrt");
Packit Service 779887
    problem_data_add_text_noteditable(data, "root", "/var/run/mock/abrt");
Packit Service 779887
    problem_data_add_text_noteditable(data, "description", "I run will_segfault and\nit crashed as expected\n");
Packit Service 779887
    problem_data_add_file(data, "coredump", "/what/ever/path/to/coredump");
Packit Service 779887
    problem_data_add_file(data, "screenshot", "/what/ever/path/to/screenshot");
Packit Service 779887
    problem_data_add_text_noteditable(data, "backtrace",
Packit Service 779887
"Thread 1 (LWP 11865):\n"\
Packit Service 779887
"#0  printf (__fmt=0x400acf \"Result: %d\\n\") at /usr/include/bits/stdio2.h:104\n"\
Packit Service 779887
"No locals.\n"\
Packit Service 779887
"#1  crash (p=p@entry=0x0) at will_segfault.c:19\n"\
Packit Service 779887
"i = <error reading variable i (Cannot access memory at address 0x0)>\n"\
Packit Service 779887
"#2  0x0000000000400964 in varargs (num_args=1, num_args@entry=2) at will_segfault.c:31\n"\
Packit Service 779887
"p = <optimized out>\n"\
Packit Service 779887
"ap = {{gp_offset = 24, fp_offset = 32767, overflow_arg_area = 0x7fff4fc8a0c0, reg_save_area = 0x7fff4fc8a080}}\n"\
Packit Service 779887
"#3  0x00000000004009be in inlined (p=0x0) at will_segfault.c:40\n"\
Packit Service 779887
"num = 42\n"\
Packit Service 779887
"#4  f (p=p@entry=0x0) at will_segfault.c:45\n"\
Packit Service 779887
"No locals.\n"\
Packit Service 779887
"#5  0x00000000004009e9 in callback (data=data@entry=0x0) at will_segfault.c:50\n"\
Packit Service 779887
"No locals.\n"\
Packit Service 779887
"#6  0x00000032f76006f9 in call_me_back (cb=cb@entry=0x4009e0 <callback>, data=data@entry=0x0) at libwillcrash.c:8\n"\
Packit Service 779887
"res = <optimized out>\n"\
Packit Service 779887
"#7  0x0000000000400a14 in recursive (i=i@entry=0) at will_segfault.c:59\n"\
Packit Service 779887
"p = <optimized out>\n"\
Packit Service 779887
"#8  0x0000000000400a00 in recursive (i=i@entry=1) at will_segfault.c:66\n"\
Packit Service 779887
"No locals.\n"\
Packit Service 779887
"#9  0x0000000000400a00 in recursive (i=i@entry=2) at will_segfault.c:66\n"\
Packit Service 779887
"No locals.\n"\
Packit Service 779887
"#10 0x0000000000400775 in main (argc=<optimized out>, argv=<optimized out>) at will_segfault.c:83\n"\
Packit Service 779887
"No locals.\n");
Packit Service 779887
Packit Service 779887
    for (size_t i = 0; i < sizeof(cases)/sizeof(*cases); ++i) {
Packit Service 779887
        fprintf(stderr, "%s", cases[i].format);
Packit Service 779887
Packit Service 779887
        problem_formatter_t *pf = problem_formatter_new();
Packit Service 779887
        assert(!problem_formatter_load_string(pf, cases[i].format));
Packit Service 779887
Packit Service 779887
        problem_report_t *pr = NULL;
Packit Service 779887
        assert(!problem_formatter_generate_report(pf, data, &pr);;
Packit Service 779887
        assert(pr != NULL);
Packit Service 779887
Packit Service 779887
        const char *const *iter = cases[i].files;
Packit Service 779887
Packit Service 779887
        if (*iter != NULL) {
Packit Service 779887
            assert(problem_report_get_attachments(pr));
Packit Service 779887
        }
Packit Service 779887
Packit Service 779887
        GList *clone = g_list_copy_deep(problem_report_get_attachments(pr), (GCopyFunc)xstrdup, NULL);
Packit Service 779887
Packit Service 779887
        while (*iter) {
Packit Service 779887
            GList *item = g_list_find_custom(clone, *iter, (GCompareFunc)strcmp);
Packit Service 779887
Packit Service 779887
            if (item == NULL) {
Packit Service 779887
                fprintf(stderr, "format:       '%s'\n", cases[i].format);
Packit Service 779887
                fprintf(stderr, "missing file: '%s'\n", *iter);
Packit Service 779887
                abort();
Packit Service 779887
            }
Packit Service 779887
            else {
Packit Service 779887
                free(item->data);
Packit Service 779887
                clone = g_list_delete_link(clone, item);
Packit Service 779887
            }
Packit Service 779887
Packit Service 779887
            ++iter;
Packit Service 779887
        }
Packit Service 779887
Packit Service 779887
        if (clone != NULL) {
Packit Service 779887
            for (GList *iter = clone; iter; iter = g_list_next(iter)) {
Packit Service 779887
                fprintf(stderr, "extra : '%s'\n", (const char *)iter->data);
Packit Service 779887
            }
Packit Service 779887
            abort();
Packit Service 779887
        }
Packit Service 779887
Packit Service 779887
        problem_report_free(pr);
Packit Service 779887
        problem_formatter_free(pf);
Packit Service 779887
    }
Packit Service 779887
Packit Service 779887
    problem_data_free(data);
Packit Service 779887
Packit Service 779887
    return 0;
Packit Service 779887
}
Packit Service 779887
]])
Packit Service 779887
Packit Service 779887
Packit Service 779887
## -------------- ##
Packit Service 779887
## custom_section ##
Packit Service 779887
## -------------- ##
Packit Service 779887
Packit Service 779887
AT_TESTFUN([custom_section],
Packit Service 779887
[[
Packit Service 779887
#include "problem_report.h"
Packit Service 779887
#include "internal_libreport.h"
Packit Service 779887
#include <assert.h>
Packit Service 779887
Packit Service 779887
int main(int argc, char **argv)
Packit Service 779887
{
Packit Service 779887
    g_verbose = 3;
Packit Service 779887
Packit Service 779887
    struct test_case;
Packit Service 779887
    struct test_case {
Packit Service 779887
        const char *section_name;
Packit Service 779887
        int section_flags;
Packit Service 779887
        int retval_load;
Packit Service 779887
        int retval_generate;
Packit Service 779887
        const char *format;
Packit Service 779887
        const char *output;
Packit Service 779887
    } cases [] = {
Packit Service 779887
        {   .section_name = NULL,
Packit Service 779887
            .section_flags = 0,
Packit Service 779887
            .retval_load = 1,
Packit Service 779887
            .retval_generate = 0,
Packit Service 779887
            .format =
Packit Service 779887
                "%additional_info::\n"
Packit Service 779887
                ":: package,\\\n"
Packit Service 779887
                "uuid,cwd\\\\"
Packit Service 779887
                ",user_name"
Packit Service 779887
                ,
Packit Service 779887
            .output = NULL,
Packit Service 779887
        },
Packit Service 779887
Packit Service 779887
        {   .section_name = "additional_info",
Packit Service 779887
            .section_flags = 0,
Packit Service 779887
            .retval_load = 0,
Packit Service 779887
            .retval_generate = 0,
Packit Service 779887
            .format =
Packit Service 779887
                "%additional_info::\n"
Packit Service 779887
                ":: package,\\\n"
Packit Service 779887
                "uuid,cwd\\\\"
Packit Service 779887
                ",user_name"
Packit Service 779887
                ,
Packit Service 779887
            .output =
Packit Service 779887
                "package:        libreport\n"
Packit Service 779887
                "uuid:           0123456789ABCDEF\n"
Packit Service 779887
                "user_name:      abrt\n"
Packit Service 779887
                ,
Packit Service 779887
        },
Packit Service 779887
Packit Service 779887
        {   .section_name = "additional_info",
Packit Service 779887
            .section_flags = PFFF_REQUIRED,
Packit Service 779887
            .retval_load = 1,
Packit Service 779887
            .retval_generate = 0,
Packit Service 779887
            .format = "%summary:: [abrt] %package%\n:: %reporter\n",
Packit Service 779887
            .output = NULL,
Packit Service 779887
        },
Packit Service 779887
Packit Service 779887
        {   .section_name = "additional_info",
Packit Service 779887
            .section_flags = 0,
Packit Service 779887
            .retval_load = 0,
Packit Service 779887
            .retval_generate = 0,
Packit Service 779887
            .format = "%summary:: [abrt] %package%\n:: %reporter\n",
Packit Service 779887
            .output = "",
Packit Service 779887
        },
Packit Service 779887
Packit Service 779887
        {   .section_name = "additional_info",
Packit Service 779887
            .section_flags = 0,
Packit Service 779887
            .retval_load = 0,
Packit Service 779887
            .retval_generate = 0,
Packit Service 779887
            .format =
Packit Service 779887
                "%additional_info:: root\n"
Packit Service 779887
                "Info:: package,\\\n"
Packit Service 779887
                "uuid,cwd\\\\"
Packit Service 779887
                ",user_name"
Packit Service 779887
                ,
Packit Service 779887
            .output =
Packit Service 779887
                "Info:\n"
Packit Service 779887
                "package:        libreport\n"
Packit Service 779887
                "uuid:           0123456789ABCDEF\n"
Packit Service 779887
                "user_name:      abrt\n"
Packit Service 779887
                ,
Packit Service 779887
        },
Packit Service 779887
    };
Packit Service 779887
Packit Service 779887
    problem_data_t *data = problem_data_new();
Packit Service 779887
    problem_data_add_text_noteditable(data, "package", "libreport");
Packit Service 779887
    problem_data_add_text_noteditable(data, "crash_function", "run_event");
Packit Service 779887
    problem_data_add_text_noteditable(data, "reason", "Killed by SIGSEGV");
Packit Service 779887
    problem_data_add_text_noteditable(data, "uuid", "0123456789ABCDEF");
Packit Service 779887
    problem_data_add_text_noteditable(data, "user_name", "abrt");
Packit Service 779887
Packit Service 779887
    for (size_t i = 0; i < sizeof(cases)/sizeof(*cases); ++i) {
Packit Service 779887
        fprintf(stderr, "#### Test case %zd ####\n", i + 1);
Packit Service 779887
Packit Service 779887
        struct test_case *tcase = cases + i;
Packit Service 779887
        problem_formatter_t *pf = problem_formatter_new();
Packit Service 779887
Packit Service 779887
        if (tcase->section_name != NULL) {
Packit Service 779887
            problem_formatter_add_section(pf, tcase->section_name, tcase->section_flags);
Packit Service 779887
        }
Packit Service 779887
Packit Service 779887
        int r = problem_formatter_load_string(pf, tcase->format);
Packit Service 779887
        if (r != tcase->retval_load) {
Packit Service 779887
            fprintf(stderr, "Load : expected : %d , got : %d\n", tcase->retval_load, r);
Packit Service 779887
            abort();
Packit Service 779887
        }
Packit Service 779887
Packit Service 779887
        if (tcase->retval_load != 0) {
Packit Service 779887
            goto next_test_case;
Packit Service 779887
        }
Packit Service 779887
Packit Service 779887
        problem_report_t *pr = NULL;
Packit Service 779887
        r = problem_formatter_generate_report(pf, data, &pr);
Packit Service 779887
        if (r != tcase->retval_generate) {
Packit Service 779887
            fprintf(stderr, "Generaet : expected : %d , got : %d\n", tcase->retval_generate, r);
Packit Service 779887
            abort();
Packit Service 779887
        }
Packit Service 779887
Packit Service 779887
        if (tcase->retval_generate != 0) {
Packit Service 779887
            goto next_test_case;
Packit Service 779887
        }
Packit Service 779887
Packit Service 779887
        const char *output = problem_report_get_section(pr, tcase->section_name);
Packit Service 779887
        assert(output);
Packit Service 779887
Packit Service 779887
        if (strcmp(output, tcase->output) != 0) {
Packit Service 779887
            fprintf(stderr, "expected:\n'%s'\n", tcase->output);
Packit Service 779887
            fprintf(stderr, "result  :\n'%s'\n", output);
Packit Service 779887
            abort();
Packit Service 779887
        }
Packit Service 779887
Packit Service 779887
        problem_report_free(pr);
Packit Service 779887
Packit Service 779887
next_test_case:
Packit Service 779887
        problem_formatter_free(pf);
Packit Service 779887
        fprintf(stderr, "#### Finished - Test case %zd ####\n", i + 1);
Packit Service 779887
    }
Packit Service 779887
Packit Service 779887
    problem_data_free(data);
Packit Service 779887
Packit Service 779887
    return 0;
Packit Service 779887
}
Packit Service 779887
]])
Packit Service 779887
Packit Service 779887
## ------ ##
Packit Service 779887
## sanity ##
Packit Service 779887
## ------ ##
Packit Service 779887
Packit Service 779887
AT_TESTFUN([sanity],
Packit Service 779887
[[
Packit Service 779887
#include "problem_report.h"
Packit Service 779887
#include "internal_libreport.h"
Packit Service 779887
#include <errno.h>
Packit Service 779887
#include <assert.h>
Packit Service 779887
Packit Service 779887
void assert_equal_strings(const char *res, const char *exp)
Packit Service 779887
{
Packit Service 779887
    if (    (res == NULL && exp != NULL)
Packit Service 779887
        ||  (res != NULL && exp == NULL)
Packit Service 779887
        || ((res != NULL && exp != NULL) && strcmp(res, exp) != 0)
Packit Service 779887
        ) {
Packit Service 779887
        fprintf(stderr, "expected : '%s'\n", exp);
Packit Service 779887
        fprintf(stderr, "result   : '%s'\n", res);
Packit Service 779887
        abort();
Packit Service 779887
    }
Packit Service 779887
}
Packit Service 779887
Packit Service 779887
int main(int argc, char **argv)
Packit Service 779887
{
Packit Service 779887
    g_verbose = 3;
Packit Service 779887
Packit Service 779887
    problem_formatter_t *pf = problem_formatter_new();
Packit Service 779887
Packit Service 779887
    assert(problem_formatter_add_section(pf, "summary", 0) == -EEXIST);
Packit Service 779887
    assert(problem_formatter_add_section(pf, "description", 0) == -EEXIST);
Packit Service 779887
    assert(problem_formatter_add_section(pf, "attach", 0) == -EEXIST);
Packit Service 779887
Packit Service 779887
    assert(problem_formatter_add_section(pf, "additional_info", 0) == 0);
Packit Service 779887
    assert(problem_formatter_add_section(pf, "additional_info", 0) == -EEXIST);
Packit Service 779887
Packit Service 779887
    problem_data_t *data = problem_data_new();
Packit Service 779887
    problem_data_add_text_noteditable(data, "package", "libreport");
Packit Service 779887
    problem_data_add_text_noteditable(data, "crash_function", "run_event");
Packit Service 779887
    problem_data_add_text_noteditable(data, "reason", "Killed by SIGSEGV");
Packit Service 779887
    problem_data_add_text_noteditable(data, "comment", "Hello, world!");
Packit Service 779887
    problem_data_add_text_noteditable(data, "root", "/var/run/mock/abrt");
Packit Service 779887
    problem_data_add_text_noteditable(data, "user_name", "abrt");
Packit Service 779887
    problem_data_add_file(data, "screenshot", "/what/ever/path/to/screenshot");
Packit Service 779887
Packit Service 779887
    problem_formatter_load_string(pf,
Packit Service 779887
            "%summary:: [abrt] %package% : %reason%\n\n"
Packit Service 779887
            "Description:: %bare_comment\n\n"
Packit Service 779887
            "%attach:: screenshot\n\n"
Packit Service 779887
            "%additional_info::\n\n"
Packit Service 779887
            "User:: root,user_name,uid\n\n\n"
Packit Service 779887
            );
Packit Service 779887
Packit Service 779887
    problem_report_t *pr = NULL;
Packit Service 779887
    problem_formatter_generate_report(pf, data, &pr);
Packit Service 779887
Packit Service 779887
    assert_equal_strings(problem_report_get_summary(pr),
Packit Service 779887
                         "[abrt] libreport : Killed by SIGSEGV");
Packit Service 779887
Packit Service 779887
    problem_report_buffer_printf(problem_report_get_buffer(pr, PR_SEC_SUMMARY), " - test");
Packit Service 779887
Packit Service 779887
    assert_equal_strings(problem_report_get_summary(pr),
Packit Service 779887
                         "[abrt] libreport : Killed by SIGSEGV - test");
Packit Service 779887
Packit Service 779887
Packit Service 779887
    assert_equal_strings(problem_report_get_description(pr),
Packit Service 779887
            "Description:\nHello, world!\n");
Packit Service 779887
Packit Service 779887
    problem_report_buffer_printf(problem_report_get_buffer(pr, PR_SEC_DESCRIPTION), "Test line\n");
Packit Service 779887
Packit Service 779887
    assert_equal_strings(problem_report_get_description(pr),
Packit Service 779887
            "Description:\nHello, world!\nTest line\n");
Packit Service 779887
Packit Service 779887
Packit Service 779887
    assert_equal_strings(problem_report_get_section(pr, "additional_info"),
Packit Service 779887
            "User:\n"
Packit Service 779887
            "root:           /var/run/mock/abrt\n"
Packit Service 779887
            "user_name:      abrt\n"
Packit Service 779887
            );
Packit Service 779887
Packit Service 779887
    problem_report_buffer_printf(problem_report_get_buffer(pr, "additional_info"), "uid:            42\n");
Packit Service 779887
Packit Service 779887
    assert_equal_strings(problem_report_get_section(pr, "additional_info"),
Packit Service 779887
            "User:\n"
Packit Service 779887
            "root:           /var/run/mock/abrt\n"
Packit Service 779887
            "user_name:      abrt\n"
Packit Service 779887
            "uid:            42\n"
Packit Service 779887
            );
Packit Service 779887
Packit Service 779887
Packit Service 779887
    problem_report_free(pr);
Packit Service 779887
    problem_data_free(data);
Packit Service 779887
    problem_formatter_free(pf);
Packit Service 779887
Packit Service 779887
    return 0;
Packit Service 779887
}
Packit Service 779887
]])