From 1056677bb6e5bda331270100b577f085cd0b5067 Mon Sep 17 00:00:00 2001 From: Sirisha Devineni Date: Tue, 18 Sep 2012 14:11:45 +0530 Subject: Validates Timestamp or Expiry time in EC2 requests Validating the format of Timestamp/Expires in the EC2 requests and checking for the expiry of the request. 'ec2_timestamp_expiry' flag is the time in seconds before ec2 timestamp expires. Fixes bug 1036343 Change-Id: I2b63d85dc1d658a58ceda67c0dfd0a8eac807577 --- nova/tests/api/ec2/test_ec2_validate.py | 81 +++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) (limited to 'nova/tests') diff --git a/nova/tests/api/ec2/test_ec2_validate.py b/nova/tests/api/ec2/test_ec2_validate.py index f46262c35..c9c11d547 100644 --- a/nova/tests/api/ec2/test_ec2_validate.py +++ b/nova/tests/api/ec2/test_ec2_validate.py @@ -16,7 +16,10 @@ # License for the specific language governing permissions and limitations # under the License. +import datetime + from nova.api.ec2 import cloud +from nova.api.ec2 import ec2utils from nova.compute import utils as compute_utils from nova import context from nova import db @@ -24,6 +27,7 @@ from nova import exception from nova import flags from nova.openstack.common import log as logging from nova.openstack.common import rpc +from nova.openstack.common import timeutils from nova import test from nova.tests import fake_network from nova.tests.image import fake @@ -166,3 +170,80 @@ class EC2ValidateTestCase(test.TestCase): self.cloud.detach_volume, context=self.context, volume_id=ec2_id) + + +class EC2TimestampValidationTestCase(test.TestCase): + """Test case for EC2 request timestamp validation""" + + def test_validate_ec2_timestamp_valid(self): + params = {'Timestamp': '2011-04-22T11:29:49Z'} + expired = ec2utils.is_ec2_timestamp_expired(params) + self.assertFalse(expired) + + def test_validate_ec2_timestamp_old_format(self): + params = {'Timestamp': '2011-04-22T11:29:49'} + expired = ec2utils.is_ec2_timestamp_expired(params) + self.assertTrue(expired) + + def test_validate_ec2_timestamp_not_set(self): + params = {} + expired = ec2utils.is_ec2_timestamp_expired(params) + self.assertFalse(expired) + + def test_validate_ec2_timestamp_invalid_format(self): + params = {'Timestamp': '2011-04-22T11:29:49.000P'} + expired = ec2utils.is_ec2_timestamp_expired(params) + self.assertTrue(expired) + + def test_validate_ec2_timestamp_advanced_time(self): + + #EC2 request with Timestamp in advanced time + timestamp = timeutils.utcnow() + datetime.timedelta(seconds=250) + params = {'Timestamp': timeutils.strtime(timestamp, + "%Y-%m-%dT%H:%M:%SZ")} + expired = ec2utils.is_ec2_timestamp_expired(params, expires=300) + self.assertFalse(expired) + + def test_validate_ec2_timestamp_advanced_time_expired(self): + timestamp = timeutils.utcnow() + datetime.timedelta(seconds=350) + params = {'Timestamp': timeutils.strtime(timestamp, + "%Y-%m-%dT%H:%M:%SZ")} + expired = ec2utils.is_ec2_timestamp_expired(params, expires=300) + self.assertTrue(expired) + + def test_validate_ec2_req_timestamp_not_expired(self): + params = {'Timestamp': timeutils.isotime()} + expired = ec2utils.is_ec2_timestamp_expired(params, expires=15) + self.assertFalse(expired) + + def test_validate_ec2_req_timestamp_expired(self): + params = {'Timestamp': '2011-04-22T12:00:00Z'} + compare = ec2utils.is_ec2_timestamp_expired(params, expires=300) + self.assertTrue(compare) + + def test_validate_ec2_req_expired(self): + params = {'Expires': timeutils.isotime()} + expired = ec2utils.is_ec2_timestamp_expired(params) + self.assertTrue(expired) + + def test_validate_ec2_req_not_expired(self): + expire = timeutils.utcnow() + datetime.timedelta(seconds=350) + params = {'Expires': timeutils.strtime(expire, "%Y-%m-%dT%H:%M:%SZ")} + expired = ec2utils.is_ec2_timestamp_expired(params) + self.assertFalse(expired) + + def test_validate_Expires_timestamp_invalid_format(self): + + #EC2 request with invalid Expires + params = {'Expires': '2011-04-22T11:29:49'} + expired = ec2utils.is_ec2_timestamp_expired(params) + self.assertTrue(expired) + + def test_validate_ec2_req_timestamp_Expires(self): + + #EC2 request with both Timestamp and Expires + params = {'Timestamp': '2011-04-22T11:29:49Z', + 'Expires': timeutils.isotime()} + self.assertRaises(exception.InvalidRequest, + ec2utils.is_ec2_timestamp_expired, + params) -- cgit