ZF-5791: Create an abstract class for use with the Amazon Web Servies.
Description
Create an abstract class to set a standard way for to handle the access and secret keys with all the AWS components.
<?php
require_once 'Zend/Service/Abstract.php';
abstract class Zend_Service_Amazon_Abstract extends Zend_Service_Abstract
{
/**
* @var string Amazon Access Key
*/
protected static $defaultAccessKey = null;
/**
* @var string Amazon Secret Key
*/
protected static $defaultSecretKey = null;
/**
* @var string Amazon Secret Key
*/
protected $secretKey;
/**
* @var string Amazon Access Key
*/
protected $accessKey;
/**
* Set the keys to use when accessing SQS.
*
* @param string $access_key
* @param string $secret_key
* @return void
*/
public static function setKeys($accessKey, $secretKey)
{
self::$defaultAccessKey = $accessKey;
self::$defaultSecretKey = $secretKey;
}
/**
* Create Amazon Sqs client.
*
* @param string $access_key
* @param string $secret_key
* @return void
*/
public function __construct($accessKey=null, $secretKey=null)
{
if(!$accessKey) {
$accessKey = self::$defaultAccessKey;
}
if(!$secretKey) {
$secretKey = self::$defaultSecretKey;
}
if(!$accessKey || !$secretKey) {
require_once 'Zend/Service/Amazon/Exception.php';
throw new Zend_Service_Amazon_Exception("AWS keys were not supplied");
}
$this->accessKey = $accessKey;
$this->secretKey = $secretKey;
}
/**
* Method to fetch the Access Key
*
* @return string
*/
protected function getAccessKey()
{
return $this->accessKey;
}
/**
* Method to fetch the Secret AWS Key
*
* @return string
*/
protected function getSecretKey()
{
return $this->secretKey;
}
}
<?php
require_once 'Zend/Service/Amazon/Abstract.php';
require_once 'PHPUnit/Framework/TestCase.php';
/**
* Zend_Service_Amazon_Sqs_Queue test case.
*/
class AmamzonAbstract extends PHPUnit_Framework_TestCase
{
/**
* Prepares the environment before running a test.
*/
protected function setUp()
{
parent::setUp();
}
/**
* Cleans up the environment after running a test.
*/
protected function tearDown()
{
parent::tearDown();
}
public function testNoKeysThrowException()
{
try {
$class = new TestAmamzonAbstract();
$this->fail('Exception should be thrown when no keys are passed in.');
} catch(Zend_Service_Amazon_Exception $zsae) {}
}
public function testConstructorWithKeysDoesNotThrowException()
{
try {
$class = new TestAmamzonAbstract('TestAccessKey', 'TestSecretKey');
} catch(Zend_Service_Amazon_Exception $zsae) {
$this->fail('Exception should be thrown when no keys are passed in.');
}
}
public function testSetStaticKeys()
{
TestAmamzonAbstract::setKeys('TestAccessKey', 'TestSecretKey');
$class = new TestAmamzonAbstract();
$this->assertEquals('TestAccessKey', $class->returnAccessKey());
$this->assertEquals('TestSecretKey', $class->returnSecretKey());
}
public function testPassKeysIntoConstructor()
{
$class = new TestAmamzonAbstract('TestAccessKey', 'TestSecretKey');
$this->assertEquals('TestAccessKey', $class->returnAccessKey());
$this->assertEquals('TestSecretKey', $class->returnSecretKey());
}
public function testPassedInKeysOverrideStaticSetKeys()
{
TestAmamzonAbstract::setKeys('TestStaticAccessKey', 'TestStaticSecretKey');
$class = new TestAmamzonAbstract('TestAccessKey', 'TestSecretKey');
$this->assertEquals('TestAccessKey', $class->returnAccessKey());
$this->assertEquals('TestSecretKey', $class->returnSecretKey());
}
}
class TestAmamzonAbstract extends Zend_Service_Amazon_Abstract
{
public function returnAccessKey()
{
return $this->accessKey;
}
public function returnSecretKey()
{
return $this->secretKey;
}
}
Comments
Posted by Jon Whitcraft (sidhighwind) on 2009-02-15T08:13:46.000+0000
Abstract Class for use with Amazon Aws Services.
Posted by Jon Whitcraft (sidhighwind) on 2009-02-15T08:14:35.000+0000
Test case for the attached class.
Posted by Jon Whitcraft (sidhighwind) on 2009-02-15T09:21:23.000+0000
Removed the files and made the code inline.
Posted by Jon Whitcraft (sidhighwind) on 2009-02-15T09:23:22.000+0000
Zip file for easy download.
Posted by Ralph Schindler (ralph) on 2009-02-23T14:04:46.000+0000
The use of statics for the access and secret key imply that you cannot use more than one amazon account per request, is that by design?
-ralph
Posted by Jon Whitcraft (sidhighwind) on 2009-02-23T16:51:27.000+0000
Ralph - Yes that is correct. This can easily be changed..
Jon
Posted by Jon Whitcraft (sidhighwind) on 2009-03-11T13:30:21.000+0000
Ralph
If you look at the _construct method you will notice that if you don't specify a key or secret key it will use the static keys. The static properties are a way to have default keys set so you don't need to provide the keys everytime you create a new instance but you can if you need to specify new keys.
Jon
Posted by Jon Whitcraft (sidhighwind) on 2009-04-07T17:59:00.000+0000
This got checked in with the Ec2 Component.