Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / test / old / testnewbuffers.cc
1
2 #include <list>
3 #include <iostream>
4 using namespace std;
5
6
7 #include "include/newbuffer.h"
8 //#include "include/bufferlist.h"
9
10 #include "common/Thread.h"
11
12
13   class Th : public Thread {
14   public:
15         bufferlist bl;
16         explicit Th(bufferlist& o) : bl(o) { }
17         
18         void *entry() {
19           //cout << "start" << endl;
20           // thrash it a bit.
21           for (int n=0; n<10000; n++) {
22                 bufferlist bl2;
23                 unsigned off = rand() % (bl.length() -1);
24                 unsigned len = 1 + rand() % (bl.length() - off - 1);
25                 bl2.substr_of(bl, off, len);
26                 bufferlist bl3;
27                 bl3.append(bl);
28                 bl3.append(bl2);
29                 //cout << bl3 << endl;
30                 bl2.clear();
31                 bl3.clear();
32           }
33           //cout << "end" << endl;
34         }
35   };
36
37 int main()
38 {
39
40   bufferptr p1 = buffer::copy("123456",7);
41   //bufferptr p1 = new buffer("123456",7);
42   bufferptr p2 = p1;
43
44   cout << "p1 is '" << p1.c_str() << "'" << " " << p1 << endl;
45   cout << "p2 is '" << p2.c_str() << "'" << " " << p2 << endl;
46
47   bufferptr p3 = buffer::copy("abcdef",7);
48   //bufferptr p3 = new buffer("abcdef",7);
49   
50   cout << "p3 is " << p3.c_str() << " " << p3 << endl;
51
52   bufferlist bl;
53   bl.push_back(p2);
54   bl.push_back(p1);
55   bl.push_back(p3);
56
57   cout << "bl is " << bl << endl;
58
59   bufferlist took;
60   bl.splice(10,4,&took);
61
62   cout << "took out " << took << ", leftover is " << bl << endl;
63   //cout << "len is " << bl.length() << endl;
64
65   bufferlist bl2;
66   bl2.substr_of(bl, 3, 5);
67   cout << "bl2 is " << bl2 << endl;
68
69
70   cout << "bl before " << bl << endl;
71
72   list<Th*> ls;
73   for (int t=0; t<40; t++) {
74         Th *t = new Th(bl);
75         cout << "create" << endl;
76         t->create();
77         ls.push_back(t);
78   }
79
80   bl.clear();
81
82   while (!ls.empty()) {
83         cout << "join" << endl;
84         ls.front()->join();
85         delete ls.front();
86         ls.pop_front();
87   }
88
89   cout << "bl after " << bl << endl;
90
91 }