diff options
Diffstat (limited to 'connectivity/workben/testmoz/mozthread.cxx')
-rw-r--r-- | connectivity/workben/testmoz/mozthread.cxx | 477 |
1 files changed, 477 insertions, 0 deletions
diff --git a/connectivity/workben/testmoz/mozthread.cxx b/connectivity/workben/testmoz/mozthread.cxx new file mode 100644 index 000000000000..c61e5d8a0e06 --- /dev/null +++ b/connectivity/workben/testmoz/mozthread.cxx @@ -0,0 +1,477 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_connectivity.hxx" +#include <connectivity/sqlparse.hxx> +#include "connectivity/sqliterator.hxx" +#include <com/sun/star/sdbcx/XTablesSupplier.hpp> +#include <com/sun/star/sdbcx/XDataDefinitionSupplier.hpp> +#include <com/sun/star/sdbc/XResultSet.hpp> +#include <com/sun/star/sdbc/XResultSetMetaData.hpp> +#include <com/sun/star/sdbc/XRow.hpp> +#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/beans/PropertyState.hpp> +#include <com/sun/star/beans/PropertyValue.hpp> +#include <unotools/processfactory.hxx> +#include <cppuhelper/servicefactory.hxx> +#include <com/sun/star/sdbc/XConnection.hpp> +#include <com/sun/star/sdbc/XDriver.hpp> +#include <com/sun/star/sdbc/XDriverAccess.hpp> +#include <com/sun/star/sdbcx/XRowLocate.hpp> +#include <com/sun/star/sdbc/XRowUpdate.hpp> +#include <com/sun/star/sdbc/XResultSetUpdate.hpp> +#include <com/sun/star/sdbcx/XDeleteRows.hpp> +#include <com/sun/star/sdbc/XCloseable.hpp> +#include <com/sun/star/sdb/XDatabaseEnvironment.hpp> +#include <com/sun/star/uno/Any.hxx> + +#include "connectivity/sqlnode.hxx" +#include <ucbhelper/contentbroker.hxx> +#include <comphelper/regpathhelper.hxx> +#include <rtl/ustring.hxx> +#include <rtl/ustrbuf.hxx> +#include <osl/process.h> + +#include <cppuhelper/bootstrap.hxx> +#include <cppuhelper/servicefactory.hxx> +#include <com/sun/star/lang/XComponent.hpp> +#include <com/sun/star/registry/XImplementationRegistration.hpp> +#include <com/sun/star/ucb/XContentProviderManager.hpp> + +#include <ucbhelper/content.hxx> +#include <osl/module.h> +#include <tools/config.hxx> + +#include <stdio.h> +#include <osl/thread.hxx> +#include <osl/diagnose.h> +#include <osl/conditn.hxx> +#include <time.h> + + +using namespace comphelper; +using namespace cppu; +using namespace rtl; +using namespace com::sun::star::uno; +using namespace com::sun::star::lang; +using namespace com::sun::star::registry; +using namespace com::sun::star::ucb; +using namespace com::sun::star::beans; + +//using namespace com::sun::star; +using namespace connectivity; +using namespace com::sun::star::sdb; +using namespace com::sun::star::sdbc; +using namespace com::sun::star::sdbcx; +using namespace ::com::sun::star::container; +using namespace com::sun::star::registry; + +extern Reference< XMultiServiceFactory > InitializeFac( void ); +Reference< XMultiServiceFactory > mMgr; + +#define OUtoCStr( x ) (OUStringToOString ( (x), RTL_TEXTENCODING_ASCII_US ).getStr()) +#define PRINTSTR(x) printf("%s",x); +#define PRINTLN(x) printf("%s\n",x); + +const int testLDAP=0; +const int testMozilla=1; +const int testOp=2; +const int testOe=3; + +static int testCount = 0; +static int testList[4] = {0,0,0,0}; + +int autoTest(Reference<XResultSet> &xRes); + +void printColumns( Reference<XResultSet> &xRes ) +{ + if(xRes.is()) + { + char* aPat = " %-22s "; + char* aPat_Short = " %-12s "; + Reference<XResultSetMetaData> xMeta = Reference<XResultSetMetaDataSupplier>(xRes,UNO_QUERY)->getMetaData(); + OSL_TRACE( "ColumnCount = %d\n", xMeta->getColumnCount()); + for(sal_Int32 i=1;i<=xMeta->getColumnCount();++i) + { + const char *str = OUtoCStr(xMeta->getColumnName(i)); + OSL_TRACE( aPat, str ); + } + OSL_TRACE("\n"); + OSL_TRACE("------------------------------------------------------------------------------------------\n"); + } + else + { + OSL_TRACE(": FAILED to get a ResultSet \n"); + } +} +void printXResultSet( Reference<XResultSet> &xRes ) +{ + if(xRes.is()) + { + char* aPat = " %-22s "; + char* aPat_Short = " %-12s "; + Reference<XRow> xRow(xRes,UNO_QUERY); + Reference<XResultSetMetaData> xMeta = Reference<XResultSetMetaDataSupplier>(xRes,UNO_QUERY)->getMetaData(); + for(sal_Int32 j=1;j<=xMeta->getColumnCount();++j) + { + try + { + const char *str = OUtoCStr(xRow->getString(j)); + OSL_TRACE( aPat_Short, str ); + } catch (...) { + OSL_TRACE(" Ex "); + } + } + OSL_TRACE("\n"); + } + else + OSL_TRACE("FAILED to get a ResultSet \n"); +} + +void printXResultSets( Reference<XResultSet> &xRes ) +{ + if(xRes.is()) + { + printColumns(xRes); + sal_Int32 nRows = 0; + while( xRes.is() && xRes->next()) + { + printXResultSet(xRes); + nRows++; + } + OSL_TRACE( "%d Row(s)\n", nRows); + }else + OSL_TRACE("FAILED to get a ResultSet \n"); +} + + + +int TestMetaData(Reference< ::com::sun::star::sdbc::XConnection> &pConnection) +{ + // Test some metadata + Reference< XDatabaseMetaData > xDmd = pConnection->getMetaData(); + if ( xDmd.is() ) + { + OSL_TRACE(": got DatabaseMetaData \n"); + + OUString sQuoteStr = xDmd->getIdentifierQuoteString(); + OSL_TRACE( "Quote String : '%s'\n", OUtoCStr( sQuoteStr ) ); + + OUString sSQLCmds = xDmd->getSQLKeywords(); + OSL_TRACE( "SQL Commands : '%s'\n", OUtoCStr( sSQLCmds ) ); + + OSL_TRACE("Testing getColumns() : START\n"); + { + Reference<XResultSet> xRes = xDmd->getColumns( + makeAny(OUString::createFromAscii("")), // Catalog + OUString::createFromAscii("%"), // Schema + OUString::createFromAscii("%"), // TabName + OUString::createFromAscii("%") + ); + printXResultSets( xRes ); + } + OSL_TRACE("Testing getColumns() : END\n"); + + OSL_TRACE("Testing getTypeInfo() : START\n"); + { + Reference<XResultSet> xRes = xDmd-> getTypeInfo(); + printXResultSets( xRes ); + } + OSL_TRACE("Testing getTypeInfo() : END\n"); + + OSL_TRACE("Testing getTables() : START\n"); + { + Reference<XResultSet> xRes = xDmd->getTables( + makeAny(OUString::createFromAscii("")), // Catalog + OUString::createFromAscii("%"), // Schema + OUString::createFromAscii("%"), // TabName + Sequence<rtl::OUString>() ); + printXResultSets( xRes ); + } + OSL_TRACE("Testing getTables() : END\n"); + + } + else + OSL_TRACE(": FAILED to get DatabaseMetaData \n"); + return 0; +} + +void TestQuery(Reference< ::com::sun::star::sdbc::XConnection> &pConnection) +{ + // Try a query + OSL_TRACE("Testing createStatement() & executeQuery() : START\n"); + Reference<XStatement> xStmt = pConnection->createStatement(); + Reference<XResultSet> xRes; + if(xStmt.is()) + { + OSL_TRACE(": got statement\n"); + OSL_TRACE(": excuteQuery() : START \n"); +// SELECT "First Name", "Display Name", "E-mail" FROM tablename + OUString sqlPrefix= OUString::createFromAscii("SELECT \"First Name\", \"Display Name\", \"E-mail\" FROM "); + try + { + sal_Int32 times=0; + Reference< XDatabaseMetaData > xDmd = pConnection->getMetaData(); + if ( xDmd.is() ) + { + OSL_TRACE("getTables() : START\n"); + OUString qut = xDmd->getIdentifierQuoteString(); + + Reference<XResultSet> xRes = xDmd->getTables( + makeAny(OUString::createFromAscii("")), // Catalog + OUString::createFromAscii("%"), // Schema + OUString::createFromAscii("%"), // TabName + Sequence<rtl::OUString>() ); + sal_Int32 nTables = 0; + while( xRes.is() && xRes->next()) + { + Reference<XRow> xRow(xRes,UNO_QUERY); + const char *strTableName = OUtoCStr(xRow->getString(3)); + OSL_TRACE("Testing Table:%s\n",strTableName); + + Reference<XResultSet> tmpRes = + xStmt->executeQuery(sqlPrefix + qut + xRow->getString(3) + qut); + autoTest( tmpRes ); + Reference<XCloseable> clsRes(tmpRes,UNO_QUERY); + clsRes->close(); + nTables++; + } + OSL_TRACE("Tested Tables:%d\n",nTables); + } + } catch ( Exception &e ) { + OSL_TRACE( "Exception caught : %s\n", OUtoCStr( e.Message) ); + } +// catch (...) { +// OSL_TRACE( "Non-UNO Exception caught\n" ); +// } + OSL_TRACE("excuteQuery() : END \n"); + } + else + { + OSL_TRACE(": FAILED to get statement\n"); + } + OSL_TRACE("Testing createStatement() & executeQuery() : END\n"); +} +Reference< ::com::sun::star::sdbc::XConnection> TestConnected + (Reference< ::com::sun::star::sdbc::XDriver> &pDriver) +{ + ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection> pConnection; + OSL_TRACE("Begin Connect!\n"); + OUString url; + Sequence<PropertyValue> aValue; + int nType=0; + srand( (unsigned)time( NULL ) ); + nType = rand() % testCount + 1; + int nIndex=0,nCount=0; + for ( nIndex = 0; nIndex< 4;nIndex++) + { + if (testList[nIndex]) + nCount++; + if (nCount == nType) + break; + } + switch( nIndex) + { + case testLDAP: + url=OUString::createFromAscii("sdbc:address:ldap://"); + aValue.realloc(2); + aValue[0].Name = ::rtl::OUString::createFromAscii("HostName"); + aValue[0].Value <<= rtl::OUString::createFromAscii("sun-ds"); + aValue[1].Name = ::rtl::OUString::createFromAscii("BaseDN"); + aValue[1].Value <<= rtl::OUString::createFromAscii("dc=sun,dc=com"); + break; + case testMozilla: + url=OUString::createFromAscii("sdbc:address:mozilla://"); + break; + case testOp: + url=OUString::createFromAscii("sdbc:address:outlook://"); + break; + case testOe: + url=OUString::createFromAscii("sdbc:address:outlookexp://"); + break; + default: + url=OUString::createFromAscii("sdbc:address:mozilla://"); + break; + } + pConnection = + pDriver->connect(url,aValue); + return pConnection; + } + +int autoTest(Reference<XResultSet> &xRes) +{ + sal_Int32 nRows = 0; + printColumns(xRes); + if(xRes.is()) + { + while( xRes.is() && xRes->next()) + { + nRows++; + } + OSL_TRACE( "%d Row(s)\n", nRows); + sal_Int32 times; + sal_Int32 pos; + if (nRows) + { + for(times = 1;times < 10; times ++) + { + pos= rand() % nRows+1; + OSL_TRACE("pos:%d\n",pos); + xRes->absolute(pos); + printXResultSet(xRes); + } + } + } + else + { + OSL_TRACE(": FAILED to get a ResultSet \n"); + } + TimeValue timeValue = { 1, 0 }; //sleep 1 Seconds to give time to other threads + osl_waitThread(&timeValue); + return 0; +} +void SAL_CALL mozThread(void*) +{ + ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection> m_xConnection; + try + { + Reference< ::com::sun::star::sdbc::XDriver> + m_xDriver(mMgr->createInstance( + OUString::createFromAscii("com.sun.star.comp.sdbc.MozabDriver")), + UNO_QUERY); + if(m_xDriver.is()) + { + + m_xConnection = TestConnected(m_xDriver); + if(m_xConnection.is()) + { + if (!TestMetaData(m_xConnection)) + { + TestQuery(m_xConnection); + } + } + else + OSL_TRACE("Can't connected!\n"); + + } + else + { + OSL_TRACE("No driver!\n"); + } + } catch ( Exception &e ) { + OSL_TRACE( "Exception caught : %s\n", OUtoCStr( e.Message) ); + } +// catch (...) { +// OSL_TRACE( "Non-UNO Exception caught\n" ); +// } +} +const int THREAD_COUNT=100; + + +void usage() +{ + PRINTLN("mozThread [opts] threadcount"); + PRINTLN("opts:"); + PRINTLN("-l test ldap"); + PRINTLN("-m test mozilla"); + PRINTLN("-p test outlook"); + PRINTLN("-e test outlook express"); + PRINTLN("0 < threadcount <= 100, default 100"); +} +#if (defined UNX) || (defined OS2) +int main( int argc, char * argv[] ) +#else +int _cdecl main( int argc, char * argv[] ) +#endif + +{ + OSL_TRACE("Init UNO\n"); + Reference< XMultiServiceFactory > xMgr =InitializeFac(); + int threadCount=THREAD_COUNT; + int nAc; + for (nAc = 1; nAc < argc; nAc ++) + { + if (strcmp(argv[nAc],"-l") ==0) + { + testList[testLDAP] = 1; + }else if(strcmp(argv[nAc],"-m") ==0) + { + testList[testMozilla]=1; + }else if(strcmp(argv[nAc],"-p") ==0) + { + testList[testOp]=1; + }else if(strcmp(argv[nAc],"-e") ==0) + { + testList[testOe]=1; + }else if(strcmp(argv[nAc],"-h") ==0 || strcmp(argv[nAc],"--help") ==0) + { + usage(); + return 0; + }else + { + int tmpCount = atoi(argv[nAc]); + if (tmpCount > 0 && tmpCount < threadCount) + { + threadCount = tmpCount; + } + } + } + testCount = testList[testLDAP] + testList[testMozilla] + testList[testOp] + testList[testOe]; + if ( testCount == 0) + { + testList[testLDAP] = 1; + testCount = 1; + } + + if (!xMgr.is()) + { + OSL_TRACE("Error init UNO\n"); + return 1; + } + else + OSL_TRACE("UNO initted\n"); + + mMgr = xMgr; + oslThread xThreads[THREAD_COUNT]; + int index=0; + for(index=0;index < threadCount; index++) + { + xThreads[index] = osl_createThread(mozThread,(void*)NULL); + TimeValue timeValue = { 1, 0 }; //sleep 1 Seconds to give time to other threads + osl_waitThread(&timeValue); + } + for(index=0;index < threadCount; index++) + { + if (osl_isThreadRunning(xThreads[index])) + osl_joinWithThread(xThreads[index]); + } + OSL_TRACE("Exiting...\n"); + return 0; +} + |