diff options
Diffstat (limited to 'src/systemcmds/tests/test_bson.c')
-rw-r--r-- | src/systemcmds/tests/test_bson.c | 72 |
1 files changed, 57 insertions, 15 deletions
diff --git a/src/systemcmds/tests/test_bson.c b/src/systemcmds/tests/test_bson.c index 12d598df4..02384ebfe 100644 --- a/src/systemcmds/tests/test_bson.c +++ b/src/systemcmds/tests/test_bson.c @@ -58,18 +58,29 @@ static const uint8_t sample_data[256] = {0}; static int encode(bson_encoder_t encoder) { - if (bson_encoder_append_bool(encoder, "bool1", sample_bool) != 0) + if (bson_encoder_append_bool(encoder, "bool1", sample_bool) != 0) { warnx("FAIL: encoder: append bool failed"); - if (bson_encoder_append_int(encoder, "int1", sample_small_int) != 0) + } + + if (bson_encoder_append_int(encoder, "int1", sample_small_int) != 0) { warnx("FAIL: encoder: append int failed"); - if (bson_encoder_append_int(encoder, "int2", sample_big_int) != 0) + } + + if (bson_encoder_append_int(encoder, "int2", sample_big_int) != 0) { warnx("FAIL: encoder: append int failed"); - if (bson_encoder_append_double(encoder, "double1", sample_double) != 0) + } + + if (bson_encoder_append_double(encoder, "double1", sample_double) != 0) { warnx("FAIL: encoder: append double failed"); - if (bson_encoder_append_string(encoder, "string1", sample_string) != 0) + } + + if (bson_encoder_append_string(encoder, "string1", sample_string) != 0) { warnx("FAIL: encoder: append string failed"); - if (bson_encoder_append_binary(encoder, "data1", BSON_BIN_BINARY, sizeof(sample_data), sample_data) != 0) + } + + if (bson_encoder_append_binary(encoder, "data1", BSON_BIN_BINARY, sizeof(sample_data), sample_data) != 0) { warnx("FAIL: encoder: append data failed"); + } bson_encoder_fini(encoder); @@ -86,51 +97,63 @@ decode_callback(bson_decoder_t decoder, void *private, bson_node_t node) warnx("FAIL: decoder: bool1 type %d, expected %d", node->type, BSON_BOOL); return 1; } + if (node->b != sample_bool) { - warnx("FAIL: decoder: bool1 value %s, expected %s", - (node->b ? "true" : "false"), - (sample_bool ? "true" : "false")); + warnx("FAIL: decoder: bool1 value %s, expected %s", + (node->b ? "true" : "false"), + (sample_bool ? "true" : "false")); return 1; } + warnx("PASS: decoder: bool1"); return 1; } + if (!strcmp(node->name, "int1")) { if (node->type != BSON_INT32) { warnx("FAIL: decoder: int1 type %d, expected %d", node->type, BSON_INT32); return 1; } + if (node->i != sample_small_int) { warnx("FAIL: decoder: int1 value %lld, expected %d", node->i, sample_small_int); return 1; } + warnx("PASS: decoder: int1"); return 1; } + if (!strcmp(node->name, "int2")) { if (node->type != BSON_INT64) { warnx("FAIL: decoder: int2 type %d, expected %d", node->type, BSON_INT64); return 1; } + if (node->i != sample_big_int) { warnx("FAIL: decoder: int2 value %lld, expected %lld", node->i, sample_big_int); return 1; } + warnx("PASS: decoder: int2"); return 1; } + if (!strcmp(node->name, "double1")) { if (node->type != BSON_DOUBLE) { warnx("FAIL: decoder: double1 type %d, expected %d", node->type, BSON_DOUBLE); return 1; } + if (fabs(node->d - sample_double) > 1e-12) { warnx("FAIL: decoder: double1 value %f, expected %f", node->d, sample_double); return 1; } + warnx("PASS: decoder: double1"); return 1; } + if (!strcmp(node->name, "string1")) { if (node->type != BSON_STRING) { warnx("FAIL: decoder: string1 type %d, expected %d", node->type, BSON_STRING); @@ -150,21 +173,26 @@ decode_callback(bson_decoder_t decoder, void *private, bson_node_t node) warnx("FAIL: decoder: string1 copy failed"); return 1; } + if (bson_decoder_data_pending(decoder) != 0) { warnx("FAIL: decoder: string1 copy did not exhaust all data"); return 1; } + if (sbuf[len - 1] != '\0') { warnx("FAIL: decoder: string1 not 0-terminated"); return 1; } + if (strcmp(sbuf, sample_string)) { warnx("FAIL: decoder: string1 value '%s', expected '%s'", sbuf, sample_string); return 1; } + warnx("PASS: decoder: string1"); return 1; } + if (!strcmp(node->name, "data1")) { if (node->type != BSON_BINDATA) { warnx("FAIL: decoder: data1 type %d, expected %d", node->type, BSON_BINDATA); @@ -177,7 +205,7 @@ decode_callback(bson_decoder_t decoder, void *private, bson_node_t node) warnx("FAIL: decoder: data1 length %d, expected %d", len, sizeof(sample_data)); return 1; } - + if (node->subtype != BSON_BIN_BINARY) { warnx("FAIL: decoder: data1 subtype %d, expected %d", node->subtype, BSON_BIN_BINARY); return 1; @@ -189,20 +217,25 @@ decode_callback(bson_decoder_t decoder, void *private, bson_node_t node) warnx("FAIL: decoder: data1 copy failed"); return 1; } + if (bson_decoder_data_pending(decoder) != 0) { warnx("FAIL: decoder: data1 copy did not exhaust all data"); return 1; } + if (memcmp(sample_data, dbuf, len)) { warnx("FAIL: decoder: data1 compare fail"); return 1; } + warnx("PASS: decoder: data1"); return 1; } - if (node->type != BSON_EOO) + if (node->type != BSON_EOO) { warnx("FAIL: decoder: unexpected node name '%s'", node->name); + } + return 1; } @@ -225,19 +258,28 @@ test_bson(int argc, char *argv[]) int len; /* encode data to a memory buffer */ - if (bson_encoder_init_buf(&encoder, NULL, 0)) + if (bson_encoder_init_buf(&encoder, NULL, 0)) { errx(1, "FAIL: bson_encoder_init_buf"); + } + encode(&encoder); len = bson_encoder_buf_size(&encoder); - if (len <= 0) + + if (len <= 0) { errx(1, "FAIL: bson_encoder_buf_len"); + } + buf = bson_encoder_buf_data(&encoder); - if (buf == NULL) + + if (buf == NULL) { errx(1, "FAIL: bson_encoder_buf_data"); + } /* now test-decode it */ - if (bson_decoder_init_buf(&decoder, buf, len, decode_callback, NULL)) + if (bson_decoder_init_buf(&decoder, buf, len, decode_callback, NULL)) { errx(1, "FAIL: bson_decoder_init_buf"); + } + decode(&decoder); free(buf); |