187d2adbcSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
387d2adbcSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
487d2adbcSAndrew Rist * or more contributor license agreements. See the NOTICE file
587d2adbcSAndrew Rist * distributed with this work for additional information
687d2adbcSAndrew Rist * regarding copyright ownership. The ASF licenses this file
787d2adbcSAndrew Rist * to you under the Apache License, Version 2.0 (the
887d2adbcSAndrew Rist * "License"); you may not use this file except in compliance
987d2adbcSAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
1187d2adbcSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
1387d2adbcSAndrew Rist * Unless required by applicable law or agreed to in writing,
1487d2adbcSAndrew Rist * software distributed under the License is distributed on an
1587d2adbcSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1687d2adbcSAndrew Rist * KIND, either express or implied. See the License for the
1787d2adbcSAndrew Rist * specific language governing permissions and limitations
1887d2adbcSAndrew Rist * under the License.
19cdf0e10cSrcweir *
2087d2adbcSAndrew Rist *************************************************************/
2187d2adbcSAndrew Rist
2287d2adbcSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sal.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir //------------------------------------------------------------------------
28cdf0e10cSrcweir // include files
29cdf0e10cSrcweir //------------------------------------------------------------------------
30cdf0e10cSrcweir
3137e87705SJuergen Schmidt #ifdef WNT
3237e87705SJuergen Schmidt #include <Windows.h>
3337e87705SJuergen Schmidt #endif
3437e87705SJuergen Schmidt
35cdf0e10cSrcweir #include <sal/types.h>
36cdf0e10cSrcweir #include <rtl/ustring.hxx>
37cdf0e10cSrcweir
38cdf0e10cSrcweir #ifndef _OSL_THREAD_HXX
39cdf0e10cSrcweir #include <osl/thread.hxx>
40cdf0e10cSrcweir #endif
41cdf0e10cSrcweir
42cdf0e10cSrcweir #ifndef _OSL_MUTEX_HXX
43cdf0e10cSrcweir #include <osl/mutex.hxx>
44cdf0e10cSrcweir #endif
45cdf0e10cSrcweir
46cdf0e10cSrcweir #ifndef _OSL_MUTEX_HXX
47cdf0e10cSrcweir #include <osl/pipe.hxx>
48cdf0e10cSrcweir #endif
49cdf0e10cSrcweir #include <osl/time.h>
5064293329SJuergen Schmidt #include <osl/process.h>
51cdf0e10cSrcweir
52cdf0e10cSrcweir #ifdef UNX
53cdf0e10cSrcweir #include <unistd.h>
54cdf0e10cSrcweir #endif
55cdf0e10cSrcweir #include <string.h>
56cdf0e10cSrcweir
5764293329SJuergen Schmidt #include "gtest/gtest.h"
5864293329SJuergen Schmidt
59cdf0e10cSrcweir using namespace osl;
60cdf0e10cSrcweir using namespace rtl;
61cdf0e10cSrcweir
62cdf0e10cSrcweir //------------------------------------------------------------------------
63cdf0e10cSrcweir // helper functions
64cdf0e10cSrcweir //------------------------------------------------------------------------
65cdf0e10cSrcweir
6664293329SJuergen Schmidt
6764293329SJuergen Schmidt /** helper function for unique pipe names
6864293329SJuergen Schmidt */
uniquePipeName(OUString const & name)6964293329SJuergen Schmidt OUString uniquePipeName(OUString const & name) {
7064293329SJuergen Schmidt oslProcessInfo info;
7164293329SJuergen Schmidt info.Size = sizeof info;
7264293329SJuergen Schmidt EXPECT_TRUE( osl_Process_E_None == osl_getProcessInfo(0, osl_Process_IDENTIFIER, &info) );
7364293329SJuergen Schmidt return name + OUString::valueOf((sal_Int32)info.Ident);
7464293329SJuergen Schmidt }
7564293329SJuergen Schmidt
76cdf0e10cSrcweir /** print Boolean value.
77cdf0e10cSrcweir */
printBool(sal_Bool bOk)78cdf0e10cSrcweir inline void printBool( sal_Bool bOk )
79cdf0e10cSrcweir {
80cdf0e10cSrcweir printf("#printBool# " );
81cdf0e10cSrcweir ( sal_True == bOk ) ? printf("YES!\n" ): printf("NO!\n" );
82cdf0e10cSrcweir }
83cdf0e10cSrcweir
84cdf0e10cSrcweir /** print a UNI_CODE String.
85cdf0e10cSrcweir */
printUString(const::rtl::OUString & str)86cdf0e10cSrcweir inline void printUString( const ::rtl::OUString & str )
87cdf0e10cSrcweir {
88cdf0e10cSrcweir rtl::OString aString;
89cdf0e10cSrcweir
90cdf0e10cSrcweir printf("#printUString_u# " );
91cdf0e10cSrcweir aString = ::rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US );
92cdf0e10cSrcweir printf("%s\n", aString.getStr( ) );
93cdf0e10cSrcweir }
94cdf0e10cSrcweir
95cdf0e10cSrcweir /** print last error of pipe system.
96cdf0e10cSrcweir */
printPipeError(::osl::Pipe aPipe)97cdf0e10cSrcweir inline void printPipeError( ::osl::Pipe aPipe )
98cdf0e10cSrcweir {
99cdf0e10cSrcweir oslPipeError nError = aPipe.getError( );
100cdf0e10cSrcweir printf("#printPipeError# " );
101cdf0e10cSrcweir switch ( nError ) {
102cdf0e10cSrcweir case osl_Pipe_E_None:
103cdf0e10cSrcweir printf("Success!\n" );
104cdf0e10cSrcweir break;
105cdf0e10cSrcweir case osl_Pipe_E_NotFound:
106cdf0e10cSrcweir printf("The returned error is: Not found!\n" );
107cdf0e10cSrcweir break;
108cdf0e10cSrcweir case osl_Pipe_E_AlreadyExists:
109cdf0e10cSrcweir printf("The returned error is: Already exist!\n" );
110cdf0e10cSrcweir break;
111cdf0e10cSrcweir case osl_Pipe_E_NoProtocol:
112cdf0e10cSrcweir printf("The returned error is: No protocol!\n" );
113cdf0e10cSrcweir break;
114cdf0e10cSrcweir case osl_Pipe_E_NetworkReset:
115cdf0e10cSrcweir printf("The returned error is: Network reset!\n" );
116cdf0e10cSrcweir break;
117cdf0e10cSrcweir case osl_Pipe_E_ConnectionAbort:
118cdf0e10cSrcweir printf("The returned error is: Connection aborted!\n" );
119cdf0e10cSrcweir break;
120cdf0e10cSrcweir case osl_Pipe_E_ConnectionReset:
121cdf0e10cSrcweir printf("The returned error is: Connection reset!\n" );
122cdf0e10cSrcweir break;
123cdf0e10cSrcweir case osl_Pipe_E_NoBufferSpace:
124cdf0e10cSrcweir printf("The returned error is: No buffer space!\n" );
125cdf0e10cSrcweir break;
126cdf0e10cSrcweir case osl_Pipe_E_TimedOut:
127cdf0e10cSrcweir printf("The returned error is: Timeout!\n" );
128cdf0e10cSrcweir break;
129cdf0e10cSrcweir case osl_Pipe_E_ConnectionRefused:
130cdf0e10cSrcweir printf("The returned error is: Connection refused!\n" );
131cdf0e10cSrcweir break;
132cdf0e10cSrcweir case osl_Pipe_E_invalidError:
133cdf0e10cSrcweir printf("The returned error is: Invalid error!\n" );
134cdf0e10cSrcweir break;
135cdf0e10cSrcweir default:
136cdf0e10cSrcweir printf("The returned error is: Number %d, Unknown Error\n", nError );
137cdf0e10cSrcweir break;
138cdf0e10cSrcweir }
139cdf0e10cSrcweir }
140cdf0e10cSrcweir
141cdf0e10cSrcweir
142cdf0e10cSrcweir
143cdf0e10cSrcweir //------------------------------------------------------------------------
144cdf0e10cSrcweir // pipe name and transfer contents
145cdf0e10cSrcweir //------------------------------------------------------------------------
146cdf0e10cSrcweir const rtl::OUString aTestPipeName = rtl::OUString::createFromAscii( "testpipe2" );
147cdf0e10cSrcweir const rtl::OUString aTestPipe1 = rtl::OUString::createFromAscii( "testpipe1" );
14864293329SJuergen Schmidt const rtl::OUString aTestString = rtl::OUString::createFromAscii( "Apache Software Foundation" );
149cdf0e10cSrcweir
15064293329SJuergen Schmidt const OString m_pTestString1("Apache Software Foundation");
151cdf0e10cSrcweir const OString m_pTestString2("test pipe PASS/OK");
152cdf0e10cSrcweir
153cdf0e10cSrcweir //------------------------------------------------------------------------
154cdf0e10cSrcweir // test code start here
155cdf0e10cSrcweir //------------------------------------------------------------------------
156cdf0e10cSrcweir
157cdf0e10cSrcweir namespace osl_Pipe
158cdf0e10cSrcweir {
159cdf0e10cSrcweir
160cdf0e10cSrcweir //------------------------------------------------------------------------
161cdf0e10cSrcweir // most return value -1 denote a fail of operation.
162cdf0e10cSrcweir //------------------------------------------------------------------------
163cdf0e10cSrcweir #define OSL_PIPE_FAIL -1
164cdf0e10cSrcweir
165cdf0e10cSrcweir /** testing the methods:
166cdf0e10cSrcweir inline Pipe();
167cdf0e10cSrcweir inline Pipe(const ::rtl::OUString& strName, oslPipeOptions Options);
168cdf0e10cSrcweir inline Pipe(const ::rtl::OUString& strName, oslPipeOptions Options,const Security & rSecurity);
169cdf0e10cSrcweir inline Pipe(const Pipe& pipe);
170cdf0e10cSrcweir inline Pipe(oslPipe pipe, __sal_NoAcquire noacquire );
171cdf0e10cSrcweir inline Pipe(oslPipe Pipe);
172cdf0e10cSrcweir */
TEST(Sal_Test_Pipe,ctors_none)17364293329SJuergen Schmidt TEST(Sal_Test_Pipe, ctors_none) {
174cdf0e10cSrcweir ::osl::Pipe aPipe;
17564293329SJuergen Schmidt sal_Bool bRes = aPipe.is( );
176cdf0e10cSrcweir
17764293329SJuergen Schmidt // #test comment#: test constructor with no parameter, yet no case to test.
17864293329SJuergen Schmidt ASSERT_TRUE( !bRes );
179cdf0e10cSrcweir }
180cdf0e10cSrcweir
TEST(Sal_Test_Pipe,ctors_name_option)18164293329SJuergen Schmidt TEST(Sal_Test_Pipe, ctors_name_option) {
182cdf0e10cSrcweir /// create a named pipe.
18364293329SJuergen Schmidt ::osl::Pipe aPipe( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
18464293329SJuergen Schmidt ::osl::Pipe aAssignPipe( uniquePipeName(aTestPipeName), osl_Pipe_OPEN );
185cdf0e10cSrcweir
18664293329SJuergen Schmidt sal_Bool bRes = aPipe.is( ) && aAssignPipe.is( );
187cdf0e10cSrcweir
18864293329SJuergen Schmidt // #test comment#: test constructor with name and option.
18964293329SJuergen Schmidt ASSERT_TRUE( bRes );
190cdf0e10cSrcweir }
191cdf0e10cSrcweir
TEST(Sal_Test_Pipe,ctors_name_option_security)19264293329SJuergen Schmidt TEST(Sal_Test_Pipe, ctors_name_option_security) {
193cdf0e10cSrcweir /// create a security pipe.
194cdf0e10cSrcweir const ::osl::Security rSecurity;
19564293329SJuergen Schmidt ::osl::Pipe aSecurityPipe( uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSecurity );
196cdf0e10cSrcweir
19764293329SJuergen Schmidt sal_Bool bRes = aSecurityPipe.is( );
198cdf0e10cSrcweir
19964293329SJuergen Schmidt // #test comment#: test constructor with name, option and security, the test of security is not implemented yet.
20064293329SJuergen Schmidt ASSERT_TRUE( bRes );
201cdf0e10cSrcweir }
202cdf0e10cSrcweir
TEST(Sal_Test_Pipe,ctors_copy)20364293329SJuergen Schmidt TEST(Sal_Test_Pipe, ctors_copy) {
204cdf0e10cSrcweir /// create a pipe.
20564293329SJuergen Schmidt ::osl::Pipe aPipe( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
206cdf0e10cSrcweir /// create a pipe using copy constructor.
207cdf0e10cSrcweir ::osl::Pipe aCopyPipe( aPipe );
208cdf0e10cSrcweir
20964293329SJuergen Schmidt sal_Bool bRes = aCopyPipe.is( ) && aCopyPipe == aPipe;
210cdf0e10cSrcweir
21164293329SJuergen Schmidt // #test comment#: test copy constructor.
21264293329SJuergen Schmidt ASSERT_TRUE( bRes );
213cdf0e10cSrcweir }
214cdf0e10cSrcweir
21564293329SJuergen Schmidt
216cdf0e10cSrcweir /** tester comment:
217cdf0e10cSrcweir
218cdf0e10cSrcweir When test the following two constructors, don't know how to test the
219cdf0e10cSrcweir acquire and no acquire action. possible plans:
220cdf0e10cSrcweir 1.release one handle and check the other( did not success since the
221cdf0e10cSrcweir other still exist and valid. )
222cdf0e10cSrcweir 2. release one handle twice to see getLastError( )(the getLastError
223cdf0e10cSrcweir always returns invalidError(LINUX)).
224cdf0e10cSrcweir */
TEST(Sal_Test_Pipe,ctors_no_acquire)22564293329SJuergen Schmidt TEST(Sal_Test_Pipe, ctors_no_acquire) {
226cdf0e10cSrcweir /// create a pipe.
22764293329SJuergen Schmidt ::osl::Pipe aPipe( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
228cdf0e10cSrcweir /// constructs a pipe reference without acquiring the handle.
229cdf0e10cSrcweir ::osl::Pipe aNoAcquirePipe( aPipe.getHandle( ), SAL_NO_ACQUIRE );
230cdf0e10cSrcweir
23164293329SJuergen Schmidt sal_Bool bRes = aNoAcquirePipe.is( );
232cdf0e10cSrcweir ///aPipe.clear( );
233cdf0e10cSrcweir ///bRes1 = aNoAcquirePipe.is( );
234cdf0e10cSrcweir
235cdf0e10cSrcweir
23664293329SJuergen Schmidt // #test comment#: test constructor with no acquire of handle, only validation test, do not know how to test no acquire.
23764293329SJuergen Schmidt ASSERT_TRUE( bRes );
238cdf0e10cSrcweir }
239cdf0e10cSrcweir
TEST(Sal_Test_Pipe,ctors_acquire)24064293329SJuergen Schmidt TEST(Sal_Test_Pipe, ctors_acquire) {
241cdf0e10cSrcweir /// create a base pipe.
24264293329SJuergen Schmidt ::osl::Pipe aPipe( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
243cdf0e10cSrcweir /// constructs two pipes without acquiring the handle on the base pipe.
244cdf0e10cSrcweir ::osl::Pipe aAcquirePipe( aPipe.getHandle( ) );
245cdf0e10cSrcweir ::osl::Pipe aAcquirePipe1( NULL );
246cdf0e10cSrcweir
24764293329SJuergen Schmidt sal_Bool bRes = aAcquirePipe.is( );
24864293329SJuergen Schmidt sal_Bool bRes1 = aAcquirePipe1.is( );
249cdf0e10cSrcweir
25064293329SJuergen Schmidt // #test comment#: test constructor with no acquire of handle.only validation test, do not know how to test no acquire.
25164293329SJuergen Schmidt ASSERT_TRUE( bRes && !bRes1 );
252cdf0e10cSrcweir }
253cdf0e10cSrcweir
254cdf0e10cSrcweir
255cdf0e10cSrcweir /** testing the method:
256cdf0e10cSrcweir inline sal_Bool SAL_CALL is() const;
257cdf0e10cSrcweir */
TEST(Sal_Test_Pipe,is_001)25864293329SJuergen Schmidt TEST(Sal_Test_Pipe, is_001) {
259cdf0e10cSrcweir ::osl::Pipe aPipe;
260cdf0e10cSrcweir
26164293329SJuergen Schmidt // #test comment#: test is(), check if the pipe is a valid one.
26264293329SJuergen Schmidt ASSERT_TRUE( !aPipe.is( ) );
263cdf0e10cSrcweir }
264cdf0e10cSrcweir
TEST(Sal_Test_Pipe,is_002)26564293329SJuergen Schmidt TEST(Sal_Test_Pipe, is_002) {
26664293329SJuergen Schmidt ::osl::Pipe aPipe( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
267cdf0e10cSrcweir
26864293329SJuergen Schmidt // #test comment#: test is(), a normal pipe creation.
26964293329SJuergen Schmidt ASSERT_TRUE( aPipe.is( ) );
270cdf0e10cSrcweir }
271cdf0e10cSrcweir
TEST(Sal_Test_Pipe,is_003)27264293329SJuergen Schmidt TEST(Sal_Test_Pipe, is_003) {
27364293329SJuergen Schmidt ::osl::Pipe aPipe( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
274cdf0e10cSrcweir aPipe.clear( );
275cdf0e10cSrcweir
27664293329SJuergen Schmidt // #test comment#: test is(), an invalid case
27764293329SJuergen Schmidt ASSERT_TRUE( !aPipe.is( ) );
278cdf0e10cSrcweir }
279cdf0e10cSrcweir
TEST(Sal_Test_Pipe,is_004)28064293329SJuergen Schmidt TEST(Sal_Test_Pipe, is_004) {
281cdf0e10cSrcweir ::osl::Pipe aPipe( NULL );
282cdf0e10cSrcweir
28364293329SJuergen Schmidt // #test comment#: test is(), an invalid constructor.
28464293329SJuergen Schmidt ASSERT_TRUE( !aPipe.is( ) );
285cdf0e10cSrcweir }
286cdf0e10cSrcweir
287cdf0e10cSrcweir
288cdf0e10cSrcweir /** testing the methods:
289cdf0e10cSrcweir inline sal_Bool create( const ::rtl::OUString & strName,
290cdf0e10cSrcweir oslPipeOptions Options, const Security &rSec );
291cdf0e10cSrcweir nline sal_Bool create( const ::rtl::OUString & strName,
292cdf0e10cSrcweir oslPipeOptions Options = osl_Pipe_OPEN );
293cdf0e10cSrcweir */
TEST(Sal_Test_Pipe,create_named_security_001)29464293329SJuergen Schmidt TEST(Sal_Test_Pipe, create_named_security_001) {
295cdf0e10cSrcweir const Security rSec;
296cdf0e10cSrcweir ::osl::Pipe aPipe;
29764293329SJuergen Schmidt sal_Bool bRes = aPipe.create( uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSec );
29864293329SJuergen Schmidt sal_Bool bRes1 = aPipe.create( uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSec );
299cdf0e10cSrcweir aPipe.clear( );
300cdf0e10cSrcweir
30164293329SJuergen Schmidt // #test comment#: test creation.
30264293329SJuergen Schmidt ASSERT_TRUE( bRes && !bRes1 );
303cdf0e10cSrcweir }
304cdf0e10cSrcweir
TEST(Sal_Test_Pipe,create_named_security_002)30564293329SJuergen Schmidt TEST(Sal_Test_Pipe, create_named_security_002) {
306cdf0e10cSrcweir const Security rSec;
307cdf0e10cSrcweir ::osl::Pipe aPipe, aPipe1;
30864293329SJuergen Schmidt sal_Bool bRes = aPipe.create( uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSec );
30964293329SJuergen Schmidt sal_Bool bRes1 = aPipe1.create( uniquePipeName(aTestPipeName), osl_Pipe_OPEN, rSec );
310cdf0e10cSrcweir aPipe.clear( );
311cdf0e10cSrcweir
31264293329SJuergen Schmidt // #test comment#: test creation and open.
31364293329SJuergen Schmidt ASSERT_TRUE( bRes && bRes1 );
314cdf0e10cSrcweir }
315cdf0e10cSrcweir
TEST(Sal_Test_Pipe,create_named_001)31664293329SJuergen Schmidt TEST(Sal_Test_Pipe, create_named_001) {
317cdf0e10cSrcweir ::osl::Pipe aPipe;
31864293329SJuergen Schmidt sal_Bool bRes = aPipe.create( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
31964293329SJuergen Schmidt sal_Bool bRes1 = aPipe.create( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
320cdf0e10cSrcweir aPipe.clear( );
321cdf0e10cSrcweir
32264293329SJuergen Schmidt // #test comment#: test creation.
32364293329SJuergen Schmidt ASSERT_TRUE( bRes && !bRes1);
324cdf0e10cSrcweir }
325cdf0e10cSrcweir
TEST(Sal_Test_Pipe,create_named_002)32664293329SJuergen Schmidt TEST(Sal_Test_Pipe, create_named_002) {
327cdf0e10cSrcweir ::osl::Pipe aPipe, aPipe1;
32864293329SJuergen Schmidt sal_Bool bRes = aPipe.create( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
32964293329SJuergen Schmidt sal_Bool bRes1 = aPipe1.create( uniquePipeName(aTestPipeName), osl_Pipe_OPEN );
330cdf0e10cSrcweir aPipe.clear( );
331cdf0e10cSrcweir
33264293329SJuergen Schmidt // #test comment#: test creation and open.
33364293329SJuergen Schmidt ASSERT_TRUE( bRes && bRes1);
334cdf0e10cSrcweir }
335cdf0e10cSrcweir
TEST(Sal_Test_Pipe,create_named_003)33664293329SJuergen Schmidt TEST(Sal_Test_Pipe, create_named_003) {
337cdf0e10cSrcweir ::osl::Pipe aPipe;
33864293329SJuergen Schmidt sal_Bool bRes = aPipe.create( uniquePipeName(aTestPipeName) );
339cdf0e10cSrcweir aPipe.clear( );
340cdf0e10cSrcweir
34164293329SJuergen Schmidt // #test comment#: test default option is open.
34264293329SJuergen Schmidt ASSERT_TRUE( !bRes );
343cdf0e10cSrcweir }
344cdf0e10cSrcweir
345cdf0e10cSrcweir
346cdf0e10cSrcweir /** testing the method:
347cdf0e10cSrcweir inline void SAL_CALL clear();
348cdf0e10cSrcweir */
TEST(Sal_Test_Pipe,clear_001)34964293329SJuergen Schmidt TEST(Sal_Test_Pipe, clear_001) {
350cdf0e10cSrcweir ::osl::Pipe aPipe;
35164293329SJuergen Schmidt aPipe.create( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
352cdf0e10cSrcweir aPipe.clear( );
35364293329SJuergen Schmidt sal_Bool bRes = aPipe.is( );
354cdf0e10cSrcweir
35564293329SJuergen Schmidt // #test comment#: test clear.
35664293329SJuergen Schmidt ASSERT_TRUE( !bRes );
357cdf0e10cSrcweir }
358cdf0e10cSrcweir
359cdf0e10cSrcweir
360cdf0e10cSrcweir /** testing the methods:
361cdf0e10cSrcweir inline Pipe& SAL_CALL operator= (const Pipe& pipe);
362cdf0e10cSrcweir inline Pipe& SAL_CALL operator= (const oslPipe pipe );
363cdf0e10cSrcweir */
TEST(Sal_Test_Pipe,assign_ref)36464293329SJuergen Schmidt TEST(Sal_Test_Pipe, assign_ref) {
365cdf0e10cSrcweir ::osl::Pipe aPipe, aPipe1;
36664293329SJuergen Schmidt aPipe.create( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
367cdf0e10cSrcweir aPipe1 = aPipe;
36864293329SJuergen Schmidt sal_Bool bRes = aPipe1.is( );
36964293329SJuergen Schmidt sal_Bool bRes1 = aPipe == aPipe1;
370cdf0e10cSrcweir aPipe.close( );
371cdf0e10cSrcweir aPipe1.close( );
372cdf0e10cSrcweir
37364293329SJuergen Schmidt // #test comment#: test assign with reference.
37464293329SJuergen Schmidt ASSERT_TRUE( bRes && bRes1 );
375cdf0e10cSrcweir }
376cdf0e10cSrcweir
TEST(Sal_Test_Pipe,assign_handle)37764293329SJuergen Schmidt TEST(Sal_Test_Pipe, assign_handle) {
378cdf0e10cSrcweir ::osl::Pipe aPipe, aPipe1;
37964293329SJuergen Schmidt aPipe.create( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
380cdf0e10cSrcweir aPipe1 = aPipe.getHandle( );
38164293329SJuergen Schmidt sal_Bool bRes = aPipe1.is( );
38264293329SJuergen Schmidt sal_Bool bRes1 = aPipe == aPipe1;
383cdf0e10cSrcweir aPipe.close( );
384cdf0e10cSrcweir aPipe1.close( );
385cdf0e10cSrcweir
38664293329SJuergen Schmidt // #test comment#: test assign with handle.
38764293329SJuergen Schmidt ASSERT_TRUE( bRes && bRes1 );
388cdf0e10cSrcweir }
389cdf0e10cSrcweir
390cdf0e10cSrcweir
391cdf0e10cSrcweir /** testing the method:
392cdf0e10cSrcweir inline sal_Bool SAL_CALL isValid() const;
393cdf0e10cSrcweir isValid( ) has not been implemented under the following platforms, please refer to osl/pipe.hxx
394cdf0e10cSrcweir */
39564293329SJuergen Schmidt // TEST(Sal_Test_Pipe, isValid_001) {
39664293329SJuergen Schmidt // ...
39764293329SJuergen Schmidt // // #test comment#: isValid() has not been implemented on all platforms.
39864293329SJuergen Schmidt // ASSERT_TRUE( ... );
39964293329SJuergen Schmidt // }
400cdf0e10cSrcweir
401cdf0e10cSrcweir
402cdf0e10cSrcweir /** testing the method:
403cdf0e10cSrcweir inline sal_Bool SAL_CALL operator==( const Pipe& rPipe ) const;
404cdf0e10cSrcweir */
TEST(Sal_Test_Pipe,isEqual_001)40564293329SJuergen Schmidt TEST(Sal_Test_Pipe, isEqual_001) {
406cdf0e10cSrcweir ::osl::Pipe aPipe;
40764293329SJuergen Schmidt aPipe.create( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
40864293329SJuergen Schmidt sal_Bool bRes = aPipe == aPipe;
409cdf0e10cSrcweir aPipe.close( );
410cdf0e10cSrcweir
41164293329SJuergen Schmidt // #test comment#: test isEqual(), compare its self.
41264293329SJuergen Schmidt ASSERT_TRUE( bRes );
413cdf0e10cSrcweir }
414cdf0e10cSrcweir
TEST(Sal_Test_Pipe,isEqual_002)41564293329SJuergen Schmidt TEST(Sal_Test_Pipe, isEqual_002) {
416cdf0e10cSrcweir ::osl::Pipe aPipe, aPipe1, aPipe2;
41764293329SJuergen Schmidt aPipe.create( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
418cdf0e10cSrcweir aPipe1 = aPipe;
41964293329SJuergen Schmidt aPipe2.create( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
420cdf0e10cSrcweir
42164293329SJuergen Schmidt sal_Bool bRes = aPipe == aPipe1;
42264293329SJuergen Schmidt sal_Bool bRes1 = aPipe == aPipe2;
423cdf0e10cSrcweir aPipe.close( );
424cdf0e10cSrcweir aPipe1.close( );
425cdf0e10cSrcweir aPipe2.close( );
426cdf0e10cSrcweir
42764293329SJuergen Schmidt // #test comment#: test isEqual(),create one copy instance, and compare.
42864293329SJuergen Schmidt ASSERT_TRUE( bRes && !bRes1 );
429cdf0e10cSrcweir }
430cdf0e10cSrcweir
431cdf0e10cSrcweir
432cdf0e10cSrcweir /** testing the method:
433cdf0e10cSrcweir inline void SAL_CALL close();
434cdf0e10cSrcweir */
TEST(Sal_Test_Pipe,close_001)43564293329SJuergen Schmidt TEST(Sal_Test_Pipe, close_001) {
43664293329SJuergen Schmidt ::osl::Pipe aPipe( uniquePipeName(aTestPipe1), osl_Pipe_CREATE );
437cdf0e10cSrcweir aPipe.close( );
43864293329SJuergen Schmidt sal_Bool bRes = aPipe.is( );
439cdf0e10cSrcweir
440cdf0e10cSrcweir aPipe.clear( );
44164293329SJuergen Schmidt sal_Bool bRes1 = aPipe.is( );
442cdf0e10cSrcweir
44364293329SJuergen Schmidt // #test comment#: difference between close and clear.
44464293329SJuergen Schmidt ASSERT_TRUE( bRes && !bRes1);
445cdf0e10cSrcweir }
446cdf0e10cSrcweir
TEST(Sal_Test_Pipe,close_002)44764293329SJuergen Schmidt TEST(Sal_Test_Pipe, close_002) {
44864293329SJuergen Schmidt ::osl::StreamPipe aPipe( uniquePipeName(aTestPipe1), osl_Pipe_CREATE );
449cdf0e10cSrcweir aPipe.close( );
450cdf0e10cSrcweir int nRet = aPipe.send( m_pTestString1.getStr(), 3 );
451cdf0e10cSrcweir
45264293329SJuergen Schmidt // #test comment#: use after close.
45364293329SJuergen Schmidt ASSERT_EQ( nRet, OSL_PIPE_FAIL );
454cdf0e10cSrcweir }
455cdf0e10cSrcweir
456cdf0e10cSrcweir
457cdf0e10cSrcweir /** testing the method:
458cdf0e10cSrcweir inline oslPipeError SAL_CALL accept(StreamPipe& Connection);
459cdf0e10cSrcweir please refer to StreamPipe::recv
460cdf0e10cSrcweir */
461cdf0e10cSrcweir
462cdf0e10cSrcweir
463cdf0e10cSrcweir /** testing the method:
464cdf0e10cSrcweir inline oslPipeError SAL_CALL getError() const;
465cdf0e10cSrcweir */
466cdf0e10cSrcweir /*
467cdf0e10cSrcweir PipeError[]= {
468cdf0e10cSrcweir { 0, osl_Pipe_E_None }, // no error
469cdf0e10cSrcweir { EPROTOTYPE, osl_Pipe_E_NoProtocol }, // Protocol wrong type for socket
470cdf0e10cSrcweir { ENOPROTOOPT, osl_Pipe_E_NoProtocol }, // Protocol not available
471cdf0e10cSrcweir { EPROTONOSUPPORT, osl_Pipe_E_NoProtocol }, // Protocol not supported
472cdf0e10cSrcweir { ESOCKTNOSUPPORT, osl_Pipe_E_NoProtocol }, // Socket type not supported
473cdf0e10cSrcweir { EPFNOSUPPORT, osl_Pipe_E_NoProtocol }, // Protocol family not supported
474cdf0e10cSrcweir { EAFNOSUPPORT, osl_Pipe_E_NoProtocol }, // Address family not supported by
475cdf0e10cSrcweir // protocol family
476cdf0e10cSrcweir { ENETRESET, osl_Pipe_E_NetworkReset }, // Network dropped connection because
477cdf0e10cSrcweir // of reset
478cdf0e10cSrcweir { ECONNABORTED, osl_Pipe_E_ConnectionAbort }, // Software caused connection abort
479cdf0e10cSrcweir { ECONNRESET, osl_Pipe_E_ConnectionReset }, // Connection reset by peer
480cdf0e10cSrcweir { ENOBUFS, osl_Pipe_E_NoBufferSpace }, // No buffer space available
481cdf0e10cSrcweir { ETIMEDOUT, osl_Pipe_E_TimedOut }, // Connection timed out
482cdf0e10cSrcweir { ECONNREFUSED, osl_Pipe_E_ConnectionRefused }, // Connection refused
483cdf0e10cSrcweir { -1, osl_Pipe_E_invalidError }
484cdf0e10cSrcweir };
485cdf0e10cSrcweir did not define osl_Pipe_E_NotFound, osl_Pipe_E_AlreadyExists
486cdf0e10cSrcweir */
TEST(Sal_Test_Pipe,getError_001)48764293329SJuergen Schmidt TEST(Sal_Test_Pipe, getError_001) {
48864293329SJuergen Schmidt ::osl::Pipe aPipe( uniquePipeName(aTestPipeName), osl_Pipe_OPEN );
489cdf0e10cSrcweir oslPipeError nError = aPipe.getError( );
490cdf0e10cSrcweir printPipeError( aPipe );
491cdf0e10cSrcweir aPipe.clear( );
492cdf0e10cSrcweir
49364293329SJuergen Schmidt // #test comment#: open a non-exist pipe.
49464293329SJuergen Schmidt ASSERT_NE( nError, osl_Pipe_E_None );
495cdf0e10cSrcweir }
496cdf0e10cSrcweir
TEST(Sal_Test_Pipe,getError_002)49764293329SJuergen Schmidt TEST(Sal_Test_Pipe, getError_002) {
49864293329SJuergen Schmidt ::osl::Pipe aPipe( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
49964293329SJuergen Schmidt ::osl::Pipe aPipe1( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
500cdf0e10cSrcweir oslPipeError nError = aPipe.getError( );
501cdf0e10cSrcweir printPipeError( aPipe );
502cdf0e10cSrcweir aPipe.clear( );
503cdf0e10cSrcweir aPipe1.clear( );
504cdf0e10cSrcweir
50564293329SJuergen Schmidt // #test comment#: create an already exist pipe.
50664293329SJuergen Schmidt ASSERT_NE( nError, osl_Pipe_E_None );
507cdf0e10cSrcweir }
508cdf0e10cSrcweir
509cdf0e10cSrcweir
510cdf0e10cSrcweir /** testing the method:
511cdf0e10cSrcweir inline oslPipe SAL_CALL getHandle() const;
512cdf0e10cSrcweir */
TEST(Sal_Test_Pipe,getHandle_001)51364293329SJuergen Schmidt TEST(Sal_Test_Pipe, getHandle_001) {
51464293329SJuergen Schmidt ::osl::Pipe aPipe( uniquePipeName(aTestPipeName), osl_Pipe_OPEN );
51564293329SJuergen Schmidt sal_Bool bRes = aPipe == aPipe.getHandle( );
516cdf0e10cSrcweir aPipe.clear( );
517cdf0e10cSrcweir
51864293329SJuergen Schmidt // #test comment#: one pipe should equal to its handle.
51964293329SJuergen Schmidt ASSERT_TRUE( bRes );
520cdf0e10cSrcweir }
521cdf0e10cSrcweir
TEST(Sal_Test_Pipe,getHandle_002)52264293329SJuergen Schmidt TEST(Sal_Test_Pipe, getHandle_002) {
52364293329SJuergen Schmidt ::osl::Pipe aPipe( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
524cdf0e10cSrcweir ::osl::Pipe aPipe1( aPipe.getHandle( ) );
52564293329SJuergen Schmidt sal_Bool bRes = aPipe == aPipe1;
526cdf0e10cSrcweir aPipe.clear( );
527cdf0e10cSrcweir aPipe1.clear( );
528cdf0e10cSrcweir
52964293329SJuergen Schmidt // #test comment#: one pipe derived from another pipe's handle.
53064293329SJuergen Schmidt ASSERT_TRUE( bRes );
531cdf0e10cSrcweir }
532cdf0e10cSrcweir
533cdf0e10cSrcweir } // namespace osl_Pipe
534cdf0e10cSrcweir
535cdf0e10cSrcweir
536cdf0e10cSrcweir namespace osl_StreamPipe
537cdf0e10cSrcweir {
538cdf0e10cSrcweir
539cdf0e10cSrcweir /** testing the methods:
540cdf0e10cSrcweir inline StreamPipe();
541*6bcc9fe0Smseidel inline StreamPipe(oslPipe Pipe);
542cdf0e10cSrcweir inline StreamPipe(const StreamPipe& Pipe);
543cdf0e10cSrcweir inline StreamPipe(const ::rtl::OUString& strName, oslPipeOptions Options = osl_Pipe_OPEN);
544cdf0e10cSrcweir inline StreamPipe(const ::rtl::OUString& strName, oslPipeOptions Options, const Security &rSec );
545cdf0e10cSrcweir inline StreamPipe( oslPipe pipe, __sal_NoAcquire noacquire );
546cdf0e10cSrcweir */
547cdf0e10cSrcweir
TEST(Sal_Test_StreamPipe,ctors_none)54864293329SJuergen Schmidt TEST(Sal_Test_StreamPipe, ctors_none) {
549cdf0e10cSrcweir // create a pipe.
55064293329SJuergen Schmidt ::osl::StreamPipe aStreamPipe( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
551cdf0e10cSrcweir // create an unattached pipe.
552cdf0e10cSrcweir ::osl::StreamPipe aStreamPipe1;
55364293329SJuergen Schmidt sal_Bool bRes = aStreamPipe1.is( );
554cdf0e10cSrcweir
555cdf0e10cSrcweir // assign it and check.
556cdf0e10cSrcweir aStreamPipe1 = aStreamPipe;
55764293329SJuergen Schmidt sal_Bool bRes1 = aStreamPipe1.is( );
558cdf0e10cSrcweir aStreamPipe.clear( );
559cdf0e10cSrcweir aStreamPipe1.clear( );
560cdf0e10cSrcweir
56164293329SJuergen Schmidt // #test comment#: test constructor with no parameter, before and after assign.
56264293329SJuergen Schmidt ASSERT_TRUE( !bRes && bRes1 );
563cdf0e10cSrcweir }
564cdf0e10cSrcweir
TEST(Sal_Test_StreamPipe,ctors_handle)56564293329SJuergen Schmidt TEST(Sal_Test_StreamPipe, ctors_handle) {
566cdf0e10cSrcweir // create a pipe.
56764293329SJuergen Schmidt ::osl::StreamPipe aStreamPipe( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
568cdf0e10cSrcweir // create a pipe with last handle.
569cdf0e10cSrcweir ::osl::StreamPipe aStreamPipe1( aStreamPipe.getHandle( ) );
57064293329SJuergen Schmidt sal_Bool bRes = aStreamPipe1.is( ) && aStreamPipe == aStreamPipe1;
571cdf0e10cSrcweir aStreamPipe.clear( );
572cdf0e10cSrcweir aStreamPipe1.clear( );
573cdf0e10cSrcweir
57464293329SJuergen Schmidt // #test comment#: test constructor with other's handle.
57564293329SJuergen Schmidt ASSERT_TRUE( bRes );
576cdf0e10cSrcweir }
577cdf0e10cSrcweir
TEST(Sal_Test_StreamPipe,ctors_copy)57864293329SJuergen Schmidt TEST(Sal_Test_StreamPipe, ctors_copy) {
579cdf0e10cSrcweir // create a pipe.
58064293329SJuergen Schmidt ::osl::StreamPipe aStreamPipe( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
581cdf0e10cSrcweir // create an unattached pipe.
582cdf0e10cSrcweir ::osl::StreamPipe aStreamPipe1( aStreamPipe );
58364293329SJuergen Schmidt sal_Bool bRes = aStreamPipe1.is( ) && aStreamPipe == aStreamPipe1;
584cdf0e10cSrcweir aStreamPipe.clear( );
585cdf0e10cSrcweir aStreamPipe1.clear( );
586cdf0e10cSrcweir
58764293329SJuergen Schmidt // #test comment#: test copy constructor.
58864293329SJuergen Schmidt ASSERT_TRUE( bRes );
589cdf0e10cSrcweir }
590cdf0e10cSrcweir
TEST(Sal_Test_StreamPipe,ctors_name_option)59164293329SJuergen Schmidt TEST(Sal_Test_StreamPipe, ctors_name_option) {
592cdf0e10cSrcweir // create a pipe.
59364293329SJuergen Schmidt ::osl::StreamPipe aStreamPipe( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
594cdf0e10cSrcweir // create an unattached pipe.
59564293329SJuergen Schmidt ::osl::StreamPipe aStreamPipe1( uniquePipeName(aTestPipeName), osl_Pipe_OPEN );
59664293329SJuergen Schmidt sal_Bool bRes = aStreamPipe1.is( ) && aStreamPipe.is( );
597cdf0e10cSrcweir aStreamPipe.clear( );
598cdf0e10cSrcweir aStreamPipe1.clear( );
599cdf0e10cSrcweir
60064293329SJuergen Schmidt // #test comment#: test constructor with name and option.
60164293329SJuergen Schmidt ASSERT_TRUE( bRes );
602cdf0e10cSrcweir }
603cdf0e10cSrcweir
TEST(Sal_Test_StreamPipe,ctors_name_option_security)60464293329SJuergen Schmidt TEST(Sal_Test_StreamPipe, ctors_name_option_security) {
60564293329SJuergen Schmidt // create a security pipe.
606cdf0e10cSrcweir const ::osl::Security rSecurity;
60764293329SJuergen Schmidt ::osl::StreamPipe aSecurityPipe( uniquePipeName(aTestPipeName), osl_Pipe_CREATE, rSecurity );
608cdf0e10cSrcweir
60964293329SJuergen Schmidt sal_Bool bRes = aSecurityPipe.is( );
610cdf0e10cSrcweir aSecurityPipe.clear( );
611cdf0e10cSrcweir
61264293329SJuergen Schmidt // #test comment#: test constructor with name, option and security, the test of security is not implemented yet.
61364293329SJuergen Schmidt ASSERT_TRUE( bRes );
614cdf0e10cSrcweir }
615cdf0e10cSrcweir
616cdf0e10cSrcweir /** tester comment:
617cdf0e10cSrcweir
618cdf0e10cSrcweir When test the following constructor, don't know how to test the
619cdf0e10cSrcweir acquire and no acquire action. possible plans:
620cdf0e10cSrcweir 1.release one handle and check the other( did not success since the
621cdf0e10cSrcweir other still exist and valid. )
622cdf0e10cSrcweir 2. release one handle twice to see getLastError( )(the getLastError
623cdf0e10cSrcweir always returns invalidError(LINUX)).
624cdf0e10cSrcweir */
TEST(Sal_Test_StreamPipe,ctors_no_acquire)62564293329SJuergen Schmidt TEST(Sal_Test_StreamPipe, ctors_no_acquire) {
626cdf0e10cSrcweir // create a pipe.
62764293329SJuergen Schmidt ::osl::StreamPipe aPipe( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
628cdf0e10cSrcweir // constructs a pipe reference without acquiring the handle.
629cdf0e10cSrcweir ::osl::StreamPipe aNoAcquirePipe( aPipe.getHandle( ), SAL_NO_ACQUIRE );
630cdf0e10cSrcweir
63164293329SJuergen Schmidt sal_Bool bRes = aNoAcquirePipe.is( );
632cdf0e10cSrcweir aPipe.clear( );
633cdf0e10cSrcweir // bRes1 = aNoAcquirePipe.is( );
634cdf0e10cSrcweir
63564293329SJuergen Schmidt // #test comment#: test constructor with no acquire of handle, only validation test, do not know how to test no acquire.
63664293329SJuergen Schmidt ASSERT_TRUE( bRes );
637cdf0e10cSrcweir }
638cdf0e10cSrcweir
639cdf0e10cSrcweir /** testing the methods:
640cdf0e10cSrcweir inline StreamPipe & SAL_CALL operator=(oslPipe Pipe);
641cdf0e10cSrcweir inline StreamPipe& SAL_CALL operator=(const Pipe& pipe);
642b5acf798Smseidel mindy: not implemented in osl/pipe.hxx, so remove the cases
643cdf0e10cSrcweir */
64464293329SJuergen Schmidt // TEST(Sal_Test_StreamPipe, assign_ref) {
64564293329SJuergen Schmidt // ::osl::StreamPipe aPipe, aPipe1;
64664293329SJuergen Schmidt // aPipe.create( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
64764293329SJuergen Schmidt // aPipe1 = aPipe;
64864293329SJuergen Schmidt // sal_Bool bRes = aPipe1.is( );
64964293329SJuergen Schmidt // sal_Bool bRes1 = aPipe == aPipe1;
65064293329SJuergen Schmidt // aPipe.close( );
65164293329SJuergen Schmidt // aPipe1.close( );
652cdf0e10cSrcweir
65364293329SJuergen Schmidt // // #test comment#: test assign with reference.
65464293329SJuergen Schmidt // ASSERT_TRUE( bRes && bRes1 );
65564293329SJuergen Schmidt // }
656cdf0e10cSrcweir
65764293329SJuergen Schmidt // TEST(Sal_Test_StreamPipe, assign_ref) {
65864293329SJuergen Schmidt // ::osl::StreamPipe * pPipe = new ::osl::StreamPipe( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
65964293329SJuergen Schmidt // ::osl::StreamPipe * pAssignPipe = new ::osl::StreamPipe;
66064293329SJuergen Schmidt // *pAssignPipe = pPipe->getHandle( );
661cdf0e10cSrcweir
66264293329SJuergen Schmidt // bRes = pAssignPipe->is( );
66364293329SJuergen Schmidt // bRes1 = ( *pPipe == *pAssignPipe );
66464293329SJuergen Schmidt // pPipe->close( );
665cdf0e10cSrcweir
66664293329SJuergen Schmidt // delete pAssignPipe;
667cdf0e10cSrcweir
66864293329SJuergen Schmidt // // #test comment#: test assign with handle., seems not implemented under (LINUX)(W32)
66964293329SJuergen Schmidt // ASSERT_TRUE( bRes && bRes1 );
67064293329SJuergen Schmidt // }
671cdf0e10cSrcweir
672cdf0e10cSrcweir
673cdf0e10cSrcweir /** wait _nSec seconds.
674cdf0e10cSrcweir */
thread_sleep(sal_Int32 _nSec)675cdf0e10cSrcweir void thread_sleep( sal_Int32 _nSec )
676cdf0e10cSrcweir {
677cdf0e10cSrcweir /// print statement in thread process must use fflush() to force display.
678cdf0e10cSrcweir // printf("wait %d seconds. ", _nSec );
679cdf0e10cSrcweir fflush(stdout);
680cdf0e10cSrcweir
681cdf0e10cSrcweir #ifdef WNT //Windows
682cdf0e10cSrcweir Sleep( _nSec * 1000 );
683cdf0e10cSrcweir #endif
684cdf0e10cSrcweir #if ( defined UNX ) || ( defined OS2 ) //Unix
685cdf0e10cSrcweir sleep( _nSec );
686cdf0e10cSrcweir #endif
687cdf0e10cSrcweir // printf("done\n" );
688cdf0e10cSrcweir }
68964293329SJuergen Schmidt
690cdf0e10cSrcweir // test read/write & send/recv data to pipe
691cdf0e10cSrcweir // -----------------------------------------------------------------------------
692cdf0e10cSrcweir
693cdf0e10cSrcweir class Pipe_DataSink_Thread : public Thread
694cdf0e10cSrcweir {
695cdf0e10cSrcweir public:
696cdf0e10cSrcweir sal_Char buf[256];
Pipe_DataSink_Thread()697cdf0e10cSrcweir Pipe_DataSink_Thread( ) { }
698cdf0e10cSrcweir
~Pipe_DataSink_Thread()699cdf0e10cSrcweir ~Pipe_DataSink_Thread( )
700cdf0e10cSrcweir {
701cdf0e10cSrcweir }
702cdf0e10cSrcweir protected:
run()703cdf0e10cSrcweir void SAL_CALL run( )
704cdf0e10cSrcweir {
705cdf0e10cSrcweir sal_Int32 nChars = 0;
706cdf0e10cSrcweir
707cdf0e10cSrcweir printf("open pipe\n");
70864293329SJuergen Schmidt // uniquePipeName(aTestPipeName) is a string = "TestPipe"
70964293329SJuergen Schmidt ::osl::StreamPipe aSenderPipe( uniquePipeName(aTestPipeName), osl_Pipe_OPEN );
710cdf0e10cSrcweir if ( aSenderPipe.is() == sal_False )
711cdf0e10cSrcweir {
712cdf0e10cSrcweir printf("pipe open failed! \n");
713cdf0e10cSrcweir }
714cdf0e10cSrcweir else
715cdf0e10cSrcweir {
716cdf0e10cSrcweir printf("read\n");
717cdf0e10cSrcweir nChars = aSenderPipe.read( buf, m_pTestString1.getLength() + 1 );
718cdf0e10cSrcweir if ( nChars < 0 )
719cdf0e10cSrcweir {
720cdf0e10cSrcweir printf("read failed! \n");
721cdf0e10cSrcweir return;
722cdf0e10cSrcweir }
723cdf0e10cSrcweir printf("buffer is %s \n", buf);
724cdf0e10cSrcweir printf("send\n");
725cdf0e10cSrcweir nChars = aSenderPipe.send( m_pTestString2.getStr(), m_pTestString2.getLength() + 1 );
726cdf0e10cSrcweir if ( nChars < 0 )
727cdf0e10cSrcweir {
728cdf0e10cSrcweir printf("client send failed! \n");
729cdf0e10cSrcweir return;
730cdf0e10cSrcweir }
731cdf0e10cSrcweir }
732cdf0e10cSrcweir }
733cdf0e10cSrcweir };
734cdf0e10cSrcweir
735cdf0e10cSrcweir // -----------------------------------------------------------------------------
736cdf0e10cSrcweir
737cdf0e10cSrcweir class Pipe_DataSource_Thread : public Thread
738cdf0e10cSrcweir {
739cdf0e10cSrcweir public:
740cdf0e10cSrcweir sal_Char buf[256];
74164293329SJuergen Schmidt //::osl::StreamPipe aListenPipe; //( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
742cdf0e10cSrcweir ::osl::Pipe aListenPipe;
743cdf0e10cSrcweir ::osl::StreamPipe aConnectionPipe;
Pipe_DataSource_Thread()744cdf0e10cSrcweir Pipe_DataSource_Thread( )
745cdf0e10cSrcweir {
746cdf0e10cSrcweir printf("create pipe\n");
74764293329SJuergen Schmidt aListenPipe.create( uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
748cdf0e10cSrcweir }
~Pipe_DataSource_Thread()749cdf0e10cSrcweir ~Pipe_DataSource_Thread( )
750cdf0e10cSrcweir {
751cdf0e10cSrcweir aListenPipe.close();
752cdf0e10cSrcweir }
753cdf0e10cSrcweir protected:
run()754cdf0e10cSrcweir void SAL_CALL run( )
755cdf0e10cSrcweir {
756cdf0e10cSrcweir //create pipe.
757cdf0e10cSrcweir sal_Int32 nChars;
758cdf0e10cSrcweir //::osl::StreamPipe aListenPipe( test::uniquePipeName(aTestPipeName), osl_Pipe_CREATE );
759cdf0e10cSrcweir printf("listen\n");
760cdf0e10cSrcweir if ( aListenPipe.is() == sal_False )
761cdf0e10cSrcweir {
762cdf0e10cSrcweir printf("pipe create failed! \n");
763cdf0e10cSrcweir }
764cdf0e10cSrcweir else
765cdf0e10cSrcweir {
766cdf0e10cSrcweir //::osl::StreamPipe aConnectionPipe;
767cdf0e10cSrcweir
768cdf0e10cSrcweir //start server and wait for connection.
769cdf0e10cSrcweir printf("accept\n");
770cdf0e10cSrcweir if ( osl_Pipe_E_None != aListenPipe.accept( aConnectionPipe ) )
771cdf0e10cSrcweir {
772cdf0e10cSrcweir printf("pipe accept failed!");
773cdf0e10cSrcweir return;
774cdf0e10cSrcweir }
775cdf0e10cSrcweir printf("write\n");
776cdf0e10cSrcweir // write to pipe
777cdf0e10cSrcweir nChars = aConnectionPipe.write( m_pTestString1.getStr(), m_pTestString1.getLength() + 1 );
778cdf0e10cSrcweir if ( nChars < 0)
779cdf0e10cSrcweir {
780cdf0e10cSrcweir printf("server write failed! \n");
781cdf0e10cSrcweir return;
782cdf0e10cSrcweir }
783cdf0e10cSrcweir printf("recv\n");
784cdf0e10cSrcweir nChars = aConnectionPipe.recv( buf, 256 );
785cdf0e10cSrcweir
786cdf0e10cSrcweir if ( nChars < 0)
787cdf0e10cSrcweir {
788cdf0e10cSrcweir printf("server receive failed! \n");
789cdf0e10cSrcweir return;
790cdf0e10cSrcweir }
791cdf0e10cSrcweir //thread_sleep( 2 );
792cdf0e10cSrcweir printf("received message is: %s\n", buf );
793cdf0e10cSrcweir //aConnectionPipe.close();
794cdf0e10cSrcweir }
795cdf0e10cSrcweir }
796cdf0e10cSrcweir };
797cdf0e10cSrcweir
79864293329SJuergen Schmidt
799cdf0e10cSrcweir /** testing the method: read/write/send/recv and Pipe::accept
800cdf0e10cSrcweir */
TEST(Sal_Test_StreamPipe,recv_001)80164293329SJuergen Schmidt TEST(Sal_Test_StreamPipe, recv_001) {
802cdf0e10cSrcweir //launch threads.
803cdf0e10cSrcweir Pipe_DataSource_Thread myDataSourceThread;
804cdf0e10cSrcweir Pipe_DataSink_Thread myDataSinkThread;
805cdf0e10cSrcweir myDataSourceThread.create( );
806cdf0e10cSrcweir thread_sleep( 1 );
807cdf0e10cSrcweir myDataSinkThread.create( );
808cdf0e10cSrcweir
809cdf0e10cSrcweir //wait until the thread terminate
810cdf0e10cSrcweir myDataSinkThread.join( );
811cdf0e10cSrcweir myDataSourceThread.join( );
812cdf0e10cSrcweir
813cdf0e10cSrcweir int nCompare1 = strcmp( myDataSinkThread.buf, m_pTestString1.getStr() );
814cdf0e10cSrcweir int nCompare2 = strcmp( myDataSourceThread.buf, m_pTestString2.getStr() );
81564293329SJuergen Schmidt
81664293329SJuergen Schmidt // test send/recv/write/read.
81764293329SJuergen Schmidt ASSERT_TRUE( nCompare1 == 0 && nCompare2 == 0 );
818cdf0e10cSrcweir }
819cdf0e10cSrcweir
820cdf0e10cSrcweir } // namespace osl_StreamPipe
821cdf0e10cSrcweir
main(int argc,char ** argv)82264293329SJuergen Schmidt int main(int argc, char **argv)
82364293329SJuergen Schmidt {
82464293329SJuergen Schmidt ::testing::InitGoogleTest(&argc, argv);
82564293329SJuergen Schmidt return RUN_ALL_TESTS();
82664293329SJuergen Schmidt }
827