summaryrefslogtreecommitdiff
path: root/sal/qa/rtl/logfile/rtl_logfile.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sal/qa/rtl/logfile/rtl_logfile.cxx')
-rw-r--r--sal/qa/rtl/logfile/rtl_logfile.cxx260
1 files changed, 260 insertions, 0 deletions
diff --git a/sal/qa/rtl/logfile/rtl_logfile.cxx b/sal/qa/rtl/logfile/rtl_logfile.cxx
new file mode 100644
index 000000000000..bae6e5c4d3e8
--- /dev/null
+++ b/sal/qa/rtl/logfile/rtl_logfile.cxx
@@ -0,0 +1,260 @@
+/*************************************************************************
+ *
+ * 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_sal.hxx"
+// LLA:
+// this file is converted to use with testshl2
+// original was placed in sal/test/textenc.cxx
+
+
+// -----------------------------------------------------------------------------
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined(UNX) || defined(OS2)
+# include <unistd.h>
+#endif
+
+#include <rtl/logfile.hxx>
+#include <testshl/simpleheader.hxx>
+
+// #ifndef _OSL_MODULE_HXX_
+// #include <osl/module.hxx>
+// #endif
+#include <osl/file.hxx>
+#if ( defined WNT ) // Windows
+#include <tools/prewin.h>
+// #define UNICODE
+// #define WIN32_LEAN_AND_MEAN
+// #include <windows.h>
+#include <tchar.h>
+#include <tools/postwin.h>
+#endif
+
+using namespace ::osl;
+
+inline void printUString( const ::rtl::OUString & str, const sal_Char * msg = "" )
+{
+
+ if (strlen(msg) > 0)
+ {
+ t_print("%s: ", msg );
+ }
+ rtl::OString aString;
+ aString = ::rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US );
+ t_print("%s\n", (char *)aString.getStr( ) );
+}
+
+/** get the absolute source file URL "file:///.../sal/qa/rtl/logfile/"
+ */
+
+inline ::rtl::OUString getTempPath( void )
+{
+#ifdef UNX
+ rtl::OUString suDirURL(rtl::OUString::createFromAscii("file:///tmp/"));
+#else /* Windows */
+ rtl::OUString suDirURL(rtl::OUString::createFromAscii("file:///c:/temp/"));
+#endif
+ return suDirURL;
+}
+
+/** if the file exist
+ */
+bool t_fileExist(rtl::OUString const& _sFilename)
+{
+ ::osl::FileBase::RC nError1;
+ ::osl::File aTestFile( _sFilename );
+ nError1 = aTestFile.open ( OpenFlag_Read );
+ if ( ( ::osl::FileBase::E_NOENT != nError1 ) && ( ::osl::FileBase::E_ACCES != nError1 ) )
+ {
+ aTestFile.close( );
+ return true;
+ }
+ return false;
+}
+/** get Current PID.
+*/
+inline ::rtl::OUString getCurrentPID( )
+{
+ //~ Get current PID and turn it into OUString;
+ int nPID = 0;
+#ifdef WNT
+ nPID = GetCurrentProcessId();
+#else
+ nPID = getpid();
+#endif
+ return ( ::rtl::OUString::valueOf( ( long )nPID ) );
+}
+
+
+// -----------------------------------------------------------------------------
+/*
+ * LLA:
+ * check if logfile is create
+ * be careful with relative logfiles they will create near the source, maybe it's no write access to it.
+ * use absolute path to logfile instead.
+ */
+namespace rtl_logfile
+{
+ class logfile : public CppUnit::TestFixture
+ {
+ public:
+
+ //directly call rtl_logfile_trace
+ void logfile_001()
+ {
+#ifdef SOLARIS
+ putenv(const_cast< char * >("RTL_LOGFILE=/tmp/logfile1"));
+#endif
+#ifdef WNT
+ putenv("RTL_LOGFILE=c:\\temp\\logfile1");
+#endif
+#ifdef LINUX
+ setenv("RTL_LOGFILE", "/tmp/logfile1", 0);
+#endif
+ rtl_logfile_trace("trace %d\n", 2 );
+ rtl_logfile_trace("trace %d %d\n" , 1,2 );
+ rtl_logfile_trace("trace %d %d %d\n" , 1 , 2 ,3 );
+
+ rtl::OUString suFilePath = getTempPath();
+ suFilePath += rtl::OUString::createFromAscii("logfile1_") + getCurrentPID( );
+ suFilePath += rtl::OUString::createFromAscii(".log");
+
+ ::osl::FileBase::RC nError1;
+ ::osl::File aTestFile( suFilePath );
+ printUString( suFilePath );
+ nError1 = aTestFile.open ( OpenFlag_Read );
+ CPPUNIT_ASSERT_MESSAGE("create the log file: but the logfile does not exist",
+ ( ::osl::FileBase::E_NOENT != nError1 ) &&
+ ( ::osl::FileBase::E_ACCES != nError1 ) );
+ sal_Char buffer_read[400];
+ sal_uInt64 nCount_read;
+ nError1 = aTestFile.read( buffer_read, 400, nCount_read );
+ //t_print("buffer is %s\n", buffer_read );
+ CPPUNIT_ASSERT_MESSAGE("write right logs", strstr( buffer_read, "trace 1 2 3") != NULL );
+ aTestFile.sync();
+ aTestFile.close();
+ /*// delete logfile on the disk
+
+ nError1 = osl::File::remove( suFilePath );
+ printError( nError1 );
+ CPPUNIT_ASSERT_MESSAGE( "In deleteTestFile Function: remove ", ( ::osl::FileBase::E_None == nError1 ) || ( nError1 == ::osl::FileBase::E_NOENT ) );
+ */
+ }
+ //Profiling output should only be generated for a special product version of OpenOffice
+ // which is compiled with a defined preprocessor symbol 'TIMELOG'. Now, the symbol not defined
+ void logfile_002()
+ {
+#ifdef SOLARIS
+ putenv(const_cast< char * >("RTL_LOGFILE=/tmp/logfile2"));
+#endif
+#ifdef WNT
+ putenv("RTL_LOGFILE=c:\\temp\\logfile2");
+#endif
+#ifdef LINUX
+ setenv("RTL_LOGFILE", "/tmp/logfile2", 0);
+#endif
+ RTL_LOGFILE_TRACE( "trace the log" );
+ RTL_LOGFILE_TRACE1( "trace %d" , 1 );
+ RTL_LOGFILE_TRACE2( "trace %d %d" , 1,2 );
+ RTL_LOGFILE_TRACE3( "trace %d %d %d" , 1 , 2 ,3 );
+// TODO: assertion test!
+ }
+
+ void logfile_003()
+ {
+#ifdef SOLARIS
+ putenv(const_cast< char * >("RTL_LOGFILE=/tmp/logfile2"));
+#endif
+#ifdef WNT
+ putenv("RTL_LOGFILE=c:\\temp\\logfile2");
+#endif
+#ifdef LINUX
+ setenv("RTL_LOGFILE", "/tmp/logfile2", 0);
+#endif
+ RTL_LOGFILE_CONTEXT ( foo , "foo-function" );
+ RTL_LOGFILE_CONTEXT_TRACE ( foo , "trace" );
+ RTL_LOGFILE_CONTEXT_TRACE1 ( foo , "trace %d" , 1 );
+ RTL_LOGFILE_CONTEXT_TRACE2 ( foo , "trace %d %d" , 1 , 2 );
+ RTL_LOGFILE_CONTEXT_TRACE3 ( foo , "trace %d %d %d" , 1 , 2 , 3);
+// TODO: assertion test!
+ }
+
+
+ CPPUNIT_TEST_SUITE( logfile );
+ CPPUNIT_TEST( logfile_001 );
+ CPPUNIT_TEST( logfile_002 );
+ CPPUNIT_TEST( logfile_003 );
+ CPPUNIT_TEST_SUITE_END( );
+ };
+
+} // namespace rtl_logfile
+
+// -----------------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( rtl_logfile::logfile, "rtl_logfile" );
+
+// -----------------------------------------------------------------------------
+NOADDITIONAL;
+
+//~ do some clean up work after all test completed.
+class GlobalObject
+{
+public:
+ ~GlobalObject()
+ {
+ try
+ {
+ t_print( "\n#Do some clean-ups ... only delete logfile1_*.log here!\n" );
+ rtl::OUString suFilePath = getTempPath();
+ suFilePath += rtl::OUString::createFromAscii("logfile1_") + getCurrentPID( );
+ suFilePath += rtl::OUString::createFromAscii(".log");
+
+ //if ( ifFileExist( suFilePath ) == sal_True )
+ ::osl::FileBase::RC nError1;
+ nError1 = osl::File::remove( suFilePath );
+#ifdef WNT
+ t_print("Please remove logfile* manully! Error is Permision denied!");
+#endif
+ }
+ catch (CppUnit::Exception &e)
+ {
+ t_print("Exception caught in GlobalObject dtor(). Exception message: '%s'. Source line: %d\n", e.what(), e.sourceLine().lineNumber());
+ }
+ catch (...)
+ {
+ t_print("Exception caught (...) in GlobalObject dtor()\n");
+ }
+ }
+};
+
+GlobalObject theGlobalObject;
+
+
+