static void print_dtdata(dns_dtdata_t *dt) { isc_result_t result; isc_buffer_t *b = NULL; isc_buffer_allocate(mctx, &b, 2048); if (b == NULL) fatal("out of memory"); CHECKM(dns_dt_datatotext(dt, &b), "dns_dt_datatotext"); printf("%.*s\n", (int) isc_buffer_usedlength(b), (char *) isc_buffer_base(b)); cleanup: if (b != NULL) isc_buffer_free(&b); }
ATF_TC_BODY(totext, tc) { isc_result_t result; dns_dthandle_t handle; isc_uint8_t *data; size_t dsize; FILE *fp = NULL; UNUSED(tc); result = dns_test_begin(NULL, ISC_TRUE); ATF_REQUIRE(result == ISC_R_SUCCESS); result = dns_dt_open(TAPSAVED, dns_dtmode_file, &handle); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_stdio_open(TAPTEXT, "r", &fp); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); /* make sure text conversion gets the right local time */ setenv("TZ", "MST7", 1); while (dns_dt_getframe(&handle, &data, &dsize) == ISC_R_SUCCESS) { dns_dtdata_t *dtdata = NULL; isc_buffer_t *b = NULL; isc_region_t r; char s[BUFSIZ], *p; r.base = data; r.length = dsize; /* read the corresponding line of text */ p = fgets(s, sizeof(s), fp); ATF_CHECK_EQ(p, s); if (p == NULL) break; p = strchr(p, '\n'); if (p != NULL) *p = '\0'; /* parse dnstap frame */ result = dns_dt_parse(mctx, &r, &dtdata); ATF_CHECK_EQ(result, ISC_R_SUCCESS); if (result != ISC_R_SUCCESS) continue; isc_buffer_allocate(mctx, &b, 2048); ATF_CHECK(b != NULL); if (b == NULL) break; /* convert to text and compare */ result = dns_dt_datatotext(dtdata, &b); ATF_CHECK_EQ(result, ISC_R_SUCCESS); ATF_CHECK_STREQ((char *) isc_buffer_base(b), s); dns_dtdata_free(&dtdata); isc_buffer_free(&b); } dns_dt_close(&handle); cleanup(); dns_test_end(); }