ShhApiTest.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500
  1. <?php
  2. namespace Test\Unit;
  3. use RuntimeException;
  4. use InvalidArgumentException;
  5. use Test\TestCase;
  6. use Web3\Shh;
  7. class ShhApiTest extends TestCase
  8. {
  9. /**
  10. * shh
  11. *
  12. * @var Web3\Shh
  13. */
  14. protected $shh;
  15. /**
  16. * setUp
  17. *
  18. * @return void
  19. */
  20. public function setUp()
  21. {
  22. parent::setUp();
  23. $this->shh = $this->web3->shh;
  24. }
  25. /**
  26. * testVersion
  27. *
  28. * @return void
  29. */
  30. public function testVersion()
  31. {
  32. $shh = $this->shh;
  33. $shh->version(function ($err, $version) {
  34. if ($err !== null) {
  35. return $this->fail($err->getMessage());
  36. }
  37. $this->assertTrue(is_string($version));
  38. });
  39. }
  40. /**
  41. * testNewIdentity
  42. * Comment because ganache-cli only implement shh_version.
  43. *
  44. * @return void
  45. */
  46. // public function testNewIdentity()
  47. // {
  48. // $shh = $this->shh;
  49. // $shh->newIdentity(function ($err, $identity) {
  50. // if ($err !== null) {
  51. // return $this->fail($err->getMessage());
  52. // }
  53. // $this->assertEquals(mb_strlen($identity), 132);
  54. // });
  55. // }
  56. /**
  57. * testHasIdentity
  58. * Comment because ganache-cli only implement shh_version.
  59. *
  60. * @return void
  61. */
  62. // public function testHasIdentity()
  63. // {
  64. // $shh = $this->shh;
  65. // $newIdentity = '0x' . implode('', array_fill(0, 120, '0'));
  66. // $shh->hasIdentity($newIdentity, function ($err, $hasIdentity) {
  67. // if ($err !== null) {
  68. // return $this->fail($err->getMessage());
  69. // }
  70. // $this->assertFalse($hasIdentity);
  71. // });
  72. // $shh->newIdentity(function ($err, $identity) use (&$newIdentity) {
  73. // if ($err !== null) {
  74. // return $this->fail($err->getMessage());
  75. // }
  76. // $newIdentity = $identity;
  77. // $this->assertEquals(mb_strlen($identity), 132);
  78. // });
  79. // $shh->hasIdentity($newIdentity, function ($err, $hasIdentity) {
  80. // if ($err !== null) {
  81. // return $this->fail($err->getMessage());
  82. // }
  83. // $this->assertTrue($hasIdentity);
  84. // });
  85. // }
  86. /**
  87. * testNewGroup
  88. *
  89. * @return void
  90. */
  91. // public function testNewGroup()
  92. // {
  93. // $shh = $this->shh;
  94. // $shh->newGroup(function ($err, $group) {
  95. // if ($err !== null) {
  96. // return $this->fail($err->getMessage());
  97. // }
  98. // $this->assertEquals(mb_strlen($group), 132);
  99. // });
  100. // }
  101. /**
  102. * testAddToGroup
  103. *
  104. * @return void
  105. */
  106. // public function testAddToGroup()
  107. // {
  108. // $shh = $this->shh;
  109. // $newIdentity = '';
  110. // $shh->newIdentity(function ($err, $identity) use (&$newIdentity) {
  111. // if ($err !== null) {
  112. // return $this->fail($err->getMessage());
  113. // }
  114. // $newIdentity = $identity;
  115. // $this->assertEquals(mb_strlen($identity), 132);
  116. // });
  117. // $shh->addToGroup($newIdentity, function ($err, $hasAdded) {
  118. // if ($err !== null) {
  119. // return $this->fail($err->getMessage());
  120. // }
  121. // $this->assertTrue($hasAdded);
  122. // });
  123. // }
  124. /**
  125. * testPost
  126. * Comment because ganache-cli only implement shh_version.
  127. *
  128. * @return void
  129. */
  130. // public function testPost()
  131. // {
  132. // $shh = $this->shh;
  133. // $fromIdentity = '';
  134. // $toIdentity = '';
  135. // // create fromIdentity and toIdentity to prevent unknown identity error
  136. // $shh->newIdentity(function ($err, $identity) use (&$fromIdentity) {
  137. // if ($err !== null) {
  138. // return $this->fail($err->getMessage());
  139. // }
  140. // $fromIdentity = $identity;
  141. // $this->assertEquals(mb_strlen($identity), 132);
  142. // });
  143. // $shh->newIdentity(function ($err, $identity) use (&$toIdentity) {
  144. // if ($err !== null) {
  145. // return $this->fail($err->getMessage());
  146. // }
  147. // $toIdentity = $identity;
  148. // $this->assertEquals(mb_strlen($identity), 132);
  149. // });
  150. // $shh->post([
  151. // 'from' => $fromIdentity,
  152. // 'to' => $toIdentity,
  153. // 'topics' => ["0x776869737065722d636861742d636c69656e74", "0x4d5a695276454c39425154466b61693532"],
  154. // 'payload' => "0x7b2274797065223a226d6",
  155. // 'priority' => "0x64",
  156. // 'ttl' => "0x64",
  157. // ], function ($err, $isSent) {
  158. // if ($err !== null) {
  159. // return $this->fail($err->getMessage());
  160. // }
  161. // $this->assertTrue($isSent);
  162. // });
  163. // $shh->post([
  164. // 'from' => $fromIdentity,
  165. // 'to' => $toIdentity,
  166. // 'topics' => ["0x776869737065722d636861742d636c69656e74", "0x4d5a695276454c39425154466b61693532"],
  167. // 'payload' => "0x7b2274797065223a226d6",
  168. // 'priority' => 123,
  169. // 'ttl' => 123,
  170. // ], function ($err, $isSent) {
  171. // if ($err !== null) {
  172. // return $this->fail($err->getMessage());
  173. // }
  174. // $this->assertTrue($isSent);
  175. // });
  176. // }
  177. /**
  178. * testNewFilter
  179. * Comment because ganache-cli only implement shh_version.
  180. *
  181. * @return void
  182. */
  183. // public function testNewFilter()
  184. // {
  185. // $shh = $this->shh;
  186. // $toIdentity = '';
  187. // // create toIdentity to prevent unknown identity error
  188. // $shh->newIdentity(function ($err, $identity) use (&$toIdentity) {
  189. // if ($err !== null) {
  190. // return $this->fail($err->getMessage());
  191. // }
  192. // $toIdentity = $identity;
  193. // $this->assertEquals(mb_strlen($identity), 132);
  194. // });
  195. // $shh->newFilter([
  196. // 'to' => $toIdentity,
  197. // 'topics' => ["0x776869737065722d636861742d636c69656e74", "0x4d5a695276454c39425154466b61693532"],
  198. // ], function ($err, $filterId) {
  199. // if ($err !== null) {
  200. // return $this->fail($err->getMessage());
  201. // }
  202. // $this->assertTrue(is_string($filterId));
  203. // });
  204. // $shh->newFilter([
  205. // 'to' => $toIdentity,
  206. // 'topics' => [null, "0x776869737065722d636861742d636c69656e74", "0x4d5a695276454c39425154466b61693532"],
  207. // ], function ($err, $filterId) {
  208. // if ($err !== null) {
  209. // return $this->fail($err->getMessage());
  210. // }
  211. // $this->assertTrue(is_string($filterId));
  212. // });
  213. // $shh->newFilter([
  214. // 'to' => $toIdentity,
  215. // 'topics' => ["0x776869737065722d636861742d636c69656e74", ["0x776869737065722d636861742d636c69656e74", "0x4d5a695276454c39425154466b61693532"]],
  216. // ], function ($err, $filterId) {
  217. // if ($err !== null) {
  218. // return $this->fail($err->getMessage());
  219. // }
  220. // $this->assertTrue(is_string($filterId));
  221. // });
  222. // }
  223. /**
  224. * testUninstallFilter
  225. * Comment because ganache-cli only implement shh_version.
  226. *
  227. * @return void
  228. */
  229. // public function testUninstallFilter()
  230. // {
  231. // $shh = $this->shh;
  232. // $toIdentity = '';
  233. // $filter = '';
  234. // // create toIdentity to prevent unknown identity error
  235. // $shh->newIdentity(function ($err, $identity) use (&$toIdentity) {
  236. // if ($err !== null) {
  237. // return $this->fail($err->getMessage());
  238. // }
  239. // $toIdentity = $identity;
  240. // $this->assertEquals(mb_strlen($identity), 132);
  241. // });
  242. // $shh->newFilter([
  243. // 'to' => $toIdentity,
  244. // 'topics' => ["0x776869737065722d636861742d636c69656e74", "0x4d5a695276454c39425154466b61693532"],
  245. // ], function ($err, $filterId) use (&$filter) {
  246. // if ($err !== null) {
  247. // return $this->fail($err->getMessage());
  248. // }
  249. // $filter = $filterId;
  250. // $this->assertTrue(is_string($filterId));
  251. // });
  252. // $shh->uninstallFilter($filter, function ($err, $uninstalled) {
  253. // if ($err !== null) {
  254. // return $this->fail($err->getMessage());
  255. // }
  256. // $this->assertTrue($uninstalled);
  257. // });
  258. // }
  259. /**
  260. * testGetFilterChanges
  261. * Comment because ganache-cli only implement shh_version.
  262. *
  263. * @return void
  264. */
  265. // public function testGetFilterChanges()
  266. // {
  267. // $shh = $this->shh;
  268. // $fromIdentity = '';
  269. // $toIdentity = '';
  270. // $filter = '';
  271. // // create fromIdentity and toIdentity to prevent unknown identity error
  272. // $shh->newIdentity(function ($err, $identity) use (&$toIdentity) {
  273. // if ($err !== null) {
  274. // return $this->fail($err->getMessage());
  275. // }
  276. // $toIdentity = $identity;
  277. // $this->assertEquals(mb_strlen($identity), 132);
  278. // });
  279. // $shh->newIdentity(function ($err, $identity) use (&$fromIdentity) {
  280. // if ($err !== null) {
  281. // return $this->fail($err->getMessage());
  282. // }
  283. // $fromIdentity = $identity;
  284. // $this->assertEquals(mb_strlen($identity), 132);
  285. // });
  286. // $shh->newFilter([
  287. // 'to' => $toIdentity,
  288. // 'topics' => ["0x776869737065722d636861742d636c69656e74", "0x4d5a695276454c39425154466b61693532"],
  289. // ], function ($err, $filterId) use (&$filter) {
  290. // if ($err !== null) {
  291. // return $this->fail($err->getMessage());
  292. // }
  293. // $filter = $filterId;
  294. // $this->assertTrue(is_string($filterId));
  295. // });
  296. // $shh->getFilterChanges($filter, function ($err, $changes) {
  297. // if ($err !== null) {
  298. // return $this->fail($err->getMessage());
  299. // }
  300. // $this->assertTrue(is_array($changes));
  301. // });
  302. // // try to post, but didn't get changes
  303. // $shh->post([
  304. // 'from' => $fromIdentity,
  305. // 'to' => $toIdentity,
  306. // 'topics' => ["0x776869737065722d636861742d636c69656e74", "0x4d5a695276454c39425154466b61693532"],
  307. // 'payload' => "0x7b2274797065223a226d6",
  308. // 'priority' => "0x64",
  309. // 'ttl' => "0x64",
  310. // ], function ($err, $isSent) {
  311. // if ($err !== null) {
  312. // return $this->fail($err->getMessage());
  313. // }
  314. // $this->assertTrue($isSent);
  315. // });
  316. // $shh->getFilterChanges($filter, function ($err, $changes) {
  317. // if ($err !== null) {
  318. // return $this->fail($err->getMessage());
  319. // }
  320. // $this->assertTrue(is_array($changes));
  321. // });
  322. // }
  323. /**
  324. * testGetMessages
  325. * Comment because ganache-cli only implement shh_version.
  326. *
  327. * @return void
  328. */
  329. // public function testGetMessages()
  330. // {
  331. // $shh = $this->shh;
  332. // $fromIdentity = '';
  333. // $toIdentity = '';
  334. // $filter = '';
  335. // // create fromIdentity and toIdentity to prevent unknown identity error
  336. // $shh->newIdentity(function ($err, $identity) use (&$toIdentity) {
  337. // if ($err !== null) {
  338. // return $this->fail($err->getMessage());
  339. // }
  340. // $toIdentity = $identity;
  341. // $this->assertEquals(mb_strlen($identity), 132);
  342. // });
  343. // $shh->newIdentity(function ($err, $identity) use (&$fromIdentity) {
  344. // if ($err !== null) {
  345. // return $this->fail($err->getMessage());
  346. // }
  347. // $fromIdentity = $identity;
  348. // $this->assertEquals(mb_strlen($identity), 132);
  349. // });
  350. // $shh->newFilter([
  351. // 'to' => $toIdentity,
  352. // 'topics' => ["0x776869737065722d636861742d636c69656e74", "0x4d5a695276454c39425154466b61693532"],
  353. // ], function ($err, $filterId) use (&$filter) {
  354. // if ($err !== null) {
  355. // return $this->fail($err->getMessage());
  356. // }
  357. // $filter = $filterId;
  358. // $this->assertTrue(is_string($filterId));
  359. // });
  360. // $shh->getMessages($filter, function ($err, $messages) {
  361. // if ($err !== null) {
  362. // return $this->fail($err->getMessage());
  363. // }
  364. // $this->assertTrue(is_array($messages));
  365. // });
  366. // $shh->post([
  367. // 'from' => $fromIdentity,
  368. // 'to' => $toIdentity,
  369. // 'topics' => ["0x776869737065722d636861742d636c69656e74", "0x4d5a695276454c39425154466b61693532"],
  370. // 'payload' => "0x7b2274797065223a226d6",
  371. // 'priority' => "0x64",
  372. // 'ttl' => "0x64",
  373. // ], function ($err, $isSent) {
  374. // if ($err !== null) {
  375. // return $this->fail($err->getMessage());
  376. // }
  377. // $this->assertTrue($isSent);
  378. // });
  379. // $shh->getMessages($filter, function ($err, $messages) use ($fromIdentity, $toIdentity) {
  380. // if ($err !== null) {
  381. // return $this->fail($err->getMessage());
  382. // }
  383. // $this->assertTrue(is_array($messages));
  384. // $this->assertEquals($fromIdentity, $messages[0]->from);
  385. // $this->assertEquals($toIdentity, $messages[0]->to);
  386. // $this->assertEquals('0x07b2274797065223a226d6', $messages[0]->payload);
  387. // });
  388. // }
  389. /**
  390. * testWrongParam
  391. * We transform data and throw invalid argument exception
  392. * instead of runtime exception.
  393. *
  394. * @return void
  395. */
  396. // public function testWrongParam()
  397. // {
  398. // $this->expectException(RuntimeException::class);
  399. // $shh = $this->shh;
  400. // $shh->hasIdentity('0', function ($err, $hasIdentity) {
  401. // if ($err !== null) {
  402. // return $this->fail($err->getMessage());
  403. // }
  404. // $this->assertTrue(true);
  405. // });
  406. // }
  407. /**
  408. * testUnallowedMethod
  409. *
  410. * @return void
  411. */
  412. public function testUnallowedMethod()
  413. {
  414. $this->expectException(RuntimeException::class);
  415. $shh = $this->shh;
  416. $shh->hello(function ($err, $hello) {
  417. if ($err !== null) {
  418. return $this->fail($err->getMessage());
  419. }
  420. $this->assertTrue(true);
  421. });
  422. }
  423. /**
  424. * testWrongCallback
  425. *
  426. * @return void
  427. */
  428. public function testWrongCallback()
  429. {
  430. $this->expectException(InvalidArgumentException::class);
  431. $shh = $this->shh;
  432. $shh->version();
  433. }
  434. }