00001 #include <stdio.h>
00002 #include <stdlib.h>
00003 #include "TestBase.h"
00004
00005 #include "../../icat/src/icatLowLevelOdbc.c"
00006
00007 using namespace std;
00008
00009 #DEFINE EXPECTED_COMMAND_LINE_ARGS 2
00010
00011 static char * g_argv[EXPECTED_COMMAND_LINE_ARGS];
00012
00013
00014
00015
00016 class TestCllEnv : public ::TestBase {
00017 protected:
00018 virtual void SetUp() {
00019 if(cllOpenEnv(&_icss) == SQL_ERROR) {
00020
00021 cout << "TestCllEnv::Setup():cllOpenEnv() - out of memory" << endl;
00022 exit(1);
00023 }
00024 }
00025
00026 virtual void TearDown() {
00027 if(cllCloseEnv(&_icss) != 0) {
00028 cout << "TestCllEnv::TearDown():cllCloseEnv() - failed" << endl;
00029 }
00030 }
00031 };
00032
00033 TEST_F(TestCllEnv, HandlesNullIcss) {
00034 EXPECT_NE(0, cllConnect(NULL));
00035 }
00036
00037 TEST_F(TestCllEnv, HandlesNoUserPass) {
00038 _icss.databaseUsername[0] = '\0';
00039 _icss.databasePassword[0] = '\0';
00040 EXPECT_NE(0, cllConnect(&_icss));
00041 }
00042
00043 TEST_F(TestCllEnv, HandlesBadUserPass) {
00044 TestBase::setUserPass("bad_user", "bad_pass");
00045 EXPECT_NE(0, cllConnect(&_icss));
00046 }
00047
00048 TEST_F(TestCllEnv, HandlesGoodUserPass) {
00049 TestBase::setUserPass(g_argv[0], g_argv[1]);
00050 EXPECT_EQ(0, cllConnect(&_icss));
00051 EXPECT_EQ(0, cllDisconnect(&_icss));
00052 }
00053
00054
00055
00056
00057 class TestCllFunctions : public ::TestCllEnv {
00058 protected:
00059 virtual void SetUp() {
00060 TestCllEnv::SetUp();
00061 TestBase::setUserPass(g_argv[0], g_argv[1]);
00062 cllConnect(&_icss);
00063 }
00064
00065 virtual void TearDown() {
00066 cllDisconnect(&_icss);
00067 TestCllEnv::TearDown();
00068 }
00069 };
00070
00071 TEST_F(TestCllFunctions, HandlesSQL) {
00072
00073 EXPECT_EQ(CAT_SUCCESS_BUT_WITH_NO_INFO, cllExecSqlNoResult(&_icss,
00074 "create table test (i integer, j integer, a varchar(32))"));
00075
00076
00077 EXPECT_EQ(0, cllExecSqlNoResult(&_icss,
00078 "insert into test values (2, 3, 'a')"));
00079 EXPECT_EQ(0, cllExecSqlNoResult(&_icss, "commit"));
00080
00081
00082 EXPECT_NE(0, cllExecSqlNoResult(&_icss, "bad sql"));
00083 EXPECT_EQ(0, cllGetLastErrorMessage(_msg, sizeof(_msg)));
00084 printf("Last error message: %s\n", _msg);
00085 EXPECT_EQ(0, cllExecSqlNoResult(&_icss, "rollback"));
00086
00087
00088 EXPECT_NE(0, cllExecSqlNoResult(&_icss, NULL));
00089
00090
00091 EXPECT_EQ(CAT_SUCCESS_BUT_WITH_NO_INFO, cllExecSqlNoResult(&_icss,
00092 "delete from test where i = 1"));
00093
00094
00095 int stmt;
00096 _icss.stmtPtr[0] = 0;
00097 EXPECT_EQ(0, cllExecSqlWithResultBV(&_icss, &stmt,
00098 "select * from test where a = ?", "a",0 ,0,0,0,0));
00099 PrintRows(stmt);
00100 EXPECT_EQ(0, cllFreeStatement(&_icss,stmt));
00101
00102
00103 _icss.stmtPtr[0] = 0;
00104 EXPECT_EQ(0, cllExecSqlWithResult(&_icss, &stmt,
00105 "select * from test where a = 'a'"));
00106 PrintRows(stmt);
00107 EXPECT_EQ(0, _cllFreeStatementColumns(&_icss,stmt));
00108
00109
00110 char buf[64];
00111 EXPECT_EQ(0, cllCurrentValueString("hello, world", buf, sizeof(buf)));
00112 cout << buf << endl;
00113
00114 EXPECT_EQ(0, cllNextValueString("hello, world", buf, sizeof(buf)));
00115 cout << buf << endl;
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126 EXPECT_EQ(CAT_SUCCESS_BUT_WITH_NO_INFO, cllExecSqlNoResult(&_icss,
00127 "drop table test"));
00128 EXPECT_EQ(0, cllExecSqlNoResult(&_icss, "commit"));
00129 }
00130
00131 int main(int argc, char **argv) {
00132 int i;
00133 for(i = 0; i < EXPECTED_COMMAND_LINE_ARGS; i++)
00134 {
00135 if(i < argc - 1)
00136 {
00137 g_argv[i] = argv[i+1];
00138 }
00139 else
00140 {
00141 g_argv[i] = NULL;
00142 }
00143 }
00144 ::testing::GTEST_FLAG(output) = "xml:icatLowLevelOdbc.xml";
00145 ::testing::InitGoogleTest(&argc, argv);
00146 return RUN_ALL_TESTS();
00147 }
00148