update changelog
[debian/iodine.git] / tests / base64.c
index 451687915a972c4c75ec4e8ec6b821f268b70957..bd0e9ce5c7b4890708b43d6c6b92becf0d813f69 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006-2007 Bjorn Andersson <flex@kryo.se>, Erik Ekman <yarrick@kryo.se>
+ * Copyright (c) 2006-2009 Bjorn Andersson <flex@kryo.se>, Erik Ekman <yarrick@kryo.se>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
 #include "base64.h"
 #include "test.h"
 
+#define TUPLES 5
+
 static struct tuple
 {
        char *a;
        char *b;
-} testpairs[] = {
+} testpairs[TUPLES] = {
        { "iodinetestingtesting", "Aw8KAw4LDgvZDgLUz2rLC2rPBMC" },
-       { "abc123", "ywjJmtiZ" },
+       { "abc1231", "ywjJmtiZmq" },
        {
          "\xFF\xEF\x7C\xEF\xAE\x78\xDF\x6D\x74\xCF\x2C\x70\xBE\xEB\x6C\xAE\xAA\x68"
          "\x9E\x69\x64\x8E\x28\x60\x7D\xE7\x5C\x6D\xA6\x58\x5D\x65\x54\x4D\x24\x50"
@@ -41,9 +43,9 @@ static struct tuple
          "\xBE\xEB\x6C\xAE\xAA\x68\x9E\x69\x64\x8E\x28\x60\x7D\xE7\x5C\x6D\xA6\x58"
          "\x5D\x65\x54\x4D\x24\x50\x3C\xE3\x4C\x2C\xA2\x48\x1C\x61\x44\x0C\x20\x40",
 
-         "9abba876543210-ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfe999dcbapZ"
-         "776543210-ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba9abba87654"
-         "3210-ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfe999dcba"
+         "+9876543210-ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcbapZ"
+         "776543210-ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba+987654"
+         "3210-ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba"
        },
        {
          "\xFF\xEF\x7C\xEF\xAE\x78\xDF\x6D\x74\xCF\x2C\x70\xBE\xEB\x6C\xAE\xAA\x68"
@@ -55,28 +57,27 @@ static struct tuple
          "\xBE\xEB\x6C\xAE\xA1\x61\x91\x61\x61\x81\x28\x60\x7D\xE7\x5C\x6D\xA6\x58"
          "\x5D\x65\x54\x4D\x24\x50\x3C\xE3\x4C\x2C\xA2\x48\x1C\x61\x44\x0C\x20\x40",
 
-         "9IJJI876543210-ZYXWVUTSRQPONMLK9LMJIHGFEDCBAzyxwvutsrqponmlkjihgfedcbapZ"
-         "776543210-ZYXWVUTSRQfHKwfHGsHGFEDCBAzyxwvutsrqponmlkjihgfedcbaML87654321"
+         "+9876543210-ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcbapZ"
+         "776543210-ZYXWVUTSRQfHKwfHGsHGFEDCBAzyxwvutsrqponmlkjihgfedcba+987654321"
          "0-ZYXWVUTSRQfHKwfHGsHGFEDCBAzyxwvutsrqponmlkjihgfedcba"
        },
-       { NULL, NULL }
+       { "", "" }
 };
 
 START_TEST(test_base64_encode)
 {
        size_t len;
        char buf[4096];
+       struct encoder *b64;
        int val;
-       int i;
 
-       for (i = 0; testpairs[i].a != NULL; i++) {
-               len = sizeof(buf);
-               val = base64_encode(buf, &len, testpairs[i].a, strlen(testpairs[i].a));
+       b64 = get_base64_encoder();
 
-               fail_unless(val > 0, strerror(errno));
-               fail_unless(strcmp(buf, testpairs[i].b) == 0,
-                               "'%s' != '%s'", buf, testpairs[i].b);
-       }
+       len = sizeof(buf);
+       val = b64->encode(buf, &len, testpairs[_i].a, strlen(testpairs[_i].a));
+
+       fail_unless(strcmp(buf, testpairs[_i].b) == 0,
+                       "'%s' != '%s'", buf, testpairs[_i].b);
 }
 END_TEST
 
@@ -84,17 +85,58 @@ START_TEST(test_base64_decode)
 {
        size_t len;
        char buf[4096];
+       struct encoder *b64;
        int val;
+
+       b64 = get_base64_encoder();
+
+       len = sizeof(buf);
+       val = b64->decode(buf, &len, testpairs[_i].b, strlen(testpairs[_i].b));
+
+       fail_unless(buf != NULL, "buf == NULL");
+       fail_unless(strcmp(buf, testpairs[_i].a) == 0,
+                       "'%s' != '%s'", buf, testpairs[_i].a);
+}
+END_TEST
+
+START_TEST(test_base64_blksize)
+{
+       size_t rawlen;
+       size_t enclen;
+       char *rawbuf;
+       char *encbuf;
+       struct encoder *b64;
        int i;
+       int val;
+
+       b64 = get_base64_encoder();
+
+       rawlen = b64->blocksize_raw();
+       enclen = b64->blocksize_encoded();
+
+       rawbuf = malloc(rawlen + 16);
+       encbuf = malloc(enclen + 16);
+
+       for (i = 0; i < rawlen; i++) {
+               rawbuf[i] = 'A';
+       }
+       rawbuf[i] = 0;
+
+       val = b64->encode(encbuf, &enclen, rawbuf, rawlen);
+
+       fail_unless(rawlen == 3, "raw length was %d not 3", rawlen);
+       fail_unless(enclen == 3, "encoded %d bytes, not 3", enclen);
+       fail_unless(val == 4, "encoded string %s was length %d", encbuf, val);
+
+       memset(rawbuf, 0, rawlen + 16);
 
-       for (i = 0; testpairs[i].a != NULL; i++) {
-               len = sizeof(buf);
-               val = base64_decode(buf, &len, testpairs[i].b, strlen(testpairs[i].b));
+       enclen = val;
+       val = b64->decode(rawbuf, &rawlen, encbuf, enclen);
 
-               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(rawlen == 3, "raw length was %d not 3", rawlen);
+       fail_unless(val == 3);
+       for (i = 0; i < rawlen; i++) {
+               fail_unless(rawbuf[i] == 'A');
        }
 }
 END_TEST
@@ -105,8 +147,9 @@ test_base64_create_tests()
        TCase *tc;
 
        tc = tcase_create("Base64");
-       tcase_add_test(tc, test_base64_encode);
-       tcase_add_test(tc, test_base64_decode);
+       tcase_add_loop_test(tc, test_base64_encode, 0, TUPLES);
+       tcase_add_loop_test(tc, test_base64_decode, 0, TUPLES);
+       tcase_add_test(tc, test_base64_blksize);
 
        return tc;
 }