END_TEST START_TEST(test_base32_decode) { size_t len; char buf[4096]; struct encoder *b32; int val; b32 = get_base32_encoder(); len = sizeof(buf); val = b32->decode(buf, &len, testpairs[_i].b, strlen(testpairs[_i].b)); fail_unless(val == strlen(testpairs[_i].a)); fail_unless(strcmp(buf, testpairs[_i].a) == 0, "'%s' != '%s'", buf, testpairs[_i].a); }
END_TEST START_TEST(test_base32_blksize) { size_t rawlen; size_t enclen; char *rawbuf; char *encbuf; struct encoder *b32; int i; int val; b32 = get_base32_encoder(); rawlen = b32->blocksize_raw(); enclen = b32->blocksize_encoded(); rawbuf = malloc(rawlen + 16); encbuf = malloc(enclen + 16); for (i = 0; i < rawlen; i++) { rawbuf[i] = 'A'; } rawbuf[i] = 0; val = b32->encode(encbuf, &enclen, rawbuf, rawlen); fail_unless(rawlen == 5, "raw length was %d not 5", rawlen); fail_unless(enclen == 5, "encoded %d bytes, not 5", enclen); fail_unless(val == 8, "encoded string %s was length %d", encbuf, val); memset(rawbuf, 0, rawlen + 16); enclen = val; val = b32->decode(rawbuf, &rawlen, encbuf, enclen); fail_unless(rawlen == 5, "raw length was %d not 5", rawlen); fail_unless(val == 5, "val was not 5 but %d", val); for (i = 0; i < rawlen; i++) { fail_unless(rawbuf[i] == 'A'); } }
END_TEST START_TEST(test_build_hostname) { char data[256]; char buf[1024]; char *topdomain = "a.c"; int buflen; int i; for (i = 0; i < sizeof(data); i++) { data[i] = i & 0xFF; } buflen = sizeof(buf); for (i = 1; i < sizeof(data); i++) { int len = build_hostname(buf, buflen, data, i, topdomain, get_base32_encoder(), sizeof(buf)); fail_if(len > i); fail_if(strstr(buf, ".."), "Found double dots when encoding data len %d! buf: %s", i, buf); } }
END_TEST START_TEST(test_decode_query) { char buf[512]; char *domain; struct query q; struct encoder *enc; size_t len; memset(&q, 0, sizeof(struct query)); memset(&buf, 0, sizeof(buf)); q.id = 0; len = sizeof(query_packet) - 1; enc = get_base32_encoder(); dns_decode(buf, sizeof(buf), &q, QR_QUERY, query_packet, len); domain = strstr(q.name, topdomain); len = sizeof(buf); unpack_data((uint8_t *)buf, len, (uint8_t *)(q.name + 1), (int) (domain - q.name) - 1, enc); fail_unless(strncmp(buf, innerData, strlen(innerData)) == 0, "Did not extract expected host: '%s'", buf); fail_unless(strlen(buf) == strlen(innerData), "Bad host length: %d, expected %d: '%s'", strlen(buf), strlen(innerData), buf); }