Blame tests/libreport_types.at

Packit Service 779887
# -*- Autotest -*-
Packit Service 779887
Packit Service 779887
AT_BANNER([libreport types])
Packit Service 779887
Packit Service 779887
## ------------- ##
Packit Service 779887
## string_vector ##
Packit Service 779887
## ------------- ##
Packit Service 779887
Packit Service 779887
AT_TESTFUN([string_vector],
Packit Service 779887
[[
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 *const raw_value = "foo, blah, bang";
Packit Service 779887
    string_vector_ptr_t vector = string_vector_new_from_string(raw_value);
Packit Service 779887
Packit Service 779887
    assert(strcmp("foo", vector[0]) == 0 || !"The first item");
Packit Service 779887
    assert(strcmp("blah", vector[1]) == 0 || !"The second item");
Packit Service 779887
    assert(strcmp("bang", vector[2]) == 0 || !"The third item");
Packit Service 779887
    assert(NULL == vector[3] || !"NULL-terminated");
Packit Service 779887
Packit Service 779887
    string_vector_free(vector);
Packit Service 779887
Packit Service 779887
    vector = string_vector_new_from_string(NULL);
Packit Service 779887
    assert(NULL == vector[0] || !"NULL-terminated");
Packit Service 779887
Packit Service 779887
    string_vector_free(vector);
Packit Service 779887
Packit Service 779887
    vector = string_vector_new_from_string("");
Packit Service 779887
    assert(NULL == vector[0] || !"NULL-terminated");
Packit Service 779887
Packit Service 779887
    string_vector_free(vector);
Packit Service 779887
}
Packit Service 779887
]])
Packit Service 779887
Packit Service 779887
## ----------------------------------- ##
Packit Service 779887
## map_string_get_set_as_various_types ##
Packit Service 779887
## ----------------------------------- ##
Packit Service 779887
Packit Service 779887
AT_TESTFUN([map_string_get_set_as_various_types],
Packit Service 779887
[[
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
    {
Packit Service 779887
        const char *const key = "my_bool";
Packit Service 779887
        map_string_t *map = new_map_string();
Packit Service 779887
Packit Service 779887
        int retval = 0;
Packit Service 779887
Packit Service 779887
        assert(!try_get_map_string_item_as_bool(map, key, &retval) || !"Returns bool(0) even if option does not exist");
Packit Service 779887
        assert(retval == 0 || !"Modifies bool(0) return value on failure");
Packit Service 779887
Packit Service 779887
        retval = 1;
Packit Service 779887
Packit Service 779887
        assert(!try_get_map_string_item_as_bool(map, key, &retval) || !"Returns bool(1) even if option does not exist");
Packit Service 779887
        assert(retval == 1 || !"Modifies bool(1) return value on failure");
Packit Service 779887
Packit Service 779887
        set_map_string_item_from_bool(map, key, 1);
Packit Service 779887
        assert(get_map_string_item_or_NULL(map, key) || !"Set bool(1)");
Packit Service 779887
        assert(strcmp("yes", get_map_string_item_or_NULL(map, key)) == 0 || !"Invalid string repr for bool(1)");
Packit Service 779887
        assert(try_get_map_string_item_as_bool(map, key, &retval) || !"Failed to return bool(1)");
Packit Service 779887
        assert(retval || !"Failed to convert 'yes' to bool(1)");
Packit Service 779887
Packit Service 779887
        set_map_string_item_from_bool(map, key, 0);
Packit Service 779887
        assert(get_map_string_item_or_NULL(map, key) || !"Set bool(0)");
Packit Service 779887
        assert(strcmp("no", get_map_string_item_or_NULL(map, key)) == 0 || !"Invalid string repr for bool(0)");
Packit Service 779887
        retval = 1;
Packit Service 779887
        assert(try_get_map_string_item_as_bool(map, key, &retval) || !"Failed to return bool(0)");
Packit Service 779887
        assert(!retval || !"Failed to convert 'no' to bool(0)");
Packit Service 779887
Packit Service 779887
        replace_map_string_item(map, xstrdup(key), xstrdup("foo"));
Packit Service 779887
        retval = 1;
Packit Service 779887
        assert(try_get_map_string_item_as_bool(map, key, &retval) || !"Can not convert a random string to bool(0)");
Packit Service 779887
        assert(!retval || !"Failed to convert a random string to bool(0)");
Packit Service 779887
Packit Service 779887
        free_map_string(map);
Packit Service 779887
    }
Packit Service 779887
Packit Service 779887
    {
Packit Service 779887
        const char *const key = "my_int";
Packit Service 779887
        map_string_t *map = new_map_string();
Packit Service 779887
Packit Service 779887
        int retval = INT_MIN;
Packit Service 779887
Packit Service 779887
        assert(!try_get_map_string_item_as_int(map, key, &retval) || !"Returns INT_MIN even if option does not exist");
Packit Service 779887
        assert(retval == INT_MIN || !"Modifies INT_MIN value on failure");
Packit Service 779887
Packit Service 779887
        retval = INT_MAX;
Packit Service 779887
Packit Service 779887
        assert(!try_get_map_string_item_as_int(map, key, &retval) || !"Returns INT_MAX even if option does not exist");
Packit Service 779887
        assert(retval == INT_MAX || !"Modifies INT_MAX value on failure");
Packit Service 779887
Packit Service 779887
        set_map_string_item_from_int(map, key, 12345);
Packit Service 779887
        assert(get_map_string_item_or_NULL(map, key) || !"Set int(12345)");
Packit Service 779887
        assert(strcmp("12345", get_map_string_item_or_NULL(map, key)) == 0 || !"Invalid string repr for int(12345)");
Packit Service 779887
        assert(try_get_map_string_item_as_int(map, key, &retval) || !"Failed to return int(12345)");
Packit Service 779887
        assert(12345 == retval || !"Failed to convert '12345' to int(12345)");
Packit Service 779887
Packit Service 779887
        set_map_string_item_from_int(map, key, -12345);
Packit Service 779887
        assert(get_map_string_item_or_NULL(map, key) || !"Set int(-12345)");
Packit Service 779887
        assert(strcmp("-12345", get_map_string_item_or_NULL(map, key)) == 0 || !"Invalid string repr for int(-12345)");
Packit Service 779887
        assert(try_get_map_string_item_as_int(map, key, &retval) || !"Failed to return int(-12345)");
Packit Service 779887
        assert(-12345 == retval || !"Failed to convert '-12345' to int(-12345)");
Packit Service 779887
Packit Service 779887
        set_map_string_item_from_int(map, key, INT_MAX);
Packit Service 779887
        assert(try_get_map_string_item_as_int(map, key, &retval) || !"Cannot return INT_MAX");
Packit Service 779887
        assert(retval == INT_MAX || !"Garbled INT_MAX");
Packit Service 779887
Packit Service 779887
        set_map_string_item_from_int(map, key, INT_MIN);
Packit Service 779887
        assert(try_get_map_string_item_as_int(map, key, &retval) || !"Cannot return INT_MIN");
Packit Service 779887
        assert(retval == INT_MIN || !"Garbled INT_MIN");
Packit Service 779887
Packit Service 779887
        retval = 69;
Packit Service 779887
        replace_map_string_item(map, xstrdup(key), xstrdup(""));
Packit Service 779887
        assert(!try_get_map_string_item_as_int(map, key, &retval) || !"Converts '' to number");
Packit Service 779887
        assert(retval == 69 || !"Modifies int(69) on ''");
Packit Service 779887
Packit Service 779887
        replace_map_string_item(map, xstrdup(key), xstrdup("foo"));
Packit Service 779887
        assert(!try_get_map_string_item_as_int(map, key, &retval) || !"Converts 'foo' to number");
Packit Service 779887
        assert(retval == 69 || !"Modifies int(69) on 'foo'");
Packit Service 779887
Packit Service 779887
        replace_map_string_item(map, xstrdup(key), xstrdup("777foo"));
Packit Service 779887
        assert(!try_get_map_string_item_as_int(map, key, &retval) || !"Converts '777foo' to number");
Packit Service 779887
        assert(retval == 69 || !"Modifies int(69) on '777foo'");
Packit Service 779887
Packit Service 779887
                                                 /*0123456789ABCDEF*/
Packit Service 779887
        replace_map_string_item(map, xstrdup(key), xstrdup("77777777777777777777777777777777"));
Packit Service 779887
        assert(!try_get_map_string_item_as_int(map, key, &retval) || !"Converts '77777777777777777777777777777777' to number");
Packit Service 779887
        assert(retval == 69 || !"Modifies int(69) on '77777777777777777777777777777777'");
Packit Service 779887
Packit Service 779887
        free_map_string(map);
Packit Service 779887
    }
Packit Service 779887
Packit Service 779887
    {
Packit Service 779887
        const char *const key = "my_uint";
Packit Service 779887
        map_string_t *map = new_map_string();
Packit Service 779887
Packit Service 779887
        unsigned int retval = 0;
Packit Service 779887
Packit Service 779887
        assert(!try_get_map_string_item_as_uint(map, key, &retval) || !"Returns 0 even if option does not exist");
Packit Service 779887
        assert(retval == 0 || !"Modifies 0 value on failure");
Packit Service 779887
Packit Service 779887
        retval = UINT_MAX;
Packit Service 779887
Packit Service 779887
        assert(!try_get_map_string_item_as_uint(map, key, &retval) || !"Returns UINT_MAX even if option does not exist");
Packit Service 779887
        assert(retval == UINT_MAX || !"Modifies UINT_MAX value on failure");
Packit Service 779887
Packit Service 779887
        set_map_string_item_from_uint(map, key, 12345);
Packit Service 779887
        assert(get_map_string_item_or_NULL(map, key) || !"Set uint(12345)");
Packit Service 779887
        assert(strcmp("12345", get_map_string_item_or_NULL(map, key)) == 0 || !"Invalid string repr for uint(12345)");
Packit Service 779887
        assert(try_get_map_string_item_as_uint(map, key, &retval) || !"Failed to return uint(12345)");
Packit Service 779887
        assert(12345 == retval || !"Failed to convert '12345' to uint(12345)");
Packit Service 779887
Packit Service 779887
        set_map_string_item_from_uint(map, key, INT_MAX + 1);
Packit Service 779887
        assert(get_map_string_item_or_NULL(map, key) || !"Set INT_MAX + 1");
Packit Service 779887
        assert(try_get_map_string_item_as_uint(map, key, &retval) || !"Failed to return int(INT_MAX + 1)");
Packit Service 779887
        assert(INT_MAX + 1 == retval || !"Failed to convert 'INT_MAX + 1' to int(INT_MAX + 1)");
Packit Service 779887
Packit Service 779887
        set_map_string_item_from_uint(map, key, UINT_MAX);
Packit Service 779887
        assert(try_get_map_string_item_as_uint(map, key, &retval) || !"Cannot return UINT_MAX");
Packit Service 779887
        assert(retval == UINT_MAX || !"Garbled UINT_MAX");
Packit Service 779887
Packit Service 779887
        set_map_string_item_from_uint(map, key, 0);
Packit Service 779887
        assert(try_get_map_string_item_as_uint(map, key, &retval) || !"Cannot return 0");
Packit Service 779887
        assert(retval == 0 || !"Garbled 0");
Packit Service 779887
Packit Service 779887
        retval = 69;
Packit Service 779887
        replace_map_string_item(map, xstrdup(key), xstrdup(""));
Packit Service 779887
        assert(!try_get_map_string_item_as_uint(map, key, &retval) || !"Converts '' to number");
Packit Service 779887
        assert(retval == 69 || !"Modifies int(69) on ''");
Packit Service 779887
Packit Service 779887
        replace_map_string_item(map, xstrdup(key), xstrdup("foo"));
Packit Service 779887
        assert(!try_get_map_string_item_as_uint(map, key, &retval) || !"Converts 'foo' to number");
Packit Service 779887
        assert(retval == 69 || !"Modifies int(69) on 'foo'");
Packit Service 779887
Packit Service 779887
        replace_map_string_item(map, xstrdup(key), xstrdup("777foo"));
Packit Service 779887
        assert(!try_get_map_string_item_as_uint(map, key, &retval) || !"Converts '777foo' to number");
Packit Service 779887
        assert(retval == 69 || !"Modifies int(69) on '777foo'");
Packit Service 779887
Packit Service 779887
        replace_map_string_item(map, xstrdup(key), xstrdup("77777777777777777777777777777777"));
Packit Service 779887
        assert(!try_get_map_string_item_as_uint(map, key, &retval) || !"Converts '77777777777777777777777777777777' to number");
Packit Service 779887
        assert(retval == 69 || !"Modifies int(69) on '77777777777777777777777777777777'");
Packit Service 779887
Packit Service 779887
        replace_map_string_item(map, xstrdup(key), xstrdup("-1"));
Packit Service 779887
        assert(!try_get_map_string_item_as_uint(map, key, &retval) || !"Converts '-1' to unsigned number");
Packit Service 779887
        assert(retval == 69 || !"Modifies int(69) on '-1'");
Packit Service 779887
Packit Service 779887
        free_map_string(map);
Packit Service 779887
    }
Packit Service 779887
Packit Service 779887
    {
Packit Service 779887
        const char *const key = "my_string";
Packit Service 779887
        map_string_t *map = new_map_string();
Packit Service 779887
Packit Service 779887
        char *retval = NULL;
Packit Service 779887
Packit Service 779887
        assert(!try_get_map_string_item_as_string(map, key, &retval) || !"Returns string(NULL) even if option does not exist");
Packit Service 779887
        assert(retval == NULL || !"Modifies string(NULL) return value on failure");
Packit Service 779887
Packit Service 779887
        char *bck = xstrdup("test");
Packit Service 779887
        retval = bck;
Packit Service 779887
Packit Service 779887
        assert(!try_get_map_string_item_as_string(map, key, &retval) || !"Returns string('test') even if option does not exist");
Packit Service 779887
        assert(retval == bck || !"Modifies string('test') return value on failure");
Packit Service 779887
Packit Service 779887
        retval = xstrdup(bck);
Packit Service 779887
        set_map_string_item_from_string(map, key, bck);
Packit Service 779887
Packit Service 779887
        free(bck);
Packit Service 779887
        bck = retval;
Packit Service 779887
        retval = NULL;
Packit Service 779887
Packit Service 779887
        assert(try_get_map_string_item_as_string(map, key, &retval) || !"Cannot return string('test')");
Packit Service 779887
        assert(NULL != retval || !"The return value is not assigned to the return variable");
Packit Service 779887
        assert(strcmp(bck, retval) == 0 || !"Garbled string('test') after freeing the original pointer");
Packit Service 779887
Packit Service 779887
        free(bck);
Packit Service 779887
        free(retval);
Packit Service 779887
Packit Service 779887
        bck = xstrdup(key);
Packit Service 779887
Packit Service 779887
        set_map_string_item_from_string(map, bck, "test");
Packit Service 779887
        free(bck);
Packit Service 779887
Packit Service 779887
        assert(try_get_map_string_item_as_string(map, key, &retval) || !"Cannot find key string('my_string') after freeing original key");
Packit Service 779887
        assert(NULL != retval || !"The return value is not assigned to the return variable");
Packit Service 779887
Packit Service 779887
        /* disabled because this line was failing during an i686 build on RHEL8 */
Packit Service 779887
        /* need to investigate what it's good for in the first place */
Packit Service 779887
        //assert(strcmp(bck, retval) == 0 || !"Garbled string('test') after freeing the original key value");
Packit Service 779887
Packit Service 779887
        /* TODO: try to store really big string */
Packit Service 779887
Packit Service 779887
        free_map_string(map);
Packit Service 779887
    }
Packit Service 779887
Packit Service 779887
    {
Packit Service 779887
        const char *const key = "my_string_vector";
Packit Service 779887
        map_string_t *map = new_map_string();
Packit Service 779887
Packit Service 779887
        string_vector_ptr_t retval = NULL;
Packit Service 779887
Packit Service 779887
        assert(!try_get_map_string_item_as_string_vector(map, key, &retval) || !"Returns string_vector(NULL) even if option does not exist");
Packit Service 779887
        assert(retval == NULL || !"Modifies string_vector(NULL) return value on failure");
Packit Service 779887
Packit Service 779887
        const char *const raw_value = "foo, blah, bang";
Packit Service 779887
        string_vector_ptr_t vector = string_vector_new_from_string(raw_value);
Packit Service 779887
Packit Service 779887
        set_map_string_item_from_string_vector(map, key, vector);
Packit Service 779887
Packit Service 779887
        assert(get_map_string_item_or_NULL(map, key) || !"Set string_vector('foo, blah, bang')");
Packit Service 779887
        assert(strcmp(raw_value, get_map_string_item_or_NULL(map, key)) == 0 || !"Invalid string repr for string_vector('foo, blah, bang')");
Packit Service 779887
        assert(try_get_map_string_item_as_string_vector(map, key, &retval) || !"Failed to return string_vector('foo, blah, bang')");
Packit Service 779887
        assert(retval || !"Failed to convert 'foo, blah, bang' to string_vector('foo, blah, bang')");
Packit Service 779887
Packit Service 779887
        string_vector_free(vector);
Packit Service 779887
Packit Service 779887
        free_map_string(map);
Packit Service 779887
    }
Packit Service 779887
}
Packit Service 779887
]])