)]}'
{"tempest/api/network/test_routers.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"e52cc10edfe16a35b420bdc915e604b6d0cb6e8d","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        subnet \u003d self.create_subnet(network)"},{"line_number":142,"context_line":"        # Add router interface with subnet id"},{"line_number":143,"context_line":"        name \u003d rand_name(\u0027router-\u0027)"},{"line_number":144,"context_line":"        resp, create_body \u003d self.client.create_router(name)"},{"line_number":145,"context_line":"        self.addCleanup(self.client.delete_router, create_body[\u0027router\u0027][\u0027id\u0027])"},{"line_number":146,"context_line":"        resp, interface \u003d self.client.add_router_interface_with_subnet_id("},{"line_number":147,"context_line":"            create_body[\u0027router\u0027][\u0027id\u0027], subnet[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FW2s%3D","line":144,"updated":"2013-10-17 09:42:09.000000000","message":"basenetwork test has now a utility function to create a router.\nThat function will also take care of cleaning up the router upon test completion","commit_id":"0b92eec685e34c5546a27f6fdd672719707413a9"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"45c4c6da892b03f3d56f566f0caa1c32b59a71dd","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        subnet \u003d self.create_subnet(network)"},{"line_number":142,"context_line":"        # Add router interface with subnet id"},{"line_number":143,"context_line":"        name \u003d rand_name(\u0027router-\u0027)"},{"line_number":144,"context_line":"        resp, create_body \u003d self.client.create_router(name)"},{"line_number":145,"context_line":"        self.addCleanup(self.client.delete_router, create_body[\u0027router\u0027][\u0027id\u0027])"},{"line_number":146,"context_line":"        resp, interface \u003d self.client.add_router_interface_with_subnet_id("},{"line_number":147,"context_line":"            create_body[\u0027router\u0027][\u0027id\u0027], subnet[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FTdc%3D","line":144,"in_reply_to":"AAAATH%2F%2FW2s%3D","updated":"2013-10-18 02:40:40.000000000","message":"Done","commit_id":"0b92eec685e34c5546a27f6fdd672719707413a9"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"e52cc10edfe16a35b420bdc915e604b6d0cb6e8d","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        self.addCleanup(self._remove_router_interface_with_subnet_id,"},{"line_number":150,"context_line":"                        create_body[\u0027router\u0027][\u0027id\u0027], subnet[\u0027id\u0027])"},{"line_number":151,"context_line":"        # Update router extra route"},{"line_number":152,"context_line":"        cidr \u003d netaddr.IPNetwork(subnet[\u0027cidr\u0027])"},{"line_number":153,"context_line":"        resp, extra_route \u003d self.client.update_extra_route("},{"line_number":154,"context_line":"            create_body[\u0027router\u0027][\u0027id\u0027], str(cidr[0]), str(subnet[\u0027cidr\u0027]))"},{"line_number":155,"context_line":"        self.addCleanup("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FW20%3D","line":152,"updated":"2013-10-17 09:42:09.000000000","message":"it appears what you\u0027re doing with netaddr could just be done with split.\nNo big deal - but it does not really seem necessary to import netaddr","commit_id":"0b92eec685e34c5546a27f6fdd672719707413a9"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"45c4c6da892b03f3d56f566f0caa1c32b59a71dd","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        self.addCleanup(self._remove_router_interface_with_subnet_id,"},{"line_number":150,"context_line":"                        create_body[\u0027router\u0027][\u0027id\u0027], subnet[\u0027id\u0027])"},{"line_number":151,"context_line":"        # Update router extra route"},{"line_number":152,"context_line":"        cidr \u003d netaddr.IPNetwork(subnet[\u0027cidr\u0027])"},{"line_number":153,"context_line":"        resp, extra_route \u003d self.client.update_extra_route("},{"line_number":154,"context_line":"            create_body[\u0027router\u0027][\u0027id\u0027], str(cidr[0]), str(subnet[\u0027cidr\u0027]))"},{"line_number":155,"context_line":"        self.addCleanup("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FTcw%3D","line":152,"in_reply_to":"AAAATH%2F%2FW20%3D","updated":"2013-10-18 02:40:40.000000000","message":"Use netaddr will be more readable","commit_id":"0b92eec685e34c5546a27f6fdd672719707413a9"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"bc9c3cdb992920242e04dce307f55b7f6e850df1","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":236,"context_line":"    def test_update_extra_route(self):"},{"line_number":237,"context_line":"        self.network \u003d self.create_network()"},{"line_number":238,"context_line":"        self.name \u003d self.network[\u0027name\u0027]"},{"line_number":239,"context_line":"        self.subnet \u003d self.create_subnet(self.network)"},{"line_number":240,"context_line":"        # Add router interface with subnet id"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FIAU%3D","line":237,"updated":"2013-11-14 05:27:44.000000000","message":"I don\u0027t think you need to save these (till line 241) in self.*","commit_id":"45fe57deb764d209139d66ef62eae72400caebb6"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"6d8144dc2c34796f7de1674c2b84573153488c73","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":236,"context_line":"    def test_update_extra_route(self):"},{"line_number":237,"context_line":"        self.network \u003d self.create_network()"},{"line_number":238,"context_line":"        self.name \u003d self.network[\u0027name\u0027]"},{"line_number":239,"context_line":"        self.subnet \u003d self.create_subnet(self.network)"},{"line_number":240,"context_line":"        # Add router interface with subnet id"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2B3ws%3D","line":237,"in_reply_to":"AAAATn%2F%2FH6I%3D","updated":"2013-11-19 05:43:57.000000000","message":"Done","commit_id":"45fe57deb764d209139d66ef62eae72400caebb6"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"1ce97b3aaa98953d7c625cfe840baa4af7ded38e","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":236,"context_line":"    def test_update_extra_route(self):"},{"line_number":237,"context_line":"        self.network \u003d self.create_network()"},{"line_number":238,"context_line":"        self.name \u003d self.network[\u0027name\u0027]"},{"line_number":239,"context_line":"        self.subnet \u003d self.create_subnet(self.network)"},{"line_number":240,"context_line":"        # Add router interface with subnet id"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FH6I%3D","line":237,"in_reply_to":"AAAATn%2F%2FH9A%3D","updated":"2013-11-14 05:57:45.000000000","message":"again I don\u0027t think it is needed, create_network and create_subnet (as well as create_router) are saving the references in the base class resource lists for you and will cleanup\n\ncan you confirm deleting the router will succeed even if extra routes are defined? in that case we can drop _remove_router_with_extra_route()","commit_id":"45fe57deb764d209139d66ef62eae72400caebb6"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"a7e13c0fcf015ff714b2b9ed5f6a142d0e4384fd","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":236,"context_line":"    def test_update_extra_route(self):"},{"line_number":237,"context_line":"        self.network \u003d self.create_network()"},{"line_number":238,"context_line":"        self.name \u003d self.network[\u0027name\u0027]"},{"line_number":239,"context_line":"        self.subnet \u003d self.create_subnet(self.network)"},{"line_number":240,"context_line":"        # Add router interface with subnet id"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FH9A%3D","line":237,"in_reply_to":"AAAATn%2F%2FIAU%3D","updated":"2013-11-14 05:36:01.000000000","message":"This using self.* is to using base self-delete-routers mechanism to delete this router with extra routes.","commit_id":"45fe57deb764d209139d66ef62eae72400caebb6"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"5a50922d55931090ad44dd049fe6e58aa497d73f","unresolved":false,"context_lines":[{"line_number":236,"context_line":"    def test_update_extra_route(self):"},{"line_number":237,"context_line":"        self.network \u003d self.create_network()"},{"line_number":238,"context_line":"        self.name \u003d self.network[\u0027name\u0027]"},{"line_number":239,"context_line":"        self.subnet \u003d self.create_subnet(self.network)"},{"line_number":240,"context_line":"        # Add router interface with subnet id"},{"line_number":241,"context_line":"        self.router \u003d self.create_router(rand_name(\u0027router-\u0027), True)"},{"line_number":242,"context_line":"        self.create_router_interface(self.router[\u0027id\u0027], self.subnet[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2BObM%3D","line":239,"updated":"2013-11-28 17:05:36.000000000","message":"I don\u0027t see the need to make the network, subnet, and router instance attributes - can you help me understand?","commit_id":"4cc7fb05efe0cd1f47721351d6499ad66a383cb0"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"be5fcad0a41cafe7903bf0d9a2593bce67e00a23","unresolved":false,"context_lines":[{"line_number":236,"context_line":"    def test_update_extra_route(self):"},{"line_number":237,"context_line":"        self.network \u003d self.create_network()"},{"line_number":238,"context_line":"        self.name \u003d self.network[\u0027name\u0027]"},{"line_number":239,"context_line":"        self.subnet \u003d self.create_subnet(self.network)"},{"line_number":240,"context_line":"        # Add router interface with subnet id"},{"line_number":241,"context_line":"        self.router \u003d self.create_router(rand_name(\u0027router-\u0027), True)"},{"line_number":242,"context_line":"        self.create_router_interface(self.router[\u0027id\u0027], self.subnet[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2BNrk%3D","line":239,"in_reply_to":"AAAATn%2F%2BObM%3D","updated":"2013-11-29 01:49:55.000000000","message":"If we need to test the extra route, we can not just add route at will, it need to base on the subnet\u0027s cidr address on the router, so if subnet is must added, then it need the network. That\u0027s why I add these instance here.","commit_id":"4cc7fb05efe0cd1f47721351d6499ad66a383cb0"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"e4a13fa1e7b4624dd3f0875c8c9da811e57a4720","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        self.addCleanup("},{"line_number":248,"context_line":"            self._clean_up_extra_route,"},{"line_number":249,"context_line":"            self.router[\u0027id\u0027])"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def _clean_up_extra_route(self, router_id):"},{"line_number":252,"context_line":"        resp, _ \u003d self.client.clean_up_extra_route(router_id)"},{"line_number":253,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Bh5c%3D","line":250,"updated":"2013-11-25 03:00:02.000000000","message":"I feel it is better to call self.client.clean_up_extra_route() directly without self.addCleanup() and check response code here. \n\nbecause the test targets include clean_up_extra_route() also and  here is the end of the test. The merit of addCleanup() is nothing.","commit_id":"4cc7fb05efe0cd1f47721351d6499ad66a383cb0"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"d62e5564dd340bae8f32363a2e32ec1502be984e","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        self.addCleanup("},{"line_number":248,"context_line":"            self._clean_up_extra_route,"},{"line_number":249,"context_line":"            self.router[\u0027id\u0027])"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def _clean_up_extra_route(self, router_id):"},{"line_number":252,"context_line":"        resp, _ \u003d self.client.clean_up_extra_route(router_id)"},{"line_number":253,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2BCsY%3D","line":250,"in_reply_to":"AAAATn%2F%2BCs8%3D","updated":"2013-12-04 01:56:44.000000000","message":"the addCleanup() is mean to clean the router\u0027s added routes that created above, because that if not clean the routes, the router can not be deleted. Thanks.","commit_id":"4cc7fb05efe0cd1f47721351d6499ad66a383cb0"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"03be0bdf8b720d04a2c5bf9631a54420ac04ab9b","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        self.addCleanup("},{"line_number":248,"context_line":"            self._clean_up_extra_route,"},{"line_number":249,"context_line":"            self.router[\u0027id\u0027])"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def _clean_up_extra_route(self, router_id):"},{"line_number":252,"context_line":"        resp, _ \u003d self.client.clean_up_extra_route(router_id)"},{"line_number":253,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Bhyw%3D","line":250,"in_reply_to":"AAAATn%2F%2Bh5c%3D","updated":"2013-11-25 03:41:39.000000000","message":"Okey, then pls remove -1, thx. I did not use addCleanup() here as you saw.","commit_id":"4cc7fb05efe0cd1f47721351d6499ad66a383cb0"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"5a50922d55931090ad44dd049fe6e58aa497d73f","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        self.addCleanup("},{"line_number":248,"context_line":"            self._clean_up_extra_route,"},{"line_number":249,"context_line":"            self.router[\u0027id\u0027])"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def _clean_up_extra_route(self, router_id):"},{"line_number":252,"context_line":"        resp, _ \u003d self.client.clean_up_extra_route(router_id)"},{"line_number":253,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2BOb4%3D","line":250,"in_reply_to":"AAAATn%2F%2Bhyw%3D","updated":"2013-11-28 17:05:36.000000000","message":"As much as I\u0027d like to agree with you, I am afraid I read self.addCleanup in line 247","commit_id":"4cc7fb05efe0cd1f47721351d6499ad66a383cb0"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"6cf24ee18f8272f47fd2d1d05fe0c4b6f496d92e","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        self.addCleanup("},{"line_number":248,"context_line":"            self._clean_up_extra_route,"},{"line_number":249,"context_line":"            self.router[\u0027id\u0027])"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def _clean_up_extra_route(self, router_id):"},{"line_number":252,"context_line":"        resp, _ \u003d self.client.clean_up_extra_route(router_id)"},{"line_number":253,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2BCs8%3D","line":250,"in_reply_to":"AAAATn%2F%2Bhyw%3D","updated":"2013-12-03 05:49:28.000000000","message":"sorry, I cannot understand why the latest patch contains addCleanup().\n\ncould you explain the reason of addCleanup()?","commit_id":"4cc7fb05efe0cd1f47721351d6499ad66a383cb0"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"5a50922d55931090ad44dd049fe6e58aa497d73f","unresolved":false,"context_lines":[{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def _clean_up_extra_route(self, router_id):"},{"line_number":252,"context_line":"        resp, _ \u003d self.client.clean_up_extra_route(router_id)"},{"line_number":253,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2BObw%3D","line":253,"updated":"2013-11-28 17:05:36.000000000","message":"technically here you would need another check where you show the router and see that route you\u0027ve removed is not anymore in the extra routers","commit_id":"4cc7fb05efe0cd1f47721351d6499ad66a383cb0"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"5976f07e2b43d0fd108d65b84a950079ba65bd88","unresolved":false,"context_lines":[{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def _clean_up_extra_route(self, router_id):"},{"line_number":252,"context_line":"        resp, _ \u003d self.client.clean_up_extra_route(router_id)"},{"line_number":253,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2BCuc%3D","line":253,"in_reply_to":"AAAATn%2F%2BObw%3D","updated":"2013-12-03 05:38:12.000000000","message":"Done","commit_id":"4cc7fb05efe0cd1f47721351d6499ad66a383cb0"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"7cf3604c2cf1f1a0816937f4c95937c07325989e","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        cidr \u003d netaddr.IPNetwork(self.subnet[\u0027cidr\u0027])"},{"line_number":245,"context_line":"        resp, extra_route \u003d self.client.update_extra_route("},{"line_number":246,"context_line":"            self.router[\u0027id\u0027], str(cidr[0]), str(self.subnet[\u0027cidr\u0027]))"},{"line_number":247,"context_line":"        self.addCleanup("},{"line_number":248,"context_line":"            self._clean_up_extra_route,"},{"line_number":249,"context_line":"            self.router[\u0027id\u0027])"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F9%2BMI%3D","line":247,"updated":"2013-12-03 21:42:44.000000000","message":"the cleanup should actually be moved to L242. This isn\u0027t a synchronous method, it\u0027s a registered callback, so it should actually be done as soon as you have the id, as it will ensure that if any of those other calls fail you don\u0027t leak away the resources","commit_id":"f6579734153240e02d8843c976eb712d81bc4c8e"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"3a8306742116ce2cae1fe1a59d73045969f2957b","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        cidr \u003d netaddr.IPNetwork(self.subnet[\u0027cidr\u0027])"},{"line_number":245,"context_line":"        resp, extra_route \u003d self.client.update_extra_route("},{"line_number":246,"context_line":"            self.router[\u0027id\u0027], str(cidr[0]), str(self.subnet[\u0027cidr\u0027]))"},{"line_number":247,"context_line":"        self.addCleanup("},{"line_number":248,"context_line":"            self._clean_up_extra_route,"},{"line_number":249,"context_line":"            self.router[\u0027id\u0027])"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F99Jc%3D","line":247,"in_reply_to":"AAAATn%2F9%2BMI%3D","updated":"2013-12-04 02:01:01.000000000","message":"Done","commit_id":"f6579734153240e02d8843c976eb712d81bc4c8e"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"a3e17475f2da4b2d486ed82537f62781d23785e6","unresolved":false,"context_lines":[{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def _clean_up_extra_route(self, router_id):"},{"line_number":252,"context_line":"        resp, _ \u003d self.client.clean_up_extra_route(router_id)"},{"line_number":253,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":254,"context_line":"        resp, show_body \u003d self.client.show_router(router_id)"},{"line_number":255,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":256,"context_line":"        self.assertEqual(len(show_body[\u0027router\u0027][\u0027routes\u0027]), 0)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F97IU%3D","line":253,"updated":"2013-12-04 12:35:48.000000000","message":"cleanups shouldn\u0027t really have asserts, because we don\u0027t want to give them more reasons to fail.","commit_id":"5a4a78b8be0e9cbdae87c497578ed41f3265ec73"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"e84348fa0f806d6646a9364ddb09a298659f7ef1","unresolved":false,"context_lines":[{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def _clean_up_extra_route(self, router_id):"},{"line_number":252,"context_line":"        resp, _ \u003d self.client.clean_up_extra_route(router_id)"},{"line_number":253,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":254,"context_line":"        resp, show_body \u003d self.client.show_router(router_id)"},{"line_number":255,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":256,"context_line":"        self.assertEqual(len(show_body[\u0027router\u0027][\u0027routes\u0027]), 0)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F93mQ%3D","line":253,"in_reply_to":"AAAATn%2F97IU%3D","updated":"2013-12-05 03:01:46.000000000","message":"Done","commit_id":"5a4a78b8be0e9cbdae87c497578ed41f3265ec73"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"a3e17475f2da4b2d486ed82537f62781d23785e6","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        resp, _ \u003d self.client.clean_up_extra_route(router_id)"},{"line_number":253,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":254,"context_line":"        resp, show_body \u003d self.client.show_router(router_id)"},{"line_number":255,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":256,"context_line":"        self.assertEqual(len(show_body[\u0027router\u0027][\u0027routes\u0027]), 0)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F97IE%3D","line":255,"updated":"2013-12-04 12:35:48.000000000","message":"ditto","commit_id":"5a4a78b8be0e9cbdae87c497578ed41f3265ec73"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"e84348fa0f806d6646a9364ddb09a298659f7ef1","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        resp, _ \u003d self.client.clean_up_extra_route(router_id)"},{"line_number":253,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":254,"context_line":"        resp, show_body \u003d self.client.show_router(router_id)"},{"line_number":255,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":256,"context_line":"        self.assertEqual(len(show_body[\u0027router\u0027][\u0027routes\u0027]), 0)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F93lw%3D","line":255,"in_reply_to":"AAAATn%2F97IE%3D","updated":"2013-12-05 03:01:46.000000000","message":"Done","commit_id":"5a4a78b8be0e9cbdae87c497578ed41f3265ec73"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"a3e17475f2da4b2d486ed82537f62781d23785e6","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":254,"context_line":"        resp, show_body \u003d self.client.show_router(router_id)"},{"line_number":255,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":256,"context_line":"        self.assertEqual(len(show_body[\u0027router\u0027][\u0027routes\u0027]), 0)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F97H4%3D","line":256,"updated":"2013-12-04 12:35:48.000000000","message":"I don\u0027t think this should be an assert, I\u0027d be ok with this being a log message if we leaked.","commit_id":"5a4a78b8be0e9cbdae87c497578ed41f3265ec73"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"e84348fa0f806d6646a9364ddb09a298659f7ef1","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":254,"context_line":"        resp, show_body \u003d self.client.show_router(router_id)"},{"line_number":255,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":256,"context_line":"        self.assertEqual(len(show_body[\u0027router\u0027][\u0027routes\u0027]), 0)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F93lQ%3D","line":256,"in_reply_to":"AAAATn%2F97H4%3D","updated":"2013-12-05 03:01:46.000000000","message":"If we don\u0027t need this assert and give no reason that cleanup part fail. Then I removed the show_router as well, just leave the clean part.","commit_id":"5a4a78b8be0e9cbdae87c497578ed41f3265ec73"}],"tempest/services/network/json/network_client.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"e52cc10edfe16a35b420bdc915e604b6d0cb6e8d","unresolved":false,"context_lines":[{"line_number":614,"context_line":"        body \u003d json.loads(body)"},{"line_number":615,"context_line":"        return resp, body"},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"    def remove_router_with_extra_route(self, router_id):"},{"line_number":618,"context_line":"        uri \u003d \u0027%s/routers/%s\u0027 % (self.uri_prefix, router_id)"},{"line_number":619,"context_line":"        null_routes \u003d None"},{"line_number":620,"context_line":"        put_body \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FW2I%3D","line":617,"updated":"2013-10-17 09:42:09.000000000","message":"I don\u0027t think we mandate cleaning up extra routes before removing a router in the neutron API.\n\nIf you consider my other comment, and you still want to this cleanup, you can have a clear_router_extra_routes method here.","commit_id":"0b92eec685e34c5546a27f6fdd672719707413a9"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"45c4c6da892b03f3d56f566f0caa1c32b59a71dd","unresolved":false,"context_lines":[{"line_number":614,"context_line":"        body \u003d json.loads(body)"},{"line_number":615,"context_line":"        return resp, body"},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"    def remove_router_with_extra_route(self, router_id):"},{"line_number":618,"context_line":"        uri \u003d \u0027%s/routers/%s\u0027 % (self.uri_prefix, router_id)"},{"line_number":619,"context_line":"        null_routes \u003d None"},{"line_number":620,"context_line":"        put_body \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FTdk%3D","line":617,"in_reply_to":"AAAATH%2F%2FW2I%3D","updated":"2013-10-18 02:40:40.000000000","message":"Thanks for the comments. If there is a extra route on specific router, we can not directly delete this router before  we delete this route, so IMO this remove method should stay here.","commit_id":"0b92eec685e34c5546a27f6fdd672719707413a9"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"bc9c3cdb992920242e04dce307f55b7f6e850df1","unresolved":false,"context_lines":[{"line_number":687,"context_line":"        body \u003d json.loads(body)"},{"line_number":688,"context_line":"        return resp, body"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"    def remove_router_with_extra_route(self, router_id):"},{"line_number":691,"context_line":"        uri \u003d \u0027%s/routers/%s\u0027 % (self.uri_prefix, router_id)"},{"line_number":692,"context_line":"        null_routes \u003d None"},{"line_number":693,"context_line":"        put_body \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FIBI%3D","line":690,"updated":"2013-11-14 05:27:44.000000000","message":"out of my curiosity, is this removing the router together with the extra route simply because \u0027routes\u0027 is None? and is there a reason for preferring this to the more regular delete_router()?","commit_id":"45fe57deb764d209139d66ef62eae72400caebb6"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"90eda4efdca13049befb17dfe05588b0248e4b47","unresolved":false,"context_lines":[{"line_number":687,"context_line":"        body \u003d json.loads(body)"},{"line_number":688,"context_line":"        return resp, body"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"    def remove_router_with_extra_route(self, router_id):"},{"line_number":691,"context_line":"        uri \u003d \u0027%s/routers/%s\u0027 % (self.uri_prefix, router_id)"},{"line_number":692,"context_line":"        null_routes \u003d None"},{"line_number":693,"context_line":"        put_body \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FHc8%3D","line":690,"in_reply_to":"AAAATn%2F%2FH0I%3D","updated":"2013-11-14 08:37:47.000000000","message":"got it, thanks\n\nso please rename this function into something like \"_cleanup_extra_routes\"","commit_id":"45fe57deb764d209139d66ef62eae72400caebb6"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"3c4c9cbd0095a4a1520010d5947897da08db8c13","unresolved":false,"context_lines":[{"line_number":687,"context_line":"        body \u003d json.loads(body)"},{"line_number":688,"context_line":"        return resp, body"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"    def remove_router_with_extra_route(self, router_id):"},{"line_number":691,"context_line":"        uri \u003d \u0027%s/routers/%s\u0027 % (self.uri_prefix, router_id)"},{"line_number":692,"context_line":"        null_routes \u003d None"},{"line_number":693,"context_line":"        put_body \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FH0I%3D","line":690,"in_reply_to":"AAAATn%2F%2FH54%3D","updated":"2013-11-14 06:10:01.000000000","message":"clear up all extra routes is the must-done step before we delete a router.","commit_id":"45fe57deb764d209139d66ef62eae72400caebb6"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"1ce97b3aaa98953d7c625cfe840baa4af7ded38e","unresolved":false,"context_lines":[{"line_number":687,"context_line":"        body \u003d json.loads(body)"},{"line_number":688,"context_line":"        return resp, body"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"    def remove_router_with_extra_route(self, router_id):"},{"line_number":691,"context_line":"        uri \u003d \u0027%s/routers/%s\u0027 % (self.uri_prefix, router_id)"},{"line_number":692,"context_line":"        null_routes \u003d None"},{"line_number":693,"context_line":"        put_body \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FH54%3D","line":690,"in_reply_to":"AAAATn%2F%2FH9M%3D","updated":"2013-11-14 05:57:45.000000000","message":"is it a required step in the process or can we safely assume a router is deleted even if extra routes had been defined for it?","commit_id":"45fe57deb764d209139d66ef62eae72400caebb6"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"6d8144dc2c34796f7de1674c2b84573153488c73","unresolved":false,"context_lines":[{"line_number":687,"context_line":"        body \u003d json.loads(body)"},{"line_number":688,"context_line":"        return resp, body"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"    def remove_router_with_extra_route(self, router_id):"},{"line_number":691,"context_line":"        uri \u003d \u0027%s/routers/%s\u0027 % (self.uri_prefix, router_id)"},{"line_number":692,"context_line":"        null_routes \u003d None"},{"line_number":693,"context_line":"        put_body \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2B3wo%3D","line":690,"in_reply_to":"AAAATn%2F%2FHc8%3D","updated":"2013-11-19 05:43:57.000000000","message":"Done","commit_id":"45fe57deb764d209139d66ef62eae72400caebb6"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"a7e13c0fcf015ff714b2b9ed5f6a142d0e4384fd","unresolved":false,"context_lines":[{"line_number":687,"context_line":"        body \u003d json.loads(body)"},{"line_number":688,"context_line":"        return resp, body"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"    def remove_router_with_extra_route(self, router_id):"},{"line_number":691,"context_line":"        uri \u003d \u0027%s/routers/%s\u0027 % (self.uri_prefix, router_id)"},{"line_number":692,"context_line":"        null_routes \u003d None"},{"line_number":693,"context_line":"        put_body \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FH9M%3D","line":690,"in_reply_to":"AAAATn%2F%2FIBI%3D","updated":"2013-11-14 05:36:01.000000000","message":"This is not removing router together, it\u0027s just remove routes before we delete the routers.","commit_id":"45fe57deb764d209139d66ef62eae72400caebb6"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"0faf3a700fbf90ca173903c5c1e5666b6b83ed4f","unresolved":false,"context_lines":[{"line_number":698,"context_line":"        body \u003d json.loads(body)"},{"line_number":699,"context_line":"        return resp, body"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    def update_extra_route(self, router_id, nexthop, destination):"},{"line_number":702,"context_line":"        uri \u003d \u0027%s/routers/%s\u0027 % (self.uri_prefix, router_id)"},{"line_number":703,"context_line":"        put_body \u003d {"},{"line_number":704,"context_line":"            \u0027router\u0027: {"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9sKE%3D","line":701,"updated":"2013-12-07 13:14:54.000000000","message":"method name should probably be update_extra_routes","commit_id":"0f72772b4d907296d8da04d1b0a0794b0560f15a"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"990c3baafdca0cd1f544d38d6c6f7c0993946090","unresolved":false,"context_lines":[{"line_number":698,"context_line":"        body \u003d json.loads(body)"},{"line_number":699,"context_line":"        return resp, body"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    def update_extra_route(self, router_id, nexthop, destination):"},{"line_number":702,"context_line":"        uri \u003d \u0027%s/routers/%s\u0027 % (self.uri_prefix, router_id)"},{"line_number":703,"context_line":"        put_body \u003d {"},{"line_number":704,"context_line":"            \u0027router\u0027: {"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9p40%3D","line":701,"in_reply_to":"AAAATn%2F9sKE%3D","updated":"2013-12-09 08:43:25.000000000","message":"Done","commit_id":"0f72772b4d907296d8da04d1b0a0794b0560f15a"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"0faf3a700fbf90ca173903c5c1e5666b6b83ed4f","unresolved":false,"context_lines":[{"line_number":711,"context_line":"        body \u003d json.loads(body)"},{"line_number":712,"context_line":"        return resp, body"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"    def clean_up_extra_route(self, router_id):"},{"line_number":715,"context_line":"        uri \u003d \u0027%s/routers/%s\u0027 % (self.uri_prefix, router_id)"},{"line_number":716,"context_line":"        null_routes \u003d None"},{"line_number":717,"context_line":"        put_body \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9sKM%3D","line":714,"updated":"2013-12-07 13:14:54.000000000","message":"we should call this delete_extra_routes (because that\u0027s what it\u0027s doing)","commit_id":"0f72772b4d907296d8da04d1b0a0794b0560f15a"},{"author":{"_account_id":8607,"name":"ChenZheng","email":"czheng@cn.ibm.com","username":"ChenZheng"},"change_message_id":"990c3baafdca0cd1f544d38d6c6f7c0993946090","unresolved":false,"context_lines":[{"line_number":711,"context_line":"        body \u003d json.loads(body)"},{"line_number":712,"context_line":"        return resp, body"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"    def clean_up_extra_route(self, router_id):"},{"line_number":715,"context_line":"        uri \u003d \u0027%s/routers/%s\u0027 % (self.uri_prefix, router_id)"},{"line_number":716,"context_line":"        null_routes \u003d None"},{"line_number":717,"context_line":"        put_body \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F9p5A%3D","line":714,"in_reply_to":"AAAATn%2F9sKM%3D","updated":"2013-12-09 08:43:25.000000000","message":"Done","commit_id":"0f72772b4d907296d8da04d1b0a0794b0560f15a"}]}
