IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 29, 2005, 9:03:48 PM (21 years ago)
Author:
asc
Message:

Added more robust checking of DB API results

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/test/fileUtils/tst_psDB.c

    r3545 r3561  
    99 *  @author Aaron Culliney, MHPCC
    1010 *
    11  *  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
    12  *  @date $Date: 2005-03-29 22:14:48 $
     11 *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
     12 *  @date $Date: 2005-03-30 07:03:48 $
    1313 *
    1414 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    2424#include <limits.h>
    2525#include <stdlib.h>
     26#include <string.h>
    2627
    2728#include "psDB.h"
    2829#include "psTest.h"
    2930#include "pslib.h"
     31
     32#define STR_1 "hello world!"
     33#define STR_2 "foobar"
     34#define S32_1 1974
     35#define S32_2 -18
     36#define F32_1 3.14159
     37#define F32_2 3.33
     38#define F64_1 2.7182818
     39#define F64_2 1.23456789
    3040
    3141static psDB *_init_psDB( void );
     
    4050static psMetadata *_get_where( void );
    4151static psMetadata *_get_update_values(const char *val0, psS32 val1, psF32 val2, psF64 val3);
     52static void _print_row( psMetadata *row );
    4253
    4354//static psS32 TPDBCreate( void );
     
    157168{
    158169    return _get_RowMetadata(
    159                "key_string", "comment-string", "hello world!",
    160                "key_s32",    "comment-s32",     1974,
    161                "key_f32",    "comment-f32",     3.14159,
    162                "key_f64",    "comment-f64",     2.71828);
     170               "key_string", "comment-string", STR_1,
     171               "key_s32",    "comment-s32",    S32_1,
     172               "key_f32",    "comment-f32",    F32_1,
     173               "key_f64",    "comment-f64",    F64_1);
    163174}
    164175
    165176psMetadata *_get_where( void )
    166177{
    167     return _get_RowMetadata(
    168                NULL, NULL, NULL,
    169                "key_s32",    "comment-s32",     1974,
    170                "key_f32",    "comment-f32",     3.14159,
    171                "key_f64",    "comment-f64",     2.71828);
     178    psMetadata *md = NULL;
     179    psMetadataItem *s32=NULL;
     180
     181    md = psMetadataAlloc();
     182    if (md == NULL) {
     183        psError(PS_ERR_UNKNOWN, true, "could not create psMetadata in %s!", __func__ );
     184        return NULL;
     185    }
     186    s32 = psMetadataItemAllocS32("key_s32", "", S32_1);
     187    if (s32 == NULL) {
     188        psError(PS_ERR_UNKNOWN, true, "could not create psMetadataItem in %s!", __func__ );
     189        return NULL;
     190    }
     191    if (!psMetadataAddItem(md, s32, 0, 0)) {
     192        psError(PS_ERR_UNKNOWN, true, "could not add psMetadataItem(s) to psMetadata in %s!", __func__ );
     193        return NULL;
     194    }
     195
     196    psFree(s32);
     197    return md;
    172198}
    173199
     
    175201{
    176202    return _get_RowMetadataValues(val0, val1, val2, val3);
     203}
     204
     205void _print_row( psMetadata *row )
     206{
     207    psMetadataIterator *iter=NULL;
     208    psMetadataItem *item=NULL;
     209
     210    iter = psMetadataIteratorAlloc(row, 0, NULL);
     211    while ((item = psMetadataGetAndIncrement(iter)) != NULL) {
     212        if (item->type == PS_META_STR) {
     213            psLogMsg( __func__, PS_LOG_INFO, "[%s]=[%s]\n", item->name, item->data.V );
     214        } else if (item->type == PS_META_S32) {
     215            psLogMsg( __func__, PS_LOG_INFO, "[%s]=[%d]\n", item->name, item->data.S32 );
     216        } else if (item->type == PS_META_F32) {
     217            psLogMsg( __func__, PS_LOG_INFO, "[%s]=[%g]\n", item->name, item->data.F32 );
     218        } else if (item->type == PS_META_F64) {
     219            psLogMsg( __func__, PS_LOG_INFO, "[%s]=[%g]\n", item->name, item->data.F64 );
     220        }
     221    }
     222
     223    psFree(iter);
    177224}
    178225
     
    213260    }
    214261
    215     psLogMsg( __func__, PS_LOG_INFO, "psDBChange shall change to a new new test database.\n" );
     262    psLogMsg( __func__, PS_LOG_INFO, "psDBChange shall change to a new test database.\n" );
    216263
    217264    failed = ! psDBChange(dbh, dbname);
     
    254301    psDB *dbh = NULL;
    255302    const char* table = "table2";
    256     psMetadata *md = _get_CreateTableMetadata();
     303    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
    257304
    258305    dbh = _init_psDB();
     
    266313    if (!failed) {
    267314        failed = ! psDBDropTable(dbh, table);
     315
     316        // insert should fail ...
     317        psLogMsg( __func__, PS_LOG_INFO, "psDBDropTable: insert should fail here...\n" );
     318        row = _get_row();
     319        if (psDBInsertOneRow(dbh, table, row)) {
     320            psLogMsg( __func__, PS_LOG_INFO, "oops, insert unexpectedly succeeded!\n" );
     321            failed = 1;
     322        }
     323        psFree(row);
    268324    }
    269325
     
    281337    const char* table = "table3";
    282338    psArray *ary = NULL;
    283     psMetadata *md = _get_CreateTableMetadata();
     339    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
     340    char *ptr=NULL;
    284341
    285342    dbh = _init_psDB();
     
    292349    failed = ! psDBCreateTable(dbh, table, md);
    293350    if (!failed) {
    294         ary = psDBSelectColumn(dbh, table, "key_string", 1);
     351
     352        row = _get_row();
     353        psDBInsertOneRow(dbh, table, row);
     354        psFree(row);
     355
     356        row = _get_row();
     357        psDBInsertOneRow(dbh, table, row);
     358        psFree(row);
     359
     360        row = _get_row();
     361        psDBInsertOneRow(dbh, table, row);
     362        psFree(row);
     363
     364        ary = psDBSelectColumn(dbh, table, "key_string", 0);
    295365        if (ary == NULL) {
    296366            failed = 1;
    297367        } else {
     368            ptr = psArrayGet(ary, 0);
     369            psLogMsg( __func__, PS_LOG_INFO, "psDBSelectColumn: [%s]\n", ptr );
     370
     371            ptr = psArrayGet(ary, 1);
     372            psLogMsg( __func__, PS_LOG_INFO, "psDBSelectColumn: [%s]\n", ptr );
     373
     374            ptr = psArrayGet(ary, 2);
     375            psLogMsg( __func__, PS_LOG_INFO, "psDBSelectColumn: [%s]\n", ptr );
     376
     377            if (strcmp(ptr, STR_1)) {
     378                psLogMsg( __func__, PS_LOG_INFO, "oops, did not find expected string output!\n" );
     379                failed = 1;
     380            } else {
     381                psLogMsg( __func__, PS_LOG_INFO, "found expected string output.\n" );
     382            }
     383
    298384            psFree(ary);
    299385        }
     
    314400    const char* table = "table4";
    315401    psVector *vec = NULL;
    316     psMetadata *md = _get_CreateTableMetadata();
     402    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
    317403
    318404    dbh = _init_psDB();
     
    325411    failed = ! psDBCreateTable(dbh, table, md);
    326412    if (!failed) {
    327         vec = psDBSelectColumnNum(dbh, table, "key_string", PS_TYPE_PTR, 1);
     413
     414        row = _get_row();
     415        psDBInsertOneRow(dbh, table, row);
     416        psFree(row);
     417
     418        row = _get_row();
     419        psDBInsertOneRow(dbh, table, row);
     420        psFree(row);
     421
     422        row = _get_row();
     423        psDBInsertOneRow(dbh, table, row);
     424        psFree(row);
     425
     426        vec = psDBSelectColumnNum(dbh, table, "key_s32", PS_TYPE_S32, 0);
    328427        if (vec == NULL) {
    329428            failed = 1;
    330429        } else {
     430            psLogMsg( __func__, PS_LOG_INFO, "str=[%d]\n", (vec->data.S32)[0] );
     431            psLogMsg( __func__, PS_LOG_INFO, "str=[%d]\n", (vec->data.S32)[1] );
     432            psLogMsg( __func__, PS_LOG_INFO, "str=[%d]\n", (vec->data.S32)[2] );
     433            if ((vec->data.S32)[2] != S32_1) {
     434                psLogMsg( __func__, PS_LOG_INFO, "oops, did not find expected S32 output!\n" );
     435                failed = 1;
     436            } else {
     437                psLogMsg( __func__, PS_LOG_INFO, "found expected S32 output.\n" );
     438            }
    331439            psFree(vec);
    332440        }
     
    348456    psArray *ary = NULL;
    349457    psMetadata *where=NULL, *row=NULL, *md = _get_CreateTableMetadata();
     458    psMetadataItem *item = NULL;
    350459
    351460    dbh = _init_psDB();
     
    378487                failed = 1;
    379488            } else {
     489                _print_row((psMetadata*)psArrayGet(ary, 0));
     490                _print_row((psMetadata*)psArrayGet(ary, 1));
     491                row = (psMetadata*)psArrayGet(ary, 2);
     492                _print_row(row);
     493
     494                item = psMetadataLookup(row, "key_s32");
     495                if ((item == NULL) || (item->data.S32 != S32_1)) {
     496                    psLogMsg( __func__, PS_LOG_INFO, "oops, did not find expected output!\n" );
     497                    failed = 1;
     498                } else {
     499                    psLogMsg( __func__, PS_LOG_INFO, "found expected output.\n" );
     500                }
     501
    380502                psFree(ary);
    381503            }
     
    427549    psArray *rowSet = NULL;
    428550    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
     551    psMetadataItem *item=NULL;
    429552
    430553    dbh = _init_psDB();
     
    454577        failed = ! psDBInsertRows(dbh, table, rowSet);
    455578        psFree(rowSet);
     579
     580        // extra checks ...
     581        rowSet = psDBDumpRows(dbh, table);
     582        if (rowSet == NULL) {
     583            failed = 1;
     584        } else {
     585            _print_row((psMetadata*)psArrayGet(rowSet, 0));
     586            _print_row((psMetadata*)psArrayGet(rowSet, 1));
     587            row = (psMetadata*)psArrayGet(rowSet, 2);
     588            _print_row(row);
     589
     590            item = psMetadataLookup(row, "key_s32");
     591            if ((item == NULL) || (item->data.S32 != S32_1)) {
     592                psLogMsg( __func__, PS_LOG_INFO, "oops, did not find expected output!\n" );
     593                failed = 1;
     594            } else {
     595                psLogMsg( __func__, PS_LOG_INFO, "found expected output.\n" );
     596            }
     597
     598            psFree(rowSet);
     599        }
    456600
    457601        psDBDropTable(dbh, table);
     
    472616    psArray *ary = NULL;
    473617    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
     618    psMetadataItem *item=NULL;
    474619
    475620    dbh = _init_psDB();
     
    500645                failed = 1;
    501646            } else {
     647
     648                _print_row((psMetadata*)psArrayGet(ary, 0));
     649                _print_row((psMetadata*)psArrayGet(ary, 1));
     650                row = (psMetadata*)psArrayGet(ary, 2);
     651                _print_row(row);
     652
     653                item = psMetadataLookup(row, "key_s32");
     654                if ((item == NULL) || (item->data.S32 != S32_1)) {
     655                    psLogMsg( __func__, PS_LOG_INFO, "oops, did not find expected output!\n" );
     656                    failed = 1;
     657                } else {
     658                    psLogMsg( __func__, PS_LOG_INFO, "found expected output.\n" );
     659                }
     660
    502661                psFree(ary);
    503662            }
     
    534693            failed = 1;
    535694        } else {
     695            _print_row(meta);
    536696            psFree(meta);
    537697        }
     
    551711    psDB *dbh = NULL;
    552712    const char* table = "table10";
    553     psArray *rowSet = NULL;
     713    psArray *ary=NULL, *rowSet=NULL;
    554714    psMetadata *row=NULL, *where=NULL, *updates=NULL, *md = _get_CreateTableMetadata();
     715    psMetadataItem *item=NULL;
    555716
    556717    dbh = _init_psDB();
     
    581742        if (!failed) {
    582743            where = _get_where();
    583             updates = _get_update_values("foobar", -1, 3.3333, 1234.5);
     744            updates = _get_update_values(STR_2, S32_2, F32_2, F64_2);
    584745            failed = (psDBUpdateRows(dbh, table, where, updates) < 0);
     746
     747            ary = psDBDumpRows(dbh, table);
     748            if (ary == NULL) {
     749                failed = 1;
     750            } else {
     751
     752                _print_row((psMetadata*)psArrayGet(ary, 0));
     753                _print_row((psMetadata*)psArrayGet(ary, 1));
     754                row = (psMetadata*)psArrayGet(ary, 2);
     755                _print_row(row);
     756
     757                item = psMetadataLookup(row, "key_s32");
     758                if ((item == NULL) || (item->data.S32 != S32_2)) {
     759                    psLogMsg( __func__, PS_LOG_INFO, "oops, did not find expected output!\n" );
     760                    failed = 1;
     761                } else {
     762                    psLogMsg( __func__, PS_LOG_INFO, "found expected output.\n" );
     763                }
     764
     765                psFree(ary);
     766            }
     767
    585768            psFree(updates);
    586769            psFree(where);
     
    602785    psDB *dbh = NULL;
    603786    const char* table = "table10";
    604     psArray *rowSet = NULL;
     787    psArray *ary=NULL, *rowSet=NULL;
    605788    psMetadata *where=NULL, *row=NULL, *md = _get_CreateTableMetadata();
    606789
     
    633816            where = _get_where();
    634817            failed = (psDBDeleteRows(dbh, table, where) < 0);
     818
     819            ary = psDBDumpRows(dbh, table);
     820            if (ary == NULL) {
     821                failed = 1;
     822            } else {
     823                if (ary->n > 0) {
     824                    psLogMsg( __func__, PS_LOG_INFO, "oops, did not delete stuff!\n" );
     825                    failed = 1;
     826                } else {
     827                    psLogMsg( __func__, PS_LOG_INFO, "found expected empty table.\n" );
     828                }
     829
     830                psFree(ary);
     831            }
     832
    635833            psFree(where);
    636834        }
Note: See TracChangeset for help on using the changeset viewer.