Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / 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 }