def test_create_fail_prop_typo(self): tmpl = {'Type': 'GenericResourceType', 'Properties': {'Food': 'abc'}} rname = 'test_resource' res = generic_rsrc.ResourceWithProps(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, res.FAILED), res.state)
def test_create_fail_metadata_parse_error(self): tmpl = {'Type': 'GenericResourceType', 'Properties': {}, 'Metadata': {"Fn::GetAtt": ["ResourceA", "abc"]}} rname = 'test_resource' res = generic_rsrc.ResourceWithProps(rname, tmpl, self.stack) create = scheduler.TaskRunner(res.create) self.assertRaises(exception.ResourceFailure, create) self.assertEqual((res.CREATE, res.FAILED), res.state)
def test_suspend_resume_ok(self): tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}} 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.CREATE, res.COMPLETE), res.state) scheduler.TaskRunner(res.suspend)() self.assertEqual((res.SUSPEND, res.COMPLETE), res.state) scheduler.TaskRunner(res.resume)() self.assertEqual((res.RESUME, res.COMPLETE), res.state)
def test_create_resource_after_destroy(self): tmpl = {'Type': 'GenericResourceType'} rname = 'test_res_id_none' res = generic_rsrc.ResourceWithProps(rname, tmpl, self.stack) res.id = 'test_res_id' (res.action, res.status) = (res.INIT, res.DELETE) self.assertRaises(exception.ResourceFailure, res.create) res.destroy() res.state_reset() scheduler.TaskRunner(res.create)() self.assertEqual((res.CREATE, res.COMPLETE), res.state)
def test_update_fail_prop_typo(self): tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}} 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.CREATE, res.COMPLETE), res.state) utmpl = {'Type': 'GenericResourceType', 'Properties': {'Food': 'xyz'}} self.assertRaises(exception.ResourceFailure, res.update, utmpl) self.assertEqual((res.UPDATE, res.FAILED), res.state)
def test_resume_fail_not_suspend_complete(self): tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}} res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack) scheduler.TaskRunner(res.create)() self.assertEqual((res.CREATE, res.COMPLETE), res.state) non_suspended_states = [s for s in itertools.product(res.ACTIONS, res.STATUSES) if s != (res.SUSPEND, res.COMPLETE)] for state in non_suspended_states: res.state_set(*state) resume = scheduler.TaskRunner(res.resume) self.assertRaises(exception.ResourceFailure, resume)
def test_suspend_fail_exception(self): tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}} res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack) scheduler.TaskRunner(res.create)() self.assertEqual((res.CREATE, res.COMPLETE), res.state) self.m.StubOutWithMock(generic_rsrc.ResourceWithProps, 'handle_suspend') generic_rsrc.ResourceWithProps.handle_suspend().AndRaise(Exception()) self.m.ReplayAll() suspend = scheduler.TaskRunner(res.suspend) self.assertRaises(exception.ResourceFailure, suspend) self.assertEqual((res.SUSPEND, res.FAILED), res.state)
def test_suspend_fail_inprogress(self): tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}} res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack) scheduler.TaskRunner(res.create)() self.assertEqual((res.CREATE, res.COMPLETE), res.state) res.state_set(res.CREATE, res.IN_PROGRESS) suspend = scheduler.TaskRunner(res.suspend) self.assertRaises(exception.ResourceFailure, suspend) res.state_set(res.UPDATE, res.IN_PROGRESS) suspend = scheduler.TaskRunner(res.suspend) self.assertRaises(exception.ResourceFailure, suspend) res.state_set(res.DELETE, res.IN_PROGRESS) suspend = scheduler.TaskRunner(res.suspend) self.assertRaises(exception.ResourceFailure, suspend)
def test_update_not_implemented(self): tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}} 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.CREATE, res.COMPLETE), res.state) utmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'xyz'}} tmpl_diff = {'Properties': {'Foo': 'xyz'}} prop_diff = {'Foo': 'xyz'} self.m.StubOutWithMock(generic_rsrc.ResourceWithProps, 'handle_update') generic_rsrc.ResourceWithProps.handle_update( utmpl, tmpl_diff, prop_diff).AndRaise(NotImplemented) self.m.ReplayAll() self.assertRaises(exception.ResourceFailure, res.update, utmpl) self.assertEqual((res.UPDATE, res.FAILED), res.state) self.m.VerifyAll()
def test_update_replace(self): tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}} 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.CREATE, res.COMPLETE), res.state) utmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'xyz'}} self.m.StubOutWithMock(generic_rsrc.ResourceWithProps, 'handle_update') tmpl_diff = {'Properties': {'Foo': 'xyz'}} prop_diff = {'Foo': 'xyz'} generic_rsrc.ResourceWithProps.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_ok(self): tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}} 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.CREATE, res.COMPLETE), res.state) utmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'xyz'}} tmpl_diff = {'Properties': {'Foo': 'xyz'}} prop_diff = {'Foo': 'xyz'} self.m.StubOutWithMock(generic_rsrc.ResourceWithProps, 'handle_update') generic_rsrc.ResourceWithProps.handle_update(utmpl, tmpl_diff, prop_diff).AndReturn(None) self.m.ReplayAll() self.assertEqual(None, res.update(utmpl)) self.assertEqual((res.UPDATE, res.COMPLETE), res.state) self.m.VerifyAll()
def test_resource(self): tmpl = {'Type': 'GenericResourceType', 'Properties': {'Foo': 'abc'}} res = generic_rsrc.ResourceWithProps('test_resource', tmpl, self.stack) scheduler.TaskRunner(res.create)() self.assertEqual((res.CREATE, res.COMPLETE), res.state)