PageRenderTime 57ms CodeModel.GetById 30ms RepoModel.GetById 0ms app.codeStats 0ms

/Grid/Tests/UserServiceTests.php

https://github.com/openmetaversefoundation/simiangrid
PHP | 434 lines | 310 code | 83 blank | 41 comment | 0 complexity | dac144e35dd7040e5f078f3d479f504e MD5 | raw file
  1. <?php
  2. /** Simian grid services
  3. *
  4. * PHP version 5
  5. *
  6. * Redistribution and use in source and binary forms, with or without
  7. * modification, are permitted provided that the following conditions
  8. * are met:
  9. * 1. Redistributions of source code must retain the above copyright
  10. * notice, this list of conditions and the following disclaimer.
  11. * 2. Redistributions in binary form must reproduce the above copyright
  12. * notice, this list of conditions and the following disclaimer in the
  13. * documentation and/or other materials provided with the distribution.
  14. * 3. The name of the author may not be used to endorse or promote products
  15. * derived from this software without specific prior written permission.
  16. *
  17. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  18. * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  19. * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  20. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  21. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  22. * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  26. * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. *
  28. *
  29. * @package SimianGrid
  30. * @author Jim Radford <http://www.jimradford.com/>
  31. * @copyright Open Metaverse Foundation
  32. * @license http://www.debian.org/misc/bsd.license BSD License (3 Clause)
  33. * @link http://openmetaverse.googlecode.com/
  34. */
  35. require_once('../lib/Class.UUID.php');
  36. require_once('../lib/Class.User.php');
  37. require_once('../lib/Class.Scene.php');
  38. require_once('../lib/Class.Presence.php');
  39. require_once('../lib/Class.StopWatch.php');
  40. function genpass($toencode)
  41. {
  42. return '$1$' . md5($toencode);
  43. }
  44. /*
  45. echo $r->getRawRequestMessage();
  46. echo "\n";
  47. echo $r->getRawResponseMessage();
  48. echo "\n";
  49. */
  50. class GridServiceTests extends PHPUnit_Framework_TestCase
  51. {
  52. protected function setUp()
  53. {
  54. $servicesconf = parse_ini_file('../services.ini', true);
  55. $this->server_url = $servicesconf["Services"]["server_url"];
  56. }
  57. protected function tearDown()
  58. {
  59. }
  60. public function testAddScene()
  61. {
  62. $sceneID = UUID::Random();
  63. $a = array('RequestMethod'=>'AddScene',
  64. 'ID'=>(string)$sceneID,
  65. 'Name'=>'Test Scene',
  66. 'MinPosition'=>'<128, 128, 25>',
  67. 'MaxPosition'=>'<512, 512, 50>',
  68. 'Address'=>'http://localhost/scenes/' . (string)$sceneID,
  69. );
  70. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  71. $r->addPostFields($a);
  72. $r->send();
  73. $this->assertEquals(200, $r->getResponseCode());
  74. $Scene = new Scene();
  75. $Scene->ID = $sceneID;
  76. $Scene->Name = "Test Scene";
  77. file_put_contents('scene1.dat', serialize($Scene));
  78. }
  79. public function testFindByID()
  80. {
  81. $Scene = unserialize(file_get_contents('scene1.dat'));
  82. $a = array('RequestMethod'=>'GetSceneByID',
  83. 'ID'=>(string)$Scene->ID
  84. );
  85. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  86. $r->addPostFields($a);
  87. $r->send();
  88. $this->assertEquals(200, $r->getResponseCode());
  89. $Scene2 = Scene::fromOSD($r->GetResponseBody());
  90. file_put_contents('scene2.dat', serialize($Scene2));
  91. }
  92. public function testFindByName()
  93. {
  94. $a = array('RequestMethod'=>'GetSceneByName',
  95. 'Name'=>'Test Scene'
  96. );
  97. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  98. $r->addPostFields($a);
  99. $r->send();
  100. $this->assertEquals(200, $r->getResponseCode());
  101. $Scene3 = Scene::fromOSD($r->GetResponseBody());
  102. file_put_contents('scene3.dat', serialize($Scene3));
  103. }
  104. public function testGetSceneInVector()
  105. {
  106. $a = array('RequestMethod'=>'GetSceneInVector',
  107. 'Vector'=>'<256, 256, 30>'
  108. );
  109. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  110. $r->addPostFields($a);
  111. $r->send();
  112. $this->assertEquals(200, $r->getResponseCode());
  113. $Scene4 = Scene::fromOSD($r->GetResponseBody());
  114. file_put_contents('scene4.dat', serialize($Scene4));
  115. }
  116. public function testGetSceneNearVector()
  117. {
  118. $a = array('RequestMethod'=>'GetSceneNearVector',
  119. 'Vector'=>'<256, 256, 75>'
  120. );
  121. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  122. $r->addPostFields($a);
  123. $r->send();
  124. $this->assertEquals(200, $r->getResponseCode());
  125. $Scene5 = Scene::fromOSD($r->GetResponseBody());
  126. file_put_contents('scene5.dat', serialize($Scene5));
  127. }
  128. public function testCreateUser()
  129. {
  130. $a = array('RequestMethod'=>'AddUser',
  131. 'Name'=>'Test User',
  132. 'HomeLocation'=>(string)UUID::Random(),
  133. 'HomePosition'=>'<128, 128, 25>',
  134. 'HomeLookAt'=>'<0, 0, -1>',
  135. 'Flags'=>0,
  136. 'ExtraData'=>''
  137. );
  138. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  139. $r->addPostFields($a);
  140. $r->send();
  141. $this->assertEquals(200, $r->getResponseCode());
  142. $User = User::fromOSD($r->GetResponseBody());
  143. file_put_contents('user1.dat', serialize($User));
  144. }
  145. public function testGetFriendList()
  146. {
  147. $User = unserialize(file_get_contents('user1.dat'));
  148. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  149. $r->addPostFields(array('RequestMethod'=>'GetFriendList',
  150. 'ID'=>(string)$User->ID));
  151. $r->send();
  152. $this->assertEquals(200, $r->getResponseCode());
  153. }
  154. public function testUpdateUserField()
  155. {
  156. $User = unserialize(file_get_contents('user1.dat'));
  157. $wearablesMap = array("2"=>"a57b7fae-fbd5-4402-bfa3-5fee57eb970a",
  158. "5"=>"017b8abe-5a29-4d4e-9b17-51a6426ba122",
  159. "0"=>"9594f487-de0f-49e8-9135-019c6f3a8b1c",
  160. "4"=>"7c7d7152-6f04-48fa-b894-a59a6cc53927",
  161. "1"=>"0152df9b-4988-4324-8862-db819d628210",
  162. "3"=>"1b14d9ac-f24a-460a-a828-e169fd8c59bc");
  163. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  164. $r->addPostFields(array('RequestMethod'=>'UpdateUserField',
  165. 'ID'=>(string)$User->ID,
  166. 'Field'=>'wearables',
  167. 'Value'=>json_encode($wearablesMap)));
  168. $r->send();
  169. $this->assertEquals(200, $r->getResponseCode());
  170. }
  171. public function testGetLibraryRoot()
  172. {
  173. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  174. $r->addPostFields(array('RequestMethod'=>'GetLibraryRoot'));
  175. $r->send();
  176. $this->assertEquals(200, $r->getResponseCode());
  177. }
  178. public function testAddPresence()
  179. {
  180. $User = unserialize(file_get_contents('user1.dat'));
  181. $Scene = unserialize(file_get_contents('scene1.dat'));
  182. $a = array('RequestMethod'=>'AddPresence',
  183. 'ID'=>(string)$User->ID,
  184. 'LastLocation'=>(string)$Scene->ID,
  185. 'LastPosition'=>'<24, 48, 96>',
  186. 'LastLookAt'=>'<0, 1, -1>',
  187. 'Flags'=>0
  188. );
  189. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  190. $r->addPostFields($a);
  191. $r->send();
  192. $this->assertEquals(200, $r->getResponseCode());
  193. $Presence = Presence::fromOSD($r->GetResponseBody());
  194. file_put_contents('presence1.dat', serialize($Presence));
  195. }
  196. public function testUpdatePresence()
  197. {
  198. $User = unserialize(file_get_contents('user1.dat'));
  199. $a = array('RequestMethod'=>'UpdatePresence',
  200. 'UserID'=>(string)$User->ID,
  201. 'Location'=>(string)UUID::Random(),
  202. 'Position'=>'<192, 192, 192>',
  203. 'LookAt'=>'<-1, -1, -1>'
  204. );
  205. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  206. $r->addPostFields($a);
  207. $r->send();
  208. $this->assertEquals(200, $r->getResponseCode());
  209. }
  210. public function testGetPresence()
  211. {
  212. $User = unserialize(file_get_contents('user1.dat'));
  213. $a = array('RequestMethod'=>'GetPresence',
  214. 'ID'=>(string)$User->ID
  215. );
  216. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  217. $r->addPostFields($a);
  218. $r->send();
  219. $this->assertEquals(200, $r->getResponseCode());
  220. $Presence2 = Presence::fromOSD($r->GetResponseBody());
  221. file_put_contents('presence2.dat', serialize($Presence2));
  222. }
  223. // TODO: Verify Changes Stuck
  224. public function testRemovePresence()
  225. {
  226. $User = unserialize(file_get_contents('user1.dat'));
  227. $a = array('RequestMethod'=>'RemovePresence',
  228. 'ID'=>(string)$User->ID
  229. );
  230. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  231. $r->addPostFields($a);
  232. $r->send();
  233. $this->assertEquals(200, $r->getResponseCode());
  234. }
  235. public function testGetUser()
  236. {
  237. $User = unserialize(file_get_contents('user1.dat'));
  238. $a = array('RequestMethod'=>'GetUser',
  239. 'ID'=>(string)$User->ID
  240. );
  241. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  242. $r->addPostFields($a);
  243. $r->send();
  244. $this->assertEquals(200, $r->getResponseCode());
  245. $GetUser = User::fromOSD($r->GetResponseBody());
  246. file_put_contents('user2.dat', serialize($GetUser));
  247. }
  248. public function testCreateIdentity()
  249. {
  250. $User = unserialize(file_get_contents('user2.dat'));
  251. $a = array('RequestMethod'=>'AddIdentity',
  252. 'Identifier'=>'Foo Identifier',
  253. 'Credential'=>genpass("Foo Password"),
  254. 'Type'=>'Foo Type',
  255. 'UserID'=>(string)$User->ID);
  256. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  257. $r->addPostFields($a);
  258. $r->send();
  259. $this->assertEquals(200, $r->getResponseCode());
  260. }
  261. public function testAuthorizeIdentity()
  262. {
  263. $a = array('RequestMethod'=>'AuthorizeIdentity',
  264. 'Identifier'=>'Foo Identifier',
  265. 'Credential'=>genpass("Foo Password"));
  266. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  267. $r->addPostFields($a);
  268. $r->send();
  269. $this->assertEquals(200, $r->getResponseCode());
  270. }
  271. public function testGetIdentitiesFor()
  272. {
  273. $User = unserialize(file_get_contents('user2.dat'));
  274. $a = array('RequestMethod'=>'GetIdentities',
  275. 'ID'=>(string)$User->ID
  276. );
  277. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  278. $r->addPostFields($a);
  279. $r->send();
  280. $this->assertEquals(200, $r->getResponseCode());
  281. $jsonObj = json_decode($r->GetResponseBody());
  282. $this->assertGreaterThanorEqual(count($jsonObj), 1);
  283. }
  284. public function testRemoveIdentity()
  285. {
  286. $a = array('RequestMethod'=>'RemoveIdentity',
  287. 'Identifier'=>'Foo Identifier');
  288. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  289. $r->addPostFields($a);
  290. $r->send();
  291. $this->assertEquals(200, $r->getResponseCode());
  292. }
  293. public function testRemoveUser()
  294. {
  295. $User = unserialize(file_get_contents('user2.dat'));
  296. $a = array('RequestMethod'=>'RemoveUser',
  297. 'ID'=>(string)$User->ID
  298. );
  299. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  300. $r->addPostFields($a);
  301. $r->send();
  302. $this->assertEquals(200, $r->getResponseCode());
  303. $GetUser = User::fromOSD($r->GetResponseBody());
  304. }
  305. public function testRemoveScene()
  306. {
  307. $Scene = unserialize(file_get_contents('scene1.dat'));
  308. $a = array('RequestMethod'=>'RemoveScene',
  309. 'ID'=>(string)$Scene->ID
  310. );
  311. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  312. $r->addPostFields($a);
  313. $r->send();
  314. $this->assertEquals(200, $r->getResponseCode());
  315. }
  316. // Capabilities Tests
  317. public function testAddCapability()
  318. {
  319. $a = array('RequestMethod'=>'AddCapability',
  320. 'OwnerID'=>'efb00dbb-d4ab-46dc-aebc-4ba83288c3c0',
  321. 'Resource'=>'http://example.com/cap/',
  322. 'Expiration'=>time());
  323. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  324. $r->addPostFields($a);
  325. $r->send();
  326. $this->assertEquals(200, $r->getResponseCode());
  327. }
  328. public function testRemoveCapability()
  329. {
  330. $a = array('RequestMethod'=>'RemoveCapability',
  331. 'ID'=>'c006082b-80eb-4d17-90ff-224412c574ea');
  332. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  333. $r->addPostFields($a);
  334. $r->send();
  335. $this->assertEquals(200, $r->getResponseCode());
  336. }
  337. public function testRemoveUsersCapabilities()
  338. {
  339. $a = array('RequestMethod'=>'RemoveUserCapabilities',
  340. 'OwnerID'=>'efb00dbb-d4ab-46dc-aebc-4ba83288c3c0');
  341. $r = new HttpRequest($this->server_url, HttpRequest::METH_POST);
  342. $r->addPostFields($a);
  343. $r->send();
  344. echo $r->getRawRequestMessage();
  345. echo "\n";
  346. echo $r->getRawResponseMessage();
  347. echo "\n";
  348. $this->assertEquals(200, $r->getResponseCode());
  349. }
  350. }
  351. ?>