Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
7c87a538
Kaydet (Commit)
7c87a538
authored
Eyl 17, 2013
tarafından
Andrzej J.R. Hunt
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Implement firebird/hsqldb performance comparison test.
Change-Id: Iaf28b0fcb04ee713ccae6a593e56653eac6e2eba
üst
2fe4dd1e
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
365 additions
and
0 deletions
+365
-0
CppunitTest_dbaccess_embeddeddb_performancetest.mk
dbaccess/CppunitTest_dbaccess_embeddeddb_performancetest.mk
+81
-0
Module_dbaccess.mk
dbaccess/Module_dbaccess.mk
+10
-0
embeddeddb_performancetest.cxx
dbaccess/qa/unit/embeddeddb_performancetest.cxx
+274
-0
No files found.
dbaccess/CppunitTest_dbaccess_embeddeddb_performancetest.mk
0 → 100644
Dosyayı görüntüle @
7c87a538
# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
$(eval $(call gb_CppunitTest_CppunitTest,dbaccess_embeddeddb_performancetest))
$(eval $(call gb_CppunitTest_use_external,dbaccess_embeddeddb_performancetest,boost_headers))
$(eval $(call gb_CppunitTest_add_exception_objects,dbaccess_embeddeddb_performancetest, \
dbaccess/qa/unit/embeddeddb_performancetest \
))
$(eval $(call gb_CppunitTest_use_libraries,dbaccess_embeddeddb_performancetest, \
comphelper \
cppu \
cppuhelper \
dbaxml \
dbtools \
firebird_sdbc \
jvmfwk \
sal \
subsequenttest \
utl \
test \
tk \
tl \
unotest \
xo \
$(gb_UWINAPI) \
))
$(eval $(call gb_CppunitTest_use_api,dbaccess_embeddeddb_performancetest,\
offapi \
oovbaapi \
udkapi \
))
$(eval $(call gb_CppunitTest_use_ure,dbaccess_embeddeddb_performancetest))
$(eval $(call gb_CppunitTest_use_components,dbaccess_embeddeddb_performancetest,\
basic/util/sb \
comphelper/util/comphelp \
configmgr/source/configmgr \
connectivity/source/cpool/dbpool2 \
connectivity/source/drivers/firebird/firebird_sdbc \
connectivity/source/drivers/hsqldb/hsqldb \
connectivity/source/drivers/jdbc/jdbc \
connectivity/source/manager/sdbc2 \
dbaccess/util/dba \
dbaccess/source/filter/xml/dbaxml \
dbaccess/util/dbu \
fileaccess/source/fileacc \
filter/source/config/cache/filterconfig1 \
framework/util/fwk \
i18npool/util/i18npool \
linguistic/source/lng \
package/source/xstor/xstor \
package/util/package2 \
sax/source/expatwrap/expwrap \
sfx2/util/sfx \
svl/source/fsstor/fsstorage \
svl/util/svl \
toolkit/util/tk \
ucb/source/core/ucb1 \
ucb/source/ucp/file/ucpfile1 \
unotools/util/utl \
xmloff/util/xo \
))
$(eval $(call gb_CppunitTest_use_configuration,dbaccess_embeddeddb_performancetest))
$(eval $(call gb_CppunitTest_use_filter_configuration,dbaccess_embeddeddb_performancetest))
$(eval $(call gb_CppunitTest_use_unittest_configuration,dbaccess_embeddeddb_performancetest))
# vim: set noet sw=4 ts=4:
dbaccess/Module_dbaccess.mk
Dosyayı görüntüle @
7c87a538
...
...
@@ -47,6 +47,16 @@ $(eval $(call gb_Module_add_check_targets,dbaccess,\
))
endif
# This runs a suite of peformance tests on embedded firebird and HSQLDB.
# Instructions on running the test can be found in qa/unit/embeddedb_performancetest
ifeq ($(ENABLE_FIREBIRD_SDBC),TRUE)
ifeq ($(ENABLE_JAVA),TRUE)
$(eval $(call gb_Module_add_check_targets,dbaccess,\
CppunitTest_dbaccess_embeddeddb_performancetest \
))
endif
endif
# disable test because it still fails in some situations
# CppunitTest_dbaccess_macros_test \
#
...
...
dbaccess/qa/unit/embeddeddb_performancetest.cxx
0 → 100644
Dosyayı görüntüle @
7c87a538
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include "dbtest_base.cxx"
#include <boost/scoped_ptr.hpp>
#include <osl/file.hxx>
#include <osl/process.h>
#include <osl/time.h>
#include <rtl/ustrbuf.hxx>
#include <tools/stream.hxx>
#include <com/sun/star/sdb/XOfficeDatabaseDocument.hpp>
#include <com/sun/star/sdbc/XColumnLocate.hpp>
#include <com/sun/star/sdbc/XConnection.hpp>
#include <com/sun/star/sdbc/XParameters.hpp>
#include <com/sun/star/sdbc/XPreparedStatement.hpp>
#include <com/sun/star/sdbc/XResultSet.hpp>
#include <com/sun/star/sdbc/XRow.hpp>
#include <com/sun/star/sdbc/XStatement.hpp>
using
namespace
::
com
::
sun
::
star
;
using
namespace
::
com
::
sun
::
star
::
sdb
;
using
namespace
::
com
::
sun
::
star
::
sdbc
;
using
namespace
::
com
::
sun
::
star
::
uno
;
void
normaliseTimeValue
(
TimeValue
*
pVal
)
{
pVal
->
Seconds
+=
pVal
->
Nanosec
/
1000000000
;
pVal
->
Nanosec
%=
1000000000
;
}
void
getTimeDifference
(
const
TimeValue
*
pTimeStart
,
const
TimeValue
*
pTimeEnd
,
TimeValue
*
pTimeDifference
)
{
// We add 1 second to the nanoseconds to ensure that we get a positive number
// We have to normalise anyway so this doesn't cause any harm.
// (Seconds/Nanosec are both unsigned)
pTimeDifference
->
Seconds
=
pTimeEnd
->
Seconds
-
pTimeStart
->
Seconds
-
1
;
pTimeDifference
->
Nanosec
=
1000000000
+
pTimeEnd
->
Nanosec
-
pTimeStart
->
Nanosec
;
normaliseTimeValue
(
pTimeDifference
);
}
OUString
getPrintableTimeValue
(
const
TimeValue
*
pTimeValue
)
{
return
OUString
::
number
(
(
sal_uInt64
(
pTimeValue
->
Seconds
)
*
SAL_CONST_UINT64
(
1000000000
)
+
sal_uInt64
(
pTimeValue
->
Nanosec
))
/
1000000
);
}
/*
* The reccomended way to run this test is:
* 'SAL_LOG="" DBA_PERFTEST=YES make CppunitTest_dbaccess_embeddeddb_performancetest'
* This blocks the unnecessary exception output and show only the performance data.
*
* You also need to create the file dbacess/qa/unit/data/wordlist, one easy way
* of generating a list is using 'aspell dump master > dbacess/qa/unit/data/wordlist'
*
* Note that wordlist cannot have more than 220580 lines, this is due to a hard
* limit in our hsqldb version.
*
* Also note that this unit test "fails" when doing performance testing, this is
* since by default unit test output is hidden, and thus there is no way of
* reading the results.
*/
class
EmbeddedDBPerformanceTest
:
public
DBTestBase
{
private
:
const
static
OUString
our_sEnableTestEnvVar
;
// We store the results and print them at the end due to the amount of warning
// noise present which otherwise obscures the results.
OUStringBuffer
m_aOutputBuffer
;
void
printTimes
(
const
TimeValue
*
pTime1
,
const
TimeValue
*
pTime2
,
const
TimeValue
*
pTime3
);
void
doPerformanceTestOnODB
(
const
OUString
&
rFileName
,
const
OUString
&
rDBName
);
void
testFirebird
();
void
testHSQLDB
();
public
:
void
testPerformance
();
CPPUNIT_TEST_SUITE
(
EmbeddedDBPerformanceTest
);
CPPUNIT_TEST
(
testPerformance
);
CPPUNIT_TEST_SUITE_END
();
};
void
EmbeddedDBPerformanceTest
::
printTimes
(
const
TimeValue
*
pTime1
,
const
TimeValue
*
pTime2
,
const
TimeValue
*
pTime3
)
{
m_aOutputBuffer
.
append
(
getPrintableTimeValue
(
pTime1
)
+
"
\t
"
+
getPrintableTimeValue
(
pTime2
)
+
"
\t
"
+
getPrintableTimeValue
(
pTime3
)
+
"
\t
"
"
\n
"
);
}
const
OUString
EmbeddedDBPerformanceTest
::
our_sEnableTestEnvVar
(
"DBA_PERFTEST"
);
// TODO: we probably should create a document from scratch instead?
void
EmbeddedDBPerformanceTest
::
testPerformance
()
{
OUString
sEnabled
;
osl_getEnvironment
(
our_sEnableTestEnvVar
.
pData
,
&
sEnabled
.
pData
);
if
(
sEnabled
.
isEmpty
())
return
;
m_aOutputBuffer
.
append
(
"---------------------
\n
"
);
testFirebird
();
m_aOutputBuffer
.
append
(
"---------------------
\n
"
);
testHSQLDB
();
m_aOutputBuffer
.
append
(
"---------------------
\n
"
);
fprintf
(
stdout
,
"Performance Test Results:
\n
"
);
fprintf
(
stdout
,
"%s"
,
OUStringToOString
(
m_aOutputBuffer
.
makeStringAndClear
(),
RTL_TEXTENCODING_UTF8
)
.
getStr
()
);
// We want the results printed, but unit test output is only printed on failure
// Hence we deliberately fail the test.
CPPUNIT_ASSERT
(
false
);
}
void
EmbeddedDBPerformanceTest
::
testFirebird
()
{
doPerformanceTestOnODB
(
"firebird_empty.odb"
,
"Firebird"
);
}
void
EmbeddedDBPerformanceTest
::
testHSQLDB
()
{
doPerformanceTestOnODB
(
"hsqldb_empty.odb"
,
"HSQLDB"
);
}
/**
* Use an existing .odb to do performance tests on. The database cannot have
* a table of the name PFTESTTABLE.
*/
void
EmbeddedDBPerformanceTest
::
doPerformanceTestOnODB
(
const
OUString
&
rFileName
,
const
OUString
&
rDBName
)
{
uno
::
Reference
<
XOfficeDatabaseDocument
>
xDocument
=
getDocumentForFileName
(
rFileName
);
uno
::
Reference
<
XConnection
>
xConnection
=
getConnectionForDocument
(
xDocument
);
// Create Table
{
uno
::
Reference
<
XStatement
>
xStatement
=
xConnection
->
createStatement
();
CPPUNIT_ASSERT
(
xStatement
.
is
());
// Although not strictly necessary we use quoted identifiers to reflect
// the fact that Base always uses quoted identifiers.
xStatement
->
execute
(
"CREATE TABLE
\"
PFTESTTABLE
\"
(
\"
ID
\"
INTEGER NOT NULL PRIMARY KEY "
",
\"
STRINGCOLUMNA
\"
VARCHAR (50) "
// ", \"STRINGCOLUMNB\" VARCHAR (50) "
// ", \"STRINGCOLUMNC\" VARCHAR (50) "
// ", \"STRINGCOLUMND\" VARCHAR (50) "
")"
);
xConnection
->
commit
();
}
// Writing test
{
uno
::
Reference
<
XPreparedStatement
>
xPreparedStatement
=
xConnection
->
prepareStatement
(
"INSERT INTO
\"
PFTESTTABLE
\"
(
\"
ID
\"
, "
"
\"
STRINGCOLUMNA
\"
"
// ", \"STRINGCOLUMNB\" "
// ", \"STRINGCOLUMNC\" "
// ", \"STRINGCOLUMND\" "
") VALUES ( ?, ?"
// ", ?, ?, ? "
")"
);
uno
::
Reference
<
XParameters
>
xParameters
(
xPreparedStatement
,
UNO_QUERY_THROW
);
::
boost
::
scoped_ptr
<
SvFileStream
>
pFile
(
new
SvFileStream
(
getSrcRootURL
()
+
our_sFilePath
+
"wordlist"
,
STREAM_READ
));
if
(
!
pFile
)
{
fprintf
(
stderr
,
"Please ensure the wordlist is present
\n
"
);
CPPUNIT_ASSERT
(
false
);
}
OUString
aWord
;
sal_Int32
aID
=
0
;
TimeValue
aStart
,
aMiddle
,
aEnd
;
osl_getSystemTime
(
&
aStart
);
while
(
pFile
->
ReadByteStringLine
(
aWord
,
RTL_TEXTENCODING_UTF8
))
{
xParameters
->
setInt
(
1
,
aID
++
);
xParameters
->
setString
(
2
,
aWord
);
// xParameters->setString(3, aWord);
// xParameters->setString(4, aWord);
// xParameters->setString(5, aWord);
xPreparedStatement
->
execute
();
}
osl_getSystemTime
(
&
aMiddle
);
xConnection
->
commit
();
osl_getSystemTime
(
&
aEnd
);
TimeValue
aTimeInsert
,
aTimeCommit
,
aTimeTotal
;
getTimeDifference
(
&
aStart
,
&
aMiddle
,
&
aTimeInsert
);
getTimeDifference
(
&
aMiddle
,
&
aEnd
,
&
aTimeCommit
);
getTimeDifference
(
&
aStart
,
&
aEnd
,
&
aTimeTotal
);
m_aOutputBuffer
.
append
(
"Write to: "
+
rDBName
+
"
\n
"
);
printTimes
(
&
aTimeInsert
,
&
aTimeCommit
,
&
aTimeTotal
);
pFile
->
Close
();
}
// Read test
{
uno
::
Reference
<
XStatement
>
xStatement
=
xConnection
->
createStatement
();
TimeValue
aStart
,
aMiddle
,
aEnd
;
osl_getSystemTime
(
&
aStart
);
uno
::
Reference
<
XResultSet
>
xResults
=
xStatement
->
executeQuery
(
"SELECT * FROM PFTESTTABLE"
);
osl_getSystemTime
(
&
aMiddle
);
uno
::
Reference
<
XRow
>
xRow
(
xResults
,
UNO_QUERY_THROW
);
while
(
xResults
->
next
())
{
xRow
->
getString
(
2
);
// xRow->getString(3);
// xRow->getString(4);
// xRow->getString(5);
}
osl_getSystemTime
(
&
aEnd
);
TimeValue
aTimeSelect
,
aTimeIterate
,
aTimeTotal
;
getTimeDifference
(
&
aStart
,
&
aMiddle
,
&
aTimeSelect
);
getTimeDifference
(
&
aMiddle
,
&
aEnd
,
&
aTimeIterate
);
getTimeDifference
(
&
aStart
,
&
aEnd
,
&
aTimeTotal
);
m_aOutputBuffer
.
append
(
"Read from: "
+
rDBName
+
"
\n
"
);
printTimes
(
&
aTimeSelect
,
&
aTimeIterate
,
&
aTimeTotal
);
}
}
CPPUNIT_TEST_SUITE_REGISTRATION
(
EmbeddedDBPerformanceTest
);
CPPUNIT_PLUGIN_IMPLEMENT
();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment