1 /* GLib testing framework examples and tests 2 * Copyright (C) 2008 Asbjoern Pettersen 3 * 4 * This work is provided "as is"; redistribution and modification 5 * in whole or in part, in any medium, physical or electronic is 6 * permitted without restriction. 7 * 8 * This work is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11 * 12 * In no event shall the authors or contributors be liable for any 13 * direct, indirect, incidental, special, exemplary, or consequential 14 * damages (including, but not limited to, procurement of substitute 15 * goods or services; loss of use, data, or profits; or business 16 * interruption) however caused and on any theory of liability, whether 17 * in contract, strict liability, or tort (including negligence or 18 * otherwise) arising in any way out of the use of this software, even 19 * if advised of the possibility of such damage. 20 */ 21 22 #include <glib.h> 23 #include <stdlib.h> 24 #include <glib.h> 25 #include <string.h> 26 #ifdef HAVE_UNISTD_H 27 #include <unistd.h> 28 #endif 29 30 #define DATA_SIZE 1024 31 32 struct MyRawData 33 { 34 gint length; /* of data */ 35 guchar data[DATA_SIZE]; 36 }; 37 38 /* 100 pre-encoded string from data[] buffer. Data length from 1..100 39 */ 40 static const char *ok_100_encode_strs[] = { 41 "AA==", 42 "AAE=", 43 "AAEC", 44 "AAECAw==", 45 "AAECAwQ=", 46 "AAECAwQF", 47 "AAECAwQFBg==", 48 "AAECAwQFBgc=", 49 "AAECAwQFBgcI", 50 "AAECAwQFBgcICQ==", 51 "AAECAwQFBgcICQo=", 52 "AAECAwQFBgcICQoL", 53 "AAECAwQFBgcICQoLDA==", 54 "AAECAwQFBgcICQoLDA0=", 55 "AAECAwQFBgcICQoLDA0O", 56 "AAECAwQFBgcICQoLDA0ODw==", 57 "AAECAwQFBgcICQoLDA0ODxA=", 58 "AAECAwQFBgcICQoLDA0ODxAR", 59 "AAECAwQFBgcICQoLDA0ODxAREg==", 60 "AAECAwQFBgcICQoLDA0ODxAREhM=", 61 "AAECAwQFBgcICQoLDA0ODxAREhMU", 62 "AAECAwQFBgcICQoLDA0ODxAREhMUFQ==", 63 "AAECAwQFBgcICQoLDA0ODxAREhMUFRY=", 64 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYX", 65 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGA==", 66 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBk=", 67 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBka", 68 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGw==", 69 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxw=", 70 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd", 71 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHg==", 72 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8=", 73 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8g", 74 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gIQ==", 75 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISI=", 76 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj", 77 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJA==", 78 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCU=", 79 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUm", 80 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJw==", 81 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJyg=", 82 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygp", 83 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKg==", 84 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKis=", 85 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKiss", 86 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLQ==", 87 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4=", 88 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4v", 89 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMA==", 90 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDE=", 91 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEy", 92 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMw==", 93 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ=", 94 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1", 95 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Ng==", 96 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc=", 97 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4", 98 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OQ==", 99 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo=", 100 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7", 101 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PA==", 102 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0=", 103 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+", 104 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+Pw==", 105 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0A=", 106 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BB", 107 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQg==", 108 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkM=", 109 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNE", 110 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERQ==", 111 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUY=", 112 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZH", 113 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSA==", 114 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSEk=", 115 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElK", 116 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKSw==", 117 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0w=", 118 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xN", 119 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTg==", 120 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk8=", 121 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9Q", 122 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUQ==", 123 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVI=", 124 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJT", 125 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVA==", 126 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFU=", 127 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVW", 128 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWVw==", 129 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1g=", 130 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ", 131 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWg==", 132 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWls=", 133 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltc", 134 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXQ==", 135 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV4=", 136 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5f", 137 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYA==", 138 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGE=", 139 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFi", 140 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiYw==", 141 NULL 142 }; 143 144 static void 145 generate_databuffer_for_base64 (struct MyRawData *p) 146 { 147 int i; 148 for (i = 0; i < DATA_SIZE; i++) 149 p->data[i] = i; 150 } 151 152 static void 153 test_base64_encode (void) 154 { 155 int i; 156 gint length = 1; 157 char *text; 158 struct MyRawData myraw; 159 160 generate_databuffer_for_base64 (&myraw); 161 162 for (i = 0; ok_100_encode_strs[i]; i++) 163 { 164 length = i + 1; 165 text = g_base64_encode (myraw.data, length); 166 g_assert_cmpstr (text, ==, ok_100_encode_strs[i]); 167 /* printf ("\"%s\",\n",text); */ 168 g_free (text); 169 } 170 } 171 172 173 static void 174 decode_and_compare (const gchar *datap, 175 const struct MyRawData *p) 176 { 177 guchar *data2; 178 gsize len; 179 int memcmp_decode; 180 181 data2 = g_base64_decode (datap, &len); 182 g_assert_cmpint (len, ==, p->length); 183 /* g_print ("length: got %d, expected %d\n",len, length); */ 184 memcmp_decode = memcmp (p->data, data2, p->length); 185 g_assert_cmpint (memcmp_decode, ==, 0); 186 g_free (data2); 187 } 188 189 static void 190 test_base64_decode (void) 191 { 192 int i; 193 struct MyRawData myraw; 194 195 generate_databuffer_for_base64 (&myraw); 196 197 for (i = 0; ok_100_encode_strs[i]; i++) 198 { 199 myraw.length = i + 1; 200 decode_and_compare (ok_100_encode_strs[i], &myraw); 201 } 202 } 203 204 static void 205 test_base64_encode_decode (void) 206 { 207 int i; 208 char *text; 209 struct MyRawData myraw; 210 211 generate_databuffer_for_base64 (&myraw); 212 213 for (i = 0; i < DATA_SIZE; i++) 214 { 215 myraw.length = i + 1; 216 text = g_base64_encode (myraw.data, myraw.length); 217 218 decode_and_compare (text, &myraw); 219 220 g_free (text); 221 } 222 } 223 224 225 int 226 main (int argc, 227 char *argv[]) 228 { 229 g_test_init (&argc, &argv, NULL); 230 231 g_test_add_func ("/misc/base64/encode", test_base64_encode); 232 g_test_add_func ("/misc/base64/decode", test_base64_decode); 233 g_test_add_func ("/misc/base64/encode_decode", test_base64_encode_decode); 234 235 return g_test_run(); 236 } 237