@mock.patch.object(resource_objects.Resource, 'get_all_by_stack')
def test_iter_resources_nested_with_filters(self, mock_db_call):
    tpl = {'HeatTemplateFormatVersion': '2012-12-12', 'Resources': {'A': {'Type': 'StackResourceType'}, 'B': {'Type': 'GenericResourceType'}}}
    self.stack = stack.Stack(self.ctx, 'test_stack', template.Template(tpl), status_reason='blarg')
    self.stack.store()
    mock_rsc_a = mock.MagicMock(current_template_id=self.stack.t.id)
    mock_rsc_a.name = 'A'
    mock_rsc_b = mock.MagicMock(current_template_id=self.stack.t.id)
    mock_rsc_b.name = 'B'
    mock_db_call.return_value = {'A': mock_rsc_a, 'B': mock_rsc_b}

    def get_more(nested_depth=0, filters=None):
        if filters:
            (yield 'X')
    mock_nested = self.patchobject(generic_rsrc.StackResourceType, 'nested')
    mock_nested.return_value.iter_resources = mock.MagicMock(side_effect=get_more)
    all_resources = list(self.stack.iter_resources(nested_depth=1, filters=dict(name=['A'])))
    mock_db_call.assert_has_calls([mock.call(self.ctx, self.stack.id, dict(name=['A'])), mock.call(self.ctx, self.stack.id)])
    self.assertEqual(3, len(all_resources))
@mock.patch.object(resource_objects.Resource, 'get_all_by_stack')
def test_iter_resources_nested_with_filters(self, mock_db_call):
    tpl = {'HeatTemplateFormatVersion': '2012-12-12', 'Resources': {'A': {'Type': 'StackResourceType'}, 'B': {'Type': 'GenericResourceType'}}}
    self.stack = stack.Stack(self.ctx, 'test_stack', template.Template(tpl), status_reason='blarg')
    self.stack.store()
    mock_rsc_a = mock.MagicMock(current_template_id=self.stack.t.id)
    mock_rsc_a.name = 'A'
    mock_rsc_b = mock.MagicMock(current_template_id=self.stack.t.id)
    mock_rsc_b.name = 'B'
    mock_db_call.return_value = {'A': mock_rsc_a, 'B': mock_rsc_b}

    def get_more(nested_depth=0, filters=None):
        if filters:
            (yield 'X')
    mock_nested = self.patchobject(generic_rsrc.StackResourceType, 'nested')
    mock_nested.return_value.iter_resources = mock.MagicMock(side_effect=get_more)
    all_resources = list(self.stack.iter_resources(nested_depth=1, filters=dict(name=['A'])))
    mock_db_call.assert_has_calls([mock.call(self.ctx, self.stack.id, dict(name=['A'])), mock.call(self.ctx, self.stack.id)])
    self.assertEqual(3, len(all_resources))