)]}'
{"tempest/api/network/test_networks.py":[{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"07b87861f846485ff78d2e44e1d1654d25ccdfda","unresolved":false,"context_lines":[{"line_number":378,"context_line":"    @test.idempotent_id(\u0027af774677-42a9-4e4b-bb58-16fe6a5bc1ec\u0027)"},{"line_number":379,"context_line":"    def test_external_network_visibility(self):"},{"line_number":380,"context_line":"        \"\"\"Verifies user can see external networks but not subnets.\"\"\""},{"line_number":381,"context_line":"        body \u003d self.networks_client.list_networks(**{\u0027router:external\u0027: True})"},{"line_number":382,"context_line":"        # shared external networks are excluded since their subnets are"},{"line_number":383,"context_line":"        # visible"},{"line_number":384,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_d3016f3b","line":381,"updated":"2016-03-07 02:25:05.000000000","message":"What about adding \u0027shared\u0027: True here?\n\n\nbody \u003d self.networks_client.list_networks(\n    **{\u0027router:external\u0027: True, \u0027shared\u0027: True})","commit_id":"0ab3397bdcc0f54a1dbb6501c12ee4e3320192d7"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"89287380b16ea65567531d62ca64ef1030fd0869","unresolved":false,"context_lines":[{"line_number":378,"context_line":"    @test.idempotent_id(\u0027af774677-42a9-4e4b-bb58-16fe6a5bc1ec\u0027)"},{"line_number":379,"context_line":"    def test_external_network_visibility(self):"},{"line_number":380,"context_line":"        \"\"\"Verifies user can see external networks but not subnets.\"\"\""},{"line_number":381,"context_line":"        body \u003d self.networks_client.list_networks(**{\u0027router:external\u0027: True})"},{"line_number":382,"context_line":"        # shared external networks are excluded since their subnets are"},{"line_number":383,"context_line":"        # visible"},{"line_number":384,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_16ce225a","line":381,"in_reply_to":"7af24918_b385c3ae","updated":"2016-03-07 06:18:04.000000000","message":"Good point, but it occurred to me that my change and this proposed one will still be racey. Another test could mark a network as shared after this retrieves it and its subnets will become available by the time of the listing. I need to change the subnet list call to exclude shared subnets.","commit_id":"0ab3397bdcc0f54a1dbb6501c12ee4e3320192d7"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"8ccf2fc53260449c63e16c3d4f51cfeb39e74e3e","unresolved":false,"context_lines":[{"line_number":378,"context_line":"    @test.idempotent_id(\u0027af774677-42a9-4e4b-bb58-16fe6a5bc1ec\u0027)"},{"line_number":379,"context_line":"    def test_external_network_visibility(self):"},{"line_number":380,"context_line":"        \"\"\"Verifies user can see external networks but not subnets.\"\"\""},{"line_number":381,"context_line":"        body \u003d self.networks_client.list_networks(**{\u0027router:external\u0027: True})"},{"line_number":382,"context_line":"        # shared external networks are excluded since their subnets are"},{"line_number":383,"context_line":"        # visible"},{"line_number":384,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_b385c3ae","line":381,"in_reply_to":"7af24918_d3016f3b","updated":"2016-03-07 02:26:59.000000000","message":"Sorry, I meant \u0027shared\u0027: False :)","commit_id":"0ab3397bdcc0f54a1dbb6501c12ee4e3320192d7"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"57a962b0daf17ddd3e683ab82b9768086d20d4da","unresolved":false,"context_lines":[{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        subnets_iter \u003d (network[\u0027subnets\u0027]"},{"line_number":392,"context_line":"                        for network in body[\u0027networks\u0027]"},{"line_number":393,"context_line":"                        if not network[\u0027shared\u0027])"},{"line_number":394,"context_line":"        # subnets_iter is a list (iterator) of lists. This flattens it to a"},{"line_number":395,"context_line":"        # list of UUIDs"},{"line_number":396,"context_line":"        public_subnets_iter \u003d itertools.chain(*subnets_iter)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_5f224f01","side":"PARENT","line":393,"updated":"2016-03-08 19:02:47.000000000","message":"Right, but the issue is that is still racey. The network can become shared between when it is retrieved on L381 and when we do this list_subnets call.","commit_id":"22dd1c9d9489dffa56a5208ee50351c8c4c403b2"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"e9e3ab0bee4c8ddb89a04215226711025f217bbc","unresolved":false,"context_lines":[{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        subnets_iter \u003d (network[\u0027subnets\u0027]"},{"line_number":392,"context_line":"                        for network in body[\u0027networks\u0027]"},{"line_number":393,"context_line":"                        if not network[\u0027shared\u0027])"},{"line_number":394,"context_line":"        # subnets_iter is a list (iterator) of lists. This flattens it to a"},{"line_number":395,"context_line":"        # list of UUIDs"},{"line_number":396,"context_line":"        public_subnets_iter \u003d itertools.chain(*subnets_iter)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_5e21cc9e","side":"PARENT","line":393,"updated":"2016-03-08 10:07:34.000000000","message":"Shouldn\u0027t this exclude all the \"shared\" network already ?","commit_id":"22dd1c9d9489dffa56a5208ee50351c8c4c403b2"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"d05e2348b2ec273e2d6b60eb406327daeed86d87","unresolved":false,"context_lines":[{"line_number":375,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":376,"context_line":"    @test.idempotent_id(\u0027af774677-42a9-4e4b-bb58-16fe6a5bc1ec\u0027)"},{"line_number":377,"context_line":"    def test_external_network_visibility(self):"},{"line_number":378,"context_line":"        \"\"\"Verifies user can see external networks but not subnets.\"\"\""},{"line_number":379,"context_line":"        body \u003d self.networks_client.list_networks(**{\u0027router:external\u0027: True})"},{"line_number":380,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]]"},{"line_number":381,"context_line":"        self.assertNotEmpty(networks, \"No external networks found\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afc51ec_02955ce3","line":378,"updated":"2016-03-11 16:57:34.000000000","message":"I think this test should be made conditional to the external_net extension.","commit_id":"3ead5188132254c649a737190ad037f6a4cb9cf4"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"0dacca6e0bb505c2fb61a6de248798693ad1108d","unresolved":false,"context_lines":[{"line_number":389,"context_line":"        # belong to other tests and their state may have changed during this"},{"line_number":390,"context_line":"        # test"},{"line_number":391,"context_line":"        body \u003d self.subnets_client.list_subnets("},{"line_number":392,"context_line":"            network_id\u003dCONF.network.public_network_id)"},{"line_number":393,"context_line":"        self.assertEmpty(body[\u0027subnets\u0027], \"Public subnets visible\")"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3afc51ec_6279c02f","line":392,"updated":"2016-03-11 16:52:16.000000000","message":"um...if this var is not populated all subnets visible to the users","commit_id":"3ead5188132254c649a737190ad037f6a4cb9cf4"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"d05e2348b2ec273e2d6b60eb406327daeed86d87","unresolved":false,"context_lines":[{"line_number":389,"context_line":"        # belong to other tests and their state may have changed during this"},{"line_number":390,"context_line":"        # test"},{"line_number":391,"context_line":"        body \u003d self.subnets_client.list_subnets("},{"line_number":392,"context_line":"            network_id\u003dCONF.network.public_network_id)"},{"line_number":393,"context_line":"        self.assertEmpty(body[\u0027subnets\u0027], \"Public subnets visible\")"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3afc51ec_225fb873","line":392,"in_reply_to":"3afc51ec_6279c02f","updated":"2016-03-11 16:57:34.000000000","message":"*will be","commit_id":"3ead5188132254c649a737190ad037f6a4cb9cf4"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"0ec5b3a9d42b405648152eb599b740404a93c491","unresolved":false,"context_lines":[{"line_number":377,"context_line":"    @test.requires_ext(extension\u003d\u0027external-net\u0027, service\u003d\u0027network\u0027)"},{"line_number":378,"context_line":"    def test_external_network_visibility(self):"},{"line_number":379,"context_line":"        \"\"\"Verifies user can see external networks but not subnets.\"\"\""},{"line_number":380,"context_line":"        if not CONF.network.public_network_id:"},{"line_number":381,"context_line":"            raise self.skipException(\"public_network_id must be specified.\")"},{"line_number":382,"context_line":"        body \u003d self.networks_client.list_networks(**{\u0027router:external\u0027: True})"},{"line_number":383,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_4b73fcb1","line":380,"updated":"2016-03-11 18:51:18.000000000","message":"I am ok with skipping the test if there is not at least one external network we know of, otherwise the test outcome can really be unpredictable.","commit_id":"5c029359c09562a5af177f3e9dad004a2b8b05ce"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"632dfc5303c2de63c3c88a34a2f7cdcc10dbc22c","unresolved":false,"context_lines":[{"line_number":377,"context_line":"    @test.requires_ext(extension\u003d\u0027external-net\u0027, service\u003d\u0027network\u0027)"},{"line_number":378,"context_line":"    def test_external_network_visibility(self):"},{"line_number":379,"context_line":"        \"\"\"Verifies user can see external networks but not subnets.\"\"\""},{"line_number":380,"context_line":"        if not CONF.network.public_network_id:"},{"line_number":381,"context_line":"            raise self.skipException(\"public_network_id must be specified.\")"},{"line_number":382,"context_line":"        body \u003d self.networks_client.list_networks(**{\u0027router:external\u0027: True})"},{"line_number":383,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_0dde086d","line":380,"updated":"2016-03-13 19:10:37.000000000","message":"Looks to match style of other config skips. I will update it.","commit_id":"5c029359c09562a5af177f3e9dad004a2b8b05ce"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"2d849ade5d78ee77983bbeb2be0102b66ad21ab6","unresolved":false,"context_lines":[{"line_number":377,"context_line":"    @test.requires_ext(extension\u003d\u0027external-net\u0027, service\u003d\u0027network\u0027)"},{"line_number":378,"context_line":"    def test_external_network_visibility(self):"},{"line_number":379,"context_line":"        \"\"\"Verifies user can see external networks but not subnets.\"\"\""},{"line_number":380,"context_line":"        if not CONF.network.public_network_id:"},{"line_number":381,"context_line":"            raise self.skipException(\"public_network_id must be specified.\")"},{"line_number":382,"context_line":"        body \u003d self.networks_client.list_networks(**{\u0027router:external\u0027: True})"},{"line_number":383,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_0fb7353a","line":380,"in_reply_to":"3afc51ec_234fb0be","updated":"2016-03-11 23:33:08.000000000","message":"Agreed. Is this simply a matter of style, or there\u0027s more to it?","commit_id":"5c029359c09562a5af177f3e9dad004a2b8b05ce"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"c3f09fe0144b3ff9a7937d1e77583dd418b3b1d2","unresolved":false,"context_lines":[{"line_number":377,"context_line":"    @test.requires_ext(extension\u003d\u0027external-net\u0027, service\u003d\u0027network\u0027)"},{"line_number":378,"context_line":"    def test_external_network_visibility(self):"},{"line_number":379,"context_line":"        \"\"\"Verifies user can see external networks but not subnets.\"\"\""},{"line_number":380,"context_line":"        if not CONF.network.public_network_id:"},{"line_number":381,"context_line":"            raise self.skipException(\"public_network_id must be specified.\")"},{"line_number":382,"context_line":"        body \u003d self.networks_client.list_networks(**{\u0027router:external\u0027: True})"},{"line_number":383,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_234fb0be","line":380,"in_reply_to":"3afc51ec_4b73fcb1","updated":"2016-03-11 21:51:02.000000000","message":"We can skip this test by adding the following decorator\n\n\n    @testtools.skipUnless(CONF.network.public_network_id,\n                          \u0027The public_network_id option must be specified.\u0027)","commit_id":"5c029359c09562a5af177f3e9dad004a2b8b05ce"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8e7622de8fb311a8bc0dcfd183c0140cb0aaead4","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                       not net[\u0027router:external\u0027]]"},{"line_number":388,"context_line":"        self.assertEmpty(nonexternal, \"Found non-external networks\""},{"line_number":389,"context_line":"                                      \" in filtered list (%s).\" % nonexternal)"},{"line_number":390,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":391,"context_line":"        # only check the public network ID because the other networks may"},{"line_number":392,"context_line":"        # belong to other tests and their state may have changed during this"},{"line_number":393,"context_line":"        # test"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_e33032a1","line":390,"range":{"start_line":390,"start_character":21,"end_line":390,"end_character":22},"updated":"2016-03-11 17:40:56.000000000","message":"this check then won\u0027t be needed anymore then.","commit_id":"5c029359c09562a5af177f3e9dad004a2b8b05ce"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"86c8d5ce3b2015c4578a1d54fe6be7a086af1971","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                       not net[\u0027router:external\u0027]]"},{"line_number":388,"context_line":"        self.assertEmpty(nonexternal, \"Found non-external networks\""},{"line_number":389,"context_line":"                                      \" in filtered list (%s).\" % nonexternal)"},{"line_number":390,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":391,"context_line":"        # only check the public network ID because the other networks may"},{"line_number":392,"context_line":"        # belong to other tests and their state may have changed during this"},{"line_number":393,"context_line":"        # test"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_837cce21","line":390,"range":{"start_line":390,"start_character":21,"end_line":390,"end_character":22},"in_reply_to":"3afc51ec_63926259","updated":"2016-03-11 17:43:32.000000000","message":"I am a moron, don\u0027t mind me.","commit_id":"5c029359c09562a5af177f3e9dad004a2b8b05ce"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ef1f49c5852a9e9abc02c1a6593a08f68bbe32ee","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                       not net[\u0027router:external\u0027]]"},{"line_number":388,"context_line":"        self.assertEmpty(nonexternal, \"Found non-external networks\""},{"line_number":389,"context_line":"                                      \" in filtered list (%s).\" % nonexternal)"},{"line_number":390,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":391,"context_line":"        # only check the public network ID because the other networks may"},{"line_number":392,"context_line":"        # belong to other tests and their state may have changed during this"},{"line_number":393,"context_line":"        # test"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_ab4ba02a","line":390,"range":{"start_line":390,"start_character":21,"end_line":390,"end_character":22},"in_reply_to":"3afc51ec_837cce21","updated":"2016-03-11 18:53:57.000000000","message":"what I meant is that now this will only fail if a non-empty public network id is not visible to the user, which is fine, I guess.","commit_id":"5c029359c09562a5af177f3e9dad004a2b8b05ce"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"151de96f3e92d4668a29ddf327e0d64b7fb60a17","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                       not net[\u0027router:external\u0027]]"},{"line_number":388,"context_line":"        self.assertEmpty(nonexternal, \"Found non-external networks\""},{"line_number":389,"context_line":"                                      \" in filtered list (%s).\" % nonexternal)"},{"line_number":390,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":391,"context_line":"        # only check the public network ID because the other networks may"},{"line_number":392,"context_line":"        # belong to other tests and their state may have changed during this"},{"line_number":393,"context_line":"        # test"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_63926259","line":390,"range":{"start_line":390,"start_character":21,"end_line":390,"end_character":22},"in_reply_to":"3afc51ec_e33032a1","updated":"2016-03-11 17:42:49.000000000","message":"why? the name of the test is \u0027test_external_network_visibility\u0027. Don\u0027t you reckon it should test that it\u0027s visible?","commit_id":"5c029359c09562a5af177f3e9dad004a2b8b05ce"}]}
