)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"de7718726b2a353a252a7aaf3a1ba65259efe0ce","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add test case for deleting endpoint with space in url"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In the bug report, creating an endpoint with \"tenant_i d\" in any of"},{"line_number":10,"context_line":"its URLs (internal, public, or admin/auth) allegedly prevented the"},{"line_number":11,"context_line":"endpoint from being deleted."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This test case adds a space to all 3 URLs of an endpoint. It then"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba3cc151_0219dfd6","line":10,"updated":"2015-07-02 03:47:00.000000000","message":"what\u0027s admin/auth means here? thinking it should be admin instead.","commit_id":"85cbc4e69be5ae69a23c413d658f5fbd5886ede8"},{"author":{"_account_id":17073,"name":"Theodore Ilie","email":"theodorex.ilie@intel.com","username":"Lactem"},"change_message_id":"4bd653a3c1ace53230c99ad1b4597e31fc3efbd5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add test case for deleting endpoint with space in url"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In the bug report, creating an endpoint with \"tenant_i d\" in any of"},{"line_number":10,"context_line":"its URLs (internal, public, or admin/auth) allegedly prevented the"},{"line_number":11,"context_line":"endpoint from being deleted."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This test case adds a space to all 3 URLs of an endpoint. It then"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba3cc151_af66c227","line":10,"in_reply_to":"ba3cc151_0219dfd6","updated":"2015-07-02 15:04:08.000000000","message":"You\u0027re right. Thanks.","commit_id":"85cbc4e69be5ae69a23c413d658f5fbd5886ede8"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"de7718726b2a353a252a7aaf3a1ba65259efe0ce","unresolved":false,"context_lines":[{"line_number":10,"context_line":"its URLs (internal, public, or admin/auth) allegedly prevented the"},{"line_number":11,"context_line":"endpoint from being deleted."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This test case adds a space to all 3 URLs of an endpoint. It then"},{"line_number":14,"context_line":"deletes this endpoint and attempts to get it. If the get returns"},{"line_number":15,"context_line":"error 404, then it works."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba3cc151_e27abbf0","line":13,"updated":"2015-07-02 03:47:00.000000000","message":"d/`a`","commit_id":"85cbc4e69be5ae69a23c413d658f5fbd5886ede8"},{"author":{"_account_id":17073,"name":"Theodore Ilie","email":"theodorex.ilie@intel.com","username":"Lactem"},"change_message_id":"4bd653a3c1ace53230c99ad1b4597e31fc3efbd5","unresolved":false,"context_lines":[{"line_number":10,"context_line":"its URLs (internal, public, or admin/auth) allegedly prevented the"},{"line_number":11,"context_line":"endpoint from being deleted."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This test case adds a space to all 3 URLs of an endpoint. It then"},{"line_number":14,"context_line":"deletes this endpoint and attempts to get it. If the get returns"},{"line_number":15,"context_line":"error 404, then it works."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba3cc151_2f71520f","line":13,"in_reply_to":"ba3cc151_e27abbf0","updated":"2015-07-02 15:04:08.000000000","message":"I can\u0027t determine what d/a means in this context. Are you saying I should delete a? That wouldn\u0027t make a whole lot of sense. Please explain.","commit_id":"85cbc4e69be5ae69a23c413d658f5fbd5886ede8"}],"keystone/tests/unit/test_v3_catalog.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"fc43812f88df51236020cab4c6f66545268578d9","unresolved":false,"context_lines":[{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        self.assertEqual(endpoint_v2[\u0027region\u0027], endpoint_v3[\u0027region_id\u0027])"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"        # test for bug 1098564 -- endpoint didn\u0027t delete with a space in a url"},{"line_number":623,"context_line":"        # add a space to all urls"},{"line_number":624,"context_line":"        url_with_space \u003d \"http://127.0.0.1:8774 /v1.1/\\$(tenant_i d)s\""},{"line_number":625,"context_line":"        ref[\u0027publicurl\u0027] \u003d url_with_space"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_68ffec01","line":622,"updated":"2015-06-29 22:21:35.000000000","message":"I\u0027d rather see this be a separate test case so the name can call out what is happening.","commit_id":"150fd6992e89639f122bdd333e0e8a23a49da2bb"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"792dae1f83d4bed2cedef4d6e03096f450c63e2d","unresolved":false,"context_lines":[{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        self.assertEqual(endpoint_v2[\u0027region\u0027], endpoint_v3[\u0027region_id\u0027])"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"        # test for bug 1098564 -- endpoint didn\u0027t delete with a space in a url"},{"line_number":623,"context_line":"        # add a space to all urls"},{"line_number":624,"context_line":"        url_with_space \u003d \"http://127.0.0.1:8774 /v1.1/\\$(tenant_i d)s\""},{"line_number":625,"context_line":"        ref[\u0027publicurl\u0027] \u003d url_with_space"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_83832acc","line":622,"in_reply_to":"ba3cc151_68ffec01","updated":"2015-06-30 04:10:20.000000000","message":"agreed","commit_id":"150fd6992e89639f122bdd333e0e8a23a49da2bb"},{"author":{"_account_id":17073,"name":"Theodore Ilie","email":"theodorex.ilie@intel.com","username":"Lactem"},"change_message_id":"c9cc7d589a252f7f1534e4efef1f7f80f717e38d","unresolved":false,"context_lines":[{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        self.assertEqual(endpoint_v2[\u0027region\u0027], endpoint_v3[\u0027region_id\u0027])"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"        # test for bug 1098564 -- endpoint didn\u0027t delete with a space in a url"},{"line_number":623,"context_line":"        # add a space to all urls"},{"line_number":624,"context_line":"        url_with_space \u003d \"http://127.0.0.1:8774 /v1.1/\\$(tenant_i d)s\""},{"line_number":625,"context_line":"        ref[\u0027publicurl\u0027] \u003d url_with_space"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_59141543","line":622,"in_reply_to":"ba3cc151_83832acc","updated":"2015-06-30 16:01:15.000000000","message":"Thanks. I\u0027ll update this.","commit_id":"150fd6992e89639f122bdd333e0e8a23a49da2bb"},{"author":{"_account_id":16523,"name":"ZhangLei","display_name":"ZhangLei","email":"zhang.lei@99cloud.net","username":"zhang.lei"},"change_message_id":"1e391c3b9d874f2184770b478e014b4ce3a57e29","unresolved":false,"context_lines":[{"line_number":621,"context_line":""},{"line_number":622,"context_line":"        # test for bug 1098564 -- endpoint didn\u0027t delete with a space in a url"},{"line_number":623,"context_line":"        # add a space to all urls"},{"line_number":624,"context_line":"        url_with_space \u003d \"http://127.0.0.1:8774 /v1.1/\\$(tenant_i d)s\""},{"line_number":625,"context_line":"        ref[\u0027publicurl\u0027] \u003d url_with_space"},{"line_number":626,"context_line":"        ref[\u0027internalurl\u0027] \u003d url_with_space"},{"line_number":627,"context_line":"        ref[\u0027adminurl\u0027] \u003d url_with_space"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_3ae59808","line":624,"updated":"2015-06-30 08:42:58.000000000","message":"i d -\u003e id","commit_id":"150fd6992e89639f122bdd333e0e8a23a49da2bb"},{"author":{"_account_id":17073,"name":"Theodore Ilie","email":"theodorex.ilie@intel.com","username":"Lactem"},"change_message_id":"75e8d3218a7762823ac71238190c4209b5215ca6","unresolved":false,"context_lines":[{"line_number":621,"context_line":""},{"line_number":622,"context_line":"        # test for bug 1098564 -- endpoint didn\u0027t delete with a space in a url"},{"line_number":623,"context_line":"        # add a space to all urls"},{"line_number":624,"context_line":"        url_with_space \u003d \"http://127.0.0.1:8774 /v1.1/\\$(tenant_i d)s\""},{"line_number":625,"context_line":"        ref[\u0027publicurl\u0027] \u003d url_with_space"},{"line_number":626,"context_line":"        ref[\u0027internalurl\u0027] \u003d url_with_space"},{"line_number":627,"context_line":"        ref[\u0027adminurl\u0027] \u003d url_with_space"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_aab62988","line":624,"in_reply_to":"ba3cc151_3ae59808","updated":"2015-06-30 16:00:35.000000000","message":"I intentionally made this \"i d\" with a space because that\u0027s what the whole bug report is about, and hence the title \"endpoint didn\u0027t delete with a space in a url.\" I thought the variable name and its comment directly above would made that clear. Let me know if I should add something else, too.","commit_id":"150fd6992e89639f122bdd333e0e8a23a49da2bb"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b35b7e72afd307bc43e85fa0afb761a424f0e88b","unresolved":false,"context_lines":[{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        self.assertEqual(endpoint_v2[\u0027region\u0027], endpoint_v3[\u0027region_id\u0027])"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"    def test_delete_endpoint_with_space(self):"},{"line_number":621,"context_line":"        # test for bug 1098564 -- endpoint didn\u0027t delete with a space in a url"},{"line_number":622,"context_line":"        # make an endpoint"},{"line_number":623,"context_line":"        ref \u003d self.new_endpoint_ref(service_id\u003dself.service[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_c0d101cf","line":620,"updated":"2015-06-30 18:58:17.000000000","message":"suggest \u0027test_deleting_endpoint_with_space_in_url\u0027","commit_id":"4bc7b4411c6ea5a630e89596f8f7b1580c5d1a39"},{"author":{"_account_id":17073,"name":"Theodore Ilie","email":"theodorex.ilie@intel.com","username":"Lactem"},"change_message_id":"8abd271b7bd12055eeccceb4b7674106ad9227e6","unresolved":false,"context_lines":[{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        self.assertEqual(endpoint_v2[\u0027region\u0027], endpoint_v3[\u0027region_id\u0027])"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"    def test_delete_endpoint_with_space(self):"},{"line_number":621,"context_line":"        # test for bug 1098564 -- endpoint didn\u0027t delete with a space in a url"},{"line_number":622,"context_line":"        # make an endpoint"},{"line_number":623,"context_line":"        ref \u003d self.new_endpoint_ref(service_id\u003dself.service[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_88423b0f","line":620,"in_reply_to":"ba3cc151_c0d101cf","updated":"2015-06-30 21:25:53.000000000","message":"Would I not keep it \"delete\" rather than \"deleting\" for the reason that all the functions above and below this use that format? For example I see \"create\", \"test,\" \"update,\" and \"delete.\"","commit_id":"4bc7b4411c6ea5a630e89596f8f7b1580c5d1a39"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b35b7e72afd307bc43e85fa0afb761a424f0e88b","unresolved":false,"context_lines":[{"line_number":618,"context_line":"        self.assertEqual(endpoint_v2[\u0027region\u0027], endpoint_v3[\u0027region_id\u0027])"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"    def test_delete_endpoint_with_space(self):"},{"line_number":621,"context_line":"        # test for bug 1098564 -- endpoint didn\u0027t delete with a space in a url"},{"line_number":622,"context_line":"        # make an endpoint"},{"line_number":623,"context_line":"        ref \u003d self.new_endpoint_ref(service_id\u003dself.service[\u0027id\u0027])"},{"line_number":624,"context_line":"        # create the endpoint on v2 (using a v3 token)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_00efe987","line":621,"updated":"2015-06-30 18:58:17.000000000","message":"If you are disproving the bug then I think you can delete the comment.","commit_id":"4bc7b4411c6ea5a630e89596f8f7b1580c5d1a39"},{"author":{"_account_id":17073,"name":"Theodore Ilie","email":"theodorex.ilie@intel.com","username":"Lactem"},"change_message_id":"8abd271b7bd12055eeccceb4b7674106ad9227e6","unresolved":false,"context_lines":[{"line_number":618,"context_line":"        self.assertEqual(endpoint_v2[\u0027region\u0027], endpoint_v3[\u0027region_id\u0027])"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"    def test_delete_endpoint_with_space(self):"},{"line_number":621,"context_line":"        # test for bug 1098564 -- endpoint didn\u0027t delete with a space in a url"},{"line_number":622,"context_line":"        # make an endpoint"},{"line_number":623,"context_line":"        ref \u003d self.new_endpoint_ref(service_id\u003dself.service[\u0027id\u0027])"},{"line_number":624,"context_line":"        # create the endpoint on v2 (using a v3 token)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_c83843a3","line":621,"in_reply_to":"ba3cc151_00efe987","updated":"2015-06-30 21:25:53.000000000","message":"Thanks. That will be done in the next patch set.","commit_id":"4bc7b4411c6ea5a630e89596f8f7b1580c5d1a39"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b35b7e72afd307bc43e85fa0afb761a424f0e88b","unresolved":false,"context_lines":[{"line_number":640,"context_line":"        ref[\u0027publicurl\u0027] \u003d url_with_space"},{"line_number":641,"context_line":"        ref[\u0027internalurl\u0027] \u003d url_with_space"},{"line_number":642,"context_line":"        ref[\u0027adminurl\u0027] \u003d url_with_space"},{"line_number":643,"context_line":"        endpoint_v3[\u0027url\u0027] \u003d url_with_space"},{"line_number":644,"context_line":"        # get the size of the endpoint list before deleting"},{"line_number":645,"context_line":"        r \u003d self.get(\u0027/endpoints\u0027)"},{"line_number":646,"context_line":"        endpoints \u003d self.assertValidEndpointListResponse(r)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_40597159","line":643,"updated":"2015-06-30 18:58:17.000000000","message":"Should you be saving this to the database? And if you are you probably want to do this after line 623.","commit_id":"4bc7b4411c6ea5a630e89596f8f7b1580c5d1a39"},{"author":{"_account_id":17073,"name":"Theodore Ilie","email":"theodorex.ilie@intel.com","username":"Lactem"},"change_message_id":"773f6fde36783aff4d5d83b367caf2c403bdcc33","unresolved":false,"context_lines":[{"line_number":640,"context_line":"        ref[\u0027publicurl\u0027] \u003d url_with_space"},{"line_number":641,"context_line":"        ref[\u0027internalurl\u0027] \u003d url_with_space"},{"line_number":642,"context_line":"        ref[\u0027adminurl\u0027] \u003d url_with_space"},{"line_number":643,"context_line":"        endpoint_v3[\u0027url\u0027] \u003d url_with_space"},{"line_number":644,"context_line":"        # get the size of the endpoint list before deleting"},{"line_number":645,"context_line":"        r \u003d self.get(\u0027/endpoints\u0027)"},{"line_number":646,"context_line":"        endpoints \u003d self.assertValidEndpointListResponse(r)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_db857207","line":643,"in_reply_to":"ba3cc151_40597159","updated":"2015-06-30 19:13:05.000000000","message":"Thank you for the comments. I don\u0027t think I would need to save anything to any database, would I? I\u0027m just testing making the endpoint and then deleting it.","commit_id":"4bc7b4411c6ea5a630e89596f8f7b1580c5d1a39"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"ab6307121579771bd1ac82d3d8ddd60fca97a1aa","unresolved":false,"context_lines":[{"line_number":640,"context_line":"        ref[\u0027publicurl\u0027] \u003d url_with_space"},{"line_number":641,"context_line":"        ref[\u0027internalurl\u0027] \u003d url_with_space"},{"line_number":642,"context_line":"        ref[\u0027adminurl\u0027] \u003d url_with_space"},{"line_number":643,"context_line":"        endpoint_v3[\u0027url\u0027] \u003d url_with_space"},{"line_number":644,"context_line":"        # get the size of the endpoint list before deleting"},{"line_number":645,"context_line":"        r \u003d self.get(\u0027/endpoints\u0027)"},{"line_number":646,"context_line":"        endpoints \u003d self.assertValidEndpointListResponse(r)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_4e419ba8","line":643,"in_reply_to":"ba3cc151_db857207","updated":"2015-06-30 21:45:21.000000000","message":"Your endpoints don\u0027t have the space in the database so I wouldn\u0027t expect these tests to fail. If you want to test what the bug is claiming then you need to store the URL with the space in the database.","commit_id":"4bc7b4411c6ea5a630e89596f8f7b1580c5d1a39"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"83f7931108d8b00f51a7893d363af083e6580e93","unresolved":false,"context_lines":[{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        # test the endpoint on v3"},{"line_number":592,"context_line":"        r \u003d self.get(\u0027/endpoints\u0027)"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"        endpoints \u003d self.assertValidEndpointListResponse(r)"},{"line_number":595,"context_line":"        self.assertEqual(1, len(endpoints))"},{"line_number":596,"context_line":"        endpoint_v3 \u003d endpoints.pop()"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_51137766","line":593,"updated":"2015-07-01 00:09:33.000000000","message":"revert this unrelated whitespace change","commit_id":"8af6b6ec28c519ab177f9b86a2ec98d61c7e5502"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"83f7931108d8b00f51a7893d363af083e6580e93","unresolved":false,"context_lines":[{"line_number":619,"context_line":"        self.assertEqual(endpoint_v2[\u0027region\u0027], endpoint_v3[\u0027region_id\u0027])"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"    def test_deleting_endpoint_with_space_in_url(self):"},{"line_number":622,"context_line":"        # clear the v3 endpoint so we only have endpoints created on v2"},{"line_number":623,"context_line":"        self.delete("},{"line_number":624,"context_line":"            \u0027/endpoints/%(endpoint_id)s\u0027 % {"},{"line_number":625,"context_line":"                \u0027endpoint_id\u0027: self.endpoint_id})"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_11272fcb","line":622,"updated":"2015-07-01 00:09:33.000000000","message":"Why?","commit_id":"8af6b6ec28c519ab177f9b86a2ec98d61c7e5502"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"83f7931108d8b00f51a7893d363af083e6580e93","unresolved":false,"context_lines":[{"line_number":644,"context_line":"            body\u003d{\u0027endpoint\u0027: ref})"},{"line_number":645,"context_line":"        endpoint_v2 \u003d r.result[\u0027endpoint\u0027]"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"        # test the endpoint on v3"},{"line_number":648,"context_line":"        r \u003d self.get(\u0027/endpoints\u0027)"},{"line_number":649,"context_line":"        endpoints \u003d self.assertValidEndpointListResponse(r)"},{"line_number":650,"context_line":"        self.assertEqual(1, len(endpoints))"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_94832d56","line":647,"updated":"2015-07-01 00:09:33.000000000","message":"what is the point of this block? to test that the above operation failed?","commit_id":"8af6b6ec28c519ab177f9b86a2ec98d61c7e5502"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"83f7931108d8b00f51a7893d363af083e6580e93","unresolved":false,"context_lines":[{"line_number":649,"context_line":"        endpoints \u003d self.assertValidEndpointListResponse(r)"},{"line_number":650,"context_line":"        self.assertEqual(1, len(endpoints))"},{"line_number":651,"context_line":"        endpoint_v3 \u003d endpoints.pop()"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"        # get the size of the endpoint list before deleting"},{"line_number":655,"context_line":"        r \u003d self.get(\u0027/endpoints\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_3410214e","line":652,"updated":"2015-07-01 00:09:33.000000000","message":"extra newline here","commit_id":"8af6b6ec28c519ab177f9b86a2ec98d61c7e5502"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"83f7931108d8b00f51a7893d363af083e6580e93","unresolved":false,"context_lines":[{"line_number":651,"context_line":"        endpoint_v3 \u003d endpoints.pop()"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"        # get the size of the endpoint list before deleting"},{"line_number":655,"context_line":"        r \u003d self.get(\u0027/endpoints\u0027)"},{"line_number":656,"context_line":"        endpoints \u003d self.assertValidEndpointListResponse(r)"},{"line_number":657,"context_line":"        length_before \u003d len(endpoints)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_34aca1ec","line":654,"updated":"2015-07-01 00:09:33.000000000","message":"if you follow the suggestion below you don\u0027t need this block at all","commit_id":"8af6b6ec28c519ab177f9b86a2ec98d61c7e5502"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"83f7931108d8b00f51a7893d363af083e6580e93","unresolved":false,"context_lines":[{"line_number":660,"context_line":"        self.delete("},{"line_number":661,"context_line":"            \u0027/endpoints/%(endpoint_id)s\u0027 % {"},{"line_number":662,"context_line":"                \u0027endpoint_id\u0027: endpoint_v3[\u0027id\u0027]})"},{"line_number":663,"context_line":"        r \u003d self.get(\u0027/endpoints\u0027)"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"        # make sure it was deleted properly (list should shrink by 1)"},{"line_number":666,"context_line":"        endpoints \u003d self.assertValidEndpointListResponse(r)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba3cc151_f45e3911","line":663,"updated":"2015-07-01 00:09:33.000000000","message":"Instead of counting the endpoints why not \u0027GET\u0027 the one you just deleted. Then you don\u0027t need lines 665-669 at all.","commit_id":"8af6b6ec28c519ab177f9b86a2ec98d61c7e5502"},{"author":{"_account_id":16975,"name":"Akshay Aggarwal","email":"akshayx.aggarwal@intel.com","username":"Akshay"},"change_message_id":"f4782c69ec061233c6c8d845ff924f5b7cb64bb9","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from testtools import matchers"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from webtest.app import AppError"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from keystone import catalog"},{"line_number":23,"context_line":"from keystone.tests import unit as tests"},{"line_number":24,"context_line":"from keystone.tests.unit.ksfixtures import database"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_499964c3","line":21,"updated":"2015-07-01 17:33:47.000000000","message":"Delete the extra space ^","commit_id":"1cc95817066dace80dd70c2eed866d97436dc145"},{"author":{"_account_id":17073,"name":"Theodore Ilie","email":"theodorex.ilie@intel.com","username":"Lactem"},"change_message_id":"b3ace746c0803dc74a79497502cbbe408f065001","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from testtools import matchers"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from webtest.app import AppError"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from keystone import catalog"},{"line_number":23,"context_line":"from keystone.tests import unit as tests"},{"line_number":24,"context_line":"from keystone.tests.unit.ksfixtures import database"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_e93e388b","line":21,"in_reply_to":"ba3cc151_499964c3","updated":"2015-07-01 17:35:34.000000000","message":"This space is necessary to keep the imports divided up correctly.","commit_id":"1cc95817066dace80dd70c2eed866d97436dc145"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"dddbf01854ce73332194f6a573f7ecf70c9887de","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from testtools import matchers"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from webtest.app import AppError"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from keystone import catalog"},{"line_number":23,"context_line":"from keystone.tests import unit as tests"},{"line_number":24,"context_line":"from keystone.tests.unit.ksfixtures import database"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_134aa1ac","line":21,"in_reply_to":"ba3cc151_e93e388b","updated":"2015-07-01 20:33:47.000000000","message":"this should be grouped with testtools since they are both third-party, but i don\u0027t think it is needed. See below.","commit_id":"1cc95817066dace80dd70c2eed866d97436dc145"},{"author":{"_account_id":16975,"name":"Akshay Aggarwal","email":"akshayx.aggarwal@intel.com","username":"Akshay"},"change_message_id":"f4782c69ec061233c6c8d845ff924f5b7cb64bb9","unresolved":false,"context_lines":[{"line_number":623,"context_line":"        # add a space to all urls (intentional \"i d\" to test bug)"},{"line_number":624,"context_line":"        url_with_space \u003d \"http://127.0.0.1:8774 /v1.1/\\$(tenant_i d)s\""},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"        # create a v3 endpoint ref, and then tweak it back to a v2-style ref"},{"line_number":627,"context_line":"        ref \u003d self.new_endpoint_ref(service_id\u003dself.service[\u0027id\u0027])"},{"line_number":628,"context_line":"        del ref[\u0027id\u0027]"},{"line_number":629,"context_line":"        del ref[\u0027interface\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_298c207e","line":626,"updated":"2015-07-01 17:33:47.000000000","message":"Your notes should be more specific","commit_id":"1cc95817066dace80dd70c2eed866d97436dc145"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"dddbf01854ce73332194f6a573f7ecf70c9887de","unresolved":false,"context_lines":[{"line_number":623,"context_line":"        # add a space to all urls (intentional \"i d\" to test bug)"},{"line_number":624,"context_line":"        url_with_space \u003d \"http://127.0.0.1:8774 /v1.1/\\$(tenant_i d)s\""},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"        # create a v3 endpoint ref, and then tweak it back to a v2-style ref"},{"line_number":627,"context_line":"        ref \u003d self.new_endpoint_ref(service_id\u003dself.service[\u0027id\u0027])"},{"line_number":628,"context_line":"        del ref[\u0027id\u0027]"},{"line_number":629,"context_line":"        del ref[\u0027interface\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_f3fa9d42","line":626,"in_reply_to":"ba3cc151_298c207e","updated":"2015-07-01 20:33:47.000000000","message":"this is OK since it is a common pattern in this file","commit_id":"1cc95817066dace80dd70c2eed866d97436dc145"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"dddbf01854ce73332194f6a573f7ecf70c9887de","unresolved":false,"context_lines":[{"line_number":640,"context_line":"            token\u003dself.get_scoped_token(),"},{"line_number":641,"context_line":"            body\u003d{\u0027endpoint\u0027: ref})"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"        # get the v3 endpoint"},{"line_number":644,"context_line":"        r \u003d self.get(\u0027/endpoints\u0027)"},{"line_number":645,"context_line":"        endpoints \u003d self.assertValidEndpointListResponse(r)"},{"line_number":646,"context_line":"        endpoint_v3 \u003d endpoints.pop()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_6c430f43","line":643,"updated":"2015-07-01 20:33:47.000000000","message":"If you get the endpoint out of the previous POST you don\u0027t even need this block at all.","commit_id":"1cc95817066dace80dd70c2eed866d97436dc145"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"dddbf01854ce73332194f6a573f7ecf70c9887de","unresolved":false,"context_lines":[{"line_number":646,"context_line":"        endpoint_v3 \u003d endpoints.pop()"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"        # delete the endpoint"},{"line_number":649,"context_line":"        self.delete("},{"line_number":650,"context_line":"            \u0027/endpoints/%(endpoint_id)s\u0027 % {"},{"line_number":651,"context_line":"                \u0027endpoint_id\u0027: endpoint_v3[\u0027id\u0027]})"},{"line_number":652,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_2c1bc774","line":649,"updated":"2015-07-01 20:33:47.000000000","message":"You could also shorted this line I describe below and it would fit on one line and not be any less readable.","commit_id":"1cc95817066dace80dd70c2eed866d97436dc145"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"dddbf01854ce73332194f6a573f7ecf70c9887de","unresolved":false,"context_lines":[{"line_number":651,"context_line":"                \u0027endpoint_id\u0027: endpoint_v3[\u0027id\u0027]})"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"        # make sure it\u0027s deleted (GET shouldn\u0027t work)"},{"line_number":654,"context_line":"        try:"},{"line_number":655,"context_line":"            r \u003d self.get("},{"line_number":656,"context_line":"                \u0027/endpoints/%(endpoint_id)s\u0027 % {"},{"line_number":657,"context_line":"                    \u0027endpoint_id\u0027: endpoint_v3[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_0e2b5a95","line":654,"updated":"2015-07-01 20:33:47.000000000","message":"You don\u0027t have to do a try-except here. The self.get() method takes an expected status so you can tell it to expect a 404. Lines 654-663 can be replaced with:\n\nself.get(\u0027/endpoints/%s\u0027 % endpoint_v3[\u0027id\u0027], expected_status\u003d404)\n\n* no need for \u0027r \u003d \u0027 since we don\u0027t use it\n* i prefer %s over %(name)s when there is only 1 thing","commit_id":"1cc95817066dace80dd70c2eed866d97436dc145"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"de7718726b2a353a252a7aaf3a1ba65259efe0ce","unresolved":false,"context_lines":[{"line_number":629,"context_line":"        ref[\u0027url\u0027] \u003d url_with_space"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"        # add the endpoint to the database"},{"line_number":632,"context_line":"        r \u003d self.post(\u0027/endpoints\u0027, body\u003d{\u0027endpoint\u0027: ref})"},{"line_number":633,"context_line":"        endpoint \u003d r.result[\u0027endpoint\u0027]"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"        # delete the endpoint"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_22f0a390","line":632,"updated":"2015-07-02 03:47:00.000000000","message":"suggest to assert the endpoint has been added successfully here, then we can safely fetch the value from the response, and it will be more clear that the endpoints could be indeed added to DB, and thus prove your comments in that bug is correct.","commit_id":"85cbc4e69be5ae69a23c413d658f5fbd5886ede8"},{"author":{"_account_id":17073,"name":"Theodore Ilie","email":"theodorex.ilie@intel.com","username":"Lactem"},"change_message_id":"4bd653a3c1ace53230c99ad1b4597e31fc3efbd5","unresolved":false,"context_lines":[{"line_number":629,"context_line":"        ref[\u0027url\u0027] \u003d url_with_space"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"        # add the endpoint to the database"},{"line_number":632,"context_line":"        r \u003d self.post(\u0027/endpoints\u0027, body\u003d{\u0027endpoint\u0027: ref})"},{"line_number":633,"context_line":"        endpoint \u003d r.result[\u0027endpoint\u0027]"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"        # delete the endpoint"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_4f8856c5","line":632,"in_reply_to":"ba3cc151_22f0a390","updated":"2015-07-02 15:04:08.000000000","message":"I can already be sure that it has been successfully added because line 636 (where I delete the endpoint) would throw an error since you cannot delete an endpoint if it doesn\u0027t exist in the database.","commit_id":"85cbc4e69be5ae69a23c413d658f5fbd5886ede8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0914eb03f43abf0d8d9782fd5ecbc84346a4c4d8","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        url_with_space \u003d \"http://127.0.0.1:8774 /v1.1/\\$(tenant_i d)s\""},{"line_number":626,"context_line":"        ref[\u0027publicurl\u0027] \u003d url_with_space"},{"line_number":627,"context_line":"        ref[\u0027internalurl\u0027] \u003d url_with_space"},{"line_number":628,"context_line":"        ref[\u0027adminurl\u0027] \u003d url_with_space"},{"line_number":629,"context_line":"        ref[\u0027url\u0027] \u003d url_with_space"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"        # add the endpoint to the database"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_95a179fa","line":628,"updated":"2015-07-02 21:45:59.000000000","message":"these are v2 specific, right? For v3 we only care about endpoint[\u0027url\u0027], right? \n\nhttps://github.com/openstack/keystone/blob/0d84009c0cfa07219730973160422bb7cb898f17/keystone/catalog/schema.py#L83\n\nIt looks like the regular expression we use for url validation doesn\u0027t catch spaces\n\nhttp://cdn.pasteraw.com/64dxhtndsbjut7q87gc0aucjqhr0vq3\n\nI wonder if we should include a regular expression for url validation that doesn\u0027t allow for the creation of urls with spaces in the string?","commit_id":"b7eca4880e5227eb48b0a41f19ae38c397cd68fd"},{"author":{"_account_id":17073,"name":"Theodore Ilie","email":"theodorex.ilie@intel.com","username":"Lactem"},"change_message_id":"298fb980cfce1005995a21a0b527c0aae66df3d0","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        url_with_space \u003d \"http://127.0.0.1:8774 /v1.1/\\$(tenant_i d)s\""},{"line_number":626,"context_line":"        ref[\u0027publicurl\u0027] \u003d url_with_space"},{"line_number":627,"context_line":"        ref[\u0027internalurl\u0027] \u003d url_with_space"},{"line_number":628,"context_line":"        ref[\u0027adminurl\u0027] \u003d url_with_space"},{"line_number":629,"context_line":"        ref[\u0027url\u0027] \u003d url_with_space"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"        # add the endpoint to the database"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_5500d165","line":628,"in_reply_to":"ba3cc151_95a179fa","updated":"2015-07-02 21:59:07.000000000","message":"Yes those are v2-specific. I add a space for good measure. Suppressing spaces in URLs would be a good idea, but it\u0027s beyond the scope of this patch. I can submit that as a wishlist.","commit_id":"b7eca4880e5227eb48b0a41f19ae38c397cd68fd"}]}
