xref: /trunk/main/sal/qa/osl/socket/osl_SocketAddr.cxx (revision 30acf5e8)
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
1087d2adbcSAndrew Rist  *
1187d2adbcSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
1287d2adbcSAndrew Rist  *
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.
1987d2adbcSAndrew Rist  *
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_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 
9063d99982SDamjan Jovanovic 	class ctors : public ::testing::Test
91cdf0e10cSrcweir 	{
92cdf0e10cSrcweir 	public:
9363d99982SDamjan Jovanovic 	}; // class ctors
94cdf0e10cSrcweir 
TEST_F(ctors,ctors_none)9563d99982SDamjan Jovanovic     TEST_F(ctors, ctors_none)
9663d99982SDamjan Jovanovic     {
9763d99982SDamjan Jovanovic         /// SocketAddr constructor.
9863d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr;
99cdf0e10cSrcweir 
10063d99982SDamjan Jovanovic         // oslSocketResult aResult;
10163d99982SDamjan Jovanovic         // rtl::OUString suHost = saSocketAddr.getLocalHostname( &aResult);
102cdf0e10cSrcweir 
10363d99982SDamjan Jovanovic         // rtl::OUString suHost2 = getThisHostname();
104cdf0e10cSrcweir 
10563d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == saSocketAddr.is( )) << "test for none parameter constructor function: check if the socket address was created successfully";
10663d99982SDamjan Jovanovic     }
107cdf0e10cSrcweir 
TEST_F(ctors,ctors_none_000)10863d99982SDamjan Jovanovic     TEST_F(ctors, ctors_none_000)
10963d99982SDamjan Jovanovic     {
11063d99982SDamjan Jovanovic         /// SocketAddr constructor.
11163d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr;
112cdf0e10cSrcweir 
11363d99982SDamjan Jovanovic         oslSocketResult aResult;
11463d99982SDamjan Jovanovic         rtl::OUString suHost = saSocketAddr.getLocalHostname( &aResult);
11563d99982SDamjan Jovanovic         rtl::OUString suHost2 = getThisHostname();
116cdf0e10cSrcweir 
11763d99982SDamjan Jovanovic         sal_Bool bOk = compareUString(suHost, suHost2);
118cdf0e10cSrcweir 
11963d99982SDamjan Jovanovic         rtl::OUString suError = rtl::OUString::createFromAscii("Host names should be the same. From SocketAddr.getLocalHostname() it is'");
12063d99982SDamjan Jovanovic         suError += suHost;
12163d99982SDamjan Jovanovic         suError += rtl::OUString::createFromAscii("', from getThisHostname() it is '");
12263d99982SDamjan Jovanovic         suError += suHost2;
12363d99982SDamjan Jovanovic         suError += rtl::OUString::createFromAscii("'.");
124cdf0e10cSrcweir 
12563d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == bOk) << suError.pData;
12663d99982SDamjan Jovanovic     }
127cdf0e10cSrcweir 
TEST_F(ctors,ctors_copy)12863d99982SDamjan Jovanovic     TEST_F(ctors, ctors_copy)
12963d99982SDamjan Jovanovic     {
13063d99982SDamjan Jovanovic         /// SocketAddr copy constructor.
13163d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 );
13263d99982SDamjan Jovanovic         ::osl::SocketAddr saCopySocketAddr( saSocketAddr );
133cdf0e10cSrcweir 
13463d99982SDamjan Jovanovic         sal_Int32 nPort = saCopySocketAddr.getPort( );
135cdf0e10cSrcweir 
13663d99982SDamjan 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.";
13763d99982SDamjan Jovanovic     }
138cdf0e10cSrcweir 
TEST_F(ctors,ctors_copy_no_001)13963d99982SDamjan Jovanovic     TEST_F(ctors, ctors_copy_no_001)
14063d99982SDamjan Jovanovic     {
141cdf0e10cSrcweir #if 0
14263d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 );
14363d99982SDamjan Jovanovic         oslSocketAddr psaOSLSocketAddr = saSocketAddr.getHandle( );
144cdf0e10cSrcweir 
14563d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddrCopy( psaOSLSocketAddr, SAL_NO_COPY );
14663d99982SDamjan Jovanovic         saSocketAddrCopy.setPort( IP_PORT_HTTP2 );
147cdf0e10cSrcweir 
14863d99982SDamjan 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
15063d99982SDamjan Jovanovic         ::osl::SocketAddr* pSocketAddr = new ::osl::SocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 );
15163d99982SDamjan Jovanovic         ASSERT_TRUE(pSocketAddr != NULL) << "check for new SocketAddr";
152cdf0e10cSrcweir 
15363d99982SDamjan Jovanovic         oslSocketAddr psaOSLSocketAddr = pSocketAddr->getHandle( );
154cdf0e10cSrcweir 
15563d99982SDamjan Jovanovic         ::osl::SocketAddr* pSocketAddrCopy = new ::osl::SocketAddr( psaOSLSocketAddr, SAL_NO_COPY );
156cdf0e10cSrcweir 
15763d99982SDamjan Jovanovic         pSocketAddrCopy->setPort( IP_PORT_HTTP2 );
15863d99982SDamjan 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 
16063d99982SDamjan Jovanovic         delete pSocketAddrCopy;
16163d99982SDamjan Jovanovic         // LLA: don't do this also:           delete pSocketAddr;
16263d99982SDamjan Jovanovic     }
163cdf0e10cSrcweir 
TEST_F(ctors,ctors_copy_no_002)16463d99982SDamjan Jovanovic     TEST_F(ctors, ctors_copy_no_002)
16563d99982SDamjan Jovanovic     {
16663d99982SDamjan Jovanovic         ::osl::SocketAddr* pSocketAddr = new ::osl::SocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 );
16763d99982SDamjan Jovanovic             ASSERT_TRUE(pSocketAddr != NULL) << "check for new SocketAddr";
16863d99982SDamjan Jovanovic             oslSocketAddr psaOSLSocketAddr = pSocketAddr->getHandle( );
16963d99982SDamjan Jovanovic             ::osl::SocketAddr* pSocketAddrCopy = new ::osl::SocketAddr( psaOSLSocketAddr, SAL_NO_COPY );
170cdf0e10cSrcweir 
17163d99982SDamjan 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 
17363d99982SDamjan Jovanovic             delete pSocketAddrCopy;
17463d99982SDamjan Jovanovic     }
175cdf0e10cSrcweir 
TEST_F(ctors,ctors_copy_handle_001)17663d99982SDamjan Jovanovic     TEST_F(ctors, ctors_copy_handle_001)
17763d99982SDamjan Jovanovic     {
17863d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 );
17963d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddrCopy( saSocketAddr.getHandle( ) );
180cdf0e10cSrcweir 
18163d99982SDamjan 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.";
18263d99982SDamjan Jovanovic     }
183cdf0e10cSrcweir 
TEST_F(ctors,ctors_copy_handle_002)18463d99982SDamjan Jovanovic     TEST_F(ctors, ctors_copy_handle_002)
18563d99982SDamjan Jovanovic     {
18663d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 );
18763d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddrCopy( saSocketAddr.getHandle( ) );
18863d99982SDamjan Jovanovic         saSocketAddrCopy.setPort( IP_PORT_HTTP2 );
189cdf0e10cSrcweir 
19063d99982SDamjan 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.";
19163d99982SDamjan Jovanovic     }
192cdf0e10cSrcweir 
TEST_F(ctors,ctors_hostname_port_001)19363d99982SDamjan Jovanovic     TEST_F(ctors, ctors_hostname_port_001)
19463d99982SDamjan Jovanovic     {
19563d99982SDamjan Jovanovic         /// tcpip-specif constructor.
19663d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP );
19763d99982SDamjan Jovanovic         printUString( saSocketAddr.getHostname( ), "ctors_hostname_port_001:getHostname");
198cdf0e10cSrcweir 
19963d99982SDamjan Jovanovic         ASSERT_TRUE(saSocketAddr.is( ) == sal_True &&
20063d99982SDamjan Jovanovic                                 ( saSocketAddr.getPort( ) == IP_PORT_FTP )/*&&
201*30acf5e8Spfg                                 ( sal_True == compareUString( saSocketAddr.getHostname( ), aHostName1 ) ) */) << "test for SocketAddr tcpip specific constructor function: do a constructor using tcpip spec, check the result.";
20263d99982SDamjan Jovanovic     }
203cdf0e10cSrcweir 
20463d99982SDamjan Jovanovic     //same as is_002
TEST_F(ctors,ctors_hostname_port_002)20563d99982SDamjan Jovanovic     TEST_F(ctors, ctors_hostname_port_002)
20663d99982SDamjan Jovanovic     {
20763d99982SDamjan Jovanovic         /// tcpip-specif constructor.
20863d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("123.345.67.89"), IP_PORT_MYPORT2 );
209cdf0e10cSrcweir 
210*30acf5e8Spfg         ASSERT_TRUE(sal_False == saSocketAddr.is( )) << "test for SocketAddr tcpip specific constructor function: using an invalid IP address, the socketaddr ctors should fail";
21163d99982SDamjan Jovanovic     }
212cdf0e10cSrcweir 
213cdf0e10cSrcweir 
214cdf0e10cSrcweir 	/** testing the method:
215cdf0e10cSrcweir 		inline sal_Bool is() const;
216cdf0e10cSrcweir 	*/
217cdf0e10cSrcweir 
21863d99982SDamjan Jovanovic 	class is : public ::testing::Test
219cdf0e10cSrcweir 	{
220cdf0e10cSrcweir 	public:
22163d99982SDamjan Jovanovic 	}; // class is
222cdf0e10cSrcweir 
TEST_F(is,is_001)22363d99982SDamjan Jovanovic     TEST_F(is, is_001)
22463d99982SDamjan Jovanovic     {
22563d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr;
226cdf0e10cSrcweir 
22763d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == saSocketAddr.is( )) << "test for is() function: create an unknown type socket, it should be True when call is.";
22863d99982SDamjan Jovanovic     }
22963d99982SDamjan Jovanovic     // refer to setPort_003()
TEST_F(is,is_002)23063d99982SDamjan Jovanovic     TEST_F(is, is_002)
23163d99982SDamjan Jovanovic     {
23263d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_INVAL );
233cdf0e10cSrcweir 
23463d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == saSocketAddr.is( )) << "test for is() function: create a tcp-ip socket using invalid port number";
23563d99982SDamjan Jovanovic     }
236cdf0e10cSrcweir 
TEST_F(is,is_003)23763d99982SDamjan Jovanovic     TEST_F(is, is_003)
23863d99982SDamjan Jovanovic     {
23963d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("123.345.67.89"), IP_PORT_MYPORT );
240cdf0e10cSrcweir 
24163d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True != saSocketAddr.is( )) << "test for is() function: create a tcp-ip socket using invalid Ip number";
24263d99982SDamjan Jovanovic     }
243cdf0e10cSrcweir 
244cdf0e10cSrcweir 	/** testing the method:
245cdf0e10cSrcweir 		inline ::rtl::OUString SAL_CALL getHostname( oslSocketResult *pResult = 0 ) const;
246cdf0e10cSrcweir 	*/
247cdf0e10cSrcweir 
24863d99982SDamjan Jovanovic 	class getHostname : public ::testing::Test
249cdf0e10cSrcweir 	{
250cdf0e10cSrcweir 	public:
SetUp()25163d99982SDamjan Jovanovic 		void SetUp()
252cdf0e10cSrcweir 		{
253cdf0e10cSrcweir 		}
254cdf0e10cSrcweir 
TearDown()25563d99982SDamjan Jovanovic 		void TearDown()
256cdf0e10cSrcweir 		{
257cdf0e10cSrcweir 		}
25863d99982SDamjan Jovanovic 	}; // class getHostname
259cdf0e10cSrcweir 
TEST_F(getHostname,getHostname_000)26063d99982SDamjan Jovanovic     TEST_F(getHostname, getHostname_000)
26163d99982SDamjan Jovanovic         {
26263d99982SDamjan Jovanovic             ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.107"), IP_PORT_FTP );
26363d99982SDamjan Jovanovic             rtl::OUString suResult = saSocketAddr.getHostname( 0 );
26463d99982SDamjan Jovanovic 
26563d99982SDamjan Jovanovic         }
26663d99982SDamjan Jovanovic 
26763d99982SDamjan Jovanovic     /** it will search the Ip in current machine's /etc/hosts at first, if find, then return the
26863d99982SDamjan Jovanovic         mapped hostname, otherwise, it will search via DNS server, and often return hostname+ Domain name
26963d99982SDamjan Jovanovic         like "sceri.PRC.Sun.COM"
27063d99982SDamjan Jovanovic         The process is same as Socket::getLocalHost(), but getLocalHost can only return hostname of the current machine.
27163d99982SDamjan Jovanovic     */
TEST_F(getHostname,getHostname_001)27263d99982SDamjan Jovanovic     TEST_F(getHostname, getHostname_001)
27363d99982SDamjan Jovanovic     {
27463d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.107"), IP_PORT_FTP );
27563d99982SDamjan Jovanovic         rtl::OUString suResult = saSocketAddr.getHostname( 0 );
27663d99982SDamjan Jovanovic         rtl::OUString suError = outputError(suResult, rtl::OUString::createFromAscii("sceri.PRC.Sun.COM"), "test for getHostname(0)");
27763d99982SDamjan Jovanovic         sal_Bool bOK = compareUString( suResult, rtl::OUString::createFromAscii("sceri.PRC.Sun.COM") );
27863d99982SDamjan Jovanovic         // search the returned hostname in /etc/hosts, if find, and the IP in the row is same as IP
27963d99982SDamjan Jovanovic         // in the Addr, it's right also.
28063d99982SDamjan Jovanovic         if ( bOK == sal_False)
28163d99982SDamjan Jovanovic         {
28263d99982SDamjan Jovanovic             rtl::OString aString = ::rtl::OUStringToOString( suResult, RTL_TEXTENCODING_ASCII_US );
28363d99982SDamjan Jovanovic             if ( compareUString( getIPbyName( aString ), rtl::OUString::createFromAscii("129.158.217.107") ) == sal_True )
28463d99982SDamjan Jovanovic                 bOK = sal_True;
28563d99982SDamjan Jovanovic         }
28663d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == bOK) << suError.pData;
28763d99982SDamjan Jovanovic     }
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
TEST_F(getHostname,getHostname_002)29163d99982SDamjan Jovanovic     TEST_F(getHostname, getHostname_002)
29263d99982SDamjan Jovanovic     {
29363d99982SDamjan Jovanovic         rtl::OUString suHostname = rtl::OUString::createFromAscii("cn-1.germany.sun.com");
29463d99982SDamjan Jovanovic         rtl::OString aString = ::rtl::OUStringToOString( suHostname, RTL_TEXTENCODING_ASCII_US );
29563d99982SDamjan Jovanovic         rtl::OUString aHostIP    = getIPbyName( aString );
29663d99982SDamjan Jovanovic 
29763d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_FTP );
29863d99982SDamjan Jovanovic         sal_Bool bOK = saSocketAddr.setHostname( suHostname );
29963d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == bOK) << "#SocketAddr.setHostname failed";
30063d99982SDamjan Jovanovic         oslSocketResult aResult;
30163d99982SDamjan Jovanovic         rtl::OUString suResult = saSocketAddr.getHostname( &aResult );
30263d99982SDamjan Jovanovic         ASSERT_TRUE(aResult == osl_Socket_Ok) << "SocketAddr.getHostname failed.";
30363d99982SDamjan Jovanovic 
30463d99982SDamjan Jovanovic         rtl::OUString suError = outputError(suResult, suHostname, "test for getHostname(0)");
30563d99982SDamjan Jovanovic         bOK = compareUString( suResult, suHostname );
30663d99982SDamjan Jovanovic         if ( bOK == sal_False)
30763d99982SDamjan Jovanovic         {
30863d99982SDamjan Jovanovic             rtl::OString aStringResult = ::rtl::OUStringToOString( suResult, RTL_TEXTENCODING_ASCII_US );
30963d99982SDamjan Jovanovic             rtl::OString aStringHostname = ::rtl::OUStringToOString( suHostname, RTL_TEXTENCODING_ASCII_US );
31063d99982SDamjan Jovanovic             if ( compareUString( getIPbyName( aStringResult ) ,  getIPbyName( aStringHostname ) ) == sal_True )
31163d99982SDamjan Jovanovic             {
31263d99982SDamjan Jovanovic                 bOK = sal_True;
313cdf0e10cSrcweir             }
31463d99982SDamjan Jovanovic         }
315cdf0e10cSrcweir 
31663d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == bOK) << suError.pData;
31763d99982SDamjan Jovanovic     }
318cdf0e10cSrcweir 
319cdf0e10cSrcweir 	/** testing the method:
320cdf0e10cSrcweir 		inline sal_Int32 SAL_CALL getPort() const;
321cdf0e10cSrcweir 	*/
322cdf0e10cSrcweir 
32363d99982SDamjan Jovanovic 	class getPort : public ::testing::Test
324cdf0e10cSrcweir 	{
325cdf0e10cSrcweir 	public:
32663d99982SDamjan Jovanovic 	}; // class getPort
327cdf0e10cSrcweir 
TEST_F(getPort,getPort_001)32863d99982SDamjan Jovanovic     TEST_F(getPort, getPort_001)
32963d99982SDamjan Jovanovic     {
33063d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP );
331cdf0e10cSrcweir 
33263d99982SDamjan Jovanovic         ASSERT_TRUE(IP_PORT_FTP == saSocketAddr.getPort( )) << "test for getPort() function: get a normal port number.";
33363d99982SDamjan Jovanovic     }
334cdf0e10cSrcweir 
TEST_F(getPort,getPort_002)33563d99982SDamjan Jovanovic     TEST_F(getPort, getPort_002)
33663d99982SDamjan Jovanovic     {
33763d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_INVAL );
338cdf0e10cSrcweir 
33963d99982SDamjan Jovanovic         //t_print("#getPort_002: Port number is %d \n", saSocketAddr.getPort( ));
340cdf0e10cSrcweir 
34163d99982SDamjan 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).";
34263d99982SDamjan Jovanovic     }
34363d99982SDamjan Jovanovic     //two cases will return OSL_INVALID_PORT: 1. not valid SocketAddr
34463d99982SDamjan Jovanovic     //2. SocketAddr family is not osl_Socket_FamilyInet, but case 2 could not be constructed
TEST_F(getPort,getPort_003)34563d99982SDamjan Jovanovic     TEST_F(getPort, getPort_003)
34663d99982SDamjan Jovanovic     {
34763d99982SDamjan Jovanovic         rtl::OUString suInvalidIP = rtl::OUString::createFromAscii("123.345.67.89");
34863d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( suInvalidIP, IP_PORT_MYPORT );
349cdf0e10cSrcweir 
35063d99982SDamjan 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. ";
35163d99982SDamjan Jovanovic     }
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 
35963d99982SDamjan Jovanovic 	class setPort : public ::testing::Test
360cdf0e10cSrcweir 	{
361cdf0e10cSrcweir 	public:
362cdf0e10cSrcweir 	}; // class setPort
363cdf0e10cSrcweir 
TEST_F(setPort,setPort_001)36463d99982SDamjan Jovanovic     TEST_F(setPort, setPort_001)
36563d99982SDamjan Jovanovic     {
36663d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP );
36763d99982SDamjan Jovanovic         sal_Bool bOK = saSocketAddr.setPort( IP_PORT_TELNET );
36863d99982SDamjan Jovanovic 
36963d99982SDamjan Jovanovic         ASSERT_TRUE(( sal_True == bOK ) &&
37063d99982SDamjan Jovanovic                                 ( IP_PORT_TELNET == saSocketAddr.getPort( ) )) << "test for setPort() function: modify a port number setting, and check it.";
37163d99982SDamjan Jovanovic     }
37263d99982SDamjan Jovanovic 
37363d99982SDamjan Jovanovic     /** 0 to 1024 is known as the reserved port range (traditionally only root can assign programs to ports in
37463d99982SDamjan Jovanovic         this range) and the ephemeral port range from 1025 to 65535.
37563d99982SDamjan Jovanovic         As many of you programmers will know, when you specify the source port of 0 when you connect to a host,
37663d99982SDamjan Jovanovic         the OS automatically reassigns the port number to high numbered ephemeral port. The same happens if you
37763d99982SDamjan Jovanovic         try to bind a listening socket to port 0.
37863d99982SDamjan Jovanovic         http://www.securiteam.com/securityreviews/5XP0Q2AAKS.html
37963d99982SDamjan Jovanovic         another: http://www.muq.org/~cynbe/muq/mufref_564.html
38063d99982SDamjan Jovanovic     */
TEST_F(setPort,setPort_002)38163d99982SDamjan Jovanovic     TEST_F(setPort, setPort_002)
38263d99982SDamjan Jovanovic     {
38363d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP );
38463d99982SDamjan Jovanovic         sal_Bool bOK = saSocketAddr.setPort( IP_PORT_ZERO );
38563d99982SDamjan Jovanovic 
38663d99982SDamjan Jovanovic         oslSocket sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp );
38763d99982SDamjan Jovanovic         ::osl::Socket sSocket(sHandle);
38863d99982SDamjan Jovanovic         sSocket.setOption( osl_Socket_OptionReuseAddr, 1 );//sal_True);
38963d99982SDamjan Jovanovic         sal_Bool bOK1 = sSocket.bind( saSocketAddr );
39063d99982SDamjan Jovanovic         ASSERT_TRUE(bOK1 == sal_True) << "bind SocketAddr failed";
39163d99982SDamjan Jovanovic 
39263d99982SDamjan Jovanovic         sal_Int32 newPort = sSocket.getLocalPort();
39363d99982SDamjan Jovanovic         //t_print("#new port is %d\n", newPort );
39463d99982SDamjan Jovanovic 
39563d99982SDamjan 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.";
39663d99982SDamjan Jovanovic 
39763d99982SDamjan Jovanovic     }
39863d99982SDamjan Jovanovic 
TEST_F(setPort,setPort_003)39963d99982SDamjan Jovanovic     TEST_F(setPort, setPort_003)
40063d99982SDamjan Jovanovic     {
40163d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP);
40263d99982SDamjan Jovanovic         sal_Bool bOK = saSocketAddr.setPort( IP_PORT_INVAL );
40363d99982SDamjan Jovanovic         //on Linux, getPort return 34463
40463d99982SDamjan Jovanovic         //t_print("#Port number is %d \n", saSocketAddr.getPort( ));
40563d99982SDamjan Jovanovic 
40663d99982SDamjan Jovanovic         ASSERT_TRUE(( ( 1 <= saSocketAddr.getPort( ) ) && ( 65535 >= saSocketAddr.getPort( ) ) &&( bOK == sal_True ) ) ||
40763d99982SDamjan 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.";
40863d99982SDamjan Jovanovic     }
40963d99982SDamjan Jovanovic 
41063d99982SDamjan Jovanovic     /* this is not a inet-addr => can't set port */
TEST_F(setPort,setPort_004)41163d99982SDamjan Jovanovic     TEST_F(setPort, setPort_004)
41263d99982SDamjan Jovanovic     {
41363d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("123.345.67.89"), IP_PORT_FTP);
41463d99982SDamjan Jovanovic         sal_Bool bOK = saSocketAddr.setPort( IP_PORT_MYPORT );
41563d99982SDamjan Jovanovic 
41663d99982SDamjan Jovanovic         ASSERT_TRUE(bOK == sal_False) << "test for setPort( ) function: set an invalid address with valid port. it should return error.";
41763d99982SDamjan Jovanovic     }
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 
43363d99982SDamjan Jovanovic 	class setAddr : public ::testing::Test
434cdf0e10cSrcweir 	{
435cdf0e10cSrcweir 	public:
43663d99982SDamjan Jovanovic 	}; // class setAddr
437cdf0e10cSrcweir 
TEST_F(setAddr,setAddr_001)43863d99982SDamjan Jovanovic     TEST_F(setAddr, setAddr_001)
43963d99982SDamjan Jovanovic     {
44063d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP );
44163d99982SDamjan Jovanovic         saSocketAddr.setAddr( UStringIPToByteSequence( rtl::OUString::createFromAscii("127.0.0.1") ) );
44263d99982SDamjan Jovanovic         ::rtl::ByteSequence bsSocketAddr = saSocketAddr.getAddr( 0 );
44363d99982SDamjan Jovanovic         sal_Bool bOK = sal_False;
444cdf0e10cSrcweir 
44563d99982SDamjan Jovanovic         // if ( ( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) && ( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) )
44663d99982SDamjan Jovanovic         //  bOK = sal_True;
44763d99982SDamjan Jovanovic         bOK = ifIpv4is( bsSocketAddr, 127, 0, 0, 1 );
448cdf0e10cSrcweir 
44963d99982SDamjan 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 ";
45063d99982SDamjan Jovanovic     }
451cdf0e10cSrcweir 
452cdf0e10cSrcweir 	/** testing the method:
453cdf0e10cSrcweir 		inline ::rtl::ByteSequence  SAL_CALL getAddr( oslSocketResult *pResult = 0 ) const;
454cdf0e10cSrcweir 	*/
455cdf0e10cSrcweir 
45663d99982SDamjan Jovanovic 	class getAddr : public ::testing::Test
457cdf0e10cSrcweir 	{
458cdf0e10cSrcweir 	public:
45963d99982SDamjan Jovanovic 	}; // class getAddr
460cdf0e10cSrcweir 
TEST_F(getAddr,getAddr_001)46163d99982SDamjan Jovanovic     TEST_F(getAddr, getAddr_001)
46263d99982SDamjan Jovanovic     {
46363d99982SDamjan Jovanovic         oslSocketResult SocketResult;
46463d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP );
46563d99982SDamjan Jovanovic         ::rtl::ByteSequence bsSocketAddr = saSocketAddr.getAddr( &SocketResult );
466cdf0e10cSrcweir 
46763d99982SDamjan Jovanovic         sal_Bool bOK = sal_False;
468cdf0e10cSrcweir 
46963d99982SDamjan Jovanovic         //if ( ( osl_Socket_Ok == SocketResult ) &&( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) &&( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) )
47063d99982SDamjan Jovanovic         //  bOK = sal_True;
47163d99982SDamjan Jovanovic         bOK = ifIpv4is( bsSocketAddr, 127, 0, 0, 1 );
472cdf0e10cSrcweir 
47363d99982SDamjan 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)";
47463d99982SDamjan Jovanovic     }
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 
48463d99982SDamjan Jovanovic 	class operator_equal : public ::testing::Test
485cdf0e10cSrcweir 	{
486cdf0e10cSrcweir 	public:
48763d99982SDamjan Jovanovic 	}; // class operator_equal
488cdf0e10cSrcweir 
TEST_F(operator_equal,operator_equal_001)48963d99982SDamjan Jovanovic     TEST_F(operator_equal, operator_equal_001)
49063d99982SDamjan Jovanovic     {
49163d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET);
49263d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddrEqual( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP );
493cdf0e10cSrcweir 
49463d99982SDamjan Jovanovic         saSocketAddrEqual = saSocketAddr;
49563d99982SDamjan Jovanovic         sal_Bool bOK = sal_False;
49663d99982SDamjan Jovanovic         ::rtl::ByteSequence bsSocketAddr = saSocketAddrEqual.getAddr( 0 );
497cdf0e10cSrcweir 
49863d99982SDamjan Jovanovic         // if ( ( IP_PORT_TELNET == saSocketAddrEqual.getPort( ) ) &&( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) &&( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) )
49963d99982SDamjan Jovanovic         if ( ( IP_PORT_TELNET == saSocketAddrEqual.getPort( ) ) &&  ( ifIpv4is( bsSocketAddr, 127, 0, 0, 1 ) == sal_True ) )
50063d99982SDamjan Jovanovic             bOK = sal_True;
501cdf0e10cSrcweir 
50263d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == bOK) << "test for operator_equal() function: use operator= to assign Ip1 to Ip2, check its modification.";
50363d99982SDamjan Jovanovic     }
504cdf0e10cSrcweir 
505cdf0e10cSrcweir 
TEST_F(operator_equal,operator_equal_002)50663d99982SDamjan Jovanovic     TEST_F(operator_equal, operator_equal_002)
50763d99982SDamjan Jovanovic     {
50863d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.199"), IP_PORT_TELNET);
50963d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddrEqual( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP );
510cdf0e10cSrcweir 
51163d99982SDamjan Jovanovic         saSocketAddrEqual = saSocketAddr;
51263d99982SDamjan Jovanovic         ASSERT_TRUE(IP_PORT_TELNET == saSocketAddrEqual.getPort( )) << "after assign, the assigned SocketAddr is not same as the original Addr";
51363d99982SDamjan Jovanovic         saSocketAddrEqual.setPort( IP_PORT_MYPORT3 );
51463d99982SDamjan Jovanovic         saSocketAddr.setPort( IP_PORT_HTTP2 );
515cdf0e10cSrcweir 
51663d99982SDamjan 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.";
51763d99982SDamjan Jovanovic     }
518cdf0e10cSrcweir 
TEST_F(operator_equal,operator_equal_const_001)51963d99982SDamjan Jovanovic     TEST_F(operator_equal, operator_equal_const_001)
52063d99982SDamjan Jovanovic     {
52163d99982SDamjan Jovanovic         const ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET);
52263d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddrEqual( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP );
523cdf0e10cSrcweir 
52463d99982SDamjan Jovanovic         saSocketAddrEqual = saSocketAddr;
52563d99982SDamjan Jovanovic         sal_Bool bOK = sal_False;
52663d99982SDamjan Jovanovic         ::rtl::ByteSequence bsSocketAddr = saSocketAddrEqual.getAddr( 0 );
527cdf0e10cSrcweir 
52863d99982SDamjan Jovanovic         // if ( ( IP_PORT_TELNET == saSocketAddrEqual.getPort( ) ) &&( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) &&( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) )
52963d99982SDamjan Jovanovic         if ( ( IP_PORT_TELNET == saSocketAddrEqual.getPort( ) ) && ifIpv4is( bsSocketAddr, 127, 0, 0, 1 ) == sal_True )
53063d99982SDamjan Jovanovic             bOK = sal_True;
531cdf0e10cSrcweir 
53263d99982SDamjan 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.";
53363d99982SDamjan Jovanovic     }
534cdf0e10cSrcweir 
TEST_F(operator_equal,operator_equal_const_002)53563d99982SDamjan Jovanovic     TEST_F(operator_equal, operator_equal_const_002)
53663d99982SDamjan Jovanovic     {
53763d99982SDamjan Jovanovic         const ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET);
53863d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddrEqual( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP );
539cdf0e10cSrcweir 
54063d99982SDamjan Jovanovic         saSocketAddrEqual = saSocketAddr;
54163d99982SDamjan Jovanovic         saSocketAddrEqual.setPort( IP_PORT_HTTP1 );
542cdf0e10cSrcweir 
54363d99982SDamjan 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.";
54463d99982SDamjan Jovanovic     }
545cdf0e10cSrcweir 
TEST_F(operator_equal,operator_equal_assign_001)54663d99982SDamjan Jovanovic     TEST_F(operator_equal, operator_equal_assign_001)
54763d99982SDamjan Jovanovic     {
54863d99982SDamjan Jovanovic         ::osl::SocketAddr* pSocketAddr = new ::osl::SocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET );
54963d99982SDamjan Jovanovic             ASSERT_TRUE(pSocketAddr != NULL) << "check for new SocketAddr";
55063d99982SDamjan Jovanovic             ::osl::SocketAddr* pSocketAddrAssign = new ::osl::SocketAddr( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP );
55163d99982SDamjan Jovanovic             oslSocketAddr poslSocketAddr = pSocketAddr->getHandle( );
55263d99982SDamjan Jovanovic             //if( m_handle ) osl_destroySocketAddr( m_handle ); so pSocketAddrAssign had been destroyed and then point to pSocketAddr
55363d99982SDamjan Jovanovic             pSocketAddrAssign->assign(poslSocketAddr, SAL_NO_COPY);
554cdf0e10cSrcweir 
55563d99982SDamjan 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 
55763d99982SDamjan Jovanovic             delete pSocketAddrAssign;
55863d99982SDamjan Jovanovic     }
559cdf0e10cSrcweir 
TEST_F(operator_equal,operator_is_equal_001)56063d99982SDamjan Jovanovic     TEST_F(operator_equal, operator_is_equal_001)
56163d99982SDamjan Jovanovic     {
56263d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET);
56363d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddrequal( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET );
564cdf0e10cSrcweir 
56563d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == ( saSocketAddrequal == saSocketAddr.getHandle( ) )) << "test for operator_equal_equal() function: check two identical Address.";
56663d99982SDamjan Jovanovic     }
567cdf0e10cSrcweir 
TEST_F(operator_equal,operator_is_equal_002)56863d99982SDamjan Jovanovic     TEST_F(operator_equal, operator_is_equal_002)
56963d99982SDamjan Jovanovic     {
57063d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP);
57163d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddrequal( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET );
572cdf0e10cSrcweir 
57363d99982SDamjan Jovanovic         ASSERT_TRUE(sal_False == ( saSocketAddrequal == saSocketAddr.getHandle( ) )) << "test for operator_equal_equal() function: check two different Address.";
57463d99982SDamjan Jovanovic     }
575cdf0e10cSrcweir 
576cdf0e10cSrcweir 
577cdf0e10cSrcweir 	/** testing the method:
578cdf0e10cSrcweir 		inline oslSocketAddr SAL_CALL getHandle() const;
579cdf0e10cSrcweir 	*/
580cdf0e10cSrcweir 
58163d99982SDamjan Jovanovic 	class getSocketAddrHandle : public ::testing::Test
582cdf0e10cSrcweir 	{
583cdf0e10cSrcweir 	public:
58463d99982SDamjan Jovanovic 	}; // class getSocketAddrHandle
585cdf0e10cSrcweir 
TEST_F(getSocketAddrHandle,getSocketAddrHandle_001)58663d99982SDamjan Jovanovic     TEST_F(getSocketAddrHandle, getSocketAddrHandle_001)
58763d99982SDamjan Jovanovic     {
58863d99982SDamjan Jovanovic         ::osl::SocketAddr* pSocketAddr = new ::osl::SocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 );
58963d99982SDamjan Jovanovic             ASSERT_TRUE(pSocketAddr != NULL) << "check for new SocketAddr";
59063d99982SDamjan Jovanovic             oslSocketAddr psaOSLSocketAddr = pSocketAddr->getHandle( );
59163d99982SDamjan Jovanovic             ::osl::SocketAddr* pSocketAddrCopy = new ::osl::SocketAddr( psaOSLSocketAddr, SAL_NO_COPY );
592cdf0e10cSrcweir 
59363d99982SDamjan 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 
59563d99982SDamjan Jovanovic             delete pSocketAddrCopy;
59663d99982SDamjan Jovanovic     }
597cdf0e10cSrcweir 
TEST_F(getSocketAddrHandle,getSocketAddrHandle_002)59863d99982SDamjan Jovanovic     TEST_F(getSocketAddrHandle, getSocketAddrHandle_002)
59963d99982SDamjan Jovanovic     {
60063d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("deuce.PRC.Sun.COM"), IP_PORT_MYPORT4 );
60163d99982SDamjan Jovanovic         oslSocketAddr poslSocketAddr = saSocketAddr.getHandle( );
602cdf0e10cSrcweir 
60363d99982SDamjan Jovanovic         sal_Bool bOK = ( saSocketAddr == poslSocketAddr );
60463d99982SDamjan Jovanovic         //t_print("getSocketAddrHandle_002\n");
60563d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == bOK) << "test for getHandle() function: use getHandle() function as an intermediate way to create identical address.";
60663d99982SDamjan Jovanovic     }
607cdf0e10cSrcweir 
608cdf0e10cSrcweir 	/** testing the method:
609cdf0e10cSrcweir 		static inline ::rtl::OUString SAL_CALL getLocalHostname( oslSocketResult *pResult = 0);
610cdf0e10cSrcweir 	*/
611cdf0e10cSrcweir 
61263d99982SDamjan Jovanovic 	class getLocalHostname : public ::testing::Test
613cdf0e10cSrcweir 	{
614cdf0e10cSrcweir 	public:
61563d99982SDamjan Jovanovic 	}; // class getLocalHostname
616cdf0e10cSrcweir 
61763d99982SDamjan Jovanovic     /* the process of getLocalHostname: 1.gethostname (same as /bin/hostname) returned name A
61863d99982SDamjan Jovanovic        2. search A in /etc/hosts, if there is an alias name is A, return the name in the same row
61963d99982SDamjan Jovanovic     */
62063d99982SDamjan Jovanovic 
TEST_F(getLocalHostname,getLocalHostname_000)62163d99982SDamjan Jovanovic     TEST_F(getLocalHostname, getLocalHostname_000)
62263d99982SDamjan Jovanovic         {
62363d99982SDamjan Jovanovic             // _osl_getFullQualifiedDomainName( );
62463d99982SDamjan Jovanovic             oslSocketResult aResult = osl_Socket_Error;
62563d99982SDamjan Jovanovic             rtl::OUString suHostname = osl::SocketAddr::getLocalHostname(&aResult);
62663d99982SDamjan Jovanovic             ASSERT_TRUE(aResult == osl_Socket_Ok) << "getLocalHostname failed";
62763d99982SDamjan Jovanovic         }
62863d99982SDamjan Jovanovic 
TEST_F(getLocalHostname,getLocalHostname_001)62963d99982SDamjan Jovanovic     TEST_F(getLocalHostname, getLocalHostname_001)
63063d99982SDamjan Jovanovic     {
63163d99982SDamjan Jovanovic         oslSocketResult *pResult = NULL;
63263d99982SDamjan Jovanovic         //printSocketResult(*pResult);
63363d99982SDamjan Jovanovic         ::rtl::OUString suResult = ::osl::SocketAddr::getLocalHostname( pResult );
63463d99982SDamjan Jovanovic 
63563d99982SDamjan Jovanovic         // LLA: IMHO localhost, or hostname by itself should be ok.
63663d99982SDamjan Jovanovic         rtl::OUString suThisHost = getThisHostname( );
63763d99982SDamjan Jovanovic         bool bOk = false;
63863d99982SDamjan Jovanovic         if (suThisHost.equals(rtl::OUString::createFromAscii("localhost")))
63963d99982SDamjan Jovanovic         {
64063d99982SDamjan Jovanovic             bOk = true;
64163d99982SDamjan Jovanovic         }
64263d99982SDamjan Jovanovic         else
64363d99982SDamjan Jovanovic         {
64463d99982SDamjan Jovanovic             if (suThisHost.equals(suResult))
645cdf0e10cSrcweir             {
646cdf0e10cSrcweir                 bOk = true;
647cdf0e10cSrcweir             }
64863d99982SDamjan Jovanovic         }
649cdf0e10cSrcweir 
65063d99982SDamjan Jovanovic         ::rtl::OUString suError;
65163d99982SDamjan Jovanovic         suError = outputError(suResult, getThisHostname( ), "test for getLocalHostname() function");
652cdf0e10cSrcweir 
65363d99982SDamjan Jovanovic         ASSERT_TRUE(bOk == true) << suError.pData;
65463d99982SDamjan Jovanovic     }
655cdf0e10cSrcweir 
656cdf0e10cSrcweir 	/** testing the method:
657cdf0e10cSrcweir 		static inline void SAL_CALL resolveHostname( const ::rtl::OUString & strHostName , SocketAddr & Addr );
658cdf0e10cSrcweir 	*/
659cdf0e10cSrcweir 
66063d99982SDamjan Jovanovic 	class resolveHostname : public ::testing::Test
661cdf0e10cSrcweir 	{
662cdf0e10cSrcweir 	public:
66363d99982SDamjan Jovanovic 	}; // class resolveHostname
664cdf0e10cSrcweir 
TEST_F(resolveHostname,resolveHostname_001)66563d99982SDamjan Jovanovic     TEST_F(resolveHostname, resolveHostname_001)
66663d99982SDamjan Jovanovic     {
66763d99982SDamjan Jovanovic         ::osl::SocketAddr saSocketAddr;
66863d99982SDamjan Jovanovic         ::osl::SocketAddr::resolveHostname( rtl::OUString::createFromAscii("127.0.0.1"), saSocketAddr );
66963d99982SDamjan Jovanovic         ::rtl::ByteSequence bsSocketAddr = saSocketAddr.getAddr( 0 );
67063d99982SDamjan Jovanovic         sal_Bool bOK = sal_False;
671cdf0e10cSrcweir 
67263d99982SDamjan Jovanovic          if ( ( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) &&( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) )
67363d99982SDamjan Jovanovic             bOK = sal_True;
674cdf0e10cSrcweir 
67563d99982SDamjan Jovanovic         ASSERT_TRUE(sal_True == bOK) << "test for resolveHostname() function: try to resolve localhost to 127.0.0.1.";
67663d99982SDamjan Jovanovic     }
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 
68463d99982SDamjan Jovanovic 	class gettheServicePort : public ::testing::Test
685cdf0e10cSrcweir 	{
686cdf0e10cSrcweir 	public:
687cdf0e10cSrcweir 	}; // class gettheServicePort
688cdf0e10cSrcweir 
TEST_F(gettheServicePort,gettheServicePort_001)68963d99982SDamjan Jovanovic     TEST_F(gettheServicePort, gettheServicePort_001)
69063d99982SDamjan Jovanovic     {
69163d99982SDamjan Jovanovic         rtl::OUString suServiceFTP  = rtl::OUString::createFromAscii( "ftp" );
69263d99982SDamjan Jovanovic         rtl::OUString suProtocolTCP = rtl::OUString::createFromAscii( "tcp" );
69363d99982SDamjan Jovanovic 
69463d99982SDamjan Jovanovic         ASSERT_TRUE(IP_PORT_FTP== ::osl::SocketAddr::getServicePort( suServiceFTP, suProtocolTCP )) << "test for getServicePort() function: try to get ftp service port on TCP protocol.";
69563d99982SDamjan Jovanovic     }
69663d99982SDamjan Jovanovic 
TEST_F(gettheServicePort,gettheServicePort_002)69763d99982SDamjan Jovanovic     TEST_F(gettheServicePort, gettheServicePort_002)
69863d99982SDamjan Jovanovic     {
69963d99982SDamjan Jovanovic         rtl::OUString suServiceTELNET  = rtl::OUString::createFromAscii( "telnet" );
70063d99982SDamjan Jovanovic         rtl::OUString suProtocolTCP    = rtl::OUString::createFromAscii( "tcp" );
70163d99982SDamjan Jovanovic         ASSERT_TRUE(IP_PORT_TELNET== ::osl::SocketAddr::getServicePort( suServiceTELNET, suProtocolTCP )) << "test for getServicePort() function: try to get telnet service port on TCP protocol.";
70263d99982SDamjan Jovanovic     }
70363d99982SDamjan Jovanovic 
TEST_F(gettheServicePort,gettheServicePort_003)70463d99982SDamjan Jovanovic     TEST_F(gettheServicePort, gettheServicePort_003)
70563d99982SDamjan Jovanovic     {
70663d99982SDamjan Jovanovic     //Solaris has no service called "https", please see /etc/services
70763d99982SDamjan Jovanovic         rtl::OUString suServiceNETBIOS = rtl::OUString::createFromAscii( "netbios-dgm" );
70863d99982SDamjan Jovanovic         rtl::OUString suProtocolUDP    = rtl::OUString::createFromAscii( "udp" );
70963d99982SDamjan 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.";
71063d99982SDamjan Jovanovic     }
71163d99982SDamjan Jovanovic 
TEST_F(gettheServicePort,gettheServicePort_004)71263d99982SDamjan Jovanovic     TEST_F(gettheServicePort, gettheServicePort_004)
71363d99982SDamjan Jovanovic     {
71463d99982SDamjan Jovanovic         rtl::OUString suProtocolUDP    = rtl::OUString::createFromAscii( "udp" );
71563d99982SDamjan 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.";
71663d99982SDamjan Jovanovic     }
71763d99982SDamjan Jovanovic 
718cdf0e10cSrcweir 	/** testing the method:
719cdf0e10cSrcweir 
720cdf0e10cSrcweir 	*/
721cdf0e10cSrcweir 
72263d99982SDamjan Jovanovic 	class getFamilyOfSocketAddr : public ::testing::Test
723cdf0e10cSrcweir 	{
724cdf0e10cSrcweir 	public:
725cdf0e10cSrcweir 	}; // class getFamilyOfSocketAddr
726cdf0e10cSrcweir 
TEST_F(getFamilyOfSocketAddr,getFamilyOfSocketAddr_001)72763d99982SDamjan Jovanovic     TEST_F(getFamilyOfSocketAddr, getFamilyOfSocketAddr_001)
72863d99982SDamjan Jovanovic     {
72963d99982SDamjan Jovanovic             ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 );
73063d99982SDamjan Jovanovic             oslSocketAddr psaOSLSocketAddr = saSocketAddr.getHandle( );
73163d99982SDamjan Jovanovic             ASSERT_EQ(
73263d99982SDamjan Jovanovic                 osl_Socket_FamilyInet,
73363d99982SDamjan Jovanovic                 osl_getFamilyOfSocketAddr( psaOSLSocketAddr ) );
734cdf0e10cSrcweir 
73563d99982SDamjan Jovanovic         ASSERT_TRUE(osl_getFamilyOfSocketAddr( psaOSLSocketAddr ) == osl_Socket_FamilyInet) << "test for osl_getFamilyOfSocketAddr.";
73663d99982SDamjan Jovanovic     }
737cdf0e10cSrcweir 
738cdf0e10cSrcweir } // namespace osl_SocketAddr
739cdf0e10cSrcweir 
main(int argc,char ** argv)74063d99982SDamjan Jovanovic int main(int argc, char **argv)
74163d99982SDamjan Jovanovic {
74263d99982SDamjan Jovanovic     ::testing::InitGoogleTest(&argc, argv);
74363d99982SDamjan Jovanovic     return RUN_ALL_TESTS();
74463d99982SDamjan Jovanovic }
745