def handle_resume(self):
logger.warning('Resuming generic resource (Type "%s")' % self.type())
+
+
+class ResourceWithProps(GenericResource):
+ properties_schema = {'Foo': {'Type': 'String'}}
+
+
+class ResourceWithRequiredProps(GenericResource):
+ properties_schema = {'Foo': {'Type': 'String',
+ 'Required': True}}
tmpl = {
'Resources': {
'EventTestResource': {
- 'Type': 'GenericResourceType',
- 'Properties': {'foo': True}
+ 'Type': 'ResourceWithRequiredProps',
+ 'Properties': {'Foo': 'goo'}
}
}
}
self.m.ReplayAll()
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'foo': {'Type': 'Boolean', 'Required': True}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
- resource._register_class('GenericResourceType',
- generic_rsrc.GenericResource)
+ resource._register_class('ResourceWithRequiredProps',
+ generic_rsrc.ResourceWithRequiredProps)
self.stack = parser.Stack(self.ctx, 'event_load_test_stack',
template.Template(tmpl))
self.assertEqual(loaded_e.status, 'IN_PROGRESS')
self.assertEqual(loaded_e.reason, 'Testing')
self.assertNotEqual(loaded_e.timestamp, None)
- self.assertEqual(loaded_e.resource_properties, {'foo': True})
+ self.assertEqual(loaded_e.resource_properties, {'Foo': 'goo'})
def test_identifier(self):
e = event.Event(self.ctx, self.stack, self.resource,
self.assertEqual(e.identifier(), expected_identifier)
def test_badprop(self):
- tmpl = {'Type': 'GenericResourceType', 'Properties': {'foo': 'abc'}}
+ tmpl = {'Type': 'ResourceWithRequiredProps',
+ 'Properties': {'Foo': False}}
rname = 'bad_resource'
- res = generic_rsrc.GenericResource(rname, tmpl, self.stack)
+ res = generic_rsrc.ResourceWithRequiredProps(rname, tmpl, self.stack)
e = event.Event(self.ctx, self.stack, res,
'TEST', 'IN_PROGRESS', 'Testing',
'wibble', res.properties)
self.ctx.user = self.username
self.ctx.tenant_id = 'test_tenant'
- generic_rsrc.GenericResource.properties_schema = {}
resource._register_class('GenericResourceType',
generic_rsrc.GenericResource)
+ resource._register_class('ResourceWithPropsType',
+ generic_rsrc.ResourceWithProps)
self.m.ReplayAll()
@stack_delete_after
def test_update_modify_ok_replace(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
- tmpl = {'Resources': {'AResource': {'Type': 'GenericResourceType',
+ tmpl = {'Resources': {'AResource': {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'abc'}}}}
self.m.StubOutWithMock(scheduler.TaskRunner, '_sleep')
self.assertEqual(self.stack.state,
(parser.Stack.CREATE, parser.Stack.COMPLETE))
- tmpl2 = {'Resources': {'AResource': {'Type': 'GenericResourceType',
+ tmpl2 = {'Resources': {'AResource': {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'xyz'}}}}
updated_stack = parser.Stack(self.ctx, 'updated_stack',
@stack_delete_after
def test_update_modify_update_failed(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
- tmpl = {'Resources': {'AResource': {'Type': 'GenericResourceType',
+ tmpl = {'Resources': {'AResource': {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'abc'}}}}
self.m.StubOutWithMock(scheduler.TaskRunner, '_sleep')
res.update_allowed_keys = ('Properties',)
res.update_allowed_properties = ('Foo',)
- tmpl2 = {'Resources': {'AResource': {'Type': 'GenericResourceType',
+ tmpl2 = {'Resources': {'AResource': {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'xyz'}}}}
updated_stack = parser.Stack(self.ctx, 'updated_stack',
@stack_delete_after
def test_update_modify_replace_failed_delete(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
- tmpl = {'Resources': {'AResource': {'Type': 'GenericResourceType',
+ tmpl = {'Resources': {'AResource': {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'abc'}}}}
self.m.StubOutWithMock(scheduler.TaskRunner, '_sleep')
self.assertEqual(self.stack.state,
(parser.Stack.CREATE, parser.Stack.COMPLETE))
- tmpl2 = {'Resources': {'AResource': {'Type': 'GenericResourceType',
+ tmpl2 = {'Resources': {'AResource': {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'xyz'}}}}
updated_stack = parser.Stack(self.ctx, 'updated_stack',
@stack_delete_after
def test_update_modify_replace_failed_create(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
- tmpl = {'Resources': {'AResource': {'Type': 'GenericResourceType',
+ tmpl = {'Resources': {'AResource': {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'abc'}}}}
self.m.StubOutWithMock(scheduler.TaskRunner, '_sleep')
self.assertEqual(self.stack.state,
(parser.Stack.CREATE, parser.Stack.COMPLETE))
- tmpl2 = {'Resources': {'AResource': {'Type': 'GenericResourceType',
+ tmpl2 = {'Resources': {'AResource': {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'xyz'}}}}
updated_stack = parser.Stack(self.ctx, 'updated_stack',
@stack_delete_after
def test_update_rollback(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
- tmpl = {'Resources': {'AResource': {'Type': 'GenericResourceType',
+ tmpl = {'Resources': {'AResource': {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'abc'}}}}
self.m.StubOutWithMock(scheduler.TaskRunner, '_sleep')
self.assertEqual(self.stack.state,
(parser.Stack.CREATE, parser.Stack.COMPLETE))
- tmpl2 = {'Resources': {'AResource': {'Type': 'GenericResourceType',
+ tmpl2 = {'Resources': {'AResource': {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'xyz'}}}}
updated_stack = parser.Stack(self.ctx, 'updated_stack',
@stack_delete_after
def test_update_rollback_fail(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
- tmpl = {'Resources': {'AResource': {'Type': 'GenericResourceType',
+ tmpl = {'Resources': {'AResource': {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'abc'}}}}
self.m.StubOutWithMock(scheduler.TaskRunner, '_sleep')
self.assertEqual(self.stack.state,
(parser.Stack.CREATE, parser.Stack.COMPLETE))
- tmpl2 = {'Resources': {'AResource': {'Type': 'GenericResourceType',
+ tmpl2 = {'Resources': {'AResource': {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'xyz'}}}}
updated_stack = parser.Stack(self.ctx, 'updated_stack',
changes in dynamic attributes, due to other resources been updated
are not ignored and can cause dependant resources to be updated.
'''
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
tmpl = {'Resources': {
- 'AResource': {'Type': 'GenericResourceType',
+ 'AResource': {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'abc'}},
- 'BResource': {'Type': 'GenericResourceType',
+ 'BResource': {'Type': 'ResourceWithPropsType',
'Properties': {
'Foo': {'Ref': 'AResource'}}}}}
tmpl2 = {'Resources': {
- 'AResource': {'Type': 'GenericResourceType',
+ 'AResource': {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'smelly'}},
- 'BResource': {'Type': 'GenericResourceType',
+ 'BResource': {'Type': 'ResourceWithPropsType',
'Properties': {
'Foo': {'Ref': 'AResource'}}}}}
check that rollback still works with dynamic metadata
this test fails the first instance
'''
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
tmpl = {'Resources': {
- 'AResource': {'Type': 'GenericResourceType',
+ 'AResource': {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'abc'}},
- 'BResource': {'Type': 'GenericResourceType',
+ 'BResource': {'Type': 'ResourceWithPropsType',
'Properties': {
'Foo': {'Ref': 'AResource'}}}}}
tmpl2 = {'Resources': {
- 'AResource': {'Type': 'GenericResourceType',
+ 'AResource': {'Type': 'ResourceWithPropsType',
'Properties': {'Foo': 'smelly'}},
- 'BResource': {'Type': 'GenericResourceType',
+ 'BResource': {'Type': 'ResourceWithPropsType',
'Properties': {
'Foo': {'Ref': 'AResource'}}}}}
this test fails the second instance
'''
- class ResourceTypeA(generic_rsrc.GenericResource):
+ class ResourceTypeA(generic_rsrc.ResourceWithProps):
count = 0
def handle_create(self):
resource._register_class('ResourceTypeA', ResourceTypeA)
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
tmpl = {'Resources': {
'AResource': {'Type': 'ResourceTypeA',
'Properties': {'Foo': 'abc'}},
- 'BResource': {'Type': 'GenericResourceType',
+ 'BResource': {'Type': 'ResourceWithPropsType',
'Properties': {
'Foo': {'Ref': 'AResource'}}}}}
tmpl2 = {'Resources': {
'AResource': {'Type': 'ResourceTypeA',
'Properties': {'Foo': 'smelly'}},
- 'BResource': {'Type': 'GenericResourceType',
+ 'BResource': {'Type': 'ResourceWithPropsType',
'Properties': {
'Foo': {'Ref': 'AResource'}}}}}
update_snippet, tmpl)
def test_resource(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}}
- res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack)
+ res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack)
scheduler.TaskRunner(res.create)()
self.assertEqual((res.CREATE, res.COMPLETE), res.state)
def test_create_fail_missing_req_prop(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String', 'Required': True}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
tmpl = {'Type': 'GenericResourceType', 'Properties': {}}
rname = 'test_resource'
- res = generic_rsrc.GenericResource(rname, tmpl, self.stack)
+ res = generic_rsrc.ResourceWithRequiredProps(rname, tmpl, self.stack)
estr = 'Property error : test_resource: Property Foo not assigned'
create = scheduler.TaskRunner(res.create)
self.assertEqual((res.CREATE, res.FAILED), res.state)
def test_create_fail_prop_typo(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String', 'Required': True}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
tmpl = {'Type': 'GenericResourceType', 'Properties': {'Food': 'abc'}}
rname = 'test_resource'
- res = generic_rsrc.GenericResource(rname, tmpl, self.stack)
+ res = generic_rsrc.ResourceWithProps(rname, tmpl, self.stack)
estr = 'Property error : test_resource: Property Foo not assigned'
create = scheduler.TaskRunner(res.create)
self.assertEqual((res.CREATE, res.FAILED), res.state)
def test_update_ok(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}}
- res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack)
+ res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack)
res.update_allowed_keys = ('Properties',)
res.update_allowed_properties = ('Foo',)
scheduler.TaskRunner(res.create)()
self.m.VerifyAll()
def test_update_replace(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}}
- res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack)
+ res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack)
res.update_allowed_keys = ('Properties',)
res.update_allowed_properties = ('Foo',)
scheduler.TaskRunner(res.create)()
self.m.VerifyAll()
def test_update_fail_missing_req_prop(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String', 'Required': True}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}}
- res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack)
+ res = generic_rsrc.ResourceWithRequiredProps('test_resource',
+ tmpl, self.stack)
res.update_allowed_keys = ('Properties',)
res.update_allowed_properties = ('Foo',)
scheduler.TaskRunner(res.create)()
self.assertEqual((res.UPDATE, res.FAILED), res.state)
def test_update_fail_prop_typo(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}}
- res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack)
+ res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack)
res.update_allowed_keys = ('Properties',)
res.update_allowed_properties = ('Foo',)
scheduler.TaskRunner(res.create)()
self.assertEqual((res.UPDATE, res.FAILED), res.state)
def test_update_not_implemented(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}}
- res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack)
+ res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack)
res.update_allowed_keys = ('Properties',)
res.update_allowed_properties = ('Foo',)
scheduler.TaskRunner(res.create)()
self.m.VerifyAll()
def test_suspend_resume_ok(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}}
- res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack)
+ res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack)
res.update_allowed_keys = ('Properties',)
res.update_allowed_properties = ('Foo',)
scheduler.TaskRunner(res.create)()
self.assertEqual((res.RESUME, res.COMPLETE), res.state)
def test_suspend_fail_inprogress(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}}
- res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack)
+ res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack)
scheduler.TaskRunner(res.create)()
self.assertEqual((res.CREATE, res.COMPLETE), res.state)
self.assertRaises(exception.ResourceFailure, suspend)
def test_resume_fail_not_suspend_complete(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}}
- res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack)
+ res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack)
scheduler.TaskRunner(res.create)()
self.assertEqual((res.CREATE, res.COMPLETE), res.state)
self.assertRaises(exception.ResourceFailure, resume)
def test_suspend_fail_exit(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}}
- res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack)
+ res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack)
scheduler.TaskRunner(res.create)()
self.assertEqual((res.CREATE, res.COMPLETE), res.state)
self.assertEqual((res.SUSPEND, res.FAILED), res.state)
def test_resume_fail_exit(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}}
- res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack)
+ res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack)
scheduler.TaskRunner(res.create)()
self.assertEqual((res.CREATE, res.COMPLETE), res.state)
self.assertEqual((res.RESUME, res.FAILED), res.state)
def test_suspend_fail_exception(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}}
- res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack)
+ res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack)
scheduler.TaskRunner(res.create)()
self.assertEqual((res.CREATE, res.COMPLETE), res.state)
self.assertEqual((res.SUSPEND, res.FAILED), res.state)
def test_resume_fail_exception(self):
- # patch in a dummy property schema for GenericResource
- dummy_schema = {'Foo': {'Type': 'String'}}
- generic_rsrc.GenericResource.properties_schema = dummy_schema
-
tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}}
- res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack)
+ res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack)
scheduler.TaskRunner(res.create)()
self.assertEqual((res.CREATE, res.COMPLETE), res.state)