def assert_skeleton_from_model_is(self, model, generated_skeleton): shape = DenormalizedStructureBuilder().with_members( model).build_model() actual = self.arg_generator.generate_skeleton(shape) self.assertEqual(actual, generated_skeleton)
def test_dangling_resource_loads_data(self): # Given a loadable resource instance that contains a reference # to another resource which has a resource data path, the # referenced resource should be loaded with all of the data # contained at that path. This allows loading references # which would otherwise not be loadable (missing load method) # and prevents extra load calls for others when we already # have the data available. self.defs = { 'Instance': { 'identifiers': [{ 'name': 'Id' }], 'has': { 'NetworkInterface': { 'resource': { 'type': 'NetworkInterface', 'identifiers': [{ 'target': 'Id', 'source': 'data', 'path': 'NetworkInterface.Id', }], 'path': 'NetworkInterface', } } }, }, 'NetworkInterface': { 'identifiers': [{ 'name': 'Id' }], 'shape': 'NetworkInterfaceShape', }, } self.model = self.defs['Instance'] shape = (DenormalizedStructureBuilder().with_members({ 'Id': { 'type': 'string', }, 'PublicIp': { 'type': 'string' }, }).build_model()) service_model = mock.Mock() service_model.shape_for.return_value = shape cls = self.load('Instance', self.model, self.defs, service_model) instance = cls('instance-id') # Set some data as if we had completed a load action. def set_meta_data(): instance.meta.data = { 'NetworkInterface': { 'Id': 'network-interface-id', 'PublicIp': '127.0.0.1', } } instance.load = mock.Mock(side_effect=set_meta_data) # Now, get the reference and make sure it has its data # set as expected. interface = instance.network_interface assert interface.meta.data is not None assert interface.public_ip == '127.0.0.1'