)]}'
{"neutron/tests/api/admin/test_auto_allocated_topology.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"30d6940836f120d7e7645e608485128020d06eb2","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.tests.api import base"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class TestAutoAllocatedTopology(base.BaseAdminNetworkTest):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    Tests the Get-Me-A-Network operation in the Neutron API"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_471c7c6a","line":24,"updated":"2016-02-09 05:42:28.000000000","message":"I expect these tests to eventually migrate to Tempest. I am ok iterating here, but it\u0027s worth adding a note or consider target Tempest straight away?","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8ae8763e15c7929ef029ea884603c0759c7d4eb5","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.tests.api import base"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class TestAutoAllocatedTopology(base.BaseAdminNetworkTest):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    Tests the Get-Me-A-Network operation in the Neutron API"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_e50f5f86","line":24,"in_reply_to":"5a5ae5dd_471c7c6a","updated":"2016-02-11 03:48:43.000000000","message":"Done","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"30d6940836f120d7e7645e608485128020d06eb2","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            raise cls.skipException(msg)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        # TODO(HenryG): Instead of doing all this pre-requisite setup here,"},{"line_number":47,"context_line":"        # we might want to have devstack set it up by default?"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        cls.updated_shared_public_net_id \u003d None"},{"line_number":50,"context_line":"        cls.updated_default_public_net_id \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_673098e9","line":47,"updated":"2016-02-09 05:42:28.000000000","message":"Setting the public network to be default may make sense. As for the subnet pool we could do that do. That\u0027s a bit of a chicken and egg problem though. We can\u0027t merge the devstack change until we land the code :)","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8ae8763e15c7929ef029ea884603c0759c7d4eb5","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            raise cls.skipException(msg)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        # TODO(HenryG): Instead of doing all this pre-requisite setup here,"},{"line_number":47,"context_line":"        # we might want to have devstack set it up by default?"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        cls.updated_shared_public_net_id \u003d None"},{"line_number":50,"context_line":"        cls.updated_default_public_net_id \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_654a8fae","line":47,"in_reply_to":"5a5ae5dd_673098e9","updated":"2016-02-11 03:48:43.000000000","message":"The code has landed so now we can start some devstack tweaks. Meanwhile I\u0027ll keep things here so we can land this patch.","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"30d6940836f120d7e7645e608485128020d06eb2","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        cls.created_shared_default_subnetpool_id \u003d None"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        # Find the \u0027public\u0027 external network"},{"line_number":54,"context_line":"        net_external \u003d {\u0027router:external\u0027: True}"},{"line_number":55,"context_line":"        body \u003d cls.admin_client.list_networks(**net_external)"},{"line_number":56,"context_line":"        external_nets \u003d {"},{"line_number":57,"context_line":"            network[\u0027name\u0027]: network[\u0027id\u0027] for network in body[\u0027networks\u0027]}"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_5ce453ab","line":54,"updated":"2016-02-09 05:42:28.000000000","message":"you don\u0027t need any of this. You have public_network_id in your tempest.conf [1] under [network]\n\n[1] http://logs.openstack.org/06/233306/26/check/gate-tempest-dsvm-neutron-full/b8ac44a/logs/tempest_conf.txt.gz","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8ae8763e15c7929ef029ea884603c0759c7d4eb5","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        cls.created_shared_default_subnetpool_id \u003d None"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        # Find the \u0027public\u0027 external network"},{"line_number":54,"context_line":"        net_external \u003d {\u0027router:external\u0027: True}"},{"line_number":55,"context_line":"        body \u003d cls.admin_client.list_networks(**net_external)"},{"line_number":56,"context_line":"        external_nets \u003d {"},{"line_number":57,"context_line":"            network[\u0027name\u0027]: network[\u0027id\u0027] for network in body[\u0027networks\u0027]}"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_45599359","line":54,"in_reply_to":"5a5ae5dd_5ce453ab","updated":"2016-02-11 03:48:43.000000000","message":"Done","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"30d6940836f120d7e7645e608485128020d06eb2","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            raise cls.skipException(\"No external network in configuration.\")"},{"line_number":60,"context_line":"        if \u0027public\u0027 not in external_nets:"},{"line_number":61,"context_line":"            raise cls.skipException(\"External network \u0027public\u0027 not found.\")"},{"line_number":62,"context_line":"        public_net_id \u003d external_nets[\u0027public\u0027]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        # Ensure the public external network is shared"},{"line_number":65,"context_line":"        net_shared_external \u003d {\u0027shared\u0027: True, \u0027router:external\u0027: True}"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_1ced7b8e","line":62,"updated":"2016-02-09 05:42:28.000000000","message":"all code up until here can be removed","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8ae8763e15c7929ef029ea884603c0759c7d4eb5","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            raise cls.skipException(\"No external network in configuration.\")"},{"line_number":60,"context_line":"        if \u0027public\u0027 not in external_nets:"},{"line_number":61,"context_line":"            raise cls.skipException(\"External network \u0027public\u0027 not found.\")"},{"line_number":62,"context_line":"        public_net_id \u003d external_nets[\u0027public\u0027]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        # Ensure the public external network is shared"},{"line_number":65,"context_line":"        net_shared_external \u003d {\u0027shared\u0027: True, \u0027router:external\u0027: True}"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_6554cf20","line":62,"in_reply_to":"5a5ae5dd_1ced7b8e","updated":"2016-02-11 03:48:43.000000000","message":"Done","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"535bd99ef8f314f0eef8f8e193171f53e23d8ea0","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        public_net_id \u003d external_nets[\u0027public\u0027]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        # Ensure the public external network is shared"},{"line_number":65,"context_line":"        net_shared_external \u003d {\u0027shared\u0027: True, \u0027router:external\u0027: True}"},{"line_number":66,"context_line":"        body \u003d cls.admin_client.list_networks(**net_shared_external)"},{"line_number":67,"context_line":"        shared_external_nets \u003d [net[\u0027id\u0027] for net in body[\u0027networks\u0027]]"},{"line_number":68,"context_line":"        if not shared_external_nets:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_9cc96b5d","line":65,"updated":"2016-02-09 05:13:35.000000000","message":"external networks do not need to be shared.","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8ae8763e15c7929ef029ea884603c0759c7d4eb5","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        public_net_id \u003d external_nets[\u0027public\u0027]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        # Ensure the public external network is shared"},{"line_number":65,"context_line":"        net_shared_external \u003d {\u0027shared\u0027: True, \u0027router:external\u0027: True}"},{"line_number":66,"context_line":"        body \u003d cls.admin_client.list_networks(**net_shared_external)"},{"line_number":67,"context_line":"        shared_external_nets \u003d [net[\u0027id\u0027] for net in body[\u0027networks\u0027]]"},{"line_number":68,"context_line":"        if not shared_external_nets:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_8842423d","line":65,"in_reply_to":"5a5ae5dd_9cc96b5d","updated":"2016-02-11 03:48:43.000000000","message":"Done","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"30d6940836f120d7e7645e608485128020d06eb2","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        # Ensure the public external network is the default external network"},{"line_number":74,"context_line":"        net_default_shared_external \u003d {"},{"line_number":75,"context_line":"            \u0027is_default\u0027: True, \u0027shared\u0027: True, \u0027router:external\u0027: True}"},{"line_number":76,"context_line":"        body \u003d cls.admin_client.list_networks(**net_default_shared_external)"},{"line_number":77,"context_line":"        default_shared_external_nets \u003d [net[\u0027id\u0027] for net in body[\u0027networks\u0027]]"},{"line_number":78,"context_line":"        # TODO(HenryG): the above query doesn\u0027t work; workaround ..."},{"line_number":79,"context_line":"        default_shared_external_nets \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_1c949be6","line":76,"updated":"2016-02-09 05:42:28.000000000","message":"why do we list again? We could simply update public_network_id to be the default as the operation is idempotent. Assuming this is the only test case that does this operation we shouldn\u0027t not hit any race.","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8ae8763e15c7929ef029ea884603c0759c7d4eb5","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        # Ensure the public external network is the default external network"},{"line_number":74,"context_line":"        net_default_shared_external \u003d {"},{"line_number":75,"context_line":"            \u0027is_default\u0027: True, \u0027shared\u0027: True, \u0027router:external\u0027: True}"},{"line_number":76,"context_line":"        body \u003d cls.admin_client.list_networks(**net_default_shared_external)"},{"line_number":77,"context_line":"        default_shared_external_nets \u003d [net[\u0027id\u0027] for net in body[\u0027networks\u0027]]"},{"line_number":78,"context_line":"        # TODO(HenryG): the above query doesn\u0027t work; workaround ..."},{"line_number":79,"context_line":"        default_shared_external_nets \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_484c4a70","line":76,"in_reply_to":"5a5ae5dd_1c949be6","updated":"2016-02-11 03:48:43.000000000","message":"Done","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"30d6940836f120d7e7645e608485128020d06eb2","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            }"},{"line_number":96,"context_line":"            cls.create_subnetpool(\u0027shared-default\u0027, is_admin\u003dTrue,"},{"line_number":97,"context_line":"                                  **create_body)"},{"line_number":98,"context_line":"            body \u003d cls.admin_client.list_subnetpools(**{\u0027is_default\u0027: True})"},{"line_number":99,"context_line":"            default_subnetpools \u003d [pool[\u0027id\u0027] for pool in body[\u0027subnetpools\u0027]]"},{"line_number":100,"context_line":"            if not default_subnetpools:"},{"line_number":101,"context_line":"                raise cls.skipException("}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_bc8547ae","line":98,"updated":"2016-02-09 05:42:28.000000000","message":"you don\u0027t need to list, you can check the response body to the create request to see if the operation succeeded.","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8ae8763e15c7929ef029ea884603c0759c7d4eb5","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            }"},{"line_number":96,"context_line":"            cls.create_subnetpool(\u0027shared-default\u0027, is_admin\u003dTrue,"},{"line_number":97,"context_line":"                                  **create_body)"},{"line_number":98,"context_line":"            body \u003d cls.admin_client.list_subnetpools(**{\u0027is_default\u0027: True})"},{"line_number":99,"context_line":"            default_subnetpools \u003d [pool[\u0027id\u0027] for pool in body[\u0027subnetpools\u0027]]"},{"line_number":100,"context_line":"            if not default_subnetpools:"},{"line_number":101,"context_line":"                raise cls.skipException("}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_08ead20f","line":98,"in_reply_to":"5a5ae5dd_bc8547ae","updated":"2016-02-11 03:48:43.000000000","message":"Apparently I don\u0027t even need to check. The call will fail if the operation does not succeed.","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"30d6940836f120d7e7645e608485128020d06eb2","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            cls.admin_client.update_network(cls.updated_shared_public_net_id,"},{"line_number":115,"context_line":"                                            **{\u0027shared\u0027: False})"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        if cls.created_shared_default_subnetpool_id:"},{"line_number":118,"context_line":"            # TODO(HenryG): delete the subnetpool"},{"line_number":119,"context_line":"            pass"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_fcb97f7a","line":117,"updated":"2016-02-09 05:42:28.000000000","message":"the cleanup here would delete the subnet pool and toggle the default plugin for the public network.","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"ab8b284e1e05bbaf191745007582b83e5c969cdd","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            cls.admin_client.update_network(cls.updated_shared_public_net_id,"},{"line_number":115,"context_line":"                                            **{\u0027shared\u0027: False})"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        if cls.created_shared_default_subnetpool_id:"},{"line_number":118,"context_line":"            # TODO(HenryG): delete the subnetpool"},{"line_number":119,"context_line":"            pass"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_793b16d2","line":117,"in_reply_to":"3a57f1b5_484a0ac7","updated":"2016-02-11 04:53:12.000000000","message":"Turns out the subnetpool gets deleted by the base class logic.","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8ae8763e15c7929ef029ea884603c0759c7d4eb5","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            cls.admin_client.update_network(cls.updated_shared_public_net_id,"},{"line_number":115,"context_line":"                                            **{\u0027shared\u0027: False})"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        if cls.created_shared_default_subnetpool_id:"},{"line_number":118,"context_line":"            # TODO(HenryG): delete the subnetpool"},{"line_number":119,"context_line":"            pass"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_484a0ac7","line":117,"in_reply_to":"5a5ae5dd_fcb97f7a","updated":"2016-02-11 03:48:43.000000000","message":"Done","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"30d6940836f120d7e7645e608485128020d06eb2","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @staticmethod"},{"line_number":129,"context_line":"    def _delete_topology(client):"},{"line_number":130,"context_line":"        \u0027\u0027\u0027This is laborious.\u0027\u0027\u0027"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        # Find the auto-allocated router(s)"},{"line_number":133,"context_line":"        name \u003d \u0027auto_allocated_router\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_5c80d38b","line":130,"updated":"2016-02-09 05:42:28.000000000","message":"I am pretty sure there\u0027s base class logic that does this cleanup on the testcase behalf, we\u0027d need to figure out how to tap into it, but this looks like duplicate code.","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8ae8763e15c7929ef029ea884603c0759c7d4eb5","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @staticmethod"},{"line_number":129,"context_line":"    def _delete_topology(client):"},{"line_number":130,"context_line":"        \u0027\u0027\u0027This is laborious.\u0027\u0027\u0027"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        # Find the auto-allocated router(s)"},{"line_number":133,"context_line":"        name \u003d \u0027auto_allocated_router\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_9b360ae6","line":130,"in_reply_to":"5a5ae5dd_5c80d38b","updated":"2016-02-11 03:48:43.000000000","message":"Done","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"30d6940836f120d7e7645e608485128020d06eb2","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        resources_after1 \u003d self._count_topology_resources(client)"},{"line_number":177,"context_line":"        # There should be one new network, subnet and router"},{"line_number":178,"context_line":"        expected \u003d tuple(map(lambda i: i + 1, resources_before))"},{"line_number":179,"context_line":"        self.assertEqual(expected, resources_after1)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        body \u003d client.get_auto_allocated_topology(tenant_id)"},{"line_number":182,"context_line":"        topology \u003d body[\u0027auto_allocated_topology\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_1c17bb55","line":179,"updated":"2016-02-09 05:42:28.000000000","message":"have you consider the situation where we have two default subnet pools? One for v4 and one for v6?","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8ae8763e15c7929ef029ea884603c0759c7d4eb5","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        resources_after1 \u003d self._count_topology_resources(client)"},{"line_number":177,"context_line":"        # There should be one new network, subnet and router"},{"line_number":178,"context_line":"        expected \u003d tuple(map(lambda i: i + 1, resources_before))"},{"line_number":179,"context_line":"        self.assertEqual(expected, resources_after1)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        body \u003d client.get_auto_allocated_topology(tenant_id)"},{"line_number":182,"context_line":"        topology \u003d body[\u0027auto_allocated_topology\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_2816aea7","line":179,"in_reply_to":"5a5ae5dd_1c17bb55","updated":"2016-02-11 03:48:43.000000000","message":"Yes, but there is currently an issue with it so I will have a follow-up patch to fix the issue and include the test.","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"30d6940836f120d7e7645e608485128020d06eb2","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        # Create a tenant for this test"},{"line_number":198,"context_line":"        test_tenant \u003d data_utils.rand_name(\u0027project\u0027)"},{"line_number":199,"context_line":"        test_description \u003d data_utils.rand_name(\u0027desc\u0027)"},{"line_number":200,"context_line":"        tenant \u003d self.identity_admin_client.create_tenant("},{"line_number":201,"context_line":"            name\u003dtest_tenant,"},{"line_number":202,"context_line":"            description\u003dtest_description)[\u0027tenant\u0027]"},{"line_number":203,"context_line":"        tenant_id \u003d tenant[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_fc473f75","line":200,"updated":"2016-02-09 05:42:28.000000000","message":"I think there\u0027s base class code that does deal with provisioning a tenant per test case so I believe we don\u0027t need to explicitly create the tenant but simply make the admin call on its behalf.","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8ae8763e15c7929ef029ea884603c0759c7d4eb5","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        # Create a tenant for this test"},{"line_number":198,"context_line":"        test_tenant \u003d data_utils.rand_name(\u0027project\u0027)"},{"line_number":199,"context_line":"        test_description \u003d data_utils.rand_name(\u0027desc\u0027)"},{"line_number":200,"context_line":"        tenant \u003d self.identity_admin_client.create_tenant("},{"line_number":201,"context_line":"            name\u003dtest_tenant,"},{"line_number":202,"context_line":"            description\u003dtest_description)[\u0027tenant\u0027]"},{"line_number":203,"context_line":"        tenant_id \u003d tenant[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_7bfa2ebf","line":200,"in_reply_to":"5a5ae5dd_fc473f75","updated":"2016-02-11 03:48:43.000000000","message":"Done","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"30d6940836f120d7e7645e608485128020d06eb2","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        tenant_id \u003d tenant[\u0027id\u0027]"},{"line_number":204,"context_line":"        self.addCleanup(self.identity_admin_client.delete_tenant, tenant_id)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        self._test_get_allocated_net_topology(self.admin_client, tenant_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_c7a38cff","line":206,"updated":"2016-02-09 05:42:28.000000000","message":"negative tests that exercise error situations like lack of setup would be nice, but the concurrent testing framework prevents us from running them free of side effects. Perhaps a different approach would be \u0027fullstack\u0027 where each test runs in a completely isolated environment.","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8ae8763e15c7929ef029ea884603c0759c7d4eb5","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        tenant_id \u003d tenant[\u0027id\u0027]"},{"line_number":204,"context_line":"        self.addCleanup(self.identity_admin_client.delete_tenant, tenant_id)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        self._test_get_allocated_net_topology(self.admin_client, tenant_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_bb266666","line":206,"in_reply_to":"5a5ae5dd_c7a38cff","updated":"2016-02-11 03:48:43.000000000","message":"OK I will look into this.","commit_id":"c3f40a1d5fa6b0f40afc49cf5112e1886948f32a"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ef1fb257962c75cf5bedfe454e4a44d586df719e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"class TestAutoAllocatedTopology(base.BaseAdminNetworkTest):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    \"\"\""},{"line_number":25,"context_line":"    NOTE: These tests will eventually migrate to Tempest."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    Tests the Get-Me-A-Network operation in the Neutron API"},{"line_number":28,"context_line":"    using the REST client for Neutron."}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_46d15922","line":25,"updated":"2016-02-12 04:33:49.000000000","message":"I\u0027d say we\u0027ll consider moving it to Tempest, I am not sure of anything right now :)","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"a158f694cab9def25f32344dcd768cfd8313409b","unresolved":false,"context_lines":[{"line_number":22,"context_line":"class TestAutoAllocatedTopology(base.BaseAdminNetworkTest):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    \"\"\""},{"line_number":25,"context_line":"    NOTE: These tests will eventually migrate to Tempest."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    Tests the Get-Me-A-Network operation in the Neutron API"},{"line_number":28,"context_line":"    using the REST client for Neutron."}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_c5e67f14","line":25,"in_reply_to":"3a57f1b5_46d15922","updated":"2016-02-12 16:29:10.000000000","message":"Done","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0bcf8c90caaa961781f3b1f55e124f7f3e447a2a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"class TestAutoAllocatedTopology(base.BaseAdminNetworkTest):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    \"\"\""},{"line_number":25,"context_line":"    NOTE: These tests will eventually migrate to Tempest."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    Tests the Get-Me-A-Network operation in the Neutron API"},{"line_number":28,"context_line":"    using the REST client for Neutron."}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_f1cee12b","line":25,"in_reply_to":"3a57f1b5_46d15922","updated":"2016-02-12 15:35:44.000000000","message":"They might not be necessary for Tempest. We\u0027ll obviously want a scenario test in Tempest that hits nova to boot a VM without a network, which would then use the auto-allocate API. For that to work, we\u0027re going to need the setup done in here for the public network and subnet pool to be in devstack. But it\u0027s probably best to get this working in neutron\u0027s tree first, then start lifting it out to devstack (the setup parts) and then make that a dependency on removal from this code in neutron.","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"292821afb5ea5430c861a54cecedeef0ac4589a8","unresolved":false,"context_lines":[{"line_number":22,"context_line":"class TestAutoAllocatedTopology(base.BaseAdminNetworkTest):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    \"\"\""},{"line_number":25,"context_line":"    NOTE: These tests will eventually migrate to Tempest."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    Tests the Get-Me-A-Network operation in the Neutron API"},{"line_number":28,"context_line":"    using the REST client for Neutron."}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_b7e927b9","line":25,"in_reply_to":"3a57f1b5_f1cee12b","updated":"2016-02-12 22:02:11.000000000","message":"ack. Thanks for elaborating this so well.","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ef1fb257962c75cf5bedfe454e4a44d586df719e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        show allocated-net-topolgy for a tenant (as admin)"},{"line_number":31,"context_line":"        show my allocated-net-topolgy (as a tenant)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    The auto_allocate extension API must be enabled:"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        auto_allocate \u003d neutron.services.auto_allocate.plugin:Plugin"},{"line_number":36,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_c6a309b1","line":33,"updated":"2016-02-12 04:33:49.000000000","message":"this line can be dropped.","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"a158f694cab9def25f32344dcd768cfd8313409b","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        show allocated-net-topolgy for a tenant (as admin)"},{"line_number":31,"context_line":"        show my allocated-net-topolgy (as a tenant)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    The auto_allocate extension API must be enabled:"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        auto_allocate \u003d neutron.services.auto_allocate.plugin:Plugin"},{"line_number":36,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_b404d749","line":33,"in_reply_to":"3a57f1b5_c6a309b1","updated":"2016-02-12 16:29:10.000000000","message":"Done","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ef1fb257962c75cf5bedfe454e4a44d586df719e","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        # Ensure the public external network is the default external network"},{"line_number":52,"context_line":"        public_net_id \u003d cfg.CONF.network.public_network_id"},{"line_number":53,"context_line":"        body \u003d cls.admin_client.show_network(public_net_id)"},{"line_number":54,"context_line":"        if not body[\u0027network\u0027][\u0027is_default\u0027]:"},{"line_number":55,"context_line":"            cls.admin_client.update_network(public_net_id,"},{"line_number":56,"context_line":"                                            **{\u0027is_default\u0027: True})"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_6695753d","line":53,"updated":"2016-02-12 04:33:49.000000000","message":"why do you get before you set?","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"a158f694cab9def25f32344dcd768cfd8313409b","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        # Ensure the public external network is the default external network"},{"line_number":52,"context_line":"        public_net_id \u003d cfg.CONF.network.public_network_id"},{"line_number":53,"context_line":"        body \u003d cls.admin_client.show_network(public_net_id)"},{"line_number":54,"context_line":"        if not body[\u0027network\u0027][\u0027is_default\u0027]:"},{"line_number":55,"context_line":"            cls.admin_client.update_network(public_net_id,"},{"line_number":56,"context_line":"                                            **{\u0027is_default\u0027: True})"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_94719b46","line":53,"in_reply_to":"3a57f1b5_6695753d","updated":"2016-02-12 16:29:10.000000000","message":"I am checking is_default before setting and I record if I changed it. Then in resource_cleanup I clear is_default if it was clear before the test.","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"ede45b481650a84ea222f1650f255095ef609faa","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        # Ensure the public external network is the default external network"},{"line_number":52,"context_line":"        public_net_id \u003d cfg.CONF.network.public_network_id"},{"line_number":53,"context_line":"        body \u003d cls.admin_client.show_network(public_net_id)"},{"line_number":54,"context_line":"        if not body[\u0027network\u0027][\u0027is_default\u0027]:"},{"line_number":55,"context_line":"            cls.admin_client.update_network(public_net_id,"},{"line_number":56,"context_line":"                                            **{\u0027is_default\u0027: True})"}],"source_content_type":"text/x-python","patch_set":3,"id":"dae33548_66d38839","line":53,"in_reply_to":"3a57f1b5_773e4f29","updated":"2016-02-15 13:40:21.000000000","message":"Setting an attribute on a common resource during a test is problem for API tests, since multiple tests can be running in parallel. It is very similar to a config setting.\n\nI am leaning towards having the public network set to be the default external network for the entire API job (if the auto-allocate extension is loaded), or do as the comment at L46 says.","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"292821afb5ea5430c861a54cecedeef0ac4589a8","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        # Ensure the public external network is the default external network"},{"line_number":52,"context_line":"        public_net_id \u003d cfg.CONF.network.public_network_id"},{"line_number":53,"context_line":"        body \u003d cls.admin_client.show_network(public_net_id)"},{"line_number":54,"context_line":"        if not body[\u0027network\u0027][\u0027is_default\u0027]:"},{"line_number":55,"context_line":"            cls.admin_client.update_network(public_net_id,"},{"line_number":56,"context_line":"                                            **{\u0027is_default\u0027: True})"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_773e4f29","line":53,"in_reply_to":"3a57f1b5_94719b46","updated":"2016-02-12 22:02:11.000000000","message":"true, but in the circumstances of this test case you can simply set and reset in the cleanup as you\u0027d expect the public_net_id be not default. You can leave it, I guess.","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ef1fb257962c75cf5bedfe454e4a44d586df719e","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        super(TestAutoAllocatedTopology, cls).resource_cleanup()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        if cls.updated_default_public_net:"},{"line_number":76,"context_line":"            cls.admin_client.update_network(cls.updated_default_public_net,"},{"line_number":77,"context_line":"                                            **{\u0027is_default\u0027: False})"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_269bfd73","line":76,"updated":"2016-02-12 04:33:49.000000000","message":"what about deleting the subnetpool?","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"a3c1988841324ebb8cec775069d1b56b8306c670","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        super(TestAutoAllocatedTopology, cls).resource_cleanup()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        if cls.updated_default_public_net:"},{"line_number":76,"context_line":"            cls.admin_client.update_network(cls.updated_default_public_net,"},{"line_number":77,"context_line":"                                            **{\u0027is_default\u0027: False})"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_a6eb6d77","line":76,"in_reply_to":"3a57f1b5_269bfd73","updated":"2016-02-12 04:44:19.000000000","message":"that\u0027s why you get [1]\n\n[1] Invalid input for operation: A default subnetpool for this IP family has already been set. Only one default may exist per IP family","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"ede45b481650a84ea222f1650f255095ef609faa","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        super(TestAutoAllocatedTopology, cls).resource_cleanup()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        if cls.updated_default_public_net:"},{"line_number":76,"context_line":"            cls.admin_client.update_network(cls.updated_default_public_net,"},{"line_number":77,"context_line":"                                            **{\u0027is_default\u0027: False})"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"dae33548_46f3e473","line":76,"in_reply_to":"3a57f1b5_7725ef06","updated":"2016-02-15 13:40:21.000000000","message":"I am 100% sure. The problem here is once again that we are setting up a common resource. I have two auto-alloc test cases below, and if they run in parallel (they usually do) then one of them is going to complain that about the default subnetpool.\n\nIt seems to me that the API job is not structured in a way that makes it possible to test combinations of common resources.\n\nFor the next patch set I am going to cut down to one test case for auto-alloc. However, setting a default subnetpool has effects beyond auto-alloc so we will need to rethink the strategy here.","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"a158f694cab9def25f32344dcd768cfd8313409b","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        super(TestAutoAllocatedTopology, cls).resource_cleanup()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        if cls.updated_default_public_net:"},{"line_number":76,"context_line":"            cls.admin_client.update_network(cls.updated_default_public_net,"},{"line_number":77,"context_line":"                                            **{\u0027is_default\u0027: False})"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_e5237b56","line":76,"in_reply_to":"3a57f1b5_a6eb6d77","updated":"2016-02-12 16:29:10.000000000","message":"create_subnetpool (L68) adds the pool to the cleanup list.","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"292821afb5ea5430c861a54cecedeef0ac4589a8","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        super(TestAutoAllocatedTopology, cls).resource_cleanup()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        if cls.updated_default_public_net:"},{"line_number":76,"context_line":"            cls.admin_client.update_network(cls.updated_default_public_net,"},{"line_number":77,"context_line":"                                            **{\u0027is_default\u0027: False})"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_7725ef06","line":76,"in_reply_to":"3a57f1b5_e5237b56","updated":"2016-02-12 22:02:11.000000000","message":"interesting, and yet if fails. I am not sure what\u0027s going on then. Are you sure the cleanup does occur?","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ef1fb257962c75cf5bedfe454e4a44d586df719e","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        resources_after1 \u003d self._count_topology_resources(client)"},{"line_number":109,"context_line":"        # There should be one new network, subnet and router"},{"line_number":110,"context_line":"        expected \u003d tuple(map(lambda i: i + 1, resources_before))"},{"line_number":111,"context_line":"        self.assertEqual(expected, resources_after1)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        body \u003d client.get_auto_allocated_topology(tenant_id)"},{"line_number":114,"context_line":"        topology \u003d body[\u0027auto_allocated_topology\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_e6e405e2","line":111,"updated":"2016-02-12 04:33:49.000000000","message":"if for whatever reason someone creates a default v6 subnetpool this might become race-y.","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"ede45b481650a84ea222f1650f255095ef609faa","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        resources_after1 \u003d self._count_topology_resources(client)"},{"line_number":109,"context_line":"        # There should be one new network, subnet and router"},{"line_number":110,"context_line":"        expected \u003d tuple(map(lambda i: i + 1, resources_before))"},{"line_number":111,"context_line":"        self.assertEqual(expected, resources_after1)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        body \u003d client.get_auto_allocated_topology(tenant_id)"},{"line_number":114,"context_line":"        topology \u003d body[\u0027auto_allocated_topology\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"dae33548_d137b0e1","line":111,"in_reply_to":"3a57f1b5_34df870e","updated":"2016-02-15 13:40:21.000000000","message":"As armax pointed out to me in IRC, I was testing with a conflicting address range. IPv6 works fine and will be included in the next patch set.","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"a158f694cab9def25f32344dcd768cfd8313409b","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        resources_after1 \u003d self._count_topology_resources(client)"},{"line_number":109,"context_line":"        # There should be one new network, subnet and router"},{"line_number":110,"context_line":"        expected \u003d tuple(map(lambda i: i + 1, resources_before))"},{"line_number":111,"context_line":"        self.assertEqual(expected, resources_after1)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        body \u003d client.get_auto_allocated_topology(tenant_id)"},{"line_number":114,"context_line":"        topology \u003d body[\u0027auto_allocated_topology\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_34df870e","line":111,"in_reply_to":"3a57f1b5_e6e405e2","updated":"2016-02-12 16:29:10.000000000","message":"I am working on this. Currently v6 subnet/subnetpool does not work at all for auto-allocate. I will submit a follow-up patch once I fix it.","commit_id":"96c753066012ca4dc008f349cfd65b6c7f96043d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"35b099f92d788fe0d47ebf3e7597e2149cbc5248","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        # Ensure the public external network is the default external network"},{"line_number":43,"context_line":"        public_net_id \u003d cfg.CONF.network.public_network_id"},{"line_number":44,"context_line":"        cls.admin_client.update_network(public_net_id,"},{"line_number":45,"context_line":"                                        **{\u0027is_default\u0027: True})"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        # Ensure default v4 and v6 subnetpools for auto-allocated subnets"},{"line_number":48,"context_line":"        # NOTE: because of this, only one test case can be run"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_1302896f","line":45,"range":{"start_line":45,"start_character":39,"end_line":45,"end_character":62},"updated":"2016-02-16 12:51:48.000000000","message":"I think \u0027is_default\u003dTrue\u0027 is simpler.","commit_id":"2f0769d7a0086f3328aa5c9491a94098bb1712c9"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"4eba7cdba3c52298de312b3529b3098f61b209c1","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        # Ensure the public external network is the default external network"},{"line_number":43,"context_line":"        public_net_id \u003d cfg.CONF.network.public_network_id"},{"line_number":44,"context_line":"        cls.admin_client.update_network(public_net_id,"},{"line_number":45,"context_line":"                                        **{\u0027is_default\u0027: True})"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        # Ensure default v4 and v6 subnetpools for auto-allocated subnets"},{"line_number":48,"context_line":"        # NOTE: because of this, only one test case can be run"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_8472cd47","line":45,"range":{"start_line":45,"start_character":39,"end_line":45,"end_character":62},"in_reply_to":"dae33548_1302896f","updated":"2016-02-16 13:44:04.000000000","message":"Done","commit_id":"2f0769d7a0086f3328aa5c9491a94098bb1712c9"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"35b099f92d788fe0d47ebf3e7597e2149cbc5248","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        super(TestAutoAllocatedTopology, cls).resource_cleanup()"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        cls.admin_client.update_network(cfg.CONF.network.public_network_id,"},{"line_number":69,"context_line":"                                        **{\u0027is_default\u0027: False})"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _count_topology_resources(self):"},{"line_number":72,"context_line":"        \u0027\u0027\u0027Count the resources whose names begin with \u0027auto_allocated_\u0027.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_93ee99b2","line":69,"updated":"2016-02-16 12:51:48.000000000","message":"don\u0027t we delete the default subnet pools above after running the tests?","commit_id":"2f0769d7a0086f3328aa5c9491a94098bb1712c9"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d5ce8dcafce206253c84c7b8510d6b38a3d1f9f5","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        super(TestAutoAllocatedTopology, cls).resource_cleanup()"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        cls.admin_client.update_network(cfg.CONF.network.public_network_id,"},{"line_number":69,"context_line":"                                        **{\u0027is_default\u0027: False})"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _count_topology_resources(self):"},{"line_number":72,"context_line":"        \u0027\u0027\u0027Count the resources whose names begin with \u0027auto_allocated_\u0027.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_9ff3389e","line":69,"in_reply_to":"dae33548_2484a1d2","updated":"2016-02-16 13:51:37.000000000","message":"Thanks. I neglected to check what is done in create_subnetpool.","commit_id":"2f0769d7a0086f3328aa5c9491a94098bb1712c9"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"4eba7cdba3c52298de312b3529b3098f61b209c1","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        super(TestAutoAllocatedTopology, cls).resource_cleanup()"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        cls.admin_client.update_network(cfg.CONF.network.public_network_id,"},{"line_number":69,"context_line":"                                        **{\u0027is_default\u0027: False})"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _count_topology_resources(self):"},{"line_number":72,"context_line":"        \u0027\u0027\u0027Count the resources whose names begin with \u0027auto_allocated_\u0027.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_2484a1d2","line":69,"in_reply_to":"dae33548_93ee99b2","updated":"2016-02-16 13:44:04.000000000","message":"create_subnetpool() on L61 and L62 adds the pool to the cleanup list so it is deleted by the base class when the test case completes.","commit_id":"2f0769d7a0086f3328aa5c9491a94098bb1712c9"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"47951ce7a1b548dc840be5e9b8dd117d155186f1","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        super(TestAutoAllocatedTopology, cls).resource_cleanup()"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        cls.admin_client.update_network(cfg.CONF.network.public_network_id,"},{"line_number":68,"context_line":"                                        **{\u0027is_default\u0027: False})"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def _count_topology_resources(self):"},{"line_number":71,"context_line":"        \u0027\u0027\u0027Count the resources whose names begin with \u0027auto_allocated_\u0027.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_788c8935","line":68,"range":{"start_line":68,"start_character":40,"end_line":68,"end_character":63},"updated":"2016-02-16 14:52:09.000000000","message":"I still see this style at several places. I think this style is only used when xxx\u003dyyy cannot be used such as \u0027router:external\u0027.","commit_id":"696b31a5da5e56f44519aba653acc4c3d7dc6134"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"d8cdeccd469aeeff2fe7a60b7e6ad59898881893","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        super(TestAutoAllocatedTopology, cls).resource_cleanup()"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        cls.admin_client.update_network(cfg.CONF.network.public_network_id,"},{"line_number":68,"context_line":"                                        **{\u0027is_default\u0027: False})"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def _count_topology_resources(self):"},{"line_number":71,"context_line":"        \u0027\u0027\u0027Count the resources whose names begin with \u0027auto_allocated_\u0027.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_eaa0b745","line":68,"range":{"start_line":68,"start_character":40,"end_line":68,"end_character":63},"in_reply_to":"dae33548_788c8935","updated":"2016-02-16 16:25:37.000000000","message":"Yeah, I just forgot to clean these all up.","commit_id":"696b31a5da5e56f44519aba653acc4c3d7dc6134"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"47951ce7a1b548dc840be5e9b8dd117d155186f1","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def _add_topology_cleanup(self, client):"},{"line_number":83,"context_line":"        \u0027\u0027\u0027Add the auto-allocated resources to the cleanup lists.\u0027\u0027\u0027"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        body \u003d client.list_routers(**{\u0027name\u0027: \u0027auto_allocated_router\u0027})"},{"line_number":86,"context_line":"        self.routers.extend(body[\u0027routers\u0027])"},{"line_number":87,"context_line":"        body \u003d client.list_subnets(**{\u0027name\u0027: \u0027auto_allocated_subnet_v4\u0027})"},{"line_number":88,"context_line":"        self.subnets.extend(body[\u0027subnets\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_f878992d","line":85,"range":{"start_line":85,"start_character":35,"end_line":85,"end_character":70},"updated":"2016-02-16 14:52:09.000000000","message":"ditto","commit_id":"696b31a5da5e56f44519aba653acc4c3d7dc6134"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"d8cdeccd469aeeff2fe7a60b7e6ad59898881893","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def _add_topology_cleanup(self, client):"},{"line_number":83,"context_line":"        \u0027\u0027\u0027Add the auto-allocated resources to the cleanup lists.\u0027\u0027\u0027"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        body \u003d client.list_routers(**{\u0027name\u0027: \u0027auto_allocated_router\u0027})"},{"line_number":86,"context_line":"        self.routers.extend(body[\u0027routers\u0027])"},{"line_number":87,"context_line":"        body \u003d client.list_subnets(**{\u0027name\u0027: \u0027auto_allocated_subnet_v4\u0027})"},{"line_number":88,"context_line":"        self.subnets.extend(body[\u0027subnets\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_2a8bbfc4","line":85,"range":{"start_line":85,"start_character":35,"end_line":85,"end_character":70},"in_reply_to":"dae33548_f878992d","updated":"2016-02-16 16:25:37.000000000","message":"Done","commit_id":"696b31a5da5e56f44519aba653acc4c3d7dc6134"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"26c69375203d3a995094852c61650b6935762e0b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            msg \u003d \"auto_allocate extension not enabled.\""},{"line_number":37,"context_line":"            raise cls.skipException(msg)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        # TODO(HenryG): Instead of doing all this pre-requisite setup here,"},{"line_number":40,"context_line":"        # we might want to have devstack set it up by default?"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        # Ensure the public external network is the default external network"}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_32eed122","line":39,"updated":"2016-02-19 22:52:05.000000000","message":"I have realized that if we do that at a later date, then these tests will break leaving us in a jam, as devstack changes are not gated by the API job. More details below.","commit_id":"e2b40a165f3585acdc418b727721585129e6476c"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"ef573f2b8622c5c4df6e8bf9338cba4972399c5b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            msg \u003d \"auto_allocate extension not enabled.\""},{"line_number":37,"context_line":"            raise cls.skipException(msg)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        # TODO(HenryG): Instead of doing all this pre-requisite setup here,"},{"line_number":40,"context_line":"        # we might want to have devstack set it up by default?"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        # Ensure the public external network is the default external network"}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_c21190ae","line":39,"in_reply_to":"bae84128_32eed122","updated":"2016-02-20 04:22:57.000000000","message":"Done","commit_id":"e2b40a165f3585acdc418b727721585129e6476c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"26c69375203d3a995094852c61650b6935762e0b","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        # Ensure the public external network is the default external network"},{"line_number":43,"context_line":"        public_net_id \u003d cfg.CONF.network.public_network_id"},{"line_number":44,"context_line":"        cls.admin_client.update_network(public_net_id, is_default\u003dTrue)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        # Ensure default v4 and v6 subnetpools for auto-allocated subnets"},{"line_number":47,"context_line":"        # NOTE: because of this, only one test case can be run"}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_520555c0","line":44,"updated":"2016-02-19 22:52:05.000000000","message":"this is idempotent, and that\u0027s fine. See https://review.openstack.org/#/c/282559/","commit_id":"e2b40a165f3585acdc418b727721585129e6476c"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"ef573f2b8622c5c4df6e8bf9338cba4972399c5b","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        # Ensure the public external network is the default external network"},{"line_number":43,"context_line":"        public_net_id \u003d cfg.CONF.network.public_network_id"},{"line_number":44,"context_line":"        cls.admin_client.update_network(public_net_id, is_default\u003dTrue)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        # Ensure default v4 and v6 subnetpools for auto-allocated subnets"},{"line_number":47,"context_line":"        # NOTE: because of this, only one test case can be run"}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_22279c13","line":44,"in_reply_to":"bae84128_520555c0","updated":"2016-02-20 04:22:57.000000000","message":"Left as is. (And thanks for the devstack patch.)","commit_id":"e2b40a165f3585acdc418b727721585129e6476c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"26c69375203d3a995094852c61650b6935762e0b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027shared\u0027: True,"},{"line_number":58,"context_line":"            \u0027is_default\u0027: True,"},{"line_number":59,"context_line":"        }"},{"line_number":60,"context_line":"        cls.create_subnetpool(\u0027shared-default\u0027, is_admin\u003dTrue, **create_v4)"},{"line_number":61,"context_line":"        cls.create_subnetpool(\u0027shared-default\u0027, is_admin\u003dTrue, **create_v6)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_d2f965ca","line":60,"updated":"2016-02-19 22:52:05.000000000","message":"if we provision default pools in devstack this goes tits up and we can\u0027t recover easily.","commit_id":"e2b40a165f3585acdc418b727721585129e6476c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"a6e62bbb52a67489cab4ed205a201a4824ba7c11","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027shared\u0027: True,"},{"line_number":58,"context_line":"            \u0027is_default\u0027: True,"},{"line_number":59,"context_line":"        }"},{"line_number":60,"context_line":"        cls.create_subnetpool(\u0027shared-default\u0027, is_admin\u003dTrue, **create_v4)"},{"line_number":61,"context_line":"        cls.create_subnetpool(\u0027shared-default\u0027, is_admin\u003dTrue, **create_v6)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_ac727347","line":60,"in_reply_to":"bae84128_0224180b","updated":"2016-02-20 21:56:36.000000000","message":"that was French, actually.","commit_id":"e2b40a165f3585acdc418b727721585129e6476c"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"ef573f2b8622c5c4df6e8bf9338cba4972399c5b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027shared\u0027: True,"},{"line_number":58,"context_line":"            \u0027is_default\u0027: True,"},{"line_number":59,"context_line":"        }"},{"line_number":60,"context_line":"        cls.create_subnetpool(\u0027shared-default\u0027, is_admin\u003dTrue, **create_v4)"},{"line_number":61,"context_line":"        cls.create_subnetpool(\u0027shared-default\u0027, is_admin\u003dTrue, **create_v6)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_0224180b","line":60,"in_reply_to":"bae84128_d2f965ca","updated":"2016-02-20 04:22:57.000000000","message":"Done. But please do not use Italian in review comments.","commit_id":"e2b40a165f3585acdc418b727721585129e6476c"}],"neutron/tests/api/test_auto_allocated_topology.py":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"086639493ce4781056d88b65b4b417b49a9e74ce","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        # Ensure the public external network is the default external network"},{"line_number":39,"context_line":"        public_net_id \u003d cfg.CONF.network.public_network_id"},{"line_number":40,"context_line":"        self.admin_client.update_network(public_net_id, is_default\u003dTrue)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        # The deployment must contain a default subnetpool:"},{"line_number":43,"context_line":"        # one ipv4 pool, or one ipv6 pool, or one of each"}],"source_content_type":"text/x-python","patch_set":11,"id":"bae84128_5105be0e","line":40,"updated":"2016-02-23 21:25:01.000000000","message":"No need to update public_net if there is no default subnetpool","commit_id":"d9762c9efe11815c4c2bc092ab3f06d0c5b6eba2"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8ec77c11ae910befe41cec5cc6b42c308a6bee74","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        # Ensure the public external network is the default external network"},{"line_number":39,"context_line":"        public_net_id \u003d cfg.CONF.network.public_network_id"},{"line_number":40,"context_line":"        self.admin_client.update_network(public_net_id, is_default\u003dTrue)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        # The deployment must contain a default subnetpool:"},{"line_number":43,"context_line":"        # one ipv4 pool, or one ipv6 pool, or one of each"}],"source_content_type":"text/x-python","patch_set":11,"id":"bae84128_f72962e7","line":40,"in_reply_to":"bae84128_5105be0e","updated":"2016-02-23 22:24:28.000000000","message":"Done","commit_id":"d9762c9efe11815c4c2bc092ab3f06d0c5b6eba2"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"0a5055609f8792cad8338b3933e16dd530b6fc5f","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        body \u003d self.client.list_subnetpools(is_default\u003dTrue)"},{"line_number":45,"context_line":"        self.num_subnetpools \u003d len(body[\u0027subnetpools\u0027])"},{"line_number":46,"context_line":"        if self.num_subnetpools \u003d\u003d 0:"},{"line_number":47,"context_line":"            self.skipTest(\"No default subnetpool\")"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _count_topology_resources(self):"},{"line_number":50,"context_line":"        \u0027\u0027\u0027Count the resources whose names begin with \u0027auto_allocated_\u0027.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"bae84128_25190a7a","line":47,"updated":"2016-02-23 03:33:02.000000000","message":"I feel a bit of an ass realizing that I haven\u0027t pointed this before, but the tempest base class allows you to move some of this code into various setup stages:\n\nhttps://github.com/openstack/tempest/blob/master/tempest/test.py#L204\n\nSo for instance we should leverage skip_checks and/or resource_setup for some of these actions.\n\nOn a sidenote, it\u0027s being argued that some of these checks should not rely on a runtime state of the system (like the number of available subnet pools). We may want to add a note that this logic may need to be revisited once/if these tests migrate over.","commit_id":"d9762c9efe11815c4c2bc092ab3f06d0c5b6eba2"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8ec77c11ae910befe41cec5cc6b42c308a6bee74","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        body \u003d self.client.list_subnetpools(is_default\u003dTrue)"},{"line_number":45,"context_line":"        self.num_subnetpools \u003d len(body[\u0027subnetpools\u0027])"},{"line_number":46,"context_line":"        if self.num_subnetpools \u003d\u003d 0:"},{"line_number":47,"context_line":"            self.skipTest(\"No default subnetpool\")"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _count_topology_resources(self):"},{"line_number":50,"context_line":"        \u0027\u0027\u0027Count the resources whose names begin with \u0027auto_allocated_\u0027.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"bae84128_b7599a90","line":47,"in_reply_to":"bae84128_25190a7a","updated":"2016-02-23 22:24:28.000000000","message":"At the skip_checks phase the client is not yet set up and I need it to list the subnetpools. So the earliest I can do this is in resource_setup.","commit_id":"d9762c9efe11815c4c2bc092ab3f06d0c5b6eba2"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"086639493ce4781056d88b65b4b417b49a9e74ce","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":74,"context_line":"    @test.idempotent_id(\u002764bc0b02-cee4-11e5-9f3c-080027605a2b\u0027)"},{"line_number":75,"context_line":"    def test_get_allocated_net_topology_as_tenant(self):"},{"line_number":76,"context_line":"        resources_before \u003d self._count_topology_resources()"},{"line_number":77,"context_line":"        self.assertEqual((0, 0, 0), resources_before)"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"bae84128_aeb5cb7e","line":75,"range":{"start_line":75,"start_character":8,"end_line":75,"end_character":49},"updated":"2016-02-23 21:25:01.000000000","message":"Should we add the usecase for non-nominal cases like:\n\n get_auto_allocated_topology\n delete auto_allocated network\n get_auto_allocated_topology","commit_id":"d9762c9efe11815c4c2bc092ab3f06d0c5b6eba2"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8ec77c11ae910befe41cec5cc6b42c308a6bee74","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":74,"context_line":"    @test.idempotent_id(\u002764bc0b02-cee4-11e5-9f3c-080027605a2b\u0027)"},{"line_number":75,"context_line":"    def test_get_allocated_net_topology_as_tenant(self):"},{"line_number":76,"context_line":"        resources_before \u003d self._count_topology_resources()"},{"line_number":77,"context_line":"        self.assertEqual((0, 0, 0), resources_before)"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"bae84128_f7de82db","line":75,"range":{"start_line":75,"start_character":8,"end_line":75,"end_character":49},"in_reply_to":"bae84128_aeb5cb7e","updated":"2016-02-23 22:24:28.000000000","message":"I am working on this type of scenarios in a follow-up.","commit_id":"d9762c9efe11815c4c2bc092ab3f06d0c5b6eba2"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"d5a12568cdaef15d46a41d4ea0f957002a949769","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":74,"context_line":"    @test.idempotent_id(\u002764bc0b02-cee4-11e5-9f3c-080027605a2b\u0027)"},{"line_number":75,"context_line":"    def test_get_allocated_net_topology_as_tenant(self):"},{"line_number":76,"context_line":"        resources_before \u003d self._count_topology_resources()"},{"line_number":77,"context_line":"        self.assertEqual((0, 0, 0), resources_before)"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"bae84128_1d9a276e","line":75,"range":{"start_line":75,"start_character":8,"end_line":75,"end_character":49},"in_reply_to":"bae84128_f7de82db","updated":"2016-02-23 23:02:56.000000000","message":"Great!","commit_id":"d9762c9efe11815c4c2bc092ab3f06d0c5b6eba2"}],"neutron/tests/tempest/services/network/json/network_client.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"fed230b3d934c3464b158beb36c5d7bf70abfd00","unresolved":false,"context_lines":[{"line_number":636,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"    def get_auto_allocated_topology(self, tenant_id\u003dNone):"},{"line_number":639,"context_line":"        if tenant_id is None:"},{"line_number":640,"context_line":"            tenant_id \u003d \"None\""},{"line_number":641,"context_line":"        uri \u003d \u0027%s/auto-allocated-topology/%s\u0027 % (self.uri_prefix, tenant_id)"},{"line_number":642,"context_line":"        resp, body \u003d self.get(uri)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_ed0b888c","line":639,"updated":"2016-02-12 02:22:00.000000000","message":"this could be:\n\ntenant_id \u003d tenand_id or \u0027None\u0027","commit_id":"0902505452ed58642e8a58e3beb7a3a4428ffcad"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"c9bf73f70d2acd5286f15689fbe0f2973dfac526","unresolved":false,"context_lines":[{"line_number":636,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"    def get_auto_allocated_topology(self, tenant_id\u003dNone):"},{"line_number":639,"context_line":"        if tenant_id is None:"},{"line_number":640,"context_line":"            tenant_id \u003d \"None\""},{"line_number":641,"context_line":"        uri \u003d \u0027%s/auto-allocated-topology/%s\u0027 % (self.uri_prefix, tenant_id)"},{"line_number":642,"context_line":"        resp, body \u003d self.get(uri)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_6372477d","line":639,"in_reply_to":"3a57f1b5_ed0b888c","updated":"2016-02-12 03:33:25.000000000","message":"Done","commit_id":"0902505452ed58642e8a58e3beb7a3a4428ffcad"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"35b099f92d788fe0d47ebf3e7597e2149cbc5248","unresolved":false,"context_lines":[{"line_number":719,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":720,"context_line":""},{"line_number":721,"context_line":"    def get_auto_allocated_topology(self, tenant_id\u003dNone):"},{"line_number":722,"context_line":"        tenant_id \u003d tenant_id or \u0027None\u0027"},{"line_number":723,"context_line":"        uri \u003d \u0027%s/auto-allocated-topology/%s\u0027 % (self.uri_prefix, tenant_id)"},{"line_number":724,"context_line":"        resp, body \u003d self.get(uri)"},{"line_number":725,"context_line":"        self.expected_success(200, resp.status)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_1310c9a7","line":722,"range":{"start_line":722,"start_character":8,"end_line":722,"end_character":39},"updated":"2016-02-16 12:51:48.000000000","message":"is it required? %s accept None and there is no need to convert None to \u0027None\u0027.","commit_id":"2f0769d7a0086f3328aa5c9491a94098bb1712c9"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"4eba7cdba3c52298de312b3529b3098f61b209c1","unresolved":false,"context_lines":[{"line_number":719,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":720,"context_line":""},{"line_number":721,"context_line":"    def get_auto_allocated_topology(self, tenant_id\u003dNone):"},{"line_number":722,"context_line":"        tenant_id \u003d tenant_id or \u0027None\u0027"},{"line_number":723,"context_line":"        uri \u003d \u0027%s/auto-allocated-topology/%s\u0027 % (self.uri_prefix, tenant_id)"},{"line_number":724,"context_line":"        resp, body \u003d self.get(uri)"},{"line_number":725,"context_line":"        self.expected_success(200, resp.status)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_245b0189","line":722,"range":{"start_line":722,"start_character":8,"end_line":722,"end_character":39},"in_reply_to":"dae33548_1310c9a7","updated":"2016-02-16 13:44:04.000000000","message":"Done","commit_id":"2f0769d7a0086f3328aa5c9491a94098bb1712c9"}]}
