)]}'
{"heat/tests/convergence/framework/__init__.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"0446a1485af71b9a1e13912befce21dd6f7206e5","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from heat.tests.convergence.framework import testutils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def scenario_globals(procs, testcase\u003dtestutils.DummyTestCase()):"},{"line_number":26,"context_line":"    return {"},{"line_number":27,"context_line":"        \u0027test\u0027: testcase,"},{"line_number":28,"context_line":"        \u0027reality\u0027: reality.reality,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_f60dbd3e","line":25,"updated":"2015-07-27 23:46:24.000000000","message":"This could probably be moved to testutils.","commit_id":"90a35f277c23ff4091973214f058f3b3389b0599"},{"author":{"_account_id":11956,"name":"Ishant Tyagi","email":"ityagi@infoblox.com","username":"ishant"},"change_message_id":"7f219decb3f2e77644638887c7699d7c80e696bb","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from heat.tests.convergence.framework import testutils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def scenario_globals(procs, testcase\u003dtestutils.DummyTestCase()):"},{"line_number":26,"context_line":"    return {"},{"line_number":27,"context_line":"        \u0027test\u0027: testcase,"},{"line_number":28,"context_line":"        \u0027reality\u0027: reality.reality,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_4bb9cce8","line":25,"in_reply_to":"3a50d1a3_f60dbd3e","updated":"2015-08-04 08:36:46.000000000","message":"Done","commit_id":"90a35f277c23ff4091973214f058f3b3389b0599"}],"heat/tests/convergence/framework/engine_wrapper.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"0446a1485af71b9a1e13912befce21dd6f7206e5","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        return template.Template(tmpl)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @message_processor.asynchronous"},{"line_number":56,"context_line":"    def create_stack(self, stack_name, old_tmpl):"},{"line_number":57,"context_line":"        cntxt \u003d utils.dummy_context()"},{"line_number":58,"context_line":"        new_tmpl \u003d self.convert_template(old_tmpl)"},{"line_number":59,"context_line":"        stk \u003d stack.Stack(cntxt, stack_name, new_tmpl, convergence\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_2cf0b8fc","line":56,"updated":"2015-07-27 23:46:24.000000000","message":"Ideally this would call heat.engine.service.EngineService.create_stack","commit_id":"90a35f277c23ff4091973214f058f3b3389b0599"},{"author":{"_account_id":11956,"name":"Ishant Tyagi","email":"ityagi@infoblox.com","username":"ishant"},"change_message_id":"7f219decb3f2e77644638887c7699d7c80e696bb","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        return template.Template(tmpl)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @message_processor.asynchronous"},{"line_number":56,"context_line":"    def create_stack(self, stack_name, old_tmpl):"},{"line_number":57,"context_line":"        cntxt \u003d utils.dummy_context()"},{"line_number":58,"context_line":"        new_tmpl \u003d self.convert_template(old_tmpl)"},{"line_number":59,"context_line":"        stk \u003d stack.Stack(cntxt, stack_name, new_tmpl, convergence\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_0bcc2488","line":56,"in_reply_to":"3a50d1a3_2cf0b8fc","updated":"2015-08-04 08:36:46.000000000","message":"Done","commit_id":"90a35f277c23ff4091973214f058f3b3389b0599"},{"author":{"_account_id":11424,"name":"Rakesh H S","email":"rakeshhs1@gmail.com","username":"rakesh"},"change_message_id":"af831c8f3f6fc5413ac73c61e91d5869ecad7914","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def scenario_template_to_hot(self, scenario_tmpl):"},{"line_number":35,"context_line":"        \u0027\u0027\u0027"},{"line_number":36,"context_line":"        Converts the scenario template into hot template."},{"line_number":37,"context_line":"        \u0027\u0027\u0027"},{"line_number":38,"context_line":"        hot_tmpl \u003d {\"heat_template_version\": \"2013-05-23\"}"},{"line_number":39,"context_line":"        resources \u003d {}"},{"line_number":40,"context_line":"        for res_name, res_def in scenario_tmpl.resources.iteritems():"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_272d11a8","line":37,"updated":"2015-08-06 09:24:55.000000000","message":"Nice!","commit_id":"b9f5571a110a20d3233d1f154a378d360650567e"}],"heat/tests/convergence/framework/fake_resource.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"0446a1485af71b9a1e13912befce21dd6f7206e5","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        for prop in self.properties.props.keys():"},{"line_number":83,"context_line":"            self.data_set(prop, self.properties.get(prop), redact\u003dFalse)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        self.resource_id_set(self.physical_resource_name())"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def handle_update(self, json_snippet\u003dNone, tmpl_diff\u003dNone, prop_diff\u003dNone):"},{"line_number":88,"context_line":"        for prop in prop_diff:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_4c5ae4f3","line":85,"updated":"2015-07-27 23:46:24.000000000","message":"I\u0027d expect this to be creating an object in the \u0027Reality\u0027 store and returning an ID from there rather than just saving the values locally.","commit_id":"90a35f277c23ff4091973214f058f3b3389b0599"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"3b7572b4807590f660029ec8a48d33b68524990e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        for prop in self.properties.props.keys():"},{"line_number":83,"context_line":"            self.data_set(prop, self.properties.get(prop), redact\u003dFalse)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        self.resource_id_set(self.physical_resource_name())"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def handle_update(self, json_snippet\u003dNone, tmpl_diff\u003dNone, prop_diff\u003dNone):"},{"line_number":88,"context_line":"        for prop in prop_diff:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_6caeb199","line":85,"in_reply_to":"1a4dcd0f_8bbfd4cf","updated":"2015-08-19 21:39:13.000000000","message":"I meant as well, not instead:\n\n  resource_id \u003d reality.create(self.physical_resource_name())\n  self.resource_id_set(resource_id)\n\nwhich is what the real Heat does - creates some external thing in another service and stores the ID in its own database. If you do the verification based on the database then you are letting Heat keep it\u0027s own score - in a sense you\u0027re only checking that the database is consistent, not that Heat did the Right Thing out in the real world.","commit_id":"90a35f277c23ff4091973214f058f3b3389b0599"},{"author":{"_account_id":11956,"name":"Ishant Tyagi","email":"ityagi@infoblox.com","username":"ishant"},"change_message_id":"7f219decb3f2e77644638887c7699d7c80e696bb","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        for prop in self.properties.props.keys():"},{"line_number":83,"context_line":"            self.data_set(prop, self.properties.get(prop), redact\u003dFalse)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        self.resource_id_set(self.physical_resource_name())"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def handle_update(self, json_snippet\u003dNone, tmpl_diff\u003dNone, prop_diff\u003dNone):"},{"line_number":88,"context_line":"        for prop in prop_diff:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_8bbfd4cf","line":85,"in_reply_to":"3a50d1a3_4c5ae4f3","updated":"2015-08-04 08:36:46.000000000","message":"This will save the ID in the database and then read this value from database while verifying. This is much closer to the real heat.","commit_id":"90a35f277c23ff4091973214f058f3b3389b0599"},{"author":{"_account_id":11956,"name":"Ishant Tyagi","email":"ityagi@infoblox.com","username":"ishant"},"change_message_id":"ffc511e436db823220bc429e961d58a041bd5ad9","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        for prop in self.properties.props.keys():"},{"line_number":83,"context_line":"            self.data_set(prop, self.properties.get(prop), redact\u003dFalse)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        self.resource_id_set(self.physical_resource_name())"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def handle_update(self, json_snippet\u003dNone, tmpl_diff\u003dNone, prop_diff\u003dNone):"},{"line_number":88,"context_line":"        for prop in prop_diff:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_d5f4c2f1","line":85,"in_reply_to":"fa1b9901_6caeb199","updated":"2015-09-01 10:47:04.000000000","message":"Yeah you are right. Fixing it in next patch.","commit_id":"90a35f277c23ff4091973214f058f3b3389b0599"}],"heat/tests/convergence/framework/template_wrapper.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"0446a1485af71b9a1e13912befce21dd6f7206e5","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"class GetRes(object):"},{"line_number":16,"context_line":"    def __init__(self, target_name):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_d6df61d4","line":13,"updated":"2015-07-27 23:46:24.000000000","message":"I was expecting something closer to:\n\n    def get_res(target_name):\n        return cfn_funcs.ResourceRef(None, \u0027get_ref\u0027, [target_name])\n\n    def get_att(target_name, attr):\n        return hot_funcs.GetAtt(None, \u0027get_attr\u0027, [target_name, attr])\n\n    def rsrc_defn(self, properties, depends_on):\n        return rsrc_defn.ResourceDefinition(None, \u0027OS::Heat::TestResource\u0027,\n                                            properties\u003dproperties,\n                                            depends_on\u003ddepends_on)\n\n    def template(self, resources, key\u003dNone):\n        tmpl \u003d hot_tmpl.HOTemplate20151015({}, key)\n        for name, defn in resources.items():\n            tmpl.add_resource(defn, name)\n        return tmpl","commit_id":"90a35f277c23ff4091973214f058f3b3389b0599"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"3b7572b4807590f660029ec8a48d33b68524990e","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"class GetRes(object):"},{"line_number":16,"context_line":"    def __init__(self, target_name):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_0c4e153b","line":13,"in_reply_to":"1a4dcd0f_0b7ae424","updated":"2015-08-19 21:39:13.000000000","message":"tmpl.t contains the raw HOT template that you can pass to the service methods.","commit_id":"90a35f277c23ff4091973214f058f3b3389b0599"},{"author":{"_account_id":11956,"name":"Ishant Tyagi","email":"ityagi@infoblox.com","username":"ishant"},"change_message_id":"7f219decb3f2e77644638887c7699d7c80e696bb","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"class GetRes(object):"},{"line_number":16,"context_line":"    def __init__(self, target_name):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_0b7ae424","line":13,"in_reply_to":"3a50d1a3_d6df61d4","updated":"2015-08-04 08:36:46.000000000","message":"This will not work if we want to call engine.service.create_stack  or engine.service.update_stack as both of them takes the raw hot template. So here we convert the scenario template into hot template and pass it directly to the service methods.","commit_id":"90a35f277c23ff4091973214f058f3b3389b0599"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"355dd3543374647280d4fee18534b0b1c6236b14","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"class GetRes(object):"},{"line_number":16,"context_line":"    def __init__(self, target_name):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_cd73bbe6","line":13,"in_reply_to":"da20952f_aa0d29e9","updated":"2015-09-01 19:28:04.000000000","message":"Well, we made all these nice APIs for programmatically building up templates. Why not use them instead of hacking around with JSON? :)\n\nIt\u0027s a bit simpler, easier to debug (all of these types have nice __repr__ methods and the like), has better error checking, and you could delete all of the code in convert_template() in the engine wrapper.","commit_id":"90a35f277c23ff4091973214f058f3b3389b0599"},{"author":{"_account_id":11956,"name":"Ishant Tyagi","email":"ityagi@infoblox.com","username":"ishant"},"change_message_id":"ffc511e436db823220bc429e961d58a041bd5ad9","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"class GetRes(object):"},{"line_number":16,"context_line":"    def __init__(self, target_name):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_aa0d29e9","line":13,"in_reply_to":"fa1b9901_0c4e153b","updated":"2015-09-01 10:47:04.000000000","message":"But how does this help? Why do we need to create a template object when eventually we will be passing the raw template?","commit_id":"90a35f277c23ff4091973214f058f3b3389b0599"}],"heat/tests/convergence/framework/testutils.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"0446a1485af71b9a1e13912befce21dd6f7206e5","unresolved":false,"context_lines":[{"line_number":31,"context_line":"             func_name, \u0027, \u0027.join(_format_args(args, kwargs)))"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class DummyTestCase(object):"},{"line_number":35,"context_line":"    def __getattr__(self, name):"},{"line_number":36,"context_line":"        if name.startswith(\u0027assert\u0027):"},{"line_number":37,"context_line":"            return functools.partial(_log_assertion, name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_d329b39c","line":34,"updated":"2015-07-27 23:46:24.000000000","message":"We shouldn\u0027t need this - I used it in the simulator to be able to run tests directly without using unittest or a test runner. In the main tree here I imagine we\u0027ll always run the tests from actual TestCases using testtools.","commit_id":"90a35f277c23ff4091973214f058f3b3389b0599"},{"author":{"_account_id":11956,"name":"Ishant Tyagi","email":"ityagi@infoblox.com","username":"ishant"},"change_message_id":"7f219decb3f2e77644638887c7699d7c80e696bb","unresolved":false,"context_lines":[{"line_number":31,"context_line":"             func_name, \u0027, \u0027.join(_format_args(args, kwargs)))"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class DummyTestCase(object):"},{"line_number":35,"context_line":"    def __getattr__(self, name):"},{"line_number":36,"context_line":"        if name.startswith(\u0027assert\u0027):"},{"line_number":37,"context_line":"            return functools.partial(_log_assertion, name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_ab76503c","line":34,"in_reply_to":"3a50d1a3_d329b39c","updated":"2015-08-04 08:36:46.000000000","message":"Done","commit_id":"90a35f277c23ff4091973214f058f3b3389b0599"}],"heat/tests/convergence/scenarios/update_add.py":[{"author":{"_account_id":11424,"name":"Rakesh H S","email":"rakeshhs1@gmail.com","username":"rakesh"},"change_message_id":"af831c8f3f6fc5413ac73c61e91d5869ecad7914","unresolved":false,"context_lines":[{"line_number":1,"context_line":"def check_results(expected_count):"},{"line_number":2,"context_line":"    test.assertEqual(expected_count, len(reality.all_resources()))"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"example_template \u003d Template({"},{"line_number":5,"context_line":"    \u0027A\u0027: RsrcDef({}, []),"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_c7b8ed77","line":2,"updated":"2015-08-06 09:24:55.000000000","message":"seems like you missed to call this function?","commit_id":"b9f5571a110a20d3233d1f154a378d360650567e"}],"heat/tests/convergence/scenarios/update_replace_missed_cleanup.py":[{"author":{"_account_id":11424,"name":"Rakesh H S","email":"rakeshhs1@gmail.com","username":"rakesh"},"change_message_id":"af831c8f3f6fc5413ac73c61e91d5869ecad7914","unresolved":false,"context_lines":[{"line_number":1,"context_line":"def check_resource_count(expected_count):"},{"line_number":2,"context_line":"    test.assertEqual(expected_count, len(reality.all_resources()))"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"def check_c_count(expected_count):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_47e05d96","line":1,"updated":"2015-08-06 09:24:55.000000000","message":"ditto. I don\u0027t see the above method being used here.","commit_id":"b9f5571a110a20d3233d1f154a378d360650567e"}],"heat/tests/convergence/scenarios/update_replace_missed_cleanup_delete.py":[{"author":{"_account_id":11424,"name":"Rakesh H S","email":"rakeshhs1@gmail.com","username":"rakesh"},"change_message_id":"af831c8f3f6fc5413ac73c61e91d5869ecad7914","unresolved":false,"context_lines":[{"line_number":1,"context_line":"def check_resource_count(expected_count):"},{"line_number":2,"context_line":"    test.assertEqual(expected_count, len(reality.all_resources()))"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"def check_c_count(expected_count):"},{"line_number":5,"context_line":"    test.assertEqual(expected_count,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_07ced52d","line":2,"updated":"2015-08-06 09:24:55.000000000","message":"ditto. I don\u0027t see the above method being used here.","commit_id":"b9f5571a110a20d3233d1f154a378d360650567e"}],"heat/tests/convergence/scenarios/update_replace_rollback.py":[{"author":{"_account_id":11424,"name":"Rakesh H S","email":"rakeshhs1@gmail.com","username":"rakesh"},"change_message_id":"af831c8f3f6fc5413ac73c61e91d5869ecad7914","unresolved":false,"context_lines":[{"line_number":1,"context_line":"def check_resource_count(expected_count):"},{"line_number":2,"context_line":"    test.assertEqual(expected_count, len(reality.all_resources()))"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"def check_c_count(expected_count):"},{"line_number":5,"context_line":"    test.assertEqual(expected_count,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_e761693a","line":2,"updated":"2015-08-06 09:24:55.000000000","message":"Since you are not using the above method, in your next patch you could remove it.","commit_id":"b9f5571a110a20d3233d1f154a378d360650567e"}],"heat/tests/convergence/test_converge.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"0446a1485af71b9a1e13912befce21dd6f7206e5","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    return TestCase"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"@with_scenarios"},{"line_number":54,"context_line":"class ScenarioTest(common.HeatTestCase):"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    scenarios \u003d [(name, {\u0027name\u0027: name, \u0027path\u0027: path})"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_cca7d4a5","line":53,"updated":"2015-07-27 23:46:24.000000000","message":"testtools provides a less hacky version of this, a superclass called testscenarios.WithScenarios. And, in fact, HeatTestCase is already a subclass of that, so we get the scenarios for free without this decorator.\n\n(I wrote the decorator because I wanted to use nose instead of/as well as testtools to run the simulator tests and it isn\u0027t compatible with testscenarios, but these tests always run with testtools.)","commit_id":"90a35f277c23ff4091973214f058f3b3389b0599"},{"author":{"_account_id":11956,"name":"Ishant Tyagi","email":"ityagi@infoblox.com","username":"ishant"},"change_message_id":"7f219decb3f2e77644638887c7699d7c80e696bb","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    return TestCase"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"@with_scenarios"},{"line_number":54,"context_line":"class ScenarioTest(common.HeatTestCase):"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    scenarios \u003d [(name, {\u0027name\u0027: name, \u0027path\u0027: path})"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_fe48942f","line":53,"in_reply_to":"3a50d1a3_cca7d4a5","updated":"2015-08-04 08:36:46.000000000","message":"Done","commit_id":"90a35f277c23ff4091973214f058f3b3389b0599"},{"author":{"_account_id":10487,"name":"Kanagaraj Manickam","email":"mkr1481@gmail.com","username":"kanagarajm"},"change_message_id":"e06b14e33dd2a1a7d056a18f72793553715cede2","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        resource._register_class(\u0027OS::Heat::TestResource\u0027,"},{"line_number":32,"context_line":"                                 fake_resource.TestResource)"},{"line_number":33,"context_line":"        self.procs \u003d processes.Processes()"},{"line_number":34,"context_line":"        po \u003d self.patch(\"heat.rpc.worker_client.WorkerClient.check_resource\")"},{"line_number":35,"context_line":"        po.side_effect \u003d self.procs.worker.check_resource"},{"line_number":36,"context_line":"        cfg.CONF.set_default(\u0027convergence_engine\u0027, True)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"da20952f_345be087","line":34,"updated":"2015-09-07 06:18:41.000000000","message":"kindly make sure this mock is only for the test_scenario. otherwise, once this line executed as part of the test case execution, all consecutive test cases will use only this mocked check_resource","commit_id":"7353f1681bb6d658095b53433cd0a82c8d8e4332"},{"author":{"_account_id":12259,"name":"Anant Patil","email":"anant.techie@gmail.com","username":"ananta"},"change_message_id":"948af77ec8b2cf50a07a754389c6c5abe228031e","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        resource._register_class(\u0027OS::Heat::TestResource\u0027,"},{"line_number":32,"context_line":"                                 fake_resource.TestResource)"},{"line_number":33,"context_line":"        self.procs \u003d processes.Processes()"},{"line_number":34,"context_line":"        po \u003d self.patch(\"heat.rpc.worker_client.WorkerClient.check_resource\")"},{"line_number":35,"context_line":"        po.side_effect \u003d self.procs.worker.check_resource"},{"line_number":36,"context_line":"        cfg.CONF.set_default(\u0027convergence_engine\u0027, True)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"da20952f_dd1384b6","line":34,"in_reply_to":"da20952f_345be087","updated":"2015-09-08 06:47:59.000000000","message":"Self.patch will stop the patch in tear-down phase of test. Dug down to see that self.patch is using oslotest and registering mock.stop() for clean up which will be executed in tear-down phase. This shouldn\u0027t be a problem.","commit_id":"7353f1681bb6d658095b53433cd0a82c8d8e4332"}]}
