)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"9cc1c764953a4e137ca2796187b0d30ad51aded2","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2014-10-05 07:23:59 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds test for deleting external network with floatingIPs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Do not merge until bug is fixed"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"The attached neutron bug causes server to hang when deleting external network"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"baa201ad_6c6a89b4","line":8,"updated":"2014-10-05 08:01:24.000000000","message":"The Neutron fix for the bug has been merged, you can remove this scary line.","commit_id":"c6d8dfddf3a60080ecaa91a4a23c43f20d6c59af"}],"tempest/api/network/admin/test_external_network_extension.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"b75449a55ef3c2f280ff91284f01e2215a33fbf0","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            network\u003dexternal_network[\u0027id\u0027])"},{"line_number":102,"context_line":"        self.assertIn(created_floating_ip[\u0027id\u0027],"},{"line_number":103,"context_line":"                      (f[\u0027id\u0027] for f in floatingip_list[\u0027floatingips\u0027]))"},{"line_number":104,"context_line":"        self.client.delete_network(external_network[\u0027id\u0027])"},{"line_number":105,"context_line":"        # subnet is with the network, we remove it from the cleanup list"},{"line_number":106,"context_line":"        self.subnets.remove(subnet)"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_d01c7116","line":104,"updated":"2014-09-29 12:52:12.000000000","message":"What happen with the floating IP then ? Is it deleted ? Should we test this ?","commit_id":"f57343fd27573c08c0f33f9ff91639105ecc1470"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"63d28707ccc18cc2dac27f7ac32b8e6abf938cd1","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            network\u003dexternal_network[\u0027id\u0027])"},{"line_number":102,"context_line":"        self.assertIn(created_floating_ip[\u0027id\u0027],"},{"line_number":103,"context_line":"                      (f[\u0027id\u0027] for f in floatingip_list[\u0027floatingips\u0027]))"},{"line_number":104,"context_line":"        self.client.delete_network(external_network[\u0027id\u0027])"},{"line_number":105,"context_line":"        # subnet is with the network, we remove it from the cleanup list"},{"line_number":106,"context_line":"        self.subnets.remove(subnet)"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_2bc5525b","line":104,"in_reply_to":"baa201ad_d01c7116","updated":"2014-09-29 13:23:36.000000000","message":"nice catch.","commit_id":"f57343fd27573c08c0f33f9ff91639105ecc1470"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"47512301cbfb4765a2d8e0380d70b5f5bdaad4bf","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        \"\"\""},{"line_number":92,"context_line":"        # Set cls.client to admin to use base.create_subnet()"},{"line_number":93,"context_line":"        self.__class__.client \u003d self.admin_client"},{"line_number":94,"context_line":"        _, body \u003d self.client.create_network(**{\u0027router:external\u0027: True})"},{"line_number":95,"context_line":"        external_network \u003d body[\u0027network\u0027]"},{"line_number":96,"context_line":"        subnet \u003d self.create_subnet(external_network)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa7fdbe_b4a50f06","line":93,"updated":"2014-10-20 14:57:18.000000000","message":"This is kind of a hack...\n\nBut I have nothing else to suggest.","commit_id":"606bb4a19069efb6c1011c59330c4711ef2c2d91"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"37c71301b32eb80a8765e6a501a905f9744c4ee3","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        \"\"\""},{"line_number":92,"context_line":"        # Set cls.client to admin to use base.create_subnet()"},{"line_number":93,"context_line":"        self.__class__.client \u003d self.admin_client"},{"line_number":94,"context_line":"        _, body \u003d self.client.create_network(**{\u0027router:external\u0027: True})"},{"line_number":95,"context_line":"        external_network \u003d body[\u0027network\u0027]"},{"line_number":96,"context_line":"        subnet \u003d self.create_subnet(external_network)"},{"line_number":97,"context_line":"        _, body \u003d self.client.create_floatingip("}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_5b906f43","line":94,"updated":"2014-11-04 07:41:23.000000000","message":"please add cleanup here as it is direct call on client.","commit_id":"fb028ac648370e587fd645481eb195b29fc550b9"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"60da8bfcd549bf6d4648af2257289160b4bb2640","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        \"\"\""},{"line_number":92,"context_line":"        # Set cls.client to admin to use base.create_subnet()"},{"line_number":93,"context_line":"        self.__class__.client \u003d self.admin_client"},{"line_number":94,"context_line":"        _, body \u003d self.client.create_network(**{\u0027router:external\u0027: True})"},{"line_number":95,"context_line":"        external_network \u003d body[\u0027network\u0027]"},{"line_number":96,"context_line":"        subnet \u003d self.create_subnet(external_network)"},{"line_number":97,"context_line":"        _, body \u003d self.client.create_floatingip("}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_6813910d","line":94,"in_reply_to":"7a8c0949_5b906f43","updated":"2014-11-05 09:13:39.000000000","message":"Done","commit_id":"fb028ac648370e587fd645481eb195b29fc550b9"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"a80527d21fc35e2f1e7db2c9add4c32ba72cff1b","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        \"\"\""},{"line_number":92,"context_line":"        # Set cls.client to admin to use base.create_subnet()"},{"line_number":93,"context_line":"        self.__class__.client \u003d self.admin_client"},{"line_number":94,"context_line":"        _, body \u003d self.client.create_network(**{\u0027router:external\u0027: True})"},{"line_number":95,"context_line":"        external_network \u003d body[\u0027network\u0027]"},{"line_number":96,"context_line":"        subnet \u003d self.create_subnet(external_network)"},{"line_number":97,"context_line":"        _, body \u003d self.client.create_floatingip("}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_af2578c3","line":94,"in_reply_to":"7a8c0949_5b906f43","updated":"2014-11-05 15:46:05.000000000","message":"the network is deleted at L104","commit_id":"fb028ac648370e587fd645481eb195b29fc550b9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"31c0e26f9a1bcdb5cb8816950daa1432505251af","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        \"\"\""},{"line_number":92,"context_line":"        # Set cls.client to admin to use base.create_subnet()"},{"line_number":93,"context_line":"        self.__class__.client \u003d self.admin_client"},{"line_number":94,"context_line":"        _, body \u003d self.client.create_network(**{\u0027router:external\u0027: True})"},{"line_number":95,"context_line":"        external_network \u003d body[\u0027network\u0027]"},{"line_number":96,"context_line":"        subnet \u003d self.create_subnet(external_network)"},{"line_number":97,"context_line":"        _, body \u003d self.client.create_floatingip("}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_3ead359d","line":94,"in_reply_to":"7a8c0949_af2578c3","updated":"2014-11-06 08:38:26.000000000","message":"yes, but if there is issue in create subnet or floating ip then there will resource leakage. We can have wrapper of delete which pass NotFound error and have that wrapper in addCleanUp.","commit_id":"fb028ac648370e587fd645481eb195b29fc550b9"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"572672d48316712c49ac614fdd7b54dac3866e6e","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        self.assertNotIn(subnet[\u0027id\u0027],"},{"line_number":112,"context_line":"                         (s[\u0027id\u0027] for s in subnet_list))"},{"line_number":113,"context_line":"        # Removes subnet from the cleanup list"},{"line_number":114,"context_line":"        self.subnets.remove(subnet)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"class ExternalNetworksTestXML(ExternalNetworksTestJSON):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9aa7fdbe_08565606","line":114,"updated":"2014-10-23 13:38:37.000000000","message":"Always used self.subnets.pop()","commit_id":"fb028ac648370e587fd645481eb195b29fc550b9"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"5c8b7614b48ea6ca741b5224c04efe8c985fd80d","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        self.assertNotIn(subnet[\u0027id\u0027],"},{"line_number":112,"context_line":"                         (s[\u0027id\u0027] for s in subnet_list))"},{"line_number":113,"context_line":"        # Removes subnet from the cleanup list"},{"line_number":114,"context_line":"        self.subnets.remove(subnet)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"class ExternalNetworksTestXML(ExternalNetworksTestJSON):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9aa7fdbe_2d5b242f","line":114,"updated":"2014-10-23 16:33:48.000000000","message":"Ann, remove is fine here, right ?","commit_id":"fb028ac648370e587fd645481eb195b29fc550b9"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"60da8bfcd549bf6d4648af2257289160b4bb2640","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        self.assertNotIn(subnet[\u0027id\u0027],"},{"line_number":112,"context_line":"                         (s[\u0027id\u0027] for s in subnet_list))"},{"line_number":113,"context_line":"        # Removes subnet from the cleanup list"},{"line_number":114,"context_line":"        self.subnets.remove(subnet)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"class ExternalNetworksTestXML(ExternalNetworksTestJSON):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a8c0949_082dad46","line":114,"in_reply_to":"9aa7fdbe_08565606","updated":"2014-11-05 09:13:39.000000000","message":"I use \"remove\" so I can target a specific subnet. I don\u0027t (need to) know the order of the subnets in the list.","commit_id":"fb028ac648370e587fd645481eb195b29fc550b9"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"82d74ddeccc810c55ae645c03108f43b4a368bbb","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        \"\"\""},{"line_number":96,"context_line":"        # Set cls.client to admin to use base.create_subnet()"},{"line_number":97,"context_line":"        self.__class__.client \u003d self.admin_client"},{"line_number":98,"context_line":"        _, body \u003d self.client.create_network(**{\u0027router:external\u0027: True})"},{"line_number":99,"context_line":"        external_network \u003d body[\u0027network\u0027]"},{"line_number":100,"context_line":"        self.addCleanup(self._delete_network_if_exists, external_network[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a890539_c234ddfd","line":97,"updated":"2014-11-17 18:50:38.000000000","message":"A method should not be modifying a class-level variable. The test methods can be run in any order.","commit_id":"7418b08a83cf6616b974f804f45b05cb5bdb71eb"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"e965073b177a5bc88d6206228af78da86b6e08a2","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        \"\"\""},{"line_number":96,"context_line":"        # Set cls.client to admin to use base.create_subnet()"},{"line_number":97,"context_line":"        self.__class__.client \u003d self.admin_client"},{"line_number":98,"context_line":"        _, body \u003d self.client.create_network(**{\u0027router:external\u0027: True})"},{"line_number":99,"context_line":"        external_network \u003d body[\u0027network\u0027]"},{"line_number":100,"context_line":"        self.addCleanup(self._delete_network_if_exists, external_network[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a890539_653df32a","line":97,"in_reply_to":"5a890539_c234ddfd","updated":"2014-11-17 19:12:51.000000000","message":"Agreed, this is badness","commit_id":"7418b08a83cf6616b974f804f45b05cb5bdb71eb"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2aca070ae8d49e035d8b050745513eb4255a1bf2","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def _delete_network_if_exists(self, network_id):"},{"line_number":35,"context_line":"        if not self.client.is_resource_deleted(\u0027network\u0027, network_id):"},{"line_number":36,"context_line":"            self.client.delete_network(network_id)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def test_create_external_network(self):"},{"line_number":39,"context_line":"        # Create a network as an admin user specifying the"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a890539_aaa15147","line":36,"updated":"2014-11-18 11:30:05.000000000","message":"How about\n\n    def _try_delete_network(self, net_id):\n        # delete network, if it exists\n        try:\n            self.client.delete_network(net_id)\n         # if network is not found, this means it was deleted in the test\n        except exceptions.NotFound:\n            pass\n\nlike tempest/api/network/test_networks.py ?\nthat seems simple.","commit_id":"9c0f3777a13ec0a5fc2ab1b1ea10299eb22420a5"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"9654aa751093cc882ce25633220925323238498a","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        subnet \u003d self.create_subnet(external_network, client\u003dclient)"},{"line_number":102,"context_line":"        _, body \u003d client.create_floatingip("},{"line_number":103,"context_line":"            floating_network_id\u003dexternal_network[\u0027id\u0027])"},{"line_number":104,"context_line":"        created_floating_ip \u003d body[\u0027floatingip\u0027]"},{"line_number":105,"context_line":"        _, floatingip_list \u003d client.list_floatingips("},{"line_number":106,"context_line":"            network\u003dexternal_network[\u0027id\u0027])"},{"line_number":107,"context_line":"        self.assertIn(created_floating_ip[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a890539_ed6ff38f","line":104,"updated":"2014-11-18 11:34:58.000000000","message":"+1 about cleanups","commit_id":"9c0f3777a13ec0a5fc2ab1b1ea10299eb22420a5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2aca070ae8d49e035d8b050745513eb4255a1bf2","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        subnet \u003d self.create_subnet(external_network, client\u003dclient)"},{"line_number":102,"context_line":"        _, body \u003d client.create_floatingip("},{"line_number":103,"context_line":"            floating_network_id\u003dexternal_network[\u0027id\u0027])"},{"line_number":104,"context_line":"        created_floating_ip \u003d body[\u0027floatingip\u0027]"},{"line_number":105,"context_line":"        _, floatingip_list \u003d client.list_floatingips("},{"line_number":106,"context_line":"            network\u003dexternal_network[\u0027id\u0027])"},{"line_number":107,"context_line":"        self.assertIn(created_floating_ip[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a890539_0d1c3f69","line":104,"updated":"2014-11-18 11:30:05.000000000","message":"self.addCleanup(client.delete_floatingip, created_floating_ip[\u0027id\u0027])\n\nis necessary.","commit_id":"9c0f3777a13ec0a5fc2ab1b1ea10299eb22420a5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"4b2bf8f42286b9714c03c15f5afa90821ffc6596","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from tempest.api.network import base"},{"line_number":15,"context_line":"from tempest.common.utils import data_utils"},{"line_number":16,"context_line":"from tempest import exceptions"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a890539_b028e433","line":13,"updated":"2014-11-18 11:58:11.000000000","message":"nit: unnecessary new line.","commit_id":"d5f6347d6255c8a7bb2c578a080e8b036803c162"}],"tempest/api/network/base.py":[{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"9654aa751093cc882ce25633220925323238498a","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        \"\"\"Wrapper utility that returns a test subnet.\"\"\""},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        # allow tests to use admin client"},{"line_number":163,"context_line":"        if client is None:"},{"line_number":164,"context_line":"            client \u003d cls.client"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        # The cidr and mask_bits depend on the ip version."}],"source_content_type":"text/x-python","patch_set":14,"id":"5a890539_8d402f08","line":163,"updated":"2014-11-18 11:34:58.000000000","message":"or \"if not client\"","commit_id":"9c0f3777a13ec0a5fc2ab1b1ea10299eb22420a5"}]}
