]> git.proxmox.com Git - ceph.git/blob - ceph/src/test/mime.cc
bump version to 12.2.4-pve1
[ceph.git] / 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
3 /*
4 * Ceph - scalable distributed file system
5 *
6 * Copyright (C) 2011 New Dream Network
7 *
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.
12 *
13 */
14 #include "common/mime.h"
15 #include "gtest/gtest.h"
16
17 #include <stdint.h>
18 #include <string>
19
20 using std::string;
21
22 TEST(MimeTests, SimpleEncode) {
23 char output[256];
24 memset(output, 0, sizeof(output));
25 int len;
26
27 len = mime_encode_as_qp("abc", NULL, 0);
28 ASSERT_EQ(len, 4);
29 len = mime_encode_as_qp("abc", output, 4);
30 ASSERT_EQ(len, 4);
31 ASSERT_EQ(string("abc"), string(output));
32
33 len = mime_encode_as_qp("a=b", NULL, 0);
34 ASSERT_EQ(len, 6);
35 len = mime_encode_as_qp("a=b", output, 6);
36 ASSERT_EQ(len, 6);
37 ASSERT_EQ(string("a=3Db"), string(output));
38
39 len = mime_encode_as_qp("Libert\xc3\xa9", NULL, 0);
40 ASSERT_EQ(len, 13);
41 len = mime_encode_as_qp("Libert\xc3\xa9", output, 13);
42 ASSERT_EQ(len, 13);
43 ASSERT_EQ(string("Libert=C3=A9"), string(output));
44 }
45
46 TEST(MimeTests, EncodeOutOfSpace) {
47 char output[256];
48 memset(output, 0, sizeof(output));
49 int len;
50
51 len = mime_encode_as_qp("abcdefg", NULL, 0);
52 ASSERT_EQ(len, 8);
53 len = mime_encode_as_qp("abcdefg", output, 4);
54 ASSERT_EQ(len, 8);
55 ASSERT_EQ(string("abc"), string(output));
56 len = mime_encode_as_qp("abcdefg", output, 1);
57 ASSERT_EQ(len, 8);
58 ASSERT_EQ(string(""), string(output));
59
60 len = mime_encode_as_qp("a=b", output, 2);
61 ASSERT_EQ(len, 6);
62 ASSERT_EQ(string("a"), string(output));
63 len = mime_encode_as_qp("a=b", output, 3);
64 ASSERT_EQ(len, 6);
65 ASSERT_EQ(string("a"), string(output));
66 }
67
68 TEST(MimeTests, SimpleDecode) {
69 char output[256];
70 memset(output, 0, sizeof(output));
71 int len;
72
73 len = mime_decode_from_qp("abc", NULL, 0);
74 ASSERT_EQ(len, 4);
75 len = mime_decode_from_qp("abc", output, 4);
76 ASSERT_EQ(len, 4);
77 ASSERT_EQ(string("abc"), string(output));
78
79 len = mime_decode_from_qp("a=3Db", NULL, 0);
80 ASSERT_EQ(len, 4);
81 len = mime_decode_from_qp("a=3Db", output, 4);
82 ASSERT_EQ(len, 4);
83 ASSERT_EQ(string("a=b"), string(output));
84
85 len = mime_decode_from_qp("Libert=C3=A9", NULL, 0);
86 ASSERT_EQ(len, 9);
87 len = mime_decode_from_qp("Libert=C3=A9", output, 9);
88 ASSERT_EQ(len, 9);
89 ASSERT_EQ(string("Libert\xc3\xa9"), string(output));
90 }
91
92 TEST(MimeTests, LowercaseDecode) {
93 char output[256];
94 memset(output, 0, sizeof(output));
95 int len;
96
97 len = mime_decode_from_qp("Libert=c3=a9", NULL, 0);
98 ASSERT_EQ(len, 9);
99 len = mime_decode_from_qp("Libert=c3=a9", output, 9);
100 ASSERT_EQ(len, 9);
101 ASSERT_EQ(string("Libert\xc3\xa9"), string(output));
102 }
103
104 TEST(MimeTests, DecodeOutOfSpace) {
105 char output[256];
106 memset(output, 0, sizeof(output));
107 int len;
108
109 len = mime_decode_from_qp("abcdefg", NULL, 0);
110 ASSERT_EQ(len, 8);
111 len = mime_decode_from_qp("abcdefg", output, 4);
112 ASSERT_EQ(len, 8);
113 ASSERT_EQ(string("abc"), string(output));
114 len = mime_decode_from_qp("abcdefg", output, 1);
115 ASSERT_EQ(len, 8);
116 ASSERT_EQ(string(""), string(output));
117
118 len = mime_decode_from_qp("a=3Db", output, 2);
119 ASSERT_EQ(len, 4);
120 ASSERT_EQ(string("a"), string(output));
121 len = mime_decode_from_qp("a=3Db", output, 3);
122 ASSERT_EQ(len, 4);
123 ASSERT_EQ(string("a="), string(output));
124 }
125
126 TEST(MimeTests, DecodeErrors) {
127 char output[128];
128 memset(output, 0, sizeof(output));
129 int len;
130
131 // incomplete escape sequence
132 len = mime_decode_from_qp("boo=", output, sizeof(output));
133 ASSERT_LT(len, 0);
134
135 // invalid escape sequences
136 len = mime_decode_from_qp("boo=gg", output, sizeof(output));
137 ASSERT_LT(len, 0);
138 len = mime_decode_from_qp("boo=g", output, sizeof(output));
139 ASSERT_LT(len, 0);
140 len = mime_decode_from_qp("boo==", output, sizeof(output));
141 ASSERT_LT(len, 0);
142 len = mime_decode_from_qp("boo=44bar=z", output, sizeof(output));
143 ASSERT_LT(len, 0);
144
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));
149 ASSERT_LT(len, 0);
150 }