Blob Blame History Raw
# -*- Autotest -*-

AT_BANNER([make_description])

## -------------- ##
## flag_show_urls ##
## -------------- ##

AT_TESTFUN([flag_show_urls],
[[
#include "internal_libreport.h"
#include <assert.h>

int main(int argc, char **argv)
{
    g_verbose = 3;

    problem_data_t *pd = problem_data_new();

    char *description = make_description(pd, /*skipped names*/NULL, CD_MAX_TEXT_SIZE, MAKEDESC_SHOW_URLS);

    assert(description != NULL || !"Returns NULL for empty problem data");
    assert(description[0] == '\0' || !"Returns non-empty description for empty problem data");

    free(description);

    problem_data_add_text_noteditable(pd, FILENAME_REPORTED_TO, "Bugzilla: URL=https://bugzilla.redhat.com/1000000\n");

    description = make_description(pd, /*skipped names*/NULL, CD_MAX_TEXT_SIZE, MAKEDESC_SHOW_URLS);
    char *expected = xasprintf("%s: %*s%s\n",
            "Reported", 14 - strlen("Reported"), "", "https://bugzilla.redhat.com/1000000");

    if (strcmp(expected, description) != 0)
    {
        printf("E:\n'%s'\n\nC:\n'%s'\n", expected, description);
        assert(!"The description for a single Bugzilla URL do not matches the expected description");
    }

    free(description);
    free(expected);
    problem_data_free(pd);

    pd = problem_data_new();

    problem_data_add_text_noteditable(pd,
        FILENAME_REPORTED_TO,
            "Bugzilla: URL=https://bugzilla.redhat.com/1000000\n"
            "ABRT Server: BTHASH=81680083BIGBOOBS\n"
            "RHTSupport: TIME=12345678 URL=https://access.redhat.com/home MSG=The world's best IT support\n"
            "ABRT Server: URL=https://bug-report.itos.redhat.com\n");

    description = make_description(pd, /*skipped names*/NULL, CD_MAX_TEXT_SIZE, MAKEDESC_SHOW_URLS);
    expected = xasprintf(
           /*0123456789ABCDEF*/
            "Reported:       https://bugzilla.redhat.com/1000000\n"
            "                https://access.redhat.com/home\n"
            "                https://bug-report.itos.redhat.com\n");

    if (strcmp(expected, description) != 0)
    {
        printf("E:\n'%s'\n\nC:\n'%s'\n", expected, description);
        assert(!"The description do not matches the expected description");
    }

    free(description);
    free(expected);
    problem_data_free(pd);

    pd = problem_data_new();

    problem_data_add_text_noteditable(pd, FILENAME_REPORTED_TO, "ABRT Server: BTHASH=81680083BIGBOOBS\n");

    description = make_description(pd, /*skipped names*/NULL, CD_MAX_TEXT_SIZE, MAKEDESC_SHOW_URLS);

    assert(description != NULL || !"Returns NULL for non empty problem data");
    assert(description[0] == '\0' || !"Returns non-empty description for problem data without any URL");

    free(description);
    problem_data_free(pd);

    pd = problem_data_new();

    const int list_flags = CD_FLAG_TXT | CD_FLAG_ISNOTEDITABLE | CD_FLAG_LIST;

    problem_data_add(pd, FILENAME_PACKAGE, "libreport", list_flags);
    problem_data_add(pd, FILENAME_REASON, "will_segfault killed by SIGSEGV", list_flags);
    problem_data_add(pd, FILENAME_COUNT, "0", list_flags);

    problem_data_add_text_noteditable(pd,
        FILENAME_REPORTED_TO,
            "Bugzilla: URL=https://bugzilla.redhat.com/1000000\n"
            "ABRT Server: BTHASH=81680083BIGBOOBS\n"
            "RHTSupport: TIME=12345678 URL=https://access.redhat.com/home MSG=The world's best IT support\n"
            "ABRT Server: URL=https://bug-report.itos.redhat.com\n");

    description = make_description(pd, /*skipped names*/NULL, CD_MAX_TEXT_SIZE, MAKEDESC_SHOW_ONLY_LIST | MAKEDESC_SHOW_URLS);

    expected = xasprintf(
            "%s: %*s%s\n"
            "%s: %*s%s\n"
            "%s: %*s%s\n"
           /*0123456789ABCDEF*/
            "Reported:       https://bugzilla.redhat.com/1000000\n"
            "                https://access.redhat.com/home\n"
            "                https://bug-report.itos.redhat.com\n",
            FILENAME_REASON,     14 - strlen(FILENAME_REASON),     "", "will_segfault killed by SIGSEGV",
            FILENAME_PACKAGE,    14 - strlen(FILENAME_PACKAGE),    "", "libreport",
            FILENAME_COUNT,      14 - strlen(FILENAME_COUNT),      "", "0");

    if (strcmp(expected, description) != 0)
    {
        printf("E:\n'%s'\n\nC:\n'%s'\n", expected, description);
        assert(!"The description do not matches the expected description");
    }

    free(expected);
    free(description);

    const char *const backtrace = "Extremely long backtrace which does not make sense";
    problem_data_add(pd, FILENAME_BACKTRACE, backtrace,  CD_FLAG_TXT | CD_FLAG_ISNOTEDITABLE);

    description = make_description(pd, /*skipped names*/NULL, strlen(backtrace) - 1, MAKEDESC_SHOW_FILES | MAKEDESC_SHOW_URLS);

    expected = xasprintf(
            "%s: %*s%s\n"
            "%s: %*s%s\n"
            "%s: %*s%s\n"
            "%s: %*s%s\n"
           /*0123456789ABCDEF*/
            "Reported:       https://bugzilla.redhat.com/1000000\n"
            "                https://access.redhat.com/home\n"
            "                https://bug-report.itos.redhat.com\n"
            "\n"
            "%s: %*sText file, %llu bytes\n"
            "%s: %*sText file, %llu bytes\n",
            FILENAME_REASON,     14 - strlen(FILENAME_REASON),     "", "will_segfault killed by SIGSEGV",
            FILENAME_PACKAGE,    14 - strlen(FILENAME_PACKAGE),    "", "libreport",
            FILENAME_COUNT,      14 - strlen(FILENAME_COUNT),      "", "0",
            FILENAME_BACKTRACE,  14 - strlen(FILENAME_BACKTRACE),  "", backtrace,
            FILENAME_BACKTRACE,  14 - strlen(FILENAME_BACKTRACE),  "", (long long unsigned)strlen(backtrace),
            FILENAME_REPORTED_TO,14 - strlen(FILENAME_REPORTED_TO),"", (long long unsigned)strlen(problem_data_get_content_or_NULL(pd, FILENAME_REPORTED_TO))
            );

    if (strcmp(expected, description) != 0)
    {
        printf("E:\n'%s'\n\nC:\n'%s'\n", expected, description);
        assert(!"The description do not matches the expected description");
    }

    free(expected);
    free(description);
    problem_data_free(pd);

    /* SHOW_URLS DID NOT BREAK THE OLD BEHAVIOUR */
    pd = problem_data_new();

    problem_data_add(pd, FILENAME_PACKAGE, "libreport", list_flags);
    problem_data_add(pd, FILENAME_REASON, "will_segfault killed by SIGSEGV", list_flags);
    problem_data_add(pd, FILENAME_COUNT, "0", list_flags);
    problem_data_add(pd, FILENAME_BACKTRACE, backtrace,  CD_FLAG_TXT | CD_FLAG_ISNOTEDITABLE);

    description = make_description(pd, /*skipped names*/NULL, strlen(backtrace) - 1, MAKEDESC_SHOW_FILES);

    expected = xasprintf(
            "%s: %*s%s\n"
            "%s: %*s%s\n"
            "%s: %*s%s\n"
            "%s: %*s%s\n"
            "\n"
            "%s: %*sText file, %llu bytes\n",
            FILENAME_REASON,     14 - strlen(FILENAME_REASON),     "", "will_segfault killed by SIGSEGV",
            FILENAME_PACKAGE,    14 - strlen(FILENAME_PACKAGE),    "", "libreport",
            FILENAME_COUNT,      14 - strlen(FILENAME_COUNT),      "", "0",
            FILENAME_BACKTRACE,  14 - strlen(FILENAME_BACKTRACE),  "", backtrace,
            FILENAME_BACKTRACE,  14 - strlen(FILENAME_BACKTRACE),  "", (long long unsigned)strlen(backtrace)
            );

    if (strcmp(expected, description) != 0)
    {
        printf("E:\n'%s'\n\nC:\n'%s'\n", expected, description);
        assert(!"The description do not matches the expected description");
    }

    free(expected);
    free(description);
    problem_data_free(pd);

    return 0;
}
]])

## -------------- ##
## not_reportable ##
## -------------- ##

AT_TESTFUN([not_reportable],
[[

#include "internal_libreport.h"
#include <assert.h>
int main(int argc, char **argv)
{
    g_verbose = 3;

    problem_data_t *pd = problem_data_new();

    problem_data_add_text_noteditable(pd, FILENAME_NOT_REPORTABLE, "not-reportable");

    char *description = make_description(pd, /*skipped names*/NULL, CD_MAX_TEXT_SIZE,
                                         MAKEDESC_SHOW_URLS);

    char *expected = xasprintf("%s: %*s%s\n",
            "Reported", 14 - strlen("Reported"), "", "cannot be reported");

    if (strstr(description, expected) == NULL)
    {
        printf("E:\n'%s'\n\nC:\n'%s'\n", expected, description);
        assert(!"The description for not-reportable do not matches the expected description");
    }

    free(description);
    free(expected);
    problem_data_free(pd);

    return 0;
}

]])