)]}'
{"tempest/scenario/test_network_basic_ops.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3c77b402d5478e1298973aa9eb8d0d26d6cf43c0","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    def _setup_network_and_servers(self, **kwargs):"},{"line_number":104,"context_line":"        self.security_group \u003d \\"},{"line_number":105,"context_line":"            self._create_security_group(tenant_id\u003dself.tenant_id)"},{"line_number":106,"context_line":"        self.network, self.subnet, self.router \u003d self.create_networks(**kwargs)"},{"line_number":107,"context_line":"        self.check_networks()"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        self.port \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_2ce3f0d9","line":106,"updated":"2015-03-04 04:35:06.000000000","message":"I need to pop \u0027boot_with_port\u0027 from kwargs before this.","commit_id":"b50254325b62ef68abc270723b13ce02049a1a8f"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"22cfe823dd1db2706c4241aaa6705578e8dd8774","unresolved":false,"context_lines":[{"line_number":585,"context_line":"                         \u0027still be on network %s\u0027 % (self.port[\u0027id\u0027],"},{"line_number":586,"context_line":"                                                     self.network[\u0027id\u0027]))"},{"line_number":587,"context_line":"        self.assertEqual(self.port[\u0027id\u0027], port_list[0][\u0027id\u0027])"},{"line_number":588,"context_line":"        self.assertEqual(\u0027\u0027, port_list[0][\u0027device_id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_7c3da88e","line":588,"updated":"2015-03-03 20:18:24.000000000","message":"Hi Matt, per the new review device_id, device_owner and binding:host_id should be empty. \n\n\n[1] https://review.openstack.org/#/c/126309/28/nova/network/neutronv2/api.py,cm","commit_id":"b50254325b62ef68abc270723b13ce02049a1a8f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"39cfd37037f0c38c20293771685c76600c7da7db","unresolved":false,"context_lines":[{"line_number":585,"context_line":"                         \u0027still be on network %s\u0027 % (self.port[\u0027id\u0027],"},{"line_number":586,"context_line":"                                                     self.network[\u0027id\u0027]))"},{"line_number":587,"context_line":"        self.assertEqual(self.port[\u0027id\u0027], port_list[0][\u0027id\u0027])"},{"line_number":588,"context_line":"        self.assertEqual(\u0027\u0027, port_list[0][\u0027device_id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_6c9b2866","line":588,"in_reply_to":"ba7be1f8_7c3da88e","updated":"2015-03-04 04:33:49.000000000","message":"device_id and device_owner yes, but not necessarily binding:host_id, it depends on the neutron plugin used, so I\u0027d rather not have that in here.","commit_id":"b50254325b62ef68abc270723b13ce02049a1a8f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"64c59c2230c21f9f965510dfe22edd5828cd24cc","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        self.port \u003d None"},{"line_number":111,"context_line":"        if boot_with_port:"},{"line_number":112,"context_line":"            # create a port on the network and boot with that"},{"line_number":113,"context_line":"            self.port \u003d self._create_port(self.network[\u0027id\u0027])"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        name \u003d data_utils.rand_name(\u0027server-smoke\u0027)"},{"line_number":116,"context_line":"        server \u003d self._create_server(name, self.network, self.port)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_75160657","line":113,"updated":"2015-03-05 15:41:16.000000000","message":"This is returning a list it looks like.","commit_id":"761a804c1ce2b6fc43972d88c3d7148ec873f401"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"64c59c2230c21f9f965510dfe22edd5828cd24cc","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            \u0027security_groups\u0027: security_groups,"},{"line_number":160,"context_line":"        }"},{"line_number":161,"context_line":"        if port is not None:"},{"line_number":162,"context_line":"            create_kwargs[\u0027networks\u0027][\u0027port\u0027] \u003d port[\u0027id\u0027]"},{"line_number":163,"context_line":"        server \u003d self.create_server(name\u003dname, create_kwargs\u003dcreate_kwargs)"},{"line_number":164,"context_line":"        self.servers.append(server)"},{"line_number":165,"context_line":"        return server"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_15194a88","line":162,"updated":"2015-03-05 15:41:16.000000000","message":"Apparently port here is a list.","commit_id":"761a804c1ce2b6fc43972d88c3d7148ec873f401"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"f986eb86eba127de1a19879c41e8ee274b9456b5","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            self.assertIn(self.router.id,"},{"line_number":148,"context_line":"                          seen_router_ids)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def _create_server(self, name, network, port\u003dNone):"},{"line_number":151,"context_line":"        keypair \u003d self.create_keypair()"},{"line_number":152,"context_line":"        self.keypairs[keypair[\u0027name\u0027]] \u003d keypair"},{"line_number":153,"context_line":"        security_groups \u003d [{\u0027name\u0027: self.security_group[\u0027name\u0027]}]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_51f828e5","line":150,"updated":"2015-03-05 19:36:53.000000000","message":"I would make this port_id and just expect it to be the id string. That way we don\u0027t play any guessing games whether it\u0027s a resp dict, or one of the weird neutron resource objects.","commit_id":"22f5b0fd427ab623e2d206e819d26aea7b485f39"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e91a36c1687a72cb85d358d83d9e981672cf6dbc","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            self.assertIn(self.router.id,"},{"line_number":148,"context_line":"                          seen_router_ids)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def _create_server(self, name, network, port\u003dNone):"},{"line_number":151,"context_line":"        keypair \u003d self.create_keypair()"},{"line_number":152,"context_line":"        self.keypairs[keypair[\u0027name\u0027]] \u003d keypair"},{"line_number":153,"context_line":"        security_groups \u003d [{\u0027name\u0027: self.security_group[\u0027name\u0027]}]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_3143b415","line":150,"in_reply_to":"9a80dd14_51f828e5","updated":"2015-03-05 19:38:00.000000000","message":"Yeah, good idea.","commit_id":"22f5b0fd427ab623e2d206e819d26aea7b485f39"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"96c8428b2011eba9d7d15901f6cb42a55b1844a3","unresolved":false,"context_lines":[{"line_number":584,"context_line":"        # Assert the port still exists on the network but is unbound from"},{"line_number":585,"context_line":"        # the deleted server."},{"line_number":586,"context_line":"        port_list \u003d self._list_ports(network_id\u003dself.network[\u0027id\u0027])"},{"line_number":587,"context_line":"        self.assertEqual(1, len(port_list),"},{"line_number":588,"context_line":"                         \u0027After server delete, pre-existing port %s should \u0027"},{"line_number":589,"context_line":"                         \u0027still be on network %s\u0027 % (self.port_id,"},{"line_number":590,"context_line":"                                                     self.network[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_98e52f3a","line":587,"updated":"2015-03-06 17:03:28.000000000","message":"There are 3 ports coming back.  Need to filter the _list_ports query by device_id and device_owner being \"\":\n\nhttp://logs.openstack.org/24/160924/5/check/check-tempest-dsvm-neutron-full/d358bdb/console.html#_2015-03-06_15_19_22_140","commit_id":"1927d74eb63b59e58a2698d1cc353bd0974fa585"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"76f4018f91bdb32dc250aaeb76460884e4e96883","unresolved":false,"context_lines":[{"line_number":583,"context_line":"        self.servers_client.wait_for_server_termination(server[\u0027id\u0027])"},{"line_number":584,"context_line":"        # Assert the port still exists on the network but is unbound from"},{"line_number":585,"context_line":"        # the deleted server."},{"line_number":586,"context_line":"        port_list \u003d self._list_ports(network_id\u003dself.network[\u0027id\u0027],"},{"line_number":587,"context_line":"                                     device_id\u003d\u0027\u0027, device_owner\u003d\u0027\u0027)"},{"line_number":588,"context_line":"        self.assertEqual(1, len(port_list),"},{"line_number":589,"context_line":"                         \u0027After server delete, pre-existing port %s should \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_39825700","line":586,"updated":"2015-03-09 11:47:31.000000000","message":"Instead of using the list ports API call and searching for this port in the list of ports returned, what about calling the Neutron API for details about a port, and passing in the ID of the port we want preserved? The API will either return the details of that port or return a 404.","commit_id":"d106069f1a8f1ce44183dd8ec404d53d3251cc9a"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"db4588846d73d06786ab154b5c546d35475a7634","unresolved":false,"context_lines":[{"line_number":583,"context_line":"        self.servers_client.wait_for_server_termination(server[\u0027id\u0027])"},{"line_number":584,"context_line":"        # Assert the port still exists on the network but is unbound from"},{"line_number":585,"context_line":"        # the deleted server."},{"line_number":586,"context_line":"        port_list \u003d self._list_ports(network_id\u003dself.network[\u0027id\u0027],"},{"line_number":587,"context_line":"                                     device_id\u003d\u0027\u0027, device_owner\u003d\u0027\u0027)"},{"line_number":588,"context_line":"        self.assertEqual(1, len(port_list),"},{"line_number":589,"context_line":"                         \u0027After server delete, pre-existing port %s should \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_4ef75059","line":586,"updated":"2015-03-09 01:12:49.000000000","message":"So, port_list returned by this call returns all ports for the self.network[\u0027id\u0027] and not just the ones with empty device_id and empty device_owner (example - http://paste.openstack.org/show/190846/)","commit_id":"d106069f1a8f1ce44183dd8ec404d53d3251cc9a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9b9ff43d82616a4f225aec46b49fdc5580d28aa9","unresolved":false,"context_lines":[{"line_number":583,"context_line":"        self.servers_client.wait_for_server_termination(server[\u0027id\u0027])"},{"line_number":584,"context_line":"        # Assert the port still exists on the network but is unbound from"},{"line_number":585,"context_line":"        # the deleted server."},{"line_number":586,"context_line":"        port_list \u003d self._list_ports(network_id\u003dself.network[\u0027id\u0027],"},{"line_number":587,"context_line":"                                     device_id\u003d\u0027\u0027, device_owner\u003d\u0027\u0027)"},{"line_number":588,"context_line":"        self.assertEqual(1, len(port_list),"},{"line_number":589,"context_line":"                         \u0027After server delete, pre-existing port %s should \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_914872b4","line":586,"in_reply_to":"9a80dd14_39825700","updated":"2015-03-09 16:17:14.000000000","message":"Thanks Sean, I\u0027ll use the port API to get details on the port.","commit_id":"d106069f1a8f1ce44183dd8ec404d53d3251cc9a"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"e0575ece7f4b8ad64eea3b76656b8240e1e682cf","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self.network, self.subnet, self.router \u003d self.create_networks(**kwargs)"},{"line_number":108,"context_line":"        self.check_networks()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        self.port_id \u003d None"},{"line_number":111,"context_line":"        if boot_with_port:"},{"line_number":112,"context_line":"            # create a port on the network and boot with that"},{"line_number":113,"context_line":"            self.port_id \u003d self._create_port(self.network[\u0027id\u0027]).id"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_89a455ba","line":110,"updated":"2015-03-11 18:10:09.000000000","message":"This should not be an attribute to this class. This is an attribute of a \"server\" object.","commit_id":"f06e2a3a4a347c75e188237b3c05178dc252622e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2fb75f5fb5badadd4d3ef35551bc703077710726","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self.network, self.subnet, self.router \u003d self.create_networks(**kwargs)"},{"line_number":108,"context_line":"        self.check_networks()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        self.port_id \u003d None"},{"line_number":111,"context_line":"        if boot_with_port:"},{"line_number":112,"context_line":"            # create a port on the network and boot with that"},{"line_number":113,"context_line":"            self.port_id \u003d self._create_port(self.network[\u0027id\u0027]).id"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_ddd43ebf","line":110,"in_reply_to":"9a80dd14_5d712e43","updated":"2015-03-11 21:33:21.000000000","message":"FWIW I originally thought about returning it, but given how things are already being stored in variables here and re-used elsewhere, I just followed suit.","commit_id":"f06e2a3a4a347c75e188237b3c05178dc252622e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fef4438a28e46b745784ce7d0bae8d35b0108c65","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self.network, self.subnet, self.router \u003d self.create_networks(**kwargs)"},{"line_number":108,"context_line":"        self.check_networks()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        self.port_id \u003d None"},{"line_number":111,"context_line":"        if boot_with_port:"},{"line_number":112,"context_line":"            # create a port on the network and boot with that"},{"line_number":113,"context_line":"            self.port_id \u003d self._create_port(self.network[\u0027id\u0027]).id"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_e75a5529","line":110,"in_reply_to":"9a80dd14_89a455ba","updated":"2015-03-11 20:45:49.000000000","message":"I was following the convention of self.security_group and self.network already in here.  What makes this different?","commit_id":"f06e2a3a4a347c75e188237b3c05178dc252622e"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"e5a7260eb45b2d10419a543a9705760963f83668","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self.network, self.subnet, self.router \u003d self.create_networks(**kwargs)"},{"line_number":108,"context_line":"        self.check_networks()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        self.port_id \u003d None"},{"line_number":111,"context_line":"        if boot_with_port:"},{"line_number":112,"context_line":"            # create a port on the network and boot with that"},{"line_number":113,"context_line":"            self.port_id \u003d self._create_port(self.network[\u0027id\u0027]).id"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_5d712e43","line":110,"in_reply_to":"9a80dd14_e75a5529","updated":"2015-03-11 21:29:35.000000000","message":"It does seem weird to set this to the object scope but it\u0027s only used here and in the caller. Why not just return it? \n\nThat being said this is super minor I don\u0027t feel it\u0027s a reason to -1.","commit_id":"f06e2a3a4a347c75e188237b3c05178dc252622e"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"e0575ece7f4b8ad64eea3b76656b8240e1e682cf","unresolved":false,"context_lines":[{"line_number":568,"context_line":"        \"\"\""},{"line_number":569,"context_line":"        # Setup the network, create a port and boot the server from that port."},{"line_number":570,"context_line":"        self._setup_network_and_servers(boot_with_port\u003dTrue)"},{"line_number":571,"context_line":"        _, server \u003d self.floating_ip_tuple"},{"line_number":572,"context_line":"        self.assertIsNotNone(self.port_id,"},{"line_number":573,"context_line":"                             \u0027Server should have been created from a \u0027"},{"line_number":574,"context_line":"                             \u0027pre-existing port.\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_c99c8d60","line":571,"updated":"2015-03-11 18:10:09.000000000","message":"I think that somewhere in this \u0027server\u0027 object you have access to the port_id attribute you are looking for.","commit_id":"f06e2a3a4a347c75e188237b3c05178dc252622e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"45a922d86b22f77b3a0ce1d1ae8c8147a165d441","unresolved":false,"context_lines":[{"line_number":568,"context_line":"        \"\"\""},{"line_number":569,"context_line":"        # Setup the network, create a port and boot the server from that port."},{"line_number":570,"context_line":"        self._setup_network_and_servers(boot_with_port\u003dTrue)"},{"line_number":571,"context_line":"        _, server \u003d self.floating_ip_tuple"},{"line_number":572,"context_line":"        self.assertIsNotNone(self.port_id,"},{"line_number":573,"context_line":"                             \u0027Server should have been created from a \u0027"},{"line_number":574,"context_line":"                             \u0027pre-existing port.\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_c2b45ff4","line":571,"in_reply_to":"9a80dd14_27f38da0","updated":"2015-03-11 21:04:30.000000000","message":"Jordan, so for example I get this back using neutron with a server show:\n\nhttp://logs.openstack.org/24/160924/7/check/check-tempest-dsvm-neutron-full/0dc4b56/logs/tempest.txt.gz#_2015-03-10_18_45_17_748\n\nThe view builder in nova only adds the addresses field:\n\n\"addresses\": {\"network-smoke--1103488024\": [{\"OS-EXT-IPS-MAC:mac_addr\": \"fa:16:3e:0a:30:f0\", \"version\": 4, \"addr\": \"10.100.0.2\", \"OS-EXT-IPS:type\": \"fixed\"}]}\n\nFrom that I guess I can find the fixed_ip address but then I still need to go back to neutron and find the port by fixed_ip address where I believe the device_owner is \u0027compute:nova\u0027 (actually looks like compute:None in tempest runs) and the device_id is the server uuid.  I might also have to filter the port by subnet to get the fixed_ip correlated?  I\u0027m not sure how easy that is with the neutron API.\n\nSo point is, that seems like a giant pain in the butt when I already know the port_id since I created it, why do I need to jump through the hoops?","commit_id":"f06e2a3a4a347c75e188237b3c05178dc252622e"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"0bb9d694b975d5b8f47aaa2f5db6872bd29bca1f","unresolved":false,"context_lines":[{"line_number":568,"context_line":"        \"\"\""},{"line_number":569,"context_line":"        # Setup the network, create a port and boot the server from that port."},{"line_number":570,"context_line":"        self._setup_network_and_servers(boot_with_port\u003dTrue)"},{"line_number":571,"context_line":"        _, server \u003d self.floating_ip_tuple"},{"line_number":572,"context_line":"        self.assertIsNotNone(self.port_id,"},{"line_number":573,"context_line":"                             \u0027Server should have been created from a \u0027"},{"line_number":574,"context_line":"                             \u0027pre-existing port.\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_1d1b361d","line":571,"in_reply_to":"9a80dd14_c2b45ff4","updated":"2015-03-11 21:25:53.000000000","message":"@Jordan - I agree with Matt - that if we already have the port_id it doesn\u0027t make sense to do a \"reverse lookup\" operation where we take the IP address and try and find which port it is assigned to when we have the port ID in hand.\n\nIs there a corner case you\u0027re thinking of?","commit_id":"f06e2a3a4a347c75e188237b3c05178dc252622e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fef4438a28e46b745784ce7d0bae8d35b0108c65","unresolved":false,"context_lines":[{"line_number":568,"context_line":"        \"\"\""},{"line_number":569,"context_line":"        # Setup the network, create a port and boot the server from that port."},{"line_number":570,"context_line":"        self._setup_network_and_servers(boot_with_port\u003dTrue)"},{"line_number":571,"context_line":"        _, server \u003d self.floating_ip_tuple"},{"line_number":572,"context_line":"        self.assertIsNotNone(self.port_id,"},{"line_number":573,"context_line":"                             \u0027Server should have been created from a \u0027"},{"line_number":574,"context_line":"                             \u0027pre-existing port.\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_27f38da0","line":571,"in_reply_to":"9a80dd14_c99c8d60","updated":"2015-03-11 20:45:49.000000000","message":"Need to investigate.","commit_id":"f06e2a3a4a347c75e188237b3c05178dc252622e"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"e0575ece7f4b8ad64eea3b76656b8240e1e682cf","unresolved":false,"context_lines":[{"line_number":586,"context_line":"        # the deleted server."},{"line_number":587,"context_line":"        port \u003d self.network_client.show_port(self.port_id)[\u0027port\u0027]"},{"line_number":588,"context_line":"        self.assertEqual(self.network[\u0027id\u0027], port[\u0027network_id\u0027])"},{"line_number":589,"context_line":"        self.assertEqual(0, len(port[\u0027device_id\u0027]))"},{"line_number":590,"context_line":"        self.assertEqual(0, len(port[\u0027device_owner\u0027]))"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_09686520","line":589,"updated":"2015-03-11 18:10:09.000000000","message":"What is the type of port[\u0027device_id\u0027] ?\n\nIf it\u0027s a string, then you should do assertEqual(\"\", port[\u0027device_id\u0027])","commit_id":"f06e2a3a4a347c75e188237b3c05178dc252622e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fef4438a28e46b745784ce7d0bae8d35b0108c65","unresolved":false,"context_lines":[{"line_number":586,"context_line":"        # the deleted server."},{"line_number":587,"context_line":"        port \u003d self.network_client.show_port(self.port_id)[\u0027port\u0027]"},{"line_number":588,"context_line":"        self.assertEqual(self.network[\u0027id\u0027], port[\u0027network_id\u0027])"},{"line_number":589,"context_line":"        self.assertEqual(0, len(port[\u0027device_id\u0027]))"},{"line_number":590,"context_line":"        self.assertEqual(0, len(port[\u0027device_owner\u0027]))"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_a7077d80","line":589,"in_reply_to":"9a80dd14_09686520","updated":"2015-03-11 20:45:49.000000000","message":"Done","commit_id":"f06e2a3a4a347c75e188237b3c05178dc252622e"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"e0575ece7f4b8ad64eea3b76656b8240e1e682cf","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        port \u003d self.network_client.show_port(self.port_id)[\u0027port\u0027]"},{"line_number":588,"context_line":"        self.assertEqual(self.network[\u0027id\u0027], port[\u0027network_id\u0027])"},{"line_number":589,"context_line":"        self.assertEqual(0, len(port[\u0027device_id\u0027]))"},{"line_number":590,"context_line":"        self.assertEqual(0, len(port[\u0027device_owner\u0027]))"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_69ee418d","line":590,"updated":"2015-03-11 18:10:09.000000000","message":"Same","commit_id":"f06e2a3a4a347c75e188237b3c05178dc252622e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fef4438a28e46b745784ce7d0bae8d35b0108c65","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        port \u003d self.network_client.show_port(self.port_id)[\u0027port\u0027]"},{"line_number":588,"context_line":"        self.assertEqual(self.network[\u0027id\u0027], port[\u0027network_id\u0027])"},{"line_number":589,"context_line":"        self.assertEqual(0, len(port[\u0027device_id\u0027]))"},{"line_number":590,"context_line":"        self.assertEqual(0, len(port[\u0027device_owner\u0027]))"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_e701756b","line":590,"in_reply_to":"9a80dd14_69ee418d","updated":"2015-03-11 20:45:49.000000000","message":"Done","commit_id":"f06e2a3a4a347c75e188237b3c05178dc252622e"}]}
