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 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) 96*63d99982SDamjan Jovanovic { 97*63d99982SDamjan Jovanovic /// SocketAddr constructor. 98*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr; 99cdf0e10cSrcweir 100*63d99982SDamjan Jovanovic // oslSocketResult aResult; 101*63d99982SDamjan Jovanovic // rtl::OUString suHost = saSocketAddr.getLocalHostname( &aResult); 102cdf0e10cSrcweir 103*63d99982SDamjan Jovanovic // 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"; 106*63d99982SDamjan Jovanovic } 107cdf0e10cSrcweir 108*63d99982SDamjan Jovanovic TEST_F(ctors, ctors_none_000) 109*63d99982SDamjan Jovanovic { 110*63d99982SDamjan Jovanovic /// SocketAddr constructor. 111*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr; 112cdf0e10cSrcweir 113*63d99982SDamjan Jovanovic oslSocketResult aResult; 114*63d99982SDamjan Jovanovic rtl::OUString suHost = saSocketAddr.getLocalHostname( &aResult); 115*63d99982SDamjan Jovanovic rtl::OUString suHost2 = getThisHostname(); 116cdf0e10cSrcweir 117*63d99982SDamjan Jovanovic sal_Bool bOk = compareUString(suHost, suHost2); 118cdf0e10cSrcweir 119*63d99982SDamjan Jovanovic rtl::OUString suError = rtl::OUString::createFromAscii("Host names should be the same. From SocketAddr.getLocalHostname() it is'"); 120*63d99982SDamjan Jovanovic suError += suHost; 121*63d99982SDamjan Jovanovic suError += rtl::OUString::createFromAscii("', from getThisHostname() it is '"); 122*63d99982SDamjan Jovanovic suError += suHost2; 123*63d99982SDamjan Jovanovic suError += rtl::OUString::createFromAscii("'."); 124cdf0e10cSrcweir 125*63d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOk) << suError.pData; 126*63d99982SDamjan Jovanovic } 127cdf0e10cSrcweir 128*63d99982SDamjan Jovanovic TEST_F(ctors, ctors_copy) 129*63d99982SDamjan Jovanovic { 130*63d99982SDamjan Jovanovic /// SocketAddr copy constructor. 131*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 ); 132*63d99982SDamjan Jovanovic ::osl::SocketAddr saCopySocketAddr( saSocketAddr ); 133cdf0e10cSrcweir 134*63d99982SDamjan Jovanovic 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."; 137*63d99982SDamjan Jovanovic } 138cdf0e10cSrcweir 139*63d99982SDamjan Jovanovic TEST_F(ctors, ctors_copy_no_001) 140*63d99982SDamjan Jovanovic { 141cdf0e10cSrcweir #if 0 142*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 ); 143*63d99982SDamjan Jovanovic oslSocketAddr psaOSLSocketAddr = saSocketAddr.getHandle( ); 144cdf0e10cSrcweir 145*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddrCopy( psaOSLSocketAddr, SAL_NO_COPY ); 146*63d99982SDamjan Jovanovic 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 150*63d99982SDamjan Jovanovic ::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 153*63d99982SDamjan Jovanovic oslSocketAddr psaOSLSocketAddr = pSocketAddr->getHandle( ); 154cdf0e10cSrcweir 155*63d99982SDamjan Jovanovic ::osl::SocketAddr* pSocketAddrCopy = new ::osl::SocketAddr( psaOSLSocketAddr, SAL_NO_COPY ); 156cdf0e10cSrcweir 157*63d99982SDamjan Jovanovic 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 160*63d99982SDamjan Jovanovic delete pSocketAddrCopy; 161*63d99982SDamjan Jovanovic // LLA: don't do this also: delete pSocketAddr; 162*63d99982SDamjan Jovanovic } 163cdf0e10cSrcweir 164*63d99982SDamjan Jovanovic TEST_F(ctors, ctors_copy_no_002) 165*63d99982SDamjan Jovanovic { 166*63d99982SDamjan Jovanovic ::osl::SocketAddr* pSocketAddr = new ::osl::SocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 ); 167*63d99982SDamjan Jovanovic ASSERT_TRUE(pSocketAddr != NULL) << "check for new SocketAddr"; 168*63d99982SDamjan Jovanovic oslSocketAddr psaOSLSocketAddr = pSocketAddr->getHandle( ); 169*63d99982SDamjan Jovanovic ::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 173*63d99982SDamjan Jovanovic delete pSocketAddrCopy; 174*63d99982SDamjan Jovanovic } 175cdf0e10cSrcweir 176*63d99982SDamjan Jovanovic TEST_F(ctors, ctors_copy_handle_001) 177*63d99982SDamjan Jovanovic { 178*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 ); 179*63d99982SDamjan Jovanovic ::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."; 182*63d99982SDamjan Jovanovic } 183cdf0e10cSrcweir 184*63d99982SDamjan Jovanovic TEST_F(ctors, ctors_copy_handle_002) 185*63d99982SDamjan Jovanovic { 186*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 ); 187*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddrCopy( saSocketAddr.getHandle( ) ); 188*63d99982SDamjan Jovanovic 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."; 191*63d99982SDamjan Jovanovic } 192cdf0e10cSrcweir 193*63d99982SDamjan Jovanovic TEST_F(ctors, ctors_hostname_port_001) 194*63d99982SDamjan Jovanovic { 195*63d99982SDamjan Jovanovic /// tcpip-specif constructor. 196*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP ); 197*63d99982SDamjan Jovanovic printUString( saSocketAddr.getHostname( ), "ctors_hostname_port_001:getHostname"); 198cdf0e10cSrcweir 199*63d99982SDamjan Jovanovic ASSERT_TRUE(saSocketAddr.is( ) == sal_True && 200*63d99982SDamjan Jovanovic ( 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."; 202*63d99982SDamjan Jovanovic } 203cdf0e10cSrcweir 204*63d99982SDamjan Jovanovic //same as is_002 205*63d99982SDamjan Jovanovic TEST_F(ctors, ctors_hostname_port_002) 206*63d99982SDamjan Jovanovic { 207*63d99982SDamjan Jovanovic /// tcpip-specif constructor. 208*63d99982SDamjan Jovanovic ::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"; 211*63d99982SDamjan Jovanovic } 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 222cdf0e10cSrcweir 223*63d99982SDamjan Jovanovic TEST_F(is, is_001) 224*63d99982SDamjan Jovanovic { 225*63d99982SDamjan Jovanovic ::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."; 228*63d99982SDamjan Jovanovic } 229*63d99982SDamjan Jovanovic // refer to setPort_003() 230*63d99982SDamjan Jovanovic TEST_F(is, is_002) 231*63d99982SDamjan Jovanovic { 232*63d99982SDamjan Jovanovic ::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"; 235*63d99982SDamjan Jovanovic } 236cdf0e10cSrcweir 237*63d99982SDamjan Jovanovic TEST_F(is, is_003) 238*63d99982SDamjan Jovanovic { 239*63d99982SDamjan Jovanovic ::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"; 242*63d99982SDamjan Jovanovic } 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) 261*63d99982SDamjan Jovanovic { 262*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.107"), IP_PORT_FTP ); 263*63d99982SDamjan Jovanovic rtl::OUString suResult = saSocketAddr.getHostname( 0 ); 264*63d99982SDamjan Jovanovic 265*63d99982SDamjan Jovanovic } 266*63d99982SDamjan Jovanovic 267*63d99982SDamjan Jovanovic /** it will search the Ip in current machine's /etc/hosts at first, if find, then return the 268*63d99982SDamjan Jovanovic mapped hostname, otherwise, it will search via DNS server, and often return hostname+ Domain name 269*63d99982SDamjan Jovanovic like "sceri.PRC.Sun.COM" 270*63d99982SDamjan Jovanovic The process is same as Socket::getLocalHost(), but getLocalHost can only return hostname of the current machine. 271*63d99982SDamjan Jovanovic */ 272*63d99982SDamjan Jovanovic TEST_F(getHostname, getHostname_001) 273*63d99982SDamjan Jovanovic { 274*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.107"), IP_PORT_FTP ); 275*63d99982SDamjan Jovanovic rtl::OUString suResult = saSocketAddr.getHostname( 0 ); 276*63d99982SDamjan Jovanovic rtl::OUString suError = outputError(suResult, rtl::OUString::createFromAscii("sceri.PRC.Sun.COM"), "test for getHostname(0)"); 277*63d99982SDamjan Jovanovic sal_Bool bOK = compareUString( suResult, rtl::OUString::createFromAscii("sceri.PRC.Sun.COM") ); 278*63d99982SDamjan Jovanovic // search the returned hostname in /etc/hosts, if find, and the IP in the row is same as IP 279*63d99982SDamjan Jovanovic // in the Addr, it's right also. 280*63d99982SDamjan Jovanovic if ( bOK == sal_False) 281*63d99982SDamjan Jovanovic { 282*63d99982SDamjan Jovanovic rtl::OString aString = ::rtl::OUStringToOString( suResult, RTL_TEXTENCODING_ASCII_US ); 283*63d99982SDamjan Jovanovic if ( compareUString( getIPbyName( aString ), rtl::OUString::createFromAscii("129.158.217.107") ) == sal_True ) 284*63d99982SDamjan Jovanovic bOK = sal_True; 285*63d99982SDamjan Jovanovic } 286*63d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK) << suError.pData; 287*63d99982SDamjan 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 291*63d99982SDamjan Jovanovic TEST_F(getHostname, getHostname_002) 292*63d99982SDamjan Jovanovic { 293*63d99982SDamjan Jovanovic rtl::OUString suHostname = rtl::OUString::createFromAscii("cn-1.germany.sun.com"); 294*63d99982SDamjan Jovanovic rtl::OString aString = ::rtl::OUStringToOString( suHostname, RTL_TEXTENCODING_ASCII_US ); 295*63d99982SDamjan Jovanovic rtl::OUString aHostIP = getIPbyName( aString ); 296*63d99982SDamjan Jovanovic 297*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_FTP ); 298*63d99982SDamjan Jovanovic sal_Bool bOK = saSocketAddr.setHostname( suHostname ); 299*63d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK) << "#SocketAddr.setHostname failed"; 300*63d99982SDamjan Jovanovic oslSocketResult aResult; 301*63d99982SDamjan Jovanovic rtl::OUString suResult = saSocketAddr.getHostname( &aResult ); 302*63d99982SDamjan Jovanovic ASSERT_TRUE(aResult == osl_Socket_Ok) << "SocketAddr.getHostname failed."; 303*63d99982SDamjan Jovanovic 304*63d99982SDamjan Jovanovic rtl::OUString suError = outputError(suResult, suHostname, "test for getHostname(0)"); 305*63d99982SDamjan Jovanovic bOK = compareUString( suResult, suHostname ); 306*63d99982SDamjan Jovanovic if ( bOK == sal_False) 307*63d99982SDamjan Jovanovic { 308*63d99982SDamjan Jovanovic rtl::OString aStringResult = ::rtl::OUStringToOString( suResult, RTL_TEXTENCODING_ASCII_US ); 309*63d99982SDamjan Jovanovic rtl::OString aStringHostname = ::rtl::OUStringToOString( suHostname, RTL_TEXTENCODING_ASCII_US ); 310*63d99982SDamjan Jovanovic if ( compareUString( getIPbyName( aStringResult ) , getIPbyName( aStringHostname ) ) == sal_True ) 311*63d99982SDamjan Jovanovic { 312*63d99982SDamjan Jovanovic bOK = sal_True; 313cdf0e10cSrcweir } 314*63d99982SDamjan Jovanovic } 315cdf0e10cSrcweir 316*63d99982SDamjan Jovanovic ASSERT_TRUE(sal_True == bOK) << suError.pData; 317*63d99982SDamjan Jovanovic } 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 327cdf0e10cSrcweir 328*63d99982SDamjan Jovanovic TEST_F(getPort, getPort_001) 329*63d99982SDamjan Jovanovic { 330*63d99982SDamjan Jovanovic ::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."; 333*63d99982SDamjan Jovanovic } 334cdf0e10cSrcweir 335*63d99982SDamjan Jovanovic TEST_F(getPort, getPort_002) 336*63d99982SDamjan Jovanovic { 337*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_INVAL ); 338cdf0e10cSrcweir 339*63d99982SDamjan Jovanovic //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)."; 342*63d99982SDamjan Jovanovic } 343*63d99982SDamjan Jovanovic //two cases will return OSL_INVALID_PORT: 1. not valid SocketAddr 344*63d99982SDamjan Jovanovic //2. SocketAddr family is not osl_Socket_FamilyInet, but case 2 could not be constructed 345*63d99982SDamjan Jovanovic TEST_F(getPort, getPort_003) 346*63d99982SDamjan Jovanovic { 347*63d99982SDamjan Jovanovic rtl::OUString suInvalidIP = rtl::OUString::createFromAscii("123.345.67.89"); 348*63d99982SDamjan Jovanovic ::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. "; 351*63d99982SDamjan 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 359*63d99982SDamjan Jovanovic class setPort : public ::testing::Test 360cdf0e10cSrcweir { 361cdf0e10cSrcweir public: 362cdf0e10cSrcweir }; // class setPort 363cdf0e10cSrcweir 364*63d99982SDamjan Jovanovic TEST_F(setPort, setPort_001) 365*63d99982SDamjan Jovanovic { 366*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP ); 367*63d99982SDamjan Jovanovic sal_Bool bOK = saSocketAddr.setPort( IP_PORT_TELNET ); 368*63d99982SDamjan Jovanovic 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."; 371*63d99982SDamjan Jovanovic } 372*63d99982SDamjan Jovanovic 373*63d99982SDamjan Jovanovic /** 0 to 1024 is known as the reserved port range (traditionally only root can assign programs to ports in 374*63d99982SDamjan Jovanovic this range) and the ephemeral port range from 1025 to 65535. 375*63d99982SDamjan Jovanovic As many of you programmers will know, when you specify the source port of 0 when you connect to a host, 376*63d99982SDamjan Jovanovic the OS automatically reassigns the port number to high numbered ephemeral port. The same happens if you 377*63d99982SDamjan Jovanovic try to bind a listening socket to port 0. 378*63d99982SDamjan Jovanovic http://www.securiteam.com/securityreviews/5XP0Q2AAKS.html 379*63d99982SDamjan Jovanovic another: http://www.muq.org/~cynbe/muq/mufref_564.html 380*63d99982SDamjan Jovanovic */ 381*63d99982SDamjan Jovanovic TEST_F(setPort, setPort_002) 382*63d99982SDamjan Jovanovic { 383*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP ); 384*63d99982SDamjan Jovanovic sal_Bool bOK = saSocketAddr.setPort( IP_PORT_ZERO ); 385*63d99982SDamjan Jovanovic 386*63d99982SDamjan Jovanovic oslSocket sHandle = osl_createSocket( osl_Socket_FamilyInet, osl_Socket_TypeStream, osl_Socket_ProtocolIp ); 387*63d99982SDamjan Jovanovic ::osl::Socket sSocket(sHandle); 388*63d99982SDamjan Jovanovic sSocket.setOption( osl_Socket_OptionReuseAddr, 1 );//sal_True); 389*63d99982SDamjan Jovanovic sal_Bool bOK1 = sSocket.bind( saSocketAddr ); 390*63d99982SDamjan Jovanovic ASSERT_TRUE(bOK1 == sal_True) << "bind SocketAddr failed"; 391*63d99982SDamjan Jovanovic 392*63d99982SDamjan Jovanovic sal_Int32 newPort = sSocket.getLocalPort(); 393*63d99982SDamjan Jovanovic //t_print("#new port is %d\n", newPort ); 394*63d99982SDamjan Jovanovic 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."; 396*63d99982SDamjan Jovanovic 397*63d99982SDamjan Jovanovic } 398*63d99982SDamjan Jovanovic 399*63d99982SDamjan Jovanovic TEST_F(setPort, setPort_003) 400*63d99982SDamjan Jovanovic { 401*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP); 402*63d99982SDamjan Jovanovic sal_Bool bOK = saSocketAddr.setPort( IP_PORT_INVAL ); 403*63d99982SDamjan Jovanovic //on Linux, getPort return 34463 404*63d99982SDamjan Jovanovic //t_print("#Port number is %d \n", saSocketAddr.getPort( )); 405*63d99982SDamjan Jovanovic 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."; 408*63d99982SDamjan Jovanovic } 409*63d99982SDamjan Jovanovic 410*63d99982SDamjan Jovanovic /* this is not a inet-addr => can't set port */ 411*63d99982SDamjan Jovanovic TEST_F(setPort, setPort_004) 412*63d99982SDamjan Jovanovic { 413*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("123.345.67.89"), IP_PORT_FTP); 414*63d99982SDamjan Jovanovic sal_Bool bOK = saSocketAddr.setPort( IP_PORT_MYPORT ); 415*63d99982SDamjan Jovanovic 416*63d99982SDamjan Jovanovic ASSERT_TRUE(bOK == sal_False) << "test for setPort( ) function: set an invalid address with valid port. it should return error."; 417*63d99982SDamjan 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 433*63d99982SDamjan Jovanovic class setAddr : public ::testing::Test 434cdf0e10cSrcweir { 435cdf0e10cSrcweir public: 436*63d99982SDamjan Jovanovic }; // class setAddr 437cdf0e10cSrcweir 438*63d99982SDamjan Jovanovic TEST_F(setAddr, setAddr_001) 439*63d99982SDamjan Jovanovic { 440*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP ); 441*63d99982SDamjan Jovanovic saSocketAddr.setAddr( UStringIPToByteSequence( rtl::OUString::createFromAscii("127.0.0.1") ) ); 442*63d99982SDamjan Jovanovic ::rtl::ByteSequence bsSocketAddr = saSocketAddr.getAddr( 0 ); 443*63d99982SDamjan Jovanovic sal_Bool bOK = sal_False; 444cdf0e10cSrcweir 445*63d99982SDamjan Jovanovic // if ( ( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) && ( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) ) 446*63d99982SDamjan Jovanovic // bOK = sal_True; 447*63d99982SDamjan Jovanovic 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 "; 450*63d99982SDamjan Jovanovic } 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 460cdf0e10cSrcweir 461*63d99982SDamjan Jovanovic TEST_F(getAddr, getAddr_001) 462*63d99982SDamjan Jovanovic { 463*63d99982SDamjan Jovanovic oslSocketResult SocketResult; 464*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_FTP ); 465*63d99982SDamjan Jovanovic ::rtl::ByteSequence bsSocketAddr = saSocketAddr.getAddr( &SocketResult ); 466cdf0e10cSrcweir 467*63d99982SDamjan Jovanovic sal_Bool bOK = sal_False; 468cdf0e10cSrcweir 469*63d99982SDamjan Jovanovic //if ( ( osl_Socket_Ok == SocketResult ) &&( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) &&( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) ) 470*63d99982SDamjan Jovanovic // bOK = sal_True; 471*63d99982SDamjan Jovanovic 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)"; 474*63d99982SDamjan 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 484*63d99982SDamjan Jovanovic class operator_equal : public ::testing::Test 485cdf0e10cSrcweir { 486cdf0e10cSrcweir public: 487*63d99982SDamjan Jovanovic }; // class operator_equal 488cdf0e10cSrcweir 489*63d99982SDamjan Jovanovic TEST_F(operator_equal, operator_equal_001) 490*63d99982SDamjan Jovanovic { 491*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET); 492*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddrEqual( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP ); 493cdf0e10cSrcweir 494*63d99982SDamjan Jovanovic saSocketAddrEqual = saSocketAddr; 495*63d99982SDamjan Jovanovic sal_Bool bOK = sal_False; 496*63d99982SDamjan Jovanovic ::rtl::ByteSequence bsSocketAddr = saSocketAddrEqual.getAddr( 0 ); 497cdf0e10cSrcweir 498*63d99982SDamjan Jovanovic // if ( ( IP_PORT_TELNET == saSocketAddrEqual.getPort( ) ) &&( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) &&( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) ) 499*63d99982SDamjan Jovanovic if ( ( IP_PORT_TELNET == saSocketAddrEqual.getPort( ) ) && ( ifIpv4is( bsSocketAddr, 127, 0, 0, 1 ) == sal_True ) ) 500*63d99982SDamjan Jovanovic 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."; 503*63d99982SDamjan Jovanovic } 504cdf0e10cSrcweir 505cdf0e10cSrcweir 506*63d99982SDamjan Jovanovic TEST_F(operator_equal, operator_equal_002) 507*63d99982SDamjan Jovanovic { 508*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.199"), IP_PORT_TELNET); 509*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddrEqual( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP ); 510cdf0e10cSrcweir 511*63d99982SDamjan Jovanovic saSocketAddrEqual = saSocketAddr; 512*63d99982SDamjan Jovanovic ASSERT_TRUE(IP_PORT_TELNET == saSocketAddrEqual.getPort( )) << "after assign, the assigned SocketAddr is not same as the original Addr"; 513*63d99982SDamjan Jovanovic saSocketAddrEqual.setPort( IP_PORT_MYPORT3 ); 514*63d99982SDamjan Jovanovic 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."; 517*63d99982SDamjan Jovanovic } 518cdf0e10cSrcweir 519*63d99982SDamjan Jovanovic TEST_F(operator_equal, operator_equal_const_001) 520*63d99982SDamjan Jovanovic { 521*63d99982SDamjan Jovanovic const ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET); 522*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddrEqual( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP ); 523cdf0e10cSrcweir 524*63d99982SDamjan Jovanovic saSocketAddrEqual = saSocketAddr; 525*63d99982SDamjan Jovanovic sal_Bool bOK = sal_False; 526*63d99982SDamjan Jovanovic ::rtl::ByteSequence bsSocketAddr = saSocketAddrEqual.getAddr( 0 ); 527cdf0e10cSrcweir 528*63d99982SDamjan Jovanovic // if ( ( IP_PORT_TELNET == saSocketAddrEqual.getPort( ) ) &&( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) &&( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) ) 529*63d99982SDamjan Jovanovic if ( ( IP_PORT_TELNET == saSocketAddrEqual.getPort( ) ) && ifIpv4is( bsSocketAddr, 127, 0, 0, 1 ) == sal_True ) 530*63d99982SDamjan Jovanovic 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."; 533*63d99982SDamjan Jovanovic } 534cdf0e10cSrcweir 535*63d99982SDamjan Jovanovic TEST_F(operator_equal, operator_equal_const_002) 536*63d99982SDamjan Jovanovic { 537*63d99982SDamjan Jovanovic const ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET); 538*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddrEqual( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP ); 539cdf0e10cSrcweir 540*63d99982SDamjan Jovanovic saSocketAddrEqual = saSocketAddr; 541*63d99982SDamjan Jovanovic 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."; 544*63d99982SDamjan Jovanovic } 545cdf0e10cSrcweir 546*63d99982SDamjan Jovanovic TEST_F(operator_equal, operator_equal_assign_001) 547*63d99982SDamjan Jovanovic { 548*63d99982SDamjan Jovanovic ::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"; 550*63d99982SDamjan Jovanovic ::osl::SocketAddr* pSocketAddrAssign = new ::osl::SocketAddr( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP ); 551*63d99982SDamjan Jovanovic oslSocketAddr poslSocketAddr = pSocketAddr->getHandle( ); 552*63d99982SDamjan Jovanovic //if( m_handle ) osl_destroySocketAddr( m_handle ); so pSocketAddrAssign had been destroyed and then point to pSocketAddr 553*63d99982SDamjan Jovanovic 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 557*63d99982SDamjan Jovanovic delete pSocketAddrAssign; 558*63d99982SDamjan Jovanovic } 559cdf0e10cSrcweir 560*63d99982SDamjan Jovanovic TEST_F(operator_equal, operator_is_equal_001) 561*63d99982SDamjan Jovanovic { 562*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("127.0.0.1"), IP_PORT_TELNET); 563*63d99982SDamjan Jovanovic ::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."; 566*63d99982SDamjan Jovanovic } 567cdf0e10cSrcweir 568*63d99982SDamjan Jovanovic TEST_F(operator_equal, operator_is_equal_002) 569*63d99982SDamjan Jovanovic { 570*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("129.158.217.202"), IP_PORT_FTP); 571*63d99982SDamjan Jovanovic ::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."; 574*63d99982SDamjan Jovanovic } 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) 587*63d99982SDamjan Jovanovic { 588*63d99982SDamjan Jovanovic ::osl::SocketAddr* pSocketAddr = new ::osl::SocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 ); 589*63d99982SDamjan Jovanovic ASSERT_TRUE(pSocketAddr != NULL) << "check for new SocketAddr"; 590*63d99982SDamjan Jovanovic oslSocketAddr psaOSLSocketAddr = pSocketAddr->getHandle( ); 591*63d99982SDamjan Jovanovic ::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 595*63d99982SDamjan Jovanovic delete pSocketAddrCopy; 596*63d99982SDamjan Jovanovic } 597cdf0e10cSrcweir 598*63d99982SDamjan Jovanovic TEST_F(getSocketAddrHandle, getSocketAddrHandle_002) 599*63d99982SDamjan Jovanovic { 600*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("deuce.PRC.Sun.COM"), IP_PORT_MYPORT4 ); 601*63d99982SDamjan Jovanovic oslSocketAddr poslSocketAddr = saSocketAddr.getHandle( ); 602cdf0e10cSrcweir 603*63d99982SDamjan Jovanovic sal_Bool bOK = ( saSocketAddr == poslSocketAddr ); 604*63d99982SDamjan Jovanovic //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."; 606*63d99982SDamjan Jovanovic } 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 616cdf0e10cSrcweir 617*63d99982SDamjan Jovanovic /* the process of getLocalHostname: 1.gethostname (same as /bin/hostname) returned name A 618*63d99982SDamjan Jovanovic 2. search A in /etc/hosts, if there is an alias name is A, return the name in the same row 619*63d99982SDamjan Jovanovic */ 620*63d99982SDamjan Jovanovic 621*63d99982SDamjan Jovanovic TEST_F(getLocalHostname, getLocalHostname_000) 622*63d99982SDamjan Jovanovic { 623*63d99982SDamjan Jovanovic // _osl_getFullQualifiedDomainName( ); 624*63d99982SDamjan Jovanovic oslSocketResult aResult = osl_Socket_Error; 625*63d99982SDamjan Jovanovic rtl::OUString suHostname = osl::SocketAddr::getLocalHostname(&aResult); 626*63d99982SDamjan Jovanovic ASSERT_TRUE(aResult == osl_Socket_Ok) << "getLocalHostname failed"; 627*63d99982SDamjan Jovanovic } 628*63d99982SDamjan Jovanovic 629*63d99982SDamjan Jovanovic TEST_F(getLocalHostname, getLocalHostname_001) 630*63d99982SDamjan Jovanovic { 631*63d99982SDamjan Jovanovic oslSocketResult *pResult = NULL; 632*63d99982SDamjan Jovanovic //printSocketResult(*pResult); 633*63d99982SDamjan Jovanovic ::rtl::OUString suResult = ::osl::SocketAddr::getLocalHostname( pResult ); 634*63d99982SDamjan Jovanovic 635*63d99982SDamjan Jovanovic // LLA: IMHO localhost, or hostname by itself should be ok. 636*63d99982SDamjan Jovanovic rtl::OUString suThisHost = getThisHostname( ); 637*63d99982SDamjan Jovanovic bool bOk = false; 638*63d99982SDamjan Jovanovic if (suThisHost.equals(rtl::OUString::createFromAscii("localhost"))) 639*63d99982SDamjan Jovanovic { 640*63d99982SDamjan Jovanovic bOk = true; 641*63d99982SDamjan Jovanovic } 642*63d99982SDamjan Jovanovic else 643*63d99982SDamjan Jovanovic { 644*63d99982SDamjan Jovanovic if (suThisHost.equals(suResult)) 645cdf0e10cSrcweir { 646cdf0e10cSrcweir bOk = true; 647cdf0e10cSrcweir } 648*63d99982SDamjan Jovanovic } 649cdf0e10cSrcweir 650*63d99982SDamjan Jovanovic ::rtl::OUString suError; 651*63d99982SDamjan Jovanovic suError = outputError(suResult, getThisHostname( ), "test for getLocalHostname() function"); 652cdf0e10cSrcweir 653*63d99982SDamjan Jovanovic ASSERT_TRUE(bOk == true) << suError.pData; 654*63d99982SDamjan Jovanovic } 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 664cdf0e10cSrcweir 665*63d99982SDamjan Jovanovic TEST_F(resolveHostname, resolveHostname_001) 666*63d99982SDamjan Jovanovic { 667*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr; 668*63d99982SDamjan Jovanovic ::osl::SocketAddr::resolveHostname( rtl::OUString::createFromAscii("127.0.0.1"), saSocketAddr ); 669*63d99982SDamjan Jovanovic ::rtl::ByteSequence bsSocketAddr = saSocketAddr.getAddr( 0 ); 670*63d99982SDamjan Jovanovic sal_Bool bOK = sal_False; 671cdf0e10cSrcweir 672*63d99982SDamjan Jovanovic if ( ( bsSocketAddr[0] == 127 ) && ( bsSocketAddr[1] == 0 ) &&( bsSocketAddr[2] == 0 ) && ( bsSocketAddr[3] == 1 ) ) 673*63d99982SDamjan Jovanovic 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."; 676*63d99982SDamjan 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 684*63d99982SDamjan Jovanovic class gettheServicePort : public ::testing::Test 685cdf0e10cSrcweir { 686cdf0e10cSrcweir public: 687cdf0e10cSrcweir }; // class gettheServicePort 688cdf0e10cSrcweir 689*63d99982SDamjan Jovanovic TEST_F(gettheServicePort, gettheServicePort_001) 690*63d99982SDamjan Jovanovic { 691*63d99982SDamjan Jovanovic rtl::OUString suServiceFTP = rtl::OUString::createFromAscii( "ftp" ); 692*63d99982SDamjan Jovanovic rtl::OUString suProtocolTCP = rtl::OUString::createFromAscii( "tcp" ); 693*63d99982SDamjan Jovanovic 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."; 695*63d99982SDamjan Jovanovic } 696*63d99982SDamjan Jovanovic 697*63d99982SDamjan Jovanovic TEST_F(gettheServicePort, gettheServicePort_002) 698*63d99982SDamjan Jovanovic { 699*63d99982SDamjan Jovanovic rtl::OUString suServiceTELNET = rtl::OUString::createFromAscii( "telnet" ); 700*63d99982SDamjan Jovanovic 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."; 702*63d99982SDamjan Jovanovic } 703*63d99982SDamjan Jovanovic 704*63d99982SDamjan Jovanovic TEST_F(gettheServicePort, gettheServicePort_003) 705*63d99982SDamjan Jovanovic { 706*63d99982SDamjan Jovanovic //Solaris has no service called "https", please see /etc/services 707*63d99982SDamjan Jovanovic rtl::OUString suServiceNETBIOS = rtl::OUString::createFromAscii( "netbios-dgm" ); 708*63d99982SDamjan Jovanovic 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."; 710*63d99982SDamjan Jovanovic } 711*63d99982SDamjan Jovanovic 712*63d99982SDamjan Jovanovic TEST_F(gettheServicePort, gettheServicePort_004) 713*63d99982SDamjan Jovanovic { 714*63d99982SDamjan Jovanovic 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."; 716*63d99982SDamjan Jovanovic } 717*63d99982SDamjan Jovanovic 718cdf0e10cSrcweir /** testing the method: 719cdf0e10cSrcweir 720cdf0e10cSrcweir */ 721cdf0e10cSrcweir 722*63d99982SDamjan Jovanovic class getFamilyOfSocketAddr : public ::testing::Test 723cdf0e10cSrcweir { 724cdf0e10cSrcweir public: 725cdf0e10cSrcweir }; // class getFamilyOfSocketAddr 726cdf0e10cSrcweir 727*63d99982SDamjan Jovanovic TEST_F(getFamilyOfSocketAddr, getFamilyOfSocketAddr_001) 728*63d99982SDamjan Jovanovic { 729*63d99982SDamjan Jovanovic ::osl::SocketAddr saSocketAddr( rtl::OUString::createFromAscii("localhost"), IP_PORT_HTTP1 ); 730*63d99982SDamjan Jovanovic oslSocketAddr psaOSLSocketAddr = saSocketAddr.getHandle( ); 731*63d99982SDamjan Jovanovic ASSERT_EQ( 732*63d99982SDamjan Jovanovic osl_Socket_FamilyInet, 733*63d99982SDamjan Jovanovic osl_getFamilyOfSocketAddr( psaOSLSocketAddr ) ); 734cdf0e10cSrcweir 735*63d99982SDamjan Jovanovic ASSERT_TRUE(osl_getFamilyOfSocketAddr( psaOSLSocketAddr ) == osl_Socket_FamilyInet) << "test for osl_getFamilyOfSocketAddr."; 736*63d99982SDamjan Jovanovic } 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