Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / test / formatter.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
15 #include "gtest/gtest.h"
16 #include "common/Formatter.h"
17 #include "common/HTMLFormatter.h"
18
19 #include <sstream>
20 #include <string>
21
22 using namespace ceph;
23 using std::ostringstream;
24
25 TEST(JsonFormatter, Simple1) {
26   ostringstream oss;
27   JSONFormatter fmt(false);
28   fmt.open_object_section("foo");
29   fmt.dump_int("a", 1);
30   fmt.dump_int("b", 2);
31   fmt.dump_int("c", 3);
32   fmt.close_section();
33   fmt.flush(oss);
34   ASSERT_EQ(oss.str(), "{\"a\":1,\"b\":2,\"c\":3}");
35 }
36
37 TEST(JsonFormatter, Simple2) {
38   ostringstream oss;
39   JSONFormatter fmt(false);
40   fmt.open_object_section("foo");
41   fmt.open_object_section("bar");
42   fmt.dump_int("int", 0xf00000000000ll);
43   fmt.dump_unsigned("unsigned", 0x8000000000000001llu);
44   fmt.dump_float("float", 1.234);
45   fmt.close_section();
46   fmt.dump_string("string", "str");
47   fmt.close_section();
48   fmt.flush(oss);
49   ASSERT_EQ(oss.str(), "{\"bar\":{\"int\":263882790666240,\
50 \"unsigned\":9223372036854775809,\"float\":1.234000},\
51 \"string\":\"str\"}");
52 }
53
54 TEST(JsonFormatter, Empty) {
55   ostringstream oss;
56   JSONFormatter fmt(false);
57   fmt.flush(oss);
58   ASSERT_EQ(oss.str(), "");
59 }
60
61 TEST(XmlFormatter, Simple1) {
62   ostringstream oss;
63   XMLFormatter fmt(false);
64   fmt.open_object_section("foo");
65   fmt.dump_int("a", 1);
66   fmt.dump_int("b", 2);
67   fmt.dump_int("c", 3);
68   fmt.close_section();
69   fmt.flush(oss);
70   ASSERT_EQ(oss.str(), "<foo><a>1</a><b>2</b><c>3</c></foo>");
71 }
72
73 TEST(XmlFormatter, Simple2) {
74   ostringstream oss;
75   XMLFormatter fmt(false);
76   fmt.open_object_section("foo");
77   fmt.open_object_section("bar");
78   fmt.dump_int("int", 0xf00000000000ll);
79   fmt.dump_unsigned("unsigned", 0x8000000000000001llu);
80   fmt.dump_float("float", 1.234);
81   fmt.close_section();
82   fmt.dump_string("string", "str");
83   fmt.close_section();
84   fmt.flush(oss);
85   ASSERT_EQ(oss.str(), "<foo><bar>\
86 <int>263882790666240</int>\
87 <unsigned>9223372036854775809</unsigned>\
88 <float>1.234</float>\
89 </bar><string>str</string>\
90 </foo>");
91 }
92
93 TEST(XmlFormatter, Empty) {
94   ostringstream oss;
95   XMLFormatter fmt(false);
96   fmt.flush(oss);
97   ASSERT_EQ(oss.str(), "");
98 }
99
100 TEST(XmlFormatter, DumpStream1) {
101   ostringstream oss;
102   XMLFormatter fmt(false);
103   fmt.dump_stream("blah") << "hithere";
104   fmt.flush(oss);
105   ASSERT_EQ(oss.str(), "<blah>hithere</blah>");
106 }
107
108 TEST(XmlFormatter, DumpStream2) {
109   ostringstream oss;
110   XMLFormatter fmt(false);
111
112   fmt.open_array_section("foo");
113   fmt.dump_stream("blah") << "hithere";
114   fmt.close_section();
115   fmt.flush(oss);
116   ASSERT_EQ(oss.str(), "<foo><blah>hithere</blah></foo>");
117 }
118
119 TEST(XmlFormatter, DumpStream3) {
120   ostringstream oss;
121   XMLFormatter fmt(false);
122
123   fmt.open_array_section("foo");
124   fmt.dump_stream("blah") << "hithere";
125   fmt.dump_float("pi", 3.14);
126   fmt.close_section();
127   fmt.flush(oss);
128   ASSERT_EQ(oss.str(), "<foo><blah>hithere</blah><pi>3.14</pi></foo>");
129 }
130
131 TEST(XmlFormatter, DTD) {
132   ostringstream oss;
133   XMLFormatter fmt(false);
134
135   fmt.output_header();
136   fmt.open_array_section("foo");
137   fmt.dump_stream("blah") << "hithere";
138   fmt.dump_float("pi", 3.14);
139   fmt.close_section();
140   fmt.flush(oss);
141   ASSERT_EQ(oss.str(), "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
142     "<foo><blah>hithere</blah><pi>3.14</pi></foo>");
143 }
144
145 TEST(XmlFormatter, Clear) {
146   ostringstream oss;
147   XMLFormatter fmt(false);
148
149   fmt.output_header();
150   fmt.open_array_section("foo");
151   fmt.dump_stream("blah") << "hithere";
152   fmt.dump_float("pi", 3.14);
153   fmt.close_section();
154   fmt.flush(oss);
155   ASSERT_EQ(oss.str(), "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
156     "<foo><blah>hithere</blah><pi>3.14</pi></foo>");
157
158   ostringstream oss2;
159   fmt.flush(oss2);
160   ASSERT_EQ(oss2.str(), "");
161
162   ostringstream oss3;
163   fmt.reset();
164   fmt.flush(oss3);
165   ASSERT_EQ(oss3.str(), "");
166 }
167
168 TEST(XmlFormatter, NamespaceTest) {
169   ostringstream oss;
170   XMLFormatter fmt(false);
171
172   fmt.output_header();
173   fmt.open_array_section_in_ns("foo",
174                            "http://s3.amazonaws.com/doc/2006-03-01/");
175   fmt.dump_stream("blah") << "hithere";
176   fmt.dump_float("pi", 3.14);
177   fmt.close_section();
178   fmt.flush(oss);
179   ASSERT_EQ(oss.str(), "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
180     "<foo xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">"
181     "<blah>hithere</blah><pi>3.14</pi></foo>");
182 }
183
184 TEST(XmlFormatter, DumpFormatNameSpaceTest) {
185   ostringstream oss1;
186   XMLFormatter fmt(false);
187
188   fmt.dump_format_ns("foo",
189                      "http://s3.amazonaws.com/doc/2006-03-01/",
190                      "%s","bar");
191   fmt.flush(oss1);
192   ASSERT_EQ(oss1.str(),
193             "<foo xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">bar</foo>");
194
195   // Testing with a null ns..should be same as dump format
196   ostringstream oss2;
197   fmt.reset();
198   fmt.dump_format_ns("foo",NULL,"%s","bar");
199   fmt.flush(oss2);
200   ASSERT_EQ(oss2.str(),"<foo>bar</foo>");
201 }
202
203 TEST(HtmlFormatter, Simple1) {
204   ostringstream oss;
205   HTMLFormatter fmt(false);
206   fmt.open_object_section("foo");
207   fmt.dump_int("a", 1);
208   fmt.dump_int("b", 2);
209   fmt.dump_int("c", 3);
210   fmt.close_section();
211   fmt.flush(oss);
212   ASSERT_EQ(oss.str(), "<foo><li>a: 1</li><li>b: 2</li><li>c: 3</li></foo>");
213 }
214
215 TEST(HtmlFormatter, Simple2) {
216   ostringstream oss;
217   HTMLFormatter fmt(false);
218   fmt.open_object_section("foo");
219   fmt.open_object_section("bar");
220   fmt.dump_int("int", 0xf00000000000ll);
221   fmt.dump_unsigned("unsigned", 0x8000000000000001llu);
222   fmt.dump_float("float", 1.234);
223   fmt.close_section();
224   fmt.dump_string("string", "str");
225   fmt.close_section();
226   fmt.flush(oss);
227   ASSERT_EQ(oss.str(), "<foo><bar>\
228 <li>int: 263882790666240</li>\
229 <li>unsigned: 9223372036854775809</li>\
230 <li>float: 1.234</li>\
231 </bar><li>string: str</li>\
232 </foo>");
233 }
234
235 TEST(HtmlFormatter, Empty) {
236   ostringstream oss;
237   HTMLFormatter fmt(false);
238   fmt.flush(oss);
239   ASSERT_EQ(oss.str(), "");
240 }
241
242 TEST(HtmlFormatter, DumpStream1) {
243   ostringstream oss;
244   HTMLFormatter fmt(false);
245   fmt.dump_stream("blah") << "hithere";
246   fmt.flush(oss);
247   ASSERT_EQ(oss.str(), "<li>blah: hithere</li>");
248 }
249
250 TEST(HtmlFormatter, DumpStream2) {
251   ostringstream oss;
252   HTMLFormatter fmt(false);
253
254   fmt.open_array_section("foo");
255   fmt.dump_stream("blah") << "hithere";
256   fmt.close_section();
257   fmt.flush(oss);
258   ASSERT_EQ(oss.str(), "<foo><li>blah: hithere</li></foo>");
259 }
260
261 TEST(HtmlFormatter, DumpStream3) {
262   ostringstream oss;
263   HTMLFormatter fmt(false);
264
265   fmt.open_array_section("foo");
266   fmt.dump_stream("blah") << "hithere";
267   fmt.dump_float("pi", 3.14);
268   fmt.close_section();
269   fmt.flush(oss);
270   ASSERT_EQ(oss.str(), "<foo><li>blah: hithere</li><li>pi: 3.14</li></foo>");
271 }
272
273 TEST(HtmlFormatter, DTD) {
274   ostringstream oss;
275   HTMLFormatter fmt(false);
276
277   fmt.write_raw_data(HTMLFormatter::XML_1_DTD);
278   fmt.open_array_section("foo");
279   fmt.dump_stream("blah") << "hithere";
280   fmt.dump_float("pi", 3.14);
281   fmt.close_section();
282   fmt.flush(oss);
283   ASSERT_EQ(oss.str(), "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
284     "<foo><li>blah: hithere</li><li>pi: 3.14</li></foo>");
285 }
286
287 TEST(HtmlFormatter, Clear) {
288   ostringstream oss;
289   HTMLFormatter fmt(false);
290
291   fmt.write_raw_data(HTMLFormatter::XML_1_DTD);
292   fmt.open_array_section("foo");
293   fmt.dump_stream("blah") << "hithere";
294   fmt.dump_float("pi", 3.14);
295   fmt.close_section();
296   fmt.flush(oss);
297   ASSERT_EQ(oss.str(), "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
298     "<foo><li>blah: hithere</li><li>pi: 3.14</li></foo>");
299
300   ostringstream oss2;
301   fmt.flush(oss2);
302   ASSERT_EQ(oss2.str(), "");
303
304   ostringstream oss3;
305   fmt.reset();
306   fmt.flush(oss3);
307   ASSERT_EQ(oss3.str(), "");
308 }
309
310 TEST(HtmlFormatter, NamespaceTest) {
311   ostringstream oss;
312   HTMLFormatter fmt(false);
313
314   fmt.write_raw_data(HTMLFormatter::XML_1_DTD);
315   fmt.open_array_section_in_ns("foo",
316                            "http://s3.amazonaws.com/doc/2006-03-01/");
317   fmt.dump_stream("blah") << "hithere";
318   fmt.dump_float("pi", 3.14);
319   fmt.close_section();
320   fmt.flush(oss);
321   ASSERT_EQ(oss.str(), "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
322     "<foo xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">"
323     "<li>blah: hithere</li><li>pi: 3.14</li></foo>");
324 }
325
326 TEST(HtmlFormatter, DumpFormatNameSpaceTest) {
327   ostringstream oss1;
328   HTMLFormatter fmt(false);
329
330   fmt.dump_format_ns("foo",
331                      "http://s3.amazonaws.com/doc/2006-03-01/",
332                      "%s","bar");
333   fmt.flush(oss1);
334   ASSERT_EQ(oss1.str(),
335             "<li xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">foo: bar</li>");
336
337   // Testing with a null ns..should be same as dump format
338   ostringstream oss2;
339   fmt.reset();
340   fmt.dump_format_ns("foo",NULL,"%s","bar");
341   fmt.flush(oss2);
342   ASSERT_EQ(oss2.str(),"<li>foo: bar</li>");
343 }