⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mdbtool_test.cpp

📁 跨平台C++基础库
💻 CPP
字号:

#include "MDBTool_test.h"
#include "../ENV_test.h"

#include "MCRT/mdbtool.h"

#define TEST_SQLITE
#ifdef  TEST_SQLITE
#   define g_pDLLMDBTool    "dbtool_sqlite"
#   define g_pDBHost        NULL
#   define g_pPassword      "password"
#   define g_port           0
#elif defined( TEST_PGSQL )
#   define g_pDLLMDBTool   "dbtool_pgsql"
#   define g_pDBHost       "PGSQL_SVR"
#   define g_pPassword      "password"
#   define g_port           5432
#elif defined( TEST_MYSQL )
#   define g_pDLLMDBTool   "dbtool_mysql"
#   define g_pDBHost       "MYSQL_SVR"
#   define g_pPassword      "password"
#   define g_port           3306
#endif //end TEST_**SQL

// register the fixture into registry
CPPUNIT_TEST_SUITE_REGISTRATION( MDBToolTest );//register test class in cppunit

void MDBToolTest::setUp()
{
    MDBTool dbtool;

    dbtool.Init( g_pDLLMDBTool );
    dbtool.Connect( g_pDBHost, "zf", g_pPassword, "test_db", g_port );

    const char* pStmt   =   "CREATE TABLE test_table (id INT, username CHAR(30))";
    dbtool.Exec( pStmt, strlen(pStmt), NULL );

    dbtool.Fini();
}

void MDBToolTest::tearDown()
{
    MDBTool dbtool;

    dbtool.Init( g_pDLLMDBTool );
    dbtool.Connect( g_pDBHost, "zf", g_pPassword, "test_db", g_port );

    const char* pStmt   =   "DROP TABLE test_table";
    dbtool.Exec( pStmt, strlen(pStmt), NULL );

    dbtool.Fini();
}

void MDBToolTest::testInitNormal()
{
    MDBTool dbtool;

    CPPUNIT_ASSERT( dbtool.Init( g_pDLLMDBTool ) == E_SUCCESS );

    dbtool.Fini();
}

void MDBToolTest::testInitInvalid()
{
    MDBTool dbtool;
    CPPUNIT_ASSERT( dbtool.Init( "dbtool_invalid" ) != E_SUCCESS );
}

void MDBToolTest::testNormalConnect()
{
    MDBTool dbtool;

    CPPUNIT_ASSERT( dbtool.Init( g_pDLLMDBTool ) == E_SUCCESS );

    int retVal  =   E_SUCCESS;
    retVal      =   dbtool.Connect( g_pDBHost, "zf", g_pPassword, "test_db", g_port );
    CPPUNIT_ASSERT( retVal == E_SUCCESS );

    dbtool.Fini();
}

void MDBToolTest::testInvalidConnect()
{
#ifndef TEST_SQLITE
    MDBTool dbtool;

    CPPUNIT_ASSERT( dbtool.Init( g_pDLLMDBTool ) == E_SUCCESS );

    int retVal  =   E_SUCCESS;
    retVal      =   dbtool.Connect( "invalid addr", "zf", g_pPassword, "test_db", g_port );
    CPPUNIT_ASSERT( retVal != E_SUCCESS );

    dbtool.Fini();
#endif //end TEST_SQLITE
}
void MDBToolTest::testInvalidUserConnect()
{
#ifndef TEST_SQLITE
    MDBTool dbtool;

    CPPUNIT_ASSERT( dbtool.Init( g_pDLLMDBTool ) == E_SUCCESS );

    int retVal  =   E_SUCCESS;
    retVal      =   dbtool.Connect( g_pDBHost, "invalid user", g_pPassword, "test_db", g_port );
    CPPUNIT_ASSERT( retVal != E_SUCCESS );

    dbtool.Fini();
#endif //end TEST_SQLITE
}

void MDBToolTest::testInvalidPasswdConnect()
{
#ifndef TEST_SQLITE
    MDBTool dbtool;

    CPPUNIT_ASSERT( dbtool.Init( g_pDLLMDBTool ) == E_SUCCESS );

    int retVal  =   E_SUCCESS;
    retVal      =   dbtool.Connect( g_pDBHost, "zf", "invalid password", "test_db", g_port );
    CPPUNIT_ASSERT( retVal != E_SUCCESS );

    dbtool.Fini();
#endif //end TEST_SQLITE
}

void MDBToolTest::testInvalidDBConnect()
{
#ifndef TEST_SQLITE
    MDBTool dbtool;

    CPPUNIT_ASSERT( dbtool.Init( g_pDLLMDBTool ) == E_SUCCESS );

    int retVal  =   E_SUCCESS;
    retVal      =   dbtool.Connect( g_pDBHost, "zf", g_pPassword, "invalid db", g_port );
    CPPUNIT_ASSERT( retVal != E_SUCCESS );

    dbtool.Fini();
#endif //end TEST_SQLITE
}

void MDBToolTest::testInvalidPortConnect()
{
#ifndef TEST_SQLITE
    MDBTool dbtool;

    CPPUNIT_ASSERT( dbtool.Init( g_pDLLMDBTool ) == E_SUCCESS );

    int retVal  =   E_SUCCESS;
    unsigned int    portInvalid =   112233;
    retVal      =   dbtool.Connect( g_pDBHost, "zf", g_pPassword, "test_db", portInvalid );
    CPPUNIT_ASSERT( retVal != E_SUCCESS );

    dbtool.Fini();
#endif //end TEST_SQLITE
}

void MDBToolTest::testNormalQuery()
{
    MDBTool dbtool;

    CPPUNIT_ASSERT( dbtool.Init( g_pDLLMDBTool ) == E_SUCCESS );

    int retVal  =   E_SUCCESS;
    retVal      =   dbtool.Connect( g_pDBHost, "zf", g_pPassword, "test_db", g_port );
    CPPUNIT_ASSERT( retVal == E_SUCCESS );

    // create table with two rows' data
    {
        const char* pStmt   =   "INSERT INTO test_table VALUES (1,\'ZhuFei\')";
        int rowsAffected    =   0;
        retVal  =   dbtool.Exec( pStmt, strlen(pStmt), & rowsAffected );
        CPPUNIT_ASSERT( retVal == E_SUCCESS );
        pStmt   =   "INSERT INTO test_table VALUES (2,\'zf\')";
        retVal  =   dbtool.Exec( pStmt, strlen(pStmt), & rowsAffected );
        CPPUNIT_ASSERT( retVal == E_SUCCESS );
#ifndef TEST_SQLITE
        CPPUNIT_ASSERT( rowsAffected == 2 );
#endif //end TEST_SQLITE
    }

    // query
    {
        const char*     pStmt   =   "SELECT COUNT(*) FROM test_table";
        MRecordSet      recordSet;
        retVal  =   dbtool.Query( pStmt, strlen(pStmt), & recordSet );
        CPPUNIT_ASSERT( retVal == E_SUCCESS );
        CPPUNIT_ASSERT( recordSet.GetRows() == 1 );
        CPPUNIT_ASSERT( recordSet.GetCols() == 1 );
        CPPUNIT_ASSERT( atoi(recordSet.GetData(0,0,NULL)) == 2 );

        pStmt   =   "SELECT * FROM test_table";
        retVal  =   dbtool.Query( pStmt, strlen(pStmt), & recordSet );
        CPPUNIT_ASSERT( retVal == E_SUCCESS );
        CPPUNIT_ASSERT( recordSet.GetRows() == 2 );
        CPPUNIT_ASSERT( recordSet.GetCols() == 2 );

        // TODO - support print data
        /*
        printf( "%s\t-\t%s\n", recordSet.GetFieldName(0), recordSet.GetFieldName(1) );
        printf( "%d\t-\t%s\n", ::atoi(recordSet.GetData(0,0)), recordSet.GetData(0,1) );
        printf( "%d\t-\t%s\n", ::atoi(recordSet.GetData(1,0)), recordSet.GetData(1,1) );
        */
    }

    dbtool.Fini();
}

void MDBToolTest::testNullQuery()
{
    MDBTool dbtool;

    CPPUNIT_ASSERT( dbtool.Init( g_pDLLMDBTool ) == E_SUCCESS );

    int retVal  =   E_SUCCESS;
    retVal      =   dbtool.Connect( g_pDBHost, "zf", g_pPassword, "test_db", g_port );
    CPPUNIT_ASSERT( retVal == E_SUCCESS );

    // query
    {
        const char*     pStmt   =   "SELECT COUNT(*) FROM test_table";
        MRecordSet      recordSet;
        retVal  =   dbtool.Query( pStmt, strlen(pStmt), & recordSet );
        CPPUNIT_ASSERT( retVal == E_SUCCESS );
        CPPUNIT_ASSERT( recordSet.GetRows() == 1 );
        CPPUNIT_ASSERT( recordSet.GetCols() == 1 );
        CPPUNIT_ASSERT( atoi(recordSet.GetData(0,0,NULL)) == 0 );

        pStmt   =   "SELECT * FROM test_table";
        retVal  =   dbtool.Query( pStmt, strlen(pStmt), & recordSet );
        CPPUNIT_ASSERT( retVal == E_SUCCESS );
        CPPUNIT_ASSERT( recordSet.GetRows() == 0 );
#ifndef TEST_SQLITE
        CPPUNIT_ASSERT( recordSet.GetCols() == 2 );
#endif //end TEST_SQLITE
    }

    dbtool.Fini();
}

void MDBToolTest::testNormalExec()
{
    MDBTool dbtool;

    CPPUNIT_ASSERT( dbtool.Init( g_pDLLMDBTool ) == E_SUCCESS );

    int retVal  =   E_SUCCESS;
    retVal      =   dbtool.Connect( g_pDBHost, "zf", g_pPassword, "test_db", g_port );
    CPPUNIT_ASSERT( retVal == E_SUCCESS );

    // create table with two rows' data
    {
        const char* pStmt   =   "INSERT INTO test_table VALUES (1,\'ZhuFei\')";
        int rowsAffected    =   0;
        retVal  =   dbtool.Exec( pStmt, strlen(pStmt), & rowsAffected );
        CPPUNIT_ASSERT( retVal == E_SUCCESS );
        pStmt   =   "INSERT INTO test_table VALUES (2,\'zf\')";
        retVal  =   dbtool.Exec( pStmt, strlen(pStmt), & rowsAffected );
        CPPUNIT_ASSERT( retVal == E_SUCCESS );
#ifndef TEST_SQLITE
        CPPUNIT_ASSERT( rowsAffected == 1 );
#endif //end TEST_SQLITE
    }

    // Exec
    {
        const char* pStmt   =   "INSERT INTO test_table VALUES (3,\'AAA\')";
        int rowsAffected    =   0;
        retVal  =   dbtool.Exec( pStmt, strlen(pStmt), & rowsAffected );
        CPPUNIT_ASSERT( retVal == E_SUCCESS );
        pStmt   =   "INSERT INTO test_table VALUES (4,\'BBB\')";
        retVal  =   dbtool.Exec( pStmt, strlen(pStmt), & rowsAffected );
        CPPUNIT_ASSERT( retVal == E_SUCCESS );
#ifndef TEST_SQLITE
        CPPUNIT_ASSERT( rowsAffected == 1 );
#endif //end TEST_SQLITE
    }
    {
        const char* pStmt   =   "DELETE FROM test_table WHERE id=3 OR id=4";
        int         rowsAffected    =   0;
        retVal  =   dbtool.Exec( pStmt, strlen(pStmt), & rowsAffected );
        CPPUNIT_ASSERT( retVal == E_SUCCESS );
#ifndef TEST_SQLITE
        CPPUNIT_ASSERT( rowsAffected == 2 );
#endif //end TEST_SQLITE
    }

    dbtool.Fini();
}

void MDBToolTest::testInvalidExec()
{
    MDBTool dbtool;

    CPPUNIT_ASSERT( dbtool.Init( g_pDLLMDBTool ) == E_SUCCESS );

    int retVal  =   E_SUCCESS;
    retVal      =   dbtool.Connect( g_pDBHost, "zf", g_pPassword, "test_db", g_port );
    CPPUNIT_ASSERT( retVal == E_SUCCESS );

    // Exec
    {
        // sqlite3 doesn't support INSERT INTO table VALUES (VALUES1),(VALUES), just one by one
        const char* pStmt   =   "INSERT INTO non_exist_table VALUES (3, \'AAA\'),(4,\'BBB\')";
        retVal  =   dbtool.Exec( pStmt, strlen(pStmt), NULL );
        CPPUNIT_ASSERT( retVal != E_SUCCESS );
    }

    dbtool.Fini();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -