Blame testing/fulltests/unit-tests/T016read_config_clib.c

Packit Service b38f0b
/* HEADER Testing read_config_read_octet_string_const(). */
Packit Service b38f0b
Packit Service b38f0b
struct read_config_testcase {
Packit Service b38f0b
    /*
Packit Service b38f0b
     * inputs 
Packit Service b38f0b
     */
Packit Service b38f0b
    const char     *(*pf) (const char * readfrom, u_char ** str,
Packit Service b38f0b
                           size_t * len);
Packit Service b38f0b
    const char     *readfrom;
Packit Service b38f0b
    size_t          obuf_len;
Packit Service b38f0b
Packit Service b38f0b
    /*
Packit Service b38f0b
     * expected outputs 
Packit Service b38f0b
     */
Packit Service b38f0b
    size_t          expected_offset;
Packit Service b38f0b
    const u_char   *expected_output;
Packit Service b38f0b
    size_t          expected_len;
Packit Service b38f0b
};
Packit Service b38f0b
Packit Service b38f0b
static const u_char obuf1[] = { 1, 0, 2 };
Packit Service b38f0b
static const u_char obuf2[] = { 'a', 'b', 'c', 0 };
Packit Service b38f0b
Packit Service b38f0b
static const struct read_config_testcase test_input[] = {
Packit Service b38f0b
    { &read_config_read_octet_string_const, "",           1, -1, NULL,  0 },
Packit Service b38f0b
    { &read_config_read_octet_string_const, "0x0",        1, -1, NULL,  1 },
Packit Service b38f0b
    { &read_config_read_octet_string_const, "0x0 0",      1, -1, NULL,  1 },
Packit Service b38f0b
Packit Service b38f0b
    { &read_config_read_octet_string_const, "0x010002",   1, -1, NULL,  0 },
Packit Service b38f0b
    { &read_config_read_octet_string_const, "0x010002",   2, -1, NULL,  0 },
Packit Service b38f0b
    { &read_config_read_octet_string_const, "0x010002",   3, -1, obuf1, 0 },
Packit Service b38f0b
    { &read_config_read_octet_string_const, "0x010002",   4, -1, obuf1, 3 },
Packit Service b38f0b
    { &read_config_read_octet_string_const, "0x010002 0", 4,  9, obuf1, 3 },
Packit Service b38f0b
    { &read_config_read_octet_string_const, "0x010002",   0, -1, obuf1, 3 },
Packit Service b38f0b
Packit Service b38f0b
    { &read_config_read_octet_string_const, "abc",        1, -1, NULL,  0 },
Packit Service b38f0b
    { &read_config_read_octet_string_const, "abc z",      1,  4, NULL,  0 },
Packit Service b38f0b
    { &read_config_read_octet_string_const, "abc",        2, -1, NULL,  1 },
Packit Service b38f0b
    { &read_config_read_octet_string_const, "abc",        3, -1, obuf2, 2 },
Packit Service b38f0b
    { &read_config_read_octet_string_const, "abc",        4, -1, obuf2, 3 },
Packit Service b38f0b
    { &read_config_read_octet_string_const, "abc z",      4,  4, obuf2, 3 },
Packit Service b38f0b
    { &read_config_read_octet_string_const, "abc",        0, -1, obuf2, 3 },
Packit Service b38f0b
};
Packit Service b38f0b
Packit Service b38f0b
unsigned int i, j, ok;
Packit Service b38f0b
Packit Service b38f0b
for (i = 0; i < sizeof(test_input) / sizeof(test_input[0]); i++) {
Packit Service b38f0b
    const struct read_config_testcase *const p = &test_input[i];
Packit Service b38f0b
    size_t          len = p->obuf_len;
Packit Service b38f0b
    u_char         *str = len > 0 ? malloc(len) : NULL;
Packit Service b38f0b
    const char     *result;
Packit Service b38f0b
    size_t          offset;
Packit Service b38f0b
Packit Service b38f0b
    fflush(stdout);
Packit Service b38f0b
    result = (p->pf) (p->readfrom, &str, &len;;
Packit Service b38f0b
    offset = result ? result - p->readfrom : -1;
Packit Service b38f0b
    OKF(offset == p->expected_offset,
Packit Service b38f0b
        ("test %d: expected offset %" NETSNMP_PRIz "d, got offset %"
Packit Service b38f0b
         NETSNMP_PRIz "d", i, p->expected_offset, offset));
Packit Service b38f0b
    if (offset == p->expected_offset) {
Packit Service b38f0b
        OKF(len == p->expected_len,
Packit Service b38f0b
            ("test %d: expected length %" NETSNMP_PRIz "d, got length %"
Packit Service b38f0b
             NETSNMP_PRIz "d", i, p->expected_len, len));
Packit Service b38f0b
        if (len == p->expected_len) {
Packit Service b38f0b
            ok = len < 0 || !p->expected_output
Packit Service b38f0b
                || memcmp(str, p->expected_output, len) == 0
Packit Service b38f0b
                || p->expected_output[len] != 0;
Packit Service b38f0b
            OKF(ok, ("test %d: output buffer mismatch", i));
Packit Service b38f0b
            if (!ok) {
Packit Service b38f0b
                printf("Expected: ");
Packit Service b38f0b
                for (j = 0; j < p->expected_len; ++j)
Packit Service b38f0b
                    printf("%02x ", p->expected_output[j]);
Packit Service b38f0b
                printf("\nActual:   ");
Packit Service b38f0b
                for (j = 0; j < len; ++j)
Packit Service b38f0b
                    printf("%02x ", str[j]);
Packit Service b38f0b
                printf("\n");
Packit Service b38f0b
            }
Packit Service b38f0b
        }
Packit Service b38f0b
    }
Packit Service b38f0b
Packit Service b38f0b
    if (str)
Packit Service b38f0b
        free(str);
Packit Service b38f0b
}