test-hash-format.c revision bcb4e51a409d94ae670de96afb8483a4f7855294
bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (c) 2010-2018 Dovecot authors, see the included COPYING file */
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen#include "test-lib.h"
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen#include "str.h"
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen#include "hash-format.h"
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainenstruct hash_format_test {
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen const char *input;
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen const char *output;
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen};
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainenvoid test_hash_format(void)
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen{
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen static const char *fail_input[] = {
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen "%",
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen "%A{sha1}",
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen "%{sha1",
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen "%{sha1:8",
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen "%{sha1:8a}",
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen "%{sha1:0}",
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen "%{sha1:168}",
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen NULL
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen };
b7324e421e2132cbbf753e6fdbe675bbaecdf929Timo Sirainen static const struct hash_format_test tests[] = {
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen { "%{sha1}", "8843d7f92416211de9ebb963ff4ce28125932878" },
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen { "*%{sha1}*", "*8843d7f92416211de9ebb963ff4ce28125932878*" },
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen { "*%{sha1:8}*", "*88*" },
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen { "%{sha1:152}", "8843d7f92416211de9ebb963ff4ce281259328" },
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen { "%X{size}", "6" },
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen { "%{sha256:80}", "c3ab8ff13720e8ad9047" },
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen { "%{sha512:80}", "0a50261ebd1a390fed2b" },
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen { "%{md4}", "547aefd231dcbaac398625718336f143" },
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen { "%{md5}", "3858f62230ac3c915f300c664312c63f" },
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen { "%{sha256:80}-%X{size}", "c3ab8ff13720e8ad9047-6" }
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen };
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen struct hash_format *format;
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen string_t *str = t_str_new(128);
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen const char *error;
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen unsigned int i;
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen test_begin("hash_format");
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen for (i = 0; fail_input[i] != NULL; i++)
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen test_assert(hash_format_init(fail_input[i], &format, &error) < 0);
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen for (i = 0; i < N_ELEMENTS(tests); i++) {
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen test_assert(hash_format_init(tests[i].input, &format, &error) == 0);
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen hash_format_loop(format, "foo", 3);
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen hash_format_loop(format, "bar", 3);
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen str_truncate(str, 0);
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen hash_format_deinit(&format, str);
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen test_assert(strcmp(str_c(str), tests[i].output) == 0);
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen }
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen test_end();
37bd98570b30513255a19cc52de16594bc4256e0Timo Sirainen}