xref: /aoo4110/main/sal/qa/rtl/logfile/rtl_logfile.cxx (revision b1cdbd2c)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 
25 // MARKER(update_precomp.py): autogen include statement, do not remove
26 #include "precompiled_sal.hxx"
27 // LLA:
28 // this file is converted to use with testshl2
29 // original was placed in sal/test/textenc.cxx
30 
31 
32 // -----------------------------------------------------------------------------
33 #include <stdio.h>
34 #include <stdlib.h>
35 #include <string.h>
36 
37 #if defined(UNX) || defined(OS2)
38 #       include <unistd.h>
39 #endif
40 
41 #include <rtl/logfile.hxx>
42 #include <testshl/simpleheader.hxx>
43 
44 // #ifndef      _OSL_MODULE_HXX_
45 // #include <osl/module.hxx>
46 // #endif
47 #include <osl/file.hxx>
48 #if ( defined WNT )                     // Windows
49 #include <tools/prewin.h>
50 // #define UNICODE
51 // #define WIN32_LEAN_AND_MEAN
52 // #include <windows.h>
53 #include <tchar.h>
54 #include <tools/postwin.h>
55 #endif
56 
57 using namespace ::osl;
58 
printUString(const::rtl::OUString & str,const sal_Char * msg="")59 inline void printUString( const ::rtl::OUString & str, const sal_Char * msg = "" )
60 {
61 
62     if (strlen(msg) > 0)
63     {
64         t_print("%s: ", msg );
65     }
66     rtl::OString aString;
67     aString = ::rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US );
68     t_print("%s\n", (char *)aString.getStr( ) );
69 }
70 
71 /** get the absolute source file URL "file:///.../sal/qa/rtl/logfile/"
72   */
73 
getTempPath(void)74 inline ::rtl::OUString getTempPath( void )
75 {
76 #ifdef UNX
77     rtl::OUString suDirURL(rtl::OUString::createFromAscii("file:///tmp/"));
78 #else /* Windows */
79     rtl::OUString suDirURL(rtl::OUString::createFromAscii("file:///c:/temp/"));
80 #endif
81     return suDirURL;
82 }
83 
84 /** if the file exist
85  */
t_fileExist(rtl::OUString const & _sFilename)86 bool t_fileExist(rtl::OUString const& _sFilename)
87 {
88     ::osl::FileBase::RC   nError1;
89     ::osl::File aTestFile( _sFilename );
90     nError1 = aTestFile.open ( OpenFlag_Read );
91     if ( ( ::osl::FileBase::E_NOENT != nError1 ) && ( ::osl::FileBase::E_ACCES != nError1 ) )
92     {
93         aTestFile.close( );
94         return true;
95     }
96     return false;
97 }
98 /** get Current PID.
99 */
getCurrentPID()100 inline ::rtl::OUString getCurrentPID(  )
101 {
102         //~ Get current PID and turn it into OUString;
103         int nPID = 0;
104 #ifdef WNT
105         nPID = GetCurrentProcessId();
106 #else
107         nPID = getpid();
108 #endif
109         return ( ::rtl::OUString::valueOf( ( long )nPID ) );
110 }
111 
112 
113 // -----------------------------------------------------------------------------
114 /*
115  * LLA:
116  * check if logfile is create
117  * be careful with relative logfiles they will create near the source, maybe it's no write access to it.
118  * use absolute path to logfile instead.
119  */
120 namespace rtl_logfile
121 {
122     class logfile : public CppUnit::TestFixture
123     {
124     public:
125 
126         //directly call rtl_logfile_trace
logfile_001()127         void logfile_001()
128         {
129 #ifdef SOLARIS
130                 putenv(const_cast< char * >("RTL_LOGFILE=/tmp/logfile1"));
131 #endif
132 #ifdef WNT
133                 putenv("RTL_LOGFILE=c:\\temp\\logfile1");
134 #endif
135 #ifdef LINUX
136                 setenv("RTL_LOGFILE", "/tmp/logfile1", 0);
137 #endif
138                 rtl_logfile_trace("trace %d\n", 2 );
139                 rtl_logfile_trace("trace %d %d\n" , 1,2 );
140                 rtl_logfile_trace("trace %d %d %d\n" , 1 , 2 ,3 );
141 
142                 rtl::OUString suFilePath = getTempPath();
143                 suFilePath +=  rtl::OUString::createFromAscii("logfile1_") + getCurrentPID( );
144                 suFilePath +=  rtl::OUString::createFromAscii(".log");
145 
146                 ::osl::FileBase::RC   nError1;
147                 ::osl::File aTestFile( suFilePath );
148                 printUString( suFilePath );
149                 nError1 = aTestFile.open ( OpenFlag_Read );
150                 CPPUNIT_ASSERT_MESSAGE("create the log file: but the logfile does not exist",
151                                        ( ::osl::FileBase::E_NOENT != nError1 ) &&
152                                        ( ::osl::FileBase::E_ACCES != nError1 ) );
153                 sal_Char       buffer_read[400];
154                 sal_uInt64      nCount_read;
155                 nError1 = aTestFile.read( buffer_read, 400, nCount_read );
156                 //t_print("buffer is %s\n", buffer_read );
157                 CPPUNIT_ASSERT_MESSAGE("write right logs", strstr( buffer_read, "trace 1 2 3") != NULL );
158                 aTestFile.sync();
159                 aTestFile.close();
160                 /*// delete logfile on the disk
161 
162                 nError1 = osl::File::remove( suFilePath );
163                 printError( nError1 );
164                 CPPUNIT_ASSERT_MESSAGE( "In deleteTestFile Function: remove ", ( ::osl::FileBase::E_None == nError1 ) || ( nError1 == ::osl::FileBase::E_NOENT ) );
165                 */
166         }
167         //Profiling output should only be generated for a special product version of OpenOffice
168         // which is compiled with a defined preprocessor symbol 'TIMELOG'. Now, the symbol not defined
logfile_002()169         void logfile_002()
170             {
171 #ifdef SOLARIS
172                 putenv(const_cast< char * >("RTL_LOGFILE=/tmp/logfile2"));
173 #endif
174 #ifdef WNT
175                 putenv("RTL_LOGFILE=c:\\temp\\logfile2");
176 #endif
177 #ifdef LINUX
178                 setenv("RTL_LOGFILE", "/tmp/logfile2", 0);
179 #endif
180                 RTL_LOGFILE_TRACE( "trace the log" );
181                 RTL_LOGFILE_TRACE1( "trace %d" , 1 );
182                 RTL_LOGFILE_TRACE2( "trace %d %d" , 1,2 );
183                 RTL_LOGFILE_TRACE3( "trace %d %d %d" , 1 , 2 ,3 );
184 // TODO: assertion test!
185         }
186 
logfile_003()187         void logfile_003()
188             {
189 #ifdef SOLARIS
190                 putenv(const_cast< char * >("RTL_LOGFILE=/tmp/logfile2"));
191 #endif
192 #ifdef WNT
193                 putenv("RTL_LOGFILE=c:\\temp\\logfile2");
194 #endif
195 #ifdef LINUX
196                 setenv("RTL_LOGFILE", "/tmp/logfile2", 0);
197 #endif
198                 RTL_LOGFILE_CONTEXT ( foo , "foo-function" );
199                 RTL_LOGFILE_CONTEXT_TRACE ( foo , "trace" );
200                 RTL_LOGFILE_CONTEXT_TRACE1 ( foo , "trace %d" , 1 );
201                 RTL_LOGFILE_CONTEXT_TRACE2 ( foo , "trace %d %d" , 1 , 2 );
202                 RTL_LOGFILE_CONTEXT_TRACE3 ( foo , "trace %d %d %d" , 1 , 2 , 3);
203 // TODO: assertion test!
204             }
205 
206 
207         CPPUNIT_TEST_SUITE( logfile );
208         CPPUNIT_TEST( logfile_001 );
209         CPPUNIT_TEST( logfile_002 );
210         CPPUNIT_TEST( logfile_003 );
211         CPPUNIT_TEST_SUITE_END( );
212     };
213 
214 } // namespace rtl_logfile
215 
216 // -----------------------------------------------------------------------------
217 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( rtl_logfile::logfile, "rtl_logfile" );
218 
219 // -----------------------------------------------------------------------------
220 NOADDITIONAL;
221 
222 //~ do some clean up work after all test completed.
223 class GlobalObject
224 {
225 public:
~GlobalObject()226     ~GlobalObject()
227         {
228             try
229             {
230                 t_print( "\n#Do some clean-ups ... only delete logfile1_*.log here!\n" );
231                 rtl::OUString suFilePath = getTempPath();
232                 suFilePath +=  rtl::OUString::createFromAscii("logfile1_") + getCurrentPID( );
233                 suFilePath +=  rtl::OUString::createFromAscii(".log");
234 
235                 //if ( ifFileExist( suFilePath )  == sal_True )
236                 ::osl::FileBase::RC nError1;
237                 nError1 = osl::File::remove( suFilePath );
238 #ifdef WNT
239                 t_print("Please remove logfile* manully! Error is Permision denied!");
240 #endif
241             }
242             catch (CppUnit::Exception &e)
243             {
244                 t_print("Exception caught in GlobalObject dtor(). Exception message: '%s'. Source line: %d\n", e.what(), e.sourceLine().lineNumber());
245             }
246             catch (...)
247             {
248                 t_print("Exception caught (...) in GlobalObject dtor()\n");
249             }
250         }
251 };
252 
253 GlobalObject theGlobalObject;
254 
255 
256 
257