From 40db44f2cdd3695e8358a62e88fe7b7732aaee2f Mon Sep 17 00:00:00 2001 From: Mike Fuller Date: Mon, 19 Jan 2015 17:03:14 +1100 Subject: [PATCH] Added Exceptions on create_option_group --- moto/rds2/exceptions.py | 1 + moto/rds2/models.py | 18 ++++++++++++++++-- tests/test_rds2/test_rds2.py | 18 ++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/moto/rds2/exceptions.py b/moto/rds2/exceptions.py index 936b979d2..a5c935659 100644 --- a/moto/rds2/exceptions.py +++ b/moto/rds2/exceptions.py @@ -36,3 +36,4 @@ class DBSubnetGroupNotFoundError(RDSClientError): super(DBSubnetGroupNotFoundError, self).__init__( 'DBSubnetGroupNotFound', "Subnet Group {0} not found.".format(subnet_group_name)) + diff --git a/moto/rds2/models.py b/moto/rds2/models.py index 67a865c7f..f6edb240b 100644 --- a/moto/rds2/models.py +++ b/moto/rds2/models.py @@ -9,7 +9,7 @@ from moto.cloudformation.exceptions import UnformattedGetAttTemplateException from moto.core import BaseBackend from moto.core.utils import get_random_hex from moto.ec2.models import ec2_backends -from .exceptions import DBInstanceNotFoundError, DBSecurityGroupNotFoundError, DBSubnetGroupNotFoundError +from .exceptions import RDSClientError, DBInstanceNotFoundError, DBSecurityGroupNotFoundError, DBSubnetGroupNotFoundError class Database(object): @@ -444,13 +444,27 @@ class RDS2Backend(BaseBackend): def create_option_group(self, option_group_kwargs): option_group_id = option_group_kwargs['name'] + valid_option_group_engines = {'postgres': ['9.3'], 'mysql': []} + + if 'description' not in option_group_kwargs or not option_group_kwargs['description']: + raise RDSClientError('InvalidParameterValue', + 'The parameter OptionGroupDescription must be provided and must not be blank.') + if option_group_kwargs['engine_name'] not in valid_option_group_engines.keys(): + raise RDSClientError('InvalidParameterValue', 'Invalid DB engine: non-existant') + if option_group_kwargs['major_engine_version'] not in\ + valid_option_group_engines[option_group_kwargs['engine_name']]: + raise RDSClientError('InvalidParameterCombination', + 'Cannot find major version {0} for {1}'.format( + option_group_kwargs['major_engine_version'], + option_group_kwargs['engine_name'] + )) option_group = OptionGroup(**option_group_kwargs) self.option_groups[option_group_id] = option_group return option_group class OptionGroup(object): - def __init__(self, name, engine_name, major_engine_version, description): + def __init__(self, name, engine_name, major_engine_version, description=None): self.engine_name = engine_name self.major_engine_version = major_engine_version self.description = description diff --git a/tests/test_rds2/test_rds2.py b/tests/test_rds2/test_rds2.py index dd44719e4..d75f294f3 100644 --- a/tests/test_rds2/test_rds2.py +++ b/tests/test_rds2/test_rds2.py @@ -73,6 +73,24 @@ def test_create_option_group(): option_group['CreateOptionGroupResponse']['CreateOptionGroupResult']['OptionGroup']['OptionGroupDescription'].should.equal('test option group') option_group['CreateOptionGroupResponse']['CreateOptionGroupResult']['OptionGroup']['MajorEngineVersion'].should.equal('9.3') +@mock_rds2 +def test_create_option_group_bad_engine_name(): + conn = boto.rds2.connect_to_region("us-west-2") + conn.create_option_group.when.called_with('test', 'invalid_engine', '9.3', 'test invalid engine').should.throw(BotoServerError) + + +@mock_rds2 +def test_create_option_group_bad_engine_major_version(): + conn = boto.rds2.connect_to_region("us-west-2") + conn.create_option_group.when.called_with('test', 'postgres', '9.3.a', 'test invalid engine version').should.throw(BotoServerError) + + +@mock_rds2 +def test_create_option_group_empty_description(): + conn = boto.rds2.connect_to_region("us-west-2") + conn.create_option_group.when.called_with('test', 'postgres', '9.3', '').should.throw(BotoServerError) + + #@disable_on_py3() #@mock_rds2 #def test_delete_database():