def test_equals_names(self): tmpl1 = {'Type': 'Foo'} tmpl2 = {'Type': 'Foo'} res1 = generic_rsrc.GenericResource('test_resource1', tmpl1, self.stack) res2 = generic_rsrc.GenericResource('test_resource2', tmpl2, self.stack) self.assertNotEqual(res1, res2)
def test_equals_different_stacks(self): tmpl1 = {'Type': 'Foo'} tmpl2 = {'Type': 'Foo'} tmpl3 = {'Type': 'Bar'} stack2 = parser.Stack(utils.dummy_context(), 'test_stack', parser.Template({}), stack_id=-1) res1 = generic_rsrc.GenericResource('test_resource', tmpl1, self.stack) res2 = generic_rsrc.GenericResource('test_resource', tmpl2, stack2) res3 = generic_rsrc.GenericResource('test_resource2', tmpl3, stack2) self.assertEqual(res1, res2) self.assertNotEqual(res1, res3)
def test_update_template_diff_changed_remove(self): tmpl = {'Type': 'Foo', 'Metadata': {'foo': 123}} update_snippet = {'Type': 'Foo'} res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack) res.update_allowed_keys = ('Metadata', ) diff = res.update_template_diff(json_snippet=update_snippet) self.assertEqual(diff, {'Metadata': None})
def test_state_del_stack(self): tmpl = {'Type': 'Foo'} self.stack.action = self.stack.DELETE self.stack.status = self.stack.IN_PROGRESS res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack) self.assertEqual(res.DELETE, res.action) self.assertEqual(res.COMPLETE, res.status)
def test_update_template_diff_properties_changed(self): tmpl = {'Type': 'Foo', 'Properties': {'Bar': 123}} update_snippet = {'Type': 'Foo', 'Properties': {'Bar': 456}} res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack) res.update_allowed_properties = ('Bar', ) diff = res.update_template_diff_properties(json_snippet=update_snippet) self.assertEqual(diff, {'Bar': 456})
def test_update_template_diff_changed_modified(self): tmpl = {'Type': 'Foo', 'Metadata': {'foo': 123}} update_snippet = {'Type': 'Foo', 'Metadata': {'foo': 456}} res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack) res.update_allowed_keys = ('Metadata', ) diff = res.update_template_diff(update_snippet, tmpl) self.assertEqual(diff, {'Metadata': {'foo': 456}})
def test_update_template_diff_properties_notallowed(self): tmpl = {'Type': 'Foo', 'Properties': {'Bar': 123}} update_snippet = {'Type': 'Foo', 'Properties': {'Bar': 456}} res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack) res.update_allowed_properties = ('Cat', ) self.assertRaises(NotImplementedError, res.update_template_diff_properties, update_snippet)
def test_badprop(self): tmpl = {'Type': 'GenericResourceType', 'Properties': {'foo': 'abc'}} rname = 'bad_resource' res = generic_rsrc.GenericResource(rname, tmpl, self.stack) e = event.Event(self.ctx, self.stack, res, 'TEST_IN_PROGRESS', 'Testing', 'wibble', res.properties) self.assertTrue('Error' in e.resource_properties)
def test_state_set(self): tmpl = {'Type': 'Foo'} res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack) res.state_set(res.CREATE, res.COMPLETE, 'wibble') self.assertEqual(res.action, res.CREATE) self.assertEqual(res.status, res.COMPLETE) self.assertEqual(res.state, (res.CREATE, res.COMPLETE)) self.assertEqual(res.status_reason, 'wibble')
def test_updated_time(self): tmpl = {'Type': 'Foo'} res = generic_rsrc.GenericResource('test_res_upd', tmpl, self.stack) res._store() stored_time = res.updated_time res.state_set(res.CREATE_IN_PROGRESS, 'testing') self.assertNotEqual(res.updated_time, None) self.assertNotEqual(res.updated_time, stored_time)
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) scheduler.TaskRunner(res.create)() self.assertEqual(res.CREATE_COMPLETE, res.state)
def setUp(self): self.m = mox.Mox() tmpl = {'Type': 'Foo', 'Metadata': {'Test': 'Initial metadata'}} ctx = context.get_admin_context() self.m.StubOutWithMock(ctx, 'username') ctx.username = '******' self.stack = parser.Stack(ctx, 'test_stack', parser.Template({})) self.stack.store() self.res = generic_rsrc.GenericResource('metadata_resource', tmpl, self.stack) self.res.create()
def setUp(self): super(MetadataTest, self).setUp() tmpl = {'Type': 'Foo', 'Metadata': {'Test': 'Initial metadata'}} utils.setup_dummy_db() self.stack = parser.Stack(utils.dummy_context(), 'test_stack', parser.Template({})) self.stack.store() self.res = generic_rsrc.GenericResource('metadata_resource', tmpl, self.stack) scheduler.TaskRunner(self.res.create)() self.addCleanup(self.stack.delete)
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) estr = 'Property error : test_resource: Property Foo not assigned' self.assertEqual(estr, res.create()) self.assertEqual(res.CREATE_FAILED, res.state)
def setUp(self): super(MetadataTest, self).setUp() tmpl = {'Type': 'Foo', 'Metadata': {'Test': 'Initial metadata'}} setup_dummy_db() ctx = context.get_admin_context() self.m.StubOutWithMock(ctx, 'username') ctx.username = '******' self.stack = parser.Stack(ctx, 'test_stack', parser.Template({})) self.stack.store() self.res = generic_rsrc.GenericResource('metadata_resource', tmpl, self.stack) scheduler.TaskRunner(self.res.create)()
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) estr = 'Property error : test_resource: Property Foo not assigned' create = scheduler.TaskRunner(res.create) self.assertRaises(exception.ResourceFailure, create) self.assertEqual(res.CREATE_FAILED, res.state)
def test_parsed_template(self): tmpl = { 'Type': 'Foo', 'foo': {'Fn::Join': [' ', ['bar', 'baz', 'quux']]} } res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack) parsed_tmpl = res.parsed_template() self.assertEqual(parsed_tmpl['Type'], 'Foo') self.assertEqual(parsed_tmpl['foo'], 'bar baz quux') self.assertEqual(res.parsed_template('foo'), 'bar baz quux') self.assertEqual(res.parsed_template('foo', 'bar'), 'bar baz quux')
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) scheduler.TaskRunner(res.create)() self.assertEqual(res.CREATE_COMPLETE, res.state) utmpl = {'Type': 'GenericResourceType', 'Properties': {'Food': 'xyz'}} self.assertEqual('Unknown Property Food', res.update(utmpl)) self.assertEqual(res.UPDATE_FAILED, res.state)
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) scheduler.TaskRunner(res.create)() self.assertEqual(res.CREATE_COMPLETE, res.state) utmpl = {'Type': 'GenericResourceType', 'Properties': {}} estr = 'Property error : test_resource: Property Foo not assigned' self.assertEqual(estr, res.update(utmpl)) self.assertEqual(res.UPDATE_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.update_allowed_keys = ('Properties', ) res.update_allowed_properties = ('Foo', ) scheduler.TaskRunner(res.create)() self.assertEqual(res.CREATE_COMPLETE, res.state) utmpl = {'Type': 'GenericResourceType', 'Properties': {'Food': 'xyz'}} self.assertRaises(exception.ResourceFailure, res.update, utmpl) self.assertEqual(res.UPDATE_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) scheduler.TaskRunner(res.create)() self.assertEqual(res.CREATE_COMPLETE, res.state) utmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'xyz'}} self.m.StubOutWithMock(generic_rsrc.GenericResource, 'handle_update') generic_rsrc.GenericResource.handle_update(utmpl).AndReturn( resource.Resource.UPDATE_COMPLETE) self.m.ReplayAll() self.assertEqual(res.UPDATE_COMPLETE, res.update(utmpl)) self.assertEqual(res.UPDATE_COMPLETE, res.state) self.m.VerifyAll()
def test_store_or_update(self): tmpl = {'Type': 'Foo'} res = generic_rsrc.GenericResource('test_res_upd', tmpl, self.stack) res._store_or_update(res.CREATE, res.IN_PROGRESS, 'test_store') self.assertNotEqual(None, res.id) self.assertEqual(res.action, res.CREATE) self.assertEqual(res.status, res.IN_PROGRESS) self.assertEqual(res.status_reason, 'test_store') db_res = r = db_api.resource_get(None, res.id) self.assertEqual(db_res.action, res.CREATE) self.assertEqual(db_res.status, res.IN_PROGRESS) self.assertEqual(db_res.status_reason, 'test_store') res._store_or_update(res.CREATE, res.COMPLETE, 'test_update') self.assertEqual(res.action, res.CREATE) self.assertEqual(res.status, res.COMPLETE) self.assertEqual(res.status_reason, 'test_update') self.assertEqual(db_res.action, res.CREATE) self.assertEqual(db_res.status, res.COMPLETE) self.assertEqual(db_res.status_reason, 'test_update')
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.update_allowed_keys = ('Properties', ) res.update_allowed_properties = ('Foo', ) scheduler.TaskRunner(res.create)() self.assertEqual(res.CREATE_COMPLETE, res.state) utmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'xyz'}} tmpl_diff = {'Properties': {'Foo': 'xyz'}} prop_diff = {'Foo': 'xyz'} self.m.StubOutWithMock(generic_rsrc.GenericResource, 'handle_update') generic_rsrc.GenericResource.handle_update( utmpl, tmpl_diff, prop_diff).AndRaise(NotImplemented) self.m.ReplayAll() self.assertRaises(exception.ResourceFailure, res.update, utmpl) self.assertEqual(res.UPDATE_FAILED, res.state) 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.update_allowed_keys = ('Properties', ) res.update_allowed_properties = ('Foo', ) scheduler.TaskRunner(res.create)() self.assertEqual(res.CREATE_COMPLETE, res.state) utmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'xyz'}} self.m.StubOutWithMock(generic_rsrc.GenericResource, 'handle_update') tmpl_diff = {'Properties': {'Foo': 'xyz'}} prop_diff = {'Foo': 'xyz'} generic_rsrc.GenericResource.handle_update( utmpl, tmpl_diff, prop_diff).AndRaise(resource.UpdateReplace()) self.m.ReplayAll() # should be re-raised so parser.Stack can handle replacement self.assertRaises(resource.UpdateReplace, res.update, utmpl) self.m.VerifyAll()
def test_update_template_diff_properties_none(self): tmpl = {'Type': 'Foo'} update_snippet = {'Type': 'Foo'} res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack) diff = res.update_template_diff_properties(json_snippet=update_snippet) self.assertEqual(diff, {})
def test_created_time(self): tmpl = {'Type': 'Foo'} res = generic_rsrc.GenericResource('test_res_new', tmpl, self.stack) self.assertEqual(res.created_time, None) res._store() self.assertNotEqual(res.created_time, None)
def test_type(self): tmpl = {'Type': 'Foo'} res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack) self.assertEqual(res.type(), 'Foo')
def test_state_description(self): tmpl = {'Type': 'Foo'} res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack) res.state_set('blarg', 'wibble') self.assertEqual(res.state_description, 'wibble')
def test_state(self): tmpl = {'Type': 'Foo'} res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack) res.state_set('bar') self.assertEqual(res.state, 'bar')
def test_state_defaults(self): tmpl = {'Type': 'Foo'} res = generic_rsrc.GenericResource('test_res_def', tmpl, self.stack) self.assertEqual(res.state, None) self.assertEqual(res.state_description, '')