)]}'
{"nova/tests/functional/api_sample_tests/test_keypairs.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"62e4d26f6303460086aed5c8ed84acb52a4fedb1","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        self.assertEqual(403, response.status_code)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def test_keypairs_list_for_different_users(self):"},{"line_number":241,"context_line":"        # it is not forbidden for not admin"},{"line_number":242,"context_line":"        pass"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_3ede6111","line":241,"updated":"2016-08-04 13:26:05.000000000","message":"Do you mean it is forbidden for non admin?","commit_id":"a64eb731e1cf15cdbf0d7712fa38924e2650c1d4"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"59a72e1bf43aca0e093fcb525849e70dfbd422f5","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        self.assertEqual(403, response.status_code)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def test_keypairs_list_for_different_users(self):"},{"line_number":241,"context_line":"        # it is not forbidden for not admin"},{"line_number":242,"context_line":"        pass"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_863f18b3","line":241,"in_reply_to":"bacf61ea_3ede6111","updated":"2016-08-05 09:03:57.000000000","message":"of course yes, sorry","commit_id":"a64eb731e1cf15cdbf0d7712fa38924e2650c1d4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"62e4d26f6303460086aed5c8ed84acb52a4fedb1","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        response \u003d self._do_get(\u0027os-keypairs?user_id\u003duser1\u0026marker\u003d%s\u0027"},{"line_number":305,"context_line":"                                % keypairs_user1[1])"},{"line_number":306,"context_line":"        subs \u003d {\u0027keypair_name\u0027: keypairs_user1[2]}"},{"line_number":307,"context_line":"        self._verify_response(\u0027keypairs-list-user1-resp\u0027, subs, response, 200)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        # get only one keypair after the second for user2"},{"line_number":310,"context_line":"        response \u003d self._do_get(\u0027os-keypairs?user_id\u003duser2\u0026marker\u003d%s\u0026limit\u003d1\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_3e2ca101","line":307,"updated":"2016-08-04 13:26:05.000000000","message":"If you\u0027re not changing anything else in the line you should avoid whitespace only changes. Even though it looks better after the change :)","commit_id":"a64eb731e1cf15cdbf0d7712fa38924e2650c1d4"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"59a72e1bf43aca0e093fcb525849e70dfbd422f5","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        response \u003d self._do_get(\u0027os-keypairs?user_id\u003duser1\u0026marker\u003d%s\u0027"},{"line_number":305,"context_line":"                                % keypairs_user1[1])"},{"line_number":306,"context_line":"        subs \u003d {\u0027keypair_name\u0027: keypairs_user1[2]}"},{"line_number":307,"context_line":"        self._verify_response(\u0027keypairs-list-user1-resp\u0027, subs, response, 200)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        # get only one keypair after the second for user2"},{"line_number":310,"context_line":"        response \u003d self._do_get(\u0027os-keypairs?user_id\u003duser2\u0026marker\u003d%s\u0026limit\u003d1\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_c6b8f013","line":307,"in_reply_to":"bacf61ea_3e2ca101","updated":"2016-08-05 09:03:57.000000000","message":"I understand that these are just style changes. But they are related to my previous patch and I want to to make this beautiful:) I think it could be done here","commit_id":"a64eb731e1cf15cdbf0d7712fa38924e2650c1d4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"ab395ecfdb8daf1ac97b5a21c969469e72d97480","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def test_keypairs_list_for_different_users(self):"},{"line_number":241,"context_line":"        # it is forbidden for non admin"},{"line_number":242,"context_line":"        pass"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"class KeyPairsV235SampleJsonTest(api_sample_base.ApiSampleTestBaseV21):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_bb50120c","line":242,"updated":"2016-08-24 14:49:39.000000000","message":"This should check that 403 is returned like the test right above this.","commit_id":"847022235e5c443fe0fffd48ea9592585baedb0f"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"d56bd898ba4b1f3cb020f9447311ec9759d37fd8","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def test_keypairs_list_for_different_users(self):"},{"line_number":241,"context_line":"        # it is forbidden for non admin"},{"line_number":242,"context_line":"        pass"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"class KeyPairsV235SampleJsonTest(api_sample_base.ApiSampleTestBaseV21):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_1eb1fd8f","line":242,"in_reply_to":"1ac06dbe_bb50120c","updated":"2016-08-25 16:10:58.000000000","message":"Done","commit_id":"847022235e5c443fe0fffd48ea9592585baedb0f"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"1a7c90d78ad195e71981a828df3c9b8d83e0d4b6","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        pass"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"class KeyPairsV235SampleJsonTest(api_sample_base.ApiSampleTestBaseV21):"},{"line_number":246,"context_line":"    ADMIN_API \u003d True"},{"line_number":247,"context_line":"    sample_dir \u003d \"keypairs\""},{"line_number":248,"context_line":"    microversion \u003d \u00272.35\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_f0367f01","line":245,"range":{"start_line":245,"start_character":33,"end_line":245,"end_character":69},"updated":"2016-08-05 12:03:20.000000000","message":"why not inherit from KeyPairsSampleJsonTest?","commit_id":"847022235e5c443fe0fffd48ea9592585baedb0f"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"1a7c90d78ad195e71981a828df3c9b8d83e0d4b6","unresolved":false,"context_lines":[{"line_number":264,"context_line":"            keypair_type\u003dkeypair_obj.KEYPAIR_TYPE_SSH,"},{"line_number":265,"context_line":"            user_id\u003duser, kp_name\u003dkp_name)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    def _check_keypairs_post(self, **kwargs):"},{"line_number":268,"context_line":"        \"\"\"Get api sample of key pairs post request.\"\"\""},{"line_number":269,"context_line":"        key_name \u003d kwargs.pop(\u0027kp_name\u0027, None)"},{"line_number":270,"context_line":"        if not key_name:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_902623cc","line":267,"range":{"start_line":267,"start_character":8,"end_line":267,"end_character":28},"updated":"2016-08-05 12:03:20.000000000","message":"you could reuse this method from parent class instead","commit_id":"847022235e5c443fe0fffd48ea9592585baedb0f"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"1a7c90d78ad195e71981a828df3c9b8d83e0d4b6","unresolved":false,"context_lines":[{"line_number":278,"context_line":"                              self.expected_post_status_code)"},{"line_number":279,"context_line":"        return key_name"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def test_keypairs_list(self):"},{"line_number":282,"context_line":"        # Get api sample of key pairs list request."},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        # sort key_pairs by name before paging"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_63112b52","line":281,"range":{"start_line":281,"start_character":8,"end_line":281,"end_character":26},"updated":"2016-08-05 12:03:20.000000000","message":"you could also slightly change this in parent and reuse it too","commit_id":"847022235e5c443fe0fffd48ea9592585baedb0f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"ab395ecfdb8daf1ac97b5a21c969469e72d97480","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        response \u003d self._do_get(\u0027os-keypairs?user_id\u003duser1\u0026marker\u003d%s\u0027"},{"line_number":305,"context_line":"                                % keypairs_user1[1])"},{"line_number":306,"context_line":"        subs \u003d {\u0027keypair_name\u0027: keypairs_user1[2]}"},{"line_number":307,"context_line":"        self._verify_response(\u0027keypairs-list-user1-resp\u0027, subs, response, 200)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        # get only one keypair after the second for user2"},{"line_number":310,"context_line":"        response \u003d self._do_get(\u0027os-keypairs?user_id\u003duser2\u0026marker\u003d%s\u0026limit\u003d1\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_5b4abe28","line":307,"updated":"2016-08-24 14:49:39.000000000","message":"This is cleaner, but these changes should be avoided. I\u0027m not -1 on this because it is changing the tests that are relevant for this patch.","commit_id":"847022235e5c443fe0fffd48ea9592585baedb0f"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"cca21a60e697e7ed4fe844215818449bfe7d8185","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        self.assertEqual(403, response.status_code)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def test_keypairs_list_for_different_users(self):"},{"line_number":244,"context_line":"        # create common kp_name for two users"},{"line_number":245,"context_line":"        kp_name \u003d \u0027keypair-\u0027 + str(uuid.uuid4())"},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_4402880c","line":243,"range":{"start_line":243,"start_character":8,"end_line":243,"end_character":46},"updated":"2016-08-25 17:00:59.000000000","message":"Actually this test is the same as \u0027test_keypairs_post_for_other_user\u0027, that\u0027s why in my previous patchset I decided to write just \u0027pass\u0027.\n\nBut this test now also seems to be good, because we have the same testcase for ADMIN and NOT_ADMIN.","commit_id":"1d46b10657cefdd52ce510fdf606e738d34582cd"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"cca21a60e697e7ed4fe844215818449bfe7d8185","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        self.assertEqual(403, response.status_code)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def test_keypairs_list_for_different_users(self):"},{"line_number":244,"context_line":"        # create common kp_name for two users"},{"line_number":245,"context_line":"        kp_name \u003d \u0027keypair-\u0027 + str(uuid.uuid4())"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        subs1 \u003d self._get_subs(keypair_type\u003dkeypair_obj.KEYPAIR_TYPE_SSH,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_d863f8db","line":244,"range":{"start_line":244,"start_character":8,"end_line":244,"end_character":45},"updated":"2016-08-25 17:00:59.000000000","message":"is the comment ok?","commit_id":"1d46b10657cefdd52ce510fdf606e738d34582cd"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"33cc7bf82857a2e83448358452f627a27e0c547d","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        self.assertEqual(403, response.status_code)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def test_keypairs_list_for_different_users(self):"},{"line_number":244,"context_line":"        # create common kp_name for two users"},{"line_number":245,"context_line":"        kp_name \u003d \u0027keypair-\u0027 + str(uuid.uuid4())"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        subs1 \u003d self._get_subs(keypair_type\u003dkeypair_obj.KEYPAIR_TYPE_SSH,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_182bd095","line":244,"range":{"start_line":244,"start_character":8,"end_line":244,"end_character":45},"in_reply_to":"1ac06dbe_d863f8db","updated":"2016-08-25 17:17:16.000000000","message":"Yes.","commit_id":"1d46b10657cefdd52ce510fdf606e738d34582cd"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"cca21a60e697e7ed4fe844215818449bfe7d8185","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                               user_id\u003d\"user1\", kp_name\u003dkp_name)"},{"line_number":249,"context_line":"        response \u003d self._do_post(\u0027os-keypairs\u0027, \u0027keypairs-post-req\u0027, subs1)"},{"line_number":250,"context_line":"        self.assertEqual(403, response.status_code)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        subs2 \u003d self._get_subs(keypair_type\u003dkeypair_obj.KEYPAIR_TYPE_SSH,"},{"line_number":253,"context_line":"                               user_id\u003d\"user2\", kp_name\u003dkp_name)"},{"line_number":254,"context_line":"        response \u003d self._do_post(\u0027os-keypairs\u0027, \u0027keypairs-post-req\u0027, subs2)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_38bfacfc","line":251,"updated":"2016-08-25 17:00:59.000000000","message":"should we do for \u0027user1\u0027 and \u0027user2\u0027? I think yes only to make this test similar to the same case for ADMIN","commit_id":"1d46b10657cefdd52ce510fdf606e738d34582cd"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"33cc7bf82857a2e83448358452f627a27e0c547d","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                               user_id\u003d\"user1\", kp_name\u003dkp_name)"},{"line_number":249,"context_line":"        response \u003d self._do_post(\u0027os-keypairs\u0027, \u0027keypairs-post-req\u0027, subs1)"},{"line_number":250,"context_line":"        self.assertEqual(403, response.status_code)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        subs2 \u003d self._get_subs(keypair_type\u003dkeypair_obj.KEYPAIR_TYPE_SSH,"},{"line_number":253,"context_line":"                               user_id\u003d\"user2\", kp_name\u003dkp_name)"},{"line_number":254,"context_line":"        response \u003d self._do_post(\u0027os-keypairs\u0027, \u0027keypairs-post-req\u0027, subs2)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_5b9ee2b8","line":251,"in_reply_to":"1ac06dbe_38bfacfc","updated":"2016-08-25 17:17:16.000000000","message":"Yes. But what I was expecting was that the keypairs could be created successfully and then the _do_get would fail with 403. But if it is not possible to create the keypairs here I would be okay if you just left a comment explaining that they can\u0027t be created so the list can\u0027t be tested. And then just pass like you had before. Because this method should really be checking the response from a list command.","commit_id":"1d46b10657cefdd52ce510fdf606e738d34582cd"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"cca21a60e697e7ed4fe844215818449bfe7d8185","unresolved":false,"context_lines":[{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def _check_keypairs_post(self, **kwargs):"},{"line_number":281,"context_line":"        \"\"\"Get api sample of key pairs post request.\"\"\""},{"line_number":282,"context_line":"        key_name \u003d kwargs.pop(\u0027kp_name\u0027, None)"},{"line_number":283,"context_line":"        if not key_name:"},{"line_number":284,"context_line":"            key_name \u003d \u0027keypair-\u0027 + str(uuid.uuid4())"},{"line_number":285,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_d86db89a","line":282,"updated":"2016-08-25 17:00:59.000000000","message":"I want clean this here, also on line 320 and 326","commit_id":"1d46b10657cefdd52ce510fdf606e738d34582cd"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"33cc7bf82857a2e83448358452f627a27e0c547d","unresolved":false,"context_lines":[{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def _check_keypairs_post(self, **kwargs):"},{"line_number":281,"context_line":"        \"\"\"Get api sample of key pairs post request.\"\"\""},{"line_number":282,"context_line":"        key_name \u003d kwargs.pop(\u0027kp_name\u0027, None)"},{"line_number":283,"context_line":"        if not key_name:"},{"line_number":284,"context_line":"            key_name \u003d \u0027keypair-\u0027 + str(uuid.uuid4())"},{"line_number":285,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_38ab2c1f","line":282,"in_reply_to":"1ac06dbe_d86db89a","updated":"2016-08-25 17:17:16.000000000","message":"That\u0027s fine with me. Normally it should be avoided, but it\u0027s modifying code that\u0027s related to the tests above.","commit_id":"1d46b10657cefdd52ce510fdf606e738d34582cd"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"a463afdf6f6985b92e39339f131c286cd6b46fc1","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    def test_keypairs_list_for_different_users(self):"},{"line_number":241,"context_line":"        # post for other users is forbidden for non admin,"},{"line_number":242,"context_line":"        # so keypairs-list couldn\u0027t be tested"},{"line_number":243,"context_line":"        pass"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"class KeyPairsV235SampleJsonTest(api_sample_base.ApiSampleTestBaseV21):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_c1d16acf","line":243,"updated":"2016-08-26 15:01:29.000000000","message":"I played around with this a bit. You can create keypairs for user \u0027fake\u0027 but I actually don\u0027t think that\u0027s necessary. You just want to confirm that a list for another user returns 403. So something like:\n\n    response \u003d self._do_get(\u0027os-keypairs?user_id\u003dfake1\u0027)\n    self.assertEqual(403, response.status_code)","commit_id":"fad219cbc9cad33936fb44ec25b897c541ee2fb9"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"d1694b0d60d821a4faf9c3f01e063a7b53eb0d7b","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    def test_keypairs_list_for_different_users(self):"},{"line_number":241,"context_line":"        # post for other users is forbidden for non admin,"},{"line_number":242,"context_line":"        # so keypairs-list couldn\u0027t be tested"},{"line_number":243,"context_line":"        pass"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"class KeyPairsV235SampleJsonTest(api_sample_base.ApiSampleTestBaseV21):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_00d134fa","line":243,"in_reply_to":"fa7ab95a_c1d16acf","updated":"2016-08-29 14:12:47.000000000","message":"ok, agree","commit_id":"fad219cbc9cad33936fb44ec25b897c541ee2fb9"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b99fac172ddadcf46d4286e155755f74d43d849c","unresolved":false,"context_lines":[{"line_number":207,"context_line":"            user_id\u003d\"user1\", kp_name\u003dkp_name)"},{"line_number":208,"context_line":"        keypair_user2 \u003d self._check_keypairs_post("},{"line_number":209,"context_line":"            keypair_type\u003dkeypair_obj.KEYPAIR_TYPE_SSH,"},{"line_number":210,"context_line":"            user_id\u003d\"user2\", kp_name\u003dkp_name)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        # get all keypairs for user1 (only one)"},{"line_number":213,"context_line":"        response \u003d self._do_get(\u0027os-keypairs?user_id\u003duser1\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa7ab95a_3efe29ae","line":210,"updated":"2016-08-30 08:07:56.000000000","message":"I believe the bug wanted to create these with a non-admin user, then list with the admin user.\n\nWhile the above is a better end to end test case, I see that this should work OK.","commit_id":"260bb7cbf638a4efee708c0c901495905a4c66eb"}]}
