summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/base64.c84
-rwxr-xr-xtest/runtest.sh64
2 files changed, 108 insertions, 40 deletions
diff --git a/test/base64.c b/test/base64.c
index 7b09205..5cb8a7c 100644
--- a/test/base64.c
+++ b/test/base64.c
@@ -16,37 +16,65 @@
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
+#include <unistd.h>
#include <nsutils/base64.h>
int main(int argc, char**argv)
{
- uint8_t *buffer;
- size_t buffer_len=0;
- uint8_t *output;
- size_t output_len;
-
- if (scanf("%1024mc%n", &buffer, (int *)&buffer_len) < 1) {
- return 1;
- }
-
- if (argc == 1) {
- /* encode */
- nsu_base64_encode_alloc(buffer, buffer_len, &output, &output_len);
- } else if ((argv[1][0] == '-') && (argv[1][1] == 'd')) {
- /* decode */
- nsu_base64_decode_alloc(buffer, buffer_len, &output, &output_len);
- } else {
- fprintf(stderr, "Usage: %s [-d]\n", argv[0]);
- return 1;
- }
-
- if (output != NULL) {
- printf("%.*s", (int)output_len, output);
- free(output);
- }
-
- free(buffer);
-
- return 0;
+ uint8_t *buffer;
+ size_t buffer_len=0;
+ uint8_t *output;
+ size_t output_len;
+ int opt;
+ int decode = 0;
+ int url = 0;
+
+
+ while ((opt = getopt(argc, argv, "du")) != -1) {
+ switch (opt) {
+ case 'd':
+ decode = 1;
+ break;
+ case 'u':
+ url = 1;
+ break;
+
+ default: /* '?' */
+ fprintf(stderr, "Usage: %s [-d] [-u]\n", argv[0]);
+ exit(EXIT_FAILURE);
+
+ }
+ }
+
+ if (scanf("%1024mc%n", &buffer, (int *)&buffer_len) < 1) {
+ return 1;
+ }
+
+
+ if (decode) {
+ /* decode */
+ if (url) {
+ nsu_base64_decode_alloc_url(buffer, buffer_len, &output, &output_len);
+ } else {
+
+ nsu_base64_decode_alloc(buffer, buffer_len, &output, &output_len);
+ }
+ } else {
+ /* encode */
+ if (url) {
+ nsu_base64_encode_alloc_url(buffer, buffer_len, &output, &output_len);
+ } else {
+ nsu_base64_encode_alloc(buffer, buffer_len, &output, &output_len);
+ }
+ }
+
+ if (output != NULL) {
+ printf("%.*s", (int)output_len, output);
+ free(output);
+ }
+
+ free(buffer);
+
+ return 0;
}
diff --git a/test/runtest.sh b/test/runtest.sh
index efcb79f..9f02e1c 100755
--- a/test/runtest.sh
+++ b/test/runtest.sh
@@ -5,30 +5,70 @@ b64enctst()
{
ENC=$(echo -n "${1}" | ${TEST_PATH}/test_base64 )
if [ "${ENC}" != "${2}" ];then
- echo "Base64 encode error ${ENC} != ${2}"
+ echo "Base64 encode error '${ENC}' != '${2}'"
exit 2
- fi
+ fi
}
b64dectst()
{
DEC=$(echo -n "$1" | ${TEST_PATH}/test_base64 -d )
if [ "${DEC}" != "$2" ];then
- echo "Base64 decode error ${DEC} != $2"
+ echo "Base64 decode error '${DEC}' != '$2'"
exit 3
- fi
+ fi
}
-b64enctst 'f' 'Zg=='
-b64enctst 'fo' 'Zm8='
-b64enctst 'foo' 'Zm9v'
-b64enctst 'foob' 'Zm9vYg=='
-b64enctst 'fooba' 'Zm9vYmE='
+b64urlenctst()
+{
+ ENC=$(echo -n "${1}" | ${TEST_PATH}/test_base64 -u )
+ if [ "${ENC}" != "${2}" ];then
+ echo "Base64 url encode error '${ENC}' != '${2}'"
+ exit 2
+ fi
+}
+
+b64urldectst()
+{
+ DEC=$(echo -n "$1" | ${TEST_PATH}/test_base64 -d -u )
+ if [ "${DEC}" != "$2" ];then
+ echo "Base64 url decode error '${DEC}' != '$2'"
+ exit 3
+ fi
+}
+
+b64enctst 'f' 'Zg=='
+b64enctst 'fo' 'Zm8='
+b64enctst 'foo' 'Zm9v'
+b64enctst ' >' 'ICA+'
+b64enctst ' ?' 'ICA/'
+b64enctst 'foob' 'Zm9vYg=='
+b64enctst 'fooba' 'Zm9vYmE='
b64enctst 'foobar' 'Zm9vYmFy'
-b64dectst 'Zg==' 'f'
-b64dectst 'Zm8=' 'fo'
-b64dectst 'Zm9v' 'foo'
+b64dectst 'Zg==' 'f'
+b64dectst 'Zm8=' 'fo'
+b64dectst 'Zm9v' 'foo'
+b64dectst 'ICA+' ' >'
+b64dectst 'ICA/' ' ?'
b64dectst 'Zm9vYg==' 'foob'
b64dectst 'Zm9vYmE=' 'fooba'
b64dectst 'Zm9vYmFy' 'foobar'
+
+b64urlenctst 'f' 'Zg=='
+b64urlenctst 'fo' 'Zm8='
+b64urlenctst 'foo' 'Zm9v'
+b64urlenctst ' >' 'ICA-'
+b64urlenctst ' ?' 'ICA_'
+b64urlenctst 'foob' 'Zm9vYg=='
+b64urlenctst 'fooba' 'Zm9vYmE='
+b64urlenctst 'foobar' 'Zm9vYmFy'
+
+b64urldectst 'Zg==' 'f'
+b64urldectst 'Zm8=' 'fo'
+b64urldectst 'Zm9v' 'foo'
+b64urldectst 'ICA-' ' >'
+b64urldectst 'ICA_' ' ?'
+b64urldectst 'Zm9vYg==' 'foob'
+b64urldectst 'Zm9vYmE=' 'fooba'
+b64urldectst 'Zm9vYmFy' 'foobar'