2
0

InstanceTest.php 34 KB

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