summaryrefslogtreecommitdiff
path: root/configmgr/qa
diff options
context:
space:
mode:
authorIvo Hinkelmann <ihi@openoffice.org>2007-11-23 12:58:34 +0000
committerIvo Hinkelmann <ihi@openoffice.org>2007-11-23 12:58:34 +0000
commit479a445162a492893a21941bd8786cdea5a8ec05 (patch)
tree786e1f2e9d394786f0f8f6e4e392841ad281452a /configmgr/qa
parent54b882248d04d95d7e957bb745a3df574c9c74d1 (diff)
INTEGRATION: CWS configrefactor01 (1.1.2); FILE ADDED
2007/10/12 16:56:50 mmeeks 1.1.2.12: Issue number: i#82311# Submitted by: mmeeks Split out bootstrapping piece, add cross-platform /tmp/ directory creation, Fix cross-thread locking issues during notification, remove some printfs. 2007/10/11 16:14:07 mmeeks 1.1.2.11: Issue number: i#82311# Submitted by: mmeeks Add threaded unit tests, fix locking issues in apitreeimplobj.cxx Add UnoApiLockClearable, and UnoApiLockReleaser (prolly needed for the next tests) 2007/10/10 12:46:40 mmeeks 1.1.2.10: Issue number: i#82311# Submitted by: mmeeks add missing UnoApiLock on dispose, and clean unit test. 2007/10/10 11:43:24 mmeeks 1.1.2.9: Issue number: i#82311# Submitted by: mmeeks add performance unit test - dump time taken, and time-stamps etc. 2007/10/10 11:06:16 mmeeks 1.1.2.8: Issue number: i#82311# Submitted by: mmeeks Remove some fprintf clutter, add files, adjust configuration so we actually read the data, add a new performance test based on the framework access pattern. 2007/10/10 09:42:32 mmeeks 1.1.2.7: Issue number: i#82311# Submitted by: mmeeks 3 unit tests now working & (old) locking snafu fixed 2007/10/08 16:35:39 mmeeks 1.1.2.6: Issue number: i#82311# Submitted by: mmeeks More work on unit tests - now set / get keys works (not just bootstrapping) 2007/10/05 15:39:23 mmeeks 1.1.2.5: Issue number: i#82311 Submitted by: mmeeks Start of regression test framework - test actually boostraps configmgr & passes ... 2007/10/05 14:14:04 mmeeks 1.1.2.4: Issue number: i#82311 Submitted by: mmeeks Reviewed by: mmeeks Cleanups from patch re-review. Improvements to unit-testing framework. 2007/02/08 12:44:56 sb 1.1.2.3: Not yet working unit testing framework. 2007/02/07 12:20:20 sb 1.1.2.2: Made code warning free (unxsoli4.pro). 2007/02/05 15:21:45 mmeeks 1.1.2.1: Submitted by: mmeeks Reduce memory usage for 'subtree' further ~250k or so, start of unit tests.
Diffstat (limited to 'configmgr/qa')
-rw-r--r--configmgr/qa/unit/performance.cxx278
1 files changed, 278 insertions, 0 deletions
diff --git a/configmgr/qa/unit/performance.cxx b/configmgr/qa/unit/performance.cxx
new file mode 100644
index 000000000000..b09a7dafcfcd
--- /dev/null
+++ b/configmgr/qa/unit/performance.cxx
@@ -0,0 +1,278 @@
+// To debug me use:
+// $ export ENVCFGFLAGS='-me -ti -tw -tp -td'
+
+/*************************************************************************
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: performance.cxx,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * last change: $Author: ihi $ $Date: 2007-11-23 13:58:34 $
+ *
+ * The Contents of this file are made available subject to
+ * the terms of GNU Lesser General Public License Version 2.1.
+ *
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2007 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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 for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ ************************************************************************/
+
+#include "common.hxx"
+
+using namespace css;
+
+void Test::setUp()
+{
+ mpMagic = new Magic();
+
+ char const * f = getForwardString();
+ rtl::OUString args(
+ f, rtl_str_getLength(f), osl_getThreadTextEncoding());
+ //TODO: handle conversion failure
+ sal_Int32 i = args.indexOf('#');
+ if (i < 0)
+ std::abort();
+
+ rtl::OUString rdb(args.copy(0, i));
+ rtl::OUString regpath(args.copy(i + 1));
+ rtl::OUString regurl;
+ if (osl::FileBase::getFileURLFromSystemPath(regpath, regurl) !=
+ osl::FileBase::E_None)
+ std::abort();
+
+ css::uno::Reference< css::beans::XPropertySet > factory(
+ cppu::createRegistryServiceFactory(rdb), css::uno::UNO_QUERY_THROW);
+ css::uno::Reference< css::uno::XComponentContext > context(
+ factory->getPropertyValue(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultContext"))),
+ css::uno::UNO_QUERY_THROW);
+ cppu::ContextEntry_Init entry(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "/modules/com.sun.star.configuration/bootstrap/Strata")),
+ css::uno::makeAny(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.comp.configuration.backend.LocalStratum:"))
+ + regurl));
+ mxContext = cppu::createComponentContext(&entry, 1, context);
+
+ CPPUNIT_ASSERT_MESSAGE ("component context is valid", mxContext.is());
+
+ try {
+ mxProvider = css::uno::Reference< css::lang::XMultiServiceFactory >(
+ (css::uno::Reference< css::lang::XMultiComponentFactory >(
+ mxContext->getServiceManager(), css::uno::UNO_QUERY_THROW)->
+ createInstanceWithContext(
+ rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.configuration.ConfigurationProvider")),
+ mxContext)),
+ css::uno::UNO_QUERY_THROW);
+
+ } catch (css::uno::Exception&e) {
+ CPPUNIT_FAIL( "exception creating provider" );
+ throw;
+ }
+}
+
+css::uno::Reference< css::uno::XInterface >
+Test::createView(const sal_Char *pNodepath, bool bUpdate)
+{
+ rtl::OUString aNodePath = rtl::OUString::createFromAscii(pNodepath);
+ static const rtl::OUString kInfoViewService(
+ RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.ConfigurationAccess")) ;
+ static const rtl::OUString kUpdateViewService(
+ RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.ConfigurationUpdateAccess")) ;
+ static const rtl::OUString kNodepath(RTL_CONSTASCII_USTRINGPARAM("nodepath")) ;
+ static const rtl::OUString kAsync(RTL_CONSTASCII_USTRINGPARAM("EnableAsync")) ;
+
+ const rtl::OUString & kViewService = bUpdate ? kUpdateViewService : kInfoViewService;
+ css::uno::Sequence< css::uno::Any > aViewArgs(2);
+ aViewArgs[0] <<= css::beans::NamedValue( kNodepath, css::uno::makeAny(aNodePath) );
+ aViewArgs[1] <<= css::beans::NamedValue( kAsync, css::uno::makeAny(sal_False) );
+
+ css::uno::Reference< css::uno::XInterface > xView(
+ mxProvider->createInstanceWithArguments( kViewService, aViewArgs ) );
+ return xView;
+}
+
+void disposeComponent (const css::uno::Reference<css::uno::XInterface> &xComp)
+{
+ css::uno::Reference< css::lang::XComponent >(
+ xComp, css::uno::UNO_QUERY_THROW)->dispose();
+}
+
+void Test::tearDown()
+{
+ disposeComponent (mxProvider);
+ disposeComponent (mxContext);
+
+ delete mpMagic;
+}
+
+void Test::normalizePathKey (rtl::OString &rPath, rtl::OString &rKey)
+{
+ sal_Int32 idx = rKey.lastIndexOf("/");
+ if (idx > 0) {
+ rPath += "/";
+ rPath += rKey.copy (0, idx);
+ rKey = rKey.copy (idx + 1);
+// t_print ("write to '%s' '%s'\n", (const sal_Char *)rPath,
+// (const sal_Char *)rKey);
+ }
+}
+
+uno::Any Test::getKey (const sal_Char *pPath, rtl::OUString aName)
+{
+ uno::Reference< container::XHierarchicalNameAccess > xNameAccess(
+ createView(pPath, false), css::uno::UNO_QUERY_THROW);
+ uno::Any aVal;
+ aVal = xNameAccess->getByHierarchicalName (aName);
+ disposeComponent (xNameAccess);
+ return aVal;
+}
+
+void Test::setKey (const sal_Char *pPath, rtl::OUString aName, css::uno::Any a)
+{
+ uno::Reference< util::XChangesBatch > xAppView;
+
+ xAppView = uno::Reference< util::XChangesBatch > (
+ createView(pPath, true), uno::UNO_QUERY_THROW );
+ uno::Reference< container::XNameReplace > xSettings(xAppView, uno::UNO_QUERY_THROW);
+ rtl::OUString aStr;
+
+ // set key
+ xSettings->replaceByName(aName, a);
+ xAppView->commitChanges();
+
+ disposeComponent(xAppView);
+}
+
+void Test::resetKey (const sal_Char *pPath, rtl::OUString aName)
+{
+ uno::Reference< util::XChangesBatch > xAppView;
+
+ // reset to default
+ xAppView = uno::Reference< util::XChangesBatch > ( createView(pPath, true), uno::UNO_QUERY_THROW );
+ uno::Reference< container::XNameReplace > xSettings(xAppView, uno::UNO_QUERY_THROW);
+
+ uno::Reference< beans::XPropertyState > xSettingsState(xSettings, uno::UNO_QUERY);
+ xSettingsState->setPropertyToDefault(aName);
+ xAppView->commitChanges();
+
+ disposeComponent(xAppView);
+}
+
+void Test::keyFetch()
+{
+ try {
+ rtl::OUString aStr;
+ if (!(getKey ("/org.openoffice.Setup", "L10N/ooLocale") >>= aStr))
+ CPPUNIT_FAIL("to fetch key");
+ if (!(getKey ("/org.openoffice.Setup", "Test/AString") >>= aStr))
+ CPPUNIT_FAIL("to fetch key");
+ } CATCH_FAIL ("fetching key")
+}
+
+void Test::keySet()
+{
+ try {
+ setKey ("/org.openoffice.Setup/Test",
+ rtl::OUString::createFromAscii("AString"),
+ uno::makeAny (rtl::OUString::createFromAscii("baa")));
+
+ // check value
+ rtl::OUString aStr;
+ if (!(getKey ("/org.openoffice.Setup/Test", "AString") >>= aStr))
+ CPPUNIT_FAIL("to fetch key");
+
+ CPPUNIT_ASSERT_MESSAGE ("check set value valid", aStr.equalsAscii("baa"));
+ } CATCH_FAIL ("exception setting keys" )
+}
+
+void Test::keyReset()
+{
+ try {
+ resetKey ("/org.openoffice.Setup/Test",
+ rtl::OUString::createFromAscii("AString"));
+
+ // check value
+ rtl::OUString aStr;
+ if (!(getKey ("/org.openoffice.Setup/Test", "AString") >>= aStr))
+ CPPUNIT_FAIL("to fetch key");
+
+ CPPUNIT_ASSERT_MESSAGE ("check default value valid",
+ aStr == rtl::OUString::createFromAscii("Foo"));
+ } CATCH_FAIL ("exception setting keys" )
+}
+
+// This simulates the framework UI description code paths
+void Test::readCommands()
+{
+ rtl::OUString aPropUILabel( RTL_CONSTASCII_USTRINGPARAM( "Label" ));
+ rtl::OUString aPropUIContextLabel( RTL_CONSTASCII_USTRINGPARAM( "ContextLabel" ));
+ rtl::OUString aPropProperties( RTL_CONSTASCII_USTRINGPARAM( "Properties" ));
+
+ try {
+ uno::Reference< container::XNameAccess > xNameAccess (
+ createView("/org.openoffice.UI.GenericCommands/UserInterface/Commands", false),
+ css::uno::UNO_QUERY_THROW);
+
+ CPPUNIT_ASSERT_MESSAGE ("fetched UI generic commands", xNameAccess.is());
+
+ uno::Any a;
+ uno::Sequence< rtl::OUString > aNameSeq = xNameAccess->getElementNames();
+
+ CPPUNIT_ASSERT_MESSAGE ("right element / sequence", aNameSeq.getLength() == 696);
+ sal_uInt32 end, start = osl_getGlobalTimer();
+ for ( sal_Int32 j = 0; j < 8; j++ )
+ {
+ for ( sal_Int32 i = 0; i < aNameSeq.getLength(); i++ )
+ {
+ try
+ {
+ {
+ uno::Reference< container::XNameAccess > xChildNameAccess;
+ // This is the slow bit ! ...
+ // Creating the @#$@#$ing XNameAccess object [ 650 times ]
+ // which we then use to 'getByName' etc.
+ a = xNameAccess->getByName( aNameSeq[i] );
+ if ( a >>= xChildNameAccess )
+ {
+ a = xChildNameAccess->getByName( aPropUILabel );
+ a = xChildNameAccess->getByName( aPropUIContextLabel );
+ a = xChildNameAccess->getByName( aPropProperties );
+ }
+ }
+ } CATCH_FAIL( "fetching keys" );
+ }
+ }
+ end = osl_getGlobalTimer();
+ t_print ("Reading elements took %d ms\n", (int)(end-start));
+ disposeComponent (xNameAccess);
+ } CATCH_FAIL( "accessing commands" );
+}
+
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(Test, "alltests");
+
+NOADDITIONAL;