xref: /trunk/main/sal/qa/osl/socket/osl_SocketAddr.cxx (revision 63d999828c0b5f128cf4e3a59997fb3fa930c07b)
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 
57*63d99982SDamjan 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_ZERO   0
66cdf0e10cSrcweir #define IP_PORT_FTP    21
67cdf0e10cSrcweir #define IP_PORT_TELNET 23
68cdf0e10cSrcweir #define IP_PORT_HTTP1  80
69cdf0e10cSrcweir #define IP_PORT_HTTP2  8080
70cdf0e10cSrcweir 
71cdf0e10cSrcweir #define IP_PORT_MYPORT  8881    //8888
72cdf0e10cSrcweir #define IP_PORT_MYPORT2  8883   //8890
73cdf0e10cSrcweir #define IP_PORT_MYPORT3  8884   //8891
74cdf0e10cSrcweir #define IP_PORT_INVAL  99999
75cdf0e10cSrcweir #define IP_PORT_MYPORT4  8885   //8892
76cdf0e10cSrcweir #define IP_PORT_NETBIOS_DGM  138
77cdf0e10cSrcweir 
78cdf0e10cSrcweir 
79cdf0e10cSrcweir namespace osl_SocketAddr
80cdf0e10cSrcweir {
81cdf0e10cSrcweir 
82cdf0e10cSrcweir     /** testing the methods:
83cdf0e10cSrcweir         inline SocketAddr();
84cdf0e10cSrcweir         inline SocketAddr(const SocketAddr& Addr);
85cdf0e10cSrcweir         inline SocketAddr(const oslSocketAddr , __osl_socket_NoCopy nocopy );
86cdf0e10cSrcweir         inline SocketAddr(oslSocketAddr Addr);
87cdf0e10cSrcweir         inline SocketAddr( const ::rtl::OUString& strAddrOrHostName, sal_Int32 nPort );
88cdf0e10cSrcweir     */
89cdf0e10cSrcweir 
90*63d99982SDamjan Jovanovic     class ctors : public ::testing::Test
91cdf0e10cSrcweir     {
92cdf0e10cSrcweir     public:
93*63d99982SDamjan Jovanovic     }; // class ctors
94cdf0e10cSrcweir 
95*63d99982SDamjan Jovanovic     TEST_F(ctors, ctors_none)
96cdf0e10cSrcweir     {
97cdf0e10cSrcweir         /// SocketAddr constructor.
98cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr;
99cdf0e10cSrcweir 
100cdf0e10cSrcweir         // oslSocketResult aResult;
101cdf0e10cSrcweir         // rtl::OUString suHost = saSocketAddr.getLocalHostname( &aResult);
102cdf0e10cSrcweir 
103cdf0e10cSrcweir         // rtl::OUString suHost2 = getThisHostname();
104cdf0e10cSrcweir 
105*63d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == saSocketAddr.is( )) << "test for none parameter constructor function: check if the socket address was created successfully";
106cdf0e10cSrcweir     }
107cdf0e10cSrcweir 
108*63d99982SDamjan Jovanovic     TEST_F(ctors, ctors_none_000)
109cdf0e10cSrcweir     {
110cdf0e10cSrcweir         /// SocketAddr constructor.
111cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr;
112cdf0e10cSrcweir 
113cdf0e10cSrcweir         oslSocketResult aResult;
114cdf0e10cSrcweir         rtl::OUString suHost = saSocketAddr.getLocalHostname( &aResult);
115cdf0e10cSrcweir         rtl::OUString suHost2 = getThisHostname();
116cdf0e10cSrcweir 
117cdf0e10cSrcweir         sal_Bool bOk = compareUString(suHost, suHost2);
118cdf0e10cSrcweir 
119cdf0e10cSrcweir         rtl::OUString suError = rtl::OUString::createFromAscii("Host names should be the same. From SocketAddr.getLocalHostname() it is'");
120cdf0e10cSrcweir         suError += suHost;
121cdf0e10cSrcweir         suError += rtl::OUString::createFromAscii("', from getThisHostname() it is '");
122cdf0e10cSrcweir         suError += suHost2;
123cdf0e10cSrcweir         suError += rtl::OUString::createFromAscii("'.");
124cdf0e10cSrcweir 
125*63d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == bOk) << suError.pData;
126cdf0e10cSrcweir     }
127cdf0e10cSrcweir 
128*63d99982SDamjan Jovanovic     TEST_F(ctors, ctors_copy)
129cdf0e10cSrcweir     {
130cdf0e10cSrcweir         /// SocketAddr copy constructor.
131cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 );
132cdf0e10cSrcweir         ::osl::SocketAddr saCopySocketAddr( saSocketAddr );
133cdf0e10cSrcweir 
134cdf0e10cSrcweir         sal_Int32 nPort = saCopySocketAddr.getPort( );
135cdf0e10cSrcweir 
136*63d99982SDamjan Jovanovic         ASSERT_TRUE(( sal_True == saCopySocketAddr.is( ) ) && ( nPort == IP_PORT_HTTP1 )) << "test for SocketAddr copy constructor function: copy constructor, do an action of copy construction then check the port with original set.";
137cdf0e10cSrcweir     }
138cdf0e10cSrcweir 
139*63d99982SDamjan Jovanovic     TEST_F(ctors, ctors_copy_no_001)
140cdf0e10cSrcweir     {
141cdf0e10cSrcweir #if 0
142cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 );
143cdf0e10cSrcweir         oslSocketAddr psaOSLSocketAddr = saSocketAddr.getHandle( );
144cdf0e10cSrcweir 
145cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddrCopy( psaOSLSocketAddr, SAL_NO_COPY );
146cdf0e10cSrcweir         saSocketAddrCopy.setPort( IP_PORT_HTTP2 );
147cdf0e10cSrcweir 
148*63d99982SDamjan Jovanovic         ASSERT_TRUE(saSocketAddr.getPort( ) == IP_PORT_HTTP2) << "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.";
149cdf0e10cSrcweir #endif
150cdf0e10cSrcweir         ::osl::SocketAddr* pSocketAddr = new ::osl::SocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 );
151*63d99982SDamjan Jovanovic         ASSERT_TRUE(pSocketAddr != NULL) << "check for new SocketAddr";
152cdf0e10cSrcweir 
153cdf0e10cSrcweir         oslSocketAddr psaOSLSocketAddr = pSocketAddr->getHandle( );
154cdf0e10cSrcweir 
155cdf0e10cSrcweir         ::osl::SocketAddr* pSocketAddrCopy = new ::osl::SocketAddr( psaOSLSocketAddr, SAL_NO_COPY );
156cdf0e10cSrcweir 
157cdf0e10cSrcweir         pSocketAddrCopy->setPort( IP_PORT_HTTP2 );
158*63d99982SDamjan Jovanovic         ASSERT_TRUE(pSocketAddr->getPort( ) == IP_PORT_HTTP2) << "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.";
159cdf0e10cSrcweir 
160cdf0e10cSrcweir         delete pSocketAddrCopy;
161cdf0e10cSrcweir         // LLA: don't do this also:           delete pSocketAddr;
162cdf0e10cSrcweir     }
163cdf0e10cSrcweir 
164*63d99982SDamjan Jovanovic     TEST_F(ctors, ctors_copy_no_002)
165cdf0e10cSrcweir     {
166cdf0e10cSrcweir         ::osl::SocketAddr* pSocketAddr = new ::osl::SocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 );
167*63d99982SDamjan Jovanovic             ASSERT_TRUE(pSocketAddr != NULL) << "check for new SocketAddr";
168cdf0e10cSrcweir             oslSocketAddr psaOSLSocketAddr = pSocketAddr->getHandle( );
169cdf0e10cSrcweir             ::osl::SocketAddr* pSocketAddrCopy = new ::osl::SocketAddr( psaOSLSocketAddr, SAL_NO_COPY );
170cdf0e10cSrcweir 
171*63d99982SDamjan Jovanovic             ASSERT_TRUE(pSocketAddr->getHandle( ) ==  pSocketAddrCopy->getHandle( )) << "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.";
172cdf0e10cSrcweir 
173cdf0e10cSrcweir             delete pSocketAddrCopy;
174cdf0e10cSrcweir     }
175cdf0e10cSrcweir 
176*63d99982SDamjan Jovanovic     TEST_F(ctors, ctors_copy_handle_001)
177cdf0e10cSrcweir     {
178cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 );
179cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddrCopy( saSocketAddr.getHandle( ) );
180cdf0e10cSrcweir 
181*63d99982SDamjan Jovanovic         ASSERT_TRUE(saSocketAddrCopy.getPort( ) == IP_PORT_HTTP1) << "test for SocketAddr copy handle constructor function: copy another Socket's handle, get its port to check copy effect.";
182cdf0e10cSrcweir     }
183cdf0e10cSrcweir 
184*63d99982SDamjan Jovanovic     TEST_F(ctors, ctors_copy_handle_002)
185cdf0e10cSrcweir     {
186cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 );
187cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddrCopy( saSocketAddr.getHandle( ) );
188cdf0e10cSrcweir         saSocketAddrCopy.setPort( IP_PORT_HTTP2 );
189cdf0e10cSrcweir 
190*63d99982SDamjan Jovanovic         ASSERT_TRUE(saSocketAddr.getPort( ) != IP_PORT_HTTP2) << "test for SocketAddr copy handle constructor function: copy another Socket's handle, the original one should not be changed.";
191cdf0e10cSrcweir     }
192cdf0e10cSrcweir 
193*63d99982SDamjan Jovanovic     TEST_F(ctors, ctors_hostname_port_001)
194cdf0e10cSrcweir     {
195cdf0e10cSrcweir         /// tcpip-specif constructor.
196cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP );
197cdf0e10cSrcweir         printUString( saSocketAddr.getHostname( ), "ctors_hostname_port_001:getHostname");
198cdf0e10cSrcweir 
199*63d99982SDamjan Jovanovic         ASSERT_TRUE(saSocketAddr.is( ) == sal_True &&
200cdf0e10cSrcweir                                 ( saSocketAddr.getPort( ) == IP_PORT_FTP )/*&&
201*63d99982SDamjan Jovanovic                                 ( sal_True == compareUString( saSocketAddr.getHostname( ), aHostName1 ) ) */) << "test for SocketAddr tcpip specif constructor function: do a constructor using tcpip spec, check the result.";
202cdf0e10cSrcweir     }
203cdf0e10cSrcweir 
204cdf0e10cSrcweir     //same as is_002
205*63d99982SDamjan Jovanovic     TEST_F(ctors, ctors_hostname_port_002)
206cdf0e10cSrcweir     {
207cdf0e10cSrcweir         /// tcpip-specif constructor.
208cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("123.345.67.89"), IP_PORT_MYPORT2 );
209cdf0e10cSrcweir 
210*63d99982SDamjan Jovanovic         ASSERT_TRUE(sal_False == saSocketAddr.is( )) << "test for SocketAddr tcpip specif constructor function: using an invalid IP address, the socketaddr ctors should fail";
211cdf0e10cSrcweir     }
212cdf0e10cSrcweir 
213cdf0e10cSrcweir 
214cdf0e10cSrcweir     /** testing the method:
215cdf0e10cSrcweir         inline sal_Bool is() const;
216cdf0e10cSrcweir     */
217cdf0e10cSrcweir 
218*63d99982SDamjan Jovanovic     class is : public ::testing::Test
219cdf0e10cSrcweir     {
220cdf0e10cSrcweir     public:
221*63d99982SDamjan Jovanovic     }; // class is
222*63d99982SDamjan Jovanovic 
223*63d99982SDamjan Jovanovic     TEST_F(is, is_001)
224cdf0e10cSrcweir     {
225cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr;
226cdf0e10cSrcweir 
227*63d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == saSocketAddr.is( )) << "test for is() function: create an unknown type socket, it should be True when call is.";
228cdf0e10cSrcweir     }
229cdf0e10cSrcweir     // refer to setPort_003()
230*63d99982SDamjan Jovanovic     TEST_F(is, is_002)
231cdf0e10cSrcweir     {
232cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_INVAL );
233cdf0e10cSrcweir 
234*63d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == saSocketAddr.is( )) << "test for is() function: create a tcp-ip socket using invalid port number";
235cdf0e10cSrcweir     }
236cdf0e10cSrcweir 
237*63d99982SDamjan Jovanovic     TEST_F(is, is_003)
238cdf0e10cSrcweir     {
239cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("123.345.67.89"), IP_PORT_MYPORT );
240cdf0e10cSrcweir 
241*63d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True != saSocketAddr.is( )) << "test for is() function: create a tcp-ip socket using invalid Ip number";
242cdf0e10cSrcweir     }
243cdf0e10cSrcweir 
244cdf0e10cSrcweir     /** testing the method:
245cdf0e10cSrcweir         inline ::rtl::OUString SAL_CALL getHostname( oslSocketResult *pResult = 0 ) const;
246cdf0e10cSrcweir     */
247cdf0e10cSrcweir 
248*63d99982SDamjan Jovanovic     class getHostname : public ::testing::Test
249cdf0e10cSrcweir     {
250cdf0e10cSrcweir     public:
251*63d99982SDamjan Jovanovic         void SetUp()
252cdf0e10cSrcweir         {
253cdf0e10cSrcweir         }
254cdf0e10cSrcweir 
255*63d99982SDamjan Jovanovic         void TearDown()
256cdf0e10cSrcweir         {
257cdf0e10cSrcweir         }
258*63d99982SDamjan Jovanovic     }; // class getHostname
259cdf0e10cSrcweir 
260*63d99982SDamjan Jovanovic     TEST_F(getHostname, getHostname_000)
261cdf0e10cSrcweir         {
262cdf0e10cSrcweir             ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.107"), IP_PORT_FTP );
263cdf0e10cSrcweir             rtl::OUString suResult = saSocketAddr.getHostname( 0 );
264cdf0e10cSrcweir 
265cdf0e10cSrcweir         }
266cdf0e10cSrcweir 
267cdf0e10cSrcweir     /** it will search the Ip in current machine's /etc/hosts at first, if find, then return the
268cdf0e10cSrcweir         mapped hostname, otherwise, it will search via DNS server, and often return hostname+ Domain name
269cdf0e10cSrcweir         like "sceri.PRC.Sun.COM"
270cdf0e10cSrcweir         The process is same as Socket::getLocalHost(), but getLocalHost can only return hostname of the current machine.
271cdf0e10cSrcweir     */
272*63d99982SDamjan Jovanovic     TEST_F(getHostname, getHostname_001)
273cdf0e10cSrcweir     {
274cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.107"), IP_PORT_FTP );
275cdf0e10cSrcweir         rtl::OUString suResult = saSocketAddr.getHostname( 0 );
276cdf0e10cSrcweir         rtl::OUString suError = outputError(suResult, rtl::OUString::createFromAscii("sceri.PRC.Sun.COM"), "test for getHostname(0)");
277cdf0e10cSrcweir         sal_Bool bOK = compareUString( suResult, rtl::OUString::createFromAscii("sceri.PRC.Sun.COM") );
278cdf0e10cSrcweir         // search the returned hostname in /etc/hosts, if find, and the IP in the row is same as IP
279cdf0e10cSrcweir         // in the Addr, it's right also.
280cdf0e10cSrcweir         if ( bOK == sal_False)
281cdf0e10cSrcweir         {
282cdf0e10cSrcweir             rtl::OString aString = ::rtl::OUStringToOString( suResult, RTL_TEXTENCODING_ASCII_US );
283cdf0e10cSrcweir             if ( compareUString( getIPbyName( aString ), rtl::OUString::createFromAscii("129.158.217.107") ) == sal_True )
284cdf0e10cSrcweir                 bOK = sal_True;
285cdf0e10cSrcweir         }
286*63d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == bOK) << suError.pData;
287cdf0e10cSrcweir     }
288cdf0e10cSrcweir 
289cdf0e10cSrcweir // LLA: now we have to control, if this behaviour is right.
290cdf0e10cSrcweir // LLA: this function does not work in company (Linux, Windows) but at home
291*63d99982SDamjan Jovanovic     TEST_F(getHostname, getHostname_002)
292cdf0e10cSrcweir     {
293cdf0e10cSrcweir         rtl::OUString suHostname = rtl::OUString::createFromAscii("cn-1.germany.sun.com");
294cdf0e10cSrcweir         rtl::OString aString = ::rtl::OUStringToOString( suHostname, RTL_TEXTENCODING_ASCII_US );
295cdf0e10cSrcweir         rtl::OUString aHostIP    = getIPbyName( aString );
296cdf0e10cSrcweir 
297cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_FTP );
298cdf0e10cSrcweir         sal_Bool bOK = saSocketAddr.setHostname( suHostname );
299*63d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == bOK) << "#SocketAddr.setHostname failed";
300cdf0e10cSrcweir         oslSocketResult aResult;
301cdf0e10cSrcweir         rtl::OUString suResult = saSocketAddr.getHostname( &aResult );
302*63d99982SDamjan Jovanovic         ASSERT_TRUE(aResult == osl_Socket_Ok) << "SocketAddr.getHostname failed.";
303cdf0e10cSrcweir 
304cdf0e10cSrcweir         rtl::OUString suError = outputError(suResult, suHostname, "test for getHostname(0)");
305cdf0e10cSrcweir         bOK = compareUString( suResult, suHostname );
306cdf0e10cSrcweir         if ( bOK == sal_False)
307cdf0e10cSrcweir         {
308cdf0e10cSrcweir             rtl::OString aStringResult = ::rtl::OUStringToOString( suResult, RTL_TEXTENCODING_ASCII_US );
309cdf0e10cSrcweir             rtl::OString aStringHostname = ::rtl::OUStringToOString( suHostname, RTL_TEXTENCODING_ASCII_US );
310cdf0e10cSrcweir             if ( compareUString( getIPbyName( aStringResult ) ,  getIPbyName( aStringHostname ) ) == sal_True )
311cdf0e10cSrcweir             {
312cdf0e10cSrcweir                 bOK = sal_True;
313cdf0e10cSrcweir             }
314cdf0e10cSrcweir         }
315cdf0e10cSrcweir 
316*63d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == bOK) << suError.pData;
317cdf0e10cSrcweir     }
318cdf0e10cSrcweir 
319cdf0e10cSrcweir     /** testing the method:
320cdf0e10cSrcweir         inline sal_Int32 SAL_CALL getPort() const;
321cdf0e10cSrcweir     */
322cdf0e10cSrcweir 
323*63d99982SDamjan Jovanovic     class getPort : public ::testing::Test
324cdf0e10cSrcweir     {
325cdf0e10cSrcweir     public:
326*63d99982SDamjan Jovanovic     }; // class getPort
327*63d99982SDamjan Jovanovic 
328*63d99982SDamjan Jovanovic     TEST_F(getPort, getPort_001)
329cdf0e10cSrcweir     {
330cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP );
331cdf0e10cSrcweir 
332*63d99982SDamjan Jovanovic         ASSERT_TRUE(IP_PORT_FTP == saSocketAddr.getPort( )) << "test for getPort() function: get a normal port number.";
333cdf0e10cSrcweir     }
334cdf0e10cSrcweir 
335*63d99982SDamjan Jovanovic     TEST_F(getPort, getPort_002)
336cdf0e10cSrcweir     {
337cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_INVAL );
338cdf0e10cSrcweir 
339cdf0e10cSrcweir         //t_print("#getPort_002: Port number is %d \n", saSocketAddr.getPort( ));
340cdf0e10cSrcweir 
341*63d99982SDamjan Jovanovic         ASSERT_TRUE(saSocketAddr.getPort( )>=1 && saSocketAddr.getPort( ) <= 65535) << "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).";
342cdf0e10cSrcweir     }
343cdf0e10cSrcweir     //two cases will return OSL_INVALID_PORT: 1. not valid SocketAddr
344cdf0e10cSrcweir     //2. SocketAddr family is not osl_Socket_FamilyInet, but case 2 could not be constructed
345*63d99982SDamjan Jovanovic     TEST_F(getPort, getPort_003)
346cdf0e10cSrcweir     {
347cdf0e10cSrcweir         rtl::OUString suInvalidIP = rtl::OUString::createFromAscii("123.345.67.89");
348cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( suInvalidIP, IP_PORT_MYPORT );
349cdf0e10cSrcweir 
350*63d99982SDamjan Jovanovic         ASSERT_TRUE(saSocketAddr.getPort( ) == OSL_INVALID_PORT) << "test for getPort( ) function: give an invalid IP to a SocketAddr, get the port to see returned value. ";
351cdf0e10cSrcweir     }
352cdf0e10cSrcweir 
353cdf0e10cSrcweir     /** testing the method:
354cdf0e10cSrcweir         inline sal_Bool SAL_CALL setPort( sal_Int32 nPort );
355cdf0e10cSrcweir         rfc1413.txt: TCP port numbers are from 1-65535
356cdf0e10cSrcweir         rfc1700.txt: 0/tcp    Reserved ;  0/udp    Reserved
357cdf0e10cSrcweir     */
358cdf0e10cSrcweir 
359*63d99982SDamjan Jovanovic     class setPort : public ::testing::Test
360cdf0e10cSrcweir     {
361cdf0e10cSrcweir     public:
362*63d99982SDamjan Jovanovic     }; // class setPort
363*63d99982SDamjan Jovanovic 
364*63d99982SDamjan Jovanovic     TEST_F(setPort, setPort_001)
365cdf0e10cSrcweir     {
366cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP );
367cdf0e10cSrcweir         sal_Bool bOK = saSocketAddr.setPort( IP_PORT_TELNET );
368cdf0e10cSrcweir 
369*63d99982SDamjan Jovanovic         ASSERT_TRUE(( sal_True == bOK ) &&
370*63d99982SDamjan Jovanovic                                 ( IP_PORT_TELNET == saSocketAddr.getPort( ) )) << "test for setPort() function: modify a port number setting, and check it.";
371cdf0e10cSrcweir     }
372cdf0e10cSrcweir 
373cdf0e10cSrcweir     /** 0 to 1024 is known as the reserved port range (traditionally only root can assign programs to ports in
374cdf0e10cSrcweir         this range) and the ephemeral port range from 1025 to 65535.
375cdf0e10cSrcweir         As many of you programmers will know, when you specify the source port of 0 when you connect to a host,
376cdf0e10cSrcweir         the OS automatically reassigns the port number to high numbered ephemeral port. The same happens if you
377cdf0e10cSrcweir         try to bind a listening socket to port 0.
378cdf0e10cSrcweir         http://www.securiteam.com/securityreviews/5XP0Q2AAKS.html
379cdf0e10cSrcweir         another: http://www.muq.org/~cynbe/muq/mufref_564.html
380cdf0e10cSrcweir     */
381*63d99982SDamjan Jovanovic     TEST_F(setPort, setPort_002)
382cdf0e10cSrcweir     {
383cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP );
384cdf0e10cSrcweir         sal_Bool bOK = saSocketAddr.setPort( IP_PORT_ZERO );
385cdf0e10cSrcweir 
386cdf0e10cSrcweir         oslSocket sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
387cdf0e10cSrcweir         ::osl::Socket sSocket(sHandle);
388cdf0e10cSrcweir         sSocket.setOption( osl_Socket_OptionReuseAddr, 1 );//sal_True);
389cdf0e10cSrcweir         sal_Bool bOK1 = sSocket.bind( saSocketAddr );
390*63d99982SDamjan Jovanovic         ASSERT_TRUE(bOK1 == sal_True) << "bind SocketAddr failed";
391cdf0e10cSrcweir 
392cdf0e10cSrcweir         sal_Int32 newPort = sSocket.getLocalPort();
393cdf0e10cSrcweir         //t_print("#new port is %d\n", newPort );
394cdf0e10cSrcweir 
395*63d99982SDamjan Jovanovic         ASSERT_TRUE(( 1024 <= newPort ) && ( 65535 >= newPort ) && ( bOK == sal_True )) << "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.";
396cdf0e10cSrcweir 
397cdf0e10cSrcweir     }
398cdf0e10cSrcweir 
399*63d99982SDamjan Jovanovic     TEST_F(setPort, setPort_003)
400cdf0e10cSrcweir     {
401cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP);
402cdf0e10cSrcweir         sal_Bool bOK = saSocketAddr.setPort( IP_PORT_INVAL );
403cdf0e10cSrcweir         //on Linux, getPort return 34463
404cdf0e10cSrcweir         //t_print("#Port number is %d \n", saSocketAddr.getPort( ));
405cdf0e10cSrcweir 
406*63d99982SDamjan Jovanovic         ASSERT_TRUE(( ( 1 <= saSocketAddr.getPort( ) ) && ( 65535 >= saSocketAddr.getPort( ) ) &&( bOK == sal_True ) ) ||
407*63d99982SDamjan Jovanovic                                  bOK == sal_False) << "test for setPort( ) function: set an address with invalid port. it should return error or convert it to a valid port.";
408cdf0e10cSrcweir     }
409cdf0e10cSrcweir 
410cdf0e10cSrcweir     /* this is not a inet-addr => can't set port */
411*63d99982SDamjan Jovanovic     TEST_F(setPort, setPort_004)
412cdf0e10cSrcweir     {
413cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("123.345.67.89"), IP_PORT_FTP);
414cdf0e10cSrcweir         sal_Bool bOK = saSocketAddr.setPort( IP_PORT_MYPORT );
415cdf0e10cSrcweir 
416*63d99982SDamjan Jovanovic         ASSERT_TRUE(bOK == sal_False) << "test for setPort( ) function: set an invalid address with valid port. it should return error.";
417cdf0e10cSrcweir     }
418cdf0e10cSrcweir 
419cdf0e10cSrcweir     /**  tester comment:
420cdf0e10cSrcweir 
421cdf0e10cSrcweir         In the following two functions, it use ::rtl::ByteSequence as an intermediate storage for address,
422cdf0e10cSrcweir         the ByteSequence object can hold sal_Int8 arrays, which is raged [-127, 127], in case of IP addr
423cdf0e10cSrcweir         that is greater than 127, say 129.158.217.202, it will stored as -127, -98, -39, -54,  it is unique
424cdf0e10cSrcweir         in the range of sal_Int8, but lack of readability.
425cdf0e10cSrcweir         so may be a sal_uInt8 array is better.
426cdf0e10cSrcweir     */
427cdf0e10cSrcweir 
428cdf0e10cSrcweir 
429cdf0e10cSrcweir     /** testing the method:
430cdf0e10cSrcweir         inline sal_Bool SAL_CALL setAddr( const ::rtl::ByteSequence & address );
431cdf0e10cSrcweir     */
432cdf0e10cSrcweir 
433*63d99982SDamjan Jovanovic     class setAddr : public ::testing::Test
434cdf0e10cSrcweir     {
435cdf0e10cSrcweir     public:
436*63d99982SDamjan Jovanovic     }; // class setAddr
437*63d99982SDamjan Jovanovic 
438*63d99982SDamjan Jovanovic     TEST_F(setAddr, setAddr_001)
439cdf0e10cSrcweir     {
440cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP );
441cdf0e10cSrcweir         saSocketAddr.setAddr( UStringIPToByteSequence( rtl::OUString::createFromAscii("127.0.0.1") ) );
442cdf0e10cSrcweir         ::rtl::ByteSequence bsSocketAddr = saSocketAddr.getAddr( 0 );
443cdf0e10cSrcweir         sal_Bool bOK = sal_False;
444cdf0e10cSrcweir 
445cdf0e10cSrcweir         // if ( ( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) && ( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) )
446cdf0e10cSrcweir         //  bOK = sal_True;
447cdf0e10cSrcweir         bOK = ifIpv4is( bsSocketAddr, 127, 0, 0, 1 );
448cdf0e10cSrcweir 
449*63d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == bOK) << "test for setAddr() function: construct Addr with  \"129.158.217.202\", set it to \"127.0.0.1\",  and check the correctness ";
450cdf0e10cSrcweir     }
451cdf0e10cSrcweir 
452cdf0e10cSrcweir     /** testing the method:
453cdf0e10cSrcweir         inline ::rtl::ByteSequence  SAL_CALL getAddr( oslSocketResult *pResult = 0 ) const;
454cdf0e10cSrcweir     */
455cdf0e10cSrcweir 
456*63d99982SDamjan Jovanovic     class getAddr : public ::testing::Test
457cdf0e10cSrcweir     {
458cdf0e10cSrcweir     public:
459*63d99982SDamjan Jovanovic     }; // class getAddr
460*63d99982SDamjan Jovanovic 
461*63d99982SDamjan Jovanovic     TEST_F(getAddr, getAddr_001)
462cdf0e10cSrcweir     {
463cdf0e10cSrcweir         oslSocketResult SocketResult;
464cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP );
465cdf0e10cSrcweir         ::rtl::ByteSequence bsSocketAddr = saSocketAddr.getAddr( &SocketResult );
466cdf0e10cSrcweir 
467cdf0e10cSrcweir         sal_Bool bOK = sal_False;
468cdf0e10cSrcweir 
469cdf0e10cSrcweir         //if ( ( osl_Socket_Ok == SocketResult ) &&( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) &&( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) )
470cdf0e10cSrcweir         //  bOK = sal_True;
471cdf0e10cSrcweir         bOK = ifIpv4is( bsSocketAddr, 127, 0, 0, 1 );
472cdf0e10cSrcweir 
473*63d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == bOK && SocketResult == osl_Socket_Ok) << "test for getAddr() function: construct a socketaddr with IP assigned, get the address to check correctness.Caught unknown exception on (Win32)";
474cdf0e10cSrcweir     }
475cdf0e10cSrcweir 
476cdf0e10cSrcweir     /** testing the methods:
477cdf0e10cSrcweir         inline SocketAddr & SAL_CALL operator= (oslSocketAddr Addr);
478cdf0e10cSrcweir         inline SocketAddr & SAL_CALL operator= (const SocketAddr& Addr);
479cdf0e10cSrcweir         inline SocketAddr & SAL_CALL assign( oslSocketAddr Addr, __osl_socket_NoCopy nocopy );
480cdf0e10cSrcweir         inline sal_Bool SAL_CALL operator== (oslSocketAddr Addr) const;
481cdf0e10cSrcweir         inline sal_Bool SAL_CALL operator== (const SocketAddr & Addr) const;    /// not implemented.
482cdf0e10cSrcweir     */
483cdf0e10cSrcweir 
484*63d99982SDamjan Jovanovic     class operator_equal : public ::testing::Test
485cdf0e10cSrcweir     {
486cdf0e10cSrcweir     public:
487*63d99982SDamjan Jovanovic     }; // class operator_equal
488*63d99982SDamjan Jovanovic 
489*63d99982SDamjan Jovanovic     TEST_F(operator_equal, operator_equal_001)
490cdf0e10cSrcweir     {
491cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET);
492cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddrEqual( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP );
493cdf0e10cSrcweir 
494cdf0e10cSrcweir         saSocketAddrEqual = saSocketAddr;
495cdf0e10cSrcweir         sal_Bool bOK = sal_False;
496cdf0e10cSrcweir         ::rtl::ByteSequence bsSocketAddr = saSocketAddrEqual.getAddr( 0 );
497cdf0e10cSrcweir 
498cdf0e10cSrcweir         // if ( ( IP_PORT_TELNET == saSocketAddrEqual.getPort( ) ) &&( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) &&( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) )
499cdf0e10cSrcweir         if ( ( IP_PORT_TELNET == saSocketAddrEqual.getPort( ) ) &&  ( ifIpv4is( bsSocketAddr, 127, 0, 0, 1 ) == sal_True ) )
500cdf0e10cSrcweir             bOK = sal_True;
501cdf0e10cSrcweir 
502*63d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == bOK) << "test for operator_equal() function: use operator= to assign Ip1 to Ip2, check its modification.";
503cdf0e10cSrcweir     }
504cdf0e10cSrcweir 
505cdf0e10cSrcweir 
506*63d99982SDamjan Jovanovic     TEST_F(operator_equal, operator_equal_002)
507cdf0e10cSrcweir     {
508cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.199"), IP_PORT_TELNET);
509cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddrEqual( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP );
510cdf0e10cSrcweir 
511cdf0e10cSrcweir         saSocketAddrEqual = saSocketAddr;
512*63d99982SDamjan Jovanovic         ASSERT_TRUE(IP_PORT_TELNET == saSocketAddrEqual.getPort( )) << "after assign, the assigned SocketAddr is not same as the original Addr";
513cdf0e10cSrcweir         saSocketAddrEqual.setPort( IP_PORT_MYPORT3 );
514cdf0e10cSrcweir         saSocketAddr.setPort( IP_PORT_HTTP2 );
515cdf0e10cSrcweir 
516*63d99982SDamjan Jovanovic         ASSERT_TRUE(IP_PORT_MYPORT3 == saSocketAddrEqual.getPort( )) << "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.";
517cdf0e10cSrcweir     }
518cdf0e10cSrcweir 
519*63d99982SDamjan Jovanovic     TEST_F(operator_equal, operator_equal_const_001)
520cdf0e10cSrcweir     {
521cdf0e10cSrcweir         const ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET);
522cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddrEqual( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP );
523cdf0e10cSrcweir 
524cdf0e10cSrcweir         saSocketAddrEqual = saSocketAddr;
525cdf0e10cSrcweir         sal_Bool bOK = sal_False;
526cdf0e10cSrcweir         ::rtl::ByteSequence bsSocketAddr = saSocketAddrEqual.getAddr( 0 );
527cdf0e10cSrcweir 
528cdf0e10cSrcweir         // if ( ( IP_PORT_TELNET == saSocketAddrEqual.getPort( ) ) &&( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) &&( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) )
529cdf0e10cSrcweir         if ( ( IP_PORT_TELNET == saSocketAddrEqual.getPort( ) ) && ifIpv4is( bsSocketAddr, 127, 0, 0, 1 ) == sal_True )
530cdf0e10cSrcweir             bOK = sal_True;
531cdf0e10cSrcweir 
532*63d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == bOK) << "test for operator_equal_const() function: use operator= const to assign Ip1 to Ip2, verify the change on the second one.";
533cdf0e10cSrcweir     }
534cdf0e10cSrcweir 
535*63d99982SDamjan Jovanovic     TEST_F(operator_equal, operator_equal_const_002)
536cdf0e10cSrcweir     {
537cdf0e10cSrcweir         const ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET);
538cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddrEqual( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP );
539cdf0e10cSrcweir 
540cdf0e10cSrcweir         saSocketAddrEqual = saSocketAddr;
541cdf0e10cSrcweir         saSocketAddrEqual.setPort( IP_PORT_HTTP1 );
542cdf0e10cSrcweir 
543*63d99982SDamjan Jovanovic         ASSERT_TRUE(IP_PORT_HTTP1 != saSocketAddr.getPort( )) << "test for operator_equal_const() function: change the second instance, the first one should not be altered, since it does not released the handle.";
544cdf0e10cSrcweir     }
545cdf0e10cSrcweir 
546*63d99982SDamjan Jovanovic     TEST_F(operator_equal, operator_equal_assign_001)
547cdf0e10cSrcweir     {
548cdf0e10cSrcweir         ::osl::SocketAddr* pSocketAddr = new ::osl::SocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET );
549*63d99982SDamjan Jovanovic             ASSERT_TRUE(pSocketAddr != NULL) << "check for new SocketAddr";
550cdf0e10cSrcweir             ::osl::SocketAddr* pSocketAddrAssign = new ::osl::SocketAddr( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP );
551cdf0e10cSrcweir             oslSocketAddr poslSocketAddr = pSocketAddr->getHandle( );
552cdf0e10cSrcweir             //if( m_handle ) osl_destroySocketAddr( m_handle ); so pSocketAddrAssign had been destroyed and then point to pSocketAddr
553cdf0e10cSrcweir             pSocketAddrAssign->assign(poslSocketAddr, SAL_NO_COPY);
554cdf0e10cSrcweir 
555*63d99982SDamjan Jovanovic             ASSERT_TRUE(pSocketAddrAssign->getPort( ) == IP_PORT_TELNET) << "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.";
556cdf0e10cSrcweir 
557cdf0e10cSrcweir             delete pSocketAddrAssign;
558cdf0e10cSrcweir     }
559cdf0e10cSrcweir 
560*63d99982SDamjan Jovanovic     TEST_F(operator_equal, operator_is_equal_001)
561cdf0e10cSrcweir     {
562cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET);
563cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddrequal( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET );
564cdf0e10cSrcweir 
565*63d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == ( saSocketAddrequal == saSocketAddr.getHandle( ) )) << "test for operator_equal_equal() function: check two identical Address.";
566cdf0e10cSrcweir     }
567cdf0e10cSrcweir 
568*63d99982SDamjan Jovanovic     TEST_F(operator_equal, operator_is_equal_002)
569cdf0e10cSrcweir     {
570cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP);
571cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddrequal( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET );
572cdf0e10cSrcweir 
573*63d99982SDamjan Jovanovic         ASSERT_TRUE(sal_False == ( saSocketAddrequal == saSocketAddr.getHandle( ) )) << "test for operator_equal_equal() function: check two different Address.";
574cdf0e10cSrcweir     }
575cdf0e10cSrcweir 
576cdf0e10cSrcweir 
577cdf0e10cSrcweir     /** testing the method:
578cdf0e10cSrcweir         inline oslSocketAddr SAL_CALL getHandle() const;
579cdf0e10cSrcweir     */
580cdf0e10cSrcweir 
581*63d99982SDamjan Jovanovic     class getSocketAddrHandle : public ::testing::Test
582cdf0e10cSrcweir     {
583cdf0e10cSrcweir     public:
584*63d99982SDamjan Jovanovic     }; // class getSocketAddrHandle
585cdf0e10cSrcweir 
586*63d99982SDamjan Jovanovic     TEST_F(getSocketAddrHandle, getSocketAddrHandle_001)
587cdf0e10cSrcweir     {
588cdf0e10cSrcweir         ::osl::SocketAddr* pSocketAddr = new ::osl::SocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 );
589*63d99982SDamjan Jovanovic             ASSERT_TRUE(pSocketAddr != NULL) << "check for new SocketAddr";
590cdf0e10cSrcweir             oslSocketAddr psaOSLSocketAddr = pSocketAddr->getHandle( );
591cdf0e10cSrcweir             ::osl::SocketAddr* pSocketAddrCopy = new ::osl::SocketAddr( psaOSLSocketAddr, SAL_NO_COPY );
592cdf0e10cSrcweir 
593*63d99982SDamjan Jovanovic             ASSERT_TRUE(pSocketAddr->getHandle( ) ==  pSocketAddrCopy->getHandle( )) << "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.";
594cdf0e10cSrcweir 
595cdf0e10cSrcweir             delete pSocketAddrCopy;
596cdf0e10cSrcweir     }
597cdf0e10cSrcweir 
598*63d99982SDamjan Jovanovic     TEST_F(getSocketAddrHandle, getSocketAddrHandle_002)
599cdf0e10cSrcweir     {
600cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("deuce.PRC.Sun.COM"), IP_PORT_MYPORT4 );
601cdf0e10cSrcweir         oslSocketAddr poslSocketAddr = saSocketAddr.getHandle( );
602cdf0e10cSrcweir 
603cdf0e10cSrcweir         sal_Bool bOK = ( saSocketAddr == poslSocketAddr );
604cdf0e10cSrcweir         //t_print("getSocketAddrHandle_002\n");
605*63d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == bOK) << "test for getHandle() function: use getHandle() function as an intermediate way to create identical address.";
606cdf0e10cSrcweir     }
607cdf0e10cSrcweir 
608cdf0e10cSrcweir     /** testing the method:
609cdf0e10cSrcweir         static inline ::rtl::OUString SAL_CALL getLocalHostname( oslSocketResult *pResult = 0);
610cdf0e10cSrcweir     */
611cdf0e10cSrcweir 
612*63d99982SDamjan Jovanovic     class getLocalHostname : public ::testing::Test
613cdf0e10cSrcweir     {
614cdf0e10cSrcweir     public:
615*63d99982SDamjan Jovanovic     }; // class getLocalHostname
616*63d99982SDamjan Jovanovic 
617cdf0e10cSrcweir     /* the process of getLocalHostname: 1.gethostname (same as /bin/hostname) returned name A
618cdf0e10cSrcweir        2. search A in /etc/hosts, if there is an alias name is A, return the name in the same row
619cdf0e10cSrcweir     */
620cdf0e10cSrcweir 
621*63d99982SDamjan Jovanovic     TEST_F(getLocalHostname, getLocalHostname_000)
622cdf0e10cSrcweir         {
623cdf0e10cSrcweir             // _osl_getFullQualifiedDomainName( );
624cdf0e10cSrcweir             oslSocketResult aResult = osl_Socket_Error;
625cdf0e10cSrcweir             rtl::OUString suHostname = osl::SocketAddr::getLocalHostname(&aResult);
626*63d99982SDamjan Jovanovic             ASSERT_TRUE(aResult == osl_Socket_Ok) << "getLocalHostname failed";
627cdf0e10cSrcweir         }
628cdf0e10cSrcweir 
629*63d99982SDamjan Jovanovic     TEST_F(getLocalHostname, getLocalHostname_001)
630cdf0e10cSrcweir     {
631cdf0e10cSrcweir         oslSocketResult *pResult = NULL;
632cdf0e10cSrcweir         //printSocketResult(*pResult);
633cdf0e10cSrcweir         ::rtl::OUString suResult = ::osl::SocketAddr::getLocalHostname( pResult );
634cdf0e10cSrcweir 
635cdf0e10cSrcweir         // LLA: IMHO localhost, or hostname by itself should be ok.
636cdf0e10cSrcweir         rtl::OUString suThisHost = getThisHostname( );
637cdf0e10cSrcweir         bool bOk = false;
638cdf0e10cSrcweir         if (suThisHost.equals(rtl::OUString::createFromAscii("localhost")))
639cdf0e10cSrcweir         {
640cdf0e10cSrcweir             bOk = true;
641cdf0e10cSrcweir         }
642cdf0e10cSrcweir         else
643cdf0e10cSrcweir         {
644cdf0e10cSrcweir             if (suThisHost.equals(suResult))
645cdf0e10cSrcweir             {
646cdf0e10cSrcweir                 bOk = true;
647cdf0e10cSrcweir             }
648cdf0e10cSrcweir         }
649cdf0e10cSrcweir 
650cdf0e10cSrcweir         ::rtl::OUString suError;
651cdf0e10cSrcweir         suError = outputError(suResult, getThisHostname( ), "test for getLocalHostname() function");
652cdf0e10cSrcweir 
653*63d99982SDamjan Jovanovic         ASSERT_TRUE(bOk == true) << suError.pData;
654cdf0e10cSrcweir     }
655cdf0e10cSrcweir 
656cdf0e10cSrcweir     /** testing the method:
657cdf0e10cSrcweir         static inline void SAL_CALL resolveHostname( const ::rtl::OUString & strHostName , SocketAddr & Addr );
658cdf0e10cSrcweir     */
659cdf0e10cSrcweir 
660*63d99982SDamjan Jovanovic     class resolveHostname : public ::testing::Test
661cdf0e10cSrcweir     {
662cdf0e10cSrcweir     public:
663*63d99982SDamjan Jovanovic     }; // class resolveHostname
664*63d99982SDamjan Jovanovic 
665*63d99982SDamjan Jovanovic     TEST_F(resolveHostname, resolveHostname_001)
666cdf0e10cSrcweir     {
667cdf0e10cSrcweir         ::osl::SocketAddr saSocketAddr;
668cdf0e10cSrcweir         ::osl::SocketAddr::resolveHostname( rtl::OUString::createFromAscii("127.0.0.1"), saSocketAddr );
669cdf0e10cSrcweir         ::rtl::ByteSequence bsSocketAddr = saSocketAddr.getAddr( 0 );
670cdf0e10cSrcweir         sal_Bool bOK = sal_False;
671cdf0e10cSrcweir 
672cdf0e10cSrcweir          if ( ( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) &&( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) )
673cdf0e10cSrcweir             bOK = sal_True;
674cdf0e10cSrcweir 
675*63d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == bOK) << "test for resolveHostname() function: try to resolve localhost to 127.0.0.1.";
676cdf0e10cSrcweir     }
677cdf0e10cSrcweir 
678cdf0e10cSrcweir     /** testing the method:
679cdf0e10cSrcweir         static inline sal_Int32 SAL_CALL getServicePort(
680cdf0e10cSrcweir             const ::rtl::OUString& strServiceName,
681cdf0e10cSrcweir             const ::rtl::OUString & strProtocolName= ::rtl::OUString::createFromAscii( "tcp" ) );
682cdf0e10cSrcweir     */
683cdf0e10cSrcweir 
684*63d99982SDamjan Jovanovic     class gettheServicePort : public ::testing::Test
685cdf0e10cSrcweir     {
686cdf0e10cSrcweir     public:
687*63d99982SDamjan Jovanovic     }; // class gettheServicePort
688*63d99982SDamjan Jovanovic 
689*63d99982SDamjan Jovanovic     TEST_F(gettheServicePort, gettheServicePort_001)
690cdf0e10cSrcweir     {
691cdf0e10cSrcweir         rtl::OUString suServiceFTP  = rtl::OUString::createFromAscii( "ftp" );
692cdf0e10cSrcweir         rtl::OUString suProtocolTCP = rtl::OUString::createFromAscii( "tcp" );
693cdf0e10cSrcweir 
694*63d99982SDamjan Jovanovic         ASSERT_TRUE(IP_PORT_FTP== ::osl::SocketAddr::getServicePort( suServiceFTP, suProtocolTCP )) << "test for getServicePort() function: try to get ftp service port on TCP protocol.";
695cdf0e10cSrcweir     }
696cdf0e10cSrcweir 
697*63d99982SDamjan Jovanovic     TEST_F(gettheServicePort, gettheServicePort_002)
698cdf0e10cSrcweir     {
699cdf0e10cSrcweir         rtl::OUString suServiceTELNET  = rtl::OUString::createFromAscii( "telnet" );
700cdf0e10cSrcweir         rtl::OUString suProtocolTCP    = rtl::OUString::createFromAscii( "tcp" );
701*63d99982SDamjan Jovanovic         ASSERT_TRUE(IP_PORT_TELNET== ::osl::SocketAddr::getServicePort( suServiceTELNET, suProtocolTCP )) << "test for getServicePort() function: try to get telnet service port on TCP protocol.";
702cdf0e10cSrcweir     }
703cdf0e10cSrcweir 
704*63d99982SDamjan Jovanovic     TEST_F(gettheServicePort, gettheServicePort_003)
705cdf0e10cSrcweir     {
706cdf0e10cSrcweir     //Solaris has no service called "https", please see /etc/services
707cdf0e10cSrcweir         rtl::OUString suServiceNETBIOS = rtl::OUString::createFromAscii( "netbios-dgm" );
708cdf0e10cSrcweir         rtl::OUString suProtocolUDP    = rtl::OUString::createFromAscii( "udp" );
709*63d99982SDamjan Jovanovic         ASSERT_TRUE(IP_PORT_NETBIOS_DGM == ::osl::SocketAddr::getServicePort( suServiceNETBIOS, suProtocolUDP )) << "test for getServicePort() function: try to get netbios-ssn service port on UDP protocol.";
710cdf0e10cSrcweir     }
711cdf0e10cSrcweir 
712*63d99982SDamjan Jovanovic     TEST_F(gettheServicePort, gettheServicePort_004)
713cdf0e10cSrcweir     {
714cdf0e10cSrcweir         rtl::OUString suProtocolUDP    = rtl::OUString::createFromAscii( "udp" );
715*63d99982SDamjan Jovanovic         ASSERT_TRUE(OSL_INVALID_PORT == ::osl::SocketAddr::getServicePort( ::rtl::OUString::createFromAscii( "notexist" ), suProtocolUDP )) << "test for getServicePort() function: try to get a service port which is not exist.";
716cdf0e10cSrcweir     }
717cdf0e10cSrcweir 
718cdf0e10cSrcweir     /** testing the method:
719cdf0e10cSrcweir 
720cdf0e10cSrcweir     */
721cdf0e10cSrcweir 
722*63d99982SDamjan Jovanovic     class getFamilyOfSocketAddr : public ::testing::Test
723cdf0e10cSrcweir     {
724cdf0e10cSrcweir     public:
725*63d99982SDamjan Jovanovic     }; // class getFamilyOfSocketAddr
726*63d99982SDamjan Jovanovic 
727*63d99982SDamjan Jovanovic     TEST_F(getFamilyOfSocketAddr, getFamilyOfSocketAddr_001)
728cdf0e10cSrcweir     {
729cdf0e10cSrcweir             ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 );
730cdf0e10cSrcweir             oslSocketAddr psaOSLSocketAddr = saSocketAddr.getHandle( );
731*63d99982SDamjan Jovanovic             ASSERT_EQ(
732cdf0e10cSrcweir                 osl_Socket_FamilyInet,
733cdf0e10cSrcweir                 osl_getFamilyOfSocketAddr( psaOSLSocketAddr ) );
734cdf0e10cSrcweir 
735*63d99982SDamjan Jovanovic         ASSERT_TRUE(osl_getFamilyOfSocketAddr( psaOSLSocketAddr ) == osl_Socket_FamilyInet) << "test for osl_getFamilyOfSocketAddr.";
736cdf0e10cSrcweir     }
737cdf0e10cSrcweir 
738cdf0e10cSrcweir } // namespace osl_SocketAddr
739cdf0e10cSrcweir 
740*63d99982SDamjan Jovanovic int main(int argc, char **argv)
741*63d99982SDamjan Jovanovic {
742*63d99982SDamjan Jovanovic     ::testing::InitGoogleTest(&argc, argv);
743*63d99982SDamjan Jovanovic     return RUN_ALL_TESTS();
744*63d99982SDamjan Jovanovic }
745