187d2adbcSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
387d2adbcSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
487d2adbcSAndrew Rist * or more contributor license agreements. See the NOTICE file
587d2adbcSAndrew Rist * distributed with this work for additional information
687d2adbcSAndrew Rist * regarding copyright ownership. The ASF licenses this file
787d2adbcSAndrew Rist * to you under the Apache License, Version 2.0 (the
887d2adbcSAndrew Rist * "License"); you may not use this file except in compliance
987d2adbcSAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
1187d2adbcSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
1387d2adbcSAndrew Rist * Unless required by applicable law or agreed to in writing,
1487d2adbcSAndrew Rist * software distributed under the License is distributed on an
1587d2adbcSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1687d2adbcSAndrew Rist * KIND, either express or implied. See the License for the
1787d2adbcSAndrew Rist * specific language governing permissions and limitations
1887d2adbcSAndrew Rist * under the License.
19cdf0e10cSrcweir *
2087d2adbcSAndrew Rist *************************************************************/
2187d2adbcSAndrew Rist
2287d2adbcSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sal.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir /** 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 // include files
55cdf0e10cSrcweir //------------------------------------------------------------------------
56cdf0e10cSrcweir
5763d99982SDamjan Jovanovic #include "gtest/gtest.h"
58cdf0e10cSrcweir
59cdf0e10cSrcweir //#include "osl_Socket_Const.h"
60cdf0e10cSrcweir #include "sockethelper.hxx"
61cdf0e10cSrcweir
62cdf0e10cSrcweir using namespace osl;
63cdf0e10cSrcweir using namespace rtl;
64cdf0e10cSrcweir
65cdf0e10cSrcweir #define IP_PORT_FTP 21
66cdf0e10cSrcweir #define IP_PORT_TELNET 23
67cdf0e10cSrcweir #define IP_PORT_HTTP2 8080
68cdf0e10cSrcweir #define IP_PORT_INVAL 99999
69cdf0e10cSrcweir #define IP_PORT_POP3 110
70cdf0e10cSrcweir #define IP_PORT_NETBIOS 139
71cdf0e10cSrcweir #define IP_PORT_MYPORT 8881
72cdf0e10cSrcweir #define IP_PORT_MYPORT1 8882
73cdf0e10cSrcweir #define IP_PORT_MYPORT5 8886
74cdf0e10cSrcweir #define IP_PORT_MYPORT6 8887
75cdf0e10cSrcweir #define IP_PORT_MYPORT7 8895
76cdf0e10cSrcweir #define IP_PORT_MYPORT8 8896
77cdf0e10cSrcweir #define IP_PORT_MYPORT9 8897
78cdf0e10cSrcweir
79cdf0e10cSrcweir //------------------------------------------------------------------------
80cdf0e10cSrcweir // helper functions
81cdf0e10cSrcweir //------------------------------------------------------------------------
82cdf0e10cSrcweir
83cdf0e10cSrcweir // just used to test socket::close() when accepting
84cdf0e10cSrcweir class AcceptorThread : public Thread
85cdf0e10cSrcweir {
86cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket;
87cdf0e10cSrcweir ::rtl::OUString aHostIP;
88cdf0e10cSrcweir sal_Bool bOK;
89cdf0e10cSrcweir protected:
run()90cdf0e10cSrcweir void SAL_CALL run( )
91cdf0e10cSrcweir {
92cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( aHostIP, IP_PORT_MYPORT9 );
93cdf0e10cSrcweir ::osl::StreamSocket ssStreamConnection;
94cdf0e10cSrcweir
95cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //integer not sal_Bool : sal_True);
96cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
97cdf0e10cSrcweir if ( sal_True != bOK1 )
98cdf0e10cSrcweir {
9963d99982SDamjan Jovanovic printf("# AcceptorSocket bind address failed.\n" ) ;
100cdf0e10cSrcweir return;
101cdf0e10cSrcweir }
102cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
103cdf0e10cSrcweir if ( sal_True != bOK2 )
104cdf0e10cSrcweir {
10563d99982SDamjan Jovanovic printf("# AcceptorSocket listen address failed.\n" ) ;
106cdf0e10cSrcweir return;
107cdf0e10cSrcweir }
108cdf0e10cSrcweir
109cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_False );
110cdf0e10cSrcweir
111cdf0e10cSrcweir oslSocketResult eResult = asAcceptorSocket.acceptConnection( ssStreamConnection );
112cdf0e10cSrcweir if (eResult != osl_Socket_Ok )
113cdf0e10cSrcweir {
114cdf0e10cSrcweir bOK = sal_True;
11563d99982SDamjan Jovanovic printf("AcceptorThread: acceptConnection failed! \n");
116cdf0e10cSrcweir }
117cdf0e10cSrcweir }
118cdf0e10cSrcweir public:
AcceptorThread(::osl::AcceptorSocket & asSocket,::rtl::OUString const & aBindIP)119cdf0e10cSrcweir AcceptorThread(::osl::AcceptorSocket & asSocket, ::rtl::OUString const& aBindIP )
120cdf0e10cSrcweir : asAcceptorSocket( asSocket ), aHostIP( aBindIP )
121cdf0e10cSrcweir {
122cdf0e10cSrcweir bOK = sal_False;
123cdf0e10cSrcweir }
124cdf0e10cSrcweir
isOK()125cdf0e10cSrcweir sal_Bool isOK() { return bOK; }
126cdf0e10cSrcweir
~AcceptorThread()127cdf0e10cSrcweir ~AcceptorThread( )
128cdf0e10cSrcweir {
129cdf0e10cSrcweir if ( isRunning( ) )
130cdf0e10cSrcweir {
131cdf0e10cSrcweir asAcceptorSocket.shutdown();
13263d99982SDamjan Jovanovic printf("# error: Acceptor thread not terminated.\n" );
133cdf0e10cSrcweir }
134cdf0e10cSrcweir }
135cdf0e10cSrcweir };
136cdf0e10cSrcweir
137cdf0e10cSrcweir namespace osl_Socket
138cdf0e10cSrcweir {
139cdf0e10cSrcweir
140cdf0e10cSrcweir /** testing the methods:
141cdf0e10cSrcweir inline Socket( );
142cdf0e10cSrcweir inline Socket( const Socket & socket );
143cdf0e10cSrcweir inline Socket( oslSocket socketHandle );
144cdf0e10cSrcweir inline Socket( oslSocket socketHandle, __sal_NoAcquire noacquire );
145cdf0e10cSrcweir */
146cdf0e10cSrcweir
147cdf0e10cSrcweir /** test writer's comment:
148cdf0e10cSrcweir
149cdf0e10cSrcweir class Socket can not be initialized by its protected constructor, though the protected
150cdf0e10cSrcweir constructor is the most convenient way to create a new socket.
151cdf0e10cSrcweir it only allow the method of C function osl_createSocket like:
152cdf0e10cSrcweir ::osl::Socket sSocket( osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream,
153cdf0e10cSrcweir osl_Socket_ProtocolIp ) );
154cdf0e10cSrcweir the use of C method lost some of the transparent of tester using C++ wrapper.
155cdf0e10cSrcweir */
156cdf0e10cSrcweir
157cdf0e10cSrcweir
15863d99982SDamjan Jovanovic class ctors : public ::testing::Test
159cdf0e10cSrcweir {
160cdf0e10cSrcweir public:
161cdf0e10cSrcweir oslSocket sHandle;
162cdf0e10cSrcweir // initialization
SetUp()16363d99982SDamjan Jovanovic void SetUp( )
164cdf0e10cSrcweir {
165cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
166cdf0e10cSrcweir }
167cdf0e10cSrcweir
TearDown()16863d99982SDamjan Jovanovic void TearDown( )
169cdf0e10cSrcweir {
170cdf0e10cSrcweir sHandle = NULL;
171cdf0e10cSrcweir }
17263d99982SDamjan Jovanovic }; // class ctors
173cdf0e10cSrcweir
TEST_F(ctors,ctors_none)17463d99982SDamjan Jovanovic TEST_F(ctors, ctors_none)
175cdf0e10cSrcweir {
176cdf0e10cSrcweir /// Socket constructor.
177cdf0e10cSrcweir // ::osl::Socket sSocket();
178cdf0e10cSrcweir
17963d99982SDamjan Jovanovic ASSERT_TRUE(1 == 1) << "test for ctors_none constructor function: check if the socket was created successfully, if no exception occurred";
180cdf0e10cSrcweir }
181cdf0e10cSrcweir
TEST_F(ctors,ctors_acquire)18263d99982SDamjan Jovanovic TEST_F(ctors, ctors_acquire)
183cdf0e10cSrcweir {
184cdf0e10cSrcweir /// Socket constructor.
185cdf0e10cSrcweir ::osl::Socket sSocket( sHandle );
186cdf0e10cSrcweir
18763d99982SDamjan Jovanovic ASSERT_TRUE(osl_Socket_TypeStream == sSocket.getType( )) << "test for ctors_acquire constructor function: check if the socket was created successfully";
188cdf0e10cSrcweir }
189cdf0e10cSrcweir
TEST_F(ctors,ctors_no_acquire)19063d99982SDamjan Jovanovic TEST_F(ctors, ctors_no_acquire)
191cdf0e10cSrcweir {
192cdf0e10cSrcweir /// Socket constructor.
193cdf0e10cSrcweir ::osl::Socket sSocket( sHandle, SAL_NO_ACQUIRE );
194cdf0e10cSrcweir
19563d99982SDamjan Jovanovic ASSERT_TRUE(osl_Socket_TypeStream == sSocket.getType( )) << " test for ctors_no_acquire constructor function: check if the socket was created successfully";
196cdf0e10cSrcweir }
197cdf0e10cSrcweir
TEST_F(ctors,ctors_copy_ctor)19863d99982SDamjan Jovanovic TEST_F(ctors, ctors_copy_ctor)
199cdf0e10cSrcweir {
200cdf0e10cSrcweir ::osl::Socket sSocket( sHandle );
201cdf0e10cSrcweir /// Socket copy constructor.
202cdf0e10cSrcweir ::osl::Socket copySocket( sSocket );
203cdf0e10cSrcweir
20463d99982SDamjan Jovanovic ASSERT_TRUE(osl_Socket_TypeStream == copySocket.getType( )) << " test for ctors_copy_ctor constructor function: create new Socket instance using copy constructor";
205cdf0e10cSrcweir }
206cdf0e10cSrcweir
TEST_F(ctors,ctors_TypeRaw)20763d99982SDamjan Jovanovic TEST_F(ctors, ctors_TypeRaw)
208cdf0e10cSrcweir {
209cdf0e10cSrcweir #ifdef WNT
210cdf0e10cSrcweir oslSocket sHandleRaw = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeRaw, osl_Socket_ProtocolIp );
211cdf0e10cSrcweir // LLA: ? ::osl::Socket sSocket( sHandleRaw );
21263d99982SDamjan Jovanovic ASSERT_TRUE(sHandleRaw != NULL) << " type osl_Socket_TypeRaw socket create failed on UNX ";
213cdf0e10cSrcweir #else
214cdf0e10cSrcweir oslSocket sHandleRaw = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeRaw, osl_Socket_ProtocolIp );
21563d99982SDamjan Jovanovic ASSERT_TRUE(sHandleRaw == NULL) << " can't create socket with type osl_Socket_TypeRaw within UNX is ok.";
216cdf0e10cSrcweir #endif
217cdf0e10cSrcweir }
218cdf0e10cSrcweir
TEST_F(ctors,ctors_family_Ipx)21963d99982SDamjan Jovanovic TEST_F(ctors, ctors_family_Ipx)
220cdf0e10cSrcweir {
221cdf0e10cSrcweir oslSocket sHandleIpx = osl_createSocket( osl_Socket_FamilyIpx, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
22263d99982SDamjan Jovanovic ASSERT_TRUE(sHandleIpx != NULL) << " family osl_Socket_FamilyIpx socket create failed! ";
223cdf0e10cSrcweir ::osl::Socket sSocket( sHandleIpx ); //, SAL_NO_ACQUIRE );
22463d99982SDamjan Jovanovic printf("#Type is %d \n", sSocket.getType( ) );
225cdf0e10cSrcweir
22663d99982SDamjan Jovanovic ASSERT_TRUE(osl_Socket_TypeStream == sSocket.getType( )) << " test for create new Socket instance that family is osl_Socket_FamilyIpx";
227cdf0e10cSrcweir }
228cdf0e10cSrcweir
229cdf0e10cSrcweir /** testing the methods:
230cdf0e10cSrcweir inline Socket& SAL_CALL operator= ( oslSocket socketHandle);
231cdf0e10cSrcweir inline Socket& SAL_CALL operator= (const Socket& sock);
232cdf0e10cSrcweir inline sal_Bool SAL_CALL operator==( const Socket& rSocket ) const ;
233cdf0e10cSrcweir inline sal_Bool SAL_CALL operator==( const oslSocket socketHandle ) const;
234cdf0e10cSrcweir */
235cdf0e10cSrcweir
23663d99982SDamjan Jovanovic class operators : public ::testing::Test
237cdf0e10cSrcweir {
238cdf0e10cSrcweir public:
239cdf0e10cSrcweir oslSocket sHandle;
240cdf0e10cSrcweir // initialization
SetUp()24163d99982SDamjan Jovanovic void SetUp( )
242cdf0e10cSrcweir {
243cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
244cdf0e10cSrcweir }
245cdf0e10cSrcweir
TearDown()24663d99982SDamjan Jovanovic void TearDown( )
247cdf0e10cSrcweir {
248cdf0e10cSrcweir sHandle = NULL;
249cdf0e10cSrcweir }
25063d99982SDamjan Jovanovic }; // class operators
251cdf0e10cSrcweir
252cdf0e10cSrcweir /** test writer's comment:
253cdf0e10cSrcweir
254*99ad85ffSJohn Bampton the assignment operator does not support direct assignment like:
255cdf0e10cSrcweir ::osl::Socket sSocket = sHandle.
256cdf0e10cSrcweir */
TEST_F(operators,operators_assignment_handle)25763d99982SDamjan Jovanovic TEST_F(operators, operators_assignment_handle)
258cdf0e10cSrcweir {
259cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
260cdf0e10cSrcweir ::osl::Socket assignSocket = sSocket.getHandle();
261cdf0e10cSrcweir
26263d99982SDamjan Jovanovic ASSERT_TRUE(osl_Socket_TypeStream == assignSocket.getType( )) << "test for operators_assignment_handle function: test the assignment operator.";
263cdf0e10cSrcweir }
264cdf0e10cSrcweir
TEST_F(operators,operators_assignment)26563d99982SDamjan Jovanovic TEST_F(operators, operators_assignment)
266cdf0e10cSrcweir {
267cdf0e10cSrcweir ::osl::Socket sSocket( sHandle );
268cdf0e10cSrcweir ::osl::Socket assignSocket = sSocket;
269cdf0e10cSrcweir
27063d99982SDamjan Jovanovic ASSERT_TRUE(osl_Socket_TypeStream == assignSocket.getType( )) << "test for operators_assignment function: assignment operator";
271cdf0e10cSrcweir }
272cdf0e10cSrcweir
TEST_F(operators,operators_equal_handle_001)27363d99982SDamjan Jovanovic TEST_F(operators, operators_equal_handle_001)
274cdf0e10cSrcweir {
275cdf0e10cSrcweir /// Socket constructor.
276cdf0e10cSrcweir ::osl::Socket sSocket( sHandle );
277cdf0e10cSrcweir ::osl::Socket equalSocket = sSocket;
278cdf0e10cSrcweir
27963d99982SDamjan Jovanovic ASSERT_TRUE(equalSocket == sHandle) << " test for operators_equal_handle_001 function: check equal.";
280cdf0e10cSrcweir }
281cdf0e10cSrcweir
TEST_F(operators,operators_equal_handle_002)28263d99982SDamjan Jovanovic TEST_F(operators, operators_equal_handle_002)
283cdf0e10cSrcweir {
284cdf0e10cSrcweir /// Socket constructor.
285cdf0e10cSrcweir ::osl::Socket equalSocket( osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeDgram, osl_Socket_ProtocolIp ) );
286cdf0e10cSrcweir
28763d99982SDamjan Jovanovic ASSERT_TRUE(!( equalSocket == sHandle )) << " test for operators_equal_handle_001 function: check unequal.";
288cdf0e10cSrcweir }
289cdf0e10cSrcweir
TEST_F(operators,operators_equal_001)29063d99982SDamjan Jovanovic TEST_F(operators, operators_equal_001)
291cdf0e10cSrcweir {
292cdf0e10cSrcweir ::osl::Socket sSocket( sHandle );
293cdf0e10cSrcweir /// Socket copy constructor.
294cdf0e10cSrcweir ::osl::Socket equalSocket( sSocket );
295cdf0e10cSrcweir
29663d99982SDamjan Jovanovic ASSERT_TRUE(equalSocket == sSocket) << " test for operators_equal function: check equal.";
297cdf0e10cSrcweir }
298cdf0e10cSrcweir
TEST_F(operators,operators_equal_002)29963d99982SDamjan Jovanovic TEST_F(operators, operators_equal_002)
300cdf0e10cSrcweir {
301cdf0e10cSrcweir ::osl::Socket sSocket( sHandle );
302cdf0e10cSrcweir /// Socket copy constructor.
303cdf0e10cSrcweir ::osl::Socket equalSocket( osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeDgram, osl_Socket_ProtocolIp ) );
304cdf0e10cSrcweir
30563d99982SDamjan Jovanovic ASSERT_TRUE(!( equalSocket == sSocket )) << " test for operators_equal_002 function: check unequal.";
306cdf0e10cSrcweir }
307cdf0e10cSrcweir
308cdf0e10cSrcweir /** testing the methods:
309cdf0e10cSrcweir inline void SAL_CALL shutdown( oslSocketDirection Direction = osl_Socket_DirReadWrite );
310cdf0e10cSrcweir inline void SAL_CALL close();
311cdf0e10cSrcweir */
312cdf0e10cSrcweir
31363d99982SDamjan Jovanovic class close : public ::testing::Test
314cdf0e10cSrcweir {
315cdf0e10cSrcweir public:
316cdf0e10cSrcweir oslSocket sHandle;
317cdf0e10cSrcweir // initialization
SetUp()31863d99982SDamjan Jovanovic void SetUp( )
319cdf0e10cSrcweir {
320cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
321cdf0e10cSrcweir }
322cdf0e10cSrcweir
TearDown()32363d99982SDamjan Jovanovic void TearDown( )
324cdf0e10cSrcweir {
325cdf0e10cSrcweir sHandle = NULL;
326cdf0e10cSrcweir }
32763d99982SDamjan Jovanovic }; // class close
328cdf0e10cSrcweir
TEST_F(close,close_001)32963d99982SDamjan Jovanovic TEST_F(close, close_001)
330cdf0e10cSrcweir {
331cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
332cdf0e10cSrcweir sSocket.close();
333cdf0e10cSrcweir
33463d99982SDamjan Jovanovic ASSERT_TRUE(sSocket.getHandle() == sHandle) << "test for close_001 function: this function is reserved for test.";
335cdf0e10cSrcweir }
336cdf0e10cSrcweir
TEST_F(close,close_002)33763d99982SDamjan Jovanovic TEST_F(close, close_002)
338cdf0e10cSrcweir {
33963d99982SDamjan Jovanovic // This blocks forever on FreeBSD
34063d99982SDamjan Jovanovic #if defined(LINUX)
341cdf0e10cSrcweir ::osl::AcceptorSocket asSocket( osl_Socket_FamilyInet, osl_Socket_ProtocolIp, osl_Socket_TypeStream );
342cdf0e10cSrcweir AcceptorThread myAcceptorThread( asSocket, rtl::OUString::createFromAscii("127.0.0.1") );
343cdf0e10cSrcweir myAcceptorThread.create();
344cdf0e10cSrcweir
345cdf0e10cSrcweir thread_sleep( 1 );
346cdf0e10cSrcweir //when accepting, close the socket, the thread will not block for accepting
347cdf0e10cSrcweir //man close:Any locks held on the file it was associated with, and owned by the process, are removed
348cdf0e10cSrcweir asSocket.close();
349cdf0e10cSrcweir //thread_sleep( 2 );
350cdf0e10cSrcweir myAcceptorThread.join();
351cdf0e10cSrcweir
35263d99982SDamjan Jovanovic ASSERT_TRUE(myAcceptorThread.isOK() == sal_True) << "test for close when is accepting: the socket will quit accepting status.";
35363d99982SDamjan Jovanovic #endif
354cdf0e10cSrcweir }
355cdf0e10cSrcweir
356cdf0e10cSrcweir // to cover "if ( pSockAddrIn->sin_addr.s_addr == htonl(INADDR_ANY) )" in osl_closeSocket( )
TEST_F(close,close_003)35763d99982SDamjan Jovanovic TEST_F(close, close_003)
358cdf0e10cSrcweir {
35963d99982SDamjan Jovanovic // This blocks forever on FreeBSD
36063d99982SDamjan Jovanovic #if defined(LINUX)
361cdf0e10cSrcweir ::osl::AcceptorSocket asSocket( osl_Socket_FamilyInet, osl_Socket_ProtocolIp, osl_Socket_TypeStream );
362cdf0e10cSrcweir AcceptorThread myAcceptorThread( asSocket, rtl::OUString::createFromAscii("0.0.0.0") );
363cdf0e10cSrcweir myAcceptorThread.create();
364cdf0e10cSrcweir
365cdf0e10cSrcweir thread_sleep( 1 );
366cdf0e10cSrcweir asSocket.close();
367cdf0e10cSrcweir myAcceptorThread.join();
368cdf0e10cSrcweir
36963d99982SDamjan Jovanovic ASSERT_TRUE(myAcceptorThread.isOK() == sal_True) << "test for close when is accepting: the socket will quit accepting status.";
37063d99982SDamjan Jovanovic #endif
371cdf0e10cSrcweir }
372cdf0e10cSrcweir
373cdf0e10cSrcweir /** testing the method:
374cdf0e10cSrcweir inline void SAL_CALL getLocalAddr( SocketAddr &Addr ) const;
375cdf0e10cSrcweir */
376cdf0e10cSrcweir
37763d99982SDamjan Jovanovic class getLocalAddr : public ::testing::Test
378cdf0e10cSrcweir {
379cdf0e10cSrcweir public:
380cdf0e10cSrcweir oslSocket sHandle;
381cdf0e10cSrcweir // initialization
SetUp()38263d99982SDamjan Jovanovic void SetUp( )
383cdf0e10cSrcweir {
384cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
385cdf0e10cSrcweir }
386cdf0e10cSrcweir
TearDown()38763d99982SDamjan Jovanovic void TearDown( )
388cdf0e10cSrcweir {
389cdf0e10cSrcweir sHandle = NULL;
390cdf0e10cSrcweir }
39163d99982SDamjan Jovanovic }; // class getLocalAddr
392cdf0e10cSrcweir
393cdf0e10cSrcweir // get the Address of the local end of the socket
TEST_F(getLocalAddr,getLocalAddr_001)39463d99982SDamjan Jovanovic TEST_F(getLocalAddr, getLocalAddr_001)
395cdf0e10cSrcweir {
396cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
397cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_MYPORT8 );
398cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr;
399cdf0e10cSrcweir
400cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
401cdf0e10cSrcweir
402cdf0e10cSrcweir sal_Bool bOK1 = sSocket.bind( saBindSocketAddr );
403cdf0e10cSrcweir ::rtl::OUString suError1 = ::rtl::OUString::createFromAscii("Socket bind fail:") + sSocket.getErrorAsString();
40463d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK1) << suError1.pData;
405cdf0e10cSrcweir
406cdf0e10cSrcweir sSocket.getLocalAddr( saLocalSocketAddr );
407cdf0e10cSrcweir
408cdf0e10cSrcweir sal_Bool bOK = compareUString( saLocalSocketAddr.getHostname( 0 ), sSocket.getLocalHost() ) ;
409cdf0e10cSrcweir
41063d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK) << "test for getLocalAddr function: first create a new socket, then a socket address, bind them, and check the address.";
411cdf0e10cSrcweir }
412cdf0e10cSrcweir
413cdf0e10cSrcweir /** testing the method:
414cdf0e10cSrcweir inline sal_Int32 SAL_CALL getLocalPort() const;
415cdf0e10cSrcweir */
416cdf0e10cSrcweir
41763d99982SDamjan Jovanovic class getLocalPort : public ::testing::Test
418cdf0e10cSrcweir {
419cdf0e10cSrcweir public:
420cdf0e10cSrcweir oslSocket sHandle;
421cdf0e10cSrcweir // initialization
SetUp()42263d99982SDamjan Jovanovic void SetUp( )
423cdf0e10cSrcweir {
424cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
425cdf0e10cSrcweir }
426cdf0e10cSrcweir
TearDown()42763d99982SDamjan Jovanovic void TearDown( )
428cdf0e10cSrcweir {
429cdf0e10cSrcweir sHandle = NULL;
430cdf0e10cSrcweir }
43163d99982SDamjan Jovanovic }; // class getLocalPort
432cdf0e10cSrcweir
TEST_F(getLocalPort,getLocalPort_001)43363d99982SDamjan Jovanovic TEST_F(getLocalPort, getLocalPort_001)
434cdf0e10cSrcweir {
435cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
436cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_MYPORT7 ); // aHostIp1 localhost
437cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr;
438cdf0e10cSrcweir
439cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
440cdf0e10cSrcweir
441cdf0e10cSrcweir sal_Bool bOK1 = sSocket.bind( saBindSocketAddr );
442cdf0e10cSrcweir ::rtl::OUString suError1 = ::rtl::OUString::createFromAscii("Socket bind fail:") + sSocket.getErrorAsString();
44363d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK1) << suError1.pData;
444cdf0e10cSrcweir sal_Bool bOK = ( IP_PORT_MYPORT7 == sSocket.getLocalPort( ) );
445cdf0e10cSrcweir
44663d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK) << "test for getLocalPort function: first create a new socket, then a socket address, bind them, and check the port.";
447cdf0e10cSrcweir }
448cdf0e10cSrcweir
449cdf0e10cSrcweir /** test writer's comment:
450cdf0e10cSrcweir
451cdf0e10cSrcweir the invalid port number can not be set by giving invalid port number
452cdf0e10cSrcweir such as 99999 or -1, it will convert to ( x mod 65535 ), so it will always be
453cdf0e10cSrcweir valid, the only instance that the getLocalPort returns OSL_INVALID_PORT
454cdf0e10cSrcweir is when saSocketAddr itself is an invalid one, that is , the IP or host name
455cdf0e10cSrcweir can not be found, then the created socket address is not valid.
456cdf0e10cSrcweir */
TEST_F(getLocalPort,getLocalPort_002)45763d99982SDamjan Jovanovic TEST_F(getLocalPort, getLocalPort_002)
458cdf0e10cSrcweir {
459cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( rtl::OUString::createFromAscii("123.45.67.89"), IP_PORT_TELNET);
460cdf0e10cSrcweir #ifdef WNT
461cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
462cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); // sal_True);
463cdf0e10cSrcweir sSocket.bind( saBindSocketAddr );
464cdf0e10cSrcweir //Invalid IP, so bind should fail
465cdf0e10cSrcweir ::rtl::OUString suError = outputError(::rtl::OUString::valueOf(sSocket.getLocalPort( )),
466cdf0e10cSrcweir ::rtl::OUString::valueOf((sal_Int32)OSL_INVALID_PORT),
467cdf0e10cSrcweir "test for getLocalPort function: first create a new socket, then an invalid socket address, bind them, and check the port assigned.");
468cdf0e10cSrcweir sal_Bool bOK = ( OSL_INVALID_PORT == sSocket.getLocalPort( ) );
469cdf0e10cSrcweir (void)bOK;
470cdf0e10cSrcweir #else
471cdf0e10cSrcweir //on Unix, if Addr is not an address of type osl_Socket_FamilyInet, it returns OSL_INVALID_PORT
472cdf0e10cSrcweir ::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");
473cdf0e10cSrcweir #endif
47463d99982SDamjan Jovanovic ASSERT_TRUE(sal_False) << suError.pData;
475cdf0e10cSrcweir
476cdf0e10cSrcweir }
477cdf0e10cSrcweir
TEST_F(getLocalPort,getLocalPort_003)47863d99982SDamjan Jovanovic TEST_F(getLocalPort, getLocalPort_003)
479cdf0e10cSrcweir {
480cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
481cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( getLocalIP(), IP_PORT_INVAL);
482cdf0e10cSrcweir
483cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
484cdf0e10cSrcweir
485cdf0e10cSrcweir sal_Bool bOK1 = sSocket.bind( saBindSocketAddr );
486cdf0e10cSrcweir ::rtl::OUString suError1 = ::rtl::OUString::createFromAscii("Socket bind fail:") + sSocket.getErrorAsString();
48763d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK1) << suError1.pData;
488cdf0e10cSrcweir ::rtl::OUString suError = outputError(::rtl::OUString::valueOf(sSocket.getLocalPort( )),
489cdf0e10cSrcweir ::rtl::OUString::createFromAscii("34463"),
490cdf0e10cSrcweir "test for getLocalPort function: first create a new socket, then an invalid socket address, bind them, and check the port assigned");
491cdf0e10cSrcweir sal_Bool bOK = ( sSocket.getLocalPort( ) >= 1 && sSocket.getLocalPort( ) <= 65535);
492cdf0e10cSrcweir
49363d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK) << suError.pData;
494cdf0e10cSrcweir }
495cdf0e10cSrcweir
496cdf0e10cSrcweir /** testing the method:
497cdf0e10cSrcweir inline ::rtl::OUString SAL_CALL getLocalHost() const;
498cdf0e10cSrcweir
499cdf0e10cSrcweir 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;
500cdf0e10cSrcweir 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
501cdf0e10cSrcweir will return hostname of current processor such as "aegean.PRC.Sun.COM"
502cdf0e10cSrcweir */
503cdf0e10cSrcweir
50463d99982SDamjan Jovanovic class getLocalHost : public ::testing::Test
505cdf0e10cSrcweir {
506cdf0e10cSrcweir public:
507cdf0e10cSrcweir oslSocket sHandle;
508cdf0e10cSrcweir // initialization
SetUp()50963d99982SDamjan Jovanovic void SetUp( )
510cdf0e10cSrcweir {
511cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
512cdf0e10cSrcweir }
513cdf0e10cSrcweir
TearDown()51463d99982SDamjan Jovanovic void TearDown( )
515cdf0e10cSrcweir {
516cdf0e10cSrcweir sHandle = NULL;
517cdf0e10cSrcweir }
51863d99982SDamjan Jovanovic }; // class getLocalHost
519cdf0e10cSrcweir
TEST_F(getLocalHost,getLocalHost_001)52063d99982SDamjan Jovanovic TEST_F(getLocalHost, getLocalHost_001)
521cdf0e10cSrcweir {
522cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
523cdf0e10cSrcweir //port number from IP_PORT_HTTP1 to IP_PORT_MYPORT6, mindyliu
524cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_MYPORT6 );
525cdf0e10cSrcweir
526cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
527cdf0e10cSrcweir
528cdf0e10cSrcweir sal_Bool bOK1 = sSocket.bind( saBindSocketAddr );
529cdf0e10cSrcweir ::rtl::OUString suError1 = ::rtl::OUString::createFromAscii("Socket bind fail:") + sSocket.getErrorAsString();
53063d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK1) << suError1.pData;
531cdf0e10cSrcweir sal_Bool bOK;
532cdf0e10cSrcweir ::rtl::OUString suError;
533cdf0e10cSrcweir #ifdef WNT
534cdf0e10cSrcweir bOK = compareUString( sSocket.getLocalHost( ), getThisHostname( ) ) ;
535cdf0e10cSrcweir suError = outputError(sSocket.getLocalHost( ), getThisHostname( ),
536cdf0e10cSrcweir "test for getLocalHost function: create localhost socket and check name");
537cdf0e10cSrcweir #else
538cdf0e10cSrcweir ::rtl::OUString aUString = ::rtl::OUString::createFromAscii( (const sal_Char *) "localhost" );
539cdf0e10cSrcweir sal_Bool bRes1, bRes2;
540cdf0e10cSrcweir bRes1 = compareUString( sSocket.getLocalHost( ), aUString ) ;
541cdf0e10cSrcweir bRes2 = compareUString( sSocket.getLocalHost( ), saBindSocketAddr.getHostname(0) ) ;
542cdf0e10cSrcweir bOK = bRes1 || bRes2;
543cdf0e10cSrcweir suError = outputError(sSocket.getLocalHost( ), aUString, "test for getLocalHost function: create localhost socket and check name");
544cdf0e10cSrcweir #endif
54563d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK) << suError.pData;
546cdf0e10cSrcweir }
547cdf0e10cSrcweir
TEST_F(getLocalHost,getLocalHost_002)54863d99982SDamjan Jovanovic TEST_F(getLocalHost, getLocalHost_002)
549cdf0e10cSrcweir {
550cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
551cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( rtl::OUString::createFromAscii("123.45.67.89"), IP_PORT_POP3);
552cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr;
553cdf0e10cSrcweir
554cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
555cdf0e10cSrcweir sSocket.bind( saBindSocketAddr );
556cdf0e10cSrcweir //Invalid IP, so bind should fail
557cdf0e10cSrcweir sal_Bool bOK = compareUString( sSocket.getLocalHost( ), rtl::OUString::createFromAscii("") ) ;
558cdf0e10cSrcweir ::rtl::OUString suError = outputError(sSocket.getLocalHost( ), rtl::OUString::createFromAscii(""), "test for getLocalHost function: getLocalHost with invalid SocketAddr");
559cdf0e10cSrcweir
56063d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK) << suError.pData;
561cdf0e10cSrcweir }
562cdf0e10cSrcweir
563cdf0e10cSrcweir /** testing the methods:
564cdf0e10cSrcweir inline void SAL_CALL getPeerAddr( SocketAddr & Addr) const;
565cdf0e10cSrcweir inline sal_Int32 SAL_CALL getPeerPort() const;
566cdf0e10cSrcweir inline ::rtl::OUString SAL_CALL getPeerHost() const;
567cdf0e10cSrcweir */
56863d99982SDamjan Jovanovic class getPeer : public ::testing::Test
569cdf0e10cSrcweir {
570cdf0e10cSrcweir public:
571cdf0e10cSrcweir oslSocket sHandle;
572cdf0e10cSrcweir TimeValue *pTimeout;
573cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket;
574cdf0e10cSrcweir ::osl::ConnectorSocket csConnectorSocket;
575cdf0e10cSrcweir
576cdf0e10cSrcweir
577cdf0e10cSrcweir // initialization
SetUp()57863d99982SDamjan Jovanovic void SetUp( )
579cdf0e10cSrcweir {
580cdf0e10cSrcweir pTimeout = ( TimeValue* )malloc( sizeof( TimeValue ) );
581cdf0e10cSrcweir pTimeout->Seconds = 3;
582cdf0e10cSrcweir pTimeout->Nanosec = 0;
583cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
584cdf0e10cSrcweir }
585cdf0e10cSrcweir
TearDown()58663d99982SDamjan Jovanovic void TearDown( )
587cdf0e10cSrcweir {
588cdf0e10cSrcweir free( pTimeout );
589cdf0e10cSrcweir sHandle = NULL;
590cdf0e10cSrcweir asAcceptorSocket.close( );
591cdf0e10cSrcweir csConnectorSocket.close( );
592cdf0e10cSrcweir }
59363d99982SDamjan Jovanovic }; // class getPeer
594cdf0e10cSrcweir
TEST_F(getPeer,getPeer_001)59563d99982SDamjan Jovanovic TEST_F(getPeer, getPeer_001)
596cdf0e10cSrcweir {
597cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_MYPORT );
598cdf0e10cSrcweir ::osl::SocketAddr saTargetSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_MYPORT );
599cdf0e10cSrcweir ::osl::SocketAddr saPeerSocketAddr( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP );
600cdf0e10cSrcweir ::osl::StreamSocket ssConnection;
601cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
602cdf0e10cSrcweir /// launch server socket
603cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
60463d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK1) << "AcceptorSocket bind '127.0.0.1' address failed.";
605cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
60663d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK2) << "AcceptorSocket listen failed.";
607cdf0e10cSrcweir
608cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_True );
609cdf0e10cSrcweir asAcceptorSocket.acceptConnection(ssConnection); /// waiting for incoming connection...
610cdf0e10cSrcweir
611cdf0e10cSrcweir /// launch client socket
612cdf0e10cSrcweir csConnectorSocket.connect( saTargetSocketAddr, pTimeout ); /// connecting to server...
613cdf0e10cSrcweir
614cdf0e10cSrcweir /// get peer information
615cdf0e10cSrcweir csConnectorSocket.getPeerAddr( saPeerSocketAddr );/// connected.
616cdf0e10cSrcweir sal_Int32 peerPort = csConnectorSocket.getPeerPort( );
617cdf0e10cSrcweir ::rtl::OUString peerHost = csConnectorSocket.getPeerHost( );
618cdf0e10cSrcweir
61963d99982SDamjan Jovanovic ASSERT_TRUE(( sal_True == compareSocketAddr( saPeerSocketAddr, saLocalSocketAddr ) )&&
620cdf0e10cSrcweir ( sal_True == compareUString( peerHost, saLocalSocketAddr.getHostname( 0 ) ) ) &&
62163d99982SDamjan Jovanovic ( peerPort == saLocalSocketAddr.getPort( ) )) << "test for getPeer function: setup a connection and then get the peer address, port and host from client side.";
622cdf0e10cSrcweir }
623cdf0e10cSrcweir
624cdf0e10cSrcweir /** testing the methods:
625cdf0e10cSrcweir inline sal_Bool SAL_CALL bind(const SocketAddr& LocalInterface);
626cdf0e10cSrcweir */
627cdf0e10cSrcweir
628cdf0e10cSrcweir
62963d99982SDamjan Jovanovic class bind : public ::testing::Test
630cdf0e10cSrcweir {
631cdf0e10cSrcweir public:
632cdf0e10cSrcweir oslSocket sHandle;
633cdf0e10cSrcweir // initialization
SetUp()63463d99982SDamjan Jovanovic void SetUp( )
635cdf0e10cSrcweir {
636cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
637cdf0e10cSrcweir }
638cdf0e10cSrcweir
TearDown()63963d99982SDamjan Jovanovic void TearDown( )
640cdf0e10cSrcweir {
641cdf0e10cSrcweir sHandle = NULL;
642cdf0e10cSrcweir }
64363d99982SDamjan Jovanovic }; // class bind
644cdf0e10cSrcweir
TEST_F(bind,bind_001)64563d99982SDamjan Jovanovic TEST_F(bind, bind_001)
646cdf0e10cSrcweir {
647cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
648cdf0e10cSrcweir //bind must use local IP address ---mindyliu
649cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( getLocalIP(), IP_PORT_MYPORT5 );
650cdf0e10cSrcweir
651cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
652cdf0e10cSrcweir sal_Bool bOK1 = sSocket.bind( saBindSocketAddr );
65363d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK1) << "Socket bind fail.";
654cdf0e10cSrcweir
655cdf0e10cSrcweir sal_Bool bOK2 = compareUString( sSocket.getLocalHost( ), saBindSocketAddr.getHostname( ) ) ;
656cdf0e10cSrcweir
657cdf0e10cSrcweir sSocket.close();
65863d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK2) << "test for bind function: bind a valid address.";
659cdf0e10cSrcweir }
660cdf0e10cSrcweir
TEST_F(bind,bind_002)66163d99982SDamjan Jovanovic TEST_F(bind, bind_002)
662cdf0e10cSrcweir {
663cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
664cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( rtl::OUString::createFromAscii("123.45.67.89"), IP_PORT_NETBIOS );
665cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr;
666cdf0e10cSrcweir
667cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1); // sal_True);
668cdf0e10cSrcweir sal_Bool bOK1 = sSocket.bind( saBindSocketAddr );
669cdf0e10cSrcweir sal_Bool bOK2 = compareUString( sSocket.getLocalHost( ), getThisHostname( ) ) ;
670cdf0e10cSrcweir
67163d99982SDamjan Jovanovic ASSERT_TRUE(( sal_False == bOK1 ) && ( sal_False == bOK2 )) << "test for bind function: bind a valid address.";
672cdf0e10cSrcweir }
673cdf0e10cSrcweir
674cdf0e10cSrcweir /** testing the methods:
675cdf0e10cSrcweir inline sal_Bool SAL_CALL isRecvReady(const TimeValue *pTimeout = 0) const;
676cdf0e10cSrcweir
677cdf0e10cSrcweir */
67863d99982SDamjan Jovanovic class isRecvReady : public ::testing::Test
679cdf0e10cSrcweir {
680cdf0e10cSrcweir public:
681cdf0e10cSrcweir oslSocket sHandle;
682cdf0e10cSrcweir TimeValue *pTimeout;
683cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket;
684cdf0e10cSrcweir ::osl::ConnectorSocket csConnectorSocket;
685cdf0e10cSrcweir
686cdf0e10cSrcweir
687cdf0e10cSrcweir // initialization
SetUp()68863d99982SDamjan Jovanovic void SetUp( )
689cdf0e10cSrcweir {
690cdf0e10cSrcweir pTimeout = ( TimeValue* )malloc( sizeof( TimeValue ) );
691cdf0e10cSrcweir pTimeout->Seconds = 3;
692cdf0e10cSrcweir pTimeout->Nanosec = 0;
693cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
694cdf0e10cSrcweir }
695cdf0e10cSrcweir
TearDown()69663d99982SDamjan Jovanovic void TearDown( )
697cdf0e10cSrcweir {
698cdf0e10cSrcweir free( pTimeout );
699cdf0e10cSrcweir sHandle = NULL;
700cdf0e10cSrcweir asAcceptorSocket.close( );
701cdf0e10cSrcweir csConnectorSocket.close( );
702cdf0e10cSrcweir }
70363d99982SDamjan Jovanovic }; // class isRecvReady
704cdf0e10cSrcweir
TEST_F(isRecvReady,isRecvReady_001)70563d99982SDamjan Jovanovic TEST_F(isRecvReady, isRecvReady_001)
706cdf0e10cSrcweir {
707cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_MYPORT1 );
708cdf0e10cSrcweir ::osl::SocketAddr saTargetSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_MYPORT1 );
709cdf0e10cSrcweir ::osl::SocketAddr saPeerSocketAddr( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP );
710cdf0e10cSrcweir ::osl::StreamSocket ssConnection;
711cdf0e10cSrcweir /// launch server socket
712cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); // sal_True);
713cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
71463d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK1) << "AcceptorSocket bind address failed.";
715cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
71663d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK2) << "AcceptorSocket listen failed.";
717cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_True );
718cdf0e10cSrcweir asAcceptorSocket.acceptConnection(ssConnection); /// waiting for incoming connection...
719cdf0e10cSrcweir
720cdf0e10cSrcweir /// launch client socket
721cdf0e10cSrcweir csConnectorSocket.connect( saTargetSocketAddr, pTimeout ); /// connecting to server...
722cdf0e10cSrcweir
723cdf0e10cSrcweir /// is receive ready?
724cdf0e10cSrcweir sal_Bool bOK3 = asAcceptorSocket.isRecvReady( pTimeout );
725cdf0e10cSrcweir
72663d99982SDamjan Jovanovic ASSERT_TRUE(( sal_True == bOK3 )) << "test for isRecvReady function: setup a connection and then check if it can transmit data.";
727cdf0e10cSrcweir }
728cdf0e10cSrcweir
729cdf0e10cSrcweir /** testing the methods:
730cdf0e10cSrcweir inline sal_Bool SAL_CALL isSendReady(const TimeValue *pTimeout = 0) const;
731cdf0e10cSrcweir */
73263d99982SDamjan Jovanovic class isSendReady : public ::testing::Test
733cdf0e10cSrcweir {
734cdf0e10cSrcweir public:
735cdf0e10cSrcweir oslSocket sHandle;
736cdf0e10cSrcweir TimeValue *pTimeout;
737cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket;
738cdf0e10cSrcweir ::osl::ConnectorSocket csConnectorSocket;
739cdf0e10cSrcweir
740cdf0e10cSrcweir
741cdf0e10cSrcweir // initialization
SetUp()74263d99982SDamjan Jovanovic void SetUp( )
743cdf0e10cSrcweir {
744cdf0e10cSrcweir pTimeout = ( TimeValue* )malloc( sizeof( TimeValue ) );
745cdf0e10cSrcweir pTimeout->Seconds = 3;
746cdf0e10cSrcweir pTimeout->Nanosec = 0;
747cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
748cdf0e10cSrcweir }
749cdf0e10cSrcweir
TearDown()75063d99982SDamjan Jovanovic void TearDown( )
751cdf0e10cSrcweir {
752cdf0e10cSrcweir free( pTimeout );
753cdf0e10cSrcweir sHandle = NULL;
754cdf0e10cSrcweir asAcceptorSocket.close( );
755cdf0e10cSrcweir csConnectorSocket.close( );
756cdf0e10cSrcweir }
75763d99982SDamjan Jovanovic }; // class isSendReady
758cdf0e10cSrcweir
TEST_F(isSendReady,isSendReady_001)75963d99982SDamjan Jovanovic TEST_F(isSendReady, isSendReady_001)
760cdf0e10cSrcweir {
761cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_MYPORT );
762cdf0e10cSrcweir ::osl::SocketAddr saTargetSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_MYPORT );
763cdf0e10cSrcweir ::osl::SocketAddr saPeerSocketAddr( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP );
764cdf0e10cSrcweir ::osl::StreamSocket ssConnection;
765cdf0e10cSrcweir
766cdf0e10cSrcweir /// launch server socket
767cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
768cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
76963d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK1) << "AcceptorSocket bind address failed.";
770cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
77163d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK2) << "AcceptorSocket listen failed.";
772cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_True );
773cdf0e10cSrcweir asAcceptorSocket.acceptConnection(ssConnection); /// waiting for incoming connection...
774cdf0e10cSrcweir
775cdf0e10cSrcweir /// launch client socket
776cdf0e10cSrcweir csConnectorSocket.connect( saTargetSocketAddr, pTimeout ); /// connecting to server...
777cdf0e10cSrcweir
778cdf0e10cSrcweir /// is send ready?
779cdf0e10cSrcweir sal_Bool bOK3 = csConnectorSocket.isSendReady( pTimeout );
780cdf0e10cSrcweir
78163d99982SDamjan Jovanovic ASSERT_TRUE(( sal_True == bOK3 )) << "test for isSendReady function: setup a connection and then check if it can transmit data.";
782cdf0e10cSrcweir }
783cdf0e10cSrcweir
784cdf0e10cSrcweir /** testing the methods:
785cdf0e10cSrcweir inline oslSocketType SAL_CALL getType() const;
786cdf0e10cSrcweir
787cdf0e10cSrcweir */
788cdf0e10cSrcweir
78963d99982SDamjan Jovanovic class getType : public ::testing::Test
790cdf0e10cSrcweir {
791cdf0e10cSrcweir public:
792cdf0e10cSrcweir oslSocket sHandle;
793cdf0e10cSrcweir // initialization
SetUp()79463d99982SDamjan Jovanovic void SetUp( )
795cdf0e10cSrcweir {
796cdf0e10cSrcweir
797cdf0e10cSrcweir }
798cdf0e10cSrcweir
TearDown()79963d99982SDamjan Jovanovic void TearDown( )
800cdf0e10cSrcweir {
801cdf0e10cSrcweir sHandle = NULL;
802cdf0e10cSrcweir }
80363d99982SDamjan Jovanovic }; // class getType
804cdf0e10cSrcweir
TEST_F(getType,getType_001)80563d99982SDamjan Jovanovic TEST_F(getType, getType_001)
806cdf0e10cSrcweir {
807cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
808cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
809cdf0e10cSrcweir
81063d99982SDamjan Jovanovic ASSERT_TRUE(osl_Socket_TypeStream == sSocket.getType( )) << "test for getType function: get type of socket.";
811cdf0e10cSrcweir }
812cdf0e10cSrcweir
TEST_F(getType,getType_002)81363d99982SDamjan Jovanovic TEST_F(getType, getType_002)
814cdf0e10cSrcweir {
815cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeDgram, osl_Socket_ProtocolIp );
816cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
817cdf0e10cSrcweir
81863d99982SDamjan Jovanovic ASSERT_TRUE(osl_Socket_TypeDgram == sSocket.getType( )) << "test for getType function: get type of socket.";
819cdf0e10cSrcweir }
820cdf0e10cSrcweir
821cdf0e10cSrcweir #ifdef UNX
822cdf0e10cSrcweir // mindy: since on LINUX and SOLARIS, Raw type socket can not be created, so do not test getType() here
823cdf0e10cSrcweir // mindy: and add one test case to test creating Raw type socket--> ctors_TypeRaw()
TEST_F(getType,getType_003)82463d99982SDamjan Jovanovic TEST_F(getType, getType_003)
825cdf0e10cSrcweir {
82663d99982SDamjan Jovanovic ASSERT_TRUE(sal_True) << "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.";
827cdf0e10cSrcweir }
828cdf0e10cSrcweir #else
TEST_F(getType,getType_003)82963d99982SDamjan Jovanovic TEST_F(getType, getType_003)
830cdf0e10cSrcweir {
831cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeRaw, osl_Socket_ProtocolIp );
832cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
833cdf0e10cSrcweir
83463d99982SDamjan Jovanovic ASSERT_TRUE(osl_Socket_TypeRaw == sSocket.getType( )) << "test for getType function: get type of socket.";
835cdf0e10cSrcweir }
836cdf0e10cSrcweir #endif
837cdf0e10cSrcweir
838cdf0e10cSrcweir
839cdf0e10cSrcweir /** testing the methods:
840cdf0e10cSrcweir inline sal_Int32 SAL_CALL getOption(
841cdf0e10cSrcweir oslSocketOption Option,
842cdf0e10cSrcweir void* pBuffer,
843cdf0e10cSrcweir sal_uInt32 BufferLen,
844cdf0e10cSrcweir oslSocketOptionLevel Level= osl_Socket_LevelSocket) const;
845cdf0e10cSrcweir
846cdf0e10cSrcweir inline sal_Int32 getOption( oslSocketOption option ) const;
847cdf0e10cSrcweir
848cdf0e10cSrcweir */
849cdf0e10cSrcweir
85063d99982SDamjan Jovanovic class getOption : public ::testing::Test
851cdf0e10cSrcweir {
852cdf0e10cSrcweir public:
853cdf0e10cSrcweir oslSocket sHandle;
854cdf0e10cSrcweir // initialization
SetUp()85563d99982SDamjan Jovanovic void SetUp( )
856cdf0e10cSrcweir {
857cdf0e10cSrcweir
858cdf0e10cSrcweir }
859cdf0e10cSrcweir
TearDown()86063d99982SDamjan Jovanovic void TearDown( )
861cdf0e10cSrcweir {
862cdf0e10cSrcweir sHandle = NULL;
863cdf0e10cSrcweir }
86463d99982SDamjan Jovanovic }; // class getOption
86563d99982SDamjan Jovanovic
866cdf0e10cSrcweir
867cdf0e10cSrcweir /** test writer's comment:
868cdf0e10cSrcweir
869cdf0e10cSrcweir in oslSocketOption, the osl_Socket_OptionType denote 1 as osl_Socket_TypeStream.
870cdf0e10cSrcweir 2 as osl_Socket_TypeDgram, etc which is not mapping the oslSocketType enum. differ
871cdf0e10cSrcweir in 1.
872cdf0e10cSrcweir */
873cdf0e10cSrcweir
TEST_F(getOption,getOption_001)87463d99982SDamjan Jovanovic TEST_F(getOption, getOption_001)
875cdf0e10cSrcweir {
876cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
877cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
878cdf0e10cSrcweir sal_Int32 * pType = ( sal_Int32 * )malloc( sizeof ( sal_Int32 ) );
879cdf0e10cSrcweir *pType = 0;
880cdf0e10cSrcweir sSocket.getOption( osl_Socket_OptionType, pType, sizeof ( sal_Int32 ) );
881cdf0e10cSrcweir sal_Bool bOK = ( SOCK_STREAM == *pType );
882cdf0e10cSrcweir // there is a TypeMap(socket.c) which map osl_Socket_TypeStream to SOCK_STREAM on UNX, and SOCK_STREAM != osl_Socket_TypeStream
883cdf0e10cSrcweir //sal_Bool bOK = ( TYPE_TO_NATIVE(osl_Socket_TypeStream) == *pType );
884cdf0e10cSrcweir free( pType );
885cdf0e10cSrcweir
88663d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK) << "test for getOption function: get type option of socket.";
887cdf0e10cSrcweir }
888cdf0e10cSrcweir
889cdf0e10cSrcweir // getsockopt error
TEST_F(getOption,getOption_004)89063d99982SDamjan Jovanovic TEST_F(getOption, getOption_004)
891cdf0e10cSrcweir {
892cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeDgram, osl_Socket_ProtocolIp );
893cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
894cdf0e10cSrcweir
895cdf0e10cSrcweir sal_Bool * pbDontRoute = ( sal_Bool * )malloc( sizeof ( sal_Bool ) );
896cdf0e10cSrcweir sal_Int32 nRes = sSocket.getOption( osl_Socket_OptionInvalid, pbDontRoute, sizeof ( sal_Bool ) );
897cdf0e10cSrcweir free( pbDontRoute );
898cdf0e10cSrcweir
89963d99982SDamjan Jovanovic ASSERT_TRUE(nRes == -1) << "test for getOption function: get invalid option of socket, should return -1.";
900cdf0e10cSrcweir }
901cdf0e10cSrcweir
TEST_F(getOption,getOption_simple_001)90263d99982SDamjan Jovanovic TEST_F(getOption, getOption_simple_001)
903cdf0e10cSrcweir {
904cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeDgram, osl_Socket_ProtocolIp );
905cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
906cdf0e10cSrcweir
907cdf0e10cSrcweir sal_Bool bOK = ( sal_False == sSocket.getOption( osl_Socket_OptionDontRoute ) );
908cdf0e10cSrcweir
90963d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK) << "test for getOption function: get debug option of socket.";
910cdf0e10cSrcweir }
911cdf0e10cSrcweir
TEST_F(getOption,getOption_simple_002)91263d99982SDamjan Jovanovic TEST_F(getOption, getOption_simple_002)
913cdf0e10cSrcweir {
914cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeDgram, osl_Socket_ProtocolIp );
915cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
916cdf0e10cSrcweir
917cdf0e10cSrcweir sal_Bool bOK = ( sal_False == sSocket.getOption( osl_Socket_OptionDebug ) );
918cdf0e10cSrcweir
91963d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK) << "test for getOption function: get debug option of socket.";
920cdf0e10cSrcweir }
921cdf0e10cSrcweir
922cdf0e10cSrcweir /** testing the methods:
923cdf0e10cSrcweir inline sal_Bool SAL_CALL setOption( oslSocketOption Option,
924cdf0e10cSrcweir void* pBuffer,
925cdf0e10cSrcweir sal_uInt32 BufferLen,
926cdf0e10cSrcweir oslSocketOptionLevel Level= osl_Socket_LevelSocket ) const;
927cdf0e10cSrcweir */
928cdf0e10cSrcweir
92963d99982SDamjan Jovanovic class setOption : public ::testing::Test
930cdf0e10cSrcweir {
931cdf0e10cSrcweir public:
932cdf0e10cSrcweir TimeValue *pTimeout;
933cdf0e10cSrcweir // LLA: maybe there is an error in the source,
934cdf0e10cSrcweir // as long as I remember, if a derived class do not overload all ctors there is a problem.
935cdf0e10cSrcweir
936cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket;
937cdf0e10cSrcweir
SetUp()93863d99982SDamjan Jovanovic void SetUp( )
939cdf0e10cSrcweir {
940cdf0e10cSrcweir
941cdf0e10cSrcweir }
942cdf0e10cSrcweir
TearDown()94363d99982SDamjan Jovanovic void TearDown( )
944cdf0e10cSrcweir {
945cdf0e10cSrcweir asAcceptorSocket.close( );
946cdf0e10cSrcweir }
94763d99982SDamjan Jovanovic }; // class setOption
948cdf0e10cSrcweir
949cdf0e10cSrcweir // LLA:
950cdf0e10cSrcweir // getSocketOption returns BufferLen, or -1 if something failed
951cdf0e10cSrcweir
952cdf0e10cSrcweir // setSocketOption returns sal_True, if option could stored
953cdf0e10cSrcweir // else sal_False
954cdf0e10cSrcweir
TEST_F(setOption,setOption_001)95563d99982SDamjan Jovanovic TEST_F(setOption, setOption_001)
956cdf0e10cSrcweir {
957cdf0e10cSrcweir /// set and get option.
958cdf0e10cSrcweir int nBufferLen = sizeof ( sal_Int32);
959cdf0e10cSrcweir // LLA: SO_DONTROUTE expect an integer boolean, what ever it is, it's not sal_Bool!
960cdf0e10cSrcweir
961cdf0e10cSrcweir sal_Int32 * pbDontRouteSet = ( sal_Int32 * )malloc( sizeof ( sal_Int32 ) );
962cdf0e10cSrcweir *pbDontRouteSet = 1; // sal_True;
963cdf0e10cSrcweir
964cdf0e10cSrcweir sal_Int32 * pGetBuffer = ( sal_Int32 * )malloc( sizeof ( sal_Int32 ) );
965cdf0e10cSrcweir *pGetBuffer = 0;
966cdf0e10cSrcweir
967cdf0e10cSrcweir // maybe asAcceptorSocket is not right initialized
968cdf0e10cSrcweir sal_Bool b1 = asAcceptorSocket.setOption( osl_Socket_OptionDontRoute, pbDontRouteSet, nBufferLen );
96963d99982SDamjan Jovanovic ASSERT_TRUE(( sal_True == b1 )) << "setOption function failed.";
970cdf0e10cSrcweir sal_Int32 n2 = asAcceptorSocket.getOption( osl_Socket_OptionDontRoute, pGetBuffer, nBufferLen );
97163d99982SDamjan Jovanovic ASSERT_TRUE(( n2 == nBufferLen )) << "getOption function failed.";
972cdf0e10cSrcweir
973cdf0e10cSrcweir // on Linux, the value of option is 1, on Solaris, it's 16, but it's not important the exact value,
974cdf0e10cSrcweir // just judge it is zero or not!
975cdf0e10cSrcweir sal_Bool bOK = ( 0 != *pGetBuffer );
97663d99982SDamjan Jovanovic printf("#setOption_001: getOption is %d \n", *pGetBuffer);
977cdf0e10cSrcweir
978cdf0e10cSrcweir // toggle check, set to 0
979cdf0e10cSrcweir *pbDontRouteSet = 0;
980cdf0e10cSrcweir
981cdf0e10cSrcweir sal_Bool b3 = asAcceptorSocket.setOption( osl_Socket_OptionDontRoute, pbDontRouteSet, sizeof ( sal_Int32 ) );
98263d99982SDamjan Jovanovic ASSERT_TRUE(( sal_True == b3 )) << "setOption function failed.";
983cdf0e10cSrcweir sal_Int32 n4 = asAcceptorSocket.getOption( osl_Socket_OptionDontRoute, pGetBuffer, nBufferLen );
98463d99982SDamjan Jovanovic ASSERT_TRUE(( n4 == nBufferLen )) << "getOption (DONTROUTE) function failed.";
985cdf0e10cSrcweir
986cdf0e10cSrcweir sal_Bool bOK2 = ( 0 == *pGetBuffer );
987cdf0e10cSrcweir
98863d99982SDamjan Jovanovic printf("#setOption_001: getOption is %d \n", *pGetBuffer);
989cdf0e10cSrcweir
990cdf0e10cSrcweir // LLA: sal_Bool * pbDontTouteSet = ( sal_Bool * )malloc( sizeof ( sal_Bool ) );
991cdf0e10cSrcweir // LLA: *pbDontTouteSet = sal_True;
992cdf0e10cSrcweir // LLA: sal_Bool * pbDontTouteGet = ( sal_Bool * )malloc( sizeof ( sal_Bool ) );
993cdf0e10cSrcweir // LLA: *pbDontTouteGet = sal_False;
994cdf0e10cSrcweir // LLA: asAcceptorSocket.setOption( osl_Socket_OptionDontRoute, pbDontTouteSet, sizeof ( sal_Bool ) );
995cdf0e10cSrcweir // LLA: asAcceptorSocket.getOption( osl_Socket_OptionDontRoute, pbDontTouteGet, sizeof ( sal_Bool ) );
996cdf0e10cSrcweir // LLA: ::rtl::OUString suError = outputError(::rtl::OUString::valueOf((sal_Int32)*pbDontTouteGet),
997cdf0e10cSrcweir // LLA: ::rtl::OUString::valueOf((sal_Int32)*pbDontTouteSet),
998cdf0e10cSrcweir // LLA: "test for setOption function: set osl_Socket_OptionDontRoute and then check");
999cdf0e10cSrcweir // LLA:
1000cdf0e10cSrcweir // LLA: sal_Bool bOK = ( sal_True == *pbDontTouteGet );
1001cdf0e10cSrcweir // LLA: free( pbDontTouteSet );
1002cdf0e10cSrcweir // LLA: free( pbDontTouteGet );
1003cdf0e10cSrcweir
100463d99982SDamjan Jovanovic ASSERT_TRUE(( sal_True == bOK ) && (sal_True == bOK2)) << "test for setOption function: set option of a socket and then check.";
1005cdf0e10cSrcweir
1006cdf0e10cSrcweir free( pbDontRouteSet );
1007cdf0e10cSrcweir free( pGetBuffer );
100863d99982SDamjan Jovanovic // LLA: ASSERT_TRUE(sal_True == bOK) << suError;
1009cdf0e10cSrcweir }
1010cdf0e10cSrcweir
TEST_F(setOption,setOption_002)101163d99982SDamjan Jovanovic TEST_F(setOption, setOption_002)
1012cdf0e10cSrcweir {
1013cdf0e10cSrcweir /// set and get option.
1014cdf0e10cSrcweir
1015cdf0e10cSrcweir // sal_Int32 * pbLingerSet = ( sal_Int32 * )malloc( nBufferLen );
1016cdf0e10cSrcweir // *pbLingerSet = 7;
1017cdf0e10cSrcweir // sal_Int32 * pbLingerGet = ( sal_Int32 * )malloc( nBufferLen );
1018cdf0e10cSrcweir /* struct */linger aLingerSet;
1019cdf0e10cSrcweir sal_Int32 nBufferLen = sizeof( struct linger );
1020cdf0e10cSrcweir aLingerSet.l_onoff = 1;
1021cdf0e10cSrcweir aLingerSet.l_linger = 7;
1022cdf0e10cSrcweir
1023cdf0e10cSrcweir linger aLingerGet;
1024cdf0e10cSrcweir
1025cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionLinger, &aLingerSet, nBufferLen );
1026cdf0e10cSrcweir
1027cdf0e10cSrcweir sal_Int32 n1 = asAcceptorSocket.getOption( osl_Socket_OptionLinger, &aLingerGet, nBufferLen );
102863d99982SDamjan Jovanovic ASSERT_TRUE(( n1 == nBufferLen )) << "getOption (SO_LINGER) function failed.";
1029cdf0e10cSrcweir
103063d99982SDamjan Jovanovic //printf("#setOption_002: getOption is %d \n", aLingerGet.l_linger);
1031cdf0e10cSrcweir sal_Bool bOK = ( 7 == aLingerGet.l_linger );
103263d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK) << "test for setOption function: set option of a socket and then check. ";
1033cdf0e10cSrcweir
1034cdf0e10cSrcweir }
1035cdf0e10cSrcweir
TEST_F(setOption,setOption_003)103663d99982SDamjan Jovanovic TEST_F(setOption, setOption_003)
1037cdf0e10cSrcweir {
1038cdf0e10cSrcweir linger aLingerSet;
1039cdf0e10cSrcweir aLingerSet.l_onoff = 1;
1040cdf0e10cSrcweir aLingerSet.l_linger = 7;
1041cdf0e10cSrcweir
1042cdf0e10cSrcweir sal_Bool b1 = asAcceptorSocket.setOption( osl_Socket_OptionLinger, &aLingerSet, 0 );
1043cdf0e10cSrcweir printUString( asAcceptorSocket.getErrorAsString( ) );
104463d99982SDamjan Jovanovic ASSERT_TRUE(( b1 == sal_False )) << "setOption (SO_LINGER) function failed for optlen is 0.";
1045cdf0e10cSrcweir }
1046cdf0e10cSrcweir
TEST_F(setOption,setOption_simple_001)104763d99982SDamjan Jovanovic TEST_F(setOption, setOption_simple_001)
1048cdf0e10cSrcweir {
1049cdf0e10cSrcweir /// set and get option.
1050cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionDontRoute, 1 ); //sal_True );
1051cdf0e10cSrcweir sal_Bool bOK = ( 0 != asAcceptorSocket.getOption( osl_Socket_OptionDontRoute ) );
1052cdf0e10cSrcweir
105363d99982SDamjan Jovanovic printf("setOption_simple_001(): getoption is %d \n", asAcceptorSocket.getOption( osl_Socket_OptionDontRoute ) );
105463d99982SDamjan Jovanovic ASSERT_TRUE(( sal_True == bOK )) << "test for setOption function: set option of a socket and then check.";
1055cdf0e10cSrcweir }
1056cdf0e10cSrcweir
TEST_F(setOption,setOption_simple_002)105763d99982SDamjan Jovanovic TEST_F(setOption, setOption_simple_002)
1058cdf0e10cSrcweir {
1059cdf0e10cSrcweir /// set and get option.
1060cdf0e10cSrcweir // LLA: this does not work, due to the fact that SO_LINGER is a structure
1061cdf0e10cSrcweir // LLA: asAcceptorSocket.setOption( osl_Socket_OptionLinger, 7 );
1062cdf0e10cSrcweir // LLA: sal_Bool bOK = ( 7 == asAcceptorSocket.getOption( osl_Socket_OptionLinger ) );
1063cdf0e10cSrcweir
106463d99982SDamjan Jovanovic // LLA: ASSERT_TRUE(// LLA: ( sal_True == bOK )) << "test for setOption function: set option of a socket and then check.";
1065cdf0e10cSrcweir }
1066cdf0e10cSrcweir
1067cdf0e10cSrcweir
1068cdf0e10cSrcweir /** testing the method:
1069cdf0e10cSrcweir inline sal_Bool SAL_CALL enableNonBlockingMode( sal_Bool bNonBlockingMode);
1070cdf0e10cSrcweir */
107163d99982SDamjan Jovanovic class enableNonBlockingMode : public ::testing::Test
1072cdf0e10cSrcweir {
1073cdf0e10cSrcweir public:
1074cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket;
107563d99982SDamjan Jovanovic }; // class enableNonBlockingMode
1076cdf0e10cSrcweir
TEST_F(enableNonBlockingMode,enableNonBlockingMode_001)107763d99982SDamjan Jovanovic TEST_F(enableNonBlockingMode, enableNonBlockingMode_001)
1078cdf0e10cSrcweir {
1079cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_MYPORT );
1080cdf0e10cSrcweir ::osl::StreamSocket ssConnection;
1081cdf0e10cSrcweir
1082cdf0e10cSrcweir /// launch server socket
1083cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
1084cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
108563d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK1) << "AcceptorSocket bind address failed.";
1086cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
108763d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK2) << "AcceptorSocket listen failed.";
1088cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_True );
1089cdf0e10cSrcweir asAcceptorSocket.acceptConnection(ssConnection); /// waiting for incoming connection...
1090cdf0e10cSrcweir
1091cdf0e10cSrcweir /// if reach this statement, it is non-blocking mode, since acceptConnection will blocked by default.
1092cdf0e10cSrcweir sal_Bool bOK = sal_True;
1093cdf0e10cSrcweir asAcceptorSocket.close( );
1094cdf0e10cSrcweir
109563d99982SDamjan Jovanovic ASSERT_TRUE(( sal_True == bOK )) << "test for enableNonBlockingMode function: launch a server socket and make it non blocking. if it can pass the acceptConnection statement, it is non-blocking";
1096cdf0e10cSrcweir }
1097cdf0e10cSrcweir
1098cdf0e10cSrcweir
1099cdf0e10cSrcweir /** testing the method:
1100cdf0e10cSrcweir inline sal_Bool SAL_CALL isNonBlockingMode() const;
1101cdf0e10cSrcweir */
110263d99982SDamjan Jovanovic class isNonBlockingMode : public ::testing::Test
1103cdf0e10cSrcweir {
1104cdf0e10cSrcweir public:
1105cdf0e10cSrcweir ::osl::AcceptorSocket asAcceptorSocket;
110663d99982SDamjan Jovanovic }; // class isNonBlockingMode
1107cdf0e10cSrcweir
TEST_F(isNonBlockingMode,isNonBlockingMode_001)110863d99982SDamjan Jovanovic TEST_F(isNonBlockingMode, isNonBlockingMode_001)
1109cdf0e10cSrcweir {
1110cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_MYPORT );
1111cdf0e10cSrcweir ::osl::StreamSocket ssConnection;
1112cdf0e10cSrcweir
1113cdf0e10cSrcweir /// launch server socket
1114cdf0e10cSrcweir asAcceptorSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); // sal_True);
1115cdf0e10cSrcweir sal_Bool bOK1 = asAcceptorSocket.bind( saLocalSocketAddr );
111663d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK1) << "AcceptorSocket bind address failed.";
1117cdf0e10cSrcweir sal_Bool bOK2 = asAcceptorSocket.listen( 1 );
111863d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK2) << "AcceptorSocket listen failed.";
1119cdf0e10cSrcweir
1120cdf0e10cSrcweir sal_Bool bOK3 = asAcceptorSocket.isNonBlockingMode( );
1121cdf0e10cSrcweir asAcceptorSocket.enableNonBlockingMode( sal_True );
1122cdf0e10cSrcweir asAcceptorSocket.acceptConnection(ssConnection); /// waiting for incoming connection...
1123cdf0e10cSrcweir
1124cdf0e10cSrcweir /// if reach this statement, it is non-blocking mode, since acceptConnection will blocked by default.
1125cdf0e10cSrcweir sal_Bool bOK4 = asAcceptorSocket.isNonBlockingMode( );
1126cdf0e10cSrcweir asAcceptorSocket.close( );
1127cdf0e10cSrcweir
112863d99982SDamjan Jovanovic ASSERT_TRUE(( sal_False == bOK3 ) && ( sal_True == bOK4 )) << "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.";
1129cdf0e10cSrcweir }
1130cdf0e10cSrcweir
1131cdf0e10cSrcweir /** testing the method:
1132cdf0e10cSrcweir inline void SAL_CALL clearError() const;
1133cdf0e10cSrcweir */
113463d99982SDamjan Jovanovic class clearError : public ::testing::Test
1135cdf0e10cSrcweir {
1136cdf0e10cSrcweir public:
1137cdf0e10cSrcweir oslSocket sHandle;
1138cdf0e10cSrcweir // initialization
SetUp()113963d99982SDamjan Jovanovic void SetUp( )
1140cdf0e10cSrcweir {
1141cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
1142cdf0e10cSrcweir }
1143cdf0e10cSrcweir
TearDown()114463d99982SDamjan Jovanovic void TearDown( )
1145cdf0e10cSrcweir {
1146cdf0e10cSrcweir sHandle = NULL;
1147cdf0e10cSrcweir }
114863d99982SDamjan Jovanovic }; // class clearError
1149cdf0e10cSrcweir
TEST_F(clearError,clearError_001)115063d99982SDamjan Jovanovic TEST_F(clearError, clearError_001)
1151cdf0e10cSrcweir {
1152cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
1153cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( rtl::OUString::createFromAscii("123.45.67.89"), IP_PORT_HTTP2 );
1154cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr;
1155cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
1156cdf0e10cSrcweir sSocket.bind( saBindSocketAddr );//build an error "osl_Socket_E_AddrNotAvail"
1157cdf0e10cSrcweir oslSocketError seBind = sSocket.getError( );
1158cdf0e10cSrcweir sSocket.clearError( );
1159cdf0e10cSrcweir
116063d99982SDamjan Jovanovic ASSERT_TRUE(osl_Socket_E_None == sSocket.getError( ) && seBind != osl_Socket_E_None) << "test for clearError function: trick an error called sSocket.getError( ), and then clear the error states, check the result.";
1161cdf0e10cSrcweir }
1162cdf0e10cSrcweir
1163cdf0e10cSrcweir /** testing the methods:
1164cdf0e10cSrcweir inline oslSocketError getError() const;
1165cdf0e10cSrcweir inline ::rtl::OUString getErrorAsString( ) const;
1166cdf0e10cSrcweir */
116763d99982SDamjan Jovanovic class getError : public ::testing::Test
1168cdf0e10cSrcweir {
1169cdf0e10cSrcweir public:
1170cdf0e10cSrcweir oslSocket sHandle;
1171cdf0e10cSrcweir // initialization
SetUp()117263d99982SDamjan Jovanovic void SetUp( )
1173cdf0e10cSrcweir {
1174cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
1175cdf0e10cSrcweir }
1176cdf0e10cSrcweir
TearDown()117763d99982SDamjan Jovanovic void TearDown( )
1178cdf0e10cSrcweir {
1179cdf0e10cSrcweir sHandle = NULL;
1180cdf0e10cSrcweir }
118163d99982SDamjan Jovanovic }; // class getError
1182cdf0e10cSrcweir
TEST_F(getError,getError_001)118363d99982SDamjan Jovanovic TEST_F(getError, getError_001)
1184cdf0e10cSrcweir {
1185cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
1186cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP );
1187cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr;
1188cdf0e10cSrcweir
118963d99982SDamjan Jovanovic ASSERT_TRUE(osl_Socket_E_None == sSocket.getError( )) << "test for getError function: should get no error.";
1190cdf0e10cSrcweir }
1191cdf0e10cSrcweir
TEST_F(getError,getError_002)119263d99982SDamjan Jovanovic TEST_F(getError, getError_002)
1193cdf0e10cSrcweir {
1194cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
1195cdf0e10cSrcweir ::osl::SocketAddr saBindSocketAddr( rtl::OUString::createFromAscii("123.45.67.89"), IP_PORT_FTP );
1196cdf0e10cSrcweir ::osl::SocketAddr saLocalSocketAddr;
1197cdf0e10cSrcweir sSocket.setOption( osl_Socket_OptionReuseAddr, 1 ); //sal_True);
1198cdf0e10cSrcweir sSocket.bind( saBindSocketAddr );//build an error "osl_Socket_E_AddrNotAvail"
1199cdf0e10cSrcweir //on Solaris, the error no is EACCES, but it has no mapped value, so getError() returned osl_Socket_E_InvalidError.
1200cdf0e10cSrcweir #if defined(SOLARIS)
120163d99982SDamjan Jovanovic ASSERT_TRUE(osl_Socket_E_InvalidError == sSocket.getError( )) << "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. ";
1202cdf0e10cSrcweir #else
1203cdf0e10cSrcweir //while on Linux & Win32, the errno is EADDRNOTAVAIL, getError returned osl_Socket_E_AddrNotAvail.
1204cdf0e10cSrcweir
120563d99982SDamjan Jovanovic ASSERT_TRUE(osl_Socket_E_AddrNotAvail == sSocket.getError( )) << "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";
1206cdf0e10cSrcweir #endif
1207cdf0e10cSrcweir }
1208cdf0e10cSrcweir
1209cdf0e10cSrcweir
1210cdf0e10cSrcweir /** testing the methods:
1211cdf0e10cSrcweir inline oslSocket getHandle() const;
1212cdf0e10cSrcweir */
1213cdf0e10cSrcweir
121463d99982SDamjan Jovanovic class getHandle : public ::testing::Test
1215cdf0e10cSrcweir {
1216cdf0e10cSrcweir public:
1217cdf0e10cSrcweir oslSocket sHandle;
1218cdf0e10cSrcweir // initialization
SetUp()121963d99982SDamjan Jovanovic void SetUp( )
1220cdf0e10cSrcweir {
1221cdf0e10cSrcweir sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
1222cdf0e10cSrcweir }
1223cdf0e10cSrcweir
TearDown()122463d99982SDamjan Jovanovic void TearDown( )
1225cdf0e10cSrcweir {
1226cdf0e10cSrcweir sHandle = NULL;
1227cdf0e10cSrcweir }
122863d99982SDamjan Jovanovic }; // class getHandle
1229cdf0e10cSrcweir
TEST_F(getHandle,getHandle_001)123063d99982SDamjan Jovanovic TEST_F(getHandle, getHandle_001)
1231cdf0e10cSrcweir {
1232cdf0e10cSrcweir ::osl::Socket sSocket(sHandle);
1233cdf0e10cSrcweir ::osl::Socket assignSocket = sSocket.getHandle();
1234cdf0e10cSrcweir
123563d99982SDamjan Jovanovic ASSERT_TRUE(osl_Socket_TypeStream == assignSocket.getType( )) << "test for operators_assignment_handle function: test the assignment operator.";
1236cdf0e10cSrcweir }
1237cdf0e10cSrcweir
TEST_F(getHandle,getHandle_002)123863d99982SDamjan Jovanovic TEST_F(getHandle, getHandle_002)
1239cdf0e10cSrcweir {
1240cdf0e10cSrcweir ::osl::Socket sSocket( sHandle );
1241cdf0e10cSrcweir ::osl::Socket assignSocket ( sSocket.getHandle( ) );
1242cdf0e10cSrcweir
124363d99982SDamjan Jovanovic ASSERT_TRUE(osl_Socket_TypeStream == assignSocket.getType( )) << "test for operators_assignment function: assignment operator";
1244cdf0e10cSrcweir }
1245cdf0e10cSrcweir
1246cdf0e10cSrcweir
1247cdf0e10cSrcweir } // namespace osl_Socket
1248cdf0e10cSrcweir
main(int argc,char ** argv)124963d99982SDamjan Jovanovic int main(int argc, char **argv)
125063d99982SDamjan Jovanovic {
125163d99982SDamjan Jovanovic ::testing::InitGoogleTest(&argc, argv);
125263d99982SDamjan Jovanovic return RUN_ALL_TESTS();
125363d99982SDamjan Jovanovic }
1254