1*87d2adbcSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*87d2adbcSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*87d2adbcSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*87d2adbcSAndrew Rist * distributed with this work for additional information
6*87d2adbcSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*87d2adbcSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*87d2adbcSAndrew Rist * "License"); you may not use this file except in compliance
9*87d2adbcSAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11*87d2adbcSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13*87d2adbcSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*87d2adbcSAndrew Rist * software distributed under the License is distributed on an
15*87d2adbcSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*87d2adbcSAndrew Rist * KIND, either express or implied. See the License for the
17*87d2adbcSAndrew Rist * specific language governing permissions and limitations
18*87d2adbcSAndrew Rist * under the License.
19cdf0e10cSrcweir *
20*87d2adbcSAndrew Rist *************************************************************/
21*87d2adbcSAndrew Rist
22*87d2adbcSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sal.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir /** test coder preface:
28cdf0e10cSrcweir 1. the BSD socket function will meet "unresolved external symbol error" on Windows platform
29cdf0e10cSrcweir if you are not including ws2_32.lib in makefile.mk, the including format will be like this:
30cdf0e10cSrcweir
31cdf0e10cSrcweir .IF "$(GUI)" == "WNT"
32cdf0e10cSrcweir SHL1STDLIBS += $(SOLARLIBDIR)$/cppunit.lib
33cdf0e10cSrcweir SHL1STDLIBS += ws2_32.lib
34cdf0e10cSrcweir .ENDIF
35cdf0e10cSrcweir
36cdf0e10cSrcweir likewise on Solaris platform.
37cdf0e10cSrcweir .IF "$(GUI)" == "UNX"
38cdf0e10cSrcweir SHL1STDLIBS+=$(SOLARLIBDIR)$/libcppunit$(DLLPOSTFIX).a
39cdf0e10cSrcweir SHL1STDLIBS += -lsocket -ldl -lnsl
40cdf0e10cSrcweir .ENDIF
41cdf0e10cSrcweir
42cdf0e10cSrcweir 2. since the Socket implementation of osl is only IPv4 oriented, our test are mainly focus on IPv4
43cdf0e10cSrcweir category.
44cdf0e10cSrcweir
45cdf0e10cSrcweir 3. some fragment of Socket source implementation are lack of comment so it is hard for testers
46cdf0e10cSrcweir guess what the exact functionality or usage of a member. Hope the Socket section's comment
47cdf0e10cSrcweir will be added.
48cdf0e10cSrcweir
49cdf0e10cSrcweir 4. following functions are declared but not implemented:
50cdf0e10cSrcweir inline sal_Bool SAL_CALL operator== (const SocketAddr & Addr) const;
51cdf0e10cSrcweir */
52cdf0e10cSrcweir
53cdf0e10cSrcweir
54cdf0e10cSrcweir //------------------------------------------------------------------------
55cdf0e10cSrcweir // include files
56cdf0e10cSrcweir //------------------------------------------------------------------------
57cdf0e10cSrcweir
58cdf0e10cSrcweir #ifndef _OSL_SOCKET_CONST_H_
59cdf0e10cSrcweir #include <osl_Socket_Const_orig.h>
60cdf0e10cSrcweir #endif
61cdf0e10cSrcweir
62cdf0e10cSrcweir #include <testshl/simpleheader.hxx>
63cdf0e10cSrcweir
64cdf0e10cSrcweir using namespace osl;
65cdf0e10cSrcweir using namespace rtl;
66cdf0e10cSrcweir
67cdf0e10cSrcweir //------------------------------------------------------------------------
68cdf0e10cSrcweir // helper functions
69cdf0e10cSrcweir //------------------------------------------------------------------------
70cdf0e10cSrcweir
71cdf0e10cSrcweir /** compare two OUString.
72cdf0e10cSrcweir */
compareUString(const::rtl::OUString & ustr1,const::rtl::OUString & ustr2)73cdf0e10cSrcweir inline sal_Bool compareUString( const ::rtl::OUString & ustr1, const ::rtl::OUString & ustr2 )
74cdf0e10cSrcweir {
75cdf0e10cSrcweir sal_Bool bOk = ustr1.equalsIgnoreAsciiCase( ustr2 );
76cdf0e10cSrcweir
77cdf0e10cSrcweir return bOk;
78cdf0e10cSrcweir }
79cdf0e10cSrcweir
80cdf0e10cSrcweir /** compare a OUString and an ASCII string.
81cdf0e10cSrcweir */
compareUString(const::rtl::OUString & ustr,const sal_Char * astr)82cdf0e10cSrcweir inline sal_Bool compareUString( const ::rtl::OUString & ustr, const sal_Char *astr )
83cdf0e10cSrcweir {
84cdf0e10cSrcweir ::rtl::OUString ustr2 = rtl::OUString::createFromAscii( astr );
85cdf0e10cSrcweir sal_Bool bOk = ustr.equalsIgnoreAsciiCase( ustr2 );
86cdf0e10cSrcweir
87cdf0e10cSrcweir return bOk;
88cdf0e10cSrcweir }
89cdf0e10cSrcweir
90cdf0e10cSrcweir /** compare two socket address.
91cdf0e10cSrcweir */
compareSocketAddr(const::osl::SocketAddr & addr1,const::osl::SocketAddr & addr2)92cdf0e10cSrcweir inline sal_Bool compareSocketAddr( const ::osl::SocketAddr & addr1 , const ::osl::SocketAddr & addr2 )
93cdf0e10cSrcweir {
94cdf0e10cSrcweir return ( ( sal_True == compareUString( addr1.getHostname( 0 ), addr2.getHostname( 0 ) ) ) && ( addr2.getPort( ) == addr2.getPort( ) ) );
95cdf0e10cSrcweir }
96cdf0e10cSrcweir
oustring2char(const::rtl::OUString & str)97cdf0e10cSrcweir inline char * oustring2char( const ::rtl::OUString & str )
98cdf0e10cSrcweir {
99cdf0e10cSrcweir rtl::OString aString;
100cdf0e10cSrcweir aString = ::rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US );
101cdf0e10cSrcweir return (char *)aString.getStr( );
102cdf0e10cSrcweir }
103cdf0e10cSrcweir
104cdf0e10cSrcweir /** print a UNI_CODE String. And also print some comments of the string.
105cdf0e10cSrcweir */
printUString(const::rtl::OUString & str,const sal_Char * msg="")106cdf0e10cSrcweir inline void printUString( const ::rtl::OUString & str, const sal_Char * msg = "" )
107cdf0e10cSrcweir {
108cdf0e10cSrcweir t_print("#%s #printUString_u# ", msg );
109cdf0e10cSrcweir t_print("%s\n", oustring2char( str ) );
110cdf0e10cSrcweir }
111cdf0e10cSrcweir
112cdf0e10cSrcweir /** get the local host name.
113cdf0e10cSrcweir mindy: gethostbyname( "localhost" ), on Linux, it returns the hostname in /etc/hosts + domain name,
114cdf0e10cSrcweir if no entry in /etc/hosts, it returns "localhost" + domain name
115cdf0e10cSrcweir */
getHost(void)116cdf0e10cSrcweir inline ::rtl::OUString getHost( void )
117cdf0e10cSrcweir {
118cdf0e10cSrcweir struct hostent *hptr;
119cdf0e10cSrcweir
120cdf0e10cSrcweir hptr = gethostbyname( "localhost" );
121cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "#In getHostname function, error on gethostbyname()", hptr != NULL );
122cdf0e10cSrcweir ::rtl::OUString aUString = ::rtl::OUString::createFromAscii( (const sal_Char *) hptr->h_name );
123cdf0e10cSrcweir
124cdf0e10cSrcweir return aUString;
125cdf0e10cSrcweir }
126cdf0e10cSrcweir
127cdf0e10cSrcweir /** get the full host name of the current processor, such as "aegean.prc.sun.com" --mindyliu
128cdf0e10cSrcweir */
getThisHostname(void)129cdf0e10cSrcweir inline ::rtl::OUString getThisHostname( void )
130cdf0e10cSrcweir {
131cdf0e10cSrcweir ::rtl::OUString aUString;
132cdf0e10cSrcweir #ifdef WNT
133cdf0e10cSrcweir struct hostent *hptr;
134cdf0e10cSrcweir hptr = gethostbyname( "localhost" );
135cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "#In getHostname function, error on gethostbyname()", hptr != NULL );
136cdf0e10cSrcweir aUString = ::rtl::OUString::createFromAscii( (const sal_Char *) hptr->h_name );
137cdf0e10cSrcweir #else
138cdf0e10cSrcweir char hostname[255];
139cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "#Error: gethostname failed.", gethostname(hostname, 255) == 0 );
140cdf0e10cSrcweir
141cdf0e10cSrcweir struct hostent *hptr;
142cdf0e10cSrcweir //first search /ets/hosts, then search from dns
143cdf0e10cSrcweir hptr = gethostbyname( hostname);
144cdf0e10cSrcweir if ( hptr != NULL )
145cdf0e10cSrcweir {
146cdf0e10cSrcweir strcpy( hostname, hptr->h_name );
147cdf0e10cSrcweir }
148cdf0e10cSrcweir
149cdf0e10cSrcweir t_print("hostname is %s \n", hostname );
150cdf0e10cSrcweir aUString = ::rtl::OUString::createFromAscii( (const sal_Char *) hostname );
151cdf0e10cSrcweir #endif
152cdf0e10cSrcweir return aUString;
153cdf0e10cSrcweir }
154cdf0e10cSrcweir
155cdf0e10cSrcweir /** get IP by name, search /etc/hosts first, then search from dns, fail return OUString("")
156cdf0e10cSrcweir */
getIPbyName(rtl::OString const & str_name)157cdf0e10cSrcweir inline ::rtl::OUString getIPbyName( rtl::OString const& str_name )
158cdf0e10cSrcweir {
159cdf0e10cSrcweir ::rtl::OUString aUString;
160cdf0e10cSrcweir struct hostent *hptr;
161cdf0e10cSrcweir //first search /ets/hosts, then search from dns
162cdf0e10cSrcweir hptr = gethostbyname( str_name.getStr());
163cdf0e10cSrcweir if ( hptr != NULL )
164cdf0e10cSrcweir {
165cdf0e10cSrcweir struct in_addr ** addrptr;
166cdf0e10cSrcweir addrptr = (struct in_addr **) hptr->h_addr_list ;
167cdf0e10cSrcweir //if there are more than one IPs on the same machine, we select one
168cdf0e10cSrcweir for (; *addrptr; addrptr++)
169cdf0e10cSrcweir {
170cdf0e10cSrcweir t_print("#Local IP Address: %s\n", inet_ntoa(**addrptr));
171cdf0e10cSrcweir aUString = ::rtl::OUString::createFromAscii( (sal_Char *) (inet_ntoa(**addrptr)) );
172cdf0e10cSrcweir }
173cdf0e10cSrcweir }
174cdf0e10cSrcweir return aUString;
175cdf0e10cSrcweir }
176cdf0e10cSrcweir
177cdf0e10cSrcweir /** get local ethernet IP
178cdf0e10cSrcweir */
getLocalIP()179cdf0e10cSrcweir inline ::rtl::OUString getLocalIP( )
180cdf0e10cSrcweir {
181cdf0e10cSrcweir char hostname[255];
182cdf0e10cSrcweir gethostname(hostname, 255);
183cdf0e10cSrcweir
184cdf0e10cSrcweir return getIPbyName( hostname );
185cdf0e10cSrcweir }
186cdf0e10cSrcweir
187cdf0e10cSrcweir /** construct error message
188cdf0e10cSrcweir */
outputError(const::rtl::OUString & returnVal,const::rtl::OUString & rightVal,const sal_Char * msg="")189cdf0e10cSrcweir inline ::rtl::OUString outputError( const ::rtl::OUString & returnVal, const ::rtl::OUString & rightVal, const sal_Char * msg = "")
190cdf0e10cSrcweir {
191cdf0e10cSrcweir ::rtl::OUString aUString;
192cdf0e10cSrcweir if ( returnVal.equals( rightVal ) )
193cdf0e10cSrcweir return aUString;
194cdf0e10cSrcweir aUString += ::rtl::OUString::createFromAscii(msg);
195cdf0e10cSrcweir aUString += ::rtl::OUString::createFromAscii(": the returned value is '");
196cdf0e10cSrcweir aUString += returnVal;
197cdf0e10cSrcweir aUString += ::rtl::OUString::createFromAscii("', but the value should be '");
198cdf0e10cSrcweir aUString += rightVal;
199cdf0e10cSrcweir aUString += ::rtl::OUString::createFromAscii("'.");
200cdf0e10cSrcweir return aUString;
201cdf0e10cSrcweir }
202cdf0e10cSrcweir
203cdf0e10cSrcweir /** wait _nSec seconds.
204cdf0e10cSrcweir */
thread_sleep(sal_Int32 _nSec)205cdf0e10cSrcweir void thread_sleep( sal_Int32 _nSec )
206cdf0e10cSrcweir {
207cdf0e10cSrcweir /// print statement in thread process must use fflush() to force display.
208cdf0e10cSrcweir t_print("# wait %d seconds. ", _nSec );
209cdf0e10cSrcweir fflush(stdout);
210cdf0e10cSrcweir
211cdf0e10cSrcweir #ifdef WNT //Windows
212cdf0e10cSrcweir Sleep( _nSec * 100 );
213cdf0e10cSrcweir #endif
214cdf0e10cSrcweir #if ( defined UNX ) || ( defined OS2 ) //Unix
215cdf0e10cSrcweir usleep(_nSec * 100000);
216cdf0e10cSrcweir #endif
217cdf0e10cSrcweir t_print("# done\n" );
218cdf0e10cSrcweir }
219cdf0e10cSrcweir
220cdf0e10cSrcweir /** print Boolean value.
221cdf0e10cSrcweir */
printBool(sal_Bool bOk)222cdf0e10cSrcweir inline void printBool( sal_Bool bOk )
223cdf0e10cSrcweir {
224cdf0e10cSrcweir t_print("#printBool# " );
225cdf0e10cSrcweir ( sal_True == bOk ) ? t_print("YES!\n" ): t_print("NO!\n" );
226cdf0e10cSrcweir }
227cdf0e10cSrcweir
228cdf0e10cSrcweir /** print content of a ByteSequence.
229cdf0e10cSrcweir */
printByteSequence_IP(const::rtl::ByteSequence & bsByteSeq,sal_Int32 nLen)230cdf0e10cSrcweir inline void printByteSequence_IP( const ::rtl::ByteSequence & bsByteSeq, sal_Int32 nLen )
231cdf0e10cSrcweir {
232cdf0e10cSrcweir t_print("#ByteSequence is: " );
233cdf0e10cSrcweir for ( int i = 0; i < nLen; i++ ){
234cdf0e10cSrcweir if ( bsByteSeq[i] < 0 )
235cdf0e10cSrcweir t_print("%d ", 256 + bsByteSeq[i] );
236cdf0e10cSrcweir else
237cdf0e10cSrcweir t_print("%d ", bsByteSeq[i] );
238cdf0e10cSrcweir }
239cdf0e10cSrcweir t_print(" .\n" );
240cdf0e10cSrcweir }
241cdf0e10cSrcweir
242cdf0e10cSrcweir /** convert an IP which is stored as a UString format to a ByteSequence array for later use.
243cdf0e10cSrcweir */
UStringIPToByteSequence(::rtl::OUString aUStr)244cdf0e10cSrcweir inline ::rtl::ByteSequence UStringIPToByteSequence( ::rtl::OUString aUStr )
245cdf0e10cSrcweir {
246cdf0e10cSrcweir
247cdf0e10cSrcweir rtl::OString aString = ::rtl::OUStringToOString( aUStr, RTL_TEXTENCODING_ASCII_US );
248cdf0e10cSrcweir const sal_Char *pChar = aString.getStr( ) ;
249cdf0e10cSrcweir sal_Char tmpBuffer[4];
250cdf0e10cSrcweir sal_Int32 nCharCounter = 0;
251cdf0e10cSrcweir ::rtl::ByteSequence bsByteSequence( IP_VER );
252cdf0e10cSrcweir sal_Int32 nByteSeqCounter = 0;
253cdf0e10cSrcweir
254cdf0e10cSrcweir for ( int i = 0; i < aString.getLength( ) + 1 ; i++ )
255cdf0e10cSrcweir {
256cdf0e10cSrcweir if ( ( *pChar != '.' ) && ( i !=aString.getLength( ) ) )
257cdf0e10cSrcweir tmpBuffer[nCharCounter++] = *pChar;
258cdf0e10cSrcweir else
259cdf0e10cSrcweir {
260cdf0e10cSrcweir tmpBuffer[nCharCounter] = '\0';
261cdf0e10cSrcweir nCharCounter = 0;
262cdf0e10cSrcweir bsByteSequence[nByteSeqCounter++] = static_cast<sal_Int8>( atoi( tmpBuffer ) );
263cdf0e10cSrcweir }
264cdf0e10cSrcweir pChar++;
265cdf0e10cSrcweir }
266cdf0e10cSrcweir return bsByteSequence;
267cdf0e10cSrcweir }
268cdf0e10cSrcweir
269cdf0e10cSrcweir /** print a socket result name.
270cdf0e10cSrcweir */
printSocketResult(oslSocketResult eResult)271cdf0e10cSrcweir inline void printSocketResult( oslSocketResult eResult )
272cdf0e10cSrcweir {
273cdf0e10cSrcweir t_print("#printSocketResult# " );
274cdf0e10cSrcweir if (!eResult)
275cdf0e10cSrcweir switch (eResult)
276cdf0e10cSrcweir {
277cdf0e10cSrcweir case osl_Socket_Ok:
278cdf0e10cSrcweir t_print("client connected\n");
279cdf0e10cSrcweir break;
280cdf0e10cSrcweir case osl_Socket_Error:
281cdf0e10cSrcweir t_print("got an error ... exiting\r\n\r\n" );
282cdf0e10cSrcweir break;
283cdf0e10cSrcweir case osl_Socket_TimedOut:
284cdf0e10cSrcweir t_print("timeout\n");
285cdf0e10cSrcweir break;
286cdf0e10cSrcweir
287cdf0e10cSrcweir case osl_Socket_FORCE_EQUAL_SIZE:
288cdf0e10cSrcweir t_print("FORCE EQUAL SIZE\n");
289cdf0e10cSrcweir break;
290cdf0e10cSrcweir case osl_Socket_InProgress:
291cdf0e10cSrcweir t_print("In Progress\n");
292cdf0e10cSrcweir break;
293cdf0e10cSrcweir case osl_Socket_Interrupted:
294cdf0e10cSrcweir t_print("Interrupted\n");
295cdf0e10cSrcweir break;
296cdf0e10cSrcweir }
297cdf0e10cSrcweir }
298cdf0e10cSrcweir
299cdf0e10cSrcweir /** Client Socket Thread, served as a temp little client to communicate with server.
300cdf0e10cSrcweir */
301cdf0e10cSrcweir class ClientSocketThread : public Thread
302cdf0e10cSrcweir {
303cdf0e10cSrcweir protected:
304cdf0e10cSrcweir oslThreadIdentifier m_id;
305cdf0e10cSrcweir ::osl::SocketAddr saTargetSocketAddr;
306cdf0e10cSrcweir ::osl::ConnectorSocket csConnectorSocket;
307cdf0e10cSrcweir
run()308cdf0e10cSrcweir void SAL_CALL run( )
309cdf0e10cSrcweir {
310cdf0e10cSrcweir TimeValue *pTimeout;
311cdf0e10cSrcweir pTimeout = ( TimeValue* )malloc( sizeof( TimeValue ) );
312cdf0e10cSrcweir pTimeout->Seconds = 5;
313cdf0e10cSrcweir pTimeout->Nanosec = 0;
314cdf0e10cSrcweir
315cdf0e10cSrcweir /// if the thread should terminate, schedule return false
316cdf0e10cSrcweir //while ( schedule( ) == sal_True )
317cdf0e10cSrcweir //{
318cdf0e10cSrcweir if ( osl_Socket_Ok == csConnectorSocket.connect( saTargetSocketAddr, pTimeout ))
319cdf0e10cSrcweir {
320cdf0e10cSrcweir csConnectorSocket.send( pTestString1, 11 ); // "test socket"
321cdf0e10cSrcweir csConnectorSocket.send( pTestString2, 10);
322cdf0e10cSrcweir }
323cdf0e10cSrcweir else
324cdf0e10cSrcweir t_print("# ClientSocketThread: connect failed! \n");
325cdf0e10cSrcweir // terminate();
326cdf0e10cSrcweir //}
327cdf0e10cSrcweir csConnectorSocket.close();
328cdf0e10cSrcweir free( pTimeout );
329cdf0e10cSrcweir }
330cdf0e10cSrcweir
onTerminated()331cdf0e10cSrcweir void SAL_CALL onTerminated( )
332cdf0e10cSrcweir {
333cdf0e10cSrcweir //t_print("# normally terminate this thread %d!\n", m_id );
334cdf0e10cSrcweir }
335cdf0e10cSrcweir
336cdf0e10cSrcweir public:
ClientSocketThread()337cdf0e10cSrcweir ClientSocketThread( ):
338cdf0e10cSrcweir saTargetSocketAddr( aHostIp1, IP_PORT_MYPORT9 ),
339cdf0e10cSrcweir csConnectorSocket( )
340cdf0e10cSrcweir {
341cdf0e10cSrcweir m_id = getIdentifier( );
342cdf0e10cSrcweir //t_print("# successfully creat this client thread %d!\n", m_id );
343cdf0e10cSrcweir }
344cdf0e10cSrcweir
~ClientSocketThread()345cdf0e10cSrcweir ~ClientSocketThread( )
346cdf0e10cSrcweir {
347cdf0e10cSrcweir if ( isRunning( ) )
348cdf0e10cSrcweir t_print("# error: client thread not terminated.\n" );
349cdf0e10cSrcweir }
350cdf0e10cSrcweir
351cdf0e10cSrcweir };
352cdf0e10cSrcweir
353cdf0e10cSrcweir
354cdf0e10cSrcweir /** Server Socket Thread, served as a temp little server to communicate with client.
355cdf0e10cSrcweir */
356cdf0e10cSrcweir class ServerSocketThread : public Thread
357cdf0e10cSrcweir {
358cdf0e10cSrcweir protected:
359cdf0e10cSrcweir oslThreadIdentifier m_id;
360cdf0e10cSrcweir
run()361cdf0e10cSrcweir void SAL_CALL run( )
362cdf0e10cSrcweir {
363cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket( osl_Socket_FamilyInet, osl_Socket_ProtocolIp, osl_Socket_TypeStream );
364cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIp1, IP_PORT_MYPORT9 );
365cdf0e10cSrcweir ::osl::StreamSocket ssStreamConnection;
366cdf0e10cSrcweir
367cdf0e10cSrcweir //if has not set this option, socket addr can not be binded in some time(maybe 2 minutes) by another socket
368cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //integer not sal_Bool : sal_True);
369cdf0e10cSrcweir while ( schedule( ) == sal_True )
370cdf0e10cSrcweir {
371cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
372cdf0e10cSrcweir if ( sal_True != bOK1 )
373cdf0e10cSrcweir {
374cdf0e10cSrcweir t_print("# ServerSocketThread: AcceptorSocket bind address failed.\n" ) ;
375cdf0e10cSrcweir break;
376cdf0e10cSrcweir }
377cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
378cdf0e10cSrcweir if ( sal_True != bOK2 )
379cdf0e10cSrcweir {
380cdf0e10cSrcweir t_print("# ServerSocketThread: AcceptorSocket listen address failed.\n" ) ;
381cdf0e10cSrcweir break;
382cdf0e10cSrcweir }
383cdf0e10cSrcweir
384cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_False );
385cdf0e10cSrcweir
386cdf0e10cSrcweir oslSocketResult eResult = asAcceptorSocket.acceptConnection( ssStreamConnection );
387cdf0e10cSrcweir if (eResult != osl_Socket_Ok )
388cdf0e10cSrcweir {
389cdf0e10cSrcweir t_print("ServerSocketThread: acceptConnection failed! \n");
390cdf0e10cSrcweir break;
391cdf0e10cSrcweir }
392cdf0e10cSrcweir sal_Int32 nReadNumber1 = ssStreamConnection.recv( pReadBuffer, 11 );
393cdf0e10cSrcweir sal_Int32 nReadNumber2 = ssStreamConnection.recv( pReadBuffer + nReadNumber1, 11 );
394cdf0e10cSrcweir pReadBuffer[nReadNumber1 + nReadNumber2] = '\0';
395cdf0e10cSrcweir //t_print("# read buffer content: %s\n", pReadBuffer );
396cdf0e10cSrcweir break;
397cdf0e10cSrcweir }
398cdf0e10cSrcweir ssStreamConnection.close();
399cdf0e10cSrcweir asAcceptorSocket.close();
400cdf0e10cSrcweir
401cdf0e10cSrcweir }
402cdf0e10cSrcweir
onTerminated()403cdf0e10cSrcweir void SAL_CALL onTerminated( )
404cdf0e10cSrcweir {
405cdf0e10cSrcweir //t_print("# normally terminate this server thread %d!\n", m_id );
406cdf0e10cSrcweir }
407cdf0e10cSrcweir
408cdf0e10cSrcweir public:
409cdf0e10cSrcweir // public to check if data transmition is OK
410cdf0e10cSrcweir sal_Char pReadBuffer[30];
ServerSocketThread()411cdf0e10cSrcweir ServerSocketThread( )
412cdf0e10cSrcweir {
413cdf0e10cSrcweir m_id = getIdentifier( );
414cdf0e10cSrcweir //t_print("# successfully creat this server thread %d!\n", m_id );
415cdf0e10cSrcweir }
416cdf0e10cSrcweir
~ServerSocketThread()417cdf0e10cSrcweir ~ServerSocketThread( )
418cdf0e10cSrcweir {
419cdf0e10cSrcweir if ( isRunning( ) )
420cdf0e10cSrcweir t_print("# error: server thread not terminated.\n" );
421cdf0e10cSrcweir }
422cdf0e10cSrcweir };
423cdf0e10cSrcweir
424cdf0e10cSrcweir // -----------------------------------------------------------------------------
425cdf0e10cSrcweir // Helper functions, to create buffers, check buffers
426cdf0e10cSrcweir class ValueCheckProvider
427cdf0e10cSrcweir {
428cdf0e10cSrcweir bool m_bFoundFailure;
429cdf0e10cSrcweir char *m_pBuffer;
430cdf0e10cSrcweir sal_Int32 m_nBufferSize;
431cdf0e10cSrcweir
432cdf0e10cSrcweir public:
ValueCheckProvider()433cdf0e10cSrcweir ValueCheckProvider()
434cdf0e10cSrcweir :
435cdf0e10cSrcweir m_bFoundFailure(false),
436cdf0e10cSrcweir m_pBuffer(NULL),
437cdf0e10cSrcweir m_nBufferSize(0)
438cdf0e10cSrcweir {
439cdf0e10cSrcweir }
440cdf0e10cSrcweir
isFailure()441cdf0e10cSrcweir bool isFailure() {return m_bFoundFailure;}
442cdf0e10cSrcweir
getBuffer()443cdf0e10cSrcweir const char* getBuffer() {return m_pBuffer;}
getWriteBuffer()444cdf0e10cSrcweir char* getWriteBuffer() {return m_pBuffer;}
445cdf0e10cSrcweir
getBufferSize()446cdf0e10cSrcweir sal_Int32 getBufferSize() {return m_nBufferSize;}
447cdf0e10cSrcweir
checkValues(sal_Int32 _nLength,int _nValue)448cdf0e10cSrcweir bool checkValues(sal_Int32 _nLength, int _nValue)
449cdf0e10cSrcweir {
450cdf0e10cSrcweir m_bFoundFailure = false;
451cdf0e10cSrcweir for(sal_Int32 i=0;i<_nLength;i++)
452cdf0e10cSrcweir {
453cdf0e10cSrcweir if (m_pBuffer[i] != _nValue)
454cdf0e10cSrcweir {
455cdf0e10cSrcweir m_bFoundFailure = true;
456cdf0e10cSrcweir }
457cdf0e10cSrcweir }
458cdf0e10cSrcweir return m_bFoundFailure;
459cdf0e10cSrcweir }
460cdf0e10cSrcweir
createBuffer(sal_Int32 _nLength,int _nValue)461cdf0e10cSrcweir void createBuffer(sal_Int32 _nLength, int _nValue)
462cdf0e10cSrcweir {
463cdf0e10cSrcweir m_nBufferSize = _nLength;
464cdf0e10cSrcweir m_pBuffer = (char*) malloc(m_nBufferSize);
465cdf0e10cSrcweir if (m_pBuffer)
466cdf0e10cSrcweir {
467cdf0e10cSrcweir memset(m_pBuffer, _nValue, m_nBufferSize);
468cdf0e10cSrcweir }
469cdf0e10cSrcweir }
470cdf0e10cSrcweir
freeBuffer()471cdf0e10cSrcweir void freeBuffer()
472cdf0e10cSrcweir {
473cdf0e10cSrcweir if (m_pBuffer) free(m_pBuffer);
474cdf0e10cSrcweir }
475cdf0e10cSrcweir
476cdf0e10cSrcweir };
477cdf0e10cSrcweir
478cdf0e10cSrcweir // -----------------------------------------------------------------------------
479cdf0e10cSrcweir /** Client Socket Thread, served as a temp little client to communicate with server.
480cdf0e10cSrcweir */
481cdf0e10cSrcweir
482cdf0e10cSrcweir class ReadSocketThread : public Thread
483cdf0e10cSrcweir {
484cdf0e10cSrcweir int m_nValue;
485cdf0e10cSrcweir ValueCheckProvider m_aValues;
486cdf0e10cSrcweir
487cdf0e10cSrcweir protected:
488cdf0e10cSrcweir oslThreadIdentifier m_id;
489cdf0e10cSrcweir ::osl::SocketAddr saTargetSocketAddr;
490cdf0e10cSrcweir ::osl::ConnectorSocket csConnectorSocket;
491cdf0e10cSrcweir
run()492cdf0e10cSrcweir void SAL_CALL run( )
493cdf0e10cSrcweir {
494cdf0e10cSrcweir TimeValue *pTimeout;
495cdf0e10cSrcweir pTimeout = ( TimeValue* )malloc( sizeof( TimeValue ) );
496cdf0e10cSrcweir pTimeout->Seconds = 5;
497cdf0e10cSrcweir pTimeout->Nanosec = 0;
498cdf0e10cSrcweir
499cdf0e10cSrcweir /// if the thread should terminate, schedule return false
500cdf0e10cSrcweir //while ( schedule( ) == sal_True )
501cdf0e10cSrcweir //{
502cdf0e10cSrcweir if ( osl_Socket_Ok == csConnectorSocket.connect( saTargetSocketAddr, pTimeout ))
503cdf0e10cSrcweir {
504cdf0e10cSrcweir sal_Int32 nReadCount = csConnectorSocket.read( m_aValues.getWriteBuffer(), m_aValues.getBufferSize() );
505cdf0e10cSrcweir m_aValues.checkValues(nReadCount, m_nValue);
506cdf0e10cSrcweir }
507cdf0e10cSrcweir else
508cdf0e10cSrcweir {
509cdf0e10cSrcweir t_print("# ReadSocketThread: connect failed! \n");
510cdf0e10cSrcweir }
511cdf0e10cSrcweir // terminate();
512cdf0e10cSrcweir //}
513cdf0e10cSrcweir //remove this line for deadlock on solaris( margritte.germany )
514cdf0e10cSrcweir csConnectorSocket.close();
515cdf0e10cSrcweir free( pTimeout );
516cdf0e10cSrcweir }
517cdf0e10cSrcweir
onTerminated()518cdf0e10cSrcweir void SAL_CALL onTerminated( )
519cdf0e10cSrcweir {
520cdf0e10cSrcweir //t_print("# normally terminate this thread %d!\n", m_id );
521cdf0e10cSrcweir }
522cdf0e10cSrcweir
523cdf0e10cSrcweir public:
getCount()524cdf0e10cSrcweir sal_Int32 getCount() {return m_aValues.getBufferSize();}
isOk()525cdf0e10cSrcweir bool isOk() {return m_aValues.isFailure() == true ? false : true;}
526cdf0e10cSrcweir
ReadSocketThread(sal_Int32 _nBufferSize,int _nValue)527cdf0e10cSrcweir ReadSocketThread(sal_Int32 _nBufferSize, int _nValue )
528cdf0e10cSrcweir :
529cdf0e10cSrcweir m_nValue( _nValue ),
530cdf0e10cSrcweir saTargetSocketAddr( aHostIp1, IP_PORT_MYPORT10 ),
531cdf0e10cSrcweir csConnectorSocket( )
532cdf0e10cSrcweir {
533cdf0e10cSrcweir m_id = getIdentifier( );
534cdf0e10cSrcweir //t_print("# successfully creat this client thread %d!\n", m_id );
535cdf0e10cSrcweir m_aValues.createBuffer(_nBufferSize, 0);
536cdf0e10cSrcweir }
537cdf0e10cSrcweir
~ReadSocketThread()538cdf0e10cSrcweir ~ReadSocketThread( )
539cdf0e10cSrcweir {
540cdf0e10cSrcweir if ( isRunning( ) )
541cdf0e10cSrcweir t_print("# error: client thread not terminated.\n" );
542cdf0e10cSrcweir m_aValues.freeBuffer();
543cdf0e10cSrcweir }
544cdf0e10cSrcweir
545cdf0e10cSrcweir };
546cdf0e10cSrcweir
547cdf0e10cSrcweir /** Server Socket Thread, write a file which is large
548cdf0e10cSrcweir */
549cdf0e10cSrcweir class WriteSocketThread : public Thread
550cdf0e10cSrcweir {
551cdf0e10cSrcweir ValueCheckProvider m_aValues;
552cdf0e10cSrcweir
553cdf0e10cSrcweir protected:
554cdf0e10cSrcweir oslThreadIdentifier m_id;
555cdf0e10cSrcweir
run()556cdf0e10cSrcweir void SAL_CALL run( )
557cdf0e10cSrcweir {
558cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket( osl_Socket_FamilyInet, osl_Socket_ProtocolIp, osl_Socket_TypeStream );
559cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIp1, IP_PORT_MYPORT10 );
560cdf0e10cSrcweir ::osl::StreamSocket ssStreamConnection;
561cdf0e10cSrcweir
562cdf0e10cSrcweir //if has not set this option, socket addr can not be binded in some time(maybe 2 minutes) by another socket
563cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
564cdf0e10cSrcweir
565cdf0e10cSrcweir /// if the thread should terminate, schedule return false
566cdf0e10cSrcweir while ( schedule( ) == sal_True )
567cdf0e10cSrcweir {
568cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
569cdf0e10cSrcweir if ( sal_True != bOK1 )
570cdf0e10cSrcweir {
571cdf0e10cSrcweir t_print("# WriteSocketThread: AcceptorSocket bind address failed. \n" ) ;
572cdf0e10cSrcweir break;
573cdf0e10cSrcweir }
574cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
575cdf0e10cSrcweir if ( sal_True != bOK2 )
576cdf0e10cSrcweir {
577cdf0e10cSrcweir t_print("# WriteSocketThread: AcceptorSocket listen address failed. \n" ) ;
578cdf0e10cSrcweir break;
579cdf0e10cSrcweir }
580cdf0e10cSrcweir // blocking mode, if read/recv failed, block until success
581cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_False);
582cdf0e10cSrcweir
583cdf0e10cSrcweir oslSocketResult eResult = asAcceptorSocket.acceptConnection( ssStreamConnection );
584cdf0e10cSrcweir if (eResult != osl_Socket_Ok )
585cdf0e10cSrcweir {
586cdf0e10cSrcweir t_print("WriteSocketThread: acceptConnection failed! \n");
587cdf0e10cSrcweir break;
588cdf0e10cSrcweir }
589cdf0e10cSrcweir
590cdf0e10cSrcweir ssStreamConnection.write( m_aValues.getBuffer(), m_aValues.getBufferSize() );
591cdf0e10cSrcweir break;
592cdf0e10cSrcweir }
593cdf0e10cSrcweir ssStreamConnection.close();
594cdf0e10cSrcweir asAcceptorSocket.close();
595cdf0e10cSrcweir }
596cdf0e10cSrcweir
onTerminated()597cdf0e10cSrcweir void SAL_CALL onTerminated( )
598cdf0e10cSrcweir {
599cdf0e10cSrcweir //t_print("# normally terminate this server thread %d!\n", m_id );
600cdf0e10cSrcweir }
601cdf0e10cSrcweir
602cdf0e10cSrcweir public:
603cdf0e10cSrcweir // public to check if data transmition is OK
WriteSocketThread(sal_Int32 _nBufferSize,int _nValue)604cdf0e10cSrcweir WriteSocketThread(sal_Int32 _nBufferSize, int _nValue )
605cdf0e10cSrcweir {
606cdf0e10cSrcweir m_id = getIdentifier( );
607cdf0e10cSrcweir //t_print("# successfully creat this server thread %d!\n", m_id );
608cdf0e10cSrcweir
609cdf0e10cSrcweir m_aValues.createBuffer(_nBufferSize, _nValue);
610cdf0e10cSrcweir }
611cdf0e10cSrcweir
~WriteSocketThread()612cdf0e10cSrcweir ~WriteSocketThread( )
613cdf0e10cSrcweir {
614cdf0e10cSrcweir if ( isRunning( ) )
615cdf0e10cSrcweir t_print("# error: server thread not terminated.\n" );
616cdf0e10cSrcweir m_aValues.freeBuffer();
617cdf0e10cSrcweir }
618cdf0e10cSrcweir
619cdf0e10cSrcweir };
620cdf0e10cSrcweir
621cdf0e10cSrcweir // -----------------------------------------------------------------------------
622cdf0e10cSrcweir // just used to test socket::close() when accepting
623cdf0e10cSrcweir class AcceptorThread : public Thread
624cdf0e10cSrcweir {
625cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket;
626cdf0e10cSrcweir ::rtl::OUString aHostIP;
627cdf0e10cSrcweir sal_Bool bOK;
628cdf0e10cSrcweir protected:
run()629cdf0e10cSrcweir void SAL_CALL run( )
630cdf0e10cSrcweir {
631cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIP, IP_PORT_MYPORT9 );
632cdf0e10cSrcweir ::osl::StreamSocket ssStreamConnection;
633cdf0e10cSrcweir
634cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //integer not sal_Bool : sal_True);
635cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
636cdf0e10cSrcweir if ( sal_True != bOK1 )
637cdf0e10cSrcweir {
638cdf0e10cSrcweir t_print("# AcceptorSocket bind address failed.\n" ) ;
639cdf0e10cSrcweir return;
640cdf0e10cSrcweir }
641cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
642cdf0e10cSrcweir if ( sal_True != bOK2 )
643cdf0e10cSrcweir {
644cdf0e10cSrcweir t_print("# AcceptorSocket listen address failed.\n" ) ;
645cdf0e10cSrcweir return;
646cdf0e10cSrcweir }
647cdf0e10cSrcweir
648cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_False );
649cdf0e10cSrcweir
650cdf0e10cSrcweir oslSocketResult eResult = asAcceptorSocket.acceptConnection( ssStreamConnection );
651cdf0e10cSrcweir if (eResult != osl_Socket_Ok )
652cdf0e10cSrcweir {
653cdf0e10cSrcweir bOK = sal_True;
654cdf0e10cSrcweir t_print("AcceptorThread: acceptConnection failed! \n");
655cdf0e10cSrcweir }
656cdf0e10cSrcweir }
657cdf0e10cSrcweir public:
AcceptorThread(::osl::AcceptorSocket & asSocket,::rtl::OUString & aBindIP)658cdf0e10cSrcweir AcceptorThread(::osl::AcceptorSocket & asSocket, ::rtl::OUString & aBindIP )
659cdf0e10cSrcweir : asAcceptorSocket( asSocket ), aHostIP( aBindIP )
660cdf0e10cSrcweir {
661cdf0e10cSrcweir bOK = sal_False;
662cdf0e10cSrcweir }
663cdf0e10cSrcweir
isOK()664cdf0e10cSrcweir sal_Bool isOK() { return bOK; }
665cdf0e10cSrcweir
~AcceptorThread()666cdf0e10cSrcweir ~AcceptorThread( )
667cdf0e10cSrcweir {
668cdf0e10cSrcweir if ( isRunning( ) )
669cdf0e10cSrcweir {
670cdf0e10cSrcweir asAcceptorSocket.shutdown();
671cdf0e10cSrcweir t_print("# error: Acceptor thread not terminated.\n" );
672cdf0e10cSrcweir }
673cdf0e10cSrcweir }
674cdf0e10cSrcweir };
675cdf0e10cSrcweir
676cdf0e10cSrcweir class CloseSocketThread : public Thread
677cdf0e10cSrcweir {
678cdf0e10cSrcweir ::osl::Socket m_sSocket;
679cdf0e10cSrcweir protected:
run()680cdf0e10cSrcweir void SAL_CALL run( )
681cdf0e10cSrcweir {
682cdf0e10cSrcweir thread_sleep( 1 );
683cdf0e10cSrcweir m_sSocket.close( );
684cdf0e10cSrcweir }
685cdf0e10cSrcweir public:
CloseSocketThread(::osl::Socket & sSocket)686cdf0e10cSrcweir CloseSocketThread(::osl::Socket & sSocket )
687cdf0e10cSrcweir : m_sSocket( sSocket )
688cdf0e10cSrcweir {
689cdf0e10cSrcweir }
690cdf0e10cSrcweir
~CloseSocketThread()691cdf0e10cSrcweir ~CloseSocketThread( )
692cdf0e10cSrcweir {
693cdf0e10cSrcweir if ( isRunning( ) )
694cdf0e10cSrcweir {
695cdf0e10cSrcweir t_print("# error: CloseSocketThread not terminated.\n" );
696cdf0e10cSrcweir }
697cdf0e10cSrcweir }
698cdf0e10cSrcweir };
699cdf0e10cSrcweir
700cdf0e10cSrcweir //------------------------------------------------------------------------
701cdf0e10cSrcweir // tests cases begins here
702cdf0e10cSrcweir //------------------------------------------------------------------------
703cdf0e10cSrcweir
704cdf0e10cSrcweir namespace osl_SocketAddr
705cdf0e10cSrcweir {
706cdf0e10cSrcweir
707cdf0e10cSrcweir /** testing the methods:
708cdf0e10cSrcweir inline SocketAddr();
709cdf0e10cSrcweir inline SocketAddr(const SocketAddr& Addr);
710cdf0e10cSrcweir inline SocketAddr(const oslSocketAddr , __osl_socket_NoCopy nocopy );
711cdf0e10cSrcweir inline SocketAddr(oslSocketAddr Addr);
712cdf0e10cSrcweir inline SocketAddr( const ::rtl::OUString& strAddrOrHostName, sal_Int32 nPort );
713cdf0e10cSrcweir */
714cdf0e10cSrcweir
715cdf0e10cSrcweir class ctors : public CppUnit::TestFixture
716cdf0e10cSrcweir {
717cdf0e10cSrcweir public:
718cdf0e10cSrcweir
ctors_none()719cdf0e10cSrcweir void ctors_none()
720cdf0e10cSrcweir {
721cdf0e10cSrcweir /// SocketAddr constructor.
722cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr;
723cdf0e10cSrcweir
724cdf0e10cSrcweir // oslSocketResult aResult;
725cdf0e10cSrcweir // rtl::OUString suHost = saSocketAddr.getLocalHostname( &aResult);
726cdf0e10cSrcweir
727cdf0e10cSrcweir // rtl::OUString suHost2 = getThisHostname();
728cdf0e10cSrcweir
729cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("test for none parameter constructor function: check if the socket address was created successfully",
730cdf0e10cSrcweir sal_True == saSocketAddr.is( ) );
731cdf0e10cSrcweir }
732cdf0e10cSrcweir
ctors_none_000()733cdf0e10cSrcweir void ctors_none_000()
734cdf0e10cSrcweir {
735cdf0e10cSrcweir /// SocketAddr constructor.
736cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr;
737cdf0e10cSrcweir
738cdf0e10cSrcweir oslSocketResult aResult;
739cdf0e10cSrcweir rtl::OUString suHost = saSocketAddr.getLocalHostname( &aResult);
740cdf0e10cSrcweir rtl::OUString suHost2 = getThisHostname();
741cdf0e10cSrcweir
742cdf0e10cSrcweir sal_Bool bOk = compareUString(suHost, suHost2);
743cdf0e10cSrcweir
744cdf0e10cSrcweir rtl::OUString suError = rtl::OUString::createFromAscii("Host names should be the same. From SocketAddr.getLocalHostname() it is'");
745cdf0e10cSrcweir suError += suHost;
746cdf0e10cSrcweir suError += rtl::OUString::createFromAscii("', from getThisHostname() it is '");
747cdf0e10cSrcweir suError += suHost2;
748cdf0e10cSrcweir suError += rtl::OUString::createFromAscii("'.");
749cdf0e10cSrcweir
750cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE(suError, sal_True == bOk);
751cdf0e10cSrcweir }
752cdf0e10cSrcweir
ctors_copy()753cdf0e10cSrcweir void ctors_copy()
754cdf0e10cSrcweir {
755cdf0e10cSrcweir /// SocketAddr copy constructor.
756cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostName1, IP_PORT_HTTP1 );
757cdf0e10cSrcweir ::osl::SocketAddr saCopySocketAddr( saSocketAddr );
758cdf0e10cSrcweir
759cdf0e10cSrcweir sal_Int32 nPort = saCopySocketAddr.getPort( );
760cdf0e10cSrcweir
761cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("test for SocketAddr copy constructor function: copy constructor, do an action of copy construction then check the port with original set.",
762cdf0e10cSrcweir ( sal_True == saCopySocketAddr.is( ) ) && ( nPort == IP_PORT_HTTP1 ) );
763cdf0e10cSrcweir }
764cdf0e10cSrcweir
ctors_copy_no_001()765cdf0e10cSrcweir void ctors_copy_no_001()
766cdf0e10cSrcweir {
767cdf0e10cSrcweir #if 0
768cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostName1, IP_PORT_HTTP1 );
769cdf0e10cSrcweir oslSocketAddr psaOSLSocketAddr = saSocketAddr.getHandle( );
770cdf0e10cSrcweir
771cdf0e10cSrcweir ::osl::SocketAddr saSocketAddrCopy( psaOSLSocketAddr, SAL_NO_COPY );
772cdf0e10cSrcweir saSocketAddrCopy.setPort( IP_PORT_HTTP2 );
773cdf0e10cSrcweir
774cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("test for SocketAddr no copy constructor function: do a no copy constructor on a given SocketAddr instance, modify the new instance's port, check the original one.",
775cdf0e10cSrcweir saSocketAddr.getPort( ) == IP_PORT_HTTP2 );
776cdf0e10cSrcweir #endif
777cdf0e10cSrcweir ::osl::SocketAddr* pSocketAddr = new ::osl::SocketAddr( aHostName1, IP_PORT_HTTP1 );
778cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("check for new SocketAddr", pSocketAddr != NULL);
779cdf0e10cSrcweir
780cdf0e10cSrcweir oslSocketAddr psaOSLSocketAddr = pSocketAddr->getHandle( );
781cdf0e10cSrcweir
782cdf0e10cSrcweir ::osl::SocketAddr* pSocketAddrCopy = new ::osl::SocketAddr( psaOSLSocketAddr, SAL_NO_COPY );
783cdf0e10cSrcweir
784cdf0e10cSrcweir pSocketAddrCopy->setPort( IP_PORT_HTTP2 );
785cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("test for SocketAddr no copy constructor function: do a no copy constructor on a given SocketAddr instance, modify the new instance's port, check the original one.",
786cdf0e10cSrcweir pSocketAddr->getPort( ) == IP_PORT_HTTP2 );
787cdf0e10cSrcweir
788cdf0e10cSrcweir delete pSocketAddrCopy;
789cdf0e10cSrcweir // LLA: don't do this also: delete pSocketAddr;
790cdf0e10cSrcweir }
791cdf0e10cSrcweir
ctors_copy_no_002()792cdf0e10cSrcweir void ctors_copy_no_002()
793cdf0e10cSrcweir {
794cdf0e10cSrcweir ::osl::SocketAddr* pSocketAddr = new ::osl::SocketAddr( aHostName1, IP_PORT_HTTP1 );
795cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("check for new SocketAddr", pSocketAddr != NULL);
796cdf0e10cSrcweir oslSocketAddr psaOSLSocketAddr = pSocketAddr->getHandle( );
797cdf0e10cSrcweir ::osl::SocketAddr* pSocketAddrCopy = new ::osl::SocketAddr( psaOSLSocketAddr, SAL_NO_COPY );
798cdf0e10cSrcweir
799cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("test for SocketAddr no copy constructor function: do a no copy constructor on a given SocketAddr instance, modify the new instance's port, check the original one.",
800cdf0e10cSrcweir pSocketAddr->getHandle( ) == pSocketAddrCopy->getHandle( ) );
801cdf0e10cSrcweir
802cdf0e10cSrcweir delete pSocketAddrCopy;
803cdf0e10cSrcweir }
804cdf0e10cSrcweir
ctors_copy_handle_001()805cdf0e10cSrcweir void ctors_copy_handle_001()
806cdf0e10cSrcweir {
807cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostName1, IP_PORT_HTTP1 );
808cdf0e10cSrcweir ::osl::SocketAddr saSocketAddrCopy( saSocketAddr.getHandle( ) );
809cdf0e10cSrcweir
810cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("test for SocketAddr copy handle constructor function: copy another Socket's handle, get its port to check copy effect.",
811cdf0e10cSrcweir saSocketAddrCopy.getPort( ) == IP_PORT_HTTP1 );
812cdf0e10cSrcweir }
813cdf0e10cSrcweir
ctors_copy_handle_002()814cdf0e10cSrcweir void ctors_copy_handle_002()
815cdf0e10cSrcweir {
816cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostName1, IP_PORT_HTTP1 );
817cdf0e10cSrcweir ::osl::SocketAddr saSocketAddrCopy( saSocketAddr.getHandle( ) );
818cdf0e10cSrcweir saSocketAddrCopy.setPort( IP_PORT_HTTP2 );
819cdf0e10cSrcweir
820cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("test for SocketAddr copy handle constructor function: copy another Socket's handle, the original one should not be changed.",
821cdf0e10cSrcweir saSocketAddr.getPort( ) != IP_PORT_HTTP2 );
822cdf0e10cSrcweir }
823cdf0e10cSrcweir
ctors_hostname_port_001()824cdf0e10cSrcweir void ctors_hostname_port_001()
825cdf0e10cSrcweir {
826cdf0e10cSrcweir /// tcpip-specif constructor.
827cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIp1, IP_PORT_FTP );
828cdf0e10cSrcweir printUString(saSocketAddr.getHostname( ), "ctors_hostname_port_001:getHostname");
829cdf0e10cSrcweir
830cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("test for SocketAddr tcpip specif constructor function: do a constructor using tcpip spec, check the result.",
831cdf0e10cSrcweir saSocketAddr.is( ) == sal_True &&
832cdf0e10cSrcweir ( saSocketAddr.getPort( ) == IP_PORT_FTP )/*&&
833cdf0e10cSrcweir ( sal_True == compareUString( saSocketAddr.getHostname( ), aHostName1 ) ) */);
834cdf0e10cSrcweir }
835cdf0e10cSrcweir
836cdf0e10cSrcweir //same as is_002
ctors_hostname_port_002()837cdf0e10cSrcweir void ctors_hostname_port_002()
838cdf0e10cSrcweir {
839cdf0e10cSrcweir /// tcpip-specif constructor.
840cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIpInval1, IP_PORT_MYPORT2 );
841cdf0e10cSrcweir
842cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("test for SocketAddr tcpip specif constructor function: using an invalid IP address, the socketaddr ctors should fail", sal_False == saSocketAddr.is( ));
843cdf0e10cSrcweir }
844cdf0e10cSrcweir CPPUNIT_TEST_SUITE( ctors );
845cdf0e10cSrcweir CPPUNIT_TEST( ctors_none );
846cdf0e10cSrcweir CPPUNIT_TEST( ctors_none_000 );
847cdf0e10cSrcweir CPPUNIT_TEST( ctors_copy );
848cdf0e10cSrcweir CPPUNIT_TEST( ctors_copy_no_001 );
849cdf0e10cSrcweir CPPUNIT_TEST( ctors_copy_no_002 );
850cdf0e10cSrcweir CPPUNIT_TEST( ctors_copy_handle_001 );
851cdf0e10cSrcweir CPPUNIT_TEST( ctors_copy_handle_002 );
852cdf0e10cSrcweir CPPUNIT_TEST( ctors_hostname_port_001 );
853cdf0e10cSrcweir CPPUNIT_TEST( ctors_hostname_port_002 );
854cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
855cdf0e10cSrcweir
856cdf0e10cSrcweir }; // class ctors
857cdf0e10cSrcweir
858cdf0e10cSrcweir
859cdf0e10cSrcweir /** testing the method:
860cdf0e10cSrcweir inline sal_Bool is() const;
861cdf0e10cSrcweir */
862cdf0e10cSrcweir
863cdf0e10cSrcweir class is : public CppUnit::TestFixture
864cdf0e10cSrcweir {
865cdf0e10cSrcweir public:
is_001()866cdf0e10cSrcweir void is_001()
867cdf0e10cSrcweir {
868cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr;
869cdf0e10cSrcweir
870cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("test for is() function: create an unknown type socket, it should be True when call is.",
871cdf0e10cSrcweir sal_True == saSocketAddr.is( ) );
872cdf0e10cSrcweir }
873cdf0e10cSrcweir // refer to setPort_003()
is_002()874cdf0e10cSrcweir void is_002()
875cdf0e10cSrcweir {
876cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIp1, IP_PORT_INVAL );
877cdf0e10cSrcweir
878cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("test for is() function: create a tcp-ip socket using invalid port number",
879cdf0e10cSrcweir sal_True == saSocketAddr.is( ) );
880cdf0e10cSrcweir }
881cdf0e10cSrcweir
is_003()882cdf0e10cSrcweir void is_003()
883cdf0e10cSrcweir {
884cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIpInval1, IP_PORT_MYPORT );
885cdf0e10cSrcweir
886cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("test for is() function: create a tcp-ip socket using invalid Ip number",
887cdf0e10cSrcweir sal_True != saSocketAddr.is( ) );
888cdf0e10cSrcweir }
889cdf0e10cSrcweir
890cdf0e10cSrcweir CPPUNIT_TEST_SUITE( is );
891cdf0e10cSrcweir CPPUNIT_TEST( is_001 );
892cdf0e10cSrcweir CPPUNIT_TEST( is_002 );
893cdf0e10cSrcweir CPPUNIT_TEST( is_003 );
894cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
895cdf0e10cSrcweir
896cdf0e10cSrcweir }; // class is
897cdf0e10cSrcweir
898cdf0e10cSrcweir
899cdf0e10cSrcweir /** testing the method:
900cdf0e10cSrcweir inline ::rtl::OUString SAL_CALL getHostname( oslSocketResult *pResult = 0 ) const;
901cdf0e10cSrcweir */
902cdf0e10cSrcweir
903cdf0e10cSrcweir class getHostname : public CppUnit::TestFixture
904cdf0e10cSrcweir {
905cdf0e10cSrcweir public:
setUp()906cdf0e10cSrcweir void setUp()
907cdf0e10cSrcweir {
908cdf0e10cSrcweir }
909cdf0e10cSrcweir
tearDown()910cdf0e10cSrcweir void tearDown()
911cdf0e10cSrcweir {
912cdf0e10cSrcweir }
913cdf0e10cSrcweir
getHostname_000()914cdf0e10cSrcweir void getHostname_000()
915cdf0e10cSrcweir {
916cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIp4, IP_PORT_FTP );
917cdf0e10cSrcweir
918cdf0e10cSrcweir }
919cdf0e10cSrcweir
920cdf0e10cSrcweir /** it will search the Ip in current machine's /etc/hosts at first, if find, then return the
921cdf0e10cSrcweir mapped hostname, otherwise, it will search via DNS server, and often return hostname+ Domain name
922cdf0e10cSrcweir like "sceri.PRC.Sun.COM"
923cdf0e10cSrcweir The process is same as Socket::getLocalHost(), but getLocalHost can only return hostname of the current machine.
924cdf0e10cSrcweir */
getHostname_001()925cdf0e10cSrcweir void getHostname_001()
926cdf0e10cSrcweir {
927cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIp4, IP_PORT_FTP );
928cdf0e10cSrcweir rtl::OUString suResult = saSocketAddr.getHostname( 0 );
929cdf0e10cSrcweir rtl::OUString suError = outputError(suResult, aHostName4, "test for getHostname(0)");
930cdf0e10cSrcweir sal_Bool bOK = compareUString( suResult, aHostName4 );
931cdf0e10cSrcweir // search the returned hostname in /etc/hosts, if find, and the IP in the row is same as IP
932cdf0e10cSrcweir // in the Addr, it's right also.
933cdf0e10cSrcweir if ( bOK == sal_False)
934cdf0e10cSrcweir {
935cdf0e10cSrcweir if ( compareUString( getIPbyName( oustring2char( suResult ) ), aHostIp4 ) == sal_True )
936cdf0e10cSrcweir bOK = sal_True;
937cdf0e10cSrcweir }
938cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( suError, sal_True == bOK);
939cdf0e10cSrcweir }
940cdf0e10cSrcweir
941cdf0e10cSrcweir // LLA: now we have to control, if this behaviour is right.
942cdf0e10cSrcweir // LLA: this function does not work in company (Linux, Windows) but at home
getHostname_002()943cdf0e10cSrcweir void getHostname_002()
944cdf0e10cSrcweir {
945cdf0e10cSrcweir rtl::OUString suHostname = rtl::OUString::createFromAscii("cn-1.germany.sun.com");
946cdf0e10cSrcweir rtl::OUString aHostIP = getIPbyName( oustring2char( suHostname ) );
947cdf0e10cSrcweir
948cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostName1, IP_PORT_FTP );
949cdf0e10cSrcweir sal_Bool bOK = saSocketAddr.setHostname( suHostname );
950cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("#SocketAddr.setHostname failed", sal_True == bOK );
951cdf0e10cSrcweir oslSocketResult aResult;
952cdf0e10cSrcweir rtl::OUString suResult = saSocketAddr.getHostname( &aResult );
953cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("SocketAddr.getHostname failed.", aResult == osl_Socket_Ok);
954cdf0e10cSrcweir
955cdf0e10cSrcweir rtl::OUString suError = outputError(suResult, suHostname, "test for getHostname(0)");
956cdf0e10cSrcweir bOK = compareUString( suResult, suHostname );
957cdf0e10cSrcweir if ( bOK == sal_False)
958cdf0e10cSrcweir {
959cdf0e10cSrcweir rtl::OString aString = ::rtl::OUStringToOString( suResult, RTL_TEXTENCODING_ASCII_US );
960cdf0e10cSrcweir if ( compareUString( getIPbyName( aString) , aHostIp6 ) == sal_True )
961cdf0e10cSrcweir {
962cdf0e10cSrcweir bOK = sal_True;
963cdf0e10cSrcweir }
964cdf0e10cSrcweir }
965cdf0e10cSrcweir
966cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( suError, sal_True == bOK );
967cdf0e10cSrcweir }
968cdf0e10cSrcweir
969cdf0e10cSrcweir
970cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getHostname );
971cdf0e10cSrcweir CPPUNIT_TEST( getHostname_001 );
972cdf0e10cSrcweir CPPUNIT_TEST( getHostname_002 );
973cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
974cdf0e10cSrcweir
975cdf0e10cSrcweir }; // class getHostname
976cdf0e10cSrcweir
977cdf0e10cSrcweir
978cdf0e10cSrcweir /** testing the method:
979cdf0e10cSrcweir inline sal_Int32 SAL_CALL getPort() const;
980cdf0e10cSrcweir */
981cdf0e10cSrcweir
982cdf0e10cSrcweir class getPort : public CppUnit::TestFixture
983cdf0e10cSrcweir {
984cdf0e10cSrcweir public:
getPort_001()985cdf0e10cSrcweir void getPort_001()
986cdf0e10cSrcweir {
987cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIp1, IP_PORT_FTP );
988cdf0e10cSrcweir
989cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getPort() function: get a normal port number.",
990cdf0e10cSrcweir IP_PORT_FTP == saSocketAddr.getPort( ) );
991cdf0e10cSrcweir }
992cdf0e10cSrcweir
getPort_002()993cdf0e10cSrcweir void getPort_002()
994cdf0e10cSrcweir {
995cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIp2, IP_PORT_INVAL );
996cdf0e10cSrcweir
997cdf0e10cSrcweir //t_print("#getPort_002: Port number is %d \n", saSocketAddr.getPort( ));
998cdf0e10cSrcweir
999cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getPort( ) function: give an invalid port to a SocketAddr, get the port to see if it can detect. it did not pass in (W32).",
1000cdf0e10cSrcweir saSocketAddr.getPort( )>=1 && saSocketAddr.getPort( ) <= 65535 );
1001cdf0e10cSrcweir }
1002cdf0e10cSrcweir //two cases will return OSL_INVALID_PORT: 1. not valid SocketAddr
1003cdf0e10cSrcweir //2. SocketAddr family is not osl_Socket_FamilyInet, but case 2 could not be constructed
getPort_003()1004cdf0e10cSrcweir void getPort_003()
1005cdf0e10cSrcweir {
1006cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIpInval1, IP_PORT_MYPORT );
1007cdf0e10cSrcweir
1008cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getPort( ) function: give an invalid IP to a SocketAddr, get the port to see returned value. ",
1009cdf0e10cSrcweir saSocketAddr.getPort( ) == OSL_INVALID_PORT );
1010cdf0e10cSrcweir }
1011cdf0e10cSrcweir
1012cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getPort );
1013cdf0e10cSrcweir CPPUNIT_TEST( getPort_001 );
1014cdf0e10cSrcweir CPPUNIT_TEST( getPort_002 );
1015cdf0e10cSrcweir CPPUNIT_TEST( getPort_003 );
1016cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( );
1017cdf0e10cSrcweir
1018cdf0e10cSrcweir }; // class getPort
1019cdf0e10cSrcweir
1020cdf0e10cSrcweir
1021cdf0e10cSrcweir /** testing the method:
1022cdf0e10cSrcweir inline sal_Bool SAL_CALL setPort( sal_Int32 nPort );
1023cdf0e10cSrcweir rfc1413.txt: TCP port numbers are from 1-65535
1024cdf0e10cSrcweir rfc1700.txt: 0/tcp Reserved ; 0/udp Reserved
1025cdf0e10cSrcweir */
1026cdf0e10cSrcweir
1027cdf0e10cSrcweir class setPort : public CppUnit::TestFixture
1028cdf0e10cSrcweir {
1029cdf0e10cSrcweir public:
setPort_001()1030cdf0e10cSrcweir void setPort_001()
1031cdf0e10cSrcweir {
1032cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIp1, IP_PORT_FTP );
1033cdf0e10cSrcweir sal_Bool bOK = saSocketAddr.setPort( IP_PORT_TELNET );
1034cdf0e10cSrcweir
1035cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for setPort() function: modify a port number setting, and check it.",
1036cdf0e10cSrcweir ( sal_True == bOK ) &&
1037cdf0e10cSrcweir ( IP_PORT_TELNET == saSocketAddr.getPort( ) ) );
1038cdf0e10cSrcweir }
1039cdf0e10cSrcweir
1040cdf0e10cSrcweir /** 0 to 1024 is known as the reserved port range (traditionally only root can assign programs to ports in
1041cdf0e10cSrcweir this range) and the ephemeral port range from 1025 to 65535.
1042cdf0e10cSrcweir As many of you programmers will know, when you specify the source port of 0 when you connect to a host,
1043cdf0e10cSrcweir the OS automatically reassigns the port number to high numbered ephemeral port. The same happens if you
1044cdf0e10cSrcweir try to bind a listening socket to port 0.
1045cdf0e10cSrcweir http://www.securiteam.com/securityreviews/5XP0Q2AAKS.html
1046cdf0e10cSrcweir another: http://www.muq.org/~cynbe/muq/mufref_564.html
1047cdf0e10cSrcweir */
setPort_002()1048cdf0e10cSrcweir void setPort_002()
1049cdf0e10cSrcweir {
1050cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIp1, IP_PORT_FTP );
1051cdf0e10cSrcweir sal_Bool bOK = saSocketAddr.setPort( IP_PORT_ZERO );
1052cdf0e10cSrcweir
1053cdf0e10cSrcweir oslSocket sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
1054cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
1055cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 );//sal_True);
1056cdf0e10cSrcweir sal_Bool bOK1 = sSocket.bind( saSocketAddr );
1057cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "bind SocketAddr failed", bOK1 == sal_True );
1058cdf0e10cSrcweir
1059cdf0e10cSrcweir sal_Int32 newPort = sSocket.getLocalPort();
1060cdf0e10cSrcweir //t_print("#new port is %d\n", newPort );
1061cdf0e10cSrcweir
1062cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for setPort() function: port number should be in 1 ~ 65535, set port 0, it should be converted to a port number between 1024~65535.",
1063cdf0e10cSrcweir ( 1024 <= newPort ) && ( 65535 >= newPort ) && ( bOK == sal_True ) );
1064cdf0e10cSrcweir
1065cdf0e10cSrcweir }
1066cdf0e10cSrcweir
setPort_003()1067cdf0e10cSrcweir void setPort_003()
1068cdf0e10cSrcweir {
1069cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIp1, IP_PORT_FTP);
1070cdf0e10cSrcweir sal_Bool bOK = saSocketAddr.setPort( IP_PORT_INVAL );
1071cdf0e10cSrcweir //on Linux, getPort return 34463
1072cdf0e10cSrcweir //t_print("#Port number is %d \n", saSocketAddr.getPort( ));
1073cdf0e10cSrcweir
1074cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for setPort( ) function: set an address with invalid port. it should return error or convert it to a valid port.",
1075cdf0e10cSrcweir ( ( 1 <= saSocketAddr.getPort( ) ) && ( 65535 >= saSocketAddr.getPort( ) ) &&( bOK == sal_True ) ) ||
1076cdf0e10cSrcweir bOK == sal_False);
1077cdf0e10cSrcweir }
1078cdf0e10cSrcweir
1079cdf0e10cSrcweir /* this is not a inet-addr => can't set port */
setPort_004()1080cdf0e10cSrcweir void setPort_004()
1081cdf0e10cSrcweir {
1082cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIpInval1, IP_PORT_FTP);
1083cdf0e10cSrcweir sal_Bool bOK = saSocketAddr.setPort( IP_PORT_MYPORT );
1084cdf0e10cSrcweir
1085cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for setPort( ) function: set an invalid address with valid port. it should return error.",
1086cdf0e10cSrcweir bOK == sal_False);
1087cdf0e10cSrcweir }
1088cdf0e10cSrcweir
1089cdf0e10cSrcweir
1090cdf0e10cSrcweir CPPUNIT_TEST_SUITE( setPort );
1091cdf0e10cSrcweir CPPUNIT_TEST( setPort_001 );
1092cdf0e10cSrcweir CPPUNIT_TEST( setPort_002 );
1093cdf0e10cSrcweir CPPUNIT_TEST( setPort_003 );
1094cdf0e10cSrcweir CPPUNIT_TEST( setPort_004 );
1095cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( );
1096cdf0e10cSrcweir
1097cdf0e10cSrcweir }; // class setPort
1098cdf0e10cSrcweir
1099cdf0e10cSrcweir
1100cdf0e10cSrcweir /** tester comment:
1101cdf0e10cSrcweir
1102cdf0e10cSrcweir In the following two functions, it use ::rtl::ByteSequence as an intermediate storage for address,
1103cdf0e10cSrcweir the ByteSequence object can hold sal_Int8 arrays, which is raged [-127, 127], in case of IP addr
1104cdf0e10cSrcweir that is greater than 127, say 129.158.217.202, it will stored as -127, -98, -39, -54, it is unique
1105cdf0e10cSrcweir in the range of sal_Int8, but lack of readability.
1106cdf0e10cSrcweir so may be a sal_uInt8 array is better.
1107cdf0e10cSrcweir */
1108cdf0e10cSrcweir
1109cdf0e10cSrcweir
1110cdf0e10cSrcweir /** testing the method:
1111cdf0e10cSrcweir inline sal_Bool SAL_CALL setAddr( const ::rtl::ByteSequence & address );
1112cdf0e10cSrcweir */
1113cdf0e10cSrcweir
1114cdf0e10cSrcweir class setAddr : public CppUnit::TestFixture
1115cdf0e10cSrcweir {
1116cdf0e10cSrcweir public:
setAddr_001()1117cdf0e10cSrcweir void setAddr_001()
1118cdf0e10cSrcweir {
1119cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIp2, IP_PORT_FTP );
1120cdf0e10cSrcweir saSocketAddr.setAddr( UStringIPToByteSequence( aHostIp1 ) );
1121cdf0e10cSrcweir ::rtl::ByteSequence bsSocketAddr = saSocketAddr.getAddr( 0 );
1122cdf0e10cSrcweir sal_Bool bOK = sal_False;
1123cdf0e10cSrcweir
1124cdf0e10cSrcweir if ( ( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) && ( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) )
1125cdf0e10cSrcweir bOK = sal_True;
1126cdf0e10cSrcweir
1127cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for setAddr() function: construct Addr with \"129.158.217.202\", set it to \"127.0.0.1\", and check the correctness ",
1128cdf0e10cSrcweir sal_True == bOK );
1129cdf0e10cSrcweir }
1130cdf0e10cSrcweir
1131cdf0e10cSrcweir
1132cdf0e10cSrcweir CPPUNIT_TEST_SUITE( setAddr );
1133cdf0e10cSrcweir CPPUNIT_TEST( setAddr_001 );
1134cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( );
1135cdf0e10cSrcweir
1136cdf0e10cSrcweir }; // class setAddr
1137cdf0e10cSrcweir
1138cdf0e10cSrcweir
1139cdf0e10cSrcweir /** testing the method:
1140cdf0e10cSrcweir inline ::rtl::ByteSequence SAL_CALL getAddr( oslSocketResult *pResult = 0 ) const;
1141cdf0e10cSrcweir */
1142cdf0e10cSrcweir
1143cdf0e10cSrcweir class getAddr : public CppUnit::TestFixture
1144cdf0e10cSrcweir {
1145cdf0e10cSrcweir public:
getAddr_001()1146cdf0e10cSrcweir void getAddr_001()
1147cdf0e10cSrcweir {
1148cdf0e10cSrcweir oslSocketResult SocketResult;
1149cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIp1, IP_PORT_FTP );
1150cdf0e10cSrcweir ::rtl::ByteSequence bsSocketAddr = saSocketAddr.getAddr( &SocketResult );
1151cdf0e10cSrcweir
1152cdf0e10cSrcweir sal_Bool bOK = sal_False;
1153cdf0e10cSrcweir
1154cdf0e10cSrcweir if ( ( osl_Socket_Ok == SocketResult ) &&( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) &&( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) )
1155cdf0e10cSrcweir bOK = sal_True;
1156cdf0e10cSrcweir
1157cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getAddr() function: construct a socketaddr with IP assigned, get the address to check correctness.Caught unknown exception on (Win32)",
1158cdf0e10cSrcweir sal_True == bOK && SocketResult == osl_Socket_Ok);
1159cdf0e10cSrcweir }
1160cdf0e10cSrcweir
1161cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getAddr );
1162cdf0e10cSrcweir CPPUNIT_TEST( getAddr_001 );
1163cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( );
1164cdf0e10cSrcweir
1165cdf0e10cSrcweir }; // class getAddr
1166cdf0e10cSrcweir
1167cdf0e10cSrcweir
1168cdf0e10cSrcweir /** testing the methods:
1169cdf0e10cSrcweir inline SocketAddr & SAL_CALL operator= (oslSocketAddr Addr);
1170cdf0e10cSrcweir inline SocketAddr & SAL_CALL operator= (const SocketAddr& Addr);
1171cdf0e10cSrcweir inline SocketAddr & SAL_CALL assign( oslSocketAddr Addr, __osl_socket_NoCopy nocopy );
1172cdf0e10cSrcweir inline sal_Bool SAL_CALL operator== (oslSocketAddr Addr) const;
1173cdf0e10cSrcweir inline sal_Bool SAL_CALL operator== (const SocketAddr & Addr) const; /// not implemented.
1174cdf0e10cSrcweir */
1175cdf0e10cSrcweir
1176cdf0e10cSrcweir class operator_equal : public CppUnit::TestFixture
1177cdf0e10cSrcweir {
1178cdf0e10cSrcweir public:
operator_equal_001()1179cdf0e10cSrcweir void operator_equal_001()
1180cdf0e10cSrcweir {
1181cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIp1, IP_PORT_TELNET);
1182cdf0e10cSrcweir ::osl::SocketAddr saSocketAddrEqual( aHostIp2, IP_PORT_FTP );
1183cdf0e10cSrcweir
1184cdf0e10cSrcweir saSocketAddrEqual = saSocketAddr;
1185cdf0e10cSrcweir sal_Bool bOK = sal_False;
1186cdf0e10cSrcweir ::rtl::ByteSequence bsSocketAddr = saSocketAddrEqual.getAddr( 0 );
1187cdf0e10cSrcweir
1188cdf0e10cSrcweir if ( ( IP_PORT_TELNET == saSocketAddrEqual.getPort( ) ) &&( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) &&( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) )
1189cdf0e10cSrcweir bOK = sal_True;
1190cdf0e10cSrcweir
1191cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for operator_equal() function: use operator= to assign Ip1 to Ip2, check its modification.",
1192cdf0e10cSrcweir sal_True == bOK );
1193cdf0e10cSrcweir }
1194cdf0e10cSrcweir
1195cdf0e10cSrcweir
operator_equal_002()1196cdf0e10cSrcweir void operator_equal_002()
1197cdf0e10cSrcweir {
1198cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIp3, IP_PORT_TELNET);
1199cdf0e10cSrcweir ::osl::SocketAddr saSocketAddrEqual( aHostIp2, IP_PORT_FTP );
1200cdf0e10cSrcweir
1201cdf0e10cSrcweir saSocketAddrEqual = saSocketAddr;
1202cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "after assign, the assigned SocketAddr is not same as the original Addr",
1203cdf0e10cSrcweir IP_PORT_TELNET == saSocketAddrEqual.getPort( ) );
1204cdf0e10cSrcweir saSocketAddrEqual.setPort( IP_PORT_MYPORT3 );
1205cdf0e10cSrcweir saSocketAddr.setPort( IP_PORT_HTTP2 );
1206cdf0e10cSrcweir
1207cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for operator_equal() function: perform an equal action, then try to change the original address's port. it should not be changed ( handle released), it did not pass in (W32), this is under discussion.",
1208cdf0e10cSrcweir IP_PORT_MYPORT3 == saSocketAddrEqual.getPort( ) );
1209cdf0e10cSrcweir }
1210cdf0e10cSrcweir
operator_equal_const_001()1211cdf0e10cSrcweir void operator_equal_const_001()
1212cdf0e10cSrcweir {
1213cdf0e10cSrcweir const ::osl::SocketAddr saSocketAddr( aHostIp1, IP_PORT_TELNET);
1214cdf0e10cSrcweir ::osl::SocketAddr saSocketAddrEqual( aHostIp2, IP_PORT_FTP );
1215cdf0e10cSrcweir
1216cdf0e10cSrcweir saSocketAddrEqual = saSocketAddr;
1217cdf0e10cSrcweir sal_Bool bOK = sal_False;
1218cdf0e10cSrcweir ::rtl::ByteSequence bsSocketAddr = saSocketAddrEqual.getAddr( 0 );
1219cdf0e10cSrcweir
1220cdf0e10cSrcweir if ( ( IP_PORT_TELNET == saSocketAddrEqual.getPort( ) ) &&( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) &&( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) )
1221cdf0e10cSrcweir bOK = sal_True;
1222cdf0e10cSrcweir
1223cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for operator_equal_const() function: use operator= const to assign Ip1 to Ip2, verify the change on the second one.",
1224cdf0e10cSrcweir sal_True == bOK );
1225cdf0e10cSrcweir }
1226cdf0e10cSrcweir
operator_equal_const_002()1227cdf0e10cSrcweir void operator_equal_const_002()
1228cdf0e10cSrcweir {
1229cdf0e10cSrcweir const ::osl::SocketAddr saSocketAddr( aHostIp1, IP_PORT_TELNET);
1230cdf0e10cSrcweir ::osl::SocketAddr saSocketAddrEqual( aHostIp2, IP_PORT_FTP );
1231cdf0e10cSrcweir
1232cdf0e10cSrcweir saSocketAddrEqual = saSocketAddr;
1233cdf0e10cSrcweir saSocketAddrEqual.setPort( IP_PORT_HTTP1 );
1234cdf0e10cSrcweir
1235cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for operator_equal_const() function: change the second instance, the first one should not be altered, since it does not released the handle.",
1236cdf0e10cSrcweir IP_PORT_HTTP1 != saSocketAddr.getPort( ) );
1237cdf0e10cSrcweir }
1238cdf0e10cSrcweir
operator_equal_assign_001()1239cdf0e10cSrcweir void operator_equal_assign_001()
1240cdf0e10cSrcweir {
1241cdf0e10cSrcweir ::osl::SocketAddr* pSocketAddr = new ::osl::SocketAddr( aHostIp1, IP_PORT_TELNET );
1242cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("check for new SocketAddr", pSocketAddr != NULL);
1243cdf0e10cSrcweir ::osl::SocketAddr* pSocketAddrAssign = new ::osl::SocketAddr( aHostIp2, IP_PORT_FTP );
1244cdf0e10cSrcweir oslSocketAddr poslSocketAddr = pSocketAddr->getHandle( );
1245cdf0e10cSrcweir //if( m_handle ) osl_destroySocketAddr( m_handle ); so pSocketAddrAssign had been destroyed and then point to pSocketAddr
1246cdf0e10cSrcweir pSocketAddrAssign->assign(poslSocketAddr, SAL_NO_COPY);
1247cdf0e10cSrcweir
1248cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("test for SocketAddr no copy constructor function: do a no copy constructor on a given SocketAddr instance, modify the new instance's port, check the original one.",
1249cdf0e10cSrcweir pSocketAddrAssign->getPort( ) == IP_PORT_TELNET );
1250cdf0e10cSrcweir
1251cdf0e10cSrcweir delete pSocketAddrAssign;
1252cdf0e10cSrcweir }
1253cdf0e10cSrcweir
operator_is_equal_001()1254cdf0e10cSrcweir void operator_is_equal_001()
1255cdf0e10cSrcweir {
1256cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIp1, IP_PORT_TELNET);
1257cdf0e10cSrcweir ::osl::SocketAddr saSocketAddrequal( aHostIp1, IP_PORT_TELNET );
1258cdf0e10cSrcweir
1259cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for operator_equal_equal() function: check two identical Address.",
1260cdf0e10cSrcweir sal_True == ( saSocketAddrequal == saSocketAddr.getHandle( ) ) );
1261cdf0e10cSrcweir }
1262cdf0e10cSrcweir
operator_is_equal_002()1263cdf0e10cSrcweir void operator_is_equal_002()
1264cdf0e10cSrcweir {
1265cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIp2, IP_PORT_FTP);
1266cdf0e10cSrcweir ::osl::SocketAddr saSocketAddrequal( aHostIp1, IP_PORT_TELNET );
1267cdf0e10cSrcweir
1268cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for operator_equal_equal() function: check two different Address.",
1269cdf0e10cSrcweir sal_False == ( saSocketAddrequal == saSocketAddr.getHandle( ) ) );
1270cdf0e10cSrcweir }
1271cdf0e10cSrcweir
1272cdf0e10cSrcweir CPPUNIT_TEST_SUITE( operator_equal );
1273cdf0e10cSrcweir CPPUNIT_TEST( operator_equal_001 );
1274cdf0e10cSrcweir CPPUNIT_TEST( operator_equal_002 );
1275cdf0e10cSrcweir CPPUNIT_TEST( operator_equal_const_001 );
1276cdf0e10cSrcweir CPPUNIT_TEST( operator_equal_const_002 );
1277cdf0e10cSrcweir CPPUNIT_TEST( operator_equal_assign_001 );
1278cdf0e10cSrcweir CPPUNIT_TEST( operator_is_equal_001 );
1279cdf0e10cSrcweir CPPUNIT_TEST( operator_is_equal_002 );
1280cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( );
1281cdf0e10cSrcweir
1282cdf0e10cSrcweir }; // class operator_equal
1283cdf0e10cSrcweir
1284cdf0e10cSrcweir
1285cdf0e10cSrcweir
1286cdf0e10cSrcweir /** testing the method:
1287cdf0e10cSrcweir inline oslSocketAddr SAL_CALL getHandle() const;
1288cdf0e10cSrcweir */
1289cdf0e10cSrcweir
1290cdf0e10cSrcweir class getSocketAddrHandle : public CppUnit::TestFixture
1291cdf0e10cSrcweir {
1292cdf0e10cSrcweir public:
1293cdf0e10cSrcweir
getSocketAddrHandle_001()1294cdf0e10cSrcweir void getSocketAddrHandle_001()
1295cdf0e10cSrcweir {
1296cdf0e10cSrcweir ::osl::SocketAddr* pSocketAddr = new ::osl::SocketAddr( aHostName1, IP_PORT_HTTP1 );
1297cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("check for new SocketAddr", pSocketAddr != NULL);
1298cdf0e10cSrcweir oslSocketAddr psaOSLSocketAddr = pSocketAddr->getHandle( );
1299cdf0e10cSrcweir ::osl::SocketAddr* pSocketAddrCopy = new ::osl::SocketAddr( psaOSLSocketAddr, SAL_NO_COPY );
1300cdf0e10cSrcweir
1301cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("test for SocketAddr no copy constructor function: do a no copy constructor on a given SocketAddr instance, modify the new instance's port, check the original one.",
1302cdf0e10cSrcweir pSocketAddr->getHandle( ) == pSocketAddrCopy->getHandle( ) );
1303cdf0e10cSrcweir
1304cdf0e10cSrcweir delete pSocketAddrCopy;
1305cdf0e10cSrcweir }
1306cdf0e10cSrcweir
getSocketAddrHandle_002()1307cdf0e10cSrcweir void getSocketAddrHandle_002()
1308cdf0e10cSrcweir {
1309cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostName3, IP_PORT_MYPORT4 );
1310cdf0e10cSrcweir oslSocketAddr poslSocketAddr = saSocketAddr.getHandle( );
1311cdf0e10cSrcweir
1312cdf0e10cSrcweir sal_Bool bOK = ( saSocketAddr == poslSocketAddr );
1313cdf0e10cSrcweir //t_print("getSocketAddrHandle_002\n");
1314cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getHandle() function: use getHandle() function as an intermediate way to create identical address.",
1315cdf0e10cSrcweir sal_True == bOK );
1316cdf0e10cSrcweir }
1317cdf0e10cSrcweir
1318cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getSocketAddrHandle );
1319cdf0e10cSrcweir CPPUNIT_TEST( getSocketAddrHandle_001 );
1320cdf0e10cSrcweir CPPUNIT_TEST( getSocketAddrHandle_002 );
1321cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( );
1322cdf0e10cSrcweir
1323cdf0e10cSrcweir }; // class getSocketAddrHandle
1324cdf0e10cSrcweir
1325cdf0e10cSrcweir
1326cdf0e10cSrcweir /** testing the method:
1327cdf0e10cSrcweir static inline ::rtl::OUString SAL_CALL getLocalHostname( oslSocketResult *pResult = 0);
1328cdf0e10cSrcweir */
1329cdf0e10cSrcweir
1330cdf0e10cSrcweir class getLocalHostname : public CppUnit::TestFixture
1331cdf0e10cSrcweir {
1332cdf0e10cSrcweir public:
1333cdf0e10cSrcweir /* the process of getLocalHostname: 1.gethostname (same as /bin/hostname) returned name A
1334cdf0e10cSrcweir 2. search A in /etc/hosts, if there is an alias name is A, return the name in the same row
1335cdf0e10cSrcweir */
1336cdf0e10cSrcweir
getLocalHostname_000()1337cdf0e10cSrcweir void getLocalHostname_000()
1338cdf0e10cSrcweir {
1339cdf0e10cSrcweir // _osl_getFullQualifiedDomainName( );
1340cdf0e10cSrcweir oslSocketResult aResult = osl_Socket_Error;
1341cdf0e10cSrcweir rtl::OUString suHostname = osl::SocketAddr::getLocalHostname(&aResult);
1342cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("getLocalHostname failed", aResult == osl_Socket_Ok);
1343cdf0e10cSrcweir }
1344cdf0e10cSrcweir
getLocalHostname_001()1345cdf0e10cSrcweir void getLocalHostname_001()
1346cdf0e10cSrcweir {
1347cdf0e10cSrcweir oslSocketResult *pResult = NULL;
1348cdf0e10cSrcweir //printSocketResult(*pResult);
1349cdf0e10cSrcweir ::rtl::OUString suResult = ::osl::SocketAddr::getLocalHostname( pResult );
1350cdf0e10cSrcweir
1351cdf0e10cSrcweir // LLA: IMHO localhost, or hostname by itself should be ok.
1352cdf0e10cSrcweir rtl::OUString suThisHost = getThisHostname( );
1353cdf0e10cSrcweir bool bOk = false;
1354cdf0e10cSrcweir if (suThisHost.equals(rtl::OUString::createFromAscii("localhost")))
1355cdf0e10cSrcweir {
1356cdf0e10cSrcweir bOk = true;
1357cdf0e10cSrcweir }
1358cdf0e10cSrcweir else
1359cdf0e10cSrcweir {
1360cdf0e10cSrcweir if (suThisHost.equals(suResult))
1361cdf0e10cSrcweir {
1362cdf0e10cSrcweir bOk = true;
1363cdf0e10cSrcweir }
1364cdf0e10cSrcweir }
1365cdf0e10cSrcweir
1366cdf0e10cSrcweir ::rtl::OUString suError;
1367cdf0e10cSrcweir suError = outputError(suResult, getThisHostname( ), "test for getLocalHostname() function");
1368cdf0e10cSrcweir
1369cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( suError, bOk == true );
1370cdf0e10cSrcweir }
1371cdf0e10cSrcweir
1372cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getLocalHostname );
1373cdf0e10cSrcweir CPPUNIT_TEST( getLocalHostname_000 );
1374cdf0e10cSrcweir CPPUNIT_TEST( getLocalHostname_001 );
1375cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( );
1376cdf0e10cSrcweir
1377cdf0e10cSrcweir }; // class getLocalHostname
1378cdf0e10cSrcweir
1379cdf0e10cSrcweir
1380cdf0e10cSrcweir /** testing the method:
1381cdf0e10cSrcweir static inline void SAL_CALL resolveHostname( const ::rtl::OUString & strHostName , SocketAddr & Addr );
1382cdf0e10cSrcweir */
1383cdf0e10cSrcweir
1384cdf0e10cSrcweir class resolveHostname : public CppUnit::TestFixture
1385cdf0e10cSrcweir {
1386cdf0e10cSrcweir public:
resolveHostname_001()1387cdf0e10cSrcweir void resolveHostname_001()
1388cdf0e10cSrcweir {
1389cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr;
1390cdf0e10cSrcweir ::osl::SocketAddr::resolveHostname( aHostIp1, saSocketAddr );
1391cdf0e10cSrcweir ::rtl::ByteSequence bsSocketAddr = saSocketAddr.getAddr( 0 );
1392cdf0e10cSrcweir sal_Bool bOK = sal_False;
1393cdf0e10cSrcweir
1394cdf0e10cSrcweir if ( ( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) &&( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) )
1395cdf0e10cSrcweir bOK = sal_True;
1396cdf0e10cSrcweir
1397cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for resolveHostname() function: try to resolve localhost to 127.0.0.1.",
1398cdf0e10cSrcweir sal_True == bOK );
1399cdf0e10cSrcweir }
1400cdf0e10cSrcweir
1401cdf0e10cSrcweir CPPUNIT_TEST_SUITE( resolveHostname );
1402cdf0e10cSrcweir CPPUNIT_TEST( resolveHostname_001 );
1403cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( );
1404cdf0e10cSrcweir
1405cdf0e10cSrcweir }; // class resolveHostname
1406cdf0e10cSrcweir
1407cdf0e10cSrcweir
1408cdf0e10cSrcweir /** testing the method:
1409cdf0e10cSrcweir static inline sal_Int32 SAL_CALL getServicePort(
1410cdf0e10cSrcweir const ::rtl::OUString& strServiceName,
1411cdf0e10cSrcweir const ::rtl::OUString & strProtocolName= ::rtl::OUString::createFromAscii( "tcp" ) );
1412cdf0e10cSrcweir */
1413cdf0e10cSrcweir
1414cdf0e10cSrcweir class gettheServicePort : public CppUnit::TestFixture
1415cdf0e10cSrcweir {
1416cdf0e10cSrcweir public:
gettheServicePort_001()1417cdf0e10cSrcweir void gettheServicePort_001()
1418cdf0e10cSrcweir {
1419cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getServicePort() function: try to get ftp service port on TCP protocol.",
1420cdf0e10cSrcweir IP_PORT_FTP== ::osl::SocketAddr::getServicePort( aServiceFTP, aProtocolTCP ) );
1421cdf0e10cSrcweir }
1422cdf0e10cSrcweir
gettheServicePort_002()1423cdf0e10cSrcweir void gettheServicePort_002()
1424cdf0e10cSrcweir {
1425cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getServicePort() function: try to get telnet service port on TCP protocol.",
1426cdf0e10cSrcweir IP_PORT_TELNET== ::osl::SocketAddr::getServicePort( aServiceTELNET, aProtocolTCP ) );
1427cdf0e10cSrcweir }
1428cdf0e10cSrcweir
gettheServicePort_003()1429cdf0e10cSrcweir void gettheServicePort_003()
1430cdf0e10cSrcweir {
1431cdf0e10cSrcweir //Solaris has no service called "https", please see /etc/services
1432cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getServicePort() function: try to get netbios-ssn service port on UDP protocol.",
1433cdf0e10cSrcweir IP_PORT_NETBIOS_DGM == ::osl::SocketAddr::getServicePort( aServiceNETBIOS, aProtocolUDP ) );
1434cdf0e10cSrcweir }
1435cdf0e10cSrcweir
gettheServicePort_004()1436cdf0e10cSrcweir void gettheServicePort_004()
1437cdf0e10cSrcweir {
1438cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getServicePort() function: try to get a service port which is not exist.",
1439cdf0e10cSrcweir OSL_INVALID_PORT == ::osl::SocketAddr::getServicePort( ::rtl::OUString::createFromAscii( "notexist" ), aProtocolUDP ) );
1440cdf0e10cSrcweir }
1441cdf0e10cSrcweir
1442cdf0e10cSrcweir CPPUNIT_TEST_SUITE( gettheServicePort );
1443cdf0e10cSrcweir CPPUNIT_TEST( gettheServicePort_001 );
1444cdf0e10cSrcweir CPPUNIT_TEST( gettheServicePort_002 );
1445cdf0e10cSrcweir CPPUNIT_TEST( gettheServicePort_003 );
1446cdf0e10cSrcweir CPPUNIT_TEST( gettheServicePort_004 );
1447cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END( );
1448cdf0e10cSrcweir
1449cdf0e10cSrcweir }; // class gettheServicePort
1450cdf0e10cSrcweir
1451cdf0e10cSrcweir // -----------------------------------------------------------------------------
1452cdf0e10cSrcweir
1453cdf0e10cSrcweir
1454cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_SocketAddr::ctors, "osl_SocketAddr");
1455cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_SocketAddr::is, "osl_SocketAddr");
1456cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_SocketAddr::getHostname, "osl_SocketAddr");
1457cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_SocketAddr::getPort, "osl_SocketAddr");
1458cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_SocketAddr::setPort, "osl_SocketAddr");
1459cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_SocketAddr::setAddr, "osl_SocketAddr");
1460cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_SocketAddr::getAddr, "osl_SocketAddr");
1461cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_SocketAddr::operator_equal, "osl_SocketAddr");
1462cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_SocketAddr::getSocketAddrHandle, "osl_SocketAddr");
1463cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_SocketAddr::getLocalHostname, "osl_SocketAddr");
1464cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_SocketAddr::resolveHostname, "osl_SocketAddr");
1465cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_SocketAddr::gettheServicePort, "osl_SocketAddr");
1466cdf0e10cSrcweir
1467cdf0e10cSrcweir
1468cdf0e10cSrcweir } // namespace osl_SocketAddr
1469cdf0e10cSrcweir
1470cdf0e10cSrcweir
1471cdf0e10cSrcweir
1472cdf0e10cSrcweir namespace osl_Socket
1473cdf0e10cSrcweir {
1474cdf0e10cSrcweir
1475cdf0e10cSrcweir /** testing the methods:
1476cdf0e10cSrcweir inline Socket( );
1477cdf0e10cSrcweir inline Socket( const Socket & socket );
1478cdf0e10cSrcweir inline Socket( oslSocket socketHandle );
1479cdf0e10cSrcweir inline Socket( oslSocket socketHandle, __sal_NoAcquire noacquire );
1480cdf0e10cSrcweir */
1481cdf0e10cSrcweir
1482cdf0e10cSrcweir /** test writer's comment:
1483cdf0e10cSrcweir
1484cdf0e10cSrcweir class Socket can not be initialized by its protected constructor, though the protected
1485cdf0e10cSrcweir constructor is the most convenient way to create a new socket.
1486cdf0e10cSrcweir it only allow the method of C function osl_createSocket like:
1487cdf0e10cSrcweir ::osl::Socket sSocket( osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream,
1488cdf0e10cSrcweir osl_Socket_ProtocolIp ) );
1489cdf0e10cSrcweir the use of C method lost some of the transparent of tester using C++ wrapper.
1490cdf0e10cSrcweir */
1491cdf0e10cSrcweir
1492cdf0e10cSrcweir
1493cdf0e10cSrcweir class ctors : public CppUnit::TestFixture
1494cdf0e10cSrcweir {
1495cdf0e10cSrcweir public:
1496cdf0e10cSrcweir oslSocket sHandle;
1497cdf0e10cSrcweir // initialization
setUp()1498cdf0e10cSrcweir void setUp( )
1499cdf0e10cSrcweir {
1500cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
1501cdf0e10cSrcweir }
1502cdf0e10cSrcweir
tearDown()1503cdf0e10cSrcweir void tearDown( )
1504cdf0e10cSrcweir {
1505cdf0e10cSrcweir sHandle = NULL;
1506cdf0e10cSrcweir }
1507cdf0e10cSrcweir
1508cdf0e10cSrcweir
ctors_none()1509cdf0e10cSrcweir void ctors_none()
1510cdf0e10cSrcweir {
1511cdf0e10cSrcweir /// Socket constructor.
1512cdf0e10cSrcweir // ::osl::Socket sSocket;
1513cdf0e10cSrcweir
1514cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for ctors_none constructor function: check if the socket was created successfully, if no exception occured",
1515cdf0e10cSrcweir 1 == 1 );
1516cdf0e10cSrcweir }
1517cdf0e10cSrcweir
ctors_acquire()1518cdf0e10cSrcweir void ctors_acquire()
1519cdf0e10cSrcweir {
1520cdf0e10cSrcweir /// Socket constructor.
1521cdf0e10cSrcweir ::osl::Socket sSocket( sHandle );
1522cdf0e10cSrcweir
1523cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for ctors_acquire constructor function: check if the socket was created successfully",
1524cdf0e10cSrcweir osl_Socket_TypeStream == sSocket.getType( ) );
1525cdf0e10cSrcweir }
1526cdf0e10cSrcweir
ctors_no_acquire()1527cdf0e10cSrcweir void ctors_no_acquire()
1528cdf0e10cSrcweir {
1529cdf0e10cSrcweir /// Socket constructor.
1530cdf0e10cSrcweir ::osl::Socket sSocket( sHandle, SAL_NO_ACQUIRE );
1531cdf0e10cSrcweir
1532cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE(" test for ctors_no_acquire constructor function: check if the socket was created successfully",
1533cdf0e10cSrcweir osl_Socket_TypeStream == sSocket.getType( ) );
1534cdf0e10cSrcweir }
1535cdf0e10cSrcweir
ctors_copy_ctor()1536cdf0e10cSrcweir void ctors_copy_ctor()
1537cdf0e10cSrcweir {
1538cdf0e10cSrcweir ::osl::Socket sSocket( sHandle );
1539cdf0e10cSrcweir /// Socket copy constructor.
1540cdf0e10cSrcweir ::osl::Socket copySocket( sSocket );
1541cdf0e10cSrcweir
1542cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE(" test for ctors_copy_ctor constructor function: create new Socket instance using copy constructor",
1543cdf0e10cSrcweir osl_Socket_TypeStream == copySocket.getType( ) );
1544cdf0e10cSrcweir }
1545cdf0e10cSrcweir
ctors_TypeRaw()1546cdf0e10cSrcweir void ctors_TypeRaw()
1547cdf0e10cSrcweir {
1548cdf0e10cSrcweir #ifdef WNT
1549cdf0e10cSrcweir oslSocket sHandleRaw = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeRaw, osl_Socket_ProtocolIp );
1550cdf0e10cSrcweir // LLA: ? ::osl::Socket sSocket( sHandleRaw );
1551cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( " type osl_Socket_TypeRaw socket create failed on UNX ", sHandleRaw != NULL);
1552cdf0e10cSrcweir #else
1553cdf0e10cSrcweir oslSocket sHandleRaw = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeRaw, osl_Socket_ProtocolIp );
1554cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( " can't create socket with type osl_Socket_TypeRaw within UNX is ok.", sHandleRaw == NULL);
1555cdf0e10cSrcweir #endif
1556cdf0e10cSrcweir }
1557cdf0e10cSrcweir
ctors_family_Ipx()1558cdf0e10cSrcweir void ctors_family_Ipx()
1559cdf0e10cSrcweir {
1560cdf0e10cSrcweir oslSocket sHandleIpx = osl_createSocket( osl_Socket_FamilyIpx, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
1561cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( " family osl_Socket_FamilyIpx socket create failed! ", sHandleIpx != NULL);
1562cdf0e10cSrcweir ::osl::Socket sSocket( sHandleIpx ); //, SAL_NO_ACQUIRE );
1563cdf0e10cSrcweir t_print("#Type is %d \n", sSocket.getType( ) );
1564cdf0e10cSrcweir
1565cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE(" test for create new Socket instance that family is osl_Socket_FamilyIpx",
1566cdf0e10cSrcweir osl_Socket_TypeStream == sSocket.getType( ) );
1567cdf0e10cSrcweir }
1568cdf0e10cSrcweir
1569cdf0e10cSrcweir
1570cdf0e10cSrcweir
1571cdf0e10cSrcweir CPPUNIT_TEST_SUITE( ctors );
1572cdf0e10cSrcweir CPPUNIT_TEST( ctors_none );
1573cdf0e10cSrcweir CPPUNIT_TEST( ctors_acquire );
1574cdf0e10cSrcweir CPPUNIT_TEST( ctors_no_acquire );
1575cdf0e10cSrcweir CPPUNIT_TEST( ctors_copy_ctor );
1576cdf0e10cSrcweir CPPUNIT_TEST( ctors_TypeRaw );
1577cdf0e10cSrcweir CPPUNIT_TEST( ctors_family_Ipx );
1578cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
1579cdf0e10cSrcweir
1580cdf0e10cSrcweir }; // class ctors
1581cdf0e10cSrcweir
1582cdf0e10cSrcweir
1583cdf0e10cSrcweir /** testing the methods:
1584cdf0e10cSrcweir inline Socket& SAL_CALL operator= ( oslSocket socketHandle);
1585cdf0e10cSrcweir inline Socket& SAL_CALL operator= (const Socket& sock);
1586cdf0e10cSrcweir inline sal_Bool SAL_CALL operator==( const Socket& rSocket ) const ;
1587cdf0e10cSrcweir inline sal_Bool SAL_CALL operator==( const oslSocket socketHandle ) const;
1588cdf0e10cSrcweir */
1589cdf0e10cSrcweir
1590cdf0e10cSrcweir class operators : public CppUnit::TestFixture
1591cdf0e10cSrcweir {
1592cdf0e10cSrcweir public:
1593cdf0e10cSrcweir oslSocket sHandle;
1594cdf0e10cSrcweir // initialization
setUp()1595cdf0e10cSrcweir void setUp( )
1596cdf0e10cSrcweir {
1597cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
1598cdf0e10cSrcweir }
1599cdf0e10cSrcweir
tearDown()1600cdf0e10cSrcweir void tearDown( )
1601cdf0e10cSrcweir {
1602cdf0e10cSrcweir sHandle = NULL;
1603cdf0e10cSrcweir }
1604cdf0e10cSrcweir
1605cdf0e10cSrcweir
1606cdf0e10cSrcweir /** test writer's comment:
1607cdf0e10cSrcweir
1608cdf0e10cSrcweir the assignment operator does not support direct assinment like:
1609cdf0e10cSrcweir ::osl::Socket sSocket = sHandle.
1610cdf0e10cSrcweir */
operators_assignment_handle()1611cdf0e10cSrcweir void operators_assignment_handle()
1612cdf0e10cSrcweir {
1613cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
1614cdf0e10cSrcweir ::osl::Socket assignSocket = sSocket.getHandle();
1615cdf0e10cSrcweir
1616cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for operators_assignment_handle function: test the assignment operator.",
1617cdf0e10cSrcweir osl_Socket_TypeStream == assignSocket.getType( ) );
1618cdf0e10cSrcweir }
1619cdf0e10cSrcweir
operators_assignment()1620cdf0e10cSrcweir void operators_assignment()
1621cdf0e10cSrcweir {
1622cdf0e10cSrcweir ::osl::Socket sSocket( sHandle );
1623cdf0e10cSrcweir ::osl::Socket assignSocket = sSocket;
1624cdf0e10cSrcweir
1625cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for operators_assignment function: assignment operator",
1626cdf0e10cSrcweir osl_Socket_TypeStream == assignSocket.getType( ) );
1627cdf0e10cSrcweir }
1628cdf0e10cSrcweir
operators_equal_handle_001()1629cdf0e10cSrcweir void operators_equal_handle_001()
1630cdf0e10cSrcweir {
1631cdf0e10cSrcweir /// Socket constructor.
1632cdf0e10cSrcweir ::osl::Socket sSocket( sHandle );
1633cdf0e10cSrcweir ::osl::Socket equalSocket = sSocket;
1634cdf0e10cSrcweir
1635cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE(" test for operators_equal_handle_001 function: check equal.",
1636cdf0e10cSrcweir equalSocket == sHandle );
1637cdf0e10cSrcweir }
1638cdf0e10cSrcweir
operators_equal_handle_002()1639cdf0e10cSrcweir void operators_equal_handle_002()
1640cdf0e10cSrcweir {
1641cdf0e10cSrcweir /// Socket constructor.
1642cdf0e10cSrcweir ::osl::Socket equalSocket( osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeDgram, osl_Socket_ProtocolIp ) );
1643cdf0e10cSrcweir
1644cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE(" test for operators_equal_handle_001 function: check unequal.",
1645cdf0e10cSrcweir !( equalSocket == sHandle ) );
1646cdf0e10cSrcweir }
1647cdf0e10cSrcweir
operators_equal_001()1648cdf0e10cSrcweir void operators_equal_001()
1649cdf0e10cSrcweir {
1650cdf0e10cSrcweir ::osl::Socket sSocket( sHandle );
1651cdf0e10cSrcweir /// Socket copy constructor.
1652cdf0e10cSrcweir ::osl::Socket equalSocket( sSocket );
1653cdf0e10cSrcweir
1654cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE(" test for operators_equal function: check equal.",
1655cdf0e10cSrcweir equalSocket == sSocket );
1656cdf0e10cSrcweir }
1657cdf0e10cSrcweir
operators_equal_002()1658cdf0e10cSrcweir void operators_equal_002()
1659cdf0e10cSrcweir {
1660cdf0e10cSrcweir ::osl::Socket sSocket( sHandle );
1661cdf0e10cSrcweir /// Socket copy constructor.
1662cdf0e10cSrcweir ::osl::Socket equalSocket( osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeDgram, osl_Socket_ProtocolIp ) );
1663cdf0e10cSrcweir
1664cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE(" test for operators_equal_002 function: check unequal.",
1665cdf0e10cSrcweir !( equalSocket == sSocket ) );
1666cdf0e10cSrcweir }
1667cdf0e10cSrcweir
1668cdf0e10cSrcweir CPPUNIT_TEST_SUITE( operators );
1669cdf0e10cSrcweir CPPUNIT_TEST( operators_assignment_handle );
1670cdf0e10cSrcweir CPPUNIT_TEST( operators_assignment );
1671cdf0e10cSrcweir CPPUNIT_TEST( operators_equal_handle_001 );
1672cdf0e10cSrcweir CPPUNIT_TEST( operators_equal_handle_002 );
1673cdf0e10cSrcweir CPPUNIT_TEST( operators_equal_001 );
1674cdf0e10cSrcweir CPPUNIT_TEST( operators_equal_002 );
1675cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
1676cdf0e10cSrcweir
1677cdf0e10cSrcweir }; // class operators
1678cdf0e10cSrcweir
1679cdf0e10cSrcweir
1680cdf0e10cSrcweir /** testing the methods:
1681cdf0e10cSrcweir inline void SAL_CALL shutdown( oslSocketDirection Direction = osl_Socket_DirReadWrite );
1682cdf0e10cSrcweir inline void SAL_CALL close();
1683cdf0e10cSrcweir */
1684cdf0e10cSrcweir
1685cdf0e10cSrcweir class close : public CppUnit::TestFixture
1686cdf0e10cSrcweir {
1687cdf0e10cSrcweir public:
1688cdf0e10cSrcweir oslSocket sHandle;
1689cdf0e10cSrcweir // initialization
setUp()1690cdf0e10cSrcweir void setUp( )
1691cdf0e10cSrcweir {
1692cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
1693cdf0e10cSrcweir }
1694cdf0e10cSrcweir
tearDown()1695cdf0e10cSrcweir void tearDown( )
1696cdf0e10cSrcweir {
1697cdf0e10cSrcweir sHandle = NULL;
1698cdf0e10cSrcweir }
1699cdf0e10cSrcweir
1700cdf0e10cSrcweir
close_001()1701cdf0e10cSrcweir void close_001()
1702cdf0e10cSrcweir {
1703cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
1704cdf0e10cSrcweir sSocket.close();
1705cdf0e10cSrcweir
1706cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for close_001 function: this function is reserved for test.",
1707cdf0e10cSrcweir sSocket.getHandle() == sHandle );
1708cdf0e10cSrcweir }
1709cdf0e10cSrcweir
close_002()1710cdf0e10cSrcweir void close_002()
1711cdf0e10cSrcweir {
1712cdf0e10cSrcweir //#if defined(LINUX)
1713cdf0e10cSrcweir ::osl::AcceptorSocket asSocket( osl_Socket_FamilyInet, osl_Socket_ProtocolIp, osl_Socket_TypeStream );
1714cdf0e10cSrcweir AcceptorThread myAcceptorThread( asSocket, aHostIp1 );
1715cdf0e10cSrcweir myAcceptorThread.create();
1716cdf0e10cSrcweir
1717cdf0e10cSrcweir thread_sleep( 1 );
1718cdf0e10cSrcweir //when accepting, close the socket, the thread will not block for accepting
1719cdf0e10cSrcweir //man close:Any locks held on the file it was associated with, and owned by the process, are removed
1720cdf0e10cSrcweir asSocket.close();
1721cdf0e10cSrcweir //thread_sleep( 2 );
1722cdf0e10cSrcweir myAcceptorThread.join();
1723cdf0e10cSrcweir
1724cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for close when is accepting: the socket will quit accepting status.",
1725cdf0e10cSrcweir myAcceptorThread.isOK() == sal_True );
1726cdf0e10cSrcweir //#endif
1727cdf0e10cSrcweir }
1728cdf0e10cSrcweir
1729cdf0e10cSrcweir // to cover "if ( pSockAddrIn->sin_addr.s_addr == htonl(INADDR_ANY) )" in osl_closeSocket( )
close_003()1730cdf0e10cSrcweir void close_003()
1731cdf0e10cSrcweir {
1732cdf0e10cSrcweir ::osl::AcceptorSocket asSocket( osl_Socket_FamilyInet, osl_Socket_ProtocolIp, osl_Socket_TypeStream );
1733cdf0e10cSrcweir AcceptorThread myAcceptorThread( asSocket, aHostIpZero );
1734cdf0e10cSrcweir myAcceptorThread.create();
1735cdf0e10cSrcweir
1736cdf0e10cSrcweir thread_sleep( 1 );
1737cdf0e10cSrcweir asSocket.close();
1738cdf0e10cSrcweir myAcceptorThread.join();
1739cdf0e10cSrcweir
1740cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for close when is accepting: the socket will quit accepting status.",
1741cdf0e10cSrcweir myAcceptorThread.isOK() == sal_True );
1742cdf0e10cSrcweir }
1743cdf0e10cSrcweir
1744cdf0e10cSrcweir CPPUNIT_TEST_SUITE( close );
1745cdf0e10cSrcweir CPPUNIT_TEST( close_001 );
1746cdf0e10cSrcweir CPPUNIT_TEST( close_002 );
1747cdf0e10cSrcweir CPPUNIT_TEST( close_003 );
1748cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
1749cdf0e10cSrcweir
1750cdf0e10cSrcweir }; // class close
1751cdf0e10cSrcweir
1752cdf0e10cSrcweir /** testing the method:
1753cdf0e10cSrcweir inline void SAL_CALL getLocalAddr( SocketAddr &Addr ) const;
1754cdf0e10cSrcweir */
1755cdf0e10cSrcweir
1756cdf0e10cSrcweir class getLocalAddr : public CppUnit::TestFixture
1757cdf0e10cSrcweir {
1758cdf0e10cSrcweir public:
1759cdf0e10cSrcweir oslSocket sHandle;
1760cdf0e10cSrcweir // initialization
setUp()1761cdf0e10cSrcweir void setUp( )
1762cdf0e10cSrcweir {
1763cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
1764cdf0e10cSrcweir }
1765cdf0e10cSrcweir
tearDown()1766cdf0e10cSrcweir void tearDown( )
1767cdf0e10cSrcweir {
1768cdf0e10cSrcweir sHandle = NULL;
1769cdf0e10cSrcweir }
1770cdf0e10cSrcweir
1771cdf0e10cSrcweir // get the Address of the local end of the socket
getLocalAddr_001()1772cdf0e10cSrcweir void getLocalAddr_001()
1773cdf0e10cSrcweir {
1774cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
1775cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( aHostIp1, IP_PORT_MYPORT8 );
1776cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr;
1777cdf0e10cSrcweir
1778cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
1779cdf0e10cSrcweir
1780cdf0e10cSrcweir sal_Bool bOK1 = sSocket.bind( saBindSocketAddr );
1781cdf0e10cSrcweir ::rtl::OUString suError1 = ::rtl::OUString::createFromAscii("Socket bind fail:") + sSocket.getErrorAsString();
1782cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( suError1, sal_True == bOK1 );
1783cdf0e10cSrcweir
1784cdf0e10cSrcweir sSocket.getLocalAddr( saLocalSocketAddr );
1785cdf0e10cSrcweir
1786cdf0e10cSrcweir sal_Bool bOK = compareUString( saLocalSocketAddr.getHostname( 0 ), sSocket.getLocalHost() ) ;
1787cdf0e10cSrcweir
1788cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getLocalAddr function: first create a new socket, then a socket address, bind them, and check the address.",
1789cdf0e10cSrcweir sal_True == bOK );
1790cdf0e10cSrcweir }
1791cdf0e10cSrcweir
1792cdf0e10cSrcweir
1793cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getLocalAddr );
1794cdf0e10cSrcweir CPPUNIT_TEST( getLocalAddr_001 );
1795cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
1796cdf0e10cSrcweir
1797cdf0e10cSrcweir }; // class getLocalAddr
1798cdf0e10cSrcweir
1799cdf0e10cSrcweir
1800cdf0e10cSrcweir /** testing the method:
1801cdf0e10cSrcweir inline sal_Int32 SAL_CALL getLocalPort() const;
1802cdf0e10cSrcweir */
1803cdf0e10cSrcweir
1804cdf0e10cSrcweir class getLocalPort : public CppUnit::TestFixture
1805cdf0e10cSrcweir {
1806cdf0e10cSrcweir public:
1807cdf0e10cSrcweir oslSocket sHandle;
1808cdf0e10cSrcweir // initialization
setUp()1809cdf0e10cSrcweir void setUp( )
1810cdf0e10cSrcweir {
1811cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
1812cdf0e10cSrcweir }
1813cdf0e10cSrcweir
tearDown()1814cdf0e10cSrcweir void tearDown( )
1815cdf0e10cSrcweir {
1816cdf0e10cSrcweir sHandle = NULL;
1817cdf0e10cSrcweir }
1818cdf0e10cSrcweir
1819cdf0e10cSrcweir
getLocalPort_001()1820cdf0e10cSrcweir void getLocalPort_001()
1821cdf0e10cSrcweir {
1822cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
1823cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( aHostIp1, IP_PORT_MYPORT7 ); // aHostIp1 localhost
1824cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr;
1825cdf0e10cSrcweir
1826cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
1827cdf0e10cSrcweir
1828cdf0e10cSrcweir sal_Bool bOK1 = sSocket.bind( saBindSocketAddr );
1829cdf0e10cSrcweir ::rtl::OUString suError1 = ::rtl::OUString::createFromAscii("Socket bind fail:") + sSocket.getErrorAsString();
1830cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( suError1, sal_True == bOK1 );
1831cdf0e10cSrcweir sal_Bool bOK = ( IP_PORT_MYPORT7 == sSocket.getLocalPort( ) );
1832cdf0e10cSrcweir
1833cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getLocalPort function: first create a new socket, then a socket address, bind them, and check the port.",
1834cdf0e10cSrcweir sal_True == bOK );
1835cdf0e10cSrcweir }
1836cdf0e10cSrcweir
1837cdf0e10cSrcweir /** test writer's comment:
1838cdf0e10cSrcweir
1839cdf0e10cSrcweir the invalid port number can not be set by giving invalid port number
1840cdf0e10cSrcweir such as 99999 or -1, it will convert to ( x mod 65535 ), so it will always be
1841cdf0e10cSrcweir valid, the only instance that the getLocalPort returns OSL_INVALID_PORT
1842cdf0e10cSrcweir is when saSocketAddr itself is an invalid one, that is , the IP or host name
1843cdf0e10cSrcweir can not be found, then the created socket address is not valid.
1844cdf0e10cSrcweir */
getLocalPort_002()1845cdf0e10cSrcweir void getLocalPort_002()
1846cdf0e10cSrcweir {
1847cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( aHostIpInval, IP_PORT_TELNET);
1848cdf0e10cSrcweir #ifdef WNT
1849cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
1850cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); // sal_True);
1851cdf0e10cSrcweir sSocket.bind( saBindSocketAddr );
1852cdf0e10cSrcweir //Invalid IP, so bind should fail
1853cdf0e10cSrcweir ::rtl::OUString suError = outputError(::rtl::OUString::valueOf(sSocket.getLocalPort( )),
1854cdf0e10cSrcweir ::rtl::OUString::valueOf((sal_Int32)OSL_INVALID_PORT),
1855cdf0e10cSrcweir "test for getLocalPort function: first create a new socket, then an invalid socket address, bind them, and check the port assigned.");
1856cdf0e10cSrcweir sal_Bool bOK = ( OSL_INVALID_PORT == sSocket.getLocalPort( ) );
1857cdf0e10cSrcweir (void)bOK;
1858cdf0e10cSrcweir #else
1859cdf0e10cSrcweir //on Unix, if Addr is not an address of type osl_Socket_FamilyInet, it returns OSL_INVALID_PORT
1860cdf0e10cSrcweir ::rtl::OUString suError = ::rtl::OUString::createFromAscii( "on Unix, if Addr is not an address of type osl_Socket_FamilyInet, it returns OSL_INVALID_PORT, but can not create Addr of that case");
1861cdf0e10cSrcweir #endif
1862cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( suError, sal_False );
1863cdf0e10cSrcweir
1864cdf0e10cSrcweir }
1865cdf0e10cSrcweir
getLocalPort_003()1866cdf0e10cSrcweir void getLocalPort_003()
1867cdf0e10cSrcweir {
1868cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
1869cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( getLocalIP(), IP_PORT_INVAL);
1870cdf0e10cSrcweir
1871cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
1872cdf0e10cSrcweir
1873cdf0e10cSrcweir sal_Bool bOK1 = sSocket.bind( saBindSocketAddr );
1874cdf0e10cSrcweir ::rtl::OUString suError1 = ::rtl::OUString::createFromAscii("Socket bind fail:") + sSocket.getErrorAsString();
1875cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( suError1, sal_True == bOK1 );
1876cdf0e10cSrcweir ::rtl::OUString suError = outputError(::rtl::OUString::valueOf(sSocket.getLocalPort( )),
1877cdf0e10cSrcweir ::rtl::OUString::createFromAscii("34463"),
1878cdf0e10cSrcweir "test for getLocalPort function: first create a new socket, then an invalid socket address, bind them, and check the port assigned");
1879cdf0e10cSrcweir sal_Bool bOK = ( sSocket.getLocalPort( ) >= 1 && sSocket.getLocalPort( ) <= 65535);
1880cdf0e10cSrcweir
1881cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( suError, sal_True == bOK );
1882cdf0e10cSrcweir }
1883cdf0e10cSrcweir
1884cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getLocalPort );
1885cdf0e10cSrcweir CPPUNIT_TEST( getLocalPort_001 );
1886cdf0e10cSrcweir // LLA: CPPUNIT_TEST( getLocalPort_002 );
1887cdf0e10cSrcweir CPPUNIT_TEST( getLocalPort_003 );
1888cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
1889cdf0e10cSrcweir
1890cdf0e10cSrcweir }; // class getLocalPort
1891cdf0e10cSrcweir
1892cdf0e10cSrcweir
1893cdf0e10cSrcweir /** testing the method:
1894cdf0e10cSrcweir inline ::rtl::OUString SAL_CALL getLocalHost() const;
1895cdf0e10cSrcweir
1896cdf0e10cSrcweir Mindyliu: on Linux, at first it will check the binded in /etc/hosts, if it has the binded IP, it will return the hostname in it;
1897cdf0e10cSrcweir else if the binded IP is "127.0.0.1", it will return "localhost", if it's the machine's ethernet ip such as "129.158.217.90", it
1898cdf0e10cSrcweir will return hostname of current processor such as "aegean.PRC.Sun.COM"
1899cdf0e10cSrcweir */
1900cdf0e10cSrcweir
1901cdf0e10cSrcweir class getLocalHost : public CppUnit::TestFixture
1902cdf0e10cSrcweir {
1903cdf0e10cSrcweir public:
1904cdf0e10cSrcweir oslSocket sHandle;
1905cdf0e10cSrcweir // initialization
setUp()1906cdf0e10cSrcweir void setUp( )
1907cdf0e10cSrcweir {
1908cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
1909cdf0e10cSrcweir }
1910cdf0e10cSrcweir
tearDown()1911cdf0e10cSrcweir void tearDown( )
1912cdf0e10cSrcweir {
1913cdf0e10cSrcweir sHandle = NULL;
1914cdf0e10cSrcweir }
1915cdf0e10cSrcweir
1916cdf0e10cSrcweir
getLocalHost_001()1917cdf0e10cSrcweir void getLocalHost_001()
1918cdf0e10cSrcweir {
1919cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
1920cdf0e10cSrcweir //port number from IP_PORT_HTTP1 to IP_PORT_MYPORT6, mindyliu
1921cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( aHostIp1, IP_PORT_MYPORT6 );
1922cdf0e10cSrcweir
1923cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
1924cdf0e10cSrcweir
1925cdf0e10cSrcweir sal_Bool bOK1 = sSocket.bind( saBindSocketAddr );
1926cdf0e10cSrcweir ::rtl::OUString suError1 = ::rtl::OUString::createFromAscii("Socket bind fail:") + sSocket.getErrorAsString();
1927cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( suError1, sal_True == bOK1 );
1928cdf0e10cSrcweir sal_Bool bOK;
1929cdf0e10cSrcweir ::rtl::OUString suError;
1930cdf0e10cSrcweir #ifdef WNT
1931cdf0e10cSrcweir bOK = compareUString( sSocket.getLocalHost( ), getThisHostname( ) ) ;
1932cdf0e10cSrcweir suError = outputError(sSocket.getLocalHost( ), getThisHostname( ),
1933cdf0e10cSrcweir "test for getLocalHost function: create localhost socket and check name");
1934cdf0e10cSrcweir #else
1935cdf0e10cSrcweir ::rtl::OUString aUString = ::rtl::OUString::createFromAscii( (const sal_Char *) "localhost" );
1936cdf0e10cSrcweir sal_Bool bRes1, bRes2;
1937cdf0e10cSrcweir bRes1 = compareUString( sSocket.getLocalHost( ), aUString ) ;
1938cdf0e10cSrcweir bRes2 = compareUString( sSocket.getLocalHost( ), saBindSocketAddr.getHostname(0) ) ;
1939cdf0e10cSrcweir bOK = bRes1 || bRes2;
1940cdf0e10cSrcweir suError = outputError(sSocket.getLocalHost( ), aUString, "test for getLocalHost function: create localhost socket and check name");
1941cdf0e10cSrcweir #endif
1942cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( suError, sal_True == bOK );
1943cdf0e10cSrcweir }
1944cdf0e10cSrcweir
getLocalHost_002()1945cdf0e10cSrcweir void getLocalHost_002()
1946cdf0e10cSrcweir {
1947cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
1948cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( aHostIpInval, IP_PORT_POP3);
1949cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr;
1950cdf0e10cSrcweir
1951cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
1952cdf0e10cSrcweir sSocket.bind( saBindSocketAddr );
1953cdf0e10cSrcweir //Invalid IP, so bind should fail
1954cdf0e10cSrcweir sal_Bool bOK = compareUString( sSocket.getLocalHost( ), aNullURL ) ;
1955cdf0e10cSrcweir ::rtl::OUString suError = outputError(sSocket.getLocalHost( ), aNullURL, "test for getLocalHost function: getLocalHost with invalid SocketAddr");
1956cdf0e10cSrcweir
1957cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( suError, sal_True == bOK );
1958cdf0e10cSrcweir }
1959cdf0e10cSrcweir
1960cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getLocalHost );
1961cdf0e10cSrcweir CPPUNIT_TEST( getLocalHost_001 );
1962cdf0e10cSrcweir CPPUNIT_TEST( getLocalHost_002 );
1963cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
1964cdf0e10cSrcweir
1965cdf0e10cSrcweir }; // class getLocalHost
1966cdf0e10cSrcweir
1967cdf0e10cSrcweir
1968cdf0e10cSrcweir /** testing the methods:
1969cdf0e10cSrcweir inline void SAL_CALL getPeerAddr( SocketAddr & Addr) const;
1970cdf0e10cSrcweir inline sal_Int32 SAL_CALL getPeerPort() const;
1971cdf0e10cSrcweir inline ::rtl::OUString SAL_CALL getPeerHost() const;
1972cdf0e10cSrcweir */
1973cdf0e10cSrcweir class getPeer : public CppUnit::TestFixture
1974cdf0e10cSrcweir {
1975cdf0e10cSrcweir public:
1976cdf0e10cSrcweir oslSocket sHandle;
1977cdf0e10cSrcweir TimeValue *pTimeout;
1978cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket;
1979cdf0e10cSrcweir ::osl::ConnectorSocket csConnectorSocket;
1980cdf0e10cSrcweir
1981cdf0e10cSrcweir
1982cdf0e10cSrcweir // initialization
setUp()1983cdf0e10cSrcweir void setUp( )
1984cdf0e10cSrcweir {
1985cdf0e10cSrcweir pTimeout = ( TimeValue* )malloc( sizeof( TimeValue ) );
1986cdf0e10cSrcweir pTimeout->Seconds = 3;
1987cdf0e10cSrcweir pTimeout->Nanosec = 0;
1988cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
1989cdf0e10cSrcweir }
1990cdf0e10cSrcweir
tearDown()1991cdf0e10cSrcweir void tearDown( )
1992cdf0e10cSrcweir {
1993cdf0e10cSrcweir free( pTimeout );
1994cdf0e10cSrcweir sHandle = NULL;
1995cdf0e10cSrcweir asAcceptorSocket.close( );
1996cdf0e10cSrcweir csConnectorSocket.close( );
1997cdf0e10cSrcweir }
1998cdf0e10cSrcweir
1999cdf0e10cSrcweir
getPeer_001()2000cdf0e10cSrcweir void getPeer_001()
2001cdf0e10cSrcweir {
2002cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIp1, IP_PORT_MYPORT );
2003cdf0e10cSrcweir ::osl::SocketAddr saTargetSocketAddr( aHostIp1, IP_PORT_MYPORT );
2004cdf0e10cSrcweir ::osl::SocketAddr saPeerSocketAddr( aHostIp2, IP_PORT_FTP );
2005cdf0e10cSrcweir ::osl::StreamSocket ssConnection;
2006cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
2007cdf0e10cSrcweir /// launch server socket
2008cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
2009cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket bind '127.0.0.1' address failed.", sal_True == bOK1 );
2010cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
2011cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket listen failed.", sal_True == bOK2 );
2012cdf0e10cSrcweir
2013cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_True );
2014cdf0e10cSrcweir asAcceptorSocket.acceptConnection(ssConnection); /// waiting for incoming connection...
2015cdf0e10cSrcweir
2016cdf0e10cSrcweir /// launch client socket
2017cdf0e10cSrcweir csConnectorSocket.connect( saTargetSocketAddr, pTimeout ); /// connecting to server...
2018cdf0e10cSrcweir
2019cdf0e10cSrcweir /// get peer information
2020cdf0e10cSrcweir csConnectorSocket.getPeerAddr( saPeerSocketAddr );/// connected.
2021cdf0e10cSrcweir sal_Int32 peerPort = csConnectorSocket.getPeerPort( );
2022cdf0e10cSrcweir ::rtl::OUString peerHost = csConnectorSocket.getPeerHost( );
2023cdf0e10cSrcweir
2024cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getPeer function: setup a connection and then get the peer address, port and host from client side.",
2025cdf0e10cSrcweir ( sal_True == compareSocketAddr( saPeerSocketAddr, saLocalSocketAddr ) )&&
2026cdf0e10cSrcweir ( sal_True == compareUString( peerHost, saLocalSocketAddr.getHostname( 0 ) ) ) &&
2027cdf0e10cSrcweir ( peerPort == saLocalSocketAddr.getPort( ) ));
2028cdf0e10cSrcweir }
2029cdf0e10cSrcweir
2030cdf0e10cSrcweir
2031cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getPeer );
2032cdf0e10cSrcweir CPPUNIT_TEST( getPeer_001 );
2033cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
2034cdf0e10cSrcweir
2035cdf0e10cSrcweir }; // class getPeer
2036cdf0e10cSrcweir
2037cdf0e10cSrcweir
2038cdf0e10cSrcweir /** testing the methods:
2039cdf0e10cSrcweir inline sal_Bool SAL_CALL bind(const SocketAddr& LocalInterface);
2040cdf0e10cSrcweir */
2041cdf0e10cSrcweir
2042cdf0e10cSrcweir
2043cdf0e10cSrcweir class bind : public CppUnit::TestFixture
2044cdf0e10cSrcweir {
2045cdf0e10cSrcweir public:
2046cdf0e10cSrcweir oslSocket sHandle;
2047cdf0e10cSrcweir // initialization
setUp()2048cdf0e10cSrcweir void setUp( )
2049cdf0e10cSrcweir {
2050cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
2051cdf0e10cSrcweir }
2052cdf0e10cSrcweir
tearDown()2053cdf0e10cSrcweir void tearDown( )
2054cdf0e10cSrcweir {
2055cdf0e10cSrcweir sHandle = NULL;
2056cdf0e10cSrcweir }
2057cdf0e10cSrcweir
2058cdf0e10cSrcweir
bind_001()2059cdf0e10cSrcweir void bind_001()
2060cdf0e10cSrcweir {
2061cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
2062cdf0e10cSrcweir //bind must use local IP address ---mindyliu
2063cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( getLocalIP(), IP_PORT_MYPORT5 );
2064cdf0e10cSrcweir
2065cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
2066cdf0e10cSrcweir sal_Bool bOK1 = sSocket.bind( saBindSocketAddr );
2067cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "Socket bind fail.", sal_True == bOK1 );
2068cdf0e10cSrcweir
2069cdf0e10cSrcweir sal_Bool bOK2 = compareUString( sSocket.getLocalHost( ), saBindSocketAddr.getHostname( ) ) ;
2070cdf0e10cSrcweir
2071cdf0e10cSrcweir sSocket.close();
2072cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for bind function: bind a valid address.", sal_True == bOK2 );
2073cdf0e10cSrcweir }
2074cdf0e10cSrcweir
bind_002()2075cdf0e10cSrcweir void bind_002()
2076cdf0e10cSrcweir {
2077cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
2078cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( aHostIpInval, IP_PORT_NETBIOS );
2079cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr;
2080cdf0e10cSrcweir
2081cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1); // sal_True);
2082cdf0e10cSrcweir sal_Bool bOK1 = sSocket.bind( saBindSocketAddr );
2083cdf0e10cSrcweir sal_Bool bOK2 = compareUString( sSocket.getLocalHost( ), getThisHostname( ) ) ;
2084cdf0e10cSrcweir
2085cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for bind function: bind a valid address.",
2086cdf0e10cSrcweir ( sal_False == bOK1 ) && ( sal_False == bOK2 ) );
2087cdf0e10cSrcweir }
2088cdf0e10cSrcweir
2089cdf0e10cSrcweir CPPUNIT_TEST_SUITE( bind );
2090cdf0e10cSrcweir CPPUNIT_TEST( bind_001 );
2091cdf0e10cSrcweir CPPUNIT_TEST( bind_002 );
2092cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
2093cdf0e10cSrcweir
2094cdf0e10cSrcweir }; // class bind
2095cdf0e10cSrcweir
2096cdf0e10cSrcweir
2097cdf0e10cSrcweir /** testing the methods:
2098cdf0e10cSrcweir inline sal_Bool SAL_CALL isRecvReady(const TimeValue *pTimeout = 0) const;
2099cdf0e10cSrcweir
2100cdf0e10cSrcweir */
2101cdf0e10cSrcweir class isRecvReady : public CppUnit::TestFixture
2102cdf0e10cSrcweir {
2103cdf0e10cSrcweir public:
2104cdf0e10cSrcweir oslSocket sHandle;
2105cdf0e10cSrcweir TimeValue *pTimeout;
2106cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket;
2107cdf0e10cSrcweir ::osl::ConnectorSocket csConnectorSocket;
2108cdf0e10cSrcweir
2109cdf0e10cSrcweir
2110cdf0e10cSrcweir // initialization
setUp()2111cdf0e10cSrcweir void setUp( )
2112cdf0e10cSrcweir {
2113cdf0e10cSrcweir pTimeout = ( TimeValue* )malloc( sizeof( TimeValue ) );
2114cdf0e10cSrcweir pTimeout->Seconds = 3;
2115cdf0e10cSrcweir pTimeout->Nanosec = 0;
2116cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
2117cdf0e10cSrcweir }
2118cdf0e10cSrcweir
tearDown()2119cdf0e10cSrcweir void tearDown( )
2120cdf0e10cSrcweir {
2121cdf0e10cSrcweir free( pTimeout );
2122cdf0e10cSrcweir sHandle = NULL;
2123cdf0e10cSrcweir asAcceptorSocket.close( );
2124cdf0e10cSrcweir csConnectorSocket.close( );
2125cdf0e10cSrcweir }
2126cdf0e10cSrcweir
2127cdf0e10cSrcweir
isRecvReady_001()2128cdf0e10cSrcweir void isRecvReady_001()
2129cdf0e10cSrcweir {
2130cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIp1, IP_PORT_MYPORT1 );
2131cdf0e10cSrcweir ::osl::SocketAddr saTargetSocketAddr( aHostIp1, IP_PORT_MYPORT1 );
2132cdf0e10cSrcweir ::osl::SocketAddr saPeerSocketAddr( aHostIp2, IP_PORT_FTP );
2133cdf0e10cSrcweir ::osl::StreamSocket ssConnection;
2134cdf0e10cSrcweir /// launch server socket
2135cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); // sal_True);
2136cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
2137cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket bind address failed.", sal_True == bOK1 );
2138cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
2139cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket listen failed.", sal_True == bOK2 );
2140cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_True );
2141cdf0e10cSrcweir asAcceptorSocket.acceptConnection(ssConnection); /// waiting for incoming connection...
2142cdf0e10cSrcweir
2143cdf0e10cSrcweir /// launch client socket
2144cdf0e10cSrcweir csConnectorSocket.connect( saTargetSocketAddr, pTimeout ); /// connecting to server...
2145cdf0e10cSrcweir
2146cdf0e10cSrcweir /// is receive ready?
2147cdf0e10cSrcweir sal_Bool bOK3 = asAcceptorSocket.isRecvReady( pTimeout );
2148cdf0e10cSrcweir
2149cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for isRecvReady function: setup a connection and then check if it can transmit data.",
2150cdf0e10cSrcweir ( sal_True == bOK3 ) );
2151cdf0e10cSrcweir }
2152cdf0e10cSrcweir
2153cdf0e10cSrcweir
2154cdf0e10cSrcweir CPPUNIT_TEST_SUITE( isRecvReady );
2155cdf0e10cSrcweir CPPUNIT_TEST( isRecvReady_001 );
2156cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
2157cdf0e10cSrcweir
2158cdf0e10cSrcweir }; // class isRecvReady
2159cdf0e10cSrcweir
2160cdf0e10cSrcweir
2161cdf0e10cSrcweir /** testing the methods:
2162cdf0e10cSrcweir inline sal_Bool SAL_CALL isSendReady(const TimeValue *pTimeout = 0) const;
2163cdf0e10cSrcweir */
2164cdf0e10cSrcweir class isSendReady : public CppUnit::TestFixture
2165cdf0e10cSrcweir {
2166cdf0e10cSrcweir public:
2167cdf0e10cSrcweir oslSocket sHandle;
2168cdf0e10cSrcweir TimeValue *pTimeout;
2169cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket;
2170cdf0e10cSrcweir ::osl::ConnectorSocket csConnectorSocket;
2171cdf0e10cSrcweir
2172cdf0e10cSrcweir
2173cdf0e10cSrcweir // initialization
setUp()2174cdf0e10cSrcweir void setUp( )
2175cdf0e10cSrcweir {
2176cdf0e10cSrcweir pTimeout = ( TimeValue* )malloc( sizeof( TimeValue ) );
2177cdf0e10cSrcweir pTimeout->Seconds = 3;
2178cdf0e10cSrcweir pTimeout->Nanosec = 0;
2179cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
2180cdf0e10cSrcweir }
2181cdf0e10cSrcweir
tearDown()2182cdf0e10cSrcweir void tearDown( )
2183cdf0e10cSrcweir {
2184cdf0e10cSrcweir free( pTimeout );
2185cdf0e10cSrcweir sHandle = NULL;
2186cdf0e10cSrcweir asAcceptorSocket.close( );
2187cdf0e10cSrcweir csConnectorSocket.close( );
2188cdf0e10cSrcweir }
2189cdf0e10cSrcweir
2190cdf0e10cSrcweir
isSendReady_001()2191cdf0e10cSrcweir void isSendReady_001()
2192cdf0e10cSrcweir {
2193cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIp1, IP_PORT_MYPORT );
2194cdf0e10cSrcweir ::osl::SocketAddr saTargetSocketAddr( aHostIp1, IP_PORT_MYPORT );
2195cdf0e10cSrcweir ::osl::SocketAddr saPeerSocketAddr( aHostIp2, IP_PORT_FTP );
2196cdf0e10cSrcweir ::osl::StreamSocket ssConnection;
2197cdf0e10cSrcweir
2198cdf0e10cSrcweir /// launch server socket
2199cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
2200cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
2201cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket bind address failed.", sal_True == bOK1 );
2202cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
2203cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket listen failed.", sal_True == bOK2 );
2204cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_True );
2205cdf0e10cSrcweir asAcceptorSocket.acceptConnection(ssConnection); /// waiting for incoming connection...
2206cdf0e10cSrcweir
2207cdf0e10cSrcweir /// launch client socket
2208cdf0e10cSrcweir csConnectorSocket.connect( saTargetSocketAddr, pTimeout ); /// connecting to server...
2209cdf0e10cSrcweir
2210cdf0e10cSrcweir /// is send ready?
2211cdf0e10cSrcweir sal_Bool bOK3 = csConnectorSocket.isSendReady( pTimeout );
2212cdf0e10cSrcweir
2213cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for isSendReady function: setup a connection and then check if it can transmit data.",
2214cdf0e10cSrcweir ( sal_True == bOK3 ) );
2215cdf0e10cSrcweir }
2216cdf0e10cSrcweir
2217cdf0e10cSrcweir
2218cdf0e10cSrcweir CPPUNIT_TEST_SUITE( isSendReady );
2219cdf0e10cSrcweir CPPUNIT_TEST( isSendReady_001 );
2220cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
2221cdf0e10cSrcweir
2222cdf0e10cSrcweir }; // class isSendReady
2223cdf0e10cSrcweir
2224cdf0e10cSrcweir
2225cdf0e10cSrcweir /** testing the methods:
2226cdf0e10cSrcweir inline oslSocketType SAL_CALL getType() const;
2227cdf0e10cSrcweir
2228cdf0e10cSrcweir */
2229cdf0e10cSrcweir
2230cdf0e10cSrcweir class getType : public CppUnit::TestFixture
2231cdf0e10cSrcweir {
2232cdf0e10cSrcweir public:
2233cdf0e10cSrcweir oslSocket sHandle;
2234cdf0e10cSrcweir // initialization
setUp()2235cdf0e10cSrcweir void setUp( )
2236cdf0e10cSrcweir {
2237cdf0e10cSrcweir
2238cdf0e10cSrcweir }
2239cdf0e10cSrcweir
tearDown()2240cdf0e10cSrcweir void tearDown( )
2241cdf0e10cSrcweir {
2242cdf0e10cSrcweir sHandle = NULL;
2243cdf0e10cSrcweir }
2244cdf0e10cSrcweir
2245cdf0e10cSrcweir
getType_001()2246cdf0e10cSrcweir void getType_001()
2247cdf0e10cSrcweir {
2248cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
2249cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
2250cdf0e10cSrcweir
2251cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getType function: get type of socket.",
2252cdf0e10cSrcweir osl_Socket_TypeStream == sSocket.getType( ) );
2253cdf0e10cSrcweir }
2254cdf0e10cSrcweir
getType_002()2255cdf0e10cSrcweir void getType_002()
2256cdf0e10cSrcweir {
2257cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeDgram, osl_Socket_ProtocolIp );
2258cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
2259cdf0e10cSrcweir
2260cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getType function: get type of socket.",
2261cdf0e10cSrcweir osl_Socket_TypeDgram == sSocket.getType( ) );
2262cdf0e10cSrcweir }
2263cdf0e10cSrcweir
2264cdf0e10cSrcweir #ifdef UNX
2265cdf0e10cSrcweir // mindy: since on LINUX and SOLARIS, Raw type socket can not be created, so do not test getType() here
2266cdf0e10cSrcweir // mindy: and add one test case to test creating Raw type socket--> ctors_TypeRaw()
getType_003()2267cdf0e10cSrcweir void getType_003()
2268cdf0e10cSrcweir {
2269cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getType function: get type of socket.this is not passed in (LINUX, SOLARIS), the osl_Socket_TypeRaw, type socket can not be created.",
2270cdf0e10cSrcweir sal_True);
2271cdf0e10cSrcweir }
2272cdf0e10cSrcweir #else
getType_003()2273cdf0e10cSrcweir void getType_003()
2274cdf0e10cSrcweir {
2275cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeRaw, osl_Socket_ProtocolIp );
2276cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
2277cdf0e10cSrcweir
2278cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getType function: get type of socket.",
2279cdf0e10cSrcweir osl_Socket_TypeRaw == sSocket.getType( ) );
2280cdf0e10cSrcweir }
2281cdf0e10cSrcweir #endif
2282cdf0e10cSrcweir
2283cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getType );
2284cdf0e10cSrcweir CPPUNIT_TEST( getType_001 );
2285cdf0e10cSrcweir CPPUNIT_TEST( getType_002 );
2286cdf0e10cSrcweir CPPUNIT_TEST( getType_003 );
2287cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
2288cdf0e10cSrcweir
2289cdf0e10cSrcweir }; // class getType
2290cdf0e10cSrcweir
2291cdf0e10cSrcweir
2292cdf0e10cSrcweir
2293cdf0e10cSrcweir /** testing the methods:
2294cdf0e10cSrcweir inline sal_Int32 SAL_CALL getOption(
2295cdf0e10cSrcweir oslSocketOption Option,
2296cdf0e10cSrcweir void* pBuffer,
2297cdf0e10cSrcweir sal_uInt32 BufferLen,
2298cdf0e10cSrcweir oslSocketOptionLevel Level= osl_Socket_LevelSocket) const;
2299cdf0e10cSrcweir
2300cdf0e10cSrcweir inline sal_Int32 getOption( oslSocketOption option ) const;
2301cdf0e10cSrcweir
2302cdf0e10cSrcweir */
2303cdf0e10cSrcweir
2304cdf0e10cSrcweir class getOption : public CppUnit::TestFixture
2305cdf0e10cSrcweir {
2306cdf0e10cSrcweir public:
2307cdf0e10cSrcweir oslSocket sHandle;
2308cdf0e10cSrcweir // initialization
setUp()2309cdf0e10cSrcweir void setUp( )
2310cdf0e10cSrcweir {
2311cdf0e10cSrcweir
2312cdf0e10cSrcweir }
2313cdf0e10cSrcweir
tearDown()2314cdf0e10cSrcweir void tearDown( )
2315cdf0e10cSrcweir {
2316cdf0e10cSrcweir sHandle = NULL;
2317cdf0e10cSrcweir }
2318cdf0e10cSrcweir
2319cdf0e10cSrcweir /** test writer's comment:
2320cdf0e10cSrcweir
2321cdf0e10cSrcweir in oslSocketOption, the osl_Socket_OptionType denote 1 as osl_Socket_TypeStream.
2322cdf0e10cSrcweir 2 as osl_Socket_TypeDgram, etc which is not mapping the oslSocketType enum. differ
2323cdf0e10cSrcweir in 1.
2324cdf0e10cSrcweir */
2325cdf0e10cSrcweir
getOption_001()2326cdf0e10cSrcweir void getOption_001()
2327cdf0e10cSrcweir {
2328cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
2329cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
2330cdf0e10cSrcweir sal_Int32 * pType = ( sal_Int32 * )malloc( sizeof ( sal_Int32 ) );
2331cdf0e10cSrcweir *pType = 0;
2332cdf0e10cSrcweir sSocket.getOption( osl_Socket_OptionType, pType, sizeof ( sal_Int32 ) );
2333cdf0e10cSrcweir sal_Bool bOK = ( SOCK_STREAM == *pType );
2334cdf0e10cSrcweir // there is a TypeMap(socket.c) which map osl_Socket_TypeStream to SOCK_STREAM on UNX, and SOCK_STREAM != osl_Socket_TypeStream
2335cdf0e10cSrcweir //sal_Bool bOK = ( TYPE_TO_NATIVE(osl_Socket_TypeStream) == *pType );
2336cdf0e10cSrcweir free( pType );
2337cdf0e10cSrcweir
2338cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getOption function: get type option of socket.",
2339cdf0e10cSrcweir sal_True == bOK );
2340cdf0e10cSrcweir }
2341cdf0e10cSrcweir
2342cdf0e10cSrcweir // getsockopt error
getOption_004()2343cdf0e10cSrcweir void getOption_004()
2344cdf0e10cSrcweir {
2345cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeDgram, osl_Socket_ProtocolIp );
2346cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
2347cdf0e10cSrcweir
2348cdf0e10cSrcweir sal_Bool * pbDontRoute = ( sal_Bool * )malloc( sizeof ( sal_Bool ) );
2349cdf0e10cSrcweir sal_Int32 nRes = sSocket.getOption( osl_Socket_OptionInvalid, pbDontRoute, sizeof ( sal_Bool ) );
2350cdf0e10cSrcweir free( pbDontRoute );
2351cdf0e10cSrcweir
2352cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getOption function: get invalid option of socket, should return -1.",
2353cdf0e10cSrcweir nRes == -1 );
2354cdf0e10cSrcweir }
2355cdf0e10cSrcweir
getOption_simple_001()2356cdf0e10cSrcweir void getOption_simple_001()
2357cdf0e10cSrcweir {
2358cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeDgram, osl_Socket_ProtocolIp );
2359cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
2360cdf0e10cSrcweir
2361cdf0e10cSrcweir sal_Bool bOK = ( sal_False == sSocket.getOption( osl_Socket_OptionDontRoute ) );
2362cdf0e10cSrcweir
2363cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getOption function: get debug option of socket.",
2364cdf0e10cSrcweir sal_True == bOK );
2365cdf0e10cSrcweir }
2366cdf0e10cSrcweir
getOption_simple_002()2367cdf0e10cSrcweir void getOption_simple_002()
2368cdf0e10cSrcweir {
2369cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeDgram, osl_Socket_ProtocolIp );
2370cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
2371cdf0e10cSrcweir
2372cdf0e10cSrcweir sal_Bool bOK = ( sal_False == sSocket.getOption( osl_Socket_OptionDebug ) );
2373cdf0e10cSrcweir
2374cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getOption function: get debug option of socket.",
2375cdf0e10cSrcweir sal_True == bOK );
2376cdf0e10cSrcweir }
2377cdf0e10cSrcweir
2378cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getOption );
2379cdf0e10cSrcweir CPPUNIT_TEST( getOption_001 );
2380cdf0e10cSrcweir CPPUNIT_TEST( getOption_004 );
2381cdf0e10cSrcweir CPPUNIT_TEST( getOption_simple_001 );
2382cdf0e10cSrcweir CPPUNIT_TEST( getOption_simple_002 );
2383cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
2384cdf0e10cSrcweir
2385cdf0e10cSrcweir }; // class getOption
2386cdf0e10cSrcweir
2387cdf0e10cSrcweir
2388cdf0e10cSrcweir /** testing the methods:
2389cdf0e10cSrcweir inline sal_Bool SAL_CALL setOption( oslSocketOption Option,
2390cdf0e10cSrcweir void* pBuffer,
2391cdf0e10cSrcweir sal_uInt32 BufferLen,
2392cdf0e10cSrcweir oslSocketOptionLevel Level= osl_Socket_LevelSocket ) const;
2393cdf0e10cSrcweir */
2394cdf0e10cSrcweir
2395cdf0e10cSrcweir class setOption : public CppUnit::TestFixture
2396cdf0e10cSrcweir {
2397cdf0e10cSrcweir public:
2398cdf0e10cSrcweir TimeValue *pTimeout;
2399cdf0e10cSrcweir // LLA: maybe there is an error in the source,
2400cdf0e10cSrcweir // as long as I remember, if a derived class do not overload all ctors there is a problem.
2401cdf0e10cSrcweir
2402cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket;
2403cdf0e10cSrcweir
setUp()2404cdf0e10cSrcweir void setUp( )
2405cdf0e10cSrcweir {
2406cdf0e10cSrcweir
2407cdf0e10cSrcweir }
2408cdf0e10cSrcweir
tearDown()2409cdf0e10cSrcweir void tearDown( )
2410cdf0e10cSrcweir {
2411cdf0e10cSrcweir asAcceptorSocket.close( );
2412cdf0e10cSrcweir }
2413cdf0e10cSrcweir
2414cdf0e10cSrcweir
2415cdf0e10cSrcweir // LLA:
2416cdf0e10cSrcweir // getSocketOption returns BufferLen, or -1 if something failed
2417cdf0e10cSrcweir
2418cdf0e10cSrcweir // setSocketOption returns sal_True, if option could stored
2419cdf0e10cSrcweir // else sal_False
2420cdf0e10cSrcweir
setOption_001()2421cdf0e10cSrcweir void setOption_001()
2422cdf0e10cSrcweir {
2423cdf0e10cSrcweir /// set and get option.
2424cdf0e10cSrcweir int nBufferLen = sizeof ( sal_Int32);
2425cdf0e10cSrcweir // LLA: SO_DONTROUTE expect an integer boolean, what ever it is, it's not sal_Bool!
2426cdf0e10cSrcweir
2427cdf0e10cSrcweir sal_Int32 * pbDontRouteSet = ( sal_Int32 * )malloc( sizeof ( sal_Int32 ) );
2428cdf0e10cSrcweir *pbDontRouteSet = 1; // sal_True;
2429cdf0e10cSrcweir
2430cdf0e10cSrcweir sal_Int32 * pGetBuffer = ( sal_Int32 * )malloc( sizeof ( sal_Int32 ) );
2431cdf0e10cSrcweir *pGetBuffer = 0;
2432cdf0e10cSrcweir
2433cdf0e10cSrcweir // maybe asAcceptorSocket is not right initialized
2434cdf0e10cSrcweir sal_Bool b1 = asAcceptorSocket.setOption( osl_Socket_OptionDontRoute, pbDontRouteSet, nBufferLen );
2435cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "setOption function failed.", ( sal_True == b1 ) );
2436cdf0e10cSrcweir sal_Int32 n2 = asAcceptorSocket.getOption( osl_Socket_OptionDontRoute, pGetBuffer, nBufferLen );
2437cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "getOption function failed.", ( n2 == nBufferLen ) );
2438cdf0e10cSrcweir
2439cdf0e10cSrcweir // on Linux, the value of option is 1, on Solaris, it's 16, but it's not important the exact value,
2440cdf0e10cSrcweir // just judge it is zero or not!
2441cdf0e10cSrcweir sal_Bool bOK = ( 0 != *pGetBuffer );
2442cdf0e10cSrcweir t_print("#setOption_001: getOption is %d \n", *pGetBuffer);
2443cdf0e10cSrcweir
2444cdf0e10cSrcweir // toggle check, set to 0
2445cdf0e10cSrcweir *pbDontRouteSet = 0;
2446cdf0e10cSrcweir
2447cdf0e10cSrcweir sal_Bool b3 = asAcceptorSocket.setOption( osl_Socket_OptionDontRoute, pbDontRouteSet, sizeof ( sal_Int32 ) );
2448cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "setOption function failed.", ( sal_True == b3 ) );
2449cdf0e10cSrcweir sal_Int32 n4 = asAcceptorSocket.getOption( osl_Socket_OptionDontRoute, pGetBuffer, nBufferLen );
2450cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "getOption (DONTROUTE) function failed.", ( n4 == nBufferLen ) );
2451cdf0e10cSrcweir
2452cdf0e10cSrcweir sal_Bool bOK2 = ( 0 == *pGetBuffer );
2453cdf0e10cSrcweir
2454cdf0e10cSrcweir t_print("#setOption_001: getOption is %d \n", *pGetBuffer);
2455cdf0e10cSrcweir
2456cdf0e10cSrcweir // LLA: sal_Bool * pbDontTouteSet = ( sal_Bool * )malloc( sizeof ( sal_Bool ) );
2457cdf0e10cSrcweir // LLA: *pbDontTouteSet = sal_True;
2458cdf0e10cSrcweir // LLA: sal_Bool * pbDontTouteGet = ( sal_Bool * )malloc( sizeof ( sal_Bool ) );
2459cdf0e10cSrcweir // LLA: *pbDontTouteGet = sal_False;
2460cdf0e10cSrcweir // LLA: asAcceptorSocket.setOption( osl_Socket_OptionDontRoute, pbDontTouteSet, sizeof ( sal_Bool ) );
2461cdf0e10cSrcweir // LLA: asAcceptorSocket.getOption( osl_Socket_OptionDontRoute, pbDontTouteGet, sizeof ( sal_Bool ) );
2462cdf0e10cSrcweir // LLA: ::rtl::OUString suError = outputError(::rtl::OUString::valueOf((sal_Int32)*pbDontTouteGet),
2463cdf0e10cSrcweir // LLA: ::rtl::OUString::valueOf((sal_Int32)*pbDontTouteSet),
2464cdf0e10cSrcweir // LLA: "test for setOption function: set osl_Socket_OptionDontRoute and then check");
2465cdf0e10cSrcweir // LLA:
2466cdf0e10cSrcweir // LLA: sal_Bool bOK = ( sal_True == *pbDontTouteGet );
2467cdf0e10cSrcweir // LLA: free( pbDontTouteSet );
2468cdf0e10cSrcweir // LLA: free( pbDontTouteGet );
2469cdf0e10cSrcweir
2470cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for setOption function: set option of a socket and then check.",
2471cdf0e10cSrcweir ( sal_True == bOK ) && (sal_True == bOK2) );
2472cdf0e10cSrcweir
2473cdf0e10cSrcweir free( pbDontRouteSet );
2474cdf0e10cSrcweir free( pGetBuffer );
2475cdf0e10cSrcweir // LLA: CPPUNIT_ASSERT_MESSAGE( suError, sal_True == bOK );
2476cdf0e10cSrcweir }
2477cdf0e10cSrcweir
setOption_002()2478cdf0e10cSrcweir void setOption_002()
2479cdf0e10cSrcweir {
2480cdf0e10cSrcweir /// set and get option.
2481cdf0e10cSrcweir
2482cdf0e10cSrcweir // sal_Int32 * pbLingerSet = ( sal_Int32 * )malloc( nBufferLen );
2483cdf0e10cSrcweir // *pbLingerSet = 7;
2484cdf0e10cSrcweir // sal_Int32 * pbLingerGet = ( sal_Int32 * )malloc( nBufferLen );
2485cdf0e10cSrcweir /* struct */linger aLingerSet;
2486cdf0e10cSrcweir sal_Int32 nBufferLen = sizeof( struct linger );
2487cdf0e10cSrcweir aLingerSet.l_onoff = 1;
2488cdf0e10cSrcweir aLingerSet.l_linger = 7;
2489cdf0e10cSrcweir
2490cdf0e10cSrcweir linger aLingerGet;
2491cdf0e10cSrcweir
2492cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionLinger, &aLingerSet, nBufferLen );
2493cdf0e10cSrcweir
2494cdf0e10cSrcweir sal_Int32 n1 = asAcceptorSocket.getOption( osl_Socket_OptionLinger, &aLingerGet, nBufferLen );
2495cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "getOption (SO_LINGER) function failed.", ( n1 == nBufferLen ) );
2496cdf0e10cSrcweir
2497cdf0e10cSrcweir //t_print("#setOption_002: getOption is %d \n", aLingerGet.l_linger);
2498cdf0e10cSrcweir sal_Bool bOK = ( 7 == aLingerGet.l_linger );
2499cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for setOption function: set option of a socket and then check. ",
2500cdf0e10cSrcweir sal_True == bOK );
2501cdf0e10cSrcweir
2502cdf0e10cSrcweir }
2503cdf0e10cSrcweir
setOption_003()2504cdf0e10cSrcweir void setOption_003()
2505cdf0e10cSrcweir {
2506cdf0e10cSrcweir linger aLingerSet;
2507cdf0e10cSrcweir aLingerSet.l_onoff = 1;
2508cdf0e10cSrcweir aLingerSet.l_linger = 7;
2509cdf0e10cSrcweir
2510cdf0e10cSrcweir sal_Bool b1 = asAcceptorSocket.setOption( osl_Socket_OptionLinger, &aLingerSet, 0 );
2511cdf0e10cSrcweir printUString( asAcceptorSocket.getErrorAsString() );
2512cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "setOption (SO_LINGER) function failed for optlen is 0.",
2513cdf0e10cSrcweir ( b1 == sal_False ) );
2514cdf0e10cSrcweir }
2515cdf0e10cSrcweir
setOption_simple_001()2516cdf0e10cSrcweir void setOption_simple_001()
2517cdf0e10cSrcweir {
2518cdf0e10cSrcweir /// set and get option.
2519cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionDontRoute, 1 ); //sal_True );
2520cdf0e10cSrcweir sal_Bool bOK = ( 0 != asAcceptorSocket.getOption( osl_Socket_OptionDontRoute ) );
2521cdf0e10cSrcweir
2522cdf0e10cSrcweir t_print("setOption_simple_001(): getoption is %d \n", asAcceptorSocket.getOption( osl_Socket_OptionDontRoute ) );
2523cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for setOption function: set option of a socket and then check.",
2524cdf0e10cSrcweir ( sal_True == bOK ) );
2525cdf0e10cSrcweir }
2526cdf0e10cSrcweir
setOption_simple_002()2527cdf0e10cSrcweir void setOption_simple_002()
2528cdf0e10cSrcweir {
2529cdf0e10cSrcweir /// set and get option.
2530cdf0e10cSrcweir // LLA: this does not work, due to the fact that SO_LINGER is a structure
2531cdf0e10cSrcweir // LLA: asAcceptorSocket.setOption( osl_Socket_OptionLinger, 7 );
2532cdf0e10cSrcweir // LLA: sal_Bool bOK = ( 7 == asAcceptorSocket.getOption( osl_Socket_OptionLinger ) );
2533cdf0e10cSrcweir
2534cdf0e10cSrcweir // LLA: CPPUNIT_ASSERT_MESSAGE( "test for setOption function: set option of a socket and then check.",
2535cdf0e10cSrcweir // LLA: ( sal_True == bOK ) );
2536cdf0e10cSrcweir }
2537cdf0e10cSrcweir
2538cdf0e10cSrcweir CPPUNIT_TEST_SUITE( setOption );
2539cdf0e10cSrcweir CPPUNIT_TEST( setOption_001 );
2540cdf0e10cSrcweir CPPUNIT_TEST( setOption_002 );
2541cdf0e10cSrcweir CPPUNIT_TEST( setOption_003 );
2542cdf0e10cSrcweir CPPUNIT_TEST( setOption_simple_001 );
2543cdf0e10cSrcweir // LLA: CPPUNIT_TEST( setOption_simple_002 );
2544cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
2545cdf0e10cSrcweir
2546cdf0e10cSrcweir }; // class setOption
2547cdf0e10cSrcweir
2548cdf0e10cSrcweir
2549cdf0e10cSrcweir
2550cdf0e10cSrcweir /** testing the method:
2551cdf0e10cSrcweir inline sal_Bool SAL_CALL enableNonBlockingMode( sal_Bool bNonBlockingMode);
2552cdf0e10cSrcweir */
2553cdf0e10cSrcweir class enableNonBlockingMode : public CppUnit::TestFixture
2554cdf0e10cSrcweir {
2555cdf0e10cSrcweir public:
2556cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket;
2557cdf0e10cSrcweir
enableNonBlockingMode_001()2558cdf0e10cSrcweir void enableNonBlockingMode_001()
2559cdf0e10cSrcweir {
2560cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIp1, IP_PORT_MYPORT );
2561cdf0e10cSrcweir ::osl::StreamSocket ssConnection;
2562cdf0e10cSrcweir
2563cdf0e10cSrcweir /// launch server socket
2564cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
2565cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
2566cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket bind address failed.", sal_True == bOK1 );
2567cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
2568cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket listen failed.", sal_True == bOK2 );
2569cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_True );
2570cdf0e10cSrcweir asAcceptorSocket.acceptConnection(ssConnection); /// waiting for incoming connection...
2571cdf0e10cSrcweir
2572cdf0e10cSrcweir /// if reach this statement, it is non-blocking mode, since acceptConnection will blocked by default.
2573cdf0e10cSrcweir sal_Bool bOK = sal_True;
2574cdf0e10cSrcweir asAcceptorSocket.close( );
2575cdf0e10cSrcweir
2576cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for enableNonBlockingMode function: launch a server socket and make it non blocking. if it can pass the acceptConnection statement, it is non-blocking",
2577cdf0e10cSrcweir ( sal_True == bOK ) );
2578cdf0e10cSrcweir }
2579cdf0e10cSrcweir
2580cdf0e10cSrcweir
2581cdf0e10cSrcweir CPPUNIT_TEST_SUITE( enableNonBlockingMode );
2582cdf0e10cSrcweir CPPUNIT_TEST( enableNonBlockingMode_001 );
2583cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
2584cdf0e10cSrcweir
2585cdf0e10cSrcweir }; // class enableNonBlockingMode
2586cdf0e10cSrcweir
2587cdf0e10cSrcweir
2588cdf0e10cSrcweir /** testing the method:
2589cdf0e10cSrcweir inline sal_Bool SAL_CALL isNonBlockingMode() const;
2590cdf0e10cSrcweir */
2591cdf0e10cSrcweir class isNonBlockingMode : public CppUnit::TestFixture
2592cdf0e10cSrcweir {
2593cdf0e10cSrcweir public:
2594cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket;
2595cdf0e10cSrcweir
isNonBlockingMode_001()2596cdf0e10cSrcweir void isNonBlockingMode_001()
2597cdf0e10cSrcweir {
2598cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIp1, IP_PORT_MYPORT );
2599cdf0e10cSrcweir ::osl::StreamSocket ssConnection;
2600cdf0e10cSrcweir
2601cdf0e10cSrcweir /// launch server socket
2602cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); // sal_True);
2603cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
2604cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket bind address failed.", sal_True == bOK1 );
2605cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
2606cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket listen failed.", sal_True == bOK2 );
2607cdf0e10cSrcweir
2608cdf0e10cSrcweir sal_Bool bOK3 = asAcceptorSocket.isNonBlockingMode( );
2609cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_True );
2610cdf0e10cSrcweir asAcceptorSocket.acceptConnection(ssConnection); /// waiting for incoming connection...
2611cdf0e10cSrcweir
2612cdf0e10cSrcweir /// if reach this statement, it is non-blocking mode, since acceptConnection will blocked by default.
2613cdf0e10cSrcweir sal_Bool bOK4 = asAcceptorSocket.isNonBlockingMode( );
2614cdf0e10cSrcweir asAcceptorSocket.close( );
2615cdf0e10cSrcweir
2616cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for isNonBlockingMode function: launch a server socket and make it non blocking. it is expected to change from blocking mode to non-blocking mode.",
2617cdf0e10cSrcweir ( sal_False == bOK3 ) && ( sal_True == bOK4 ) );
2618cdf0e10cSrcweir }
2619cdf0e10cSrcweir
2620cdf0e10cSrcweir
2621cdf0e10cSrcweir CPPUNIT_TEST_SUITE( isNonBlockingMode );
2622cdf0e10cSrcweir CPPUNIT_TEST( isNonBlockingMode_001 );
2623cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
2624cdf0e10cSrcweir
2625cdf0e10cSrcweir }; // class isNonBlockingMode
2626cdf0e10cSrcweir
2627cdf0e10cSrcweir /** testing the method:
2628cdf0e10cSrcweir inline void SAL_CALL clearError() const;
2629cdf0e10cSrcweir */
2630cdf0e10cSrcweir class clearError : public CppUnit::TestFixture
2631cdf0e10cSrcweir {
2632cdf0e10cSrcweir public:
2633cdf0e10cSrcweir oslSocket sHandle;
2634cdf0e10cSrcweir // initialization
setUp()2635cdf0e10cSrcweir void setUp( )
2636cdf0e10cSrcweir {
2637cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
2638cdf0e10cSrcweir }
2639cdf0e10cSrcweir
tearDown()2640cdf0e10cSrcweir void tearDown( )
2641cdf0e10cSrcweir {
2642cdf0e10cSrcweir sHandle = NULL;
2643cdf0e10cSrcweir }
2644cdf0e10cSrcweir
2645cdf0e10cSrcweir
clearError_001()2646cdf0e10cSrcweir void clearError_001()
2647cdf0e10cSrcweir {
2648cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
2649cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( aHostIpInval, IP_PORT_HTTP2 );
2650cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr;
2651cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
2652cdf0e10cSrcweir sSocket.bind( saBindSocketAddr );//build an error "osl_Socket_E_AddrNotAvail"
2653cdf0e10cSrcweir oslSocketError seBind = sSocket.getError( );
2654cdf0e10cSrcweir sSocket.clearError( );
2655cdf0e10cSrcweir
2656cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for clearError function: trick an error called sSocket.getError( ), and then clear the error states, check the result.",
2657cdf0e10cSrcweir osl_Socket_E_None == sSocket.getError( ) && seBind != osl_Socket_E_None );
2658cdf0e10cSrcweir }
2659cdf0e10cSrcweir
2660cdf0e10cSrcweir
2661cdf0e10cSrcweir CPPUNIT_TEST_SUITE( clearError );
2662cdf0e10cSrcweir CPPUNIT_TEST( clearError_001 );
2663cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
2664cdf0e10cSrcweir
2665cdf0e10cSrcweir }; // class clearError
2666cdf0e10cSrcweir
2667cdf0e10cSrcweir
2668cdf0e10cSrcweir /** testing the methods:
2669cdf0e10cSrcweir inline oslSocketError getError() const;
2670cdf0e10cSrcweir inline ::rtl::OUString getErrorAsString( ) const;
2671cdf0e10cSrcweir */
2672cdf0e10cSrcweir class getError : public CppUnit::TestFixture
2673cdf0e10cSrcweir {
2674cdf0e10cSrcweir public:
2675cdf0e10cSrcweir oslSocket sHandle;
2676cdf0e10cSrcweir // initialization
setUp()2677cdf0e10cSrcweir void setUp( )
2678cdf0e10cSrcweir {
2679cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
2680cdf0e10cSrcweir }
2681cdf0e10cSrcweir
tearDown()2682cdf0e10cSrcweir void tearDown( )
2683cdf0e10cSrcweir {
2684cdf0e10cSrcweir sHandle = NULL;
2685cdf0e10cSrcweir }
2686cdf0e10cSrcweir
2687cdf0e10cSrcweir
getError_001()2688cdf0e10cSrcweir void getError_001()
2689cdf0e10cSrcweir {
2690cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
2691cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( aHostIp1, IP_PORT_FTP );
2692cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr;
2693cdf0e10cSrcweir
2694cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for getError function: should get no error.",
2695cdf0e10cSrcweir osl_Socket_E_None == sSocket.getError( ) );
2696cdf0e10cSrcweir }
2697cdf0e10cSrcweir
getError_002()2698cdf0e10cSrcweir void getError_002()
2699cdf0e10cSrcweir {
2700cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
2701cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( aHostIpInval, IP_PORT_FTP );
2702cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr;
2703cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
2704cdf0e10cSrcweir sSocket.bind( saBindSocketAddr );//build an error "osl_Socket_E_AddrNotAvail"
2705cdf0e10cSrcweir //on Solaris, the error no is EACCES, but it has no mapped value, so getError() returned osl_Socket_E_InvalidError.
2706cdf0e10cSrcweir #if defined(SOLARIS)
2707cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "trick an error called sSocket.getError( ), check the getError result.Failed on Solaris, returned osl_Socket_E_InvalidError because no entry to map the errno EACCES. ",
2708cdf0e10cSrcweir osl_Socket_E_InvalidError == sSocket.getError( ) );
2709cdf0e10cSrcweir #else
2710cdf0e10cSrcweir //while on Linux & Win32, the errno is EADDRNOTAVAIL, getError returned osl_Socket_E_AddrNotAvail.
2711cdf0e10cSrcweir
2712cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "trick an error called sSocket.getError( ), check the getError result.Failed on Solaris, returned osl_Socket_E_InvalidError because no entry to map the errno EACCES. Passed on Linux & Win32",
2713cdf0e10cSrcweir osl_Socket_E_AddrNotAvail == sSocket.getError( ) );
2714cdf0e10cSrcweir #endif
2715cdf0e10cSrcweir }
2716cdf0e10cSrcweir
2717cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getError );
2718cdf0e10cSrcweir CPPUNIT_TEST( getError_001 );
2719cdf0e10cSrcweir CPPUNIT_TEST( getError_002 );
2720cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
2721cdf0e10cSrcweir
2722cdf0e10cSrcweir }; // class getError
2723cdf0e10cSrcweir
2724cdf0e10cSrcweir
2725cdf0e10cSrcweir
2726cdf0e10cSrcweir /** testing the methods:
2727cdf0e10cSrcweir inline oslSocket getHandle() const;
2728cdf0e10cSrcweir */
2729cdf0e10cSrcweir
2730cdf0e10cSrcweir class getHandle : public CppUnit::TestFixture
2731cdf0e10cSrcweir {
2732cdf0e10cSrcweir public:
2733cdf0e10cSrcweir oslSocket sHandle;
2734cdf0e10cSrcweir // initialization
setUp()2735cdf0e10cSrcweir void setUp( )
2736cdf0e10cSrcweir {
2737cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
2738cdf0e10cSrcweir }
2739cdf0e10cSrcweir
tearDown()2740cdf0e10cSrcweir void tearDown( )
2741cdf0e10cSrcweir {
2742cdf0e10cSrcweir sHandle = NULL;
2743cdf0e10cSrcweir }
2744cdf0e10cSrcweir
getHandle_001()2745cdf0e10cSrcweir void getHandle_001()
2746cdf0e10cSrcweir {
2747cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
2748cdf0e10cSrcweir ::osl::Socket assignSocket = sSocket.getHandle();
2749cdf0e10cSrcweir
2750cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for operators_assignment_handle function: test the assignment operator.",
2751cdf0e10cSrcweir osl_Socket_TypeStream == assignSocket.getType( ) );
2752cdf0e10cSrcweir }
2753cdf0e10cSrcweir
getHandle_002()2754cdf0e10cSrcweir void getHandle_002()
2755cdf0e10cSrcweir {
2756cdf0e10cSrcweir ::osl::Socket sSocket( sHandle );
2757cdf0e10cSrcweir ::osl::Socket assignSocket ( sSocket.getHandle( ) );
2758cdf0e10cSrcweir
2759cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for operators_assignment function: assignment operator",
2760cdf0e10cSrcweir osl_Socket_TypeStream == assignSocket.getType( ) );
2761cdf0e10cSrcweir }
2762cdf0e10cSrcweir
2763cdf0e10cSrcweir CPPUNIT_TEST_SUITE( getHandle );
2764cdf0e10cSrcweir CPPUNIT_TEST( getHandle_001 );
2765cdf0e10cSrcweir CPPUNIT_TEST( getHandle_002 );
2766cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
2767cdf0e10cSrcweir
2768cdf0e10cSrcweir }; // class getHandle
2769cdf0e10cSrcweir
2770cdf0e10cSrcweir
2771cdf0e10cSrcweir // -----------------------------------------------------------------------------
2772cdf0e10cSrcweir
2773cdf0e10cSrcweir
2774cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::ctors, "osl_Socket");
2775cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::operators, "osl_Socket");
2776cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::close, "osl_Socket");
2777cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::getLocalAddr, "osl_Socket");
2778cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::getLocalPort, "osl_Socket");
2779cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::getLocalHost, "osl_Socket");
2780cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::getPeer, "osl_Socket");
2781cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::bind, "osl_Socket");
2782cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::isRecvReady, "osl_Socket");
2783cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::isSendReady, "osl_Socket");
2784cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::getType, "osl_Socket");
2785cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::getOption, "osl_Socket");
2786cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::setOption, "osl_Socket");
2787cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::enableNonBlockingMode, "osl_Socket");
2788cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::isNonBlockingMode, "osl_Socket");
2789cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::clearError, "osl_Socket");
2790cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::getError, "osl_Socket");
2791cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_Socket::getHandle, "osl_Socket");
2792cdf0e10cSrcweir
2793cdf0e10cSrcweir } // namespace osl_Socket
2794cdf0e10cSrcweir
2795cdf0e10cSrcweir
2796cdf0e10cSrcweir
2797cdf0e10cSrcweir namespace osl_StreamSocket
2798cdf0e10cSrcweir {
2799cdf0e10cSrcweir
2800cdf0e10cSrcweir /** testing the methods:
2801cdf0e10cSrcweir inline StreamSocket(oslAddrFamily Family = osl_Socket_FamilyInet,
2802cdf0e10cSrcweir oslProtocol Protocol = osl_Socket_ProtocolIp,
2803cdf0e10cSrcweir oslSocketType Type = osl_Socket_TypeStream);
2804cdf0e10cSrcweir
2805cdf0e10cSrcweir inline StreamSocket( const StreamSocket & );
2806cdf0e10cSrcweir
2807cdf0e10cSrcweir inline StreamSocket( oslSocket Socket , __sal_NoAcquire noacquire );
2808cdf0e10cSrcweir
2809cdf0e10cSrcweir inline StreamSocket( oslSocket Socket );
2810cdf0e10cSrcweir */
2811cdf0e10cSrcweir
2812cdf0e10cSrcweir class ctors : public CppUnit::TestFixture
2813cdf0e10cSrcweir {
2814cdf0e10cSrcweir public:
2815cdf0e10cSrcweir oslSocket sHandle;
2816cdf0e10cSrcweir // initialization
setUp()2817cdf0e10cSrcweir void setUp( )
2818cdf0e10cSrcweir {
2819cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
2820cdf0e10cSrcweir }
2821cdf0e10cSrcweir
tearDown()2822cdf0e10cSrcweir void tearDown( )
2823cdf0e10cSrcweir {
2824cdf0e10cSrcweir sHandle = NULL;
2825cdf0e10cSrcweir }
2826cdf0e10cSrcweir
2827cdf0e10cSrcweir
ctors_none()2828cdf0e10cSrcweir void ctors_none()
2829cdf0e10cSrcweir {
2830cdf0e10cSrcweir /// Socket constructor.
2831cdf0e10cSrcweir ::osl::StreamSocket ssSocket( osl_Socket_FamilyInet, osl_Socket_ProtocolIp, osl_Socket_TypeStream );
2832cdf0e10cSrcweir
2833cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for ctors_none constructor function: check if the stream socket was created successfully.",
2834cdf0e10cSrcweir osl_Socket_TypeStream == ssSocket.getType( ) );
2835cdf0e10cSrcweir }
2836cdf0e10cSrcweir
ctors_acquire()2837cdf0e10cSrcweir void ctors_acquire()
2838cdf0e10cSrcweir {
2839cdf0e10cSrcweir /// Socket constructor.
2840cdf0e10cSrcweir ::osl::StreamSocket ssSocket( sHandle );
2841cdf0e10cSrcweir
2842cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for ctors_acquire constructor function: check if the socket was created successfully",
2843cdf0e10cSrcweir osl_Socket_TypeStream == ssSocket.getType( ) );
2844cdf0e10cSrcweir }
2845cdf0e10cSrcweir
ctors_no_acquire()2846cdf0e10cSrcweir void ctors_no_acquire()
2847cdf0e10cSrcweir {
2848cdf0e10cSrcweir /// Socket constructor.
2849cdf0e10cSrcweir ::osl::StreamSocket ssSocket( sHandle, SAL_NO_ACQUIRE );
2850cdf0e10cSrcweir
2851cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE(" test for ctors_no_acquire constructor function: check if the socket was created successfully",
2852cdf0e10cSrcweir osl_Socket_TypeStream == ssSocket.getType( ) );
2853cdf0e10cSrcweir }
2854cdf0e10cSrcweir
ctors_copy_ctor()2855cdf0e10cSrcweir void ctors_copy_ctor()
2856cdf0e10cSrcweir {
2857cdf0e10cSrcweir /// Socket constructor.
2858cdf0e10cSrcweir ::osl::StreamSocket ssSocket( osl_Socket_FamilyInet, osl_Socket_ProtocolIp, osl_Socket_TypeStream );
2859cdf0e10cSrcweir /// Socket copy constructor.
2860cdf0e10cSrcweir ::osl::StreamSocket copySocket( ssSocket );
2861cdf0e10cSrcweir
2862cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE(" test for ctors_copy_ctor constructor function: create new Socket instance using copy constructor",
2863cdf0e10cSrcweir osl_Socket_TypeStream == copySocket.getType( ) );
2864cdf0e10cSrcweir }
2865cdf0e10cSrcweir
2866cdf0e10cSrcweir CPPUNIT_TEST_SUITE( ctors );
2867cdf0e10cSrcweir CPPUNIT_TEST( ctors_none );
2868cdf0e10cSrcweir CPPUNIT_TEST( ctors_acquire );
2869cdf0e10cSrcweir CPPUNIT_TEST( ctors_no_acquire );
2870cdf0e10cSrcweir CPPUNIT_TEST( ctors_copy_ctor );
2871cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
2872cdf0e10cSrcweir
2873cdf0e10cSrcweir }; // class ctors
2874cdf0e10cSrcweir
2875cdf0e10cSrcweir class send_recv: public CppUnit::TestFixture
2876cdf0e10cSrcweir {
2877cdf0e10cSrcweir public:
2878cdf0e10cSrcweir // initialization
setUp()2879cdf0e10cSrcweir void setUp( )
2880cdf0e10cSrcweir {
2881cdf0e10cSrcweir }
2882cdf0e10cSrcweir
tearDown()2883cdf0e10cSrcweir void tearDown( )
2884cdf0e10cSrcweir {
2885cdf0e10cSrcweir
2886cdf0e10cSrcweir }
2887cdf0e10cSrcweir
send_recv1()2888cdf0e10cSrcweir void send_recv1()
2889cdf0e10cSrcweir {
2890cdf0e10cSrcweir //client sent two strings, and server received, check the order and value
2891cdf0e10cSrcweir ServerSocketThread myServerThread;
2892cdf0e10cSrcweir ClientSocketThread myClientThread;
2893cdf0e10cSrcweir myServerThread.create( );
2894cdf0e10cSrcweir myClientThread.create( );
2895cdf0e10cSrcweir
2896cdf0e10cSrcweir //wait until the thread terminate
2897cdf0e10cSrcweir myClientThread.join( );
2898cdf0e10cSrcweir myServerThread.join( );
2899cdf0e10cSrcweir sal_Char myStr[30] = "";
2900cdf0e10cSrcweir strcat( myStr, pTestString1 );
2901cdf0e10cSrcweir strcat( myStr, pTestString2 );
2902cdf0e10cSrcweir sal_Int32 nRes = strcmp( myServerThread.pReadBuffer, myStr );
2903cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE(" test for send/recv with two threads: launch Server/Client threads, send data from client, check received data in Server thread.",
2904cdf0e10cSrcweir nRes == 0 );
2905cdf0e10cSrcweir }
2906cdf0e10cSrcweir
2907cdf0e10cSrcweir // error when recv
send_recv2()2908cdf0e10cSrcweir void send_recv2()
2909cdf0e10cSrcweir {
2910cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket( osl_Socket_FamilyInet, osl_Socket_ProtocolIp, osl_Socket_TypeStream );
2911cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIp1, IP_PORT_MYPORT9 );
2912cdf0e10cSrcweir ::osl::StreamSocket ssStreamConnection;
2913cdf0e10cSrcweir sal_Char pReadBuffer[30] = "";
2914cdf0e10cSrcweir
2915cdf0e10cSrcweir ClientSocketThread myClientThread;
2916cdf0e10cSrcweir myClientThread.create( );
2917cdf0e10cSrcweir
2918cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1 );
2919cdf0e10cSrcweir
2920cdf0e10cSrcweir asAcceptorSocket.bind( saLocalSocketAddr );
2921cdf0e10cSrcweir asAcceptorSocket.listen( 1 );
2922cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_True );
2923cdf0e10cSrcweir asAcceptorSocket.acceptConnection( ssStreamConnection );
2924cdf0e10cSrcweir sal_Int32 nReadNumber = ssStreamConnection.recv( pReadBuffer, 11 );
2925cdf0e10cSrcweir
2926cdf0e10cSrcweir myClientThread.join( ) ;
2927cdf0e10cSrcweir ssStreamConnection.close();
2928cdf0e10cSrcweir asAcceptorSocket.close();
2929cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE(" test for send/recv, recv error!", nReadNumber == -1 );
2930cdf0e10cSrcweir }
2931cdf0e10cSrcweir
write_read(sal_Int32 _nBufferSize,int _nValue)2932cdf0e10cSrcweir void write_read(sal_Int32 _nBufferSize, int _nValue)
2933cdf0e10cSrcweir {
2934cdf0e10cSrcweir //client sent two strings, and server received, check the order and value
2935cdf0e10cSrcweir WriteSocketThread myServerThread(_nBufferSize, _nValue);
2936cdf0e10cSrcweir ReadSocketThread myClientThread(_nBufferSize, _nValue);
2937cdf0e10cSrcweir myServerThread.create( );
2938cdf0e10cSrcweir // thread_sleep( 1 );
2939cdf0e10cSrcweir myClientThread.create( );
2940cdf0e10cSrcweir
2941cdf0e10cSrcweir //wait until the thread terminate
2942cdf0e10cSrcweir myClientThread.join( );
2943cdf0e10cSrcweir myServerThread.join( );
2944cdf0e10cSrcweir
2945cdf0e10cSrcweir //Maximum Packet Size is ( ARPANET, MILNET = 1007 Ethernet (10Mb) = 1500
2946cdf0e10cSrcweir // Proteon PRONET = 2046), so here test read 4000 bytes
2947cdf0e10cSrcweir sal_Int32 nLength = myClientThread.getCount();
2948cdf0e10cSrcweir bool bIsOk = myClientThread.isOk(); // check if the values are right.
2949cdf0e10cSrcweir
2950cdf0e10cSrcweir t_print("Length:=%d\n", nLength);
2951cdf0e10cSrcweir t_print(" bIsOk:=%d\n", bIsOk);
2952cdf0e10cSrcweir
2953cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE(" test for write/read values with two threads: send data from server, check readed data in client.",
2954cdf0e10cSrcweir nLength == _nBufferSize && bIsOk == true);
2955cdf0e10cSrcweir }
2956cdf0e10cSrcweir
write_read_001()2957cdf0e10cSrcweir void write_read_001()
2958cdf0e10cSrcweir {
2959cdf0e10cSrcweir write_read(50, 10);
2960cdf0e10cSrcweir }
write_read_002()2961cdf0e10cSrcweir void write_read_002()
2962cdf0e10cSrcweir {
2963cdf0e10cSrcweir write_read(1024, 20);
2964cdf0e10cSrcweir }
write_read_003()2965cdf0e10cSrcweir void write_read_003()
2966cdf0e10cSrcweir {
2967cdf0e10cSrcweir write_read(4000, 1);
2968cdf0e10cSrcweir }
write_read_004()2969cdf0e10cSrcweir void write_read_004()
2970cdf0e10cSrcweir {
2971cdf0e10cSrcweir write_read(8192, 3);
2972cdf0e10cSrcweir }
2973cdf0e10cSrcweir
2974cdf0e10cSrcweir CPPUNIT_TEST_SUITE( send_recv );
2975cdf0e10cSrcweir CPPUNIT_TEST( write_read_001 );
2976cdf0e10cSrcweir CPPUNIT_TEST( write_read_002 );
2977cdf0e10cSrcweir CPPUNIT_TEST( write_read_003 );
2978cdf0e10cSrcweir CPPUNIT_TEST( write_read_004 );
2979cdf0e10cSrcweir CPPUNIT_TEST( send_recv1 );
2980cdf0e10cSrcweir CPPUNIT_TEST( send_recv2 );
2981cdf0e10cSrcweir // CPPUNIT_TEST( write_read );
2982cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
2983cdf0e10cSrcweir }; // class send_recv
2984cdf0e10cSrcweir
2985cdf0e10cSrcweir class SendClientThread : public ClientSocketThread
2986cdf0e10cSrcweir {
2987cdf0e10cSrcweir protected:
2988cdf0e10cSrcweir
run()2989cdf0e10cSrcweir void SAL_CALL run( )
2990cdf0e10cSrcweir {
2991cdf0e10cSrcweir TimeValue *pTimeout;
2992cdf0e10cSrcweir pTimeout = ( TimeValue* )malloc( sizeof( TimeValue ) );
2993cdf0e10cSrcweir pTimeout->Seconds = 5;
2994cdf0e10cSrcweir pTimeout->Nanosec = 0;
2995cdf0e10cSrcweir
2996cdf0e10cSrcweir if ( osl_Socket_Ok == csConnectorSocket.connect( saTargetSocketAddr, pTimeout ))
2997cdf0e10cSrcweir {
2998cdf0e10cSrcweir sal_Int32 nWrite1 = csConnectorSocket.write( pTestString1, 11 ); // "test socket"
2999cdf0e10cSrcweir
3000cdf0e10cSrcweir sal_Int32 nWrite2 = csConnectorSocket.write( pTestString2, strlen( pTestString2 ) + 1 );
3001cdf0e10cSrcweir thread_sleep( 2 );
3002cdf0e10cSrcweir csConnectorSocket.write( pTestString2, strlen( pTestString2 ) + 1 );
3003cdf0e10cSrcweir t_print("nWrite1 is %d, nWrite2 is %d\n", nWrite1, nWrite2 );
3004cdf0e10cSrcweir //thread_sleep( 1 );
3005cdf0e10cSrcweir }
3006cdf0e10cSrcweir else
3007cdf0e10cSrcweir t_print("# SendClientThread: connect failed! \n");
3008cdf0e10cSrcweir
3009cdf0e10cSrcweir csConnectorSocket.close();
3010cdf0e10cSrcweir free( pTimeout );
3011cdf0e10cSrcweir }
3012cdf0e10cSrcweir
3013cdf0e10cSrcweir };
3014cdf0e10cSrcweir
3015cdf0e10cSrcweir class shutdown: public CppUnit::TestFixture
3016cdf0e10cSrcweir {
3017cdf0e10cSrcweir public:
3018cdf0e10cSrcweir // initialization
setUp()3019cdf0e10cSrcweir void setUp( )
3020cdf0e10cSrcweir {
3021cdf0e10cSrcweir }
3022cdf0e10cSrcweir
tearDown()3023cdf0e10cSrcweir void tearDown( )
3024cdf0e10cSrcweir {
3025cdf0e10cSrcweir
3026cdf0e10cSrcweir }
3027cdf0e10cSrcweir
3028cdf0e10cSrcweir // similar to close_002
shutdown_001()3029cdf0e10cSrcweir void shutdown_001()
3030cdf0e10cSrcweir {
3031cdf0e10cSrcweir #if defined(LINUX)
3032cdf0e10cSrcweir ::osl::AcceptorSocket asSocket( osl_Socket_FamilyInet, osl_Socket_ProtocolIp, osl_Socket_TypeStream );
3033cdf0e10cSrcweir AcceptorThread myAcceptorThread( asSocket, aHostIp1 );
3034cdf0e10cSrcweir myAcceptorThread.create();
3035cdf0e10cSrcweir
3036cdf0e10cSrcweir thread_sleep( 1 );
3037cdf0e10cSrcweir
3038cdf0e10cSrcweir //when accepting, shutdown the socket, the thread will not block for accepting
3039cdf0e10cSrcweir asSocket.shutdown();
3040cdf0e10cSrcweir myAcceptorThread.join();
3041cdf0e10cSrcweir
3042cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for close when is accepting: the socket will quit accepting status.",
3043cdf0e10cSrcweir myAcceptorThread.isOK( ) == sal_True );
3044cdf0e10cSrcweir #endif
3045cdf0e10cSrcweir }
3046cdf0e10cSrcweir
shutdown_002()3047cdf0e10cSrcweir void shutdown_002()
3048cdf0e10cSrcweir {
3049cdf0e10cSrcweir ::osl::AcceptorSocket asSocket( osl_Socket_FamilyInet, osl_Socket_ProtocolIp, osl_Socket_TypeStream );
3050cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIp1, IP_PORT_MYPORT9);
3051cdf0e10cSrcweir asSocket.setOption( osl_Socket_OptionReuseAddr, 1 );
3052cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("shutdown_002: bind fail", asSocket.bind( saLocalSocketAddr ) == sal_True);
3053cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("shutdown_002: listen fail", asSocket.listen( 1 ) == sal_True );
3054cdf0e10cSrcweir sal_Char pReadBuffer[40];
3055cdf0e10cSrcweir SendClientThread mySendThread;
3056cdf0e10cSrcweir mySendThread.create();
3057cdf0e10cSrcweir
3058cdf0e10cSrcweir asSocket.enableNonBlockingMode( sal_False );
3059cdf0e10cSrcweir ::osl::StreamSocket ssConnectionSocket;
3060cdf0e10cSrcweir oslSocketResult eResult = asSocket.acceptConnection( ssConnectionSocket );
3061cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("shutdown_002: acceptConnection fail", eResult == osl_Socket_Ok );
3062cdf0e10cSrcweir
3063cdf0e10cSrcweir /* set socket option SO_LINGER 0, so close immediatly */
3064cdf0e10cSrcweir linger aLingerSet;
3065cdf0e10cSrcweir sal_Int32 nBufferLen = sizeof( struct linger );
3066cdf0e10cSrcweir aLingerSet.l_onoff = 0;
3067cdf0e10cSrcweir aLingerSet.l_linger = 0;
3068cdf0e10cSrcweir
3069cdf0e10cSrcweir ssConnectionSocket.setOption( osl_Socket_OptionLinger, &aLingerSet, nBufferLen );
3070cdf0e10cSrcweir thread_sleep( 1 );
3071cdf0e10cSrcweir //sal_uInt32 nRecv1 = 0;
3072cdf0e10cSrcweir sal_Int32 nRead1 = ssConnectionSocket.read( pReadBuffer, 11 );
3073cdf0e10cSrcweir
3074cdf0e10cSrcweir //shutdown read after client the first send complete
3075cdf0e10cSrcweir ssConnectionSocket.shutdown( osl_Socket_DirRead );
3076cdf0e10cSrcweir
3077cdf0e10cSrcweir sal_Int32 nRead2 = ssConnectionSocket.read( pReadBuffer + nRead1, 12 );
3078cdf0e10cSrcweir sal_Int32 nRead3 = ssConnectionSocket.read( pReadBuffer + nRead1 + nRead2, 12 );
3079cdf0e10cSrcweir t_print("after read 2, nRead1 is %d, nRead2 is %d, nRead3 is %d \n", nRead1, nRead2, nRead3 );
3080cdf0e10cSrcweir mySendThread.join();
3081cdf0e10cSrcweir
3082cdf0e10cSrcweir ssConnectionSocket.close();
3083cdf0e10cSrcweir asSocket.close();
3084cdf0e10cSrcweir
3085cdf0e10cSrcweir /* on Linux, if send is before shutdown(DirRead), can read, nRecv2 still > 0,
3086cdf0e10cSrcweir http://dbforums.com/arch/186/2002/12/586417
3087cdf0e10cSrcweir While on Solaris, after shutdown(DirRead), all read will return 0
3088cdf0e10cSrcweir */
3089cdf0e10cSrcweir #ifdef LINUX
3090cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for shutdown read direction: the socket can not read(recv).",
3091cdf0e10cSrcweir nRead1 > 0 && nRead3 == 0 );
3092cdf0e10cSrcweir #else
3093cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for shutdown read direction: the socket can not read(recv).",
3094cdf0e10cSrcweir nRead1 > 0 && nRead2 == 0 && nRead3 == 0 );
3095cdf0e10cSrcweir #endif
3096cdf0e10cSrcweir
3097cdf0e10cSrcweir }
3098cdf0e10cSrcweir
shutdown_003()3099cdf0e10cSrcweir void shutdown_003()
3100cdf0e10cSrcweir {
3101cdf0e10cSrcweir ::osl::AcceptorSocket asSocket( osl_Socket_FamilyInet, osl_Socket_ProtocolIp, osl_Socket_TypeStream );
3102cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIp1, IP_PORT_MYPORT9);
3103cdf0e10cSrcweir asSocket.setOption( osl_Socket_OptionReuseAddr, 1 );
3104cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("shutdown_002: bind fail", asSocket.bind( saLocalSocketAddr ) == sal_True);
3105cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("shutdown_002: listen fail", asSocket.listen( 1 ) == sal_True );
3106cdf0e10cSrcweir sal_Char pReadBuffer[40];
3107cdf0e10cSrcweir SendClientThread mySendThread;
3108cdf0e10cSrcweir mySendThread.create();
3109cdf0e10cSrcweir
3110cdf0e10cSrcweir asSocket.enableNonBlockingMode( sal_False );
3111cdf0e10cSrcweir ::osl::StreamSocket ssConnectionSocket;
3112cdf0e10cSrcweir oslSocketResult eResult = asSocket.acceptConnection( ssConnectionSocket );
3113cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE("shutdown_002: acceptConnection fail", eResult == osl_Socket_Ok );
3114cdf0e10cSrcweir
3115cdf0e10cSrcweir thread_sleep( 1 );
3116cdf0e10cSrcweir //shutdown write after client the first send complete
3117cdf0e10cSrcweir ssConnectionSocket.shutdown( osl_Socket_DirWrite );
3118cdf0e10cSrcweir
3119cdf0e10cSrcweir // recv should not shutdown
3120cdf0e10cSrcweir sal_Int32 nRead1 = ssConnectionSocket.read( pReadBuffer, 11 );
3121cdf0e10cSrcweir
3122cdf0e10cSrcweir sal_Int32 nWrite = ssConnectionSocket.write( pReadBuffer, 11 );
3123cdf0e10cSrcweir // still can read
3124cdf0e10cSrcweir sal_Int32 nRead3 = ssConnectionSocket.read( pReadBuffer + nRead1 , 12 );
3125cdf0e10cSrcweir t_print("after read 2, nRead1 is %d, nWrite is %d, nRead3 is %d\n", nRead1, nWrite, nRead3 );
3126cdf0e10cSrcweir mySendThread.join();
3127cdf0e10cSrcweir ssConnectionSocket.close();
3128cdf0e10cSrcweir asSocket.close();
3129cdf0e10cSrcweir
3130cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for shutdown read direction: the socket can not send(write).",
3131cdf0e10cSrcweir nRead1 > 0 && nWrite == 0 && nRead3 > 0);
3132cdf0e10cSrcweir
3133cdf0e10cSrcweir }
3134cdf0e10cSrcweir
3135cdf0e10cSrcweir CPPUNIT_TEST_SUITE( shutdown );
3136cdf0e10cSrcweir CPPUNIT_TEST( shutdown_001 );
3137cdf0e10cSrcweir CPPUNIT_TEST( shutdown_002 );
3138cdf0e10cSrcweir CPPUNIT_TEST( shutdown_003 );
3139cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
3140cdf0e10cSrcweir }; // class shutdown
3141cdf0e10cSrcweir
3142cdf0e10cSrcweir class isExceptionPending: public CppUnit::TestFixture
3143cdf0e10cSrcweir {
3144cdf0e10cSrcweir public:
isExPending_001()3145cdf0e10cSrcweir void isExPending_001()
3146cdf0e10cSrcweir {
3147cdf0e10cSrcweir ::osl::AcceptorSocket asSocket( osl_Socket_FamilyInet, osl_Socket_ProtocolIp, osl_Socket_TypeStream );
3148cdf0e10cSrcweir TimeValue *pTimeout;
3149cdf0e10cSrcweir pTimeout = ( TimeValue* )malloc( sizeof( TimeValue ) );
3150cdf0e10cSrcweir pTimeout->Seconds = 3;
3151cdf0e10cSrcweir pTimeout->Nanosec = 0;
3152cdf0e10cSrcweir sal_Bool bOk = asSocket.isExceptionPending( pTimeout );
3153cdf0e10cSrcweir free( pTimeout );
3154cdf0e10cSrcweir
3155cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for isExceptionPending.",
3156cdf0e10cSrcweir bOk == sal_False );
3157cdf0e10cSrcweir }
3158cdf0e10cSrcweir
3159cdf0e10cSrcweir /**tester's comments: lack of a case that return sal_True, do not know when it will return sal_True*/
3160cdf0e10cSrcweir
3161cdf0e10cSrcweir
3162cdf0e10cSrcweir CPPUNIT_TEST_SUITE( isExceptionPending );
3163cdf0e10cSrcweir CPPUNIT_TEST( isExPending_001 );
3164cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
3165cdf0e10cSrcweir }; // class isExceptionPending
3166cdf0e10cSrcweir
3167cdf0e10cSrcweir // -----------------------------------------------------------------------------
3168cdf0e10cSrcweir
3169cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_StreamSocket::ctors, "osl_StreamSocket");
3170cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_StreamSocket::send_recv, "osl_StreamSocket");
3171cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_StreamSocket::shutdown, "osl_StreamSocket");
3172cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_StreamSocket::isExceptionPending, "osl_StreamSocket");
3173cdf0e10cSrcweir
3174cdf0e10cSrcweir } // namespace osl_StreamSocket
3175cdf0e10cSrcweir
3176cdf0e10cSrcweir
3177cdf0e10cSrcweir namespace osl_ConnectorSocket
3178cdf0e10cSrcweir {
3179cdf0e10cSrcweir
3180cdf0e10cSrcweir /** testing the method:
3181cdf0e10cSrcweir ConnectorSocket(oslAddrFamily Family = osl_Socket_FamilyInet,
3182cdf0e10cSrcweir oslProtocol Protocol = osl_Socket_ProtocolIp,
3183cdf0e10cSrcweir oslSocketType Type = osl_Socket_TypeStream);
3184cdf0e10cSrcweir */
3185cdf0e10cSrcweir
3186cdf0e10cSrcweir class ctors : public CppUnit::TestFixture
3187cdf0e10cSrcweir {
3188cdf0e10cSrcweir public:
ctors_001()3189cdf0e10cSrcweir void ctors_001()
3190cdf0e10cSrcweir {
3191cdf0e10cSrcweir /// Socket constructor.
3192cdf0e10cSrcweir ::osl::ConnectorSocket csSocket( osl_Socket_FamilyInet, osl_Socket_ProtocolIp, osl_Socket_TypeStream );
3193cdf0e10cSrcweir
3194cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for ctors_001 constructor function: check if the connector socket was created successfully.",
3195cdf0e10cSrcweir osl_Socket_TypeStream == csSocket.getType( ) );
3196cdf0e10cSrcweir }
3197cdf0e10cSrcweir
3198cdf0e10cSrcweir CPPUNIT_TEST_SUITE( ctors );
3199cdf0e10cSrcweir CPPUNIT_TEST( ctors_001 );
3200cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
3201cdf0e10cSrcweir
3202cdf0e10cSrcweir }; // class ctors
3203cdf0e10cSrcweir
3204cdf0e10cSrcweir /** testing the method:
3205cdf0e10cSrcweir oslSocketResult SAL_CALL connect(const SocketAddr& TargetHost, const TimeValue* pTimeout = 0);
3206cdf0e10cSrcweir */
3207cdf0e10cSrcweir
3208cdf0e10cSrcweir class connect : public CppUnit::TestFixture
3209cdf0e10cSrcweir {
3210cdf0e10cSrcweir public:
3211cdf0e10cSrcweir TimeValue *pTimeout;
3212cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket;
3213cdf0e10cSrcweir ::osl::ConnectorSocket csConnectorSocket;
3214cdf0e10cSrcweir
3215cdf0e10cSrcweir
3216cdf0e10cSrcweir // initialization
setUp()3217cdf0e10cSrcweir void setUp( )
3218cdf0e10cSrcweir {
3219cdf0e10cSrcweir pTimeout = ( TimeValue* )malloc( sizeof( TimeValue ) );
3220cdf0e10cSrcweir pTimeout->Seconds = 3;
3221cdf0e10cSrcweir pTimeout->Nanosec = 0;
3222cdf0e10cSrcweir // sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
3223cdf0e10cSrcweir }
3224cdf0e10cSrcweir
tearDown()3225cdf0e10cSrcweir void tearDown( )
3226cdf0e10cSrcweir {
3227cdf0e10cSrcweir free( pTimeout );
3228cdf0e10cSrcweir // sHandle = NULL;
3229cdf0e10cSrcweir asAcceptorSocket.close( );
3230cdf0e10cSrcweir csConnectorSocket.close( );
3231cdf0e10cSrcweir }
3232cdf0e10cSrcweir
3233cdf0e10cSrcweir
connect_001()3234cdf0e10cSrcweir void connect_001()
3235cdf0e10cSrcweir {
3236cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIp1, IP_PORT_MYPORT2 );
3237cdf0e10cSrcweir ::osl::SocketAddr saTargetSocketAddr( aHostIp1, IP_PORT_MYPORT2 );
3238cdf0e10cSrcweir ::osl::SocketAddr saPeerSocketAddr( aHostIp2, IP_PORT_FTP );
3239cdf0e10cSrcweir ::osl::StreamSocket ssConnection;
3240cdf0e10cSrcweir
3241cdf0e10cSrcweir /// launch server socket
3242cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
3243cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
3244cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket bind address failed.", sal_True == bOK1 );
3245cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
3246cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket listen failed.", sal_True == bOK2 );
3247cdf0e10cSrcweir
3248cdf0e10cSrcweir //asAcceptorSocket.enableNonBlockingMode( sal_True );
3249cdf0e10cSrcweir //oslSocketResult eResultAccept = asAcceptorSocket.acceptConnection(ssConnection); /// waiting for incoming connection...
3250cdf0e10cSrcweir //CPPUNIT_ASSERT_MESSAGE( "accept failed.", osl_Socket_Ok == eResultAccept );
3251cdf0e10cSrcweir /// launch client socket
3252cdf0e10cSrcweir oslSocketResult eResult = csConnectorSocket.connect( saTargetSocketAddr, pTimeout ); /// connecting to server...
3253cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "connect failed.", osl_Socket_Ok == eResult );
3254cdf0e10cSrcweir
3255cdf0e10cSrcweir /// get peer information
3256cdf0e10cSrcweir csConnectorSocket.getPeerAddr( saPeerSocketAddr );/// connected.
3257cdf0e10cSrcweir
3258cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for connect function: try to create a connection with remote host. and check the setup address.",
3259cdf0e10cSrcweir ( sal_True == compareSocketAddr( saPeerSocketAddr, saLocalSocketAddr ) ) &&
3260cdf0e10cSrcweir ( osl_Socket_Ok == eResult ));
3261cdf0e10cSrcweir }
3262cdf0e10cSrcweir //non-blocking mode connect?
connect_002()3263cdf0e10cSrcweir void connect_002()
3264cdf0e10cSrcweir {
3265cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIp1, IP_PORT_MYPORT3 );
3266cdf0e10cSrcweir ::osl::SocketAddr saTargetSocketAddr( aHostIp1, IP_PORT_MYPORT3 );
3267cdf0e10cSrcweir ::osl::SocketAddr saPeerSocketAddr( aHostIp2, IP_PORT_FTP );
3268cdf0e10cSrcweir
3269cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
3270cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_True );
3271cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
3272cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket bind address failed.", sal_True == bOK1 );
3273cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
3274cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket listen failed.", sal_True == bOK2 );
3275cdf0e10cSrcweir
3276cdf0e10cSrcweir csConnectorSocket.enableNonBlockingMode( sal_True );
3277cdf0e10cSrcweir
3278cdf0e10cSrcweir oslSocketResult eResult = csConnectorSocket.connect( saTargetSocketAddr, pTimeout ); /// connecting to server...
3279cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "connect failed.", osl_Socket_InProgress == eResult || osl_Socket_Ok == eResult );
3280cdf0e10cSrcweir
3281cdf0e10cSrcweir /// get peer information
3282cdf0e10cSrcweir csConnectorSocket.getPeerAddr( saPeerSocketAddr );
3283cdf0e10cSrcweir
3284cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for connect function: try to create a connection with remote host. and check the setup address.",
3285cdf0e10cSrcweir sal_True == compareSocketAddr( saPeerSocketAddr, saLocalSocketAddr ) ) ;
3286cdf0e10cSrcweir }
3287cdf0e10cSrcweir // really an error or just delayed
3288cdf0e10cSrcweir // how to design senarios that will return osl_Socket_Interrupted, osl_Socket_TimedOut
connect_003()3289cdf0e10cSrcweir void connect_003()
3290cdf0e10cSrcweir {
3291cdf0e10cSrcweir ::osl::SocketAddr saTargetSocketAddr1( aHostIp1, IP_PORT_MYPORT3 );
3292cdf0e10cSrcweir ::osl::SocketAddr saTargetSocketAddr2( aHostIpInval1, IP_PORT_MYPORT3 );
3293cdf0e10cSrcweir
3294cdf0e10cSrcweir csConnectorSocket.enableNonBlockingMode( sal_False );
3295cdf0e10cSrcweir
3296cdf0e10cSrcweir oslSocketResult eResult1 = csConnectorSocket.connect( saTargetSocketAddr1, pTimeout );
3297cdf0e10cSrcweir oslSocketResult eResult2 = csConnectorSocket.connect( saTargetSocketAddr2, pTimeout );
3298cdf0e10cSrcweir CloseSocketThread myCloseThread( csConnectorSocket );
3299cdf0e10cSrcweir oslSocketResult eResult3 = csConnectorSocket.connect( saTargetSocketAddr2, pTimeout );
3300cdf0e10cSrcweir myCloseThread.join();
3301cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "connect should failed.", osl_Socket_Error == eResult1 &&
3302cdf0e10cSrcweir osl_Socket_Error == eResult2 && osl_Socket_Error == eResult3 );
3303cdf0e10cSrcweir
3304cdf0e10cSrcweir }
3305cdf0e10cSrcweir
3306cdf0e10cSrcweir // really an error in non-blocking mode
connect_004()3307cdf0e10cSrcweir void connect_004()
3308cdf0e10cSrcweir {
3309cdf0e10cSrcweir ::osl::SocketAddr saTargetSocketAddr( aHostIpInval1, IP_PORT_MYPORT3 );
3310cdf0e10cSrcweir
3311cdf0e10cSrcweir csConnectorSocket.enableNonBlockingMode( sal_True );
3312cdf0e10cSrcweir
3313cdf0e10cSrcweir oslSocketResult eResult = csConnectorSocket.connect( saTargetSocketAddr, pTimeout ); /// connecting to server...
3314cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "connect should failed.", osl_Socket_Error == eResult );
3315cdf0e10cSrcweir }
3316cdf0e10cSrcweir /** here need a case: immediate connection, say in non-blocking mode connect return osl_Socket_Ok
3317cdf0e10cSrcweir */
3318cdf0e10cSrcweir
3319cdf0e10cSrcweir CPPUNIT_TEST_SUITE( connect );
3320cdf0e10cSrcweir CPPUNIT_TEST( connect_001 );
3321cdf0e10cSrcweir CPPUNIT_TEST( connect_002 );
3322cdf0e10cSrcweir CPPUNIT_TEST( connect_003 );
3323cdf0e10cSrcweir CPPUNIT_TEST( connect_004 );
3324cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
3325cdf0e10cSrcweir
3326cdf0e10cSrcweir }; // class connect
3327cdf0e10cSrcweir
3328cdf0e10cSrcweir
3329cdf0e10cSrcweir // -----------------------------------------------------------------------------
3330cdf0e10cSrcweir
3331cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_ConnectorSocket::ctors, "osl_ConnectorSocket");
3332cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_ConnectorSocket::connect, "osl_ConnectorSocket");
3333cdf0e10cSrcweir
3334cdf0e10cSrcweir } // namespace osl_ConnectorSocket
3335cdf0e10cSrcweir
3336cdf0e10cSrcweir
3337cdf0e10cSrcweir
3338cdf0e10cSrcweir namespace osl_AcceptorSocket
3339cdf0e10cSrcweir {
3340cdf0e10cSrcweir
3341cdf0e10cSrcweir /** testing the methods:
3342cdf0e10cSrcweir inline AcceptorSocket(oslAddrFamily Family = osl_Socket_FamilyInet,
3343cdf0e10cSrcweir oslProtocol Protocol = osl_Socket_ProtocolIp,
3344cdf0e10cSrcweir oslSocketType Type = osl_Socket_TypeStream);
3345cdf0e10cSrcweir */
3346cdf0e10cSrcweir
3347cdf0e10cSrcweir class ctors : public CppUnit::TestFixture
3348cdf0e10cSrcweir {
3349cdf0e10cSrcweir public:
3350cdf0e10cSrcweir
ctors_001()3351cdf0e10cSrcweir void ctors_001()
3352cdf0e10cSrcweir {
3353cdf0e10cSrcweir /// Socket constructor.
3354cdf0e10cSrcweir ::osl::AcceptorSocket asSocket( osl_Socket_FamilyInet, osl_Socket_ProtocolIp, osl_Socket_TypeStream );
3355cdf0e10cSrcweir
3356cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for ctors_001 constructor function: check if the acceptor socket was created successfully.",
3357cdf0e10cSrcweir osl_Socket_TypeStream == asSocket.getType( ) );
3358cdf0e10cSrcweir }
3359cdf0e10cSrcweir
3360cdf0e10cSrcweir CPPUNIT_TEST_SUITE( ctors );
3361cdf0e10cSrcweir CPPUNIT_TEST( ctors_001 );
3362cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
3363cdf0e10cSrcweir
3364cdf0e10cSrcweir }; // class ctors
3365cdf0e10cSrcweir
3366cdf0e10cSrcweir #if 0
3367cdf0e10cSrcweir class operator_assign : public CppUnit::TestFixture
3368cdf0e10cSrcweir {
3369cdf0e10cSrcweir public:
3370cdf0e10cSrcweir
3371cdf0e10cSrcweir void assign_001()
3372cdf0e10cSrcweir {
3373cdf0e10cSrcweir #if defined(LINUX)
3374cdf0e10cSrcweir ::osl::AcceptorSocket asSocket( osl_Socket_FamilyInet, osl_Socket_ProtocolIp, osl_Socket_TypeStream );
3375cdf0e10cSrcweir ::osl::AcceptorSocket asSocketAssign( osl_Socket_FamilyInet, osl_Socket_ProtocolIp, osl_Socket_TypeStream );
3376cdf0e10cSrcweir asSocket.setOption( osl_Socket_OptionReuseAddr, 1);
3377cdf0e10cSrcweir ::osl::SocketAddr saSocketAddr( aHostIp1, IP_PORT_MYPORT4 );
3378cdf0e10cSrcweir asSocket.bind( saSocketAddr );
3379cdf0e10cSrcweir
3380cdf0e10cSrcweir AcceptorThread myAcceptorThread( asSocketAssign, aHostIp1 );
3381cdf0e10cSrcweir myAcceptorThread.create();
3382cdf0e10cSrcweir
3383cdf0e10cSrcweir thread_sleep( 1 );
3384cdf0e10cSrcweir //when accepting, assign another socket to the socket, the thread will not be closed, so is blocking
3385cdf0e10cSrcweir asSocketAssign = asSocket;
3386cdf0e10cSrcweir
3387cdf0e10cSrcweir t_print("#asSocketAssign port number is %d\n", asSocketAssign.getLocalPort() );
3388cdf0e10cSrcweir
3389cdf0e10cSrcweir asSocketAssign.shutdown();
3390cdf0e10cSrcweir myAcceptorThread.join();
3391cdf0e10cSrcweir
3392cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for close when is accepting: the socket will quit accepting status.",
3393cdf0e10cSrcweir myAcceptorThread.isOK() == sal_True );
3394cdf0e10cSrcweir
3395cdf0e10cSrcweir
3396cdf0e10cSrcweir #endif /* LINUX */
3397cdf0e10cSrcweir }
3398cdf0e10cSrcweir
3399cdf0e10cSrcweir
3400cdf0e10cSrcweir CPPUNIT_TEST_SUITE( operator_assign );
3401cdf0e10cSrcweir CPPUNIT_TEST( assign_001 );
3402cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
3403cdf0e10cSrcweir
3404cdf0e10cSrcweir }; // class operator_assign
3405cdf0e10cSrcweir #endif
3406cdf0e10cSrcweir
3407cdf0e10cSrcweir /** testing the method:
3408cdf0e10cSrcweir inline sal_Bool SAL_CALL listen(sal_Int32 MaxPendingConnections= -1);
3409cdf0e10cSrcweir inline oslSocketResult SAL_CALL acceptConnection( StreamSocket& Connection);
3410cdf0e10cSrcweir inline oslSocketResult SAL_CALL acceptConnection( StreamSocket& Connection, SocketAddr & PeerAddr);
3411cdf0e10cSrcweir */
3412cdf0e10cSrcweir
3413cdf0e10cSrcweir class listen_accept : public CppUnit::TestFixture
3414cdf0e10cSrcweir {
3415cdf0e10cSrcweir public:
3416cdf0e10cSrcweir TimeValue *pTimeout;
3417cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket;
3418cdf0e10cSrcweir ::osl::ConnectorSocket csConnectorSocket;
3419cdf0e10cSrcweir
3420cdf0e10cSrcweir
3421cdf0e10cSrcweir // initialization
setUp()3422cdf0e10cSrcweir void setUp( )
3423cdf0e10cSrcweir {
3424cdf0e10cSrcweir pTimeout = ( TimeValue* )malloc( sizeof( TimeValue ) );
3425cdf0e10cSrcweir pTimeout->Seconds = 3;
3426cdf0e10cSrcweir pTimeout->Nanosec = 0;
3427cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1);
3428cdf0e10cSrcweir // sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
3429cdf0e10cSrcweir }
3430cdf0e10cSrcweir
tearDown()3431cdf0e10cSrcweir void tearDown( )
3432cdf0e10cSrcweir {
3433cdf0e10cSrcweir free( pTimeout );
3434cdf0e10cSrcweir // sHandle = NULL;
3435cdf0e10cSrcweir asAcceptorSocket.close( );
3436cdf0e10cSrcweir csConnectorSocket.close( );
3437cdf0e10cSrcweir }
3438cdf0e10cSrcweir
3439cdf0e10cSrcweir
listen_accept_001()3440cdf0e10cSrcweir void listen_accept_001()
3441cdf0e10cSrcweir {
3442cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIp1, IP_PORT_MYPORT3 );
3443cdf0e10cSrcweir ::osl::SocketAddr saTargetSocketAddr( aHostIp1, IP_PORT_MYPORT3 );
3444cdf0e10cSrcweir ::osl::StreamSocket ssConnection;
3445cdf0e10cSrcweir
3446cdf0e10cSrcweir /// launch server socket
3447cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
3448cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket bind address failed.", sal_True == bOK1 );
3449cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
3450cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket listen failed.", sal_True == bOK2 );
3451cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_True );
3452cdf0e10cSrcweir
3453cdf0e10cSrcweir /// launch client socket
3454cdf0e10cSrcweir csConnectorSocket.connect( saTargetSocketAddr, pTimeout ); /// connecting to server...
3455cdf0e10cSrcweir
3456cdf0e10cSrcweir oslSocketResult eResult = asAcceptorSocket.acceptConnection(ssConnection); /// waiting for incoming connection...
3457cdf0e10cSrcweir
3458cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for listen_accept function: try to create a connection with remote host, using listen and accept.",
3459cdf0e10cSrcweir ( osl_Socket_Ok == eResult ) );
3460cdf0e10cSrcweir }
3461cdf0e10cSrcweir
listen_accept_002()3462cdf0e10cSrcweir void listen_accept_002()
3463cdf0e10cSrcweir {
3464cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIp1, IP_PORT_MYPORT4 );
3465cdf0e10cSrcweir ::osl::SocketAddr saTargetSocketAddr( aHostIp1, IP_PORT_MYPORT4 );
3466cdf0e10cSrcweir ::osl::SocketAddr saPeerSocketAddr( aHostIp2, IP_PORT_FTP );
3467cdf0e10cSrcweir ::osl::StreamSocket ssConnection;
3468cdf0e10cSrcweir
3469cdf0e10cSrcweir /// launch server socket
3470cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
3471cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket bind address failed.", sal_True == bOK1 );
3472cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
3473cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "AcceptorSocket listen failed.", sal_True == bOK2 );
3474cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_True );
3475cdf0e10cSrcweir
3476cdf0e10cSrcweir /// launch client socket
3477cdf0e10cSrcweir csConnectorSocket.connect( saTargetSocketAddr, pTimeout ); /// connecting to server...
3478cdf0e10cSrcweir
3479cdf0e10cSrcweir oslSocketResult eResult = asAcceptorSocket.acceptConnection(ssConnection, saPeerSocketAddr); /// waiting for incoming connection...
3480cdf0e10cSrcweir
3481cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for listen_accept function: try to create a connection with remote host, using listen and accept, accept with peer address.",
3482cdf0e10cSrcweir ( sal_True == bOK2 ) &&
3483cdf0e10cSrcweir ( osl_Socket_Ok == eResult ) &&
3484cdf0e10cSrcweir ( sal_True == compareSocketAddr( saPeerSocketAddr, saLocalSocketAddr ) ) );
3485cdf0e10cSrcweir }
3486cdf0e10cSrcweir
listen_accept_003()3487cdf0e10cSrcweir void listen_accept_003()
3488cdf0e10cSrcweir {
3489cdf0e10cSrcweir
3490cdf0e10cSrcweir }
3491cdf0e10cSrcweir
3492cdf0e10cSrcweir CPPUNIT_TEST_SUITE( listen_accept );
3493cdf0e10cSrcweir CPPUNIT_TEST( listen_accept_001 );
3494cdf0e10cSrcweir CPPUNIT_TEST( listen_accept_002 );
3495cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
3496cdf0e10cSrcweir
3497cdf0e10cSrcweir }; // class listen_accept
3498cdf0e10cSrcweir
3499cdf0e10cSrcweir
3500cdf0e10cSrcweir // -----------------------------------------------------------------------------
3501cdf0e10cSrcweir
3502cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_AcceptorSocket::ctors, "osl_AcceptorSocket");
3503cdf0e10cSrcweir //CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_AcceptorSocket::operator_assign, "osl_AcceptorSocket");
3504cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_AcceptorSocket::listen_accept, "osl_AcceptorSocket");
3505cdf0e10cSrcweir
3506cdf0e10cSrcweir } // namespace osl_AcceptorSocket
3507cdf0e10cSrcweir
3508cdf0e10cSrcweir
3509cdf0e10cSrcweir namespace osl_DatagramSocket
3510cdf0e10cSrcweir {
3511cdf0e10cSrcweir
3512cdf0e10cSrcweir /** testing the methods:
3513cdf0e10cSrcweir inline DatagramSocket(oslAddrFamily Family= osl_Socket_FamilyInet,
3514cdf0e10cSrcweir oslProtocol Protocol= osl_Socket_ProtocolIp,
3515cdf0e10cSrcweir oslSocketType Type= osl_Socket_TypeDgram);
3516cdf0e10cSrcweir */
3517cdf0e10cSrcweir
3518cdf0e10cSrcweir class ctors : public CppUnit::TestFixture
3519cdf0e10cSrcweir {
3520cdf0e10cSrcweir public:
3521cdf0e10cSrcweir
ctors_001()3522cdf0e10cSrcweir void ctors_001()
3523cdf0e10cSrcweir {
3524cdf0e10cSrcweir /// Socket constructor.
3525cdf0e10cSrcweir ::osl::DatagramSocket dsSocket;
3526cdf0e10cSrcweir
3527cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for ctors_001 constructor function: check if the datagram socket was created successfully.",
3528cdf0e10cSrcweir osl_Socket_TypeDgram == dsSocket.getType( ) );
3529cdf0e10cSrcweir }
3530cdf0e10cSrcweir
3531cdf0e10cSrcweir
3532cdf0e10cSrcweir CPPUNIT_TEST_SUITE( ctors );
3533cdf0e10cSrcweir CPPUNIT_TEST( ctors_001 );
3534cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
3535cdf0e10cSrcweir
3536cdf0e10cSrcweir }; // class ctors
3537cdf0e10cSrcweir
3538cdf0e10cSrcweir /**thread do sendTo, refer to http://www.coding-zone.co.uk/cpp/articles/140101networkprogrammingv.shtml
3539cdf0e10cSrcweir */
3540cdf0e10cSrcweir class TalkerThread : public Thread
3541cdf0e10cSrcweir {
3542cdf0e10cSrcweir protected:
3543cdf0e10cSrcweir ::osl::SocketAddr saTargetSocketAddr;
3544cdf0e10cSrcweir ::osl::DatagramSocket dsSocket;
3545cdf0e10cSrcweir
run()3546cdf0e10cSrcweir void SAL_CALL run( )
3547cdf0e10cSrcweir {
3548cdf0e10cSrcweir dsSocket.sendTo( saTargetSocketAddr, pTestString1, strlen( pTestString1 ) + 1 ); // "test socket"
3549cdf0e10cSrcweir dsSocket.shutdown();
3550cdf0e10cSrcweir }
3551cdf0e10cSrcweir
onTerminated()3552cdf0e10cSrcweir void SAL_CALL onTerminated( )
3553cdf0e10cSrcweir {
3554cdf0e10cSrcweir }
3555cdf0e10cSrcweir
3556cdf0e10cSrcweir public:
TalkerThread()3557cdf0e10cSrcweir TalkerThread( ):
3558cdf0e10cSrcweir saTargetSocketAddr( aHostIp1, IP_PORT_MYPORT9 )
3559cdf0e10cSrcweir {
3560cdf0e10cSrcweir }
3561cdf0e10cSrcweir
~TalkerThread()3562cdf0e10cSrcweir ~TalkerThread( )
3563cdf0e10cSrcweir {
3564cdf0e10cSrcweir if ( isRunning( ) )
3565cdf0e10cSrcweir t_print("# error: TalkerThread not terminated normally.\n" );
3566cdf0e10cSrcweir }
3567cdf0e10cSrcweir };
3568cdf0e10cSrcweir
3569cdf0e10cSrcweir /**thread do listen, refer to http://www.coding-zone.co.uk/cpp/articles/140101networkprogrammingv.shtml
3570cdf0e10cSrcweir */
3571cdf0e10cSrcweir class ListenerThread : public Thread
3572cdf0e10cSrcweir {
3573cdf0e10cSrcweir protected:
3574cdf0e10cSrcweir ::osl::SocketAddr saTargetSocketAddr;
3575cdf0e10cSrcweir ::osl::DatagramSocket dsSocket;
3576cdf0e10cSrcweir
run()3577cdf0e10cSrcweir void SAL_CALL run( )
3578cdf0e10cSrcweir {
3579cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIp1, IP_PORT_MYPORT10 );
3580cdf0e10cSrcweir dsSocket.setOption( osl_Socket_OptionReuseAddr, 1 );
3581cdf0e10cSrcweir if ( dsSocket.bind( saLocalSocketAddr ) == sal_False )
3582cdf0e10cSrcweir {
3583cdf0e10cSrcweir t_print("DatagramSocket bind failed \n");
3584cdf0e10cSrcweir return;
3585cdf0e10cSrcweir }
3586cdf0e10cSrcweir //blocking mode: default
3587cdf0e10cSrcweir sal_Int32 nRecv = dsSocket.recvFrom( pRecvBuffer, 30, &saTargetSocketAddr); //strlen( pTestString2 ) + 1
3588cdf0e10cSrcweir t_print("After recvFrom, nRecv is %d\n", nRecv);
3589cdf0e10cSrcweir }
3590cdf0e10cSrcweir
onTerminated()3591cdf0e10cSrcweir void SAL_CALL onTerminated( )
3592cdf0e10cSrcweir {
3593cdf0e10cSrcweir }
3594cdf0e10cSrcweir
3595cdf0e10cSrcweir public:
3596cdf0e10cSrcweir sal_Char pRecvBuffer[30];
ListenerThread()3597cdf0e10cSrcweir ListenerThread( ):
3598cdf0e10cSrcweir saTargetSocketAddr( aHostIp1, IP_PORT_MYPORT10 )
3599cdf0e10cSrcweir {
3600cdf0e10cSrcweir pRecvBuffer[0] = '\0';
3601cdf0e10cSrcweir }
3602cdf0e10cSrcweir
~ListenerThread()3603cdf0e10cSrcweir ~ListenerThread( )
3604cdf0e10cSrcweir {
3605cdf0e10cSrcweir if ( isRunning( ) )
3606cdf0e10cSrcweir t_print("# error: ListenerThread not terminated normally.\n" );
3607cdf0e10cSrcweir }
3608cdf0e10cSrcweir
3609cdf0e10cSrcweir };
3610cdf0e10cSrcweir
3611cdf0e10cSrcweir /** testing the methods:
3612cdf0e10cSrcweir inline sal_Int32 DatagramSocket::recvFrom(void* pBuffer, sal_uInt32 BufferSize,
3613cdf0e10cSrcweir SocketAddr* pSenderAddr, oslSocketMsgFlag Flag )
3614cdf0e10cSrcweir inline sal_Int32 DatagramSocket::sendTo( const SocketAddr& ReceiverAddr,
3615cdf0e10cSrcweir const void* pBuffer, sal_uInt32 BufferSize, oslSocketMsgFlag Flag )
3616cdf0e10cSrcweir */
3617cdf0e10cSrcweir
3618cdf0e10cSrcweir class sendTo_recvFrom : public CppUnit::TestFixture
3619cdf0e10cSrcweir {
3620cdf0e10cSrcweir public:
3621cdf0e10cSrcweir
sr_001()3622cdf0e10cSrcweir void sr_001()
3623cdf0e10cSrcweir {
3624cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIp1, IP_PORT_MYPORT9 );
3625cdf0e10cSrcweir ::osl::DatagramSocket dsSocket;
3626cdf0e10cSrcweir dsSocket.setOption( osl_Socket_OptionReuseAddr, 1 );
3627cdf0e10cSrcweir dsSocket.bind( saLocalSocketAddr );
3628cdf0e10cSrcweir
3629cdf0e10cSrcweir sal_Char pReadBuffer[30];
3630cdf0e10cSrcweir TalkerThread myTalkThread;
3631cdf0e10cSrcweir myTalkThread.create();
3632cdf0e10cSrcweir sal_Int32 nRecv = dsSocket.recvFrom( pReadBuffer, 30, &saLocalSocketAddr);
3633cdf0e10cSrcweir myTalkThread.join();
3634cdf0e10cSrcweir //t_print("#received buffer is %s# \n", pReadBuffer);
3635cdf0e10cSrcweir
3636cdf0e10cSrcweir sal_Bool bOk = ( strcmp(pReadBuffer, pTestString1) == 0 );
3637cdf0e10cSrcweir
3638cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for sendTo/recvFrom function: create a talker thread and recvFrom in the main thread, check if the datagram socket can communicate successfully.",
3639cdf0e10cSrcweir nRecv > 0 && bOk == sal_True );
3640cdf0e10cSrcweir }
3641cdf0e10cSrcweir
sr_002()3642cdf0e10cSrcweir void sr_002()
3643cdf0e10cSrcweir {
3644cdf0e10cSrcweir ::osl::SocketAddr saListenSocketAddr( aHostIp1, IP_PORT_MYPORT10 );
3645cdf0e10cSrcweir ::osl::DatagramSocket dsSocket;
3646cdf0e10cSrcweir
3647cdf0e10cSrcweir //listener thread construct a DatagramSocket, recvFrom waiting for data, then main thread sendto data
3648cdf0e10cSrcweir ListenerThread myListenThread;
3649cdf0e10cSrcweir myListenThread.create();
3650cdf0e10cSrcweir //to grantee the recvFrom is before sendTo
3651cdf0e10cSrcweir thread_sleep( 1 );
3652cdf0e10cSrcweir
3653cdf0e10cSrcweir sal_Int32 nSend = dsSocket.sendTo( saListenSocketAddr, pTestString2, strlen( pTestString2 ) + 1 );
3654cdf0e10cSrcweir
3655cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "DatagramSocket sendTo failed: nSend <= 0.", nSend > 0);
3656cdf0e10cSrcweir
3657cdf0e10cSrcweir myListenThread.join();
3658cdf0e10cSrcweir //t_print("#received buffer is %s# \n", myListenThread.pRecvBuffer);
3659cdf0e10cSrcweir
3660cdf0e10cSrcweir sal_Bool bOk = ( strcmp( myListenThread.pRecvBuffer, pTestString2) == 0 );
3661cdf0e10cSrcweir
3662cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "test for sendTo/recvFrom function: create a listener thread and sendTo in the main thread, check if the datagram socket can communicate successfully.",
3663cdf0e10cSrcweir bOk == sal_True );
3664cdf0e10cSrcweir }
3665cdf0e10cSrcweir
3666cdf0e10cSrcweir //sendTo error, return -1; recvFrom error, return -1
sr_003()3667cdf0e10cSrcweir void sr_003()
3668cdf0e10cSrcweir {
3669cdf0e10cSrcweir ::osl::SocketAddr saListenSocketAddr( aHostIpInval1, IP_PORT_MYPORT10 );
3670cdf0e10cSrcweir ::osl::DatagramSocket dsSocket;
3671cdf0e10cSrcweir // Transport endpoint is not connected
3672cdf0e10cSrcweir sal_Int32 nSend = dsSocket.sendTo( saListenSocketAddr, pTestString2, strlen( pTestString2 ) + 1 );
3673cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "DatagramSocket sendTo should fail: nSend <= 0.",
3674cdf0e10cSrcweir nSend == -1 );
3675cdf0e10cSrcweir }
3676cdf0e10cSrcweir
sr_004()3677cdf0e10cSrcweir void sr_004()
3678cdf0e10cSrcweir {
3679cdf0e10cSrcweir ::osl::SocketAddr saListenSocketAddr1( aHostIpInval1, IP_PORT_MYPORT10 );
3680cdf0e10cSrcweir ::osl::SocketAddr saListenSocketAddr2( aHostIp2, IP_PORT_MYPORT10 );
3681cdf0e10cSrcweir ::osl::DatagramSocket dsSocket;
3682cdf0e10cSrcweir
3683cdf0e10cSrcweir dsSocket.enableNonBlockingMode( sal_True );
3684cdf0e10cSrcweir
3685cdf0e10cSrcweir sal_Char pReadBuffer[30];
3686cdf0e10cSrcweir //sal_Int32 nRecv1 = dsSocket.recvFrom( pReadBuffer, 30, &saListenSocketAddr1 );
3687cdf0e10cSrcweir
3688cdf0e10cSrcweir // will block ?
3689cdf0e10cSrcweir CloseSocketThread myThread( dsSocket );
3690cdf0e10cSrcweir myThread.create();
3691cdf0e10cSrcweir sal_Int32 nRecv2 = dsSocket.recvFrom( pReadBuffer, 30, &saListenSocketAddr1 );
3692cdf0e10cSrcweir myThread.join();
3693cdf0e10cSrcweir //t_print("#nRecv1 is %d nRecv2 is %d\n", nRecv1, nRecv2 );
3694cdf0e10cSrcweir CPPUNIT_ASSERT_MESSAGE( "DatagramSocket sendTo should fail: nSend <= 0.",
3695cdf0e10cSrcweir nRecv2 == -1 );
3696cdf0e10cSrcweir }
3697cdf0e10cSrcweir
3698cdf0e10cSrcweir CPPUNIT_TEST_SUITE( sendTo_recvFrom );
3699cdf0e10cSrcweir CPPUNIT_TEST( sr_001 );
3700cdf0e10cSrcweir CPPUNIT_TEST( sr_002 );
3701cdf0e10cSrcweir CPPUNIT_TEST( sr_003 );
3702cdf0e10cSrcweir CPPUNIT_TEST( sr_004 );
3703cdf0e10cSrcweir CPPUNIT_TEST_SUITE_END();
3704cdf0e10cSrcweir
3705cdf0e10cSrcweir }; // class sendTo_recvFrom
3706cdf0e10cSrcweir
3707cdf0e10cSrcweir // -----------------------------------------------------------------------------
3708cdf0e10cSrcweir
3709cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_DatagramSocket::ctors, "osl_DatagramSocket");
3710cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(osl_DatagramSocket::sendTo_recvFrom, "osl_DatagramSocket");
3711cdf0e10cSrcweir
3712cdf0e10cSrcweir } // namespace osl_DatagramSocket
3713cdf0e10cSrcweir
3714cdf0e10cSrcweir
3715cdf0e10cSrcweir // -----------------------------------------------------------------------------
3716cdf0e10cSrcweir
3717cdf0e10cSrcweir // this macro creates an empty function, which will called by the RegisterAllFunctions()
3718cdf0e10cSrcweir // to let the user the possibility to also register some functions by hand.
3719cdf0e10cSrcweir NOADDITIONAL;
3720