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