InstanceTest.php 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699
  1. <?php
  2. require_once 'PHPUnit/Framework/TestCase.php';
  3. require_once 'Zend/Http/Client.php';
  4. require_once 'Zend/Http/Client/Adapter/Test.php';
  5. require_once 'Zend/Service/Amazon/Ec2/Instance.php';
  6. /**
  7. * Zend_Service_Amazon_Ec2_Instance test case.
  8. */
  9. class Zend_Service_Amazon_Ec2_InstanceTest extends PHPUnit_Framework_TestCase
  10. {
  11. /**
  12. * @var Zend_Service_Amazon_Ec2_Instance
  13. */
  14. private $Zend_Service_Amazon_Ec2_Instance;
  15. /**
  16. * Prepares the environment before running a test.
  17. */
  18. protected function setUp()
  19. {
  20. parent::setUp();
  21. $this->Zend_Service_Amazon_Ec2_Instance = new Zend_Service_Amazon_Ec2_Instance('access_key', 'secret_access_key');
  22. $adapter = new Zend_Http_Client_Adapter_Test();
  23. $client = new Zend_Http_Client(null, array(
  24. 'adapter' => $adapter
  25. ));
  26. $this->adapter = $adapter;
  27. Zend_Service_Amazon_Ec2_Instance::setHttpClient($client);
  28. }
  29. /**
  30. * Cleans up the environment after running a test.
  31. */
  32. protected function tearDown()
  33. {
  34. unset($this->adapter);
  35. $this->Zend_Service_Amazon_Ec2_Instance = null;
  36. parent::tearDown();
  37. }
  38. public function testConstants()
  39. {
  40. $this->assertEquals('m1.small', Zend_Service_Amazon_Ec2_Instance::SMALL);
  41. $this->assertEquals('m1.large', Zend_Service_Amazon_Ec2_Instance::LARGE);
  42. $this->assertEquals('m1.xlarge', Zend_Service_Amazon_Ec2_Instance::XLARGE);
  43. $this->assertEquals('c1.medium', Zend_Service_Amazon_Ec2_Instance::HCPU_MEDIUM);
  44. $this->assertEquals('c1.xlarge', Zend_Service_Amazon_Ec2_Instance::HCPU_XLARGE);
  45. }
  46. /**
  47. * Tests Zend_Service_Amazon_Ec2_Instance->confirmProduct()
  48. */
  49. public function testConfirmProductReturnsOwnerId()
  50. {
  51. $rawHttpResponse = "HTTP/1.1 200 OK\r\n"
  52. . "Date: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  53. . "Server: hi\r\n"
  54. . "Last-modified: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  55. . "Status: 200 OK\r\n"
  56. . "Content-type: application/xml; charset=utf-8\r\n"
  57. . "Expires: Tue, 31 Mar 1981 05:00:00 GMT\r\n"
  58. . "Connection: close\r\n"
  59. . "\r\n"
  60. . "<ConfirmProductInstanceResponse xmlns=\"http://ec2.amazonaws.com/doc/2009-04-04/\">\r\n"
  61. . " <result>true</result>\r\n"
  62. . " <ownerId>254933287430</ownerId>\r\n"
  63. . "</ConfirmProductInstanceResponse>\r\n";
  64. $this->adapter->setResponse($rawHttpResponse);
  65. $return = $this->Zend_Service_Amazon_Ec2_Instance->confirmProduct('254933287430', 'i-1bda7172');
  66. $this->assertEquals('254933287430', $return['ownerId']);
  67. }
  68. public function testConfirmProductReturnsFalse()
  69. {
  70. $rawHttpResponse = "HTTP/1.1 200 OK\r\n"
  71. . "Date: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  72. . "Server: hi\r\n"
  73. . "Last-modified: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  74. . "Status: 200 OK\r\n"
  75. . "Content-type: application/xml; charset=utf-8\r\n"
  76. . "Expires: Tue, 31 Mar 1981 05:00:00 GMT\r\n"
  77. . "Connection: close\r\n"
  78. . "\r\n"
  79. . "<ConfirmProductInstanceResponse xmlns=\"http://ec2.amazonaws.com/doc/2009-04-04/\">\r\n"
  80. . " <result>false</result>\r\n"
  81. . "</ConfirmProductInstanceResponse>\r\n";
  82. $this->adapter->setResponse($rawHttpResponse);
  83. $return = $this->Zend_Service_Amazon_Ec2_Instance->confirmProduct('254933287430', 'i-1bda7172');
  84. $this->assertFalse($return);
  85. }
  86. /**
  87. * Tests Zend_Service_Amazon_Ec2_Instance->describe()
  88. */
  89. public function testDescribeSingleInstance()
  90. {
  91. $rawHttpResponse = "HTTP/1.1 200 OK\r\n"
  92. . "Date: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  93. . "Server: hi\r\n"
  94. . "Last-modified: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  95. . "Status: 200 OK\r\n"
  96. . "Content-type: application/xml; charset=utf-8\r\n"
  97. . "Expires: Tue, 31 Mar 1981 05:00:00 GMT\r\n"
  98. . "Connection: close\r\n"
  99. . "\r\n"
  100. . "<DescribeInstancesResponse xmlns=\"http://ec2.amazonaws.com/doc/2009-04-04/\">\r\n"
  101. . " <reservationSet>\r\n"
  102. . " <item>\r\n"
  103. . " <reservationId>r-44a5402d</reservationId>\r\n"
  104. . " <ownerId>UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM</ownerId>\r\n"
  105. . " <groupSet>\r\n"
  106. . " <item>\r\n"
  107. . " <groupId>default</groupId>\r\n"
  108. . " </item>\r\n"
  109. . " </groupSet>\r\n"
  110. . " <instancesSet>\r\n"
  111. . " <item>\r\n"
  112. . " <instanceId>i-28a64341</instanceId>\r\n"
  113. . " <imageId>ami-6ea54007</imageId>\r\n"
  114. . " <instanceState>\r\n"
  115. . " <code>0</code>\r\n"
  116. . " <name>running</name>\r\n"
  117. . " </instanceState>\r\n"
  118. . " <privateDnsName>10-251-50-75.ec2.internal</privateDnsName>\r\n"
  119. . " <dnsName>ec2-72-44-33-4.compute-1.amazonaws.com</dnsName>\r\n"
  120. . " <keyName>example-key-name</keyName>\r\n"
  121. . " <productCodesSet>\r\n"
  122. . " <item><productCode>774F4FF8</productCode></item>\r\n"
  123. . " </productCodesSet>\r\n"
  124. . " <instanceType>m1.small</instanceType>\r\n"
  125. . " <launchTime>2007-08-07T11:54:42.000Z</launchTime>\r\n"
  126. . " <placement>\r\n"
  127. . " <availabilityZone>us-east-1b</availabilityZone>\r\n"
  128. . " </placement>\r\n"
  129. . " <kernelId>aki-ba3adfd3</kernelId>\r\n"
  130. . " <ramdiskId>ari-badbad00</ramdiskId>\r\n"
  131. . " </item>\r\n"
  132. . " </instancesSet>\r\n"
  133. . " </item>\r\n"
  134. . " </reservationSet>\r\n"
  135. . "</DescribeInstancesResponse>\r\n";
  136. $this->adapter->setResponse($rawHttpResponse);
  137. $return = $this->Zend_Service_Amazon_Ec2_Instance->describe('i-28a64341');
  138. $this->assertEquals('r-44a5402d', $return['instances'][0]['reservationId']);
  139. $this->assertEquals('default', $return['instances'][0]['groupSet'][0]);
  140. $this->assertEquals('i-28a64341', $return['instances'][0]['instanceId']);
  141. $this->assertEquals('ami-6ea54007', $return['instances'][0]['imageId']);
  142. $this->assertEquals('m1.small', $return['instances'][0]['instanceType']);
  143. $this->assertEquals('us-east-1b', $return['instances'][0]['availabilityZone']);
  144. }
  145. public function testDescribeIgnoreTerminatedInstance()
  146. {
  147. $rawHttpResponse = "HTTP/1.1 200 OK\r\n"
  148. . "Date: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  149. . "Server: hi\r\n"
  150. . "Last-modified: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  151. . "Status: 200 OK\r\n"
  152. . "Content-type: application/xml; charset=utf-8\r\n"
  153. . "Expires: Tue, 31 Mar 1981 05:00:00 GMT\r\n"
  154. . "Connection: close\r\n"
  155. . "\r\n"
  156. . "<DescribeInstancesResponse xmlns=\"http://ec2.amazonaws.com/doc/2009-04-04/\">\r\n"
  157. . " <reservationSet>\r\n"
  158. . " <item>\r\n"
  159. . " <reservationId>r-44a5402d</reservationId>\r\n"
  160. . " <ownerId>UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM</ownerId>\r\n"
  161. . " <groupSet>\r\n"
  162. . " <item>\r\n"
  163. . " <groupId>default</groupId>\r\n"
  164. . " </item>\r\n"
  165. . " </groupSet>\r\n"
  166. . " <instancesSet>\r\n"
  167. . " <item>\r\n"
  168. . " <instanceId>i-28a64341</instanceId>\r\n"
  169. . " <imageId>ami-6ea54007</imageId>\r\n"
  170. . " <instanceState>\r\n"
  171. . " <code>48</code>\r\n"
  172. . " <name>terminated</name>\r\n"
  173. . " </instanceState>\r\n"
  174. . " <privateDnsName>10-251-50-75.ec2.internal</privateDnsName>\r\n"
  175. . " <dnsName>ec2-72-44-33-4.compute-1.amazonaws.com</dnsName>\r\n"
  176. . " <keyName>example-key-name</keyName>\r\n"
  177. . " <productCodesSet>\r\n"
  178. . " <item><productCode>774F4FF8</productCode></item>\r\n"
  179. . " </productCodesSet>\r\n"
  180. . " <instanceType>m1.small</instanceType>\r\n"
  181. . " <launchTime>2007-08-07T11:54:42.000Z</launchTime>\r\n"
  182. . " <placement>\r\n"
  183. . " <availabilityZone>us-east-1b</availabilityZone>\r\n"
  184. . " </placement>\r\n"
  185. . " <kernelId>aki-ba3adfd3</kernelId>\r\n"
  186. . " <ramdiskId>ari-badbad00</ramdiskId>\r\n"
  187. . " </item>\r\n"
  188. . " </instancesSet>\r\n"
  189. . " </item>\r\n"
  190. . " </reservationSet>\r\n"
  191. . "</DescribeInstancesResponse>\r\n";
  192. $this->adapter->setResponse($rawHttpResponse, true);
  193. $return = $this->Zend_Service_Amazon_Ec2_Instance->describe('i-28a64341', true);
  194. $this->assertEquals(0, count($return['instances']));
  195. }
  196. public function testDescribeByImageId()
  197. {
  198. $rawHttpResponse = "HTTP/1.1 200 OK\r\n"
  199. . "Date: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  200. . "Server: hi\r\n"
  201. . "Last-modified: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  202. . "Status: 200 OK\r\n"
  203. . "Content-type: application/xml; charset=utf-8\r\n"
  204. . "Expires: Tue, 31 Mar 1981 05:00:00 GMT\r\n"
  205. . "Connection: close\r\n"
  206. . "\r\n"
  207. . "<DescribeInstancesResponse xmlns=\"http://ec2.amazonaws.com/doc/2009-04-04/\">\r\n"
  208. . " <reservationSet>\r\n"
  209. . " <item>\r\n"
  210. . " <reservationId>r-44a5402d</reservationId>\r\n"
  211. . " <ownerId>UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM</ownerId>\r\n"
  212. . " <groupSet>\r\n"
  213. . " <item>\r\n"
  214. . " <groupId>default</groupId>\r\n"
  215. . " </item>\r\n"
  216. . " </groupSet>\r\n"
  217. . " <instancesSet>\r\n"
  218. . " <item>\r\n"
  219. . " <instanceId>i-28a64341</instanceId>\r\n"
  220. . " <imageId>ami-6ea54007</imageId>\r\n"
  221. . " <instanceState>\r\n"
  222. . " <code>0</code>\r\n"
  223. . " <name>running</name>\r\n"
  224. . " </instanceState>\r\n"
  225. . " <privateDnsName>10-251-50-75.ec2.internal</privateDnsName>\r\n"
  226. . " <dnsName>ec2-72-44-33-4.compute-1.amazonaws.com</dnsName>\r\n"
  227. . " <keyName>example-key-name</keyName>\r\n"
  228. . " <productCodesSet>\r\n"
  229. . " <item><productCode>774F4FF8</productCode></item>\r\n"
  230. . " </productCodesSet>\r\n"
  231. . " <instanceType>m1.small</instanceType>\r\n"
  232. . " <launchTime>2007-08-07T11:54:42.000Z</launchTime>\r\n"
  233. . " <placement>\r\n"
  234. . " <availabilityZone>us-east-1b</availabilityZone>\r\n"
  235. . " </placement>\r\n"
  236. . " <kernelId>aki-ba3adfd3</kernelId>\r\n"
  237. . " <ramdiskId>ari-badbad00</ramdiskId>\r\n"
  238. . " </item>\r\n"
  239. . " </instancesSet>\r\n"
  240. . " </item>\r\n"
  241. . " </reservationSet>\r\n"
  242. . "</DescribeInstancesResponse>\r\n";
  243. $this->adapter->setResponse($rawHttpResponse);
  244. $return = $this->Zend_Service_Amazon_Ec2_Instance->describeByImageId('ami-6ea54007');
  245. $this->assertEquals('i-28a64341', $return[0]['instanceId']);
  246. $this->assertEquals('ami-6ea54007', $return[0]['imageId']);
  247. $this->assertEquals('m1.small', $return[0]['instanceType']);
  248. $this->assertEquals('us-east-1b', $return[0]['availabilityZone']);
  249. }
  250. public function testRunThrowsExceptionWhenNoImageIdPassedIn()
  251. {
  252. $arrStart = array(
  253. 'maxStart' => 3,
  254. 'keyName' => 'example-key-name',
  255. 'securityGroup' => 'default',
  256. 'userData' => 'instance_id=www3',
  257. 'placement' => 'us-east-1b',
  258. 'kernelId' => 'aki-4438dd2d',
  259. 'ramdiskId' => 'ari-4538dd2c',
  260. 'blockDeviceVirtualName' => 'vertdevice',
  261. 'blockDeviceName' => '/dev/sdv'
  262. );
  263. try {
  264. $return = $this->Zend_Service_Amazon_Ec2_Instance->run($arrStart);
  265. $this->fail('Exception should be thrown when no image id is passed into the run commmand');
  266. } catch (Zend_Service_Amazon_Ec2_Exception $zsaee) {
  267. $this->assertEquals('No Image Id Provided', $zsaee->getMessage());
  268. }
  269. }
  270. public function testRunOneSecurityGroup()
  271. {
  272. $rawHttpResponse = "HTTP/1.1 200 OK\r\n"
  273. . "Date: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  274. . "Server: hi\r\n"
  275. . "Last-modified: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  276. . "Status: 200 OK\r\n"
  277. . "Content-type: application/xml; charset=utf-8\r\n"
  278. . "Expires: Tue, 31 Mar 1981 05:00:00 GMT\r\n"
  279. . "Connection: close\r\n"
  280. . "\r\n"
  281. . "<RunInstancesResponse xmlns=\"http://ec2.amazonaws.com/doc/2009-04-04/\">\r\n"
  282. . " <reservationId>r-47a5402e</reservationId>\r\n"
  283. . " <ownerId>495219933132</ownerId>\r\n"
  284. . " <groupSet>\r\n"
  285. . " <item>\r\n"
  286. . " <groupId>default</groupId>\r\n"
  287. . " </item>\r\n"
  288. . " </groupSet>\r\n"
  289. . " <instancesSet>\r\n"
  290. . " <item>\r\n"
  291. . " <instanceId>i-2ba64342</instanceId>\r\n"
  292. . " <imageId>ami-60a54009</imageId>\r\n"
  293. . " <instanceState>\r\n"
  294. . " <code>0</code>\r\n"
  295. . " <name>pending</name>\r\n"
  296. . " </instanceState>\r\n"
  297. . " <privateDnsName></privateDnsName>\r\n"
  298. . " <dnsName></dnsName>\r\n"
  299. . " <keyName>example-key-name</keyName>\r\n"
  300. . " <amiLaunchIndex>0</amiLaunchIndex>\r\n"
  301. . " <InstanceType>m1.small</InstanceType>\r\n"
  302. . " <launchTime>2007-08-07T11:51:50.000Z</launchTime>\r\n"
  303. . " <placement>\r\n"
  304. . " <availabilityZone>us-east-1b</availabilityZone>\r\n"
  305. . " </placement>\r\n"
  306. . " </item>\r\n"
  307. . " <item>\r\n"
  308. . " <instanceId>i-2bc64242</instanceId>\r\n"
  309. . " <imageId>ami-60a54009</imageId>\r\n"
  310. . " <instanceState>\r\n"
  311. . " <code>0</code>\r\n"
  312. . " <name>pending</name>\r\n"
  313. . " </instanceState>\r\n"
  314. . " <privateDnsName></privateDnsName>\r\n"
  315. . " <dnsName></dnsName>\r\n"
  316. . " <keyName>example-key-name</keyName>\r\n"
  317. . " <amiLaunchIndex>1</amiLaunchIndex>\r\n"
  318. . " <InstanceType>m1.small</InstanceType>\r\n"
  319. . " <launchTime>2007-08-07T11:51:50.000Z</launchTime>\r\n"
  320. . " <placement>\r\n"
  321. . " <availabilityZone>us-east-1b</availabilityZone>\r\n"
  322. . " </placement>\r\n"
  323. . " </item>\r\n"
  324. . " <item>\r\n"
  325. . " <instanceId>i-2be64332</instanceId>\r\n"
  326. . " <imageId>ami-60a54009</imageId>\r\n"
  327. . " <instanceState>\r\n"
  328. . " <code>0</code>\r\n"
  329. . " <name>pending</name>\r\n"
  330. . " </instanceState>\r\n"
  331. . " <privateDnsName></privateDnsName>\r\n"
  332. . " <dnsName></dnsName>\r\n"
  333. . " <keyName>example-key-name</keyName>\r\n"
  334. . " <amiLaunchIndex>2</amiLaunchIndex>\r\n"
  335. . " <InstanceType>m1.small</InstanceType>\r\n"
  336. . " <launchTime>2007-08-07T11:51:50.000Z</launchTime>\r\n"
  337. . " <placement>\r\n"
  338. . " <availabilityZone>us-east-1b</availabilityZone>\r\n"
  339. . " </placement>\r\n"
  340. . " </item>\r\n"
  341. . " </instancesSet>\r\n"
  342. . "</RunInstancesResponse>\r\n";
  343. $this->adapter->setResponse($rawHttpResponse);
  344. $arrStart = array(
  345. 'imageId' => 'ami-60a54009',
  346. 'maxStart' => 3,
  347. 'keyName' => 'example-key-name',
  348. 'securityGroup' => 'default',
  349. 'userData' => 'instance_id=www3',
  350. 'placement' => 'us-east-1b',
  351. 'kernelId' => 'aki-4438dd2d',
  352. 'ramdiskId' => 'ari-4538dd2c',
  353. 'blockDeviceVirtualName' => 'vertdevice',
  354. 'blockDeviceName' => '/dev/sdv'
  355. );
  356. $return = $this->Zend_Service_Amazon_Ec2_Instance->run($arrStart);
  357. $this->assertEquals(3, count($return['instances']));
  358. $this->assertEquals('495219933132', $return['ownerId']);
  359. $arrInstanceIds = array('i-2ba64342', 'i-2bc64242', 'i-2be64332');
  360. foreach($return['instances'] as $k => $r) {
  361. $this->assertEquals($arrInstanceIds[$k], $r['instanceId']);
  362. $this->assertEquals($k, $r['amiLaunchIndex']);
  363. }
  364. }
  365. public function testRunMultipleSecurityGroups()
  366. {
  367. $rawHttpResponse = "HTTP/1.1 200 OK\r\n"
  368. . "Date: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  369. . "Server: hi\r\n"
  370. . "Last-modified: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  371. . "Status: 200 OK\r\n"
  372. . "Content-type: application/xml; charset=utf-8\r\nn"
  373. . "Expires: Tue, 31 Mar 1981 05:00:00 GMT\r\n"
  374. . "Connection: close\r\n"
  375. . "\r\n"
  376. . "<RunInstancesResponse xmlns=\"http://ec2.amazonaws.com/doc/2009-04-04/\">\r\n"
  377. . " <reservationId>r-47a5402e</reservationId>\r\n"
  378. . " <ownerId>495219933132</ownerId>\r\n"
  379. . " <groupSet>\r\n"
  380. . " <item>\r\n"
  381. . " <groupId>default</groupId>\r\n"
  382. . " </item>\r\n"
  383. . " <item>\r\n"
  384. . " <groupId>web</groupId>\r\n"
  385. . " </item>\r\n"
  386. . " </groupSet>\r\n"
  387. . " <instancesSet>\r\n"
  388. . " <item>\r\n"
  389. . " <instanceId>i-2ba64342</instanceId>\r\n"
  390. . " <imageId>ami-60a54009</imageId>\r\n"
  391. . " <instanceState>\r\n"
  392. . " <code>0</code>\r\n"
  393. . " <name>pending</name>\r\n"
  394. . " </instanceState>\r\n"
  395. . " <privateDnsName></privateDnsName>\r\n"
  396. . " <dnsName></dnsName>\r\n"
  397. . " <keyName>example-key-name</keyName>\r\n"
  398. . " <amiLaunchIndex>0</amiLaunchIndex>\r\n"
  399. . " <InstanceType>m1.small</InstanceType>\r\n"
  400. . " <launchTime>2007-08-07T11:51:50.000Z</launchTime>\r\n"
  401. . " <placement>\r\n"
  402. . " <availabilityZone>us-east-1b</availabilityZone>\r\n"
  403. . " </placement>\r\n"
  404. . " </item>\r\n"
  405. . " </instancesSet>\r\n"
  406. . "</RunInstancesResponse>\r\n";
  407. $this->adapter->setResponse($rawHttpResponse);
  408. $arrStart = array(
  409. 'imageId' => 'ami-60a54009',
  410. 'keyName' => 'example-key-name',
  411. 'securityGroup' => array('default','web'),
  412. 'userData' => 'instance_id=www3',
  413. 'placement' => 'us-east-1b',
  414. 'kernelId' => 'aki-4438dd2d',
  415. 'ramdiskId' => 'ari-4538dd2c',
  416. 'blockDeviceVirtualName' => 'vertdevice',
  417. 'blockDeviceName' => '/dev/sdv'
  418. );
  419. $return = $this->Zend_Service_Amazon_Ec2_Instance->run($arrStart);
  420. $arrGroups = array('default', 'web');
  421. $this->assertSame($arrGroups, $return['groupSet']);
  422. }
  423. public function testTerminateSingleInstances()
  424. {
  425. $rawHttpResponse = "HTTP/1.1 200 OK\r\n"
  426. . "Date: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  427. . "Server: hi\r\n"
  428. . "Last-modified: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  429. . "Status: 200 OK\r\n"
  430. . "Content-type: application/xml; charset=utf-8\r\n"
  431. . "Expires: Tue, 31 Mar 1981 05:00:00 GMT\r\n"
  432. . "Connection: close\r\n"
  433. . "\r\n"
  434. . "<TerminateInstancesResponse xmlns=\"http://ec2.amazonaws.com/doc/2009-04-04/\">\r\n"
  435. . " <instancesSet>\r\n"
  436. . " <item>\r\n"
  437. . " <instanceId>i-28a64341</instanceId>\r\n"
  438. . " <shutdownState>\r\n"
  439. . " <code>32</code>\r\n"
  440. . " <name>shutting-down</name>\r\n"
  441. . " </shutdownState>\r\n"
  442. . " <previousState>\r\n"
  443. . " <code>16</code>\r\n"
  444. . " <name>running</name>\r\n"
  445. . " </previousState>\r\n"
  446. . " </item>\r\n"
  447. . " </instancesSet>\r\n"
  448. . "</TerminateInstancesResponse>\r\n";
  449. $this->adapter->setResponse($rawHttpResponse);
  450. $return = $this->Zend_Service_Amazon_Ec2_Instance->terminate('i-28a64341');
  451. $this->assertEquals(1, count($return));
  452. foreach($return as $r) {
  453. $this->assertEquals('i-28a64341', $r['instanceId']);
  454. }
  455. }
  456. public function testTerminateMultipleInstances()
  457. {
  458. $rawHttpResponse = "HTTP/1.1 200 OK\r\n"
  459. . "Date: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  460. . "Server: hi\r\n"
  461. . "Last-modified: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  462. . "Status: 200 OK\r\n"
  463. . "Content-type: application/xml; charset=utf-8\r\n"
  464. . "Expires: Tue, 31 Mar 1981 05:00:00 GMT\r\n"
  465. . "Connection: close\r\n"
  466. . "\r\n"
  467. . "<TerminateInstancesResponse xmlns=\"http://ec2.amazonaws.com/doc/2009-04-04/\">\r\n"
  468. . " <instancesSet>\r\n"
  469. . " <item>\r\n"
  470. . " <instanceId>i-28a64341</instanceId>\r\n"
  471. . " <shutdownState>\r\n"
  472. . " <code>32</code>\r\n"
  473. . " <name>shutting-down</name>\r\n"
  474. . " </shutdownState>\r\n"
  475. . " <previousState>\r\n"
  476. . " <code>16</code>\r\n"
  477. . " <name>running</name>\r\n"
  478. . " </previousState>\r\n"
  479. . " </item>\r\n"
  480. . " <item>\r\n"
  481. . " <instanceId>i-21a64348</instanceId>\r\n"
  482. . " <shutdownState>\r\n"
  483. . " <code>32</code>\r\n"
  484. . " <name>shutting-down</name>\r\n"
  485. . " </shutdownState>\r\n"
  486. . " <previousState>\r\n"
  487. . " <code>16</code>\r\n"
  488. . " <name>running</name>\r\n"
  489. . " </previousState>\r\n"
  490. . " </item>\r\n"
  491. . " </instancesSet>\r\n"
  492. . "</TerminateInstancesResponse>\r\n";
  493. $this->adapter->setResponse($rawHttpResponse);
  494. $arrInstanceIds = array('i-28a64341', 'i-21a64348');
  495. $return = $this->Zend_Service_Amazon_Ec2_Instance->terminate($arrInstanceIds);
  496. $this->assertEquals(2, count($return));
  497. foreach($return as $k=>$r) {
  498. $this->assertEquals($arrInstanceIds[$k], $r['instanceId']);
  499. }
  500. }
  501. public function testRebootMultipleInstances()
  502. {
  503. $rawHttpResponse = "HTTP/1.1 200 OK\r\n"
  504. . "Date: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  505. . "Server: hi\r\n"
  506. . "Last-modified: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  507. . "Status: 200 OK\r\n"
  508. . "Content-type: application/xml; charset=utf-8\r\n"
  509. . "Expires: Tue, 31 Mar 1981 05:00:00 GMT\r\n"
  510. . "Connection: close\r\n"
  511. . "\r\n"
  512. . "<RebootInstancesResponse xmlns=\"http://ec2.amazonaws.com/doc/2009-04-04/\">\r\n"
  513. . " <return>true</return>\r\n"
  514. . "</RebootInstancesResponse>\r\n";
  515. $this->adapter->setResponse($rawHttpResponse);
  516. $arrInstanceIds = array('i-28a64341', 'i-21a64348');
  517. $return = $this->Zend_Service_Amazon_Ec2_Instance->reboot($arrInstanceIds);
  518. $this->assertTrue($return);
  519. }
  520. public function testRebootSingleInstance()
  521. {
  522. $rawHttpResponse = "HTTP/1.1 200 OK\r\n"
  523. . "Date: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  524. . "Server: hi\r\n"
  525. . "Last-modified: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  526. . "Status: 200 OK\r\n"
  527. . "Content-type: application/xml; charset=utf-8\r\n"
  528. . "Expires: Tue, 31 Mar 1981 05:00:00 GMT\r\n"
  529. . "Connection: close\r\n"
  530. . "\r\n"
  531. . "<RebootInstancesResponse xmlns=\"http://ec2.amazonaws.com/doc/2009-04-04/\">\r\n"
  532. . " <return>true</return>\r\n"
  533. . "</RebootInstancesResponse>\r\n";
  534. $this->adapter->setResponse($rawHttpResponse);
  535. $return = $this->Zend_Service_Amazon_Ec2_Instance->reboot('i-28a64341');
  536. $this->assertTrue($return);
  537. }
  538. public function testGetConsoleOutput()
  539. {
  540. $rawHttpResponse = "HTTP/1.1 200 OK\r\n"
  541. . "Date: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  542. . "Server: hi\r\n"
  543. . "Last-modified: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  544. . "Status: 200 OK\r\n"
  545. . "Content-type: application/xml; charset=utf-8\r\n"
  546. . "Expires: Tue, 31 Mar 1981 05:00:00 GMT\r\n"
  547. . "Connection: close\r\n"
  548. . "\r\n"
  549. . "<GetConsoleOutputResponse xmlns=\"http://ec2.amazonaws.com/doc/2009-04-04/\">\r\n"
  550. . " <instanceId>i-28a64341</instanceId>\r\n"
  551. . " <timestamp>2007-01-03 15:00:00</timestamp>\r\n"
  552. . " <output>TGludXggdmVyc2lvbiAyLjYuMTYteGVuVSAoYnVpbGRlckBwYXRjaGJhdC5hbWF6b25zYSkgKGdj\r\n"
  553. . "YyB2ZXJzaW9uIDQuMC4xIDIwMDUwNzI3IChSZWQgSGF0IDQuMC4xLTUpKSAjMSBTTVAgVGh1IE9j\r\n"
  554. . "dCAyNiAwODo0MToyNiBTQVNUIDIwMDYKQklPUy1wcm92aWRlZCBwaHlzaWNhbCBSQU0gbWFwOgpY\r\n"
  555. . "ZW46IDAwMDAwMDAwMDAwMDAwMDAgLSAwMDAwMDAwMDZhNDAwMDAwICh1c2FibGUpCjk4ME1CIEhJ\r\n"
  556. . "R0hNRU0gYXZhaWxhYmxlLgo3MjdNQiBMT1dNRU0gYXZhaWxhYmxlLgpOWCAoRXhlY3V0ZSBEaXNh\r\n"
  557. . "YmxlKSBwcm90ZWN0aW9uOiBhY3RpdmUKSVJRIGxvY2t1cCBkZXRlY3Rpb24gZGlzYWJsZWQKQnVp\r\n"
  558. . "bHQgMSB6b25lbGlzdHMKS2VybmVsIGNvbW1hbmQgbGluZTogcm9vdD0vZGV2L3NkYTEgcm8gNApF\r\n"
  559. . "bmFibGluZyBmYXN0IEZQVSBzYXZlIGFuZCByZXN0b3JlLi4uIGRvbmUuCg==</output>\r\n"
  560. . "</GetConsoleOutputResponse>\r\n";
  561. $this->adapter->setResponse($rawHttpResponse);
  562. $return = $this->Zend_Service_Amazon_Ec2_Instance->consoleOutput('i-28a64341');
  563. $arrOutput = array(
  564. 'instanceId' => 'i-28a64341',
  565. 'timestamp' => '2007-01-03 15:00:00',
  566. 'output' => "Linux version 2.6.16-xenU (builder@patchbat.amazonsa) (gcc version 4.0.1 20050727 (Red Hat 4.0.1-5)) #1 SMP Thu Oct 26 08:41:26 SAST 2006\n"
  567. . "BIOS-provided physical RAM map:\n"
  568. . "Xen: 0000000000000000 - 000000006a400000 (usable)\n"
  569. . "980MB HIGHMEM available.\n"
  570. . "727MB LOWMEM available.\n"
  571. . "NX (Execute Disable) protection: active\n"
  572. . "IRQ lockup detection disabled\n"
  573. . "Built 1 zonelists\n"
  574. . "Kernel command line: root=/dev/sda1 ro 4\n"
  575. . "Enabling fast FPU save and restore... done.\n");
  576. $this->assertSame($arrOutput, $return);
  577. }
  578. public function testMonitorInstance()
  579. {
  580. $rawHttpResponse = "HTTP/1.1 200 OK\r\n"
  581. . "Date: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  582. . "Server: hi\r\n"
  583. . "Last-modified: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  584. . "Status: 200 OK\r\n"
  585. . "Content-type: application/xml; charset=utf-8\r\n"
  586. . "Expires: Tue, 31 Mar 1981 05:00:00 GMT\r\n"
  587. . "Connection: close\r\n"
  588. . "\r\n"
  589. . "<MonitorInstancesResponse xmlns=\"http://ec2.amazonaws.com/doc/2009-04-04/\">\r\n"
  590. . " <instancesSet>"
  591. . " <item>"
  592. . " <instanceId>i-43a4412a</instanceId>"
  593. . " <monitoring>"
  594. . " <state>monitoring</state>"
  595. . " </monitoring>"
  596. . " </item>"
  597. . " </instancesSet>"
  598. . "</MonitorInstancesResponse>\r\n";
  599. $this->adapter->setResponse($rawHttpResponse);
  600. $return = $this->Zend_Service_Amazon_Ec2_Instance->monitor('i-43a4412a');
  601. $arrReturn = array(array('instanceid' => 'i-43a4412a', 'monitorstate' => 'monitoring'));
  602. $this->assertSame($arrReturn, $return);
  603. }
  604. public function testUnmonitorInstance()
  605. {
  606. $rawHttpResponse = "HTTP/1.1 200 OK\r\n"
  607. . "Date: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  608. . "Server: hi\r\n"
  609. . "Last-modified: Fri, 24 Oct 2008 17:24:52 GMT\r\n"
  610. . "Status: 200 OK\r\n"
  611. . "Content-type: application/xml; charset=utf-8\r\n"
  612. . "Expires: Tue, 31 Mar 1981 05:00:00 GMT\r\n"
  613. . "Connection: close\r\n"
  614. . "\r\n"
  615. . "<UnmonitorInstancesResponse xmlns=\"http://ec2.amazonaws.com/doc/2009-04-04/\">\r\n"
  616. . " <instancesSet>"
  617. . " <item>"
  618. . " <instanceId>i-43a4412a</instanceId>"
  619. . " <monitoring>"
  620. . " <state>pending</state>"
  621. . " </monitoring>"
  622. . " </item>"
  623. . " </instancesSet>"
  624. . "</UnmonitorInstancesResponse>\r\n";
  625. $this->adapter->setResponse($rawHttpResponse);
  626. $return = $this->Zend_Service_Amazon_Ec2_Instance->unmonitor('i-43a4412a');
  627. $arrReturn = array(array('instanceid' => 'i-43a4412a', 'monitorstate' => 'pending'));
  628. $this->assertSame($arrReturn, $return);
  629. }
  630. }