diff options
Diffstat (limited to 'indra/llmessage/tests/llhost_test.cpp')
-rw-r--r-- | indra/llmessage/tests/llhost_test.cpp | 478 |
1 files changed, 239 insertions, 239 deletions
diff --git a/indra/llmessage/tests/llhost_test.cpp b/indra/llmessage/tests/llhost_test.cpp index efca1bbfca..a66655ad6c 100644 --- a/indra/llmessage/tests/llhost_test.cpp +++ b/indra/llmessage/tests/llhost_test.cpp @@ -7,25 +7,25 @@ * $LicenseInfo:firstyear=2007&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ - + #include "linden_common.h" #include "../llhost.h" @@ -34,238 +34,238 @@ namespace tut { - struct host_data - { - }; - typedef test_group<host_data> host_test; - typedef host_test::object host_object; - tut::host_test host_testcase("LLHost"); - - - template<> template<> - void host_object::test<1>() - { - LLHost host; - ensure("IP address is not NULL", (0 == host.getAddress()) && (0 == host.getPort()) && !host.isOk()); - } - template<> template<> - void host_object::test<2>() - { - U32 ip_addr = 0xc098017d; - U32 port = 8080; - LLHost host(ip_addr, port); - ensure("IP address is invalid", ip_addr == host.getAddress()); - ensure("Port Number is invalid", port == host.getPort()); - ensure("IP address and port number both should be ok", host.isOk()); - } - - template<> template<> - void host_object::test<3>() - { - const char* str = "192.168.1.1"; - U32 port = 8080; - LLHost host(str, port); - ensure("IP address could not be processed", (host.getAddress() == ip_string_to_u32(str))); - ensure("Port Number is invalid", (port == host.getPort())); - } - - template<> template<> - void host_object::test<4>() - { - U32 ip = ip_string_to_u32("192.168.1.1"); - U32 port = 22; - U64 ip_port = (((U64) ip) << 32) | port; - LLHost host(ip_port); - ensure("IP address is invalid", ip == host.getAddress()); - ensure("Port Number is invalid", port == host.getPort()); - } - - template<> template<> - void host_object::test<5>() - { - std::string ip_port_string = "192.168.1.1:8080"; - U32 ip = ip_string_to_u32("192.168.1.1"); - U32 port = 8080; - - LLHost host(ip_port_string); - ensure("IP address from IP:port is invalid", ip == host.getAddress()); - ensure("Port Number from from IP:port is invalid", port == host.getPort()); - } - - template<> template<> - void host_object::test<6>() - { - U32 ip = 0xc098017d, port = 8080; - LLHost host; - host.set(ip,port); - ensure("IP address is invalid", (ip == host.getAddress())); - ensure("Port Number is invalid", (port == host.getPort())); - } - - template<> template<> - void host_object::test<7>() - { - const char* str = "192.168.1.1"; - U32 port = 8080, ip; - LLHost host; - host.set(str,port); - ip = ip_string_to_u32(str); - ensure("IP address is invalid", (ip == host.getAddress())); - ensure("Port Number is invalid", (port == host.getPort())); - - str = "64.233.187.99"; - ip = ip_string_to_u32(str); - host.setAddress(str); - ensure("IP address is invalid", (ip == host.getAddress())); - - ip = 0xc098017b; - host.setAddress(ip); - ensure("IP address is invalid", (ip == host.getAddress())); - // should still use the old port - ensure("Port Number is invalid", (port == host.getPort())); - - port = 8084; - host.setPort(port); - ensure("Port Number is invalid", (port == host.getPort())); - // should still use the old address - ensure("IP address is invalid", (ip == host.getAddress())); - } - - template<> template<> - void host_object::test<8>() - { - const std::string str("192.168.1.1"); - U32 port = 8080; - LLHost host; - host.set(str,port); - - std::string ip_string = host.getIPString(); - ensure("Function Failed", (ip_string == str)); - - std::string ip_string_port = host.getIPandPort(); - ensure("Function Failed", (ip_string_port == "192.168.1.1:8080")); - } - - -// getHostName() and setHostByName - template<> template<> - void host_object::test<9>() - { - skip("this test is irreparably flaky"); -// skip("setHostByName(\"google.com\"); getHostName() -> (e.g.) \"yx-in-f100.1e100.net\""); - // nat: is it reasonable to expect LLHost::getHostName() to echo - // back something resembling the string passed to setHostByName()? - // - // If that's not even reasonable, would a round trip in the /other/ - // direction make more sense? (Call getHostName() for something with - // known IP address; call setHostByName(); verify IP address) - // - // Failing that... is there a plausible way to test getHostName() and - // setHostByName()? Hopefully without putting up a dummy local DNS - // server? - - // monty: If you don't control the DNS server or the DNS configuration - // for the test point then, no, none of these will necessarily be - // reliable and may start to fail at any time. Forward translation - // is subject to CNAME records and round-robin address assignment. - // Reverse lookup is 1-to-many and is more and more likely to have - // nothing to do with the forward translation. - // - // So the test is increasingly meaningless on a real network. - - std::string hostStr = "lindenlab.com"; - LLHost host; - host.setHostByName(hostStr); - - // reverse DNS will likely result in appending of some - // sub-domain to the main hostname. so look for - // the main domain name and not do the exact compare - - std::string hostname = host.getHostName(); - try - { - ensure("getHostName failed", hostname.find(hostStr) != std::string::npos); - } - catch (const std::exception&) - { - std::cerr << "set '" << hostStr << "'; reported '" << hostname << "'" << std::endl; - throw; - } - } - -// setHostByName for dotted IP - template<> template<> - void host_object::test<10>() - { - std::string hostStr = "64.233.167.99"; - LLHost host; - host.setHostByName(hostStr); - ensure("SetHostByName for dotted IP Address failed", host.getAddress() == ip_string_to_u32(hostStr.c_str())); - } - - template<> template<> - void host_object::test<11>() - { - LLHost host1(0xc098017d, 8080); - LLHost host2 = host1; - ensure("Both IP addresses are not same", (host1.getAddress() == host2.getAddress())); - ensure("Both port numbers are not same", (host1.getPort() == host2.getPort())); - } - - template<> template<> - void host_object::test<12>() - { - LLHost host1("192.168.1.1", 8080); - std::string str1 = "192.168.1.1:8080"; - std::ostringstream stream; - stream << host1; - ensure("Operator << failed", ( stream.str()== str1)); - - // There is no istream >> llhost operator. - //std::istringstream is(stream.str()); - //LLHost host2; - //is >> host2; - //ensure("Operator >> failed. Not compatible with <<", host1 == host2); - } - - // operators ==, !=, < - template<> template<> - void host_object::test<13>() - { - U32 ip_addr = 0xc098017d; - U32 port = 8080; - LLHost host1(ip_addr, port); - LLHost host2(ip_addr, port); - ensure("operator== failed", host1 == host2); - - // change port - host2.setPort(7070); - ensure("operator!= failed", host1 != host2); - - // set port back to 8080 and change IP address now - host2.setPort(8080); - host2.setAddress(ip_addr+10); - ensure("operator!= failed", host1 != host2); - - ensure("operator< failed", host1 < host2); - - // set IP address back to same value and change port - host2.setAddress(ip_addr); - host2.setPort(host1.getPort() + 10); - ensure("operator< failed", host1 < host2); - } - - // invalid ip address string - template<> template<> - void host_object::test<14>() - { - LLHost host1("10.0.1.2", 6143); - ensure("10.0.1.2 should be a valid address", host1.isOk()); - - LLHost host2("booger-brains", 6143); - ensure("booger-brains should be an invalid ip addess", !host2.isOk()); - - LLHost host3("255.255.255.255", 6143); - ensure("255.255.255.255 should be valid broadcast address", host3.isOk()); - } + struct host_data + { + }; + typedef test_group<host_data> host_test; + typedef host_test::object host_object; + tut::host_test host_testcase("LLHost"); + + + template<> template<> + void host_object::test<1>() + { + LLHost host; + ensure("IP address is not NULL", (0 == host.getAddress()) && (0 == host.getPort()) && !host.isOk()); + } + template<> template<> + void host_object::test<2>() + { + U32 ip_addr = 0xc098017d; + U32 port = 8080; + LLHost host(ip_addr, port); + ensure("IP address is invalid", ip_addr == host.getAddress()); + ensure("Port Number is invalid", port == host.getPort()); + ensure("IP address and port number both should be ok", host.isOk()); + } + + template<> template<> + void host_object::test<3>() + { + const char* str = "192.168.1.1"; + U32 port = 8080; + LLHost host(str, port); + ensure("IP address could not be processed", (host.getAddress() == ip_string_to_u32(str))); + ensure("Port Number is invalid", (port == host.getPort())); + } + + template<> template<> + void host_object::test<4>() + { + U32 ip = ip_string_to_u32("192.168.1.1"); + U32 port = 22; + U64 ip_port = (((U64) ip) << 32) | port; + LLHost host(ip_port); + ensure("IP address is invalid", ip == host.getAddress()); + ensure("Port Number is invalid", port == host.getPort()); + } + + template<> template<> + void host_object::test<5>() + { + std::string ip_port_string = "192.168.1.1:8080"; + U32 ip = ip_string_to_u32("192.168.1.1"); + U32 port = 8080; + + LLHost host(ip_port_string); + ensure("IP address from IP:port is invalid", ip == host.getAddress()); + ensure("Port Number from from IP:port is invalid", port == host.getPort()); + } + + template<> template<> + void host_object::test<6>() + { + U32 ip = 0xc098017d, port = 8080; + LLHost host; + host.set(ip,port); + ensure("IP address is invalid", (ip == host.getAddress())); + ensure("Port Number is invalid", (port == host.getPort())); + } + + template<> template<> + void host_object::test<7>() + { + const char* str = "192.168.1.1"; + U32 port = 8080, ip; + LLHost host; + host.set(str,port); + ip = ip_string_to_u32(str); + ensure("IP address is invalid", (ip == host.getAddress())); + ensure("Port Number is invalid", (port == host.getPort())); + + str = "64.233.187.99"; + ip = ip_string_to_u32(str); + host.setAddress(str); + ensure("IP address is invalid", (ip == host.getAddress())); + + ip = 0xc098017b; + host.setAddress(ip); + ensure("IP address is invalid", (ip == host.getAddress())); + // should still use the old port + ensure("Port Number is invalid", (port == host.getPort())); + + port = 8084; + host.setPort(port); + ensure("Port Number is invalid", (port == host.getPort())); + // should still use the old address + ensure("IP address is invalid", (ip == host.getAddress())); + } + + template<> template<> + void host_object::test<8>() + { + const std::string str("192.168.1.1"); + U32 port = 8080; + LLHost host; + host.set(str,port); + + std::string ip_string = host.getIPString(); + ensure("Function Failed", (ip_string == str)); + + std::string ip_string_port = host.getIPandPort(); + ensure("Function Failed", (ip_string_port == "192.168.1.1:8080")); + } + + +// getHostName() and setHostByName + template<> template<> + void host_object::test<9>() + { + skip("this test is irreparably flaky"); +// skip("setHostByName(\"google.com\"); getHostName() -> (e.g.) \"yx-in-f100.1e100.net\""); + // nat: is it reasonable to expect LLHost::getHostName() to echo + // back something resembling the string passed to setHostByName()? + // + // If that's not even reasonable, would a round trip in the /other/ + // direction make more sense? (Call getHostName() for something with + // known IP address; call setHostByName(); verify IP address) + // + // Failing that... is there a plausible way to test getHostName() and + // setHostByName()? Hopefully without putting up a dummy local DNS + // server? + + // monty: If you don't control the DNS server or the DNS configuration + // for the test point then, no, none of these will necessarily be + // reliable and may start to fail at any time. Forward translation + // is subject to CNAME records and round-robin address assignment. + // Reverse lookup is 1-to-many and is more and more likely to have + // nothing to do with the forward translation. + // + // So the test is increasingly meaningless on a real network. + + std::string hostStr = "lindenlab.com"; + LLHost host; + host.setHostByName(hostStr); + + // reverse DNS will likely result in appending of some + // sub-domain to the main hostname. so look for + // the main domain name and not do the exact compare + + std::string hostname = host.getHostName(); + try + { + ensure("getHostName failed", hostname.find(hostStr) != std::string::npos); + } + catch (const std::exception&) + { + std::cerr << "set '" << hostStr << "'; reported '" << hostname << "'" << std::endl; + throw; + } + } + +// setHostByName for dotted IP + template<> template<> + void host_object::test<10>() + { + std::string hostStr = "64.233.167.99"; + LLHost host; + host.setHostByName(hostStr); + ensure("SetHostByName for dotted IP Address failed", host.getAddress() == ip_string_to_u32(hostStr.c_str())); + } + + template<> template<> + void host_object::test<11>() + { + LLHost host1(0xc098017d, 8080); + LLHost host2 = host1; + ensure("Both IP addresses are not same", (host1.getAddress() == host2.getAddress())); + ensure("Both port numbers are not same", (host1.getPort() == host2.getPort())); + } + + template<> template<> + void host_object::test<12>() + { + LLHost host1("192.168.1.1", 8080); + std::string str1 = "192.168.1.1:8080"; + std::ostringstream stream; + stream << host1; + ensure("Operator << failed", ( stream.str()== str1)); + + // There is no istream >> llhost operator. + //std::istringstream is(stream.str()); + //LLHost host2; + //is >> host2; + //ensure("Operator >> failed. Not compatible with <<", host1 == host2); + } + + // operators ==, !=, < + template<> template<> + void host_object::test<13>() + { + U32 ip_addr = 0xc098017d; + U32 port = 8080; + LLHost host1(ip_addr, port); + LLHost host2(ip_addr, port); + ensure("operator== failed", host1 == host2); + + // change port + host2.setPort(7070); + ensure("operator!= failed", host1 != host2); + + // set port back to 8080 and change IP address now + host2.setPort(8080); + host2.setAddress(ip_addr+10); + ensure("operator!= failed", host1 != host2); + + ensure("operator< failed", host1 < host2); + + // set IP address back to same value and change port + host2.setAddress(ip_addr); + host2.setPort(host1.getPort() + 10); + ensure("operator< failed", host1 < host2); + } + + // invalid ip address string + template<> template<> + void host_object::test<14>() + { + LLHost host1("10.0.1.2", 6143); + ensure("10.0.1.2 should be a valid address", host1.isOk()); + + LLHost host2("booger-brains", 6143); + ensure("booger-brains should be an invalid ip addess", !host2.isOk()); + + LLHost host3("255.255.255.255", 6143); + ensure("255.255.255.255 should be valid broadcast address", host3.isOk()); + } } |