llhost_test.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:7k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file llhost_test.cpp
  3.  * @author Adroit
  4.  * @date 2007-02
  5.  * @brief llhost test cases.
  6.  *
  7.  * $LicenseInfo:firstyear=2007&license=viewergpl$
  8.  * 
  9.  * Copyright (c) 2007-2010, Linden Research, Inc.
  10.  * 
  11.  * Second Life Viewer Source Code
  12.  * The source code in this file ("Source Code") is provided by Linden Lab
  13.  * to you under the terms of the GNU General Public License, version 2.0
  14.  * ("GPL"), unless you have obtained a separate licensing agreement
  15.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  16.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  17.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  18.  * 
  19.  * There are special exceptions to the terms and conditions of the GPL as
  20.  * it is applied to this Source Code. View the full text of the exception
  21.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  22.  * online at
  23.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  24.  * 
  25.  * By copying, modifying or distributing this software, you acknowledge
  26.  * that you have read and understood your obligations described above,
  27.  * and agree to abide by those obligations.
  28.  * 
  29.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  30.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  31.  * COMPLETENESS OR PERFORMANCE.
  32.  * $/LicenseInfo$
  33.  */
  34.  
  35. #include "linden_common.h"
  36. #include "../llhost.h"
  37. #include "../test/lltut.h"
  38. namespace tut
  39. {
  40. struct host_data
  41. {
  42. };
  43. typedef test_group<host_data> host_test;
  44. typedef host_test::object host_object;
  45. tut::host_test host_testcase("llhost");
  46. template<> template<>
  47. void host_object::test<1>()
  48. {
  49. LLHost host;
  50. ensure("IP address is not NULL", (0 == host.getAddress()) && (0 == host.getPort()) && !host.isOk());
  51. }
  52. template<> template<>
  53. void host_object::test<2>()
  54. {
  55. U32 ip_addr = 0xc098017d;
  56. U32 port = 8080;
  57. LLHost host(ip_addr, port);
  58. ensure("IP address is invalid", ip_addr == host.getAddress());
  59. ensure("Port Number is invalid", port == host.getPort());
  60. ensure("IP address and port number both should be ok", host.isOk());
  61. }
  62. template<> template<>
  63. void host_object::test<3>()
  64. {
  65. const char* str = "192.168.1.1";
  66. U32 port = 8080;
  67. LLHost host(str, port);
  68. ensure("IP address could not be processed", (host.getAddress() == ip_string_to_u32(str)));
  69. ensure("Port Number is invalid", (port == host.getPort()));
  70. }
  71. template<> template<>
  72. void host_object::test<4>()
  73. {
  74. U32 ip = ip_string_to_u32("192.168.1.1");
  75. U32 port = 22;
  76. U64 ip_port = (((U64) ip) << 32) | port;
  77. LLHost host(ip_port);
  78. ensure("IP address is invalid", ip == host.getAddress());
  79. ensure("Port Number is invalid", port == host.getPort());
  80. }
  81. template<> template<>
  82. void host_object::test<5>()
  83. {
  84. std::string ip_port_string = "192.168.1.1:8080";
  85. U32 ip = ip_string_to_u32("192.168.1.1");
  86. U32 port = 8080;
  87. LLHost host(ip_port_string);
  88. ensure("IP address from IP:port is invalid", ip == host.getAddress());
  89. ensure("Port Number from from IP:port is invalid", port == host.getPort());
  90. }
  91. template<> template<>
  92. void host_object::test<6>()
  93. {
  94. U32 ip = 0xc098017d, port = 8080;
  95. LLHost host;
  96. host.set(ip,port);
  97. ensure("IP address is invalid", (ip == host.getAddress()));
  98. ensure("Port Number is invalid", (port == host.getPort()));
  99. }
  100. template<> template<>
  101. void host_object::test<7>()
  102. {
  103. const char* str = "192.168.1.1";
  104. U32 port = 8080, ip;
  105. LLHost host;
  106. host.set(str,port);
  107. ip = ip_string_to_u32(str);
  108. ensure("IP address is invalid", (ip == host.getAddress()));
  109. ensure("Port Number is invalid", (port == host.getPort()));
  110. str = "64.233.187.99";
  111. ip = ip_string_to_u32(str);
  112. host.setAddress(str);
  113. ensure("IP address is invalid", (ip == host.getAddress()));
  114. ip = 0xc098017b;
  115. host.setAddress(ip);
  116. ensure("IP address is invalid", (ip == host.getAddress()));
  117. // should still use the old port
  118. ensure("Port Number is invalid", (port == host.getPort()));
  119. port = 8084;
  120. host.setPort(port);
  121. ensure("Port Number is invalid", (port == host.getPort()));
  122. // should still use the old address
  123. ensure("IP address is invalid", (ip == host.getAddress()));
  124. }
  125. template<> template<>
  126. void host_object::test<8>()
  127. {
  128. const std::string str("192.168.1.1");
  129. U32 port = 8080;
  130. LLHost host;
  131. host.set(str,port);
  132. std::string ip_string = host.getIPString();
  133. ensure("Function Failed", (ip_string == str));
  134. std::string ip_string_port = host.getIPandPort();
  135. ensure("Function Failed", (ip_string_port == "192.168.1.1:8080"));
  136. }
  137. // getHostName()  and setHostByName
  138. template<> template<>
  139. void host_object::test<9>()
  140. {
  141. // skip("setHostByName("google.com"); getHostName() -> (e.g.) "yx-in-f100.1e100.net"");
  142. std::string hostStr = "linux.org";
  143. LLHost host;
  144. host.setHostByName(hostStr);
  145. // reverse DNS will likely result in appending of some
  146. // sub-domain to the main hostname. so look for
  147. // the main domain name and not do the exact compare
  148. std::string hostname = host.getHostName();
  149. try
  150. {
  151. ensure("getHostName failed", hostname.find(hostStr) != std::string::npos);
  152. }
  153. catch (const std::exception&)
  154. {
  155. std::cerr << "set '" << hostStr << "'; reported '" << hostname << "'" << std::endl;
  156. throw;
  157. }
  158. }
  159. // setHostByName for dotted IP
  160. template<> template<>
  161. void host_object::test<10>()
  162. {
  163. std::string hostStr = "64.233.167.99";
  164. LLHost host;
  165. host.setHostByName(hostStr);
  166. ensure("SetHostByName for dotted IP Address failed", host.getAddress() == ip_string_to_u32(hostStr.c_str()));
  167. }
  168. template<> template<>
  169. void host_object::test<11>()
  170. {
  171. LLHost host1(0xc098017d, 8080);
  172. LLHost host2 = host1;
  173. ensure("Both IP addresses are not same", (host1.getAddress() == host2.getAddress()));
  174. ensure("Both port numbers are not same", (host1.getPort() == host2.getPort()));
  175. }
  176. template<> template<>
  177. void host_object::test<12>()
  178. {
  179. LLHost host1("192.168.1.1", 8080);
  180. std::string str1 = "192.168.1.1:8080";
  181. std::ostringstream stream;
  182. stream << host1;
  183. ensure("Operator << failed", ( stream.str()== str1));
  184. // There is no istream >> llhost operator.
  185. //std::istringstream is(stream.str());
  186. //LLHost host2;
  187. //is >> host2;
  188. //ensure("Operator >> failed. Not compatible with <<", host1 == host2);
  189. }
  190. // operators ==, !=, <
  191. template<> template<>
  192. void host_object::test<13>()
  193. {
  194. U32 ip_addr = 0xc098017d;
  195. U32 port = 8080;
  196. LLHost host1(ip_addr, port);
  197. LLHost host2(ip_addr, port);
  198. ensure("operator== failed", host1 == host2);
  199. // change port
  200. host2.setPort(7070);
  201. ensure("operator!= failed", host1 != host2);
  202. // set port back to 8080 and change IP address now
  203. host2.setPort(8080);
  204. host2.setAddress(ip_addr+10);
  205. ensure("operator!= failed", host1 != host2);
  206. ensure("operator<  failed", host1 < host2);
  207. // set IP address back to same value and change port
  208. host2.setAddress(ip_addr);
  209. host2.setPort(host1.getPort() + 10);
  210. ensure("operator<  failed", host1 < host2);
  211. }
  212. // invalid ip address string
  213. template<> template<>
  214. void host_object::test<14>()
  215. {
  216. LLHost host1("10.0.1.2", 6143);
  217. ensure("10.0.1.2 should be a valid address", host1.isOk());
  218. LLHost host2("booger-brains", 6143);
  219. ensure("booger-brains should be an invalid ip addess", !host2.isOk());
  220. LLHost host3("255.255.255.255", 6143);
  221. ensure("255.255.255.255 should be valid broadcast address", host3.isOk());
  222. }
  223. }