PageRenderTime 62ms CodeModel.GetById 33ms RepoModel.GetById 1ms app.codeStats 0ms

/test/php/TestClient.php

https://github.com/wmorgan/thrift
PHP | 379 lines | 265 code | 50 blank | 64 comment | 32 complexity | 734338d714e90ddc2fbb524800e88779 MD5 | raw file
  1. <?php
  2. if (!isset($GEN_DIR)) {
  3. $GEN_DIR = 'gen-php';
  4. }
  5. if (!isset($MODE)) {
  6. $MODE = 'normal';
  7. }
  8. /** Set the Thrift root */
  9. $GLOBALS['THRIFT_ROOT'] = '../../lib/php/src';
  10. /** Include the Thrift base */
  11. require_once $GLOBALS['THRIFT_ROOT'].'/Thrift.php';
  12. /** Include the binary protocol */
  13. require_once $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php';
  14. /** Include the socket layer */
  15. require_once $GLOBALS['THRIFT_ROOT'].'/transport/TSocketPool.php';
  16. /** Include the socket layer */
  17. require_once $GLOBALS['THRIFT_ROOT'].'/transport/TBufferedTransport.php';
  18. echo '==============================='."\n";
  19. echo ' SAFE TO IGNORE THESE IN TEST'."\n";
  20. echo '==============================='."\n";
  21. /** Include the generated code */
  22. require_once $GEN_DIR.'/ThriftTest.php';
  23. require_once $GEN_DIR.'/ThriftTest_types.php';
  24. echo '==============================='."\n";
  25. echo ' END OF SAFE ERRORS SECTION'."\n";
  26. echo '==============================='."\n\n";
  27. $host = 'localhost';
  28. $port = 9090;
  29. if ($argc > 1) {
  30. $host = $argv[0];
  31. }
  32. if ($argc > 2) {
  33. $host = $argv[1];
  34. }
  35. $hosts = array('localhost');
  36. $socket = new TSocket($host, $port);
  37. $socket = new TSocketPool($hosts, $port);
  38. $socket->setDebug(TRUE);
  39. if ($MODE == 'inline') {
  40. $transport = $socket;
  41. $testClient = new ThriftTestClient($transport);
  42. } else {
  43. $bufferedSocket = new TBufferedTransport($socket, 1024, 1024);
  44. $transport = $bufferedSocket;
  45. $protocol = new TBinaryProtocol($transport);
  46. $testClient = new ThriftTestClient($protocol);
  47. }
  48. $transport->open();
  49. $start = microtime(true);
  50. /**
  51. * VOID TEST
  52. */
  53. print_r("testVoid()");
  54. $testClient->testVoid();
  55. print_r(" = void\n");
  56. /**
  57. * STRING TEST
  58. */
  59. print_r("testString(\"Test\")");
  60. $s = $testClient->testString("Test");
  61. print_r(" = \"$s\"\n");
  62. /**
  63. * BYTE TEST
  64. */
  65. print_r("testByte(1)");
  66. $u8 = $testClient->testByte(1);
  67. print_r(" = $u8\n");
  68. /**
  69. * I32 TEST
  70. */
  71. print_r("testI32(-1)");
  72. $i32 = $testClient->testI32(-1);
  73. print_r(" = $i32\n");
  74. /**
  75. * I64 TEST
  76. */
  77. print_r("testI64(-34359738368)");
  78. $i64 = $testClient->testI64(-34359738368);
  79. print_r(" = $i64\n");
  80. /**
  81. * DOUBLE TEST
  82. */
  83. print_r("testDouble(-852.234234234)");
  84. $dub = $testClient->testDouble(-852.234234234);
  85. print_r(" = $dub\n");
  86. /**
  87. * STRUCT TEST
  88. */
  89. print_r("testStruct({\"Zero\", 1, -3, -5})");
  90. $out = new Xtruct();
  91. $out->string_thing = "Zero";
  92. $out->byte_thing = 1;
  93. $out->i32_thing = -3;
  94. $out->i64_thing = -5;
  95. $in = $testClient->testStruct($out);
  96. print_r(" = {\"".$in->string_thing."\", ".
  97. $in->byte_thing.", ".
  98. $in->i32_thing.", ".
  99. $in->i64_thing."}\n");
  100. /**
  101. * NESTED STRUCT TEST
  102. */
  103. print_r("testNest({1, {\"Zero\", 1, -3, -5}), 5}");
  104. $out2 = new Xtruct2();
  105. $out2->byte_thing = 1;
  106. $out2->struct_thing = $out;
  107. $out2->i32_thing = 5;
  108. $in2 = $testClient->testNest($out2);
  109. $in = $in2->struct_thing;
  110. print_r(" = {".$in2->byte_thing.", {\"".
  111. $in->string_thing."\", ".
  112. $in->byte_thing.", ".
  113. $in->i32_thing.", ".
  114. $in->i64_thing."}, ".
  115. $in2->i32_thing."}\n");
  116. /**
  117. * MAP TEST
  118. */
  119. $mapout = array();
  120. for ($i = 0; $i < 5; ++$i) {
  121. $mapout[$i] = $i-10;
  122. }
  123. print_r("testMap({");
  124. $first = true;
  125. foreach ($mapout as $key => $val) {
  126. if ($first) {
  127. $first = false;
  128. } else {
  129. print_r(", ");
  130. }
  131. print_r("$key => $val");
  132. }
  133. print_r("})");
  134. $mapin = $testClient->testMap($mapout);
  135. print_r(" = {");
  136. $first = true;
  137. foreach ($mapin as $key => $val) {
  138. if ($first) {
  139. $first = false;
  140. } else {
  141. print_r(", ");
  142. }
  143. print_r("$key => $val");
  144. }
  145. print_r("}\n");
  146. /**
  147. * SET TEST
  148. */
  149. $setout = array();;
  150. for ($i = -2; $i < 3; ++$i) {
  151. $setout []= $i;
  152. }
  153. print_r("testSet({");
  154. $first = true;
  155. foreach ($setout as $val) {
  156. if ($first) {
  157. $first = false;
  158. } else {
  159. print_r(", ");
  160. }
  161. print_r($val);
  162. }
  163. print_r("})");
  164. $setin = $testClient->testSet($setout);
  165. print_r(" = {");
  166. $first = true;
  167. foreach ($setin as $val) {
  168. if ($first) {
  169. $first = false;
  170. } else {
  171. print_r(", ");
  172. }
  173. print_r($val);
  174. }
  175. print_r("}\n");
  176. /**
  177. * LIST TEST
  178. */
  179. $listout = array();
  180. for ($i = -2; $i < 3; ++$i) {
  181. $listout []= $i;
  182. }
  183. print_r("testList({");
  184. $first = true;
  185. foreach ($listout as $val) {
  186. if ($first) {
  187. $first = false;
  188. } else {
  189. print_r(", ");
  190. }
  191. print_r($val);
  192. }
  193. print_r("})");
  194. $listin = $testClient->testList($listout);
  195. print_r(" = {");
  196. $first = true;
  197. foreach ($listin as $val) {
  198. if ($first) {
  199. $first = false;
  200. } else {
  201. print_r(", ");
  202. }
  203. print_r($val);
  204. }
  205. print_r("}\n");
  206. /**
  207. * ENUM TEST
  208. */
  209. print_r("testEnum(ONE)");
  210. $ret = $testClient->testEnum(Numberz::ONE);
  211. print_r(" = $ret\n");
  212. print_r("testEnum(TWO)");
  213. $ret = $testClient->testEnum(Numberz::TWO);
  214. print_r(" = $ret\n");
  215. print_r("testEnum(THREE)");
  216. $ret = $testClient->testEnum(Numberz::THREE);
  217. print_r(" = $ret\n");
  218. print_r("testEnum(FIVE)");
  219. $ret = $testClient->testEnum(Numberz::FIVE);
  220. print_r(" = $ret\n");
  221. print_r("testEnum(EIGHT)");
  222. $ret = $testClient->testEnum(Numberz::EIGHT);
  223. print_r(" = $ret\n");
  224. /**
  225. * TYPEDEF TEST
  226. */
  227. print_r("testTypedef(309858235082523)");
  228. $uid = $testClient->testTypedef(309858235082523);
  229. print_r(" = $uid\n");
  230. /**
  231. * NESTED MAP TEST
  232. */
  233. print_r("testMapMap(1)");
  234. $mm = $testClient->testMapMap(1);
  235. print_r(" = {");
  236. foreach ($mm as $key => $val) {
  237. print_r("$key => {");
  238. foreach ($val as $k2 => $v2) {
  239. print_r("$k2 => $v2, ");
  240. }
  241. print_r("}, ");
  242. }
  243. print_r("}\n");
  244. /**
  245. * INSANITY TEST
  246. */
  247. $insane = new Insanity();
  248. $insane->userMap[Numberz::FIVE] = 5000;
  249. $truck = new Xtruct();
  250. $truck->string_thing = "Truck";
  251. $truck->byte_thing = 8;
  252. $truck->i32_thing = 8;
  253. $truck->i64_thing = 8;
  254. $insane->xtructs []= $truck;
  255. print_r("testInsanity()");
  256. $whoa = $testClient->testInsanity($insane);
  257. print_r(" = {");
  258. foreach ($whoa as $key => $val) {
  259. print_r("$key => {");
  260. foreach ($val as $k2 => $v2) {
  261. print_r("$k2 => {");
  262. $userMap = $v2->userMap;
  263. print_r("{");
  264. if (is_array($usermap)) {
  265. foreach ($userMap as $k3 => $v3) {
  266. print_r("$k3 => $v3, ");
  267. }
  268. }
  269. print_r("}, ");
  270. $xtructs = $v2->xtructs;
  271. print_r("{");
  272. if (is_array($xtructs)) {
  273. foreach ($xtructs as $x) {
  274. print_r("{\"".$x->string_thing."\", ".
  275. $x->byte_thing.", ".$x->i32_thing.", ".$x->i64_thing."}, ");
  276. }
  277. }
  278. print_r("}");
  279. print_r("}, ");
  280. }
  281. print_r("}, ");
  282. }
  283. print_r("}\n");
  284. /**
  285. * EXCEPTION TEST
  286. */
  287. print_r("testException('Xception')");
  288. try {
  289. $testClient->testException('Xception');
  290. print_r(" void\nFAILURE\n");
  291. } catch (Xception $x) {
  292. print_r(' caught xception '.$x->errorCode.': '.$x->message."\n");
  293. }
  294. /**
  295. * Normal tests done.
  296. */
  297. $stop = microtime(true);
  298. $elp = round(1000*($stop - $start), 0);
  299. print_r("Total time: $elp ms\n");
  300. /**
  301. * Extraneous "I don't trust PHP to pack/unpack integer" tests
  302. */
  303. // Max I32
  304. $num = pow(2, 30) + (pow(2, 30) - 1);
  305. $num2 = $testClient->testI32($num);
  306. if ($num != $num2) {
  307. print "Missed $num = $num2\n";
  308. }
  309. // Min I32
  310. $num = 0 - pow(2, 31);
  311. $num2 = $testClient->testI32($num);
  312. if ($num != $num2) {
  313. print "Missed $num = $num2\n";
  314. }
  315. // Max I64
  316. $num = pow(2, 62) + (pow(2, 62) - 1);
  317. $num2 = $testClient->testI64($num);
  318. if ($num != $num2) {
  319. print "Missed $num = $num2\n";
  320. }
  321. // Min I64
  322. $num = 0 - pow(2, 63);
  323. $num2 = $testClient->testI64($num);
  324. if ($num != $num2) {
  325. print "Missed $num = $num2\n";
  326. }
  327. $transport->close();
  328. return;
  329. ?>