/* * CDE - Common Desktop Environment * * Copyright (c) 1993-2012, The Open Group. All rights reserved. * * These libraries and programs are free software; you can * redistribute them and/or modify them under the terms of the GNU * Lesser General Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your option) * any later version. * * These libraries and programs are distributed in the hope that * they will be useful, but WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public * License along with these libraries and programs; if not, write * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301 USA */ /* * $XConsortium: olias_test.C /main/8 1996/10/26 18:20:03 cde-hal $ * * Copyright (c) 1992 HAL Computer Systems International, Ltd. * All rights reserved. Unpublished -- rights reserved under * the Copyright Laws of the United States. USE OF A COPYRIGHT * NOTICE IS PRECAUTIONARY ONLY AND DOES NOT IMPLY PUBLICATION * OR DISCLOSURE. * * THIS SOFTWARE CONTAINS CONFIDENTIAL INFORMATION AND TRADE * SECRETS OF HAL COMPUTER SYSTEMS INTERNATIONAL, LTD. USE, * DISCLOSURE, OR REPRODUCTION IS PROHIBITED WITHOUT THE * PRIOR EXPRESS WRITTEN PERMISSION OF HAL COMPUTER SYSTEMS * INTERNATIONAL, LTD. * * RESTRICTED RIGHTS LEGEND * Use, duplication, or disclosure by the Government is subject * to the restrictions as set forth in subparagraph (c)(l)(ii) * of the Rights in Technical Data and Computer Software clause * at DFARS 252.227-7013. * * HAL COMPUTER SYSTEMS INTERNATIONAL, LTD. * 1315 Dell Avenue * Campbell, CA 95008 * */ #include "oliasdb/olias_test.h" #include "api/utility.h" #include "utility/pm_random.h" #include "misc/unique_id.h" #include "storage/vm_storage.h" #include "dstr/dstr_test.h" #include "storage/store_test.h" #include "oliasdb/olias_funcs.h" #include "object/random_gen.h" #ifdef REGRESSION_TEST #include "oliasdb/graphic_test.h" #include "oliasdb/loc_test.h" #include "oliasdb/stylesheet_test.h" #include "oliasdb/dlp_test.h" #include "oliasdb/mark_test.h" #include "oliasdb/toc_test.h" #include "oliasdb/doc_test.h" #include "oliasdb/node_test.h" #endif #include "oliasdb/collectionIterator.h" #include "oliasdb/mmdb.h" #ifdef NODEBUG void test_collector_iterator(info_base* base) { MESSAGE(cerr, "node locators:"); nodeCollectionIterator x(base); while ( ++x ) { debug(cerr, x.get_locator()); } MESSAGE(cerr, "stylesheet locators:"); stylesheetCollectionIterator y(base); while ( ++y ) { debug(cerr, y.get_locator()); } MESSAGE(cerr, "locator set locators:"); locatorCollectionIterator z(base); while ( ++z ) { debug(cerr, z.get_locator()); } } int dump_instances(info_base* base_ptr, char* col_nm, c_code_t ins_code) { if ( base_ptr == 0 ) throw(stringException("null base ptr")); Iterator *it = base_ptr -> first(col_nm, ins_code); if (it==0) throw(stringException("null iterator pointer")); int i = 0; while ( *it ) { oid_t id = base_ptr -> get_oid(*it); if ( strcmp(col_nm, NODE_SET_NAME) == 0 ) { i++; node_smart_ptr x(base_ptr, id); cout << x.data(); //debug(cerr, x.long_title()); } else if ( strcmp(col_nm, LOCATOR_SET_NAME) == 0 ) { i++; locator_smart_ptr x(base_ptr, id); cout << x.inside_node_locator_str() << "\n"; } if ( strcmp(col_nm, GRAPHIC_SET_NAME) == 0 ) { i++; graphic_smart_ptr x(base_ptr, id); if ( x.type() == 3 ) { const char* ps_str = x.data(); cout << "\n"; cout << "\n"; cout << x.data_size() << "\t"; for ( int j=0; j next(*it); } debug(cerr, i); delete it; return 0; } int cache_test( info_lib* infolib_ptr, const char* base_name, int argc, char** argv ) { locator_smart_ptrPtr* ptr_array = new locator_smart_ptrPtr[argc]; debug(cerr, argc); int i; for ( i=0; i node_id().asciiOut(cerr); cerr << "\n"; //debug(cerr, ptr_array[i] -> vcc_num()); cerr << "\n"; } for ( i=0; i num_of_docs(); doc_smart_ptr* doc = 0; node_smart_ptr* first_node = 0, *node = 0; dlp_smart_ptr* x = 0, *dlp_cell = 0; for ( int i=0; i long_title()); first_node = new node_smart_ptr(x_base, doc -> locator_id()); dlp_cell = new dlp_smart_ptr(x_base, first_node -> its_oid()); while ( dlp_cell ) { debug(cerr, dlp_cell -> node_id()); x = dlp_cell -> next(); delete dlp_cell; dlp_cell = x; } delete doc; delete first_node; } } #endif #ifdef REGRESSION_TEST #define TEST_STY_FILE "test.sty" #define TEST_SEC_FILE "test.sec" #define TEST_MIX_FILE "test.mix" int generate_stream(info_base* b_ptr, char* path, int num_sections, int min, int max) { random_gen x; if ( check_and_create_dir(path) == false ) return -1; // generate stylesheet stream cerr << " stylesheets ..." << endl; int stylesheets = x.pick_a_value(5, 20); // assume [5, 20] is the range char buf[BUFSIZ]; snprintf(buf, sizeof(buf), "%s/%s", path, TEST_STY_FILE); fstream stylesheet_stream(buf, ios::out); if ( !stylesheet_stream ) return -1; int i; for (i=0; i asciiIn(in); if ( code == c || code == 0 ) { switch ( c ) { case OLIAS_NODE_CODE : ok |= compare_node(*(node_smart_ptr*)root_hd_ptr, base_ptr); break; case STYLESHEET_CODE : ok |= compare_stylesheet(*(stylesheet_smart_ptr*)root_hd_ptr, base_ptr); break; case DOC_CODE : ok |= compare_doc(*(doc_smart_ptr*)root_hd_ptr, base_ptr); break; case GRAPHIC_CODE : ok |= compare_graphic(*(graphic_smart_ptr*)root_hd_ptr, base_ptr); break; case TOC_CODE : ok |= compare_toc(*(toc_smart_ptr*)root_hd_ptr, base_ptr); break; case LOCATOR_CODE : ok |= compare_locator(*(locator_smart_ptr*)root_hd_ptr, base_ptr); break; default: break; } } delete root_hd_ptr; } st.remove(); } return ok; } struct { char* name; c_code_t code; } auto_test_spec[] = { {(char*)"auto_node_test", OLIAS_NODE_CODE}, {(char*)"auto_SGML_content_test", SGML_CONTENT_CODE}, {(char*)"auto_stylesheet_test", STYLESHEET_CODE}, {(char*)"auto_graphic_test", GRAPHIC_CODE}, {(char*)"auto_doc_test", DOC_CODE}, {(char*)"auto_toc_test", TOC_CODE}, {(char*)"auto_loc_test", LOCATOR_CODE}, }; #define NUM_OF_AUTO_TESTS 7 int auto_test(int argc, char** argv, OLIAS_DB& db) { int ok = 0; info_lib* infolib_ptr = db.openInfoLib(argv[2]); // define if ( infolib_ptr == 0 || infolib_ptr->define_info_base(argv[4],argv[4],argv[3]) == false ) { STDERR_MESSAGE("creating test database failed\n"); return -1; } else STDERR_MESSAGE("creating test database done\n"); db.closeInfoLib(infolib_ptr->get_info_lib_uid()); // randomly generate raw stream infolib_ptr = db.openInfoLib(argv[2]); info_base* base_ptr = infolib_ptr -> get_info_base(argv[4]); ok = generate_stream(base_ptr, argv[2], atoi(argv[5]), atoi(argv[6]), atoi(argv[7]) ); if ( ok != 0 ) { STDERR_MESSAGE("generating test data failed\n"); return -1; } else STDERR_MESSAGE("generating test data done\n"); db.closeInfoLib(infolib_ptr->get_info_lib_uid()); // load style sheet cerr << " loading stylesheets ..." << endl; char buf[256]; char file_name[256]; snprintf(buf, sizeof(buf), "%s.stylesheet", argv[4]); snprintf(file_name, sizeof(file_name), "%s/%s", argv[2], TEST_STY_FILE); infolib_ptr = db.openInfoLib(argv[2]); base_ptr = infolib_ptr -> get_info_base(argv[4]); ok = load( base_ptr, buf, file_name ); if ( ok != 0 ) { STDERR_MESSAGE("loading test stylesheet data failed\n"); return -1; } else STDERR_MESSAGE("loading test stylesheet data done\n"); db.closeInfoLib(infolib_ptr->get_info_lib_uid()); // load sections (small component) cerr << " loading sections ..." << endl; snprintf(buf, sizeof(buf), "%s.node", argv[4]); snprintf(file_name, sizeof(file_name), "%s/%s", argv[2], TEST_SEC_FILE); infolib_ptr = db.openInfoLib(argv[2]); base_ptr = infolib_ptr -> get_info_base(argv[4]); ok = load( base_ptr, buf, file_name ); if ( ok != 0 ) { STDERR_MESSAGE("loading test section data failed\n"); return -1; } else STDERR_MESSAGE("loading test section data done\n"); db.closeInfoLib(infolib_ptr->get_info_lib_uid()); // load all other objects cerr << " loading all other objects ..." << endl; snprintf(file_name, sizeof(file_name), "%s/%s", argv[2], TEST_MIX_FILE); fstream in(file_name, ios::in); if ( !in ) return -1; infolib_ptr = db.openInfoLib(argv[2]); base_ptr = infolib_ptr -> get_info_base(argv[4]); ok = _load_mixed_objects(base_ptr, in); if ( ok != 0 ) { STDERR_MESSAGE("loading all other test data failed\n"); return -1; } else STDERR_MESSAGE("loading all other test data done\n"); db.closeInfoLib(infolib_ptr->get_info_lib_uid()); // test infolib_ptr = db.openInfoLib(argv[2]); base_ptr = infolib_ptr -> get_info_base(argv[4]); // stylesheet snprintf(file_name, sizeof(file_name), "%s/%s", argv[2], TEST_STY_FILE); fstream ss_in(file_name, ios::in); if ( !ss_in ) return -1; ok = extract_and_compare_objects(ss_in, base_ptr, 0); if ( ok != 0 ) { STDERR_MESSAGE("testing stylesheet data failed\n"); return -1; } else STDERR_MESSAGE("testing stylesheet data done\n"); // node snprintf(file_name, sizeof(file_name), "%s/%s", argv[2], TEST_SEC_FILE); fstream nd_in(file_name, ios::in); if ( !nd_in ) return -1; ok = extract_and_compare_objects(nd_in, base_ptr, 0); if ( ok != 0 ) { STDERR_MESSAGE("testing section failed\n"); return -1; } else STDERR_MESSAGE("testing section done\n"); // all other snprintf(file_name, sizeof(file_name), "%s/%s", argv[2], TEST_MIX_FILE); fstream all_in(file_name, ios::in); if ( !all_in ) return -1; ok = extract_and_compare_objects(all_in, base_ptr, 0); if ( ok != 0 ) { STDERR_MESSAGE("testing all other data failed\n"); return -1; } else STDERR_MESSAGE("testing all other data done\n"); db.closeInfoLib(infolib_ptr->get_info_lib_uid()); if ( argc == 8 || ( argc == 9 && strcmp(argv[8], "true") == 0 ) ) { db.destroy(argv[2]); destroy_stream(argv[2]); } return ok; } #endif int select_debug_routine(int argc, char** argv, OLIAS_DB& db) { int ok = 2; #ifdef REGRESSION_TEST if ( strcmp(argv[1], "auto_test") == 0 ) { if (argc != 8 && argc != 9 ) { // 1 2 3 4 5 cerr << "usage: auto_test info_lib_path info_base_spec base_name number_of_sections max_section_size, min_section_size [true|false]\n"; return 1; } else return auto_test(argc, argv, db); } ok =store_test(argc, argv); if ( ok != 2 ) { return ok; } ok =dstr_test(argc, argv); if ( ok != 2 ) { return ok; } ok =mark_test(argc, argv); #ifdef NODEBUG if (ok < 0) { cerr << "mark_test failed." << endl; return ok; } else cerr << "mark_test done." << endl; #else if ( ok != 2 ) { return ok; } #endif for ( int i=0; i get_info_base(argv[2]); if ( argc == 4 ) { fstream in(argv[3], ios::in); return extract_and_compare_objects(in, base_ptr, auto_test_spec[i].code); } else { return extract_and_compare_objects(cin, base_ptr, auto_test_spec[i].code); } } #endif #ifdef NODEBUG if ( strcmp(argv[1], "random_gen") == 0 ) { if ( argc != 7 ) { cerr << "random_gen args: " << "random_gen base_name path num_sections min_section_len max_sec_len\n"; return 1; } info_base* base_ptr = db.openInfoLib() -> get_info_base(argv[2]); return generate_stream(base_ptr, argv[3], atoi(argv[4]), atoi(argv[5]), atoi(argv[6])); } else if ( strcmp(argv[1], "test_iterator") == 0 ) { info_base* base_ptr = db.openInfoLib() -> get_info_base(argv[2]); test_collector_iterator(base_ptr); ok = 0; } else if ( strcmp(argv[1], "dump_node_ids") == 0 ) { if ( argc != 3 ) { MESSAGE(cerr, "dump_node_ids args: dump_node_ids base_nm"); } else { info_base* base_ptr = db.openInfoLib() -> get_info_base(argv[2]); dump_node_ids(base_ptr); ok = 0; } } else if ( strcmp(argv[1], "dump_instances") == 0 ) { if ( argc != 4 ) { MESSAGE(cerr, "load args: dump_all_instance base_nm type"); } else { info_base* base_ptr = db.openInfoLib() -> get_info_base(argv[2]); if ( strcmp(argv[3], "nodes") == 0 ) ok = dump_instances(base_ptr, NODE_SET_NAME, OLIAS_NODE_CODE); else if ( strcmp(argv[3], "locators") == 0 ) ok = dump_instances(base_ptr, LOCATOR_SET_NAME, LOCATOR_CODE); else if ( strcmp(argv[3], "graphics") == 0 ) ok = dump_instances(base_ptr, GRAPHIC_SET_NAME, GRAPHIC_CODE); } } else if ( strcmp(argv[1], "file_load") == 0 ) { if ( (argc-2) % 3 != 0 ) { MESSAGE(cerr, "load args: file_load [obj_type obj_name data_file]+"); } else { info_base* base_ptr = db.openInfoLib() -> get_info_base(argv[2]); ok = load( base_ptr, argv+2, argc-2 ); } } else if ( strcmp(argv[1], "loc_test") == 0 ) { if ( argc != 4 ) { MESSAGE(cerr, "loc_test args: loc_test base_name loc_value"); } else { ok = loc_test( db.openInfoLib(), argv[2], argv[3] ); } } else if ( strcmp(argv[1], "toc_test") == 0 ) { if ( argc != 4 ) { MESSAGE(cerr, "toc_test args: toc_test base_name oid_str"); } else { ok = toc_test( db.openInfoLib(), argv[2], argv[3] ); } } else if ( strcmp(argv[1], "graphic_test") == 0 ) { if ( argc != 4 ) { MESSAGE(cerr, "graphic_test args: graphic_test base_name oid_str"); } else { ok = graphic_test( db.openInfoLib(), argv[2], argv[3] ); } } else if ( strcmp(argv[1], "stylesheet_test_loc") == 0 ) { if ( argc != 4 ) { MESSAGE(cerr, "stylesheet_test_loc args: stylesheet_test_loc base_name loc"); } else { ok = stylesheet_test_loc( db.openInfoLib(), argv[2], argv[3] ); } } else if ( strcmp(argv[1], "stylesheet_test_oid") == 0 ) { if ( argc != 4 ) { MESSAGE(cerr, "stylesheet_test_oid args: stylesheet_test_oid base_name oid"); } else { ok = stylesheet_test_oid( db.openInfoLib(), argv[2], argv[3] ); } } else if ( strcmp(argv[1], "node_test_loc") == 0 ) { if ( argc != 4 ) { MESSAGE(cerr, "node_test_loc args: node_test_loc base_name loc"); } else { ok = node_test_loc( db.openInfoLib(), argv[2], argv[3] ); } } else if ( strcmp(argv[1], "node_test_oid") == 0 ) { if ( argc != 4 ) { MESSAGE(cerr, "node_test_oid args: node_test_oid base_name oid_str"); } else { ok = node_test_oid( db.openInfoLib(), argv[2], argv[3] ); } } else if ( strcmp(argv[1], "dlp_test") == 0 ) { if ( argc != 4 ) { MESSAGE(cerr, "dlp_test args: dlp_test base_name oid_str"); } else { ok = dlp_test( db.openInfoLib(), argv[2], argv[3] ); } } else if ( strcmp(argv[1], "doc_test_oid") == 0 ) { if ( argc != 4 ) { MESSAGE(cerr, "doc_test_oid args: doc_test_oid base_name oid_str"); } else { ok = doc_test_oid( db.openInfoLib(), argv[2], argv[3] ); } } else if ( strcmp(argv[1], "doc_test_int") == 0 ) { if ( argc != 4 ) { MESSAGE(cerr, "doc_test_int args: doc_test_int base_name int_str"); } else { ok = doc_test_int( db.openInfoLib(), argv[2], argv[3] ); } } #endif return ok; }