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