bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (c) 2015-2018 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{
b7324e421e2132cbbf753e6fdbe675bbaecdf929Timo Sirainen static const 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 },
e17e53f2a05478b3306d382b87d92c32334cbcf5Timo Sirainen { "a: \r\n", "a3871371f2d468493005286282ae10549dab2c57", FALSE },
e17e53f2a05478b3306d382b87d92c32334cbcf5Timo Sirainen { "a: b\r\n", "44ef6a20971148dd54a161f79814e22e2d098ddb", FALSE },
e17e53f2a05478b3306d382b87d92c32334cbcf5Timo Sirainen { "a: b \r\n", "44ef6a20971148dd54a161f79814e22e2d098ddb", FALSE },
e17e53f2a05478b3306d382b87d92c32334cbcf5Timo Sirainen { "a: b \r\n", "44ef6a20971148dd54a161f79814e22e2d098ddb", FALSE },
e17e53f2a05478b3306d382b87d92c32334cbcf5Timo Sirainen { "a: b \r\n", "44ef6a20971148dd54a161f79814e22e2d098ddb", FALSE },
e17e53f2a05478b3306d382b87d92c32334cbcf5Timo Sirainen { "a: b\r\n\r\n", "938b96404495cced816e3a4f6031734eab4e71b3", TRUE },
e17e53f2a05478b3306d382b87d92c32334cbcf5Timo Sirainen { "a: b\r\n\r\r\n", "44ef6a20971148dd54a161f79814e22e2d098ddb", FALSE },
29fc8f1dc678f9698363181ea599e6db105ea50fTimo Sirainen { "a: b\r\n\r\r\nc: d\r\n\r\n", "44ef6a20971148dd54a161f79814e22e2d098ddb", TRUE },
29fc8f1dc678f9698363181ea599e6db105ea50fTimo Sirainen { "a: b\r\n \r\n", "44ef6a20971148dd54a161f79814e22e2d098ddb", FALSE },
29fc8f1dc678f9698363181ea599e6db105ea50fTimo Sirainen { "a: b\r\n \r\n", "44ef6a20971148dd54a161f79814e22e2d098ddb", FALSE },
29fc8f1dc678f9698363181ea599e6db105ea50fTimo Sirainen { "a: b\r\n\t\r\n", "44ef6a20971148dd54a161f79814e22e2d098ddb", FALSE },
4ca4d6e091697cda1319d03479301e3238a7730eTimo Sirainen { "a: b\t\t\t\t\r\n", "44ef6a20971148dd54a161f79814e22e2d098ddb", FALSE },
cefa6f3df2f30d84f8279109e9152cada9f67e16Timo Sirainen { "a: b\nfoo\n", "44ef6a20971148dd54a161f79814e22e2d098ddb", FALSE },
cefa6f3df2f30d84f8279109e9152cada9f67e16Timo Sirainen
cefa6f3df2f30d84f8279109e9152cada9f67e16Timo Sirainen { "a: b\nc: d\n", "4dbea2c1bdd1323e15931382c1835200d9286230", FALSE },
cefa6f3df2f30d84f8279109e9152cada9f67e16Timo Sirainen { "a:b\nc:d\n", "4dbea2c1bdd1323e15931382c1835200d9286230", FALSE },
cefa6f3df2f30d84f8279109e9152cada9f67e16Timo Sirainen { "a: b\nfoo\nc: d\n", "4dbea2c1bdd1323e15931382c1835200d9286230", FALSE },
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));
061046c9aa2eec5c6c2f148ec95a4e51db3d8fd2Timo Sirainen test_assert_idx(pop3_migration_get_hdr_sha1(1, input, 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{
baf3e87e186453fda13bd21f7cbcb2efc8492e8bTimo Sirainen static void (*const 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}