)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"5a1665730d981f0b4b51c8cd1335fe6c7abd6626","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     cmyster \u003caugol@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-04-23 13:51:05 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added HEAT Software Config-Deploy a test"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added functions to base and to the JSON client to support the new API"},{"line_number":10,"context_line":"Added a small test to verify the calls"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAXH%2F%2FC4M%3D","line":7,"updated":"2014-04-24 12:23:34.000000000","message":"Heat is not an acronym, so normally we just say \"Heat\" or \"heat\"","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"a51c618cc330514727eb8bb6af9646cb49be0efe","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     cmyster \u003caugol@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-05-01 14:23:15 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added Heat Software Config-Deploy a test"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added functions to base and to the JSON client to support the new API"},{"line_number":10,"context_line":"Added a small test to verify the calls"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9ad9bd40_b6184c76","line":7,"updated":"2014-05-06 09:07:27.000000000","message":"I think you mean \"api test\" not \"a test\"?","commit_id":"bc8e0899f1b52dda90b39a2d72a1365acf9b37d3"}],"tempest/api/orchestration/base.py":[{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"5a1665730d981f0b4b51c8cd1335fe6c7abd6626","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                         inputs, outputs, options):"},{"line_number":144,"context_line":"        resp, body \u003d cls.client.create_soft_conf("},{"line_number":145,"context_line":"            name\u003dname, conf\u003dconf, group\u003dgroup,"},{"line_number":146,"context_line":"            inputs\u003dinputs, outputs\u003doutputs, options\u003doptions)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        return resp, body"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FC4c%3D","line":146,"updated":"2014-04-24 12:23:34.000000000","message":"Could you add some sanity assertions here to check resp contains the expected status code, and the body looks as expected?","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"5deac15af3c08e2ebabb7a23c3d302c2a3d0f577","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                         inputs, outputs, options):"},{"line_number":144,"context_line":"        resp, body \u003d cls.client.create_soft_conf("},{"line_number":145,"context_line":"            name\u003dname, conf\u003dconf, group\u003dgroup,"},{"line_number":146,"context_line":"            inputs\u003dinputs, outputs\u003doutputs, options\u003doptions)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        return resp, body"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2FzAw%3D","line":146,"in_reply_to":"AAAAXH%2F%2FC4c%3D","updated":"2014-04-27 05:52:16.000000000","message":"Done","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"5a1665730d981f0b4b51c8cd1335fe6c7abd6626","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            action\u003daction, status\u003dstatus, input_values\u003dinput_values,"},{"line_number":157,"context_line":"            output_values\u003doutput_values, status_reason\u003dstatus_reason,"},{"line_number":158,"context_line":"            signal_transport\u003dsignal_transport)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        return resp, body"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FC4Y%3D","line":159,"updated":"2014-04-24 12:23:34.000000000","message":"Likewise here","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"5deac15af3c08e2ebabb7a23c3d302c2a3d0f577","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            action\u003daction, status\u003dstatus, input_values\u003dinput_values,"},{"line_number":157,"context_line":"            output_values\u003doutput_values, status_reason\u003dstatus_reason,"},{"line_number":158,"context_line":"            signal_transport\u003dsignal_transport)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        return resp, body"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2FzAs%3D","line":159,"in_reply_to":"AAAAXH%2F%2FC4Y%3D","updated":"2014-04-27 05:52:16.000000000","message":"Done","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":8824,"name":"Sergey Murashov","email":"smurashov@mirantis.com","username":"SergeyMurashov"},"change_message_id":"cfe49b530b29582a257325def78c7b812a1bc3f2","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    def create_software_config(cls, name, conf, group,"},{"line_number":148,"context_line":"                               inputs, outputs, options):"},{"line_number":149,"context_line":"        \"\"\"Creates a Software Configuration.\"\"\""},{"line_number":150,"context_line":"        resp, body \u003d cls.client.create_software_config("},{"line_number":151,"context_line":"            name\u003dname, conf\u003dconf, group\u003dgroup,"},{"line_number":152,"context_line":"            inputs\u003dinputs, outputs\u003doutputs, options\u003doptions)"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_4c88dc22","line":150,"updated":"2014-04-29 13:56:17.000000000","message":"may be would be better:\n\nreturn cls.client.create_software_config(name\u003dname, conf\u003dconf, group\u003dgroup,                                                      inputs\u003dinputs,outputs\u003doutputs,options\u003doptions)\n\n?","commit_id":"570e104a620cf0bcc0d3752c93e71a66ebdc0ef6"},{"author":{"_account_id":8824,"name":"Sergey Murashov","email":"smurashov@mirantis.com","username":"SergeyMurashov"},"change_message_id":"cfe49b530b29582a257325def78c7b812a1bc3f2","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                               action, status, input_values, output_values,"},{"line_number":159,"context_line":"                               status_reason, signal_transport):"},{"line_number":160,"context_line":"        \"\"\"Creates or updates a software deployment.\"\"\""},{"line_number":161,"context_line":"        resp, body \u003d cls.client.update_software_deploy("},{"line_number":162,"context_line":"            deploy_id\u003ddeploy_id, server_id\u003dserver_id, config_id\u003dconfig_id,"},{"line_number":163,"context_line":"            action\u003daction, status\u003dstatus, input_values\u003dinput_values,"},{"line_number":164,"context_line":"            output_values\u003doutput_values, status_reason\u003dstatus_reason,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_4cb61cde","line":161,"updated":"2014-04-29 13:56:17.000000000","message":"ditto","commit_id":"570e104a620cf0bcc0d3752c93e71a66ebdc0ef6"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"2a29722d54c1b8bb9bf408cc666278de5686afc0","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            deploy_id\u003ddeploy_id, server_id\u003dserver_id, config_id\u003dconfig_id,"},{"line_number":161,"context_line":"            action\u003daction, status\u003dstatus, input_values\u003dinput_values,"},{"line_number":162,"context_line":"            output_values\u003doutput_values, status_reason\u003dstatus_reason,"},{"line_number":163,"context_line":"            signal_transport\u003dsignal_transport)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_67be8101","line":163,"updated":"2014-05-01 07:53:35.000000000","message":"I\u0027m not really clear what the point of these wrapper functions is, given that all they do is wrap one call to the client - wouldn\u0027t it be better to just call the client directly in the test?","commit_id":"67334f30eba7862d37caebc157e88d0052098950"}],"tempest/api/orchestration/stacks/test_soft_conf.py":[{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"5a1665730d981f0b4b51c8cd1335fe6c7abd6626","unresolved":false,"context_lines":[{"line_number":21,"context_line":"CONF \u003d config.CONF"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class SoftConfig(base.BaseOrchestrationTest):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @classmethod"},{"line_number":27,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FC4w%3D","line":24,"updated":"2014-04-24 12:23:34.000000000","message":"I think this should have Test in the class name, e.g TestSoftwareConfig","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"5deac15af3c08e2ebabb7a23c3d302c2a3d0f577","unresolved":false,"context_lines":[{"line_number":21,"context_line":"CONF \u003d config.CONF"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class SoftConfig(base.BaseOrchestrationTest):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @classmethod"},{"line_number":27,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2FzAo%3D","line":24,"in_reply_to":"AAAAXH%2F%2FC4w%3D","updated":"2014-04-27 05:52:16.000000000","message":"Done","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"5a1665730d981f0b4b51c8cd1335fe6c7abd6626","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    @classmethod"},{"line_number":27,"context_line":"    def setUpClass(cls):"},{"line_number":28,"context_line":"        super(SoftConfig, cls).setUpClass()"},{"line_number":29,"context_line":"        # Can\u0027t test anything if there is no image"},{"line_number":30,"context_line":"        if not CONF.orchestration.image_ref:"},{"line_number":31,"context_line":"            raise cls.skipException(\u0027No image available to test\u0027)"},{"line_number":32,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FC9Y%3D","line":29,"updated":"2014-04-24 12:23:34.000000000","message":"Umm, yes you can, because you\u0027re not using the image anywhere ;)\n\nProbably, you can remove this setUpClass?","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"5deac15af3c08e2ebabb7a23c3d302c2a3d0f577","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    @classmethod"},{"line_number":27,"context_line":"    def setUpClass(cls):"},{"line_number":28,"context_line":"        super(SoftConfig, cls).setUpClass()"},{"line_number":29,"context_line":"        # Can\u0027t test anything if there is no image"},{"line_number":30,"context_line":"        if not CONF.orchestration.image_ref:"},{"line_number":31,"context_line":"            raise cls.skipException(\u0027No image available to test\u0027)"},{"line_number":32,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2FzAk%3D","line":29,"in_reply_to":"AAAAXH%2F%2FC9Y%3D","updated":"2014-04-27 05:52:16.000000000","message":"Done","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"5a1665730d981f0b4b51c8cd1335fe6c7abd6626","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # testing get for both configs"},{"line_number":83,"context_line":"        for conf_id in config_ids:"},{"line_number":84,"context_line":"            resp, soft_conf \u003d self.client.get_soft_conf(conf_id)"},{"line_number":85,"context_line":"            soft_conf_id \u003d soft_conf[\u0027software_config\u0027][\u0027id\u0027]"},{"line_number":86,"context_line":"            self.assertEqual(conf_id, soft_conf_id)"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FC5Q%3D","line":84,"updated":"2014-04-24 12:23:34.000000000","message":"Need to check status code?","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"5deac15af3c08e2ebabb7a23c3d302c2a3d0f577","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # testing get for both configs"},{"line_number":83,"context_line":"        for conf_id in config_ids:"},{"line_number":84,"context_line":"            resp, soft_conf \u003d self.client.get_soft_conf(conf_id)"},{"line_number":85,"context_line":"            soft_conf_id \u003d soft_conf[\u0027software_config\u0027][\u0027id\u0027]"},{"line_number":86,"context_line":"            self.assertEqual(conf_id, soft_conf_id)"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2FzAg%3D","line":84,"in_reply_to":"AAAAXH%2F%2FC5Q%3D","updated":"2014-04-27 05:52:16.000000000","message":"Done","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"5a1665730d981f0b4b51c8cd1335fe6c7abd6626","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        deploy_id \u003d deployment[1][\u0027software_deployment\u0027][\u0027id\u0027]"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        # getting a list of all deployments, this id must be there"},{"line_number":93,"context_line":"        resp, dep_list \u003d self.client.get_deploy_list()"},{"line_number":94,"context_line":"        dep_ids \u003d [dep[\u0027id\u0027] for dep in dep_list[\u0027software_deployments\u0027]]"},{"line_number":95,"context_line":"        self.assertIn(deploy_id, dep_ids)"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FC5U%3D","line":93,"updated":"2014-04-24 12:23:34.000000000","message":"Need to check status code?","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"5deac15af3c08e2ebabb7a23c3d302c2a3d0f577","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        deploy_id \u003d deployment[1][\u0027software_deployment\u0027][\u0027id\u0027]"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        # getting a list of all deployments, this id must be there"},{"line_number":93,"context_line":"        resp, dep_list \u003d self.client.get_deploy_list()"},{"line_number":94,"context_line":"        dep_ids \u003d [dep[\u0027id\u0027] for dep in dep_list[\u0027software_deployments\u0027]]"},{"line_number":95,"context_line":"        self.assertIn(deploy_id, dep_ids)"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2FzAc%3D","line":93,"in_reply_to":"AAAAXH%2F%2FC5U%3D","updated":"2014-04-27 05:52:16.000000000","message":"Done","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"5a1665730d981f0b4b51c8cd1335fe6c7abd6626","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            signal_transport)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        # verifying that the deployment was updated as expected"},{"line_number":120,"context_line":"        resp, updated_deploy \u003d self.client.get_soft_deploy(deploy_id)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        new_conf_id \u003d updated_deploy[\u0027software_deployment\u0027][\u0027config_id\u0027]"},{"line_number":123,"context_line":"        self.assertEqual(new_conf_id, conf_b_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FC5o%3D","line":120,"updated":"2014-04-24 12:23:34.000000000","message":"Need to check the status code?","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"5deac15af3c08e2ebabb7a23c3d302c2a3d0f577","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            signal_transport)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        # verifying that the deployment was updated as expected"},{"line_number":120,"context_line":"        resp, updated_deploy \u003d self.client.get_soft_deploy(deploy_id)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        new_conf_id \u003d updated_deploy[\u0027software_deployment\u0027][\u0027config_id\u0027]"},{"line_number":123,"context_line":"        self.assertEqual(new_conf_id, conf_b_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2FzAY%3D","line":120,"in_reply_to":"AAAAXH%2F%2FC5o%3D","updated":"2014-04-27 05:52:16.000000000","message":"Done","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"5a1665730d981f0b4b51c8cd1335fe6c7abd6626","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        new_action \u003d updated_deploy[\u0027software_deployment\u0027][\u0027action\u0027]"},{"line_number":125,"context_line":"        self.assertEqual(new_action, action)"},{"line_number":126,"context_line":"        new_status \u003d updated_deploy[\u0027software_deployment\u0027][\u0027status\u0027]"},{"line_number":127,"context_line":"        self.assertEqual(new_status, status)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        # getting the configuration metadata, current id must be here"},{"line_number":130,"context_line":"        resp, metadata \u003d self.client.get_deploy_metadata(self.image_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FC8Y%3D","line":127,"updated":"2014-04-24 12:23:34.000000000","message":"should be (expected, actual) so these parameters are reversed","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"5deac15af3c08e2ebabb7a23c3d302c2a3d0f577","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        new_action \u003d updated_deploy[\u0027software_deployment\u0027][\u0027action\u0027]"},{"line_number":125,"context_line":"        self.assertEqual(new_action, action)"},{"line_number":126,"context_line":"        new_status \u003d updated_deploy[\u0027software_deployment\u0027][\u0027status\u0027]"},{"line_number":127,"context_line":"        self.assertEqual(new_status, status)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        # getting the configuration metadata, current id must be here"},{"line_number":130,"context_line":"        resp, metadata \u003d self.client.get_deploy_metadata(self.image_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2FzAU%3D","line":127,"in_reply_to":"AAAAXH%2F%2FC8Y%3D","updated":"2014-04-27 05:52:16.000000000","message":"Done","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"5a1665730d981f0b4b51c8cd1335fe6c7abd6626","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        # getting the configuration metadata, current id must be here"},{"line_number":130,"context_line":"        resp, metadata \u003d self.client.get_deploy_metadata(self.image_id)"},{"line_number":131,"context_line":"        conf_ids \u003d [conf[\u0027id\u0027] for conf in metadata[\u0027metadata\u0027]]"},{"line_number":132,"context_line":"        self.assertIn(conf_b_id, conf_ids)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        #Delete the software deployment"},{"line_number":135,"context_line":"        resp \u003d self.client.del_soft_deploy(deploy_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FC50%3D","line":132,"updated":"2014-04-24 12:23:34.000000000","message":"Need to check the status code?","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"5deac15af3c08e2ebabb7a23c3d302c2a3d0f577","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        # getting the configuration metadata, current id must be here"},{"line_number":130,"context_line":"        resp, metadata \u003d self.client.get_deploy_metadata(self.image_id)"},{"line_number":131,"context_line":"        conf_ids \u003d [conf[\u0027id\u0027] for conf in metadata[\u0027metadata\u0027]]"},{"line_number":132,"context_line":"        self.assertIn(conf_b_id, conf_ids)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        #Delete the software deployment"},{"line_number":135,"context_line":"        resp \u003d self.client.del_soft_deploy(deploy_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2FzAQ%3D","line":132,"in_reply_to":"AAAAXH%2F%2FC50%3D","updated":"2014-04-27 05:52:16.000000000","message":"Done","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"5a1665730d981f0b4b51c8cd1335fe6c7abd6626","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        resp \u003d self.client.del_soft_deploy(deploy_id)"},{"line_number":136,"context_line":"        self.assertEqual(\u0027204\u0027, resp[0][\u0027status\u0027])"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        #Delete the software config(s)"},{"line_number":139,"context_line":"        for conf_id in config_ids:"},{"line_number":140,"context_line":"            resp \u003d self.client.del_soft_conf(conf_id)"},{"line_number":141,"context_line":"            self.assertEqual(\u0027204\u0027, resp[0][\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FC8o%3D","line":138,"updated":"2014-04-24 12:23:34.000000000","message":"Would be good to add a space after the # for consistency/readability","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"5deac15af3c08e2ebabb7a23c3d302c2a3d0f577","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        resp \u003d self.client.del_soft_deploy(deploy_id)"},{"line_number":136,"context_line":"        self.assertEqual(\u0027204\u0027, resp[0][\u0027status\u0027])"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        #Delete the software config(s)"},{"line_number":139,"context_line":"        for conf_id in config_ids:"},{"line_number":140,"context_line":"            resp \u003d self.client.del_soft_conf(conf_id)"},{"line_number":141,"context_line":"            self.assertEqual(\u0027204\u0027, resp[0][\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2FzAM%3D","line":138,"in_reply_to":"AAAAXH%2F%2FC8o%3D","updated":"2014-04-27 05:52:16.000000000","message":"Done","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"b44a18dd1fcc81eae89588dc0b94c927a6aabf89","unresolved":false,"context_lines":[{"line_number":20,"context_line":"CONF \u003d config.CONF"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestSoftConfig(base.BaseOrchestrationTest):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    @classmethod"},{"line_number":26,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_87871661","line":23,"updated":"2014-04-29 17:21:47.000000000","message":"The name is still abbreviated, IMO this should be TestSoftwareConfig","commit_id":"570e104a620cf0bcc0d3752c93e71a66ebdc0ef6"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"b44a18dd1fcc81eae89588dc0b94c927a6aabf89","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        super(TestSoftConfig, cls).setUpClass()"},{"line_number":28,"context_line":"        # Not using a real image, but nice to have consistency"},{"line_number":29,"context_line":"        if not CONF.orchestration.image_ref:"},{"line_number":30,"context_line":"            cls.image_id \u003d \u00278c940dd9-bfdc-44ae-be33-2f211b366c01\u0027"},{"line_number":31,"context_line":"        else:"},{"line_number":32,"context_line":"            cls.image_id \u003d CONF.orchestration.image_ref"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_c7811e4c","line":30,"updated":"2014-04-29 17:21:47.000000000","message":"Hard-coded image ID should be removed, as mentioned in the first patchset, I think this can be removed, you don\u0027t need the image_ref because you\u0027re not creating a nova instance are you?","commit_id":"570e104a620cf0bcc0d3752c93e71a66ebdc0ef6"},{"author":{"_account_id":8824,"name":"Sergey Murashov","email":"smurashov@mirantis.com","username":"SergeyMurashov"},"change_message_id":"cfe49b530b29582a257325def78c7b812a1bc3f2","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        outputs \u003d []"},{"line_number":44,"context_line":"        options \u003d {}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        resp, software_config \u003d cls.create_software_config("},{"line_number":47,"context_line":"            conf_name, conf, group, inputs, outputs, options)"},{"line_number":48,"context_line":"        return resp, software_config"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_2cc1d82e","line":46,"updated":"2014-04-29 13:56:17.000000000","message":"ditto","commit_id":"570e104a620cf0bcc0d3752c93e71a66ebdc0ef6"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"b44a18dd1fcc81eae89588dc0b94c927a6aabf89","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def _create_dummy_deploy(cls, conf_id):"},{"line_number":52,"context_line":"        \"\"\"Creates a dummy software deployment.\"\"\""},{"line_number":53,"context_line":"        dep_id \u003d None"},{"line_number":54,"context_line":"        server_id \u003d cls.image_id"},{"line_number":55,"context_line":"        config_id \u003d conf_id"},{"line_number":56,"context_line":"        cls.deploy_action \u003d \u0027CREATE\u0027"},{"line_number":57,"context_line":"        cls.deploy_status \u003d \u0027IN_PROGRESS\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_0748662c","line":54,"updated":"2014-04-29 17:21:47.000000000","message":"Why is server_id being assigned the ID of the image?\n\nThis should be the ID of a nova server, or if it\u0027s a dummy, some random value I guess (or omitted completely?)","commit_id":"570e104a620cf0bcc0d3752c93e71a66ebdc0ef6"},{"author":{"_account_id":8824,"name":"Sergey Murashov","email":"smurashov@mirantis.com","username":"SergeyMurashov"},"change_message_id":"cfe49b530b29582a257325def78c7b812a1bc3f2","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        status_reason \u003d \u0027Test configuration deployment\u0027"},{"line_number":61,"context_line":"        signal_transport \u003d \u0027NO_SIGNAL\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        resp, deployment \u003d cls.update_software_deploy("},{"line_number":64,"context_line":"            dep_id, server_id, config_id, cls.deploy_action,"},{"line_number":65,"context_line":"            cls.deploy_status, input_values, output_values, status_reason,"},{"line_number":66,"context_line":"            signal_transport)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_6ce200d7","line":63,"updated":"2014-04-29 13:56:17.000000000","message":"ditto","commit_id":"570e104a620cf0bcc0d3752c93e71a66ebdc0ef6"},{"author":{"_account_id":8824,"name":"Sergey Murashov","email":"smurashov@mirantis.com","username":"SergeyMurashov"},"change_message_id":"cfe49b530b29582a257325def78c7b812a1bc3f2","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        # Testing get for both configs"},{"line_number":90,"context_line":"        for conf_id in config_ids:"},{"line_number":91,"context_line":"            resp, software_config \u003d self.client.get_software_config(conf_id)"},{"line_number":92,"context_line":"            config_id \u003d software_config[\u0027software_config\u0027][\u0027id\u0027]"},{"line_number":93,"context_line":"            self.assertEqual(conf_id, config_id)"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_ac032872","line":91,"updated":"2014-04-29 13:56:17.000000000","message":"unused variable \"resp\"","commit_id":"570e104a620cf0bcc0d3752c93e71a66ebdc0ef6"},{"author":{"_account_id":8824,"name":"Sergey Murashov","email":"smurashov@mirantis.com","username":"SergeyMurashov"},"change_message_id":"cfe49b530b29582a257325def78c7b812a1bc3f2","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        resp, deployment_list \u003d self.client.get_software_deploy_list()"},{"line_number":107,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":108,"context_line":"        deploy_ids \u003d []"},{"line_number":109,"context_line":"        for deployment in deployment_list[\u0027software_deployments\u0027]:"},{"line_number":110,"context_line":"            deploy_ids.append(deployment[\u0027id\u0027])"},{"line_number":111,"context_line":"        self.assertIn(deploy_id, deploy_ids)"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_8ce8247e","line":109,"updated":"2014-04-29 13:56:17.000000000","message":"may be would be better:\n\ndeploy_ids \u003d [deployment for deployment in deployment_list[\u0027software_deployments\u0027]]\n\n?","commit_id":"570e104a620cf0bcc0d3752c93e71a66ebdc0ef6"},{"author":{"_account_id":8824,"name":"Sergey Murashov","email":"smurashov@mirantis.com","username":"SergeyMurashov"},"change_message_id":"cfe49b530b29582a257325def78c7b812a1bc3f2","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        current_action \u003d current_deploy[\u0027software_deployment\u0027][\u0027action\u0027]"},{"line_number":117,"context_line":"        current_status \u003d current_deploy[\u0027software_deployment\u0027][\u0027status\u0027]"},{"line_number":118,"context_line":"        current_config \u003d current_deploy[\u0027software_deployment\u0027][\u0027config_id\u0027]"},{"line_number":119,"context_line":"        self.assertEqual(current_action, \u0027CREATE\u0027)"},{"line_number":120,"context_line":"        self.assertEqual(current_status, \u0027IN_PROGRESS\u0027)"},{"line_number":121,"context_line":"        self.assertEqual(current_config, config_a_id)"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bad4c104_2cf9d84d","line":119,"updated":"2014-04-29 13:56:17.000000000","message":"usually self.assertEqual(expected result, actual result)","commit_id":"570e104a620cf0bcc0d3752c93e71a66ebdc0ef6"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"285511131d0e8e9874798cac01d17d011700f976","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        # Delete the software config(s)"},{"line_number":158,"context_line":"        for conf_id in config_ids:"},{"line_number":159,"context_line":"            resp \u003d self.client.del_software_config(conf_id)"},{"line_number":160,"context_line":"            self.assertEqual(\u0027204\u0027, resp[0][\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad9bd40_7e49b1cf","line":160,"updated":"2014-04-30 22:32:03.000000000","message":"Can you assert now that a get on deploy_id and conf_id returns a 404?","commit_id":"4fc9f40a3153e417f82a6b527472ba81698557ce"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"2a29722d54c1b8bb9bf408cc666278de5686afc0","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @classmethod"},{"line_number":27,"context_line":"    def setUpClass(cls):"},{"line_number":28,"context_line":"        super(TestSoftwareConfig, cls).setUpClass()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @classmethod"},{"line_number":31,"context_line":"    def _create_dummy_config(cls):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_a737a9af","line":28,"updated":"2014-05-01 07:53:35.000000000","message":"You can remove this setUpClass, it\u0027s not doing anything","commit_id":"67334f30eba7862d37caebc157e88d0052098950"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"2a29722d54c1b8bb9bf408cc666278de5686afc0","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def _create_init_deployment(cls, config_id):"},{"line_number":47,"context_line":"        \"\"\"Creates an initial software configuration deployment.\"\"\""},{"line_number":48,"context_line":"        dep_id \u003d None"},{"line_number":49,"context_line":"        cls.server_id \u003d data_utils.rand_name(\u0027dummy-server\u0027)"},{"line_number":50,"context_line":"        cls.deploy_action \u003d \u0027CREATE\u0027"},{"line_number":51,"context_line":"        cls.deploy_status \u003d \u0027IN_PROGRESS\u0027"},{"line_number":52,"context_line":"        input_values \u003d []"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_8769c58d","line":49,"updated":"2014-05-01 07:53:35.000000000","message":"This server_id doesn\u0027t want to be a class variable, you need it to be per test instance, so you probably want to set self.server_id in setUpClass (so then you won\u0027t want to remove it after all...)","commit_id":"67334f30eba7862d37caebc157e88d0052098950"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"2a29722d54c1b8bb9bf408cc666278de5686afc0","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        dep_id \u003d None"},{"line_number":49,"context_line":"        cls.server_id \u003d data_utils.rand_name(\u0027dummy-server\u0027)"},{"line_number":50,"context_line":"        cls.deploy_action \u003d \u0027CREATE\u0027"},{"line_number":51,"context_line":"        cls.deploy_status \u003d \u0027IN_PROGRESS\u0027"},{"line_number":52,"context_line":"        input_values \u003d []"},{"line_number":53,"context_line":"        output_values \u003d []"},{"line_number":54,"context_line":"        status_reason \u003d \u0027Test configuration deployment\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_e758d1fc","line":51,"updated":"2014-05-01 07:53:35.000000000","message":"These could just be local variables","commit_id":"67334f30eba7862d37caebc157e88d0052098950"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"2a29722d54c1b8bb9bf408cc666278de5686afc0","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        try:"},{"line_number":160,"context_line":"            self.client.get_software_deploy(self.deploy_id)"},{"line_number":161,"context_line":"        except exceptions.NotFound:"},{"line_number":162,"context_line":"            pass"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        # Delete the software config(s)"},{"line_number":165,"context_line":"        for conf_id in config_ids:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_6755a1c5","line":162,"updated":"2014-05-01 07:53:35.000000000","message":"This isn\u0027t actually testing that it\u0027s really gone, it will pass regardless of whether exceptions.NotFound is raised.  You probably need to use self.assertRaises here, to prove that exceptions.NotFound is actually raised, otherwise it\u0027s not gone and the test should fail.","commit_id":"67334f30eba7862d37caebc157e88d0052098950"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"2a29722d54c1b8bb9bf408cc666278de5686afc0","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            try:"},{"line_number":172,"context_line":"                self.client.get_software_config(conf_id)"},{"line_number":173,"context_line":"            except exceptions.NotFound:"},{"line_number":174,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad9bd40_8752a5db","line":174,"updated":"2014-05-01 07:53:35.000000000","message":"Same here","commit_id":"67334f30eba7862d37caebc157e88d0052098950"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"a51c618cc330514727eb8bb6af9646cb49be0efe","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        status_reason \u003d \u0027Test configuration deployment\u0027"},{"line_number":55,"context_line":"        signal_transport \u003d \u0027NO_SIGNAL\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        return cls.client.update_software_deploy("},{"line_number":58,"context_line":"            dep_id, cls.server_id, config_id, deploy_action, deploy_status,"},{"line_number":59,"context_line":"            input_values, output_values, status_reason, signal_transport)"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_d6eb1011","line":57,"updated":"2014-05-06 09:07:27.000000000","message":"a create* function calling client.update* looks odd, I\u0027d personally prefer the client create/update functions to be separate.","commit_id":"bc8e0899f1b52dda90b39a2d72a1365acf9b37d3"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"65d9b7e6fc44563e1b9e231414152001c6d84051","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        status_reason \u003d \u0027Test configuration deployment\u0027"},{"line_number":55,"context_line":"        signal_transport \u003d \u0027NO_SIGNAL\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        return cls.client.update_software_deploy("},{"line_number":58,"context_line":"            dep_id, cls.server_id, config_id, deploy_action, deploy_status,"},{"line_number":59,"context_line":"            input_values, output_values, status_reason, signal_transport)"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_e3ae7c97","line":57,"in_reply_to":"9ad9bd40_d6eb1011","updated":"2014-05-07 03:47:29.000000000","message":"They are the exact thing, only thing that matters is if a deploy_id is present or not to determine if to create or to update.\nI can add more doc to explain this. I want to avoid adding almost duplicate code if I can avoid it.","commit_id":"bc8e0899f1b52dda90b39a2d72a1365acf9b37d3"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"74d0ba8fa0ca8d433c3c5b5ccd5ff03ff6a8ae0f","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        status_reason \u003d \u0027Test configuration deployment\u0027"},{"line_number":55,"context_line":"        signal_transport \u003d \u0027NO_SIGNAL\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        return cls.client.update_software_deploy("},{"line_number":58,"context_line":"            dep_id, cls.server_id, config_id, deploy_action, deploy_status,"},{"line_number":59,"context_line":"            input_values, output_values, status_reason, signal_transport)"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_12cd6485","line":57,"in_reply_to":"9ad9bd40_e3ae7c97","updated":"2014-05-07 10:26:28.000000000","message":"They are two different API calls, so two functions in the client wrapping the API calls makes perfect sense.  Just refactor any common code to a utility function.","commit_id":"bc8e0899f1b52dda90b39a2d72a1365acf9b37d3"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1efdca4f27579907c51b50a893526ac983922f7f","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        cls.server_id \u003d data_utils.rand_name(\u0027dummy-server\u0027)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @classmethod"},{"line_number":32,"context_line":"    def _create_dummy_config(cls):"},{"line_number":33,"context_line":"        \"\"\"Creates a dummy software configuration.\"\"\""},{"line_number":34,"context_line":"        conf_name \u003d data_utils.rand_name(\u0027heat_soft_config\u0027)"},{"line_number":35,"context_line":"        echo \u003d data_utils.rand_name(\u0027hello\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7adec928_e723a902","line":32,"updated":"2014-05-19 21:31:16.000000000","message":"You could have over-ridable args here so you can actually assert values instead of just asserting that the key exists.\n\nSame for _create_init_deployment, _update_deployment","commit_id":"e53b1348ff699a84cb08ea4bb437014a9ec7a095"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1efdca4f27579907c51b50a893526ac983922f7f","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        echo \u003d data_utils.rand_name(\u0027hello\u0027)"},{"line_number":36,"context_line":"        conf \u003d \u0027#!/bin/bash echo \"%s\"\u0027 % echo"},{"line_number":37,"context_line":"        group_name \u003d data_utils.rand_name(\u0027group\u0027)"},{"line_number":38,"context_line":"        group \u003d \u0027Heat::\"%s\"\u0027 % group_name"},{"line_number":39,"context_line":"        inputs \u003d []"},{"line_number":40,"context_line":"        outputs \u003d []"},{"line_number":41,"context_line":"        options \u003d {}"}],"source_content_type":"text/x-python","patch_set":10,"id":"7adec928_87590590","line":38,"updated":"2014-05-19 21:31:16.000000000","message":"Groups are actually simple un-namespaced names like \u0027script\u0027, \u0027puppet\u0027","commit_id":"e53b1348ff699a84cb08ea4bb437014a9ec7a095"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1efdca4f27579907c51b50a893526ac983922f7f","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        self.assertEqual(\u0027IN_PROGRESS\u0027, current_status)"},{"line_number":129,"context_line":"        self.assertEqual(self.config_a_id, current_config)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        # Updating deployment to conf_b and new parameters"},{"line_number":132,"context_line":"        update_deployment \u003d self._update_deployment(self.deploy_id,"},{"line_number":133,"context_line":"                                                    self.config_b_id)"},{"line_number":134,"context_line":"        self.assertEqual(\u0027200\u0027, update_deployment[0][\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"7adec928_2a5c7818","line":131,"updated":"2014-05-19 21:31:16.000000000","message":"There needs to be two _update_deployment calls. One which updates action, status, status_reason. And another which updates only config_id.\n\nAlso I\u0027d like a test flow to confirm this fix https://review.openstack.org/#/c/93931/  which does the following:\n* call get_software_deploy_meta\n* update deployment action, status, status_reason\n* call get_software_deploy_meta again and assert that metadata is *identical* to the first call","commit_id":"e53b1348ff699a84cb08ea4bb437014a9ec7a095"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"837fc555c43b2b98c2f5017da65a1c7fa000f54c","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @classmethod"},{"line_number":27,"context_line":"    def setUpClass(cls):"},{"line_number":28,"context_line":"        super(TestSoftwareConfig, cls).setUpClass()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":31,"context_line":"    def test_soft_conf_deploy(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_b57ac685","line":28,"updated":"2014-06-05 09:58:43.000000000","message":"This setUpClass method isn\u0027t doing anything, so it could be removed.","commit_id":"a6b528b0cb79fb7aee0ff85d9e10515c00ce5264"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"63574dd99f26283a83f94fac392284792343cd50","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @classmethod"},{"line_number":27,"context_line":"    def setUpClass(cls):"},{"line_number":28,"context_line":"        super(TestSoftwareConfig, cls).setUpClass()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":31,"context_line":"    def test_soft_conf_deploy(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_7e7bbbbd","line":28,"in_reply_to":"1ae5cdf2_b57ac685","updated":"2014-06-05 12:04:30.000000000","message":"Done","commit_id":"a6b528b0cb79fb7aee0ff85d9e10515c00ce5264"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"837fc555c43b2b98c2f5017da65a1c7fa000f54c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        config_ids \u003d []"},{"line_number":35,"context_line":"        config_a_name \u003d \u0027heat_soft_config_a\u0027"},{"line_number":36,"context_line":"        config_a_config \u003d \u0027#!/bin/bash echo init-a\u0027"},{"line_number":37,"context_line":"        config_a_group \u003d \u0027Heat::script\u0027"},{"line_number":38,"context_line":"        config_a_inputs \u003d []"},{"line_number":39,"context_line":"        config_a_outputs \u003d []"},{"line_number":40,"context_line":"        config_a_options \u003d {}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_3566b6ed","line":37,"updated":"2014-06-05 09:58:43.000000000","message":"This should be \"script\", ref stevebaker\u0027s previous comments.","commit_id":"a6b528b0cb79fb7aee0ff85d9e10515c00ce5264"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"63574dd99f26283a83f94fac392284792343cd50","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        config_ids \u003d []"},{"line_number":35,"context_line":"        config_a_name \u003d \u0027heat_soft_config_a\u0027"},{"line_number":36,"context_line":"        config_a_config \u003d \u0027#!/bin/bash echo init-a\u0027"},{"line_number":37,"context_line":"        config_a_group \u003d \u0027Heat::script\u0027"},{"line_number":38,"context_line":"        config_a_inputs \u003d []"},{"line_number":39,"context_line":"        config_a_outputs \u003d []"},{"line_number":40,"context_line":"        config_a_options \u003d {}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_9e4de79c","line":37,"in_reply_to":"1ae5cdf2_3566b6ed","updated":"2014-06-05 12:04:30.000000000","message":"Done","commit_id":"a6b528b0cb79fb7aee0ff85d9e10515c00ce5264"},{"author":{"_account_id":8824,"name":"Sergey Murashov","email":"smurashov@mirantis.com","username":"SergeyMurashov"},"change_message_id":"7bba8e77d22ebba9a1c4590da319927825a60cff","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.assertEqual(config_a_name, test_name)"},{"line_number":58,"context_line":"        self.assertEqual(config_a_config, test_config)"},{"line_number":59,"context_line":"        self.assertEqual(config_a_group, test_group)"},{"line_number":60,"context_line":"        self.assertEqual(None, test_inputs)"},{"line_number":61,"context_line":"        self.assertEqual(None, test_outputs)"},{"line_number":62,"context_line":"        self.assertEqual(None, test_options)"},{"line_number":63,"context_line":"        # Saving the configuration\u0027s ID"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_0b976091","line":60,"updated":"2014-06-02 07:23:56.000000000","message":"may be would be better to use self.assertIsNone?","commit_id":"a6b528b0cb79fb7aee0ff85d9e10515c00ce5264"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"63574dd99f26283a83f94fac392284792343cd50","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.assertEqual(config_a_name, test_name)"},{"line_number":58,"context_line":"        self.assertEqual(config_a_config, test_config)"},{"line_number":59,"context_line":"        self.assertEqual(config_a_group, test_group)"},{"line_number":60,"context_line":"        self.assertEqual(None, test_inputs)"},{"line_number":61,"context_line":"        self.assertEqual(None, test_outputs)"},{"line_number":62,"context_line":"        self.assertEqual(None, test_options)"},{"line_number":63,"context_line":"        # Saving the configuration\u0027s ID"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_de43ef69","line":60,"in_reply_to":"1ae5cdf2_0b976091","updated":"2014-06-05 12:04:30.000000000","message":"Done","commit_id":"a6b528b0cb79fb7aee0ff85d9e10515c00ce5264"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"2a79ad056bf23dfbead331af059991cd96b3ee99","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.assertEqual(config_a_name, test_name)"},{"line_number":58,"context_line":"        self.assertEqual(config_a_config, test_config)"},{"line_number":59,"context_line":"        self.assertEqual(config_a_group, test_group)"},{"line_number":60,"context_line":"        self.assertEqual(None, test_inputs)"},{"line_number":61,"context_line":"        self.assertEqual(None, test_outputs)"},{"line_number":62,"context_line":"        self.assertEqual(None, test_options)"},{"line_number":63,"context_line":"        # Saving the configuration\u0027s ID"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_b446c41f","line":60,"in_reply_to":"1ae5cdf2_0b976091","updated":"2014-06-02 11:24:19.000000000","message":"In a general case, yes.\nI wrote it like this on purpose, because In this case if these parameters will stop being empty, it will be much easier to maintain.","commit_id":"a6b528b0cb79fb7aee0ff85d9e10515c00ce5264"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"63574dd99f26283a83f94fac392284792343cd50","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.assertEqual(config_a_name, test_name)"},{"line_number":58,"context_line":"        self.assertEqual(config_a_config, test_config)"},{"line_number":59,"context_line":"        self.assertEqual(config_a_group, test_group)"},{"line_number":60,"context_line":"        self.assertEqual(None, test_inputs)"},{"line_number":61,"context_line":"        self.assertEqual(None, test_outputs)"},{"line_number":62,"context_line":"        self.assertEqual(None, test_options)"},{"line_number":63,"context_line":"        # Saving the configuration\u0027s ID"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_fe46eb79","line":60,"in_reply_to":"1ae5cdf2_b446c41f","updated":"2014-06-05 12:04:30.000000000","message":"Done","commit_id":"a6b528b0cb79fb7aee0ff85d9e10515c00ce5264"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"837fc555c43b2b98c2f5017da65a1c7fa000f54c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.assertEqual(config_a_name, test_name)"},{"line_number":58,"context_line":"        self.assertEqual(config_a_config, test_config)"},{"line_number":59,"context_line":"        self.assertEqual(config_a_group, test_group)"},{"line_number":60,"context_line":"        self.assertEqual(None, test_inputs)"},{"line_number":61,"context_line":"        self.assertEqual(None, test_outputs)"},{"line_number":62,"context_line":"        self.assertEqual(None, test_options)"},{"line_number":63,"context_line":"        # Saving the configuration\u0027s ID"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_f5cc4ebd","line":60,"in_reply_to":"1ae5cdf2_b446c41f","updated":"2014-06-05 09:58:43.000000000","message":"I agree, self.assertIsNone would be better.  See https://bugs.launchpad.net/heat/+bug/1280522","commit_id":"a6b528b0cb79fb7aee0ff85d9e10515c00ce5264"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"63574dd99f26283a83f94fac392284792343cd50","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.assertEqual(config_a_name, test_name)"},{"line_number":58,"context_line":"        self.assertEqual(config_a_config, test_config)"},{"line_number":59,"context_line":"        self.assertEqual(config_a_group, test_group)"},{"line_number":60,"context_line":"        self.assertEqual(None, test_inputs)"},{"line_number":61,"context_line":"        self.assertEqual(None, test_outputs)"},{"line_number":62,"context_line":"        self.assertEqual(None, test_options)"},{"line_number":63,"context_line":"        # Saving the configuration\u0027s ID"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_5e57df25","line":60,"in_reply_to":"1ae5cdf2_f5cc4ebd","updated":"2014-06-05 12:04:30.000000000","message":"Done","commit_id":"a6b528b0cb79fb7aee0ff85d9e10515c00ce5264"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"837fc555c43b2b98c2f5017da65a1c7fa000f54c","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        # Same with config_b"},{"line_number":67,"context_line":"        config_b_name \u003d \u0027heat_soft_config_b:\u0027"},{"line_number":68,"context_line":"        config_b_config \u003d \u0027#!/bin/bash echo init-b\u0027"},{"line_number":69,"context_line":"        config_b_group \u003d \u0027Heat::script\u0027"},{"line_number":70,"context_line":"        config_b_inputs \u003d []"},{"line_number":71,"context_line":"        config_b_outputs \u003d []"},{"line_number":72,"context_line":"        config_b_options \u003d {}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_f57e0e69","line":69,"updated":"2014-06-05 09:58:43.000000000","message":"This should be \"script\" ref stevebaker\u0027s comments on the previous patch.","commit_id":"a6b528b0cb79fb7aee0ff85d9e10515c00ce5264"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"63574dd99f26283a83f94fac392284792343cd50","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        # Same with config_b"},{"line_number":67,"context_line":"        config_b_name \u003d \u0027heat_soft_config_b:\u0027"},{"line_number":68,"context_line":"        config_b_config \u003d \u0027#!/bin/bash echo init-b\u0027"},{"line_number":69,"context_line":"        config_b_group \u003d \u0027Heat::script\u0027"},{"line_number":70,"context_line":"        config_b_inputs \u003d []"},{"line_number":71,"context_line":"        config_b_outputs \u003d []"},{"line_number":72,"context_line":"        config_b_options \u003d {}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_7e52db35","line":69,"in_reply_to":"1ae5cdf2_f57e0e69","updated":"2014-06-05 12:04:30.000000000","message":"Done","commit_id":"a6b528b0cb79fb7aee0ff85d9e10515c00ce5264"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"69dba7c4e9c836efe06a05dde39c91edb3393e5d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.assertIsNone(test_options)"},{"line_number":59,"context_line":"        # Saving the configuration\u0027s ID"},{"line_number":60,"context_line":"        config_a_id \u003d config_a[\u0027software_config\u0027][\u0027id\u0027]"},{"line_number":61,"context_line":"        config_ids.append(config_a_id)"},{"line_number":62,"context_line":"        # Same with config_b"},{"line_number":63,"context_line":"        config_b_name \u003d \u0027heat_soft_config_b:\u0027"},{"line_number":64,"context_line":"        config_b_config \u003d \u0027#!/bin/bash echo init-b\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_21ff7c35","line":61,"updated":"2014-06-19 10:52:10.000000000","message":"Can we separate this test to multiple tests?\nfor example, can we divide the test here?\n\nIf keeping the test big like this, it is a little difficult to investigate the problem cause when some problem happens.\nBasically this test directory is for API tests because of including \"api\" in the path. It is better to separate tests by each API.\nThe other API tests would be good samples.","commit_id":"6f274e8b0a68c64f6e4d81cefd51e8930643e2c0"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"dfbc22e9f78bb82f91d002182112eb1b4d34a3c6","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.assertIsNone(test_options)"},{"line_number":59,"context_line":"        # Saving the configuration\u0027s ID"},{"line_number":60,"context_line":"        config_a_id \u003d config_a[\u0027software_config\u0027][\u0027id\u0027]"},{"line_number":61,"context_line":"        config_ids.append(config_a_id)"},{"line_number":62,"context_line":"        # Same with config_b"},{"line_number":63,"context_line":"        config_b_name \u003d \u0027heat_soft_config_b:\u0027"},{"line_number":64,"context_line":"        config_b_config \u003d \u0027#!/bin/bash echo init-b\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_e21ec9bb","line":61,"in_reply_to":"1ae5cdf2_21ff7c35","updated":"2014-06-25 05:49:47.000000000","message":"Thanks for the input.\nI tried to split this test by splitting the verification parts of the test to different tests.\nConsider the metadata update (lines 144+) as an example. I cannot test that without updating a deployment and I cannot do that without creating  a deployment and I cannot do that without creating a configuration.\nOf course later I need to delete those as well.\nWhat I did was to split the test into 6 tests where I verify different things on each. so instead of verifying all of the above in the example, I verify that a creation is successful in a \u0027create\u0027 test etcetera.","commit_id":"6f274e8b0a68c64f6e4d81cefd51e8930643e2c0"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"661993640737209d49e859f4b05a4afd28dc4e01","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.config_b \u003d self.client.create_software_config("},{"line_number":49,"context_line":"            self.config_b_name, self.config_b_config, self.config_b_group,"},{"line_number":50,"context_line":"            self.config_b_inputs, self.config_b_outputs, self.config_b_options)"},{"line_number":51,"context_line":"        self.config_b_id \u003d self.config_b[\u0027software_config\u0027][\u0027id\u0027]"},{"line_number":52,"context_line":"        self.addCleanup(self._configuration_delete, self.config_b_id)"},{"line_number":53,"context_line":"        self.config_ids.append(self.config_b_id)"},{"line_number":54,"context_line":"        # Creating a deployment using conf_a\u0027s id"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_1e950688","line":51,"updated":"2014-07-09 09:44:02.000000000","message":"I\u0027d refactor the above into a _configuration_create helper function, which can be called twice with different arguments, to avoid the duplication above.  It\u0027ll also be a bit more readable and more symmetric with the delete functions.","commit_id":"30b005c8533f940916d7fac7695a37f4f19ffe73"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"2a91d5b45b3d0cc91a5e5b5f7571f7d18607789e","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.config_b \u003d self.client.create_software_config("},{"line_number":49,"context_line":"            self.config_b_name, self.config_b_config, self.config_b_group,"},{"line_number":50,"context_line":"            self.config_b_inputs, self.config_b_outputs, self.config_b_options)"},{"line_number":51,"context_line":"        self.config_b_id \u003d self.config_b[\u0027software_config\u0027][\u0027id\u0027]"},{"line_number":52,"context_line":"        self.addCleanup(self._configuration_delete, self.config_b_id)"},{"line_number":53,"context_line":"        self.config_ids.append(self.config_b_id)"},{"line_number":54,"context_line":"        # Creating a deployment using conf_a\u0027s id"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_cc6d8406","line":51,"in_reply_to":"baada198_1e950688","updated":"2014-07-10 06:31:00.000000000","message":"At the end of it, the ReST client accepts all of these properties and I want to test that all properties are created the way that I define them. So does it matter if I create them here in this way or do it once in _create_something and call _create_something with a list of parameters?","commit_id":"30b005c8533f940916d7fac7695a37f4f19ffe73"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"eddf4f3ccc657cadd3ee423d5259f165a3899a8f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.config_b \u003d self.client.create_software_config("},{"line_number":49,"context_line":"            self.config_b_name, self.config_b_config, self.config_b_group,"},{"line_number":50,"context_line":"            self.config_b_inputs, self.config_b_outputs, self.config_b_options)"},{"line_number":51,"context_line":"        self.config_b_id \u003d self.config_b[\u0027software_config\u0027][\u0027id\u0027]"},{"line_number":52,"context_line":"        self.addCleanup(self._configuration_delete, self.config_b_id)"},{"line_number":53,"context_line":"        self.config_ids.append(self.config_b_id)"},{"line_number":54,"context_line":"        # Creating a deployment using conf_a\u0027s id"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_9b5bbdf5","line":51,"in_reply_to":"baada198_cc6d8406","updated":"2014-07-10 08:22:30.000000000","message":"Not really, except my way uses about half the number of lines ;)","commit_id":"30b005c8533f940916d7fac7695a37f4f19ffe73"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"661993640737209d49e859f4b05a4afd28dc4e01","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            self.config_b_name, self.config_b_config, self.config_b_group,"},{"line_number":50,"context_line":"            self.config_b_inputs, self.config_b_outputs, self.config_b_options)"},{"line_number":51,"context_line":"        self.config_b_id \u003d self.config_b[\u0027software_config\u0027][\u0027id\u0027]"},{"line_number":52,"context_line":"        self.addCleanup(self._configuration_delete, self.config_b_id)"},{"line_number":53,"context_line":"        self.config_ids.append(self.config_b_id)"},{"line_number":54,"context_line":"        # Creating a deployment using conf_a\u0027s id"},{"line_number":55,"context_line":"        self.server_id \u003d data_utils.rand_name(\u0027dummy-server\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_1eaee6e7","line":52,"updated":"2014-07-09 09:44:02.000000000","message":"I think you need the *_delete functions to either be in a teardown handler, or be called explicitly in each test, because if the assertion on the delete function fails, and it\u0027s run via addCleanup, I believe the test will still pass.","commit_id":"30b005c8533f940916d7fac7695a37f4f19ffe73"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"2a91d5b45b3d0cc91a5e5b5f7571f7d18607789e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            self.config_b_name, self.config_b_config, self.config_b_group,"},{"line_number":50,"context_line":"            self.config_b_inputs, self.config_b_outputs, self.config_b_options)"},{"line_number":51,"context_line":"        self.config_b_id \u003d self.config_b[\u0027software_config\u0027][\u0027id\u0027]"},{"line_number":52,"context_line":"        self.addCleanup(self._configuration_delete, self.config_b_id)"},{"line_number":53,"context_line":"        self.config_ids.append(self.config_b_id)"},{"line_number":54,"context_line":"        # Creating a deployment using conf_a\u0027s id"},{"line_number":55,"context_line":"        self.server_id \u003d data_utils.rand_name(\u0027dummy-server\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_4c06d421","line":52,"in_reply_to":"baada198_1eaee6e7","updated":"2014-07-10 06:31:00.000000000","message":"I tested what happens if the delete validation is a part of addCleanup and I set it to fail on purpose. This flunked the test so I feel that this is actually OK here.","commit_id":"30b005c8533f940916d7fac7695a37f4f19ffe73"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"661993640737209d49e859f4b05a4afd28dc4e01","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self.deployment \u003d self.client.create_software_deploy("},{"line_number":63,"context_line":"            self.server_id, self.config_a_id, self.action, self.status,"},{"line_number":64,"context_line":"            self.input_values, self.output_values, self.status_reason,"},{"line_number":65,"context_line":"            self.signal_transport)"},{"line_number":66,"context_line":"        self.deployment_id \u003d self.deployment[\u0027software_deployment\u0027][\u0027id\u0027]"},{"line_number":67,"context_line":"        self.addCleanup(self._deployment_delete, self.deployment_id)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_beedfa27","line":65,"updated":"2014-07-09 09:44:02.000000000","message":"Same as above, personally I\u0027d put the creation of the deployment into a helper function, even though you only create one at the moment, it will be more readable and easier if you want to create multiple deployments in a future test.","commit_id":"30b005c8533f940916d7fac7695a37f4f19ffe73"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"661993640737209d49e859f4b05a4afd28dc4e01","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            self.input_values, self.output_values, self.status_reason,"},{"line_number":65,"context_line":"            self.signal_transport)"},{"line_number":66,"context_line":"        self.deployment_id \u003d self.deployment[\u0027software_deployment\u0027][\u0027id\u0027]"},{"line_number":67,"context_line":"        self.addCleanup(self._deployment_delete, self.deployment_id)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":70,"context_line":"    def test_software_config_create_validate(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_5ee69e45","line":67,"updated":"2014-07-09 09:44:02.000000000","message":"Same issue as _configuration_delete","commit_id":"30b005c8533f940916d7fac7695a37f4f19ffe73"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"b11c1eb79bb79860a044603d8d0e401af65e3ea1","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _deployment_delete(self, deploy_id):"},{"line_number":69,"context_line":"        resp \u003d self.client.delete_software_deploy(deploy_id)"},{"line_number":70,"context_line":"        self.assertEqual(\u0027204\u0027, resp[0][\u0027status\u0027])"},{"line_number":71,"context_line":"        # Testing that it is really gone"},{"line_number":72,"context_line":"        self.assertRaises("},{"line_number":73,"context_line":"            exceptions.NotFound, self.client.get_software_deploy,"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_97182277","line":70,"updated":"2014-07-16 10:13:01.000000000","message":"I just curious about here. Why do we need to check the response status here?\nCan we check it in delete_software_deploy() like create_software_deploy()?","commit_id":"837d0b6ab03111ee9264c4898049394ce13a03f8"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"48876cb4df85d888cb4fa9dd4749f69a8879d8fb","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _deployment_delete(self, deploy_id):"},{"line_number":69,"context_line":"        resp \u003d self.client.delete_software_deploy(deploy_id)"},{"line_number":70,"context_line":"        self.assertEqual(\u0027204\u0027, resp[0][\u0027status\u0027])"},{"line_number":71,"context_line":"        # Testing that it is really gone"},{"line_number":72,"context_line":"        self.assertRaises("},{"line_number":73,"context_line":"            exceptions.NotFound, self.client.get_software_deploy,"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_9d53e338","line":70,"in_reply_to":"baada198_97182277","updated":"2014-07-16 11:23:49.000000000","message":"Done","commit_id":"837d0b6ab03111ee9264c4898049394ce13a03f8"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"b11c1eb79bb79860a044603d8d0e401af65e3ea1","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def _config_delete(self, config_id):"},{"line_number":77,"context_line":"        resp \u003d self.client.delete_software_config(config_id)"},{"line_number":78,"context_line":"        self.assertEqual(\u0027204\u0027, resp[0][\u0027status\u0027])"},{"line_number":79,"context_line":"        # Testing that it is really gone"},{"line_number":80,"context_line":"        self.assertRaises("},{"line_number":81,"context_line":"            exceptions.NotFound, self.client.get_software_config, config_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_d729ba8a","line":78,"updated":"2014-07-16 10:13:01.000000000","message":"ditto","commit_id":"837d0b6ab03111ee9264c4898049394ce13a03f8"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"48876cb4df85d888cb4fa9dd4749f69a8879d8fb","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def _config_delete(self, config_id):"},{"line_number":77,"context_line":"        resp \u003d self.client.delete_software_config(config_id)"},{"line_number":78,"context_line":"        self.assertEqual(\u0027204\u0027, resp[0][\u0027status\u0027])"},{"line_number":79,"context_line":"        # Testing that it is really gone"},{"line_number":80,"context_line":"        self.assertRaises("},{"line_number":81,"context_line":"            exceptions.NotFound, self.client.get_software_config, config_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_bd2fc7a6","line":78,"in_reply_to":"baada198_d729ba8a","updated":"2014-07-16 11:23:49.000000000","message":"Done","commit_id":"837d0b6ab03111ee9264c4898049394ce13a03f8"}],"tempest/api/orchestration/stacks/test_soft_conf_create.py":[{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"f7c06099956fb28aed1e19543fdeb8d5561b748b","unresolved":false,"context_lines":[{"line_number":19,"context_line":"CONF \u003d config.CONF"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class TestSoftwareConfig(base.BaseOrchestrationTest):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":25,"context_line":"    def test_soft_conf_create(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ae5cdf2_b8f5ce85","line":22,"updated":"2014-06-25 07:09:21.000000000","message":"I think what the reviewer was asking for was one test case with multiple tests, whereas now you\u0027ve got multiple test cases with the same name (not sure what will happen with the test runners, it may only run one of them..), each containing only one test.\n\nI\u0027d copy/paste some of these tests together, so you either have one TestSoftwareConfig testcase in a test_software_config.py, which covers SoftwareConfig and SoftwareDeployment interfaces, or split them into two test cases (one for Config and one for Deployment), whatever makes most sense to you given the content of the tests.","commit_id":"e7ae439a826a4d25939a7748a271939ca0fa64ba"}],"tempest/services/orchestration/json/orchestration_client.py":[{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"5a1665730d981f0b4b51c8cd1335fe6c7abd6626","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        }"},{"line_number":254,"context_line":"        return self._validate_template(post_body)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def create_soft_conf(self, name\u003dNone, conf\u003dNone, group\u003dNone,"},{"line_number":257,"context_line":"                         inputs\u003dNone, outputs\u003dNone, options\u003dNone):"},{"line_number":258,"context_line":"        headers, body \u003d self._prep_conf_create("},{"line_number":259,"context_line":"            name, conf, group, inputs, outputs, options)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FC8E%3D","line":256,"updated":"2014-04-24 12:23:34.000000000","message":"I\u0027d accept the extra characters and do this long hand, e.g software_config instead of soft_conf, likewise elsewhere, in general I\u0027d say lean towards clarity and readability over terseness where possible.","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"5deac15af3c08e2ebabb7a23c3d302c2a3d0f577","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        }"},{"line_number":254,"context_line":"        return self._validate_template(post_body)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def create_soft_conf(self, name\u003dNone, conf\u003dNone, group\u003dNone,"},{"line_number":257,"context_line":"                         inputs\u003dNone, outputs\u003dNone, options\u003dNone):"},{"line_number":258,"context_line":"        headers, body \u003d self._prep_conf_create("},{"line_number":259,"context_line":"            name, conf, group, inputs, outputs, options)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2FzAI%3D","line":256,"in_reply_to":"AAAAXH%2F%2FC8E%3D","updated":"2014-04-27 05:52:16.000000000","message":"Done","commit_id":"1e79664b98e6f902d419259b367f444b349718aa"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"a51c618cc330514727eb8bb6af9646cb49be0efe","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            resp, body \u003d self.put(url, headers\u003dheaders, body\u003dbody)"},{"line_number":290,"context_line":"        else:"},{"line_number":291,"context_line":"            url \u003d \u0027software_deployments\u0027"},{"line_number":292,"context_line":"            resp, body \u003d self.post(url, headers\u003dheaders, body\u003dbody)"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        body \u003d json.loads(body)"},{"line_number":295,"context_line":"        return resp, body"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_76aec4e7","line":292,"updated":"2014-05-06 09:07:27.000000000","message":"IMO this would be better as two functions, \"create_software_deploy\" and \"update_software_deploy\"","commit_id":"bc8e0899f1b52dda90b39a2d72a1365acf9b37d3"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"19f729fe732815ef46125527ca228a96ed6a4786","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            resp, body \u003d self.put(url, headers\u003dheaders, body\u003dbody)"},{"line_number":290,"context_line":"        else:"},{"line_number":291,"context_line":"            url \u003d \u0027software_deployments\u0027"},{"line_number":292,"context_line":"            resp, body \u003d self.post(url, headers\u003dheaders, body\u003dbody)"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        body \u003d json.loads(body)"},{"line_number":295,"context_line":"        return resp, body"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_c3fc1875","line":292,"in_reply_to":"9ad9bd40_0397e048","updated":"2014-05-07 03:58:24.000000000","message":"I think one method per REST API call is reasonable. Could you split this into two methods please?","commit_id":"bc8e0899f1b52dda90b39a2d72a1365acf9b37d3"},{"author":{"_account_id":10090,"name":"Amit Ugol","email":"augol@redhat.com","username":"cmyster"},"change_message_id":"65d9b7e6fc44563e1b9e231414152001c6d84051","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            resp, body \u003d self.put(url, headers\u003dheaders, body\u003dbody)"},{"line_number":290,"context_line":"        else:"},{"line_number":291,"context_line":"            url \u003d \u0027software_deployments\u0027"},{"line_number":292,"context_line":"            resp, body \u003d self.post(url, headers\u003dheaders, body\u003dbody)"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        body \u003d json.loads(body)"},{"line_number":295,"context_line":"        return resp, body"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_0397e048","line":292,"in_reply_to":"9ad9bd40_76aec4e7","updated":"2014-05-07 03:47:29.000000000","message":"Answered in test_soft_conf.py","commit_id":"bc8e0899f1b52dda90b39a2d72a1365acf9b37d3"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"1197b050a5471eab53f4c60c31f8674d2c6f1b88","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        body \u003d json.loads(body)"},{"line_number":271,"context_line":"        return resp, body"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def del_software_config(self, conf_id):"},{"line_number":274,"context_line":"        \"\"\"Deletes a specific software configuration.\"\"\""},{"line_number":275,"context_line":"        url \u003d \u0027software_configs/%s\u0027 % str(conf_id)"},{"line_number":276,"context_line":"        return self.delete(url)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad9bd40_49c3c256","line":273,"updated":"2014-05-07 13:03:51.000000000","message":"This shouldn\u0027t be abbreviated, for consistency with the delete_stack interface above, so delete_software_config would be better IMO.","commit_id":"7b855c14cdf87029aa6dd440de22864b9c3df7f8"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"1197b050a5471eab53f4c60c31f8674d2c6f1b88","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        body \u003d json.loads(body)"},{"line_number":327,"context_line":"        return resp, body"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    def del_software_deploy(self, deploy_id):"},{"line_number":330,"context_line":"        \"\"\"Deletes a specific software deployment.\"\"\""},{"line_number":331,"context_line":"        url \u003d \u0027software_deployments/%s\u0027 % str(deploy_id)"},{"line_number":332,"context_line":"        return self.delete(url)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9ad9bd40_69a326b2","line":329,"updated":"2014-05-07 13:03:51.000000000","message":"Same as above","commit_id":"7b855c14cdf87029aa6dd440de22864b9c3df7f8"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1efdca4f27579907c51b50a893526ac983922f7f","unresolved":false,"context_lines":[{"line_number":355,"context_line":"        body \u003d json.dumps(post_body)"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        headers \u003d self.get_headers()"},{"line_number":358,"context_line":"        headers[\u0027X-Auth-Key\u0027] \u003d self.password"},{"line_number":359,"context_line":"        headers[\u0027X-Auth-User\u0027] \u003d self.user"},{"line_number":360,"context_line":"        return headers, body"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7adec928_87e665e6","line":358,"updated":"2014-05-19 21:31:16.000000000","message":"Setting the username/password here shouldn\u0027t be necessary, unless you\u0027re running heat in standalone mode (are you locally?)\n\nWe could eventually run tempest tests against a standalone heat, but it would need a flag in tempest.conf","commit_id":"e53b1348ff699a84cb08ea4bb437014a9ec7a095"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1efdca4f27579907c51b50a893526ac983922f7f","unresolved":false,"context_lines":[{"line_number":388,"context_line":"        body \u003d json.dumps(post_body)"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"        headers \u003d self.get_headers()"},{"line_number":391,"context_line":"        headers[\u0027X-Auth-Key\u0027] \u003d self.password"},{"line_number":392,"context_line":"        headers[\u0027X-Auth-User\u0027] \u003d self.user"},{"line_number":393,"context_line":"        return headers, body"}],"source_content_type":"text/x-python","patch_set":10,"id":"7adec928_c7d30d02","line":391,"updated":"2014-05-19 21:31:16.000000000","message":"same here","commit_id":"e53b1348ff699a84cb08ea4bb437014a9ec7a095"}]}
