test-pop3-migration-plugin.c revision 02c335c23bf5fa225a467c19f2c063fb0dc7b8c3
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen/* Copyright (c) 2015-2016 Dovecot authors, see the included COPYING file */
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen#include "lib.h"
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen#include "sha1.h"
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen#include "hex-binary.h"
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen#include "istream.h"
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen#include "test-common.h"
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen#include "pop3-migration-plugin.h"
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainenstatic void test_pop3_migration_get_hdr_sha1(void)
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen{
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen struct {
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen const char *input;
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen const char *sha1;
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen bool have_eoh;
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen } tests[] = {
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen { "", "da39a3ee5e6b4b0d3255bfef95601890afd80709", FALSE },
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen { "\n", "adc83b19e793491b1c6ea0fd8b46cd9f32e592fc", TRUE },
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen { "a: b\r\n", "3edb5ce145cf1d1e2413e02b8bed70f1ae3ed105", FALSE },
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen { "a: b\r\n\r\n", "d14841695e1d9e2de6625d9222abd149ec821b0d", TRUE },
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen { "a: b\r\n\r\r\n", "3edb5ce145cf1d1e2413e02b8bed70f1ae3ed105", FALSE },
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen { "a: b\r\n\r\r\nc: d\r\n\r\n", "3edb5ce145cf1d1e2413e02b8bed70f1ae3ed105", TRUE }
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen };
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen struct istream *input;
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen unsigned char digest[SHA1_RESULTLEN];
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen unsigned int i;
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen bool have_eoh;
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen test_begin("pop3 migration get hdr sha1");
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen for (i = 0; i < N_ELEMENTS(tests); i++) {
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen input = i_stream_create_from_data(tests[i].input,
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen strlen(tests[i].input));
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen test_assert_idx(pop3_migration_get_hdr_sha1(1, input, strlen(tests[i].input),
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen digest, &have_eoh) == 0, i);
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen test_assert_idx(strcasecmp(binary_to_hex(digest, sizeof(digest)), tests[i].sha1) == 0, i);
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen test_assert_idx(tests[i].have_eoh == have_eoh, i);
687fd73a7aa1bcb11470d6af0955dbbc14783c72Timo Sirainen i_stream_unref(&input);
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen }
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen test_end();
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen}
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainenint main(void)
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen{
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen static void (*test_functions[])(void) = {
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen test_pop3_migration_get_hdr_sha1,
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen NULL
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen };
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen return test_run(test_functions);
e18e90938ffd9e31c796c405404be0b7dcd5c807Timo Sirainen}