Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / rgw / rgw_jsonparser.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
3
4 #include <errno.h>
5 #include <string.h>
6
7 #include <iostream>
8 #include <map>
9
10 #include "include/types.h"
11
12 #include "common/Formatter.h"
13 #include "common/ceph_json.h"
14
15 #include "rgw_common.h"
16
17 #define dout_subsys ceph_subsys_rgw
18
19 using namespace std;
20
21 void dump_array(JSONObj *obj)
22 {
23
24   JSONObjIter iter = obj->find_first();
25
26   for (; !iter.end(); ++iter) { 
27     JSONObj *o = *iter;
28     cout << "data=" << o->get_data() << std::endl;
29   }
30
31 }
32                                   
33 struct Key {
34   string user;
35   string access_key;
36   string secret_key;
37
38   void decode_json(JSONObj *obj) {
39     JSONDecoder::decode_json("user", user, obj);
40     JSONDecoder::decode_json("access_key", access_key, obj);
41     JSONDecoder::decode_json("secret_key", secret_key, obj);
42   }
43 };
44
45 struct UserInfo {
46   string uid;
47   string display_name;
48   int max_buckets;
49   list<Key> keys;
50
51   void decode_json(JSONObj *obj) {
52     JSONDecoder::decode_json("user_id", uid, obj);
53     JSONDecoder::decode_json("display_name", display_name, obj);
54     JSONDecoder::decode_json("max_buckets", max_buckets, obj);
55     JSONDecoder::decode_json("keys", keys, obj);
56   }
57 };
58
59
60 int main(int argc, char **argv) {
61   JSONParser parser;
62
63   char buf[1024];
64   bufferlist bl;
65
66   for (;;) {
67     int done;
68     int len;
69
70     len = fread(buf, 1, sizeof(buf), stdin);
71     if (ferror(stdin)) {
72       cerr << "read error" << std::endl;
73       exit(-1);
74     }
75     done = feof(stdin);
76
77     bool ret = parser.parse(buf, len);
78     if (!ret)
79       cerr << "parse error" << std::endl;
80
81     if (done) {
82       bl.append(buf, len);
83       break;
84     }
85   }
86
87   JSONObjIter iter = parser.find_first();
88
89   for (; !iter.end(); ++iter) { 
90     JSONObj *obj = *iter;
91     cout << "is_object=" << obj->is_object() << std::endl;
92     cout << "is_array=" << obj->is_array() << std::endl;
93     cout << "name=" << obj->get_name() << std::endl;
94     cout << "data=" << obj->get_data() << std::endl;
95   }
96
97   iter = parser.find_first("conditions");
98   if (!iter.end()) {
99     JSONObj *obj = *iter;
100
101     JSONObjIter iter2 = obj->find_first();
102     for (; !iter2.end(); ++iter2) {
103       JSONObj *child = *iter2;
104       cout << "is_object=" << child->is_object() << std::endl;
105       cout << "is_array=" << child->is_array() << std::endl;
106       if (child->is_array()) {
107         dump_array(child);
108       }
109       cout << "name=" << child->get_name() <<std::endl;
110       cout << "data=" << child->get_data() <<std::endl;
111     }
112   }
113
114   RGWUserInfo ui;
115
116   try {
117     ui.decode_json(&parser);
118   } catch (JSONDecoder::err& e) {
119     cout << "failed to decode JSON input: " << e.message << std::endl;
120     exit(1);
121   }
122
123   JSONFormatter formatter(true);
124
125   formatter.open_object_section("user_info");
126   ui.dump(&formatter);
127   formatter.close_section();
128
129   formatter.flush(std::cout);
130
131   std::cout << std::endl;
132 }
133