)]}'
{"nova/tests/integrated/test_api_samples.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"cad0fd13b952b0d94737d1d5d6d629d6383feae1","unresolved":false,"context_lines":[{"line_number":201,"context_line":"                        \u0027%(expected)s\\n%(result)s\u0027) % locals())"},{"line_number":202,"context_line":"        return matched_value"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def _verify_something(self, name, subs, expected, data):"},{"line_number":205,"context_line":"        result \u003d self._pretty_data(data)"},{"line_number":206,"context_line":"        result \u003d self._objectify(result)"},{"line_number":207,"context_line":"        return self._compare_result(subs, expected, result)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FufY%3D","line":204,"updated":"2012-11-28 16:05:28.000000000","message":"why is name passed?","commit_id":"c353d916c7d5f2a4962a939179f4b004977aebd3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"37e25bfcddb4bd8c065cc2f989197d80701c9c9e","unresolved":false,"context_lines":[{"line_number":201,"context_line":"                        \u0027%(expected)s\\n%(result)s\u0027) % locals())"},{"line_number":202,"context_line":"        return matched_value"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def _verify_something(self, name, subs, expected, data):"},{"line_number":205,"context_line":"        result \u003d self._pretty_data(data)"},{"line_number":206,"context_line":"        result \u003d self._objectify(result)"},{"line_number":207,"context_line":"        return self._compare_result(subs, expected, result)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FucI%3D","line":204,"in_reply_to":"AAAAMH%2F%2FufY%3D","updated":"2012-11-28 16:19:26.000000000","message":"Ah, yep, cruft, I\u0027ll fix. Thanks.","commit_id":"c353d916c7d5f2a4962a939179f4b004977aebd3"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"423c2a52e608e7d135f5db03fe3c00305f731771","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        result \u003d self._objectify(result)"},{"line_number":207,"context_line":"        return self._compare_result(subs, expected, result)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def generalize_subs(self, subs, vanilla_regexes):"},{"line_number":210,"context_line":"        return subs"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    def _verify_response(self, name, subs, response):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FubY%3D","line":209,"updated":"2012-11-28 16:28:47.000000000","message":"why pass vanilla_regexes?\nor you did you intend to do something like\ndef generalize_subs(self, subs, vanilla_regexes):\n    subs[\u0027my_generalized_regex\u0027] \u003d  \u0027blah\u0027\n    return subs.update(vanilla_regexes)","commit_id":"c353d916c7d5f2a4962a939179f4b004977aebd3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"27d0574045c962bdf1de8b1b80a46b3105b8475c","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        result \u003d self._objectify(result)"},{"line_number":207,"context_line":"        return self._compare_result(subs, expected, result)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def generalize_subs(self, subs, vanilla_regexes):"},{"line_number":210,"context_line":"        return subs"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    def _verify_response(self, name, subs, response):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FuYA%3D","line":209,"in_reply_to":"AAAAMH%2F%2FubY%3D","updated":"2012-11-28 16:57:37.000000000","message":"I passed it so that a test could have access to the regexes if it wanted to restore a pattern for a given element that it had hardcoded. See, for example, what I did below, where I restored the regexes for id and compute_host. Since we\u0027ve already grabbed that set of regexes, I decided to pass that to the test handler in case it needed to do something similar.","commit_id":"c353d916c7d5f2a4962a939179f4b004977aebd3"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"5058b5e88d6d84329b7dcd4af68da13093e75c8d","unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        try:"},{"line_number":220,"context_line":"            response_result \u003d self._verify_something(name, subs, expected,"},{"line_number":221,"context_line":"                                                     response_data)"},{"line_number":222,"context_line":"            # NOTE(danms): replace some of the subs with patterns for the"},{"line_number":223,"context_line":"            # doc/api_samples check, which won\u0027t have things like the"},{"line_number":224,"context_line":"            # correct compute host name. Also let the test do some of its"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FuRo%3D","line":221,"updated":"2012-11-28 17:50:40.000000000","message":"Just one more question: this call to verify_something and the one in line 230 should be in separeted \u0027try\u0027 statements??\nIf this one fails, will be catch on L232 and the sample will be wrote right? is that what we want?","commit_id":"c353d916c7d5f2a4962a939179f4b004977aebd3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"32ac2f4a6dfd62fd2423cbd21ed0cab1e94a37e6","unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        try:"},{"line_number":220,"context_line":"            response_result \u003d self._verify_something(name, subs, expected,"},{"line_number":221,"context_line":"                                                     response_data)"},{"line_number":222,"context_line":"            # NOTE(danms): replace some of the subs with patterns for the"},{"line_number":223,"context_line":"            # doc/api_samples check, which won\u0027t have things like the"},{"line_number":224,"context_line":"            # correct compute host name. Also let the test do some of its"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FuRE%3D","line":221,"in_reply_to":"AAAAMH%2F%2FuRo%3D","updated":"2012-11-28 17:56:43.000000000","message":"Yes. Before, the sample was *always* written, even if the test didn\u0027t fail, which isn\u0027t what we want. After this, if either of them fail, we write the sample. This is just an optimization so that we don\u0027t continuously re-write the sample on disk, even if it\u0027s correct.","commit_id":"c353d916c7d5f2a4962a939179f4b004977aebd3"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"423c2a52e608e7d135f5db03fe3c00305f731771","unresolved":false,"context_lines":[{"line_number":226,"context_line":"            vanilla_regexes \u003d self._get_regexes()"},{"line_number":227,"context_line":"            subs[\u0027compute_host\u0027] \u003d vanilla_regexes[\u0027host_name\u0027]"},{"line_number":228,"context_line":"            subs[\u0027id\u0027] \u003d vanilla_regexes[\u0027id\u0027]"},{"line_number":229,"context_line":"            subs \u003d self.generalize_subs(subs, vanilla_regexes)"},{"line_number":230,"context_line":"            self._verify_something(name, subs, expected, sample_data)"},{"line_number":231,"context_line":"            return response_result"},{"line_number":232,"context_line":"        except NoMatch:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FucM%3D","line":229,"updated":"2012-11-28 16:28:47.000000000","message":"this call means that we don\u0027t need to call get regexes and pass the subs anymore?","commit_id":"c353d916c7d5f2a4962a939179f4b004977aebd3"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"5058b5e88d6d84329b7dcd4af68da13093e75c8d","unresolved":false,"context_lines":[{"line_number":226,"context_line":"            vanilla_regexes \u003d self._get_regexes()"},{"line_number":227,"context_line":"            subs[\u0027compute_host\u0027] \u003d vanilla_regexes[\u0027host_name\u0027]"},{"line_number":228,"context_line":"            subs[\u0027id\u0027] \u003d vanilla_regexes[\u0027id\u0027]"},{"line_number":229,"context_line":"            subs \u003d self.generalize_subs(subs, vanilla_regexes)"},{"line_number":230,"context_line":"            self._verify_something(name, subs, expected, sample_data)"},{"line_number":231,"context_line":"            return response_result"},{"line_number":232,"context_line":"        except NoMatch:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FuSo%3D","line":229,"in_reply_to":"AAAAMH%2F%2FuXs%3D","updated":"2012-11-28 17:50:40.000000000","message":"ok got your point","commit_id":"c353d916c7d5f2a4962a939179f4b004977aebd3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"27d0574045c962bdf1de8b1b80a46b3105b8475c","unresolved":false,"context_lines":[{"line_number":226,"context_line":"            vanilla_regexes \u003d self._get_regexes()"},{"line_number":227,"context_line":"            subs[\u0027compute_host\u0027] \u003d vanilla_regexes[\u0027host_name\u0027]"},{"line_number":228,"context_line":"            subs[\u0027id\u0027] \u003d vanilla_regexes[\u0027id\u0027]"},{"line_number":229,"context_line":"            subs \u003d self.generalize_subs(subs, vanilla_regexes)"},{"line_number":230,"context_line":"            self._verify_something(name, subs, expected, sample_data)"},{"line_number":231,"context_line":"            return response_result"},{"line_number":232,"context_line":"        except NoMatch:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FuXs%3D","line":229,"in_reply_to":"AAAAMH%2F%2FucM%3D","updated":"2012-11-28 16:57:37.000000000","message":"No, this lets the test correct things (if and as necessary) so that the sample will pass. This will differ by test, and as you see in the rest of the patch, most of them will pass with just the two general fixes above, but three of them need to make specific corrections to the subs to be pattern-based instead of hardcoded. See the keypairs one, for example.","commit_id":"c353d916c7d5f2a4962a939179f4b004977aebd3"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"423c2a52e608e7d135f5db03fe3c00305f731771","unresolved":false,"context_lines":[{"line_number":390,"context_line":"    def test_metadata_post_all(self):"},{"line_number":391,"context_line":"        \"\"\"Test updating all metadata for a server\"\"\""},{"line_number":392,"context_line":"        subs \u003d {\u0027value\u0027: \u0027Foo Value\u0027}"},{"line_number":393,"context_line":"        uuid \u003d self._create_and_set(subs)"},{"line_number":394,"context_line":"        subs[\u0027value\u0027] \u003d \u0027Bar Value\u0027"},{"line_number":395,"context_line":"        response \u003d self._do_post(\u0027servers/%s/metadata\u0027 % uuid,"},{"line_number":396,"context_line":"                                 \u0027server-metadata-all-req\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2Fub8%3D","line":393,"updated":"2012-11-28 16:28:47.000000000","message":"no need to this with generalize_subs","commit_id":"c353d916c7d5f2a4962a939179f4b004977aebd3"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"5058b5e88d6d84329b7dcd4af68da13093e75c8d","unresolved":false,"context_lines":[{"line_number":390,"context_line":"    def test_metadata_post_all(self):"},{"line_number":391,"context_line":"        \"\"\"Test updating all metadata for a server\"\"\""},{"line_number":392,"context_line":"        subs \u003d {\u0027value\u0027: \u0027Foo Value\u0027}"},{"line_number":393,"context_line":"        uuid \u003d self._create_and_set(subs)"},{"line_number":394,"context_line":"        subs[\u0027value\u0027] \u003d \u0027Bar Value\u0027"},{"line_number":395,"context_line":"        response \u003d self._do_post(\u0027servers/%s/metadata\u0027 % uuid,"},{"line_number":396,"context_line":"                                 \u0027server-metadata-all-req\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FuSg%3D","line":393,"in_reply_to":"AAAAMH%2F%2FuXo%3D","updated":"2012-11-28 17:50:40.000000000","message":"ok! thanks for the explanation","commit_id":"c353d916c7d5f2a4962a939179f4b004977aebd3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"27d0574045c962bdf1de8b1b80a46b3105b8475c","unresolved":false,"context_lines":[{"line_number":390,"context_line":"    def test_metadata_post_all(self):"},{"line_number":391,"context_line":"        \"\"\"Test updating all metadata for a server\"\"\""},{"line_number":392,"context_line":"        subs \u003d {\u0027value\u0027: \u0027Foo Value\u0027}"},{"line_number":393,"context_line":"        uuid \u003d self._create_and_set(subs)"},{"line_number":394,"context_line":"        subs[\u0027value\u0027] \u003d \u0027Bar Value\u0027"},{"line_number":395,"context_line":"        response \u003d self._do_post(\u0027servers/%s/metadata\u0027 % uuid,"},{"line_number":396,"context_line":"                                 \u0027server-metadata-all-req\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FuXo%3D","line":393,"in_reply_to":"AAAAMH%2F%2Fub8%3D","updated":"2012-11-28 16:57:37.000000000","message":"Why? The generalize_subs() call is only done after the server response verification and before the sample verification. If we don\u0027t pass the subs into this create call, then no metadata will be set on the server during the real call.","commit_id":"c353d916c7d5f2a4962a939179f4b004977aebd3"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"423c2a52e608e7d135f5db03fe3c00305f731771","unresolved":false,"context_lines":[{"line_number":1060,"context_line":"        response \u003d self._do_post(\u0027os-keypairs\u0027, \u0027keypairs-post-req\u0027,"},{"line_number":1061,"context_line":"                                 {\u0027keypair_name\u0027: key_name})"},{"line_number":1062,"context_line":"        subs \u003d self._get_regexes()"},{"line_number":1063,"context_line":"        subs[\u0027keypair_name\u0027] \u003d \u0027(%s)\u0027 % key_name"},{"line_number":1064,"context_line":"        self.assertEqual(response.status, 200)"},{"line_number":1065,"context_line":"        self._verify_response(\u0027keypairs-post-resp\u0027, subs, response)"},{"line_number":1066,"context_line":"        # NOTE(maurosr): return the key_name is necessary cause the"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FvgE%3D","line":1063,"updated":"2012-11-28 16:28:47.000000000","message":"remove this line once you will get the information on generalize_subs","commit_id":"c353d916c7d5f2a4962a939179f4b004977aebd3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"27d0574045c962bdf1de8b1b80a46b3105b8475c","unresolved":false,"context_lines":[{"line_number":1060,"context_line":"        response \u003d self._do_post(\u0027os-keypairs\u0027, \u0027keypairs-post-req\u0027,"},{"line_number":1061,"context_line":"                                 {\u0027keypair_name\u0027: key_name})"},{"line_number":1062,"context_line":"        subs \u003d self._get_regexes()"},{"line_number":1063,"context_line":"        subs[\u0027keypair_name\u0027] \u003d \u0027(%s)\u0027 % key_name"},{"line_number":1064,"context_line":"        self.assertEqual(response.status, 200)"},{"line_number":1065,"context_line":"        self._verify_response(\u0027keypairs-post-resp\u0027, subs, response)"},{"line_number":1066,"context_line":"        # NOTE(maurosr): return the key_name is necessary cause the"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FuXY%3D","line":1063,"in_reply_to":"AAAAMH%2F%2FvgE%3D","updated":"2012-11-28 16:57:37.000000000","message":"No, because generalize_subs() is only run after the server response and before the sample response. If we remove this line, then the server response verification will fail. We want it to check for the *exact* keypair_name returned from the server, and then convert it to a pattern before checking the on-disk sample file.","commit_id":"c353d916c7d5f2a4962a939179f4b004977aebd3"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"423c2a52e608e7d135f5db03fe3c00305f731771","unresolved":false,"context_lines":[{"line_number":1200,"context_line":"                                 project)"},{"line_number":1201,"context_line":"        self.assertEqual(response.status, 200)"},{"line_number":1202,"context_line":"        subs \u003d self._get_regexes()"},{"line_number":1203,"context_line":"        subs.update(project)"},{"line_number":1204,"context_line":"        subs[\u0027image_id\u0027] \u003d CONF.vpn_image_id"},{"line_number":1205,"context_line":"        self._verify_response(\u0027cloud-pipe-create-resp\u0027, subs, response)"},{"line_number":1206,"context_line":"        return project"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FucA%3D","line":1203,"updated":"2012-11-28 16:28:47.000000000","message":"we can remove this line since we have generalize_subs","commit_id":"c353d916c7d5f2a4962a939179f4b004977aebd3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"27d0574045c962bdf1de8b1b80a46b3105b8475c","unresolved":false,"context_lines":[{"line_number":1200,"context_line":"                                 project)"},{"line_number":1201,"context_line":"        self.assertEqual(response.status, 200)"},{"line_number":1202,"context_line":"        subs \u003d self._get_regexes()"},{"line_number":1203,"context_line":"        subs.update(project)"},{"line_number":1204,"context_line":"        subs[\u0027image_id\u0027] \u003d CONF.vpn_image_id"},{"line_number":1205,"context_line":"        self._verify_response(\u0027cloud-pipe-create-resp\u0027, subs, response)"},{"line_number":1206,"context_line":"        return project"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMH%2F%2FuXU%3D","line":1203,"in_reply_to":"AAAAMH%2F%2FucA%3D","updated":"2012-11-28 16:57:37.000000000","message":"No, again, for the same reason as the two above.","commit_id":"c353d916c7d5f2a4962a939179f4b004977aebd3"}]}
