5 cout << "testing keynew" << endl;
7 char array[] = "here is some data stored";
11 succeed_if(!key0.needSync(), "key1 need sync");
12 succeed_if(!key0.needRemove(), "key1 need remove");
13 succeed_if( key0.getName() == "", "key0 has wrong name");
16 Key key1 ("", KEY_END);
17 succeed_if(!key1.needSync(), "key1 need sync");
18 succeed_if(!key1.needRemove(), "key1 need remove");
19 succeed_if( key1.getName() == "", "key0 has wrong name");
22 Key key2 ("system/sw/test", KEY_END);
23 succeed_if( key2.needSync(), "key2 does not need sync");
24 succeed_if(!key2.needRemove(), "key2 need remove");
25 succeed_if (key2.getBaseName() == "test", "wrong base name");
26 succeed_if( key2.getName() == "system/sw/test", "key2 has wrong name");
28 succeed_if( key2.getName() == "", "key0 has wrong name");
29 succeed_if (key2.getBaseName() == "", "wrong base name");
32 Key key3 ("system/sw/test", KEY_REMOVE, KEY_END);
33 succeed_if(key3.needRemove(), "KEY_REMOVE not set");
34 succeed_if(key3.getName() == "system/sw/test", "key3 has wrong name");
35 succeed_if(key3.getBaseName() == "test", "wrong base name");
36 key3 = "system/other/name";
37 succeed_if(key3.getName() == "system/other/name", "key3 has wrong name");
38 succeed_if(key3.getBaseName() == "name", "wrong base name");
40 succeed_if(key3.getName() == "system/other/name/base", "key3 has wrong name");
41 succeed_if(key3.getBaseName() == "base", "wrong base name");
43 succeed_if(key3.getName() == "system/other/name/name", "key3 has wrong name");
44 succeed_if(key3.getBaseName() == "name", "wrong base name");
46 // Key with name + value (default type must be KEY_TYPE_STRING)
47 Key key4 ("system/sw/test",
50 succeed_if(key4.getName() == "system/sw/test", "key4 has wrong name");
51 succeed_if(key4.get<string>() == "test", "key4 has wrong name");
52 // key4.generate(stdout, 0); cout << endl;
54 // Key with name + UID/GID
55 Key key5 ("system/sw/test",
59 succeed_if(key5.getUID() == 123, "key5 UID no set correctly");
60 succeed_if(key5.getGID() == 456, "key5 GID not set correctly");
61 succeed_if(key5.getName() == "system/sw/test", "key5 has wrong name");
62 // key5.output(stdout, 0);
64 // Key with name + MODE
65 Key key6 ("system/sw/test",
68 succeed_if(key6.getMode() == 0642, "key6 mode no set correctly");
69 succeed_if(key6.getName() == "system/sw/test", "key6 has wrong name");
71 // Key with name + owner
72 Key key7 ("system/sw/test",
75 succeed_if( key7.getOwner() == "yl", "key7 owner not set correctly");
76 succeed_if (!key7.isInactive(), "key should not be inactive");
78 Key key8 ("system/valid/there",
79 KEY_TYPE, KEY_TYPE_BINARY,
80 KEY_SIZE, sizeof(array),
83 succeed_if(key8.getName() == "system/valid/there", "key8 has wrong name");
84 succeed_if(key8.isBinary (), "Could not set type to binary");
85 succeed_if(key8.getValueSize() == sizeof(array), "Value size not correct");
86 getBack = new char [key8.getValueSize()];
87 key8.getBinary(getBack, key8.getValueSize());
88 succeed_if(memcmp(getBack, array, sizeof(array)) == 0, "could not get correct value with keyGetBinary");
90 succeed_if (key8.getBaseName() == "there", "wrong base name");
92 Key key9("system/valid/.inactive", KEY_COMMENT, "inactive key", KEY_END);
93 succeed_if (key9.isInactive(), "key should be inactive");
94 succeed_if (key9.getComment() == "inactive key", "comment failed");
95 succeed_if (key9.getBaseName() == ".inactive", "wrong base name");
98 void test_constructor()
100 cout << "testing constructor" << endl;
102 ckdb::Key *ck = ckdb::keyNew(0);
103 Key k = ck; // constructor with (ckdb::Key)
105 cout << "ck: " << (void*)ck << endl;
106 cout << "k: " << (void*)&k << endl;
107 cout << "k.ck: " << (void*)k.getKey() << endl;
110 succeed_if (k.get<int> () == 30, "could not get same int");
115 cout << "testing setkey" << endl;
120 ck = ckdb::keyNew(0);
121 k = ck; // operator= alias for setKey()
123 cout << "ck: " << (void*)ck << endl;
124 cout << "k: " << (void*)&k << endl;
125 cout << "k.ck: " << (void*)k.getKey() << endl;
128 succeed_if (k.get<int> () == 30, "could not get same int");
133 cout << "testing cast" << endl;
137 ck = ckdb::keyNew(0);
138 k = (Key*) &ck; // no copy, just a cast
140 cout << "&ck: " << (void*)&ck << endl;
141 cout << "k: " << (void*)&k << endl;
142 cout << "ck: " << (void*)ck << endl;
143 cout << "k.ck: " << (void*)k->getKey() << endl;
146 succeed_if (k->get<int> () == 30, "could not get same int");
153 cout << "testing value" << endl;
156 test.setString ("23.3");
157 succeed_if (test.get<double> () == 23.3, "could not get same double");
158 succeed_if (test.getValueSize () == 5, "value size not correct");
160 test.setString ("401");
161 succeed_if (test.get<int> () == 401, "could not get same int");
162 succeed_if (test.getValueSize () == 4, "value size not correct");
164 test.setString ("mystr");
165 succeed_if (test.get<string> () == "mystr", "could not get same string");
166 succeed_if (test.getValueSize () == 6, "value size not correct");
168 test.setString ("myoth");
169 succeed_if (test.get<string> () == "myoth", "could not get same string");
170 succeed_if (test.getValueSize () == 6, "value size not correct");
172 test.set<double> (23.3);
173 succeed_if (test.getString() == "23.3", "could not get same double");
174 succeed_if (test.getValueSize () == 5, "value size not correct");
177 succeed_if (test.getString() == "401", "could not get same int");
178 succeed_if (test.getValueSize () == 4, "value size not correct");
180 test.set<string> ("mystr");
181 succeed_if (test.getString() == "mystr", "could not get same string");
182 succeed_if (test.getValueSize () == 6, "value size not correct");
184 test.set<string> ("myoth");
185 succeed_if (test.getString () == "myoth", "could not get same string");
186 succeed_if (test.getValueSize () == 6, "value size not correct");
188 test.setComment ("mycomment");
189 succeed_if (test.getComment () == "mycomment", "could not get same comment");
190 succeed_if (test.getCommentSize () == 10, "comment size not correct");
193 void test_exceptions ()
195 cout << "testing exceptions" << endl;
200 } catch (kdb::KeyInvalidName)
202 succeed_if (test.getName() == "", "not set to noname");
205 test.setName ("user/name");
206 succeed_if (test.getName() == "user/name", "could not get same name");
210 } catch (kdb::KeyInvalidName)
212 succeed_if (test.getName() == "", "not set to noname");
219 cout << "testing name" << endl;
222 test.setName("user:markus/test");
223 succeed_if (std::string(test.name()) == "user/test", "Wrong name");
224 succeed_if (test.getName() == "user/test", "Wrong name");
225 succeed_if (test.getFullName() == "user:markus/test", "Wrong full name");
226 succeed_if (std::string(test.owner()) == "markus", "Wrong owner");
227 succeed_if (test.getOwner() == "markus", "Wrong owner");
228 succeed_if (test.getNameSize() == 10, "wrong name size");
229 succeed_if (test.getFullNameSize() == 17, "wrong full name size");
230 succeed_if (!test.isSystem(), "key is system");
231 succeed_if ( test.isUser(), "key is not user");
233 test.setOwner("gerald");
234 succeed_if (std::string(test.name()) == "user/test", "Wrong name");
235 succeed_if (test.getName() == "user/test", "Wrong name");
236 succeed_if (test.getFullName() == "user:gerald/test", "Wrong full name");
237 succeed_if (test.getNameSize() == 10, "wrong name size");
238 succeed_if (test.getFullNameSize() == 17, "wrong full name size");
239 succeed_if (!test.isSystem(), "key is system");
240 succeed_if ( test.isUser(), "key is not user");
242 test.setName("system/test");
243 test.setOwner("markus"); // has no semantics...
244 succeed_if (std::string(test.name()) == "system/test", "Wrong name");
245 succeed_if (test.getName() == "system/test", "Wrong name");
246 succeed_if (test.getFullName() == "system/test", "Wrong full name");
247 succeed_if (std::string(test.owner()) == "markus", "Wrong owner");
248 succeed_if (test.getOwner() == "markus", "Wrong owner");
249 succeed_if (test.getNameSize() == 12, "wrong name size");
250 succeed_if (test.getFullNameSize() == 12, "wrong full name size");
251 succeed_if ( test.isSystem(), "key is system");
252 succeed_if (!test.isUser(), "key is not user");
254 test.setName("user/dir/test");
255 test.setBaseName ("mykey");
256 succeed_if (test.getName() == "user/dir/mykey", "Basename did not work");
257 test.setName (test.getName() + "/onedeeper"); // add basename is trivial
258 succeed_if (test.getName() == "user/dir/mykey/onedeeper", "Basename did not work");
259 succeed_if (test.getName().find('/') == 4, "user length"); // keyGetRootNameSize trivial
260 succeed_if (test.isBelow (Key("user/dir/mykey/onedeeper/below", KEY_END)), "key is below");
261 succeed_if (!test.isBelow (Key("user/dir/mykey/twodeeper/below", KEY_END)), "key is below");
262 succeed_if (test.isDirectBelow (Key("user/dir/mykey/onedeeper/below", KEY_END)), "key is direct below");
263 succeed_if (!test.isDirectBelow (Key("user/dir/mykey/onedeeper/twodeeper/below", KEY_END)), "key is direct below");
264 succeed_if (!test.isDirectBelow (Key("user/dir/mykey/twodeeper/below", KEY_END)), "key is direct below");
269 cout << "testing metainfo" << endl;
273 succeed_if (test.getUID() == 50, "could not set UID");
276 succeed_if (test.getGID() == 50, "could not set GID");
278 succeed_if (test.getMode() == 0664, "not correct default mode");
280 succeed_if (test.isDir(), "is not dir");
281 succeed_if (test.getMode() == 0775, "not correct default mode for dir");
284 succeed_if (test.getMTime() == 200, "could not set MTime");
287 succeed_if (test.getATime() == 200, "could not set ATime");
290 succeed_if (test.getCTime() == 200, "could not set CTime");
295 Key h ("user/infunction", KEY_END);
300 cout << "testing ref" << endl;
302 Key zgr1 ("user/zgr1", KEY_END);
304 Key zgr2 ("user/zgr2", KEY_END);
305 Key zgr3 ("user/zgr3", KEY_END);
306 Key zgr4 ("user/zgr4", KEY_END);
307 Key zgr5 ("user/zgr5", KEY_END);
314 f(Key ("user/passed", KEY_END));
317 test.setName("user:markus/test");
320 ref1 = test; // operator =
322 succeed_if (test.getName() == "user/test", "wrong name");
323 succeed_if (ref1.getName() == "user/test", "ref key wrong name");
325 Key ref2 = test; // copy constructor
327 succeed_if (test.getName() == "user/test", "wrong name");
328 succeed_if (ref2.getName() == "user/test", "ref key wrong name");
330 const Key consttest ("user/test", KEY_END);
331 Key ref3 = consttest; // const copy constructor
333 succeed_if (consttest.getName() == "user/test", "wrong name");
334 succeed_if (ref3.getName() == "user/test", "ref key wrong name");
339 cout << "testing dup" << endl;
342 test.setName("user:markus/test");
344 Key dup0 = test.dup(); // directly call of dup()
346 succeed_if (test.getName() == "user/test", "wrong name");
347 succeed_if (dup0.getName() == "user/test", "dup key wrong name");
353 cout << "KEY CLASS TESTS" << endl;
354 cout << "===============" << endl << endl;
371 cout << "test_key RESULTS: " << nbTest << " test(s) done. " << nbError << " error(s)." << endl;