InstanceTest.php 34 KB

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