21 sprintf(buf,
"%d",
i);
28 printf(
"int[%d] has [", size);
29 for (
int i=0;
i<size;
i++) {
40 printf(
"int[%d] has [", size);
41 for (
int i=0;
i<size;
i++) {
53 printf(
"FAIL: %s\n", text);
60 printf(
"FAIL: %s\n", text.c_str());
69 printf(
"rmdir(%s)\n", path);
89 printf(
"mkdir(%s)\n", path);
101 printf(
"mkdir_fail(%s)\n", path);
105 if (
status == fail_status)
108 return report_fail(
msprintf(
"test_mkdir_fail: Create subdirectory \"%s\" failed, unexpcted status %d instead of %d\n", path,
status, fail_status));
113 printf(
"chdir(%s)\n", path);
127 printf(
"delete_key(%s)\n", path);
147 printf(
"delete(%s)\n", path);
161 printf(
"find_fail(%s)\n", path);
165 if (
status == fail_status)
168 return report_fail(
msprintf(
"test_find_fail: Unexpected db_find_link(%s) status %d instead of %d\n", path,
status, fail_status));
175 printf(
"find_key_fail(%s)\n", path);
179 if (
status == fail_status)
182 return report_fail(
msprintf(
"test_find_key_fail: Unexpected db_find_key(%s) status %d instead of %d\n", path,
status, fail_status));
187 printf(
"symlink(%s) to \"%s\"\n", path, link_target);
199 printf(
"symlink_fail(%s) to \"%s\"\n", path, link_target);
203 if (
status == fail_status)
206 return report_fail(
msprintf(
"test_symlink_fail: db_create_link(%s) status %d instead of %d\n", path,
status, fail_status));
209bool test_enum(
const std::vector<HNDLE>& hlist,
const std::vector<KEY>& klist)
211 printf(
"test_enum\n");
213 if (hlist.size() != klist.size()) {
219 size_t expected_size = 9;
221 if (klist.size() != expected_size)
222 ok &=
report_fail(
msprintf(
"test_enum: klist size %zu different from expected %zu\n", klist.size(), expected_size));
224 for (
size_t i=0;
i<klist.size();
i++) {
225 printf(
"key %zu: \"%s\" tid %d, num_values %d\n",
i, klist[
i].
name, klist[
i].
type, klist[
i].num_values);
233 printf(
"test_enum_links\n");
235 if (hlist.size() != klist.size()) {
241 size_t expected_size = 9;
243 if (klist.size() != expected_size)
244 ok &=
report_fail(
msprintf(
"test_enum: klist size %zu different from expected %zu\n", klist.size(), expected_size));
246 for (
size_t i=0;
i<klist.size();
i++) {
247 printf(
"key %zu: \"%s\" tid %d, num_values %d\n",
i, klist[
i].
name, klist[
i].
type, klist[
i].num_values);
255 printf(
"test_symlink_to_array\n");
260 std::vector ia{ 10, 11, 12, 13, 14 };
262 odb->WIA(
"test_odb/ia5", ia);
266 odb->RIAI(
"test_odb/ia5", 0, &iii);
if (iii != 10) ok &=
report_fail(
msprintf(
"test_symlink_to_array: array read unexpected value %d\n", iii));
267 odb->RIAI(
"test_odb/ia5", 1, &iii);
if (iii != 11) ok &=
report_fail(
msprintf(
"test_symlink_to_array: array read unexpected value %d\n", iii));
268 odb->RIAI(
"test_odb/ia5", 2, &iii);
if (iii != 12) ok &=
report_fail(
msprintf(
"test_symlink_to_array: array read unexpected value %d\n", iii));
270 ok &=
test_symlink(
hDB, 0,
"/test_odb/symlink_to_ia5",
"/test_odb/ia5");
272 odb->RIAI(
"test_odb/symlink_to_ia5", 0, &iii);
if (iii != 10) ok &=
report_fail(
msprintf(
"test_symlink_to_array: array read unexpected value %d\n", iii));
273 odb->RIAI(
"test_odb/symlink_to_ia5", 1, &iii);
if (iii != 11) ok &=
report_fail(
msprintf(
"test_symlink_to_array: array read unexpected value %d\n", iii));
274 odb->RIAI(
"test_odb/symlink_to_ia5", 2, &iii);
if (iii != 12) ok &=
report_fail(
msprintf(
"test_symlink_to_array: array read unexpected value %d\n", iii));
276 ok &=
test_symlink(
hDB, 0,
"/test_odb/symlink_to_ia5_2",
"/test_odb/ia5[2]");
280 odb->RI(
"test_odb/symlink_to_ia5_2", &iii);
if (iii != 12) ok &=
report_fail(
msprintf(
"test_symlink_to_array: symlink to array element read unexpected value %d\n", iii));
283 odb->RIAI(
"test_odb/symlink_to_ia5_2", 0, &iii);
if (iii != 12) ok &=
report_fail(
msprintf(
"test_symlink_to_array: symlink to array element read index 0 unexpected value %d\n", iii));
285 odb->RIAI(
"test_odb/symlink_to_ia5_2", 1, &iii);
if (iii != 12) ok &=
report_fail(
msprintf(
"test_symlink_to_array: symlink to array element read index 1 unexpected value %d\n", iii));
289 int size =
sizeof(ibuf);
296 }
else if (size != 5*
sizeof(
int)) {
297 ok &=
report_fail(
msprintf(
"test_symlink_to_array: db_get_value() returned wrong size %d\n", size));
299 for (
int i=0;
i<5;
i++) {
300 if (ibuf[
i] != 10+
i) {
301 ok &=
report_fail(
msprintf(
"test_symlink_to_array: db_get_value() returned wrong value %d at %d\n", ibuf[
i],
i));
320 }
else if (size != 5*
sizeof(
int)) {
321 ok &=
report_fail(
msprintf(
"test_symlink_to_array: symlink to array db_get_data() returned wrong size %d\n", size));
323 for (
int i=0;
i<5;
i++) {
324 if (ibuf[
i] != 10+
i) {
325 ok &=
report_fail(
msprintf(
"test_symlink_to_array: symlink to array db_get_data() returned wrong value %d at %d\n", ibuf[
i],
i));
342 }
else if (size !=
sizeof(
int)) {
343 ok &=
report_fail(
msprintf(
"test_symlink_to_array: symlink to array element db_get_data() returned wrong size %d\n", size));
344 }
else if (ibuf[0] != 12) {
345 ok &=
report_fail(
msprintf(
"test_symlink_to_array: symlink to array element db_get_data() returned wrong value %d\n", ibuf[0]));
356 }
else if (size != 5*
sizeof(
int)) {
357 ok &=
report_fail(
msprintf(
"test_symlink_to_array: symlink to array element db_get_value() returned wrong size %d\n", size));
359 for (
int i=0;
i<5;
i++) {
360 if (ibuf[
i] != 10+
i) {
361 ok &=
report_fail(
msprintf(
"test_symlink_to_array: symlink to array element db_get_value() returned wrong value %d at %d\n", ibuf[
i],
i));
416 ok &=
test_mkdir(
hDB, hROOT,
"test_delete_key_dir/test/test/test_mkdir");
426 ok &=
test_mkdir(
hDB, hROOT,
"test_delete_dir/test/test/test_mkdir");
435 ok &=
test_symlink(
hDB, 0,
"/test_odb/test_symlink",
"/test_odb/test_mkdir");
439 ok &=
test_symlink(
hDB, 0,
"/test_odb/test_symlink_to_symlink",
"/test_odb/test_symlink");
452 ok &=
test_symlink(
hDB, 0,
"/test_odb/test_symlink1",
"/test_odb/test_symlink1_target");
462 ok &=
test_symlink(
hDB, 0,
"/test_odb/test_symlink2",
"/test_odb/test_symlink2_target");
476 ok &=
test_symlink(
hDB, 0,
"/test_odb/test_symlink1",
"/test_odb/test_symlink_target");
477 ok &=
test_symlink(
hDB, 0,
"/test_odb/test_symlink2",
"/test_odb/test_symlink_target");
487 ok &=
test_symlink(
hDB, 0,
"/test_odb/test_link_to_link1",
"/test_odb/test_link_to_link");
488 ok &=
test_symlink(
hDB, 0,
"/test_odb/test_link_to_link2",
"/test_odb/test_link_to_link1");
499 ok &=
test_symlink(
hDB, 0,
"/test_odb/test_symlink_dir1/test_symlink",
"/test_odb/test_symlink_dir2");
507 ok &=
test_symlink(
hDB, 0,
"/test_odb/test_circular_link/test_link",
"/test_odb/test_circular_link");
508 ok &=
test_symlink(
hDB, 0,
"/test_odb/test_circular_link1",
"/test_odb/test_circular_link");
520 std::vector<HNDLE> hlist;
521 std::vector<KEY> klist;
545 std::vector<HNDLE> hlist;
546 std::vector<KEY> klist;
572int main(
int argc,
char *argv[])
577 signal(SIGILL, SIG_DFL);
578 signal(SIGBUS, SIG_DFL);
579 signal(SIGSEGV, SIG_DFL);
580 signal(SIGPIPE, SIG_DFL);
582 const char* hostname = NULL;
583 const char* exptname = NULL;
592 r = mfe->
Connect(
"test_odb", hostname, exptname);
595 fprintf(stderr,
"Cannot connect to MIDAS, error %s\n", r.
error_message.c_str());
604 printf(
"Starting tests:\n");
614 printf(
"Tests passed OK\n");
618 printf(
"Number of FAILED tests: %d\n",
gCountFail);
int fDB
ODB database handle.
TMFeResult Connect(const char *progname=NULL, const char *hostname=NULL, const char *exptname=NULL)
MVOdb * fOdbRoot
ODB root.
std::string error_message
INT db_delete_key(HNDLE hDB, HNDLE hKey, BOOL follow_links)
INT db_find_link(HNDLE hDB, HNDLE hKey, const char *key_name, HNDLE *subhKey)
INT db_get_value(HNDLE hDB, HNDLE hKeyRoot, const char *key_name, void *data, INT *buf_size, DWORD type, BOOL create)
INT EXPRT db_enum(HNDLE hDB, HNDLE hKeyRoot, std::vector< HNDLE > *sub_handles, std::vector< KEY > *sub_keys, bool follow_links)
INT db_get_data(HNDLE hDB, HNDLE hKey, void *data, INT *buf_size, DWORD type)
INT db_create_key(HNDLE hDB, HNDLE hKey, const char *key_name, DWORD type)
INT db_delete(HNDLE hDB, HNDLE hKeyRoot, const char *odb_path)
INT db_find_key(HNDLE hDB, HNDLE hKey, const char *key_name, HNDLE *subhKey)
INT db_create_link(HNDLE hDB, HNDLE hKey, const char *link_name, const char *destination)
std::string msprintf(const char *format,...)
void print_da(const std::vector< double > &da)
bool test_find_fail(HNDLE hDB, HNDLE hROOT, const char *path, int fail_status)
bool test_mkdir(HNDLE hDB, HNDLE hROOT, const char *path)
bool test_symlink(HNDLE hDB, HNDLE hROOT, const char *path, const char *link_target)
bool test_mkdir_fail(HNDLE hDB, HNDLE hROOT, const char *path, int fail_status)
bool test_find_key_fail(HNDLE hDB, HNDLE hROOT, const char *path, int fail_status)
bool report_fail(const char *text)
bool test_enum_links(const std::vector< HNDLE > &hlist, const std::vector< KEY > &klist)
void print_ia(const std::vector< int > &ia)
bool test_symlink_fail(HNDLE hDB, HNDLE hROOT, const char *path, const char *link_target, int fail_status)
bool test_enum(const std::vector< HNDLE > &hlist, const std::vector< KEY > &klist)
bool test_delete_key(HNDLE hDB, HNDLE hROOT, const char *path)
bool test_chdir(HNDLE hDB, HNDLE hROOT, const char *path, HNDLE *phKey)
bool rmdir(HNDLE hDB, HNDLE hROOT, const char *path)
std::string toString(int i)
bool test_all(HNDLE hDB, MVOdb *odb)
bool test_delete(HNDLE hDB, HNDLE hROOT, const char *path)
bool test_symlink_to_array(HNDLE hDB, MVOdb *odb)