)]}'
{"tempest/api/network/base.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"8422ddc32b9f142f907942abadb73b5f903076e7","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        return subnet"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    @classmethod"},{"line_number":173,"context_line":"    def create_port(cls, network, **kwargs):"},{"line_number":174,"context_line":"        \"\"\"Wrapper utility that returns a test port.\"\"\""},{"line_number":175,"context_line":"        resp, body \u003d cls.client.create_port(network_id\u003dnetwork[\u0027id\u0027],"},{"line_number":176,"context_line":"                                            **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F93f4%3D","line":173,"updated":"2014-04-01 15:04:23.000000000","message":"Why do you add kwargs here? I think this is unnecessary as in network_base_client uses _creater that contains kwargs so this should work without adding this. Check out this.","commit_id":"e729d3d4aa48ed981f4716156ca00897bd5749d8"},{"author":{"_account_id":6695,"name":"Dane LeBlanc","email":"leblancd@cisco.com","username":"leblancd"},"change_message_id":"1b3b3e50cbf143abe90a00bf512ca40330e51fbb","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        return subnet"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    @classmethod"},{"line_number":173,"context_line":"    def create_port(cls, network, **kwargs):"},{"line_number":174,"context_line":"        \"\"\"Wrapper utility that returns a test port.\"\"\""},{"line_number":175,"context_line":"        resp, body \u003d cls.client.create_port(network_id\u003dnetwork[\u0027id\u0027],"},{"line_number":176,"context_line":"                                            **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F9uK8%3D","line":173,"in_reply_to":"AAAAWH%2F93f4%3D","updated":"2014-04-02 17:01:44.000000000","message":"I\u0027m not sure what you had in mind, but simply removing kwargs does not work. The new test case requires a way to pass a fixed_ips list to cls.client.create_port, so that this (in turn) is included in the kwargs of the _creater method. I had considered two ways to do this; first, with an explicit \"fixed_ips\" keyword argument, e.g.:\n    @classmethod\n    def create_port(cls, network, fixed_ips\u003d[]):\n        \"\"\"Wrapper utility that returns a test port.\"\"\"\n        resp, body \u003d cls.client.create_port(network_id\u003dnetwork[\u0027id\u0027],\n                                            fixed_ips\u003dfixed_ips)\nand secondly with the **kwargs expansion as proposed. The advantage of using the **kwargs (vs. explicit fixed_ips) is that it\u0027s extensible, i.e. any future tests which need to pass other keyword arg(s) to _creater can do this without modifying create_port here.","commit_id":"e729d3d4aa48ed981f4716156ca00897bd5749d8"},{"author":{"_account_id":8824,"name":"Sergey Murashov","email":"smurashov@mirantis.com","username":"SergeyMurashov"},"change_message_id":"ebc849cb964cee2f1da34d0bece0b3f87efecb1c","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    @classmethod"},{"line_number":182,"context_line":"    def update_port(cls, port, **kwargs):"},{"line_number":183,"context_line":"        \"\"\"Wrapper utility that updates a test port.\"\"\""},{"line_number":184,"context_line":"        resp, body \u003d cls.client.update_port(port[\u0027id\u0027],"},{"line_number":185,"context_line":"                                            **kwargs)"},{"line_number":186,"context_line":"        port \u003d body[\u0027port\u0027]"},{"line_number":187,"context_line":"        return port"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F93nk%3D","line":184,"updated":"2014-04-01 14:43:47.000000000","message":"unused variable \"resp\", may be would be better:\n\"return cls.client.update_port(port[\u0027id\u0027],**kwargs)[\u0027port\u0027]\" ?","commit_id":"e729d3d4aa48ed981f4716156ca00897bd5749d8"},{"author":{"_account_id":6695,"name":"Dane LeBlanc","email":"leblancd@cisco.com","username":"leblancd"},"change_message_id":"1b3b3e50cbf143abe90a00bf512ca40330e51fbb","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    @classmethod"},{"line_number":182,"context_line":"    def update_port(cls, port, **kwargs):"},{"line_number":183,"context_line":"        \"\"\"Wrapper utility that updates a test port.\"\"\""},{"line_number":184,"context_line":"        resp, body \u003d cls.client.update_port(port[\u0027id\u0027],"},{"line_number":185,"context_line":"                                            **kwargs)"},{"line_number":186,"context_line":"        port \u003d body[\u0027port\u0027]"},{"line_number":187,"context_line":"        return port"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F9tjY%3D","line":184,"in_reply_to":"AAAAWH%2F93nk%3D","updated":"2014-04-02 17:01:44.000000000","message":"The return from update_port is a tuple, not a dict, so to do what you\u0027re suggesting would also require a [1] index into the tuple, e.g. ...update_port(port[\u0027id\u0027],**kwargs)[1][\u0027port\u0027]. I much prefer keeping the code as is rather than using a constant index which is a bit vague. This is also consistent with other client method calls in this module, and is clearer to read, IMO. On the other hand, I could combine the two lines that follow into one.","commit_id":"e729d3d4aa48ed981f4716156ca00897bd5749d8"}],"tempest/api/network/test_networks.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"50f2b301f81f81f44b555975f99b8f300241df8a","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        self.assertEqual(updated_subnet[\u0027name\u0027], new_subnet)"},{"line_number":158,"context_line":"        # Delete subnet and network"},{"line_number":159,"context_line":"        self._delete_subnet(subnet_id)"},{"line_number":160,"context_line":"        self._delete_network(net_id)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":163,"context_line":"    def test_show_network(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2FEXo%3D","line":160,"updated":"2014-01-17 19:01:12.000000000","message":"Not really part of your changes, but please use addCleanup() for deleting these resources.","commit_id":"b373c8f33311c869304f8af6dcf0618c34f434f9"},{"author":{"_account_id":6695,"name":"Dane LeBlanc","email":"leblancd@cisco.com","username":"leblancd"},"change_message_id":"82c028134cfee8ef3ee9d0038bb16bc70471bc44","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        self.assertEqual(updated_subnet[\u0027name\u0027], new_subnet)"},{"line_number":158,"context_line":"        # Delete subnet and network"},{"line_number":159,"context_line":"        self._delete_subnet(subnet_id)"},{"line_number":160,"context_line":"        self._delete_network(net_id)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":163,"context_line":"    def test_show_network(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FKus%3D","line":160,"in_reply_to":"AAAAUH%2F%2FEXo%3D","updated":"2014-03-19 19:52:45.000000000","message":"My new change set for this fix doesn\u0027t include any changes to test_networks.py, so I think that cleaning up this method to do deletes via addCleanup should be done as a separate effort.","commit_id":"b373c8f33311c869304f8af6dcf0618c34f434f9"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"50f2b301f81f81f44b555975f99b8f300241df8a","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        updated_port \u003d body[\u0027port\u0027]"},{"line_number":247,"context_line":"        self.assertEqual(updated_port[\u0027name\u0027], new_port)"},{"line_number":248,"context_line":"        # Verification of port delete"},{"line_number":249,"context_line":"        self._delete_port(port[\u0027id\u0027])"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":252,"context_line":"    def test_create_delete_port_two_ips(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2FEVc%3D","line":249,"updated":"2014-01-17 19:01:12.000000000","message":"Not really part of your changes, but please use addCleanup() for deleting this resource.","commit_id":"b373c8f33311c869304f8af6dcf0618c34f434f9"},{"author":{"_account_id":6695,"name":"Dane LeBlanc","email":"leblancd@cisco.com","username":"leblancd"},"change_message_id":"82c028134cfee8ef3ee9d0038bb16bc70471bc44","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        updated_port \u003d body[\u0027port\u0027]"},{"line_number":247,"context_line":"        self.assertEqual(updated_port[\u0027name\u0027], new_port)"},{"line_number":248,"context_line":"        # Verification of port delete"},{"line_number":249,"context_line":"        self._delete_port(port[\u0027id\u0027])"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":252,"context_line":"    def test_create_delete_port_two_ips(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FKjg%3D","line":249,"in_reply_to":"AAAAUH%2F%2FEVc%3D","updated":"2014-03-19 19:52:45.000000000","message":"Done","commit_id":"b373c8f33311c869304f8af6dcf0618c34f434f9"},{"author":{"_account_id":7930,"name":"jun xie","email":"easonxie160@163.com","username":"jeffreycoho"},"change_message_id":"8cbda82311b5b25dd0a843a3616f9bbbc2b58ca5","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        self._delete_port(port[\u0027id\u0027])"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":252,"context_line":"    def test_create_delete_port_two_ips(self):"},{"line_number":253,"context_line":"        # Create a network, subnet and port"},{"line_number":254,"context_line":"        network \u003d self._create_network()"},{"line_number":255,"context_line":"        net_id \u003d network[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2B4YQ%3D","line":252,"updated":"2014-01-21 05:52:40.000000000","message":"hi,Dane, in this case, it looks like it only updates the port to have 2 ips. Looks as if u meant to first create a port with 2 ips? (according to what is recorded here https://etherpad.openstack.org/p/icehouse-summit-qa-neutron) . Also I think it is better to modify the method name. thanks","commit_id":"b373c8f33311c869304f8af6dcf0618c34f434f9"},{"author":{"_account_id":6695,"name":"Dane LeBlanc","email":"leblancd@cisco.com","username":"leblancd"},"change_message_id":"82c028134cfee8ef3ee9d0038bb16bc70471bc44","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        self._delete_port(port[\u0027id\u0027])"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":252,"context_line":"    def test_create_delete_port_two_ips(self):"},{"line_number":253,"context_line":"        # Create a network, subnet and port"},{"line_number":254,"context_line":"        network \u003d self._create_network()"},{"line_number":255,"context_line":"        net_id \u003d network[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FKh8%3D","line":252,"in_reply_to":"AAAAUH%2F%2B4YQ%3D","updated":"2014-03-19 19:52:45.000000000","message":"I believe that the task written on the etherpad was a bit of a shorthand, and the intent was to have a test which create a port with 1 ip, then add a second ip through port update. (I chatted a while back with Miguel, who created this gap list, and he confirmed.) But you\u0027re right, the method name should be changed to reflect this, thanks.","commit_id":"b373c8f33311c869304f8af6dcf0618c34f434f9"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"50f2b301f81f81f44b555975f99b8f300241df8a","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        self._delete_port(port[\u0027id\u0027])"},{"line_number":287,"context_line":"        self._delete_subnet(subnet_1[\u0027id\u0027])"},{"line_number":288,"context_line":"        self._delete_subnet(subnet_2[\u0027id\u0027])"},{"line_number":289,"context_line":"        self._delete_network(net_id)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":292,"context_line":"    def test_show_port(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2FEYQ%3D","line":289,"updated":"2014-01-17 19:01:12.000000000","message":"Please use addCleanup() for deleting these resources.","commit_id":"b373c8f33311c869304f8af6dcf0618c34f434f9"},{"author":{"_account_id":6695,"name":"Dane LeBlanc","email":"leblancd@cisco.com","username":"leblancd"},"change_message_id":"82c028134cfee8ef3ee9d0038bb16bc70471bc44","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        self._delete_port(port[\u0027id\u0027])"},{"line_number":287,"context_line":"        self._delete_subnet(subnet_1[\u0027id\u0027])"},{"line_number":288,"context_line":"        self._delete_subnet(subnet_2[\u0027id\u0027])"},{"line_number":289,"context_line":"        self._delete_network(net_id)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":292,"context_line":"    def test_show_port(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FKgw%3D","line":289,"in_reply_to":"AAAAUH%2F%2FEYQ%3D","updated":"2014-03-19 19:52:45.000000000","message":"The new change set will use the resource cleanup that is built into the BaseNetworkTest class\u0027 TearDownClass method.","commit_id":"b373c8f33311c869304f8af6dcf0618c34f434f9"}],"tempest/api/network/test_ports.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"cb54348c60b9a3cdb3c93d7d6802feef2620f0f1","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        resp, body \u003d self.client.create_port(network_id\u003dself.network[\u0027id\u0027])"},{"line_number":47,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":48,"context_line":"        port \u003d body[\u0027port\u0027]"},{"line_number":49,"context_line":"        # Schedule port deletion with verification upon test completion"},{"line_number":50,"context_line":"        self.addCleanup(self._delete_port, port[\u0027id\u0027])"},{"line_number":51,"context_line":"        self.assertTrue(port[\u0027admin_state_up\u0027])"},{"line_number":52,"context_line":"        # Verify port update"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2BpEU%3D","line":49,"updated":"2014-03-25 11:04:29.000000000","message":"Why do this change as delete action was a part of test before? It is normal to do  delete in test_create_update_delete_* , not cleanUp.","commit_id":"3c9f6e85aa41a4511318cb7d90c31731ae7488d9"},{"author":{"_account_id":6695,"name":"Dane LeBlanc","email":"leblancd@cisco.com","username":"leblancd"},"change_message_id":"52de7ea5495cba034f842cc86242a8be381e8cd3","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        resp, body \u003d self.client.create_port(network_id\u003dself.network[\u0027id\u0027])"},{"line_number":47,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":48,"context_line":"        port \u003d body[\u0027port\u0027]"},{"line_number":49,"context_line":"        # Schedule port deletion with verification upon test completion"},{"line_number":50,"context_line":"        self.addCleanup(self._delete_port, port[\u0027id\u0027])"},{"line_number":51,"context_line":"        self.assertTrue(port[\u0027admin_state_up\u0027])"},{"line_number":52,"context_line":"        # Verify port update"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F9%2B98%3D","line":49,"in_reply_to":"AAAAWH%2F%2BpEU%3D","updated":"2014-03-31 19:03:01.000000000","message":"The motivation for this change is that, as far as I can tell, the port deletion in the original code wasn\u0027t guaranteed. For example, if the call to update_port fails, the test will assert without cleanup up (deleting) the port. I don\u0027t know if the port deletion would be done implicitly somewhere else in this case (do you know offhand where this might happen?), but one of the previous reviewers and I thought that scheduling an explicit cleanup would be more robust. Let me know if I\u0027m missing something.","commit_id":"3c9f6e85aa41a4511318cb7d90c31731ae7488d9"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"908f0fa547199def52c9c5b35f69707b5128cb42","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        resp, body \u003d self.client.create_port(network_id\u003dself.network[\u0027id\u0027])"},{"line_number":47,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":48,"context_line":"        port \u003d body[\u0027port\u0027]"},{"line_number":49,"context_line":"        # Schedule port deletion with verification upon test completion"},{"line_number":50,"context_line":"        self.addCleanup(self._delete_port, port[\u0027id\u0027])"},{"line_number":51,"context_line":"        self.assertTrue(port[\u0027admin_state_up\u0027])"},{"line_number":52,"context_line":"        # Verify port update"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F93a8%3D","line":49,"in_reply_to":"AAAAWH%2F9%2B98%3D","updated":"2014-04-01 15:02:28.000000000","message":"I researched a number of tests and found out that in some of them in _create_update_delete_ uses cleapUp method, in some delete.  If you consider to use cleanUp - let it be so.","commit_id":"3c9f6e85aa41a4511318cb7d90c31731ae7488d9"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"ecb61c20c815ba2d42db7590fa18b0005b7fafb1","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        subnet_2 \u003d self.create_subnet(network)"},{"line_number":142,"context_line":"        subnet_id_1 \u003d subnet_1[\u0027id\u0027]"},{"line_number":143,"context_line":"        subnet_id_2 \u003d subnet_2[\u0027id\u0027]"},{"line_number":144,"context_line":"        fixed_ip_1 \u003d [{\u0027subnet_id\u0027: subnet_id_1}]"},{"line_number":145,"context_line":"        fixed_ip_2 \u003d [{\u0027subnet_id\u0027: subnet_id_2}]"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        # Create a port with a single IP address from first subnet"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2Bodc%3D","line":144,"updated":"2014-03-25 12:58:31.000000000","message":"It is shorter to just write:\n    fixed_ip_1 \u003d [{\u0027subnet_id\u0027: subnet_1[\u0027id\u0027]}]","commit_id":"3c9f6e85aa41a4511318cb7d90c31731ae7488d9"},{"author":{"_account_id":6695,"name":"Dane LeBlanc","email":"leblancd@cisco.com","username":"leblancd"},"change_message_id":"52de7ea5495cba034f842cc86242a8be381e8cd3","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        subnet_2 \u003d self.create_subnet(network)"},{"line_number":142,"context_line":"        subnet_id_1 \u003d subnet_1[\u0027id\u0027]"},{"line_number":143,"context_line":"        subnet_id_2 \u003d subnet_2[\u0027id\u0027]"},{"line_number":144,"context_line":"        fixed_ip_1 \u003d [{\u0027subnet_id\u0027: subnet_id_1}]"},{"line_number":145,"context_line":"        fixed_ip_2 \u003d [{\u0027subnet_id\u0027: subnet_id_2}]"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        # Create a port with a single IP address from first subnet"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F9%2FE8%3D","line":144,"in_reply_to":"AAAAWH%2F%2Bodc%3D","updated":"2014-03-31 19:03:01.000000000","message":"Yes, thanks for catching that.","commit_id":"3c9f6e85aa41a4511318cb7d90c31731ae7488d9"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"ecb61c20c815ba2d42db7590fa18b0005b7fafb1","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        subnet_id_1 \u003d subnet_1[\u0027id\u0027]"},{"line_number":143,"context_line":"        subnet_id_2 \u003d subnet_2[\u0027id\u0027]"},{"line_number":144,"context_line":"        fixed_ip_1 \u003d [{\u0027subnet_id\u0027: subnet_id_1}]"},{"line_number":145,"context_line":"        fixed_ip_2 \u003d [{\u0027subnet_id\u0027: subnet_id_2}]"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        # Create a port with a single IP address from first subnet"},{"line_number":148,"context_line":"        port \u003d self.create_port(network,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2BodI%3D","line":145,"updated":"2014-03-25 12:58:31.000000000","message":"ditto","commit_id":"3c9f6e85aa41a4511318cb7d90c31731ae7488d9"},{"author":{"_account_id":6695,"name":"Dane LeBlanc","email":"leblancd@cisco.com","username":"leblancd"},"change_message_id":"52de7ea5495cba034f842cc86242a8be381e8cd3","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        subnet_id_1 \u003d subnet_1[\u0027id\u0027]"},{"line_number":143,"context_line":"        subnet_id_2 \u003d subnet_2[\u0027id\u0027]"},{"line_number":144,"context_line":"        fixed_ip_1 \u003d [{\u0027subnet_id\u0027: subnet_id_1}]"},{"line_number":145,"context_line":"        fixed_ip_2 \u003d [{\u0027subnet_id\u0027: subnet_id_2}]"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        # Create a port with a single IP address from first subnet"},{"line_number":148,"context_line":"        port \u003d self.create_port(network,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F9%2FE4%3D","line":145,"in_reply_to":"AAAAWH%2F%2BodI%3D","updated":"2014-03-31 19:03:01.000000000","message":"Done","commit_id":"3c9f6e85aa41a4511318cb7d90c31731ae7488d9"},{"author":{"_account_id":8824,"name":"Sergey Murashov","email":"smurashov@mirantis.com","username":"SergeyMurashov"},"change_message_id":"ebc849cb964cee2f1da34d0bece0b3f87efecb1c","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        # Create a port with a single IP address from first subnet"},{"line_number":146,"context_line":"        port \u003d self.create_port(network,"},{"line_number":147,"context_line":"                                fixed_ips\u003dfixed_ip_1)"},{"line_number":148,"context_line":"        self.assertEqual(len(port[\u0027fixed_ips\u0027]), 1)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        # Update the port with a second IP address from second subnet"},{"line_number":151,"context_line":"        fixed_ips \u003d fixed_ip_1 + fixed_ip_2"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F93mk%3D","line":148,"updated":"2014-04-01 14:43:47.000000000","message":"usually self.assertEqual(\"expected result\", \"actual result\")","commit_id":"e729d3d4aa48ed981f4716156ca00897bd5749d8"},{"author":{"_account_id":6695,"name":"Dane LeBlanc","email":"leblancd@cisco.com","username":"leblancd"},"change_message_id":"1b3b3e50cbf143abe90a00bf512ca40330e51fbb","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        # Create a port with a single IP address from first subnet"},{"line_number":146,"context_line":"        port \u003d self.create_port(network,"},{"line_number":147,"context_line":"                                fixed_ips\u003dfixed_ip_1)"},{"line_number":148,"context_line":"        self.assertEqual(len(port[\u0027fixed_ips\u0027]), 1)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        # Update the port with a second IP address from second subnet"},{"line_number":151,"context_line":"        fixed_ips \u003d fixed_ip_1 + fixed_ip_2"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F9uhk%3D","line":148,"in_reply_to":"AAAAWH%2F93mk%3D","updated":"2014-04-02 17:01:44.000000000","message":"Done","commit_id":"e729d3d4aa48ed981f4716156ca00897bd5749d8"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"2b892d040420b51153e0c11ddfed77c59b5769dc","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":59,"context_line":"        updated_port \u003d body[\u0027port\u0027]"},{"line_number":60,"context_line":"        self.assertEqual(updated_port[\u0027name\u0027], new_name)"},{"line_number":61,"context_line":"        self.assertFalse(updated_port[\u0027admin_state_up\u0027])"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":64,"context_line":"    def test_show_port(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F7AY%3D","line":61,"updated":"2014-04-09 13:31:28.000000000","message":"The \"delete\" part of this test should not be deferred in the addCleanup phase. IMO, addcleanup is for cleanup objects that are produced as a \"side effect\" of the test.","commit_id":"cbc4bc5345a6acbd0b96d0ecb65ac30d3840ba67"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"803e12dc58fcf7beea58ea1163fcb4814f98b972","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":59,"context_line":"        updated_port \u003d body[\u0027port\u0027]"},{"line_number":60,"context_line":"        self.assertEqual(updated_port[\u0027name\u0027], new_name)"},{"line_number":61,"context_line":"        self.assertFalse(updated_port[\u0027admin_state_up\u0027])"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":64,"context_line":"    def test_show_port(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F67w%3D","line":61,"in_reply_to":"AAAAW3%2F%2F7AY%3D","updated":"2014-04-09 13:36:21.000000000","message":"Disregard my comment. I haven\u0027t properly followed the review. You already answered to this.","commit_id":"cbc4bc5345a6acbd0b96d0ecb65ac30d3840ba67"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"2b892d040420b51153e0c11ddfed77c59b5769dc","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        # Update the port with a second IP address from second subnet"},{"line_number":151,"context_line":"        fixed_ips \u003d fixed_ip_1 + fixed_ip_2"},{"line_number":152,"context_line":"        port \u003d self.update_port(port, fixed_ips\u003dfixed_ips)"},{"line_number":153,"context_line":"        self.assertEqual(2, len(port[\u0027fixed_ips\u0027]))"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        # Update the port to return to a single IP address"},{"line_number":156,"context_line":"        port \u003d self.update_port(port, fixed_ips\u003dfixed_ip_1)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F6%2Fg%3D","line":153,"updated":"2014-04-09 13:31:28.000000000","message":"maybe test return code first ?","commit_id":"cbc4bc5345a6acbd0b96d0ecb65ac30d3840ba67"},{"author":{"_account_id":6695,"name":"Dane LeBlanc","email":"leblancd@cisco.com","username":"leblancd"},"change_message_id":"8440f1749afbce1b02b5bf515ae82fd5ed53417b","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        # Update the port with a second IP address from second subnet"},{"line_number":151,"context_line":"        fixed_ips \u003d fixed_ip_1 + fixed_ip_2"},{"line_number":152,"context_line":"        port \u003d self.update_port(port, fixed_ips\u003dfixed_ips)"},{"line_number":153,"context_line":"        self.assertEqual(2, len(port[\u0027fixed_ips\u0027]))"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        # Update the port to return to a single IP address"},{"line_number":156,"context_line":"        port \u003d self.update_port(port, fixed_ips\u003dfixed_ip_1)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2FSN4%3D","line":153,"in_reply_to":"AAAAW3%2F%2F6%2Fg%3D","updated":"2014-04-15 15:20:09.000000000","message":"The suggestion from afazekas (3 lines below) is probably a better approach, so my preference would be to fix this with a separate (new) bug.","commit_id":"cbc4bc5345a6acbd0b96d0ecb65ac30d3840ba67"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"2b892d040420b51153e0c11ddfed77c59b5769dc","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        # Update the port to return to a single IP address"},{"line_number":156,"context_line":"        port \u003d self.update_port(port, fixed_ips\u003dfixed_ip_1)"},{"line_number":157,"context_line":"        self.assertEqual(1, len(port[\u0027fixed_ips\u0027]))"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"class PortsTestXML(PortsTestJSON):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2F6%2FY%3D","line":157,"updated":"2014-04-09 13:31:28.000000000","message":"maybe test return code first ?","commit_id":"cbc4bc5345a6acbd0b96d0ecb65ac30d3840ba67"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"6d1f1529266b07a6196072f3393afb1c62b155c6","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        # Update the port to return to a single IP address"},{"line_number":156,"context_line":"        port \u003d self.update_port(port, fixed_ips\u003dfixed_ip_1)"},{"line_number":157,"context_line":"        self.assertEqual(1, len(port[\u0027fixed_ips\u0027]))"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"class PortsTestXML(PortsTestJSON):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2FS1s%3D","line":157,"in_reply_to":"AAAAW3%2F%2F6%2FY%3D","updated":"2014-04-15 14:23:49.000000000","message":"if the response code is above \u003e\u003d400 it will raise an exception.\nIt is helper method from the base.py which does not provides status code to the test cases.\n\nThat helper method might be able to use assert statement (not assert method), but the neither of the similar methods does it in the base.py.\n\nSo looks like it will be future changes responsibility to do either:\n - add asserts to base methods\n - add schema validations for the neutron api clients, including the status codes\n - (another common status code check way..)\n\nBTW: if for any reason this change needs to be modified , I wouldn\u0027t mind an extra assert in the base.py.","commit_id":"cbc4bc5345a6acbd0b96d0ecb65ac30d3840ba67"},{"author":{"_account_id":6695,"name":"Dane LeBlanc","email":"leblancd@cisco.com","username":"leblancd"},"change_message_id":"8440f1749afbce1b02b5bf515ae82fd5ed53417b","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        # Update the port to return to a single IP address"},{"line_number":156,"context_line":"        port \u003d self.update_port(port, fixed_ips\u003dfixed_ip_1)"},{"line_number":157,"context_line":"        self.assertEqual(1, len(port[\u0027fixed_ips\u0027]))"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"class PortsTestXML(PortsTestJSON):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAW3%2F%2FSPI%3D","line":157,"in_reply_to":"AAAAW3%2F%2FS1s%3D","updated":"2014-04-15 15:20:09.000000000","message":"I agree that the best place for a response code check would be in the helper method in base.py. My preference would be to create a separate bug for this shortcoming, and leave this change set as is. If there is agreement, I can file a bug (or afazekas feel free to file one :o)).","commit_id":"cbc4bc5345a6acbd0b96d0ecb65ac30d3840ba67"}]}
