update changelog
[debian/iodine.git] / tests / base32.c
index a3f95bbfd5fea2db7015818cea388adc8da5fe99..9ff0cf74ce0cf57cbfe529f246f8feca2d029ce1 100644 (file)
 #include "base32.h"
 #include "test.h"
 
+#define TUPLES 5
+
 static struct tuple
 {
        char *a;
        char *b;
-} testpairs[] = {
+} testpairs[TUPLES] = {
        { "iodinetestingtesting", "nfxwi0lomv0gk21unfxgo3dfon0gs1th" },
        { "abc123", "mfrggmjsgm" },
-       { NULL, NULL }
+       { "test", "orsxg3a" },
+       { "tst", "orzxi" },
+       { "", "" },
 };
 
 START_TEST(test_base32_encode)
@@ -40,18 +44,14 @@ START_TEST(test_base32_encode)
        char buf[4096];
        struct encoder *b32;
        int val;
-       int i;
 
        b32 = get_base32_encoder();
 
-       for (i = 0; testpairs[i].a != NULL; i++) {
-               len = sizeof(buf);
-               val = b32->encode(buf, &len, testpairs[i].a, strlen(testpairs[i].a));
+       len = sizeof(buf);
+       val = b32->encode(buf, &len, testpairs[_i].a, strlen(testpairs[_i].a));
 
-               fail_unless(val > 0, strerror(errno));
-               fail_unless(strcmp(buf, testpairs[i].b) == 0,
-                               "'%s' != '%s'", buf, testpairs[i].b);
-       }
+       fail_unless(strcmp(buf, testpairs[_i].b) == 0,
+                       "'%s' != '%s'", buf, testpairs[_i].b);
 }
 END_TEST
 
@@ -61,19 +61,15 @@ START_TEST(test_base32_decode)
        char buf[4096];
        struct encoder *b32;
        int val;
-       int i;
        
        b32 = get_base32_encoder();
 
-       for (i = 0; testpairs[i].a != NULL; i++) {
-               len = sizeof(buf);
-               val = b32->decode(buf, &len, testpairs[i].b, strlen(testpairs[i].b));
+       len = sizeof(buf);
+       val = b32->decode(buf, &len, testpairs[_i].b, strlen(testpairs[_i].b));
 
-               fail_unless(val > 0, strerror(errno));
-               fail_unless(buf != NULL, "buf == NULL");
-               fail_unless(strcmp(buf, testpairs[i].a) == 0,
-                               "'%s' != '%s'", buf, testpairs[i].a);
-       }
+       fail_unless(buf != NULL, "buf == NULL");
+       fail_unless(strcmp(buf, testpairs[_i].a) == 0,
+                       "'%s' != '%s'", buf, testpairs[_i].a);
 }
 END_TEST
 
@@ -89,15 +85,58 @@ START_TEST(test_base32_5to8_8to5)
 }
 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
+
 TCase *
 test_base32_create_tests()
 {
        TCase *tc;
 
        tc = tcase_create("Base32");
-       tcase_add_test(tc, test_base32_encode);
-       tcase_add_test(tc, test_base32_decode);
+       tcase_add_loop_test(tc, test_base32_encode, 0, TUPLES);
+       tcase_add_loop_test(tc, test_base32_decode, 0, TUPLES);
        tcase_add_test(tc, test_base32_5to8_8to5);
+       tcase_add_test(tc, test_base32_blksize);
 
        return tc;
 }