/* * This file is part of rasdaman community. * * Rasdaman community is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Rasdaman community is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with rasdaman community. If not, see . * * Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann / rasdaman GmbH. * * For more information please see * or contact Peter Baumann via . */ /************************************************************************* * * * PURPOSE: * test class DatabaseIf. * * * PREREQUISITES: * - needs COMPDATE (compilation date) defined, eg. cc -DCOMPDATE=\"`date`\" * * COMMENTS: * ***********************************************************************/ static const char rcsid[] = "@(#)reladminif,DatabaseIf: $Id: databaseif.ec,v 1.9 2003/12/27 23:11:43 rasdev Exp $"; using namespace std; #include #include #include #include #include "error.hh" #include "adminif.hh" #include "databaseif.hh" #include "externs.h" #include "raslib/rmdebug.hh" #define DEBUG_MAIN #include "debug.hh" RMINITGLOBALS('C') // test environment: #include "testcenter.h" #define ELLIPSIS "..." /// test macro for checking error condition, printing result, and aborting on error #define CHECK(p) { cout << "CHECKING " << "p"; \ if (!(p)) \ { cout << TEST_ERROR << endl; \ return false; \ } \ else \ { \ cout << TEST_OK << endl; \ } \ } /// ObjectBroker: dummy class to satisfy linker; real ObjectBroker functionality never used here. class ObjectBroker { public: void init(); void deinit(); bool freeMemory(); }; void ObjectBroker::init() { } void ObjectBroker::deinit() { } bool ObjectBroker::freeMemory() { return true; } /// from server/rasserver_main.cc: char globalConnectId[256]; /// doTest(): run the test cases /// preconditions: /// database does NOT yet exist /// @params: /// dbname name of database /// @returns: /// true if all tests succeeded /// false if some test failed bool doTest( const char *dbname ) { bool result = false; // overall test result DatabaseIf *db = NULL; // our test candidate try // capture eny eventual exception for reporting { // --- (1) good scenario cout << "DatabaseIf constructor" << ELLIPSIS << flush; db = new DatabaseIf(); cout << "new state is: " << *db; CHECK( db != NULL ); cout << "create" << ELLIPSIS << endl; db->createDB( dbname, NULL, NULL ); CHECK( db->isConnected() ); CHECK( db->isOpen() ); cout << "db open" << ELLIPSIS << endl; db->open( dbname ); CHECK( db->isConnected() ); CHECK( db->isOpen() ); cout << "db close" << ELLIPSIS << endl; db->close(); CHECK( db->isConnected() ); CHECK( db->isOpen() ); cout << "db destroy" << ELLIPSIS << endl; db->destroyDB( dbname ); CHECK( db->isConnected() ); CHECK( db->isOpen() ); result = true; } // FIXME: what else should be caught explicitly? catch(r_Error& myErr) { cout << "caught r_Error exception #" << myErr.get_errorno() << ": " << myErr.what() << endl; result = false; } catch(bad_alloc) { cout << "caught bad_alloc exception" << endl; result = false; } catch(...) { cout << "caught unknown exception" << endl; result = false; } return result; } int main(int argc, char *argv[]) { const char *progName = argv[0]; // name of this test program int RManDebug2 = 5; // debug trace settings int RManModule = 1; // dito char* dbName = "RASBASE"; // default database name int result = RC_ERROR; // overall test exit code char *resultText = NULL; // overall test status string // --- parameter evaluation, launch msg if (argc == 2) dbName = argv[1]; else if (argc > 2) { cout << "usage: " << progName << " [dbname]" << endl; return( RC_USAGE ); } cout << progName << ", generated on " << COMPDATE << " for rasdaman version " << RMANVERSION << " and base DBMS " << BASEDBSTRING << "; using database '" << dbName << "'" << endl; // --- all is fine, let's do the test bool allFine = doTest( dbName ); if (allFine) { resultText = TEST_OK; result = RC_OK; } else { resultText = TEST_ERROR; result = RC_ERROR; } // --- done, epilogue cout << progName << ": overall test result is " << resultText << endl; return( result ); }