]>
git.proxmox.com Git - ceph.git/blob - ceph/src/test/mime.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 * Ceph - scalable distributed file system
6 * Copyright (C) 2011 New Dream Network
8 * This is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License version 2.1, as published by the Free Software
11 * Foundation. See file COPYING.
14 #include "common/mime.h"
15 #include "gtest/gtest.h"
22 TEST(MimeTests
, SimpleEncode
) {
24 memset(output
, 0, sizeof(output
));
27 len
= mime_encode_as_qp("abc", NULL
, 0);
29 len
= mime_encode_as_qp("abc", output
, 4);
31 ASSERT_EQ(string("abc"), string(output
));
33 len
= mime_encode_as_qp("a=b", NULL
, 0);
35 len
= mime_encode_as_qp("a=b", output
, 6);
37 ASSERT_EQ(string("a=3Db"), string(output
));
39 len
= mime_encode_as_qp("Libert\xc3\xa9", NULL
, 0);
41 len
= mime_encode_as_qp("Libert\xc3\xa9", output
, 13);
43 ASSERT_EQ(string("Libert=C3=A9"), string(output
));
46 TEST(MimeTests
, EncodeOutOfSpace
) {
48 memset(output
, 0, sizeof(output
));
51 len
= mime_encode_as_qp("abcdefg", NULL
, 0);
53 len
= mime_encode_as_qp("abcdefg", output
, 4);
55 ASSERT_EQ(string("abc"), string(output
));
56 len
= mime_encode_as_qp("abcdefg", output
, 1);
58 ASSERT_EQ(string(""), string(output
));
60 len
= mime_encode_as_qp("a=b", output
, 2);
62 ASSERT_EQ(string("a"), string(output
));
63 len
= mime_encode_as_qp("a=b", output
, 3);
65 ASSERT_EQ(string("a"), string(output
));
68 TEST(MimeTests
, SimpleDecode
) {
70 memset(output
, 0, sizeof(output
));
73 len
= mime_decode_from_qp("abc", NULL
, 0);
75 len
= mime_decode_from_qp("abc", output
, 4);
77 ASSERT_EQ(string("abc"), string(output
));
79 len
= mime_decode_from_qp("a=3Db", NULL
, 0);
81 len
= mime_decode_from_qp("a=3Db", output
, 4);
83 ASSERT_EQ(string("a=b"), string(output
));
85 len
= mime_decode_from_qp("Libert=C3=A9", NULL
, 0);
87 len
= mime_decode_from_qp("Libert=C3=A9", output
, 9);
89 ASSERT_EQ(string("Libert\xc3\xa9"), string(output
));
92 TEST(MimeTests
, LowercaseDecode
) {
94 memset(output
, 0, sizeof(output
));
97 len
= mime_decode_from_qp("Libert=c3=a9", NULL
, 0);
99 len
= mime_decode_from_qp("Libert=c3=a9", output
, 9);
101 ASSERT_EQ(string("Libert\xc3\xa9"), string(output
));
104 TEST(MimeTests
, DecodeOutOfSpace
) {
106 memset(output
, 0, sizeof(output
));
109 len
= mime_decode_from_qp("abcdefg", NULL
, 0);
111 len
= mime_decode_from_qp("abcdefg", output
, 4);
113 ASSERT_EQ(string("abc"), string(output
));
114 len
= mime_decode_from_qp("abcdefg", output
, 1);
116 ASSERT_EQ(string(""), string(output
));
118 len
= mime_decode_from_qp("a=3Db", output
, 2);
120 ASSERT_EQ(string("a"), string(output
));
121 len
= mime_decode_from_qp("a=3Db", output
, 3);
123 ASSERT_EQ(string("a="), string(output
));
126 TEST(MimeTests
, DecodeErrors
) {
128 memset(output
, 0, sizeof(output
));
131 // incomplete escape sequence
132 len
= mime_decode_from_qp("boo=", output
, sizeof(output
));
135 // invalid escape sequences
136 len
= mime_decode_from_qp("boo=gg", output
, sizeof(output
));
138 len
= mime_decode_from_qp("boo=g", output
, sizeof(output
));
140 len
= mime_decode_from_qp("boo==", output
, sizeof(output
));
142 len
= mime_decode_from_qp("boo=44bar=z", output
, sizeof(output
));
145 // high bit should not be set in quoted-printable mime output
146 unsigned char bad_input2
[] = { 0x81, 0x6a, 0x0 };
147 len
= mime_decode_from_qp(reinterpret_cast<const char*>(bad_input2
),
148 output
, sizeof(output
));