)]}'
{"tempest/api/network/test_ports.py":[{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"da6983f2d9006081461f2afd97bbeca7a71bef06","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        capabilities \u003d port.get(\u0027binding:capabilities\u0027,"},{"line_number":150,"context_line":"                                port.get(\u0027capabilities\u0027))[\u0027port_filter\u0027]"},{"line_number":151,"context_line":"        self.assertIsNotNone(capabilities)"},{"line_number":152,"context_line":"        self.assertIn(capabilities, [False, \u0027False\u0027])"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"class PortsTestXML(PortsTestJSON):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F8Yc%3D","line":152,"updated":"2014-01-06 13:14:22.000000000","message":"I guess \u0027False\u0027 is here because the xml response does uses string,\nIn this case it must be converted to boolean on the rest client side.","commit_id":"9cea1b3d3308c88371b5f2a7428abe72428e4c38"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"01b04c410d7b4dc2d132793b65e26aaaa3d5904a","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        for n in ports_list:"},{"line_number":66,"context_line":"            if (n[\u0027id\u0027] \u003d\u003d self.port[\u0027id\u0027]):"},{"line_number":67,"context_line":"                found \u003d n[\u0027id\u0027]"},{"line_number":68,"context_line":"        self.assertIsNotNone(found, \"Port list doesn\u0027t contain created port\")"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class PortsAdminExtendedAttrsTestJSON(base.BaseAdminNetworkTest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2Felc%3D","line":68,"updated":"2014-01-13 14:03:44.000000000","message":"I think it is better to test list content like this:\n\n    self.assertIn(self.port[\u0027id\u0027], [n[\u0027id] for n in ports_list])","commit_id":"3a3c5c1f5e48ae401ac5f318d8aefac39a7ed9da"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"b80b0623ec7bd1cc4ae83ee13a8c8467ddb2166d","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        for n in ports_list:"},{"line_number":66,"context_line":"            if (n[\u0027id\u0027] \u003d\u003d self.port[\u0027id\u0027]):"},{"line_number":67,"context_line":"                found \u003d n[\u0027id\u0027]"},{"line_number":68,"context_line":"        self.assertIsNotNone(found, \"Port list doesn\u0027t contain created port\")"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class PortsAdminExtendedAttrsTestJSON(base.BaseAdminNetworkTest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FZcs%3D","line":68,"in_reply_to":"AAAAUH%2F%2FdcI%3D","updated":"2014-01-14 07:04:28.000000000","message":"I understand that you just move this test. But in my opinion this does not mean that you shouldn\u0027t improve it.","commit_id":"3a3c5c1f5e48ae401ac5f318d8aefac39a7ed9da"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"c4b7b482702f34414f20174b0f97ff99c0b3533f","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        for n in ports_list:"},{"line_number":66,"context_line":"            if (n[\u0027id\u0027] \u003d\u003d self.port[\u0027id\u0027]):"},{"line_number":67,"context_line":"                found \u003d n[\u0027id\u0027]"},{"line_number":68,"context_line":"        self.assertIsNotNone(found, \"Port list doesn\u0027t contain created port\")"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class PortsAdminExtendedAttrsTestJSON(base.BaseAdminNetworkTest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FdcI%3D","line":68,"in_reply_to":"AAAAUH%2F%2Felc%3D","updated":"2014-01-13 17:15:12.000000000","message":"It is shorter, I agree. But on the one hand it will make the code more implicit and on the other hand the tests in this class were just moved from test_networks and I\u0027m not sure I\u0027m supposed to change them if only when it is really nessesary.","commit_id":"3a3c5c1f5e48ae401ac5f318d8aefac39a7ed9da"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"dd133db93328a50681f29005f4ca433ff949cda3","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        self.addCleanup(self.admin_client.delete_port, port[\u0027id\u0027])"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":90,"context_line":"    def test_create_port_binding_ext_attr_wrong_host_id(self):"},{"line_number":91,"context_line":"        host_id \u003d \"wrong_host\""},{"line_number":92,"context_line":"        post_body \u003d {"},{"line_number":93,"context_line":"            \"network_id\": self.network[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Btc0%3D","line":90,"updated":"2014-01-22 23:27:11.000000000","message":"I think this test fails with the NSX plugin because it assumes that a plugin uses the host_id information to do the \u0027binding\u0027 between a port and a host. This is actually a shortcoming of the binding extension, which leaks implementation details and tight coupling between Nova and Neutron, but I\u0027m not going to delve into too much details here as to why this is. Also, IMO if the the binding fails because the host cannot be found, we should not create the port at all! Even if we changed how ML2 did the binding that still wouldn\u0027t solve the test failure for plugins that do not have/require knowledge of the physical compute fabric. So in a nutshell I am bit puzzled as to what to do here. Any strategy (relaxing the assert statements or skipping the test depending on the plugin) that I could think of sounds wrong.","commit_id":"e16ec319583bcbe1d7bf473b5df970488f03c506"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"dd133db93328a50681f29005f4ca433ff949cda3","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        ports_list \u003d body[\u0027ports\u0027]"},{"line_number":127,"context_line":"        for port in ports_list:"},{"line_number":128,"context_line":"            host_id \u003d port.get(\u0027binding:host_id\u0027, port.get(\u0027host_id\u0027))"},{"line_number":129,"context_line":"            self.assertIsNotNone(host_id)"},{"line_number":130,"context_line":"            vif_type \u003d port.get(\u0027binding:vif_type\u0027, port.get(\u0027vif_type\u0027))"},{"line_number":131,"context_line":"            self.assertIsNotNone(vif_type)"},{"line_number":132,"context_line":"            capabilities \u003d port[\u0027binding:capabilities\u0027][\u0027port_filter\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2BtaU%3D","line":129,"updated":"2014-01-22 23:27:11.000000000","message":"I think the fact that here the host_id is null is because you\u0027re listing port as an admin and hence you\u0027re listing ports for the network:router_gateway for instance. We could fix the NSX plugin to set an empty host_id (as the host does not really make sense for these types of ports) or you could just list tenant ports. Either way this test does still make sense.","commit_id":"e16ec319583bcbe1d7bf473b5df970488f03c506"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"dd133db93328a50681f29005f4ca433ff949cda3","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":139,"context_line":"        port \u003d body[\u0027port\u0027]"},{"line_number":140,"context_line":"        host_id \u003d port.get(\u0027binding:host_id\u0027, port.get(\u0027host_id\u0027))"},{"line_number":141,"context_line":"        self.assertIn(host_id, [\u0027\u0027, {}])"},{"line_number":142,"context_line":"        vif_type \u003d port.get(\u0027binding:vif_type\u0027, port.get(\u0027vif_type\u0027))"},{"line_number":143,"context_line":"        self.assertIsNotNone(vif_type)"},{"line_number":144,"context_line":"        self.assertEqual(\"unbound\", vif_type)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2BtUk%3D","line":141,"updated":"2014-01-22 23:27:11.000000000","message":"not 100% sure what happens here, but it appears the host_id is not set as at line 129. What network did you create the port on?","commit_id":"e16ec319583bcbe1d7bf473b5df970488f03c506"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"4c8b8c2b76de18e9714e04111cf78af087efc6a6","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        resp, body \u003d self.client.show_port(self.port[\u0027id\u0027])"},{"line_number":55,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":56,"context_line":"        port \u003d body[\u0027port\u0027]"},{"line_number":57,"context_line":"        self.assertEqual(self.port[\u0027id\u0027], port[\u0027id\u0027])"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":60,"context_line":"    def test_list_ports(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F9hjI%3D","line":57,"updated":"2014-02-06 10:20:57.000000000","message":"May be it is better to check more parameters not just \u0027id\u0027?","commit_id":"f53acb95f8fe83423b93bd6a4aa129d764dac4bc"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"4c8b8c2b76de18e9714e04111cf78af087efc6a6","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":126,"context_line":"        port \u003d body[\u0027port\u0027]"},{"line_number":127,"context_line":"        host_id \u003d port[\u0027binding:host_id\u0027]"},{"line_number":128,"context_line":"        self.assertIn(host_id, [\u0027\u0027, {}])"},{"line_number":129,"context_line":"        vif_type \u003d port[\u0027binding:vif_type\u0027]"},{"line_number":130,"context_line":"        self.assertIsNotNone(vif_type)"},{"line_number":131,"context_line":"        self.assertEqual(\"unbound\", vif_type)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F9hhA%3D","line":128,"updated":"2014-02-06 10:20:57.000000000","message":"Is this because of json/xml interfaces? Can this be fixed?","commit_id":"f53acb95f8fe83423b93bd6a4aa129d764dac4bc"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"864f7457283b37e45bf85021a6008365fa739eae","unresolved":false,"context_lines":[{"line_number":23,"context_line":"CONF \u003d config.CONF"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class PortsTestJSON(base.BaseNetworkTest):"},{"line_number":27,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUX%2F%2Bh1E%3D","line":26,"updated":"2014-02-20 17:34:15.000000000","message":"Some of the tests you moved out of test_networks were running against IPv6 because of NetworksIpV6TestJSON. I don\u0027t see a PortsIPv6TestJSON (for those that belong to an IPv6 subnet), so effectively you\u0027re reducing coverage with this change. Bear in mind of https://review.openstack.org/#/c/74933/ as these tests should be able to be ommitted as specified by the config.","commit_id":"2627ddcfa348655da74d376dae4eab0316a65e7e"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"67998ba15da578cbd78853dbec0608005f86cb05","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    _interface \u003d \u0027xml\u0027"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"@test.skip_because(bug\u003d\"1282387\")"},{"line_number":209,"context_line":"class PortsIpV6TestJSON(PortsTestJSON):"},{"line_number":210,"context_line":"    _ip_version \u003d 6"},{"line_number":211,"context_line":"    _tenant_network_cidr \u003d CONF.network.tenant_network_v6_cidr"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAU3%2F%2F%2F%2F4%3D","line":208,"updated":"2014-02-22 17:13:06.000000000","message":"no need to skip this, but thanks though!","commit_id":"89547ed7f08b45d4a6ece0da35a5afa912f40719"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"67998ba15da578cbd78853dbec0608005f86cb05","unresolved":false,"context_lines":[{"line_number":212,"context_line":"    _tenant_network_mask_bits \u003d CONF.network.tenant_network_v6_mask_bits"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"@test.skip_because(bug\u003d\"1282387\")"},{"line_number":216,"context_line":"class PortsIpV6TestXML(PortsIpV6TestJSON):"},{"line_number":217,"context_line":"    _interface \u003d \u0027xml\u0027"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAU3%2F%2F%2F%2F0%3D","line":215,"updated":"2014-02-22 17:13:06.000000000","message":"ditto","commit_id":"89547ed7f08b45d4a6ece0da35a5afa912f40719"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"64a8f007aa9f7cb6b66cc6b1d3d7241b6900918f","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        resp, body \u003d self.client.create_port("},{"line_number":39,"context_line":"            network_id\u003dself.network[\u0027id\u0027])"},{"line_number":40,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":41,"context_line":"        port \u003d body[\u0027port\u0027]"},{"line_number":42,"context_line":"        self.assertTrue(port[\u0027admin_state_up\u0027])"},{"line_number":43,"context_line":"        # Verification of port update"},{"line_number":44,"context_line":"        new_port \u003d \"New_Port\""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2Fu%2Bc%3D","line":41,"updated":"2014-02-25 02:14:15.000000000","message":"Add self.addCleanup(self._delete_port, port[\u0027id\u0027])\n\nSee comment to line 54","commit_id":"e3b6ba8a8b9f1737152d446ac64b1c1bdb9a60d4"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"64a8f007aa9f7cb6b66cc6b1d3d7241b6900918f","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        self.assertEqual(updated_port[\u0027name\u0027], new_port)"},{"line_number":52,"context_line":"        self.assertFalse(updated_port[\u0027admin_state_up\u0027])"},{"line_number":53,"context_line":"        # Verification of port delete"},{"line_number":54,"context_line":"        resp, body \u003d self.client.delete_port(port[\u0027id\u0027])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":57,"context_line":"    def test_show_port(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2FvBU%3D","line":54,"updated":"2014-02-25 02:14:15.000000000","message":"The problem with this is that if any of your asserts above fail, you are not going to clean up the port. I suggest remove this line, after line 41 add:\n\nself.addCleanup(self._delete_port, port[\u0027id\u0027])\n\nthat invokes a method that looks something as follows:\n\ndef _delete_port(self, port_id):\n    resp, body \u003d self.client.delete_port(port_id)\n    self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])\n    resp, body \u003d self.client.list_ports()\n    self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])\n    ports_list \u003d body[\u0027ports\u0027]\n    self.assertFalse(port_id in [n[\u0027id\u0027] for n in ports_list])\n\nWhat do you think?","commit_id":"e3b6ba8a8b9f1737152d446ac64b1c1bdb9a60d4"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"e8c3157ca48061f0711dea53ff66838f19b39c54","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        self.assertEqual(updated_port[\u0027name\u0027], new_port)"},{"line_number":52,"context_line":"        self.assertFalse(updated_port[\u0027admin_state_up\u0027])"},{"line_number":53,"context_line":"        # Verification of port delete"},{"line_number":54,"context_line":"        resp, body \u003d self.client.delete_port(port[\u0027id\u0027])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":57,"context_line":"    def test_show_port(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2Fqhc%3D","line":54,"in_reply_to":"AAAAU3%2F%2FvBU%3D","updated":"2014-02-25 11:37:37.000000000","message":"Yeah, I agree with you about it. The only thing that slightly concerns me is whether it\u0027s OK to check anything above delete_port in cleanUp. But I guess it would be alright.","commit_id":"e3b6ba8a8b9f1737152d446ac64b1c1bdb9a60d4"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"64a8f007aa9f7cb6b66cc6b1d3d7241b6900918f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        self.create_subnet(network)"},{"line_number":98,"context_line":"        router \u003d self.create_router(data_utils.rand_name(\u0027router-\u0027))"},{"line_number":99,"context_line":"        resp, port \u003d self.client.create_port("},{"line_number":100,"context_line":"            network_id\u003dnetwork[\u0027id\u0027])"},{"line_number":101,"context_line":"        # Add router interface to port created above"},{"line_number":102,"context_line":"        resp, interface \u003d self.client.add_router_interface_with_port_id("},{"line_number":103,"context_line":"            router[\u0027id\u0027], port[\u0027port\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2Fu9Y%3D","line":100,"updated":"2014-02-25 02:14:15.000000000","message":"I would add \n\nself.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])","commit_id":"e3b6ba8a8b9f1737152d446ac64b1c1bdb9a60d4"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"64a8f007aa9f7cb6b66cc6b1d3d7241b6900918f","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        resp, interface \u003d self.client.add_router_interface_with_port_id("},{"line_number":103,"context_line":"            router[\u0027id\u0027], port[\u0027port\u0027][\u0027id\u0027])"},{"line_number":104,"context_line":"        self.addCleanup(self.client.remove_router_interface_with_port_id,"},{"line_number":105,"context_line":"                        router[\u0027id\u0027], port[\u0027port\u0027][\u0027id\u0027])"},{"line_number":106,"context_line":"        # list ports filtered by router_id"},{"line_number":107,"context_line":"        resp, port_list \u003d self.client.list_ports("},{"line_number":108,"context_line":"            device_id\u003drouter[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2Fu8s%3D","line":105,"updated":"2014-02-25 02:14:15.000000000","message":"Let\u0027s move this up a bit, just after you asserted the port was created succesfully","commit_id":"e3b6ba8a8b9f1737152d446ac64b1c1bdb9a60d4"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"c4d1d2b5a8f38697d0fcc11e57dfff639e8b9f5d","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        resp, interface \u003d self.client.add_router_interface_with_port_id("},{"line_number":103,"context_line":"            router[\u0027id\u0027], port[\u0027port\u0027][\u0027id\u0027])"},{"line_number":104,"context_line":"        self.addCleanup(self.client.remove_router_interface_with_port_id,"},{"line_number":105,"context_line":"                        router[\u0027id\u0027], port[\u0027port\u0027][\u0027id\u0027])"},{"line_number":106,"context_line":"        # list ports filtered by router_id"},{"line_number":107,"context_line":"        resp, port_list \u003d self.client.list_ports("},{"line_number":108,"context_line":"            device_id\u003drouter[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2Fpsg%3D","line":105,"in_reply_to":"AAAAU3%2F%2Fu8s%3D","updated":"2014-02-25 13:14:43.000000000","message":"If I move this cleanUp up, replacing it with self.addCleanup(self.client.port_delete,  port[\u0027port\u0027][\u0027id\u0027]), it\u0027ll fail because you can\u0027t delete neither a port nor a router before you remove an interface.","commit_id":"e3b6ba8a8b9f1737152d446ac64b1c1bdb9a60d4"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"64a8f007aa9f7cb6b66cc6b1d3d7241b6900918f","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            network_id\u003dself.network[\u0027id\u0027])"},{"line_number":186,"context_line":"        port \u003d body[\u0027port\u0027]"},{"line_number":187,"context_line":"        self.addCleanup(self.admin_client.delete_port, port[\u0027id\u0027])"},{"line_number":188,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":189,"context_line":"        resp, body \u003d self.admin_client.show_port(port[\u0027id\u0027])"},{"line_number":190,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":191,"context_line":"        show_port \u003d body[\u0027port\u0027]"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2Fu44%3D","line":188,"updated":"2014-02-25 02:14:15.000000000","message":"Move this line before the cleanup","commit_id":"e3b6ba8a8b9f1737152d446ac64b1c1bdb9a60d4"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"4c78cdce1de45522c18c945eb7a1f3534195fdec","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                         show_port[\u0027binding:vif_details\u0027])"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"class PortsTestXML(PortsTestJSON):"},{"line_number":209,"context_line":"    _interface \u003d \u0027xml\u0027"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAWH%2F%2F%2Bvc%3D","line":208,"updated":"2014-03-12 15:21:42.000000000","message":"I think we should move this up to PortsTestJSON","commit_id":"c74c9be432b510b2f5f81816cbc431b4728cd752"}]}
