)]}'
{".zuul.yaml":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"158932c13aeb7d06b7c7872c2875efc485cad52d","unresolved":true,"context_lines":[{"line_number":9,"context_line":"    vars:"},{"line_number":10,"context_line":"      tox_envlist: all"},{"line_number":11,"context_line":"      tempest_test_regex: \u0027glance_tempest_plugin.tests.rbac\u0027"},{"line_number":12,"context_line":"      tempest_concurrency: 1"},{"line_number":13,"context_line":"      devstack_localrc:"},{"line_number":14,"context_line":"        GLANCE_ENFORCE_SCOPE: True"},{"line_number":15,"context_line":"        TEMPEST_PLUGINS: \u0027/opt/stack/glance-tempest-plugin\u0027"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"dc535648_49dd81e5","line":12,"range":{"start_line":12,"start_character":6,"end_line":12,"end_character":28},"updated":"2021-08-26 17:24:24.000000000","message":"Need to run these tests in serial mode because,\nWe are creating 4 resources in each test run and other test might access theses resources which  will lead to failure or unexpected results.","commit_id":"3856d723c71f575ff0e7627dc20b13f2691d6ca1"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f63102bfaabb0e07b285ff009b9060763f472e17","unresolved":true,"context_lines":[{"line_number":9,"context_line":"    vars:"},{"line_number":10,"context_line":"      tox_envlist: all"},{"line_number":11,"context_line":"      tempest_test_regex: \u0027glance_tempest_plugin.tests.rbac\u0027"},{"line_number":12,"context_line":"      tempest_concurrency: 1"},{"line_number":13,"context_line":"      devstack_localrc:"},{"line_number":14,"context_line":"        GLANCE_ENFORCE_SCOPE: True"},{"line_number":15,"context_line":"        TEMPEST_PLUGINS: \u0027/opt/stack/glance-tempest-plugin\u0027"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"497af781_05315f3a","line":12,"range":{"start_line":12,"start_character":6,"end_line":12,"end_character":28},"updated":"2021-08-30 16:53:29.000000000","message":"I think this is what you asked on IRC about. is this test issue or glance APIs that test cannot be run in parallel?","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"81920b614f524af747ad75243cdfd333cae93504","unresolved":true,"context_lines":[{"line_number":9,"context_line":"    vars:"},{"line_number":10,"context_line":"      tox_envlist: all"},{"line_number":11,"context_line":"      tempest_test_regex: \u0027glance_tempest_plugin.tests.rbac\u0027"},{"line_number":12,"context_line":"      tempest_concurrency: 1"},{"line_number":13,"context_line":"      devstack_localrc:"},{"line_number":14,"context_line":"        GLANCE_ENFORCE_SCOPE: True"},{"line_number":15,"context_line":"        TEMPEST_PLUGINS: \u0027/opt/stack/glance-tempest-plugin\u0027"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"8ca18e74_64b0ab0d","line":12,"range":{"start_line":12,"start_character":6,"end_line":12,"end_character":28},"in_reply_to":"174f0f85_f6384b0f","updated":"2021-08-30 17:22:03.000000000","message":"If test cases are from same test class then they always run serially so you can create and use the same resources among the tests in same test class.\n\nIf you are saying test from different test class use same resources data then this is problem and\n\n- people will not be able to run them in parallel mean there is pre conditions to be run them serially and we should control that automatically in test module with lock or so instead of relying on test runner to know about it.\n\n- it can disturb the production env if you run them against it especially cleanup of created data by which test or so.\n\nI strongly feel we should not write test this way instead isolate the each test class data or use lock.","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e54c2acce9cf74c4411f84555d2631261226aae2","unresolved":true,"context_lines":[{"line_number":9,"context_line":"    vars:"},{"line_number":10,"context_line":"      tox_envlist: all"},{"line_number":11,"context_line":"      tempest_test_regex: \u0027glance_tempest_plugin.tests.rbac\u0027"},{"line_number":12,"context_line":"      tempest_concurrency: 1"},{"line_number":13,"context_line":"      devstack_localrc:"},{"line_number":14,"context_line":"        GLANCE_ENFORCE_SCOPE: True"},{"line_number":15,"context_line":"        TEMPEST_PLUGINS: \u0027/opt/stack/glance-tempest-plugin\u0027"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"174f0f85_f6384b0f","line":12,"range":{"start_line":12,"start_character":6,"end_line":12,"end_character":28},"in_reply_to":"497af781_05315f3a","updated":"2021-08-30 16:56:55.000000000","message":"So we are creating a common data set at the beginning of each test case which represents to each API call of CRUD operations.\n\nSo when I create 4 resources in create call and if I am running it with more than 1 test workers then API call from worker 2 is fetching data crated by other test and results in failure.","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"d08da5125ee007e29da1d40211d2df45851a993c","unresolved":true,"context_lines":[{"line_number":9,"context_line":"    vars:"},{"line_number":10,"context_line":"      tox_envlist: all"},{"line_number":11,"context_line":"      tempest_test_regex: \u0027glance_tempest_plugin.tests.rbac\u0027"},{"line_number":12,"context_line":"      tempest_concurrency: 1"},{"line_number":13,"context_line":"      devstack_localrc:"},{"line_number":14,"context_line":"        GLANCE_ENFORCE_SCOPE: True"},{"line_number":15,"context_line":"        TEMPEST_PLUGINS: \u0027/opt/stack/glance-tempest-plugin\u0027"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"ffeaa254_2daf52f0","line":12,"range":{"start_line":12,"start_character":6,"end_line":12,"end_character":28},"in_reply_to":"5b427a75_dc421476","updated":"2021-08-30 22:05:20.000000000","message":"ok,for global non-tenant-isolated resources we can use the lock like we do for quota tests in tempest.\n\nrunning two tempest on same cloud same time is not something Tempest also solve as may of our test create same name resource.\n\nBut here I mean anyone should be able to run \u0027glance_tempest_plugin.tests.rbac\u0027 with one or more concurrency (serial or parallel). If we use lock then it is possible to run them in parallel and all the global resources tests will run in serial due to lock and rest in parallel.","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"527267c055df9127b3c2b16cbeafa465207b2b55","unresolved":true,"context_lines":[{"line_number":9,"context_line":"    vars:"},{"line_number":10,"context_line":"      tox_envlist: all"},{"line_number":11,"context_line":"      tempest_test_regex: \u0027glance_tempest_plugin.tests.rbac\u0027"},{"line_number":12,"context_line":"      tempest_concurrency: 1"},{"line_number":13,"context_line":"      devstack_localrc:"},{"line_number":14,"context_line":"        GLANCE_ENFORCE_SCOPE: True"},{"line_number":15,"context_line":"        TEMPEST_PLUGINS: \u0027/opt/stack/glance-tempest-plugin\u0027"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"b326430e_1a8bc78f","line":12,"range":{"start_line":12,"start_character":6,"end_line":12,"end_character":28},"in_reply_to":"8acae8ef_f4b35ed2","updated":"2021-08-30 19:23:15.000000000","message":"Even though I am keeping unique names it is failing trying accessing data from other test.","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"428a9340db2671a1d6d8533837e0ddb2c6101ec4","unresolved":true,"context_lines":[{"line_number":9,"context_line":"    vars:"},{"line_number":10,"context_line":"      tox_envlist: all"},{"line_number":11,"context_line":"      tempest_test_regex: \u0027glance_tempest_plugin.tests.rbac\u0027"},{"line_number":12,"context_line":"      tempest_concurrency: 1"},{"line_number":13,"context_line":"      devstack_localrc:"},{"line_number":14,"context_line":"        GLANCE_ENFORCE_SCOPE: True"},{"line_number":15,"context_line":"        TEMPEST_PLUGINS: \u0027/opt/stack/glance-tempest-plugin\u0027"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"8acae8ef_f4b35ed2","line":12,"range":{"start_line":12,"start_character":6,"end_line":12,"end_character":28},"in_reply_to":"8ca18e74_64b0ab0d","updated":"2021-08-30 18:59:12.000000000","message":"To be clear, we\u0027re manipulating global non-tenant-isolated resources here, which is the concern. If we create the resource names uniquely then we may be able to self-isolate this, but based on what you say this should only be a problem if someone is running two tempests against the same cloud at once.","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"917b7c435afa1604229c30118e2a594525fb0e1a","unresolved":true,"context_lines":[{"line_number":9,"context_line":"    vars:"},{"line_number":10,"context_line":"      tox_envlist: all"},{"line_number":11,"context_line":"      tempest_test_regex: \u0027glance_tempest_plugin.tests.rbac\u0027"},{"line_number":12,"context_line":"      tempest_concurrency: 1"},{"line_number":13,"context_line":"      devstack_localrc:"},{"line_number":14,"context_line":"        GLANCE_ENFORCE_SCOPE: True"},{"line_number":15,"context_line":"        TEMPEST_PLUGINS: \u0027/opt/stack/glance-tempest-plugin\u0027"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"5b427a75_dc421476","line":12,"range":{"start_line":12,"start_character":6,"end_line":12,"end_character":28},"in_reply_to":"b326430e_1a8bc78f","updated":"2021-08-30 19:42:54.000000000","message":"Is that because we\u0027re asserting the list before/after which might contain things we don\u0027t expect from the other thread? If so, we could be more detailed in our comparison.\n\nBut yeah, I was just trying to explain to gmann that it\u0027s probably a difficult thing to test in parallel, but I\u0027d hope that doesn\u0027t mean we can\u0027t test it :/","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1060ce210252962fb9803fa70ae785b7da3b6703","unresolved":true,"context_lines":[{"line_number":34,"context_line":"      tox_envlist: all"},{"line_number":35,"context_line":"      tempest_test_regex: \u0027glance_tempest_plugin.tests.rbac.v2\u0027"},{"line_number":36,"context_line":"      # Don\u0027t know why it is skipped"},{"line_number":37,"context_line":"      tempest_exclude_regex: \u0027glance_tempest_plugin.tests.rbac.v2.test_images.ProjectReaderTests\u0027"},{"line_number":38,"context_line":"      tempest_concurrency: 1"},{"line_number":39,"context_line":"      devstack_localrc:"},{"line_number":40,"context_line":"        TEMPEST_PLUGINS: \u0027/opt/stack/glance-tempest-plugin\u0027"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"0a2714e9_b47b02f2","line":37,"range":{"start_line":37,"start_character":78,"end_line":37,"end_character":96},"updated":"2021-08-30 16:05:22.000000000","message":"This is the legacy RBAC protection gate, which only tests how RBAC used to work. Traditionally, glance really only supported an administrator and maybe people with a role assignment on a project, which we refer to as a project member. The project reader concept was a new persona that was added in Wallaby. So, these tests really only care about testing ProjectAdmin and ProjectMember for regression purposes.\n\nThe job on line 2 is responsible for testing ProjectReader. Hopefully, that helps clarify the difference between the two jobs.","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"efe4d34d8e76c232fbec9f7a8e275dcf4473b078","unresolved":true,"context_lines":[{"line_number":34,"context_line":"      tox_envlist: all"},{"line_number":35,"context_line":"      tempest_test_regex: \u0027glance_tempest_plugin.tests.rbac.v2\u0027"},{"line_number":36,"context_line":"      # Don\u0027t know why it is skipped"},{"line_number":37,"context_line":"      tempest_exclude_regex: \u0027glance_tempest_plugin.tests.rbac.v2.test_images.ProjectReaderTests\u0027"},{"line_number":38,"context_line":"      tempest_concurrency: 1"},{"line_number":39,"context_line":"      devstack_localrc:"},{"line_number":40,"context_line":"        TEMPEST_PLUGINS: \u0027/opt/stack/glance-tempest-plugin\u0027"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"ff2cd5f8_de26c56b","line":37,"range":{"start_line":37,"start_character":78,"end_line":37,"end_character":96},"in_reply_to":"0a2714e9_b47b02f2","updated":"2021-08-30 16:25:26.000000000","message":"Now, since we have different test modules for metadefs like, test_namespaces, test_objects etc, so what is the syntax to specify multiple regex here to give at line #35?","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f63102bfaabb0e07b285ff009b9060763f472e17","unresolved":true,"context_lines":[{"line_number":34,"context_line":"      tox_envlist: all"},{"line_number":35,"context_line":"      tempest_test_regex: \u0027glance_tempest_plugin.tests.rbac.v2\u0027"},{"line_number":36,"context_line":"      # Don\u0027t know why it is skipped"},{"line_number":37,"context_line":"      tempest_exclude_regex: \u0027glance_tempest_plugin.tests.rbac.v2.test_images.ProjectReaderTests\u0027"},{"line_number":38,"context_line":"      tempest_concurrency: 1"},{"line_number":39,"context_line":"      devstack_localrc:"},{"line_number":40,"context_line":"        TEMPEST_PLUGINS: \u0027/opt/stack/glance-tempest-plugin\u0027"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"1a364fe8_92af8200","line":37,"range":{"start_line":37,"start_character":78,"end_line":37,"end_character":96},"in_reply_to":"9994d3e8_57c74d6c","updated":"2021-08-30 16:53:29.000000000","message":"you can specify it in multiline or like lance mentioned. \n\nBut why we cannot just run all the tests in single job? it will save infra resources.","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c074d3eaa6f36cc141f4b3b468f4821e1756bf06","unresolved":true,"context_lines":[{"line_number":34,"context_line":"      tox_envlist: all"},{"line_number":35,"context_line":"      tempest_test_regex: \u0027glance_tempest_plugin.tests.rbac.v2\u0027"},{"line_number":36,"context_line":"      # Don\u0027t know why it is skipped"},{"line_number":37,"context_line":"      tempest_exclude_regex: \u0027glance_tempest_plugin.tests.rbac.v2.test_images.ProjectReaderTests\u0027"},{"line_number":38,"context_line":"      tempest_concurrency: 1"},{"line_number":39,"context_line":"      devstack_localrc:"},{"line_number":40,"context_line":"        TEMPEST_PLUGINS: \u0027/opt/stack/glance-tempest-plugin\u0027"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"9994d3e8_57c74d6c","line":37,"range":{"start_line":37,"start_character":78,"end_line":37,"end_character":96},"in_reply_to":"ff2cd5f8_de26c56b","updated":"2021-08-30 16:43:48.000000000","message":"I\u0027m not sure if we can supply multiple regular expressions, but we could try something like:\n\n\n\u0027glance_tempest_plugin.tests.rbac.v2..*.Project(Admin|Member)Tests\u0027\n\nWhich should find all ProjectAdminTests and ProjectMemberTests in test_images and test_namespaces (for example).","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f63102bfaabb0e07b285ff009b9060763f472e17","unresolved":true,"context_lines":[{"line_number":35,"context_line":"      tempest_test_regex: \u0027glance_tempest_plugin.tests.rbac.v2\u0027"},{"line_number":36,"context_line":"      # Don\u0027t know why it is skipped"},{"line_number":37,"context_line":"      tempest_exclude_regex: \u0027glance_tempest_plugin.tests.rbac.v2.test_images.ProjectReaderTests\u0027"},{"line_number":38,"context_line":"      tempest_concurrency: 1"},{"line_number":39,"context_line":"      devstack_localrc:"},{"line_number":40,"context_line":"        TEMPEST_PLUGINS: \u0027/opt/stack/glance-tempest-plugin\u0027"},{"line_number":41,"context_line":"        USE_PYTHON3: True"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"03955fc9_92144dc9","line":38,"range":{"start_line":38,"start_character":6,"end_line":38,"end_character":25},"updated":"2021-08-30 16:53:29.000000000","message":"ditto","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"57307d97965311a90dbf646031f780e46f04ee63","unresolved":true,"context_lines":[{"line_number":31,"context_line":"      - openstack/glance-tempest-plugin"},{"line_number":32,"context_line":"    vars:"},{"line_number":33,"context_line":"      tox_envlist: all"},{"line_number":34,"context_line":"      tempest_test_regex: \u0027glance_tempest_plugin.tests.rbac.v2..*.Project(Admin|Member)Tests\u0027"},{"line_number":35,"context_line":"      devstack_localrc:"},{"line_number":36,"context_line":"        TEMPEST_PLUGINS: \u0027/opt/stack/glance-tempest-plugin\u0027"},{"line_number":37,"context_line":"        USE_PYTHON3: True"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"7291d158_e2a6f264","line":34,"range":{"start_line":34,"start_character":66,"end_line":34,"end_character":73},"updated":"2021-09-23 18:23:01.000000000","message":"This probably works, but shouldn\u0027t it be: \"v2\\..*\\.Project\"?","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"}],"glance_tempest_plugin/fixtures.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5c53f11690d890ffa4b732e2cceab91c6a9090f3","unresolved":true,"context_lines":[{"line_number":31,"context_line":"    for visibility in [\u0027public\u0027, \u0027private\u0027]:"},{"line_number":32,"context_line":"        project_namespace \u003d \"%s_%s_%s\" % (project_client.project_id,"},{"line_number":33,"context_line":"                                          visibility,"},{"line_number":34,"context_line":"                                          data_utils.rand_name(\u0027namepsace\u0027))"},{"line_number":35,"context_line":"        alt_namespace \u003d \"%s_%s_%s\" % (alt_client.project_id,"},{"line_number":36,"context_line":"                                      visibility,"},{"line_number":37,"context_line":"                                      data_utils.rand_name(\u0027namepsace\u0027))"}],"source_content_type":"text/x-python","patch_set":16,"id":"e080dc76_570ab8af","line":34,"range":{"start_line":34,"start_character":64,"end_line":34,"end_character":73},"updated":"2021-08-30 20:39:37.000000000","message":"nit: namespace*","commit_id":"51b8810150ff315f46660b7847f6e4bbe1278474"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"d9632e5cfaf9005e564d3d4ea4b761706163d274","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    for visibility in [\u0027public\u0027, \u0027private\u0027]:"},{"line_number":32,"context_line":"        project_namespace \u003d \"%s_%s_%s\" % (project_client.project_id,"},{"line_number":33,"context_line":"                                          visibility,"},{"line_number":34,"context_line":"                                          data_utils.rand_name(\u0027namepsace\u0027))"},{"line_number":35,"context_line":"        alt_namespace \u003d \"%s_%s_%s\" % (alt_client.project_id,"},{"line_number":36,"context_line":"                                      visibility,"},{"line_number":37,"context_line":"                                      data_utils.rand_name(\u0027namepsace\u0027))"}],"source_content_type":"text/x-python","patch_set":16,"id":"9242834c_9676193d","line":34,"range":{"start_line":34,"start_character":64,"end_line":34,"end_character":73},"in_reply_to":"e080dc76_570ab8af","updated":"2021-08-31 06:34:43.000000000","message":"Ack","commit_id":"51b8810150ff315f46660b7847f6e4bbe1278474"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5c53f11690d890ffa4b732e2cceab91c6a9090f3","unresolved":true,"context_lines":[{"line_number":34,"context_line":"                                          data_utils.rand_name(\u0027namepsace\u0027))"},{"line_number":35,"context_line":"        alt_namespace \u003d \"%s_%s_%s\" % (alt_client.project_id,"},{"line_number":36,"context_line":"                                      visibility,"},{"line_number":37,"context_line":"                                      data_utils.rand_name(\u0027namepsace\u0027))"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        project_namespace \u003d project_client.create_namespace("},{"line_number":40,"context_line":"            **namespace(project_namespace, project_client.project_id,"}],"source_content_type":"text/x-python","patch_set":16,"id":"97ab3b28_7952bd91","line":37,"range":{"start_line":37,"start_character":60,"end_line":37,"end_character":69},"updated":"2021-08-30 20:39:37.000000000","message":"nit: namespace*","commit_id":"51b8810150ff315f46660b7847f6e4bbe1278474"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"d9632e5cfaf9005e564d3d4ea4b761706163d274","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                                          data_utils.rand_name(\u0027namepsace\u0027))"},{"line_number":35,"context_line":"        alt_namespace \u003d \"%s_%s_%s\" % (alt_client.project_id,"},{"line_number":36,"context_line":"                                      visibility,"},{"line_number":37,"context_line":"                                      data_utils.rand_name(\u0027namepsace\u0027))"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        project_namespace \u003d project_client.create_namespace("},{"line_number":40,"context_line":"            **namespace(project_namespace, project_client.project_id,"}],"source_content_type":"text/x-python","patch_set":16,"id":"430b2ca4_08e7bc1c","line":37,"range":{"start_line":37,"start_character":60,"end_line":37,"end_character":69},"in_reply_to":"97ab3b28_7952bd91","updated":"2021-08-31 06:34:43.000000000","message":"Ack","commit_id":"51b8810150ff315f46660b7847f6e4bbe1278474"}],"glance_tempest_plugin/tests/rbac/v2/base.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"98b67f6ddf485c8a8c853ece3175fd8e51317304","unresolved":true,"context_lines":[{"line_number":65,"context_line":"                self.os_system_admin.projects_client.delete_project,"},{"line_number":66,"context_line":"                project_id)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        if role \u003d\u003d \u0027admin\u0027:"},{"line_number":69,"context_line":"            role_id \u003d self.os_system_admin.roles_v3_client.list_roles("},{"line_number":70,"context_line":"                name\u003d\u0027admin\u0027)[\u0027roles\u0027][0][\u0027id\u0027]"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            role_id \u003d self.os_system_admin.roles_v3_client.list_roles("},{"line_number":73,"context_line":"                name\u003d\u0027member\u0027)[\u0027roles\u0027][0][\u0027id\u0027]"},{"line_number":74,"context_line":"        self.os_system_admin.roles_v3_client.create_user_role_on_project("},{"line_number":75,"context_line":"            project_id, user_id, role_id)"},{"line_number":76,"context_line":"        creds \u003d auth.KeystoneV3Credentials("}],"source_content_type":"text/x-python","patch_set":4,"id":"f7391ae7_c77c43f4","line":73,"range":{"start_line":68,"start_character":8,"end_line":73,"end_character":48},"updated":"2021-07-27 08:49:18.000000000","message":"you can simple do it like;\n\nrole_id \u003d self.os_system_admin.roles_v3_client.list_roles(\n                name\u003drole)[\u0027roles\u0027][0][\u0027id\u0027]","commit_id":"da829566e0037d6ae1021d6394e7b324ab119e20"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a5f7da0c86fe814bcc730ca35fc19ec1fcc8f01a","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                self.os_system_admin.projects_client.delete_project,"},{"line_number":66,"context_line":"                project_id)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        if role \u003d\u003d \u0027admin\u0027:"},{"line_number":69,"context_line":"            role_id \u003d self.os_system_admin.roles_v3_client.list_roles("},{"line_number":70,"context_line":"                name\u003d\u0027admin\u0027)[\u0027roles\u0027][0][\u0027id\u0027]"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            role_id \u003d self.os_system_admin.roles_v3_client.list_roles("},{"line_number":73,"context_line":"                name\u003d\u0027member\u0027)[\u0027roles\u0027][0][\u0027id\u0027]"},{"line_number":74,"context_line":"        self.os_system_admin.roles_v3_client.create_user_role_on_project("},{"line_number":75,"context_line":"            project_id, user_id, role_id)"},{"line_number":76,"context_line":"        creds \u003d auth.KeystoneV3Credentials("}],"source_content_type":"text/x-python","patch_set":4,"id":"25fe3d42_edec0670","line":73,"range":{"start_line":68,"start_character":8,"end_line":73,"end_character":48},"in_reply_to":"f7391ae7_c77c43f4","updated":"2021-07-28 19:22:51.000000000","message":"Done","commit_id":"da829566e0037d6ae1021d6394e7b324ab119e20"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"66e57af8a42665e6c9c1a1db4c2f7e02a2999ad7","unresolved":true,"context_lines":[{"line_number":82,"context_line":"        return client"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class BaseV2MetadefTest(base.BaseV2ImageTest):"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    credentials \u003d [\u0027admin\u0027, \u0027primary\u0027]"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"8ead5e54_2149edf6","line":85,"range":{"start_line":85,"start_character":29,"end_line":85,"end_character":44},"updated":"2021-07-29 05:40:32.000000000","message":"I think there is no use of subclassing this class here.\nAs I said metadefs are not related to images at all and neither I am seeing anything is used from this class here.","commit_id":"e349cf620c8afcfa0d9a21cb0a49d1e39c5b1370"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"63f338b7dfe0977412baa7f8f1824e2c8ec1e0e8","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        return client"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class BaseV2MetadefTest(base.BaseV2ImageTest):"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    credentials \u003d [\u0027admin\u0027, \u0027primary\u0027]"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"f53c0621_356335a5","line":85,"range":{"start_line":85,"start_character":29,"end_line":85,"end_character":44},"in_reply_to":"8ead5e54_2149edf6","updated":"2021-08-06 09:59:18.000000000","message":"Ack","commit_id":"e349cf620c8afcfa0d9a21cb0a49d1e39c5b1370"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"66e57af8a42665e6c9c1a1db4c2f7e02a2999ad7","unresolved":true,"context_lines":[{"line_number":101,"context_line":"    def namespace(self, owner, visibility\u003dNone, protected\u003dNone):"},{"line_number":102,"context_line":"        ns \u003d {}"},{"line_number":103,"context_line":"        ns[\u0027namespace\u0027] \u003d data_utils.rand_name(\u0027namespace\u0027)"},{"line_number":104,"context_line":"        ns[\u0027visibility\u0027] \u003d visibility if visibility else \u0027private\u0027"},{"line_number":105,"context_line":"        ns[\u0027description\u0027] \u003d data_utils.arbitrary_string()"},{"line_number":106,"context_line":"        ns[\u0027display_name\u0027] \u003d ns[\u0027namespace\u0027]"},{"line_number":107,"context_line":"        ns[\u0027owner\u0027] \u003d owner"}],"source_content_type":"text/x-python","patch_set":5,"id":"4801b8db_0ad0cf2b","line":104,"range":{"start_line":104,"start_character":41,"end_line":104,"end_character":66},"updated":"2021-07-29 05:40:32.000000000","message":"you can set visibility\u003d\u0027private\u0027 in definition to avoid this.","commit_id":"e349cf620c8afcfa0d9a21cb0a49d1e39c5b1370"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"63f338b7dfe0977412baa7f8f1824e2c8ec1e0e8","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    def namespace(self, owner, visibility\u003dNone, protected\u003dNone):"},{"line_number":102,"context_line":"        ns \u003d {}"},{"line_number":103,"context_line":"        ns[\u0027namespace\u0027] \u003d data_utils.rand_name(\u0027namespace\u0027)"},{"line_number":104,"context_line":"        ns[\u0027visibility\u0027] \u003d visibility if visibility else \u0027private\u0027"},{"line_number":105,"context_line":"        ns[\u0027description\u0027] \u003d data_utils.arbitrary_string()"},{"line_number":106,"context_line":"        ns[\u0027display_name\u0027] \u003d ns[\u0027namespace\u0027]"},{"line_number":107,"context_line":"        ns[\u0027owner\u0027] \u003d owner"}],"source_content_type":"text/x-python","patch_set":5,"id":"343f6016_7b2624c8","line":104,"range":{"start_line":104,"start_character":41,"end_line":104,"end_character":66},"in_reply_to":"4801b8db_0ad0cf2b","updated":"2021-08-06 09:59:18.000000000","message":"Done","commit_id":"e349cf620c8afcfa0d9a21cb0a49d1e39c5b1370"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"66e57af8a42665e6c9c1a1db4c2f7e02a2999ad7","unresolved":true,"context_lines":[{"line_number":105,"context_line":"        ns[\u0027description\u0027] \u003d data_utils.arbitrary_string()"},{"line_number":106,"context_line":"        ns[\u0027display_name\u0027] \u003d ns[\u0027namespace\u0027]"},{"line_number":107,"context_line":"        ns[\u0027owner\u0027] \u003d owner"},{"line_number":108,"context_line":"        ns[\u0027protected\u0027] \u003d protected if protected else False"},{"line_number":109,"context_line":"        return ns"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def _cleanup_namespace(self, namespace):"}],"source_content_type":"text/x-python","patch_set":5,"id":"839a62ea_d290e066","line":108,"range":{"start_line":108,"start_character":39,"end_line":108,"end_character":59},"updated":"2021-07-29 05:40:32.000000000","message":"ditto","commit_id":"e349cf620c8afcfa0d9a21cb0a49d1e39c5b1370"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"63f338b7dfe0977412baa7f8f1824e2c8ec1e0e8","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        ns[\u0027description\u0027] \u003d data_utils.arbitrary_string()"},{"line_number":106,"context_line":"        ns[\u0027display_name\u0027] \u003d ns[\u0027namespace\u0027]"},{"line_number":107,"context_line":"        ns[\u0027owner\u0027] \u003d owner"},{"line_number":108,"context_line":"        ns[\u0027protected\u0027] \u003d protected if protected else False"},{"line_number":109,"context_line":"        return ns"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def _cleanup_namespace(self, namespace):"}],"source_content_type":"text/x-python","patch_set":5,"id":"f3e7a5b5_1bf6f1f5","line":108,"range":{"start_line":108,"start_character":39,"end_line":108,"end_character":59},"in_reply_to":"839a62ea_d290e066","updated":"2021-08-06 09:59:18.000000000","message":"Done","commit_id":"e349cf620c8afcfa0d9a21cb0a49d1e39c5b1370"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"66e57af8a42665e6c9c1a1db4c2f7e02a2999ad7","unresolved":true,"context_lines":[{"line_number":125,"context_line":"        if not create_by_non_admin:"},{"line_number":126,"context_line":"            for project in projects:"},{"line_number":127,"context_line":"                for visibility in [\u0027public\u0027, \u0027private\u0027]:"},{"line_number":128,"context_line":"                    namespace \u003d self.namespaces_client.create_namespace("},{"line_number":129,"context_line":"                        **self.namespace(project.project_id, visibility))"},{"line_number":130,"context_line":"                    if project \u003d\u003d project_client.namespaces_client:"},{"line_number":131,"context_line":"                        project2_namespaces.append(namespace)"},{"line_number":132,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"405de75e_0bd1f1df","line":129,"range":{"start_line":128,"start_character":20,"end_line":129,"end_character":73},"updated":"2021-07-29 05:40:32.000000000","message":"this sounds confusing you are iterating over projects which includes self.namespaces_client and project_client.namespaces_client and while creating the namespace you are only using self.namespaces_client\n\nAccording to me you wanted to create two namespaces using self.namespaces_client and two using project_client.namespaces_client but actually here it seems all 4 namespaces are created using self.namespaces_client only.","commit_id":"e349cf620c8afcfa0d9a21cb0a49d1e39c5b1370"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"63f338b7dfe0977412baa7f8f1824e2c8ec1e0e8","unresolved":true,"context_lines":[{"line_number":125,"context_line":"        if not create_by_non_admin:"},{"line_number":126,"context_line":"            for project in projects:"},{"line_number":127,"context_line":"                for visibility in [\u0027public\u0027, \u0027private\u0027]:"},{"line_number":128,"context_line":"                    namespace \u003d self.namespaces_client.create_namespace("},{"line_number":129,"context_line":"                        **self.namespace(project.project_id, visibility))"},{"line_number":130,"context_line":"                    if project \u003d\u003d project_client.namespaces_client:"},{"line_number":131,"context_line":"                        project2_namespaces.append(namespace)"},{"line_number":132,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"2262df77_4bab4b5d","line":129,"range":{"start_line":128,"start_character":20,"end_line":129,"end_character":73},"in_reply_to":"405de75e_0bd1f1df","updated":"2021-08-06 09:59:18.000000000","message":"Oops!!\nNow in updated PS, I\u0027m creating two different projects \u0026 creating public \u0026 private namespaces for each.","commit_id":"e349cf620c8afcfa0d9a21cb0a49d1e39c5b1370"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"66e57af8a42665e6c9c1a1db4c2f7e02a2999ad7","unresolved":true,"context_lines":[{"line_number":131,"context_line":"                        project2_namespaces.append(namespace)"},{"line_number":132,"context_line":"                    else:"},{"line_number":133,"context_line":"                        project1_namespaces.append(namespace)"},{"line_number":134,"context_line":"        else:"},{"line_number":135,"context_line":"            self.do_request(\u0027create_namespace\u0027,"},{"line_number":136,"context_line":"                            expected_status\u003dexceptions.Forbidden,"},{"line_number":137,"context_line":"                            owner\u003dproject_client.credentials.project_id,"},{"line_number":138,"context_line":"                            namespace\u003ddata_utils.arbitrary_string())"},{"line_number":139,"context_line":"            return"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        return project1_namespaces, project2_namespaces"}],"source_content_type":"text/x-python","patch_set":5,"id":"c807275f_3e86d3ed","line":139,"range":{"start_line":134,"start_character":7,"end_line":139,"end_character":18},"updated":"2021-07-29 05:40:32.000000000","message":"You should do this check at respective places.","commit_id":"e349cf620c8afcfa0d9a21cb0a49d1e39c5b1370"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"63f338b7dfe0977412baa7f8f1824e2c8ec1e0e8","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                        project2_namespaces.append(namespace)"},{"line_number":132,"context_line":"                    else:"},{"line_number":133,"context_line":"                        project1_namespaces.append(namespace)"},{"line_number":134,"context_line":"        else:"},{"line_number":135,"context_line":"            self.do_request(\u0027create_namespace\u0027,"},{"line_number":136,"context_line":"                            expected_status\u003dexceptions.Forbidden,"},{"line_number":137,"context_line":"                            owner\u003dproject_client.credentials.project_id,"},{"line_number":138,"context_line":"                            namespace\u003ddata_utils.arbitrary_string())"},{"line_number":139,"context_line":"            return"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        return project1_namespaces, project2_namespaces"}],"source_content_type":"text/x-python","patch_set":5,"id":"ac6ca81f_91fd66af","line":139,"range":{"start_line":134,"start_character":7,"end_line":139,"end_character":18},"in_reply_to":"c807275f_3e86d3ed","updated":"2021-08-06 09:59:18.000000000","message":"Ack","commit_id":"e349cf620c8afcfa0d9a21cb0a49d1e39c5b1370"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"725128561f1e3feba268b4ce9358ac4cc0369295","unresolved":true,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def create_two_projects(self, role):"},{"line_number":118,"context_line":"        # Setup project A client"},{"line_number":119,"context_line":"        project_id \u003d self.persona.credentials.project_id"},{"line_number":120,"context_line":"        project_client_A \u003d self.setup_user_client("},{"line_number":121,"context_line":"            project_id\u003dproject_id, role\u003d\u0027admin\u0027)"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"0203926a_1d1343ec","line":119,"range":{"start_line":119,"start_character":21,"end_line":119,"end_character":33},"updated":"2021-08-11 15:45:33.000000000","message":"where it is defined?","commit_id":"678a116b27ea7cadadeea5ccf06e6e0eb166ba98"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"725128561f1e3feba268b4ce9358ac4cc0369295","unresolved":true,"context_lines":[{"line_number":114,"context_line":"                protected\u003dFalse)"},{"line_number":115,"context_line":"        self.namespaces_client.delete_namespace(namespace[\u0027namespace\u0027])"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def create_two_projects(self, role):"},{"line_number":118,"context_line":"        # Setup project A client"},{"line_number":119,"context_line":"        project_id \u003d self.persona.credentials.project_id"},{"line_number":120,"context_line":"        project_client_A \u003d self.setup_user_client("},{"line_number":121,"context_line":"            project_id\u003dproject_id, role\u003d\u0027admin\u0027)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # Setup project A client"},{"line_number":124,"context_line":"        project_client_B \u003d self.setup_user_client(role\u003d\u0027admin\u0027)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        return [project_client_A, project_client_B]"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def create_namespaces(self, projects\u003d[]):"},{"line_number":129,"context_line":"        project1_namespaces \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"ecedaa32_76021e9f","line":126,"range":{"start_line":117,"start_character":0,"end_line":126,"end_character":51},"updated":"2021-08-11 15:45:33.000000000","message":"we have project alt credential now in tempest those you can use to test the different et of project admin/member/reader cred.\n\n- https://github.com/openstack/tempest/blob/master/tempest/lib/common/dynamic_creds.py#L444-L477","commit_id":"678a116b27ea7cadadeea5ccf06e6e0eb166ba98"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"94eb8f8f660d30f103b9a15fbfe4824b44fc01fc","unresolved":true,"context_lines":[{"line_number":13,"context_line":"from tempest import clients"},{"line_number":14,"context_line":"from tempest import config"},{"line_number":15,"context_line":"from tempest.lib import auth"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from tempest.lib.common.utils import data_utils"},{"line_number":18,"context_line":"from tempest.lib.common.utils import test_utils"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"6295677b_a73c5d31","line":16,"updated":"2021-08-26 20:05:29.000000000","message":"Unnecessary new line","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a774e3948831c14100f0bbc9767c8950c1b34909","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from tempest import clients"},{"line_number":14,"context_line":"from tempest import config"},{"line_number":15,"context_line":"from tempest.lib import auth"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from tempest.lib.common.utils import data_utils"},{"line_number":18,"context_line":"from tempest.lib.common.utils import test_utils"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5370a296_9a662100","line":16,"in_reply_to":"6295677b_a73c5d31","updated":"2021-08-30 11:01:37.000000000","message":"Ack","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"94eb8f8f660d30f103b9a15fbfe4824b44fc01fc","unresolved":true,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def do_request(self, method, expected_status\u003d200, client\u003dNone, **payload):"},{"line_number":104,"context_line":"        if not client:"},{"line_number":105,"context_line":"            client \u003d self.client"},{"line_number":106,"context_line":"        if isinstance(expected_status, type(Exception)):"},{"line_number":107,"context_line":"            self.assertRaises(expected_status,"},{"line_number":108,"context_line":"                              getattr(client, method),"}],"source_content_type":"text/x-python","patch_set":13,"id":"6febbdb6_a7d33f95","line":105,"updated":"2021-08-26 20:05:29.000000000","message":"I don’t see, self.client defined anywhere. Also we are passing client explicitly so this looks like dead code to me.","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a774e3948831c14100f0bbc9767c8950c1b34909","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def do_request(self, method, expected_status\u003d200, client\u003dNone, **payload):"},{"line_number":104,"context_line":"        if not client:"},{"line_number":105,"context_line":"            client \u003d self.client"},{"line_number":106,"context_line":"        if isinstance(expected_status, type(Exception)):"},{"line_number":107,"context_line":"            self.assertRaises(expected_status,"},{"line_number":108,"context_line":"                              getattr(client, method),"}],"source_content_type":"text/x-python","patch_set":13,"id":"2409d61e_621db944","line":105,"in_reply_to":"6febbdb6_a7d33f95","updated":"2021-08-30 11:01:37.000000000","message":"Ack","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"94eb8f8f660d30f103b9a15fbfe4824b44fc01fc","unresolved":true,"context_lines":[{"line_number":112,"context_line":"            self.assertEqual(response.response.status, expected_status)"},{"line_number":113,"context_line":"            return response"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def load_data(self):"},{"line_number":116,"context_line":"        # Create namespace for two different projects"},{"line_number":117,"context_line":"        project_namespaces, alt_namespaces \u003d fixtures.create_namespaces("},{"line_number":118,"context_line":"            self.admin_client, self.alt_admin_client)"}],"source_content_type":"text/x-python","patch_set":13,"id":"715a4ef2_d4981a2d","line":115,"updated":"2021-08-26 20:05:29.000000000","message":"May be rename it to create_namespaces","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a774e3948831c14100f0bbc9767c8950c1b34909","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            self.assertEqual(response.response.status, expected_status)"},{"line_number":113,"context_line":"            return response"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def load_data(self):"},{"line_number":116,"context_line":"        # Create namespace for two different projects"},{"line_number":117,"context_line":"        project_namespaces, alt_namespaces \u003d fixtures.create_namespaces("},{"line_number":118,"context_line":"            self.admin_client, self.alt_admin_client)"}],"source_content_type":"text/x-python","patch_set":13,"id":"e4197901_a7695205","line":115,"in_reply_to":"715a4ef2_d4981a2d","updated":"2021-08-30 11:01:37.000000000","message":"Ack","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"94eb8f8f660d30f103b9a15fbfe4824b44fc01fc","unresolved":true,"context_lines":[{"line_number":116,"context_line":"        # Create namespace for two different projects"},{"line_number":117,"context_line":"        project_namespaces, alt_namespaces \u003d fixtures.create_namespaces("},{"line_number":118,"context_line":"            self.admin_client, self.alt_admin_client)"},{"line_number":119,"context_line":"        return alt_namespaces, project_namespaces"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def cleanup(self, namespaces, client):"},{"line_number":122,"context_line":"        for namespace in namespaces:"}],"source_content_type":"text/x-python","patch_set":13,"id":"0cb51213_6e78cc8b","line":119,"updated":"2021-08-26 20:05:29.000000000","message":"Why we are maintaining two different lists?\nI think better to return only one from here.","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a774e3948831c14100f0bbc9767c8950c1b34909","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        # Create namespace for two different projects"},{"line_number":117,"context_line":"        project_namespaces, alt_namespaces \u003d fixtures.create_namespaces("},{"line_number":118,"context_line":"            self.admin_client, self.alt_admin_client)"},{"line_number":119,"context_line":"        return alt_namespaces, project_namespaces"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def cleanup(self, namespaces, client):"},{"line_number":122,"context_line":"        for namespace in namespaces:"}],"source_content_type":"text/x-python","patch_set":13,"id":"9e4b208d_9dc1f2a4","line":119,"in_reply_to":"0cb51213_6e78cc8b","updated":"2021-08-30 11:01:37.000000000","message":"Ack","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"94eb8f8f660d30f103b9a15fbfe4824b44fc01fc","unresolved":true,"context_lines":[{"line_number":118,"context_line":"            self.admin_client, self.alt_admin_client)"},{"line_number":119,"context_line":"        return alt_namespaces, project_namespaces"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def cleanup(self, namespaces, client):"},{"line_number":122,"context_line":"        for namespace in namespaces:"},{"line_number":123,"context_line":"            self.addCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":124,"context_line":"                            client.delete_namespace, namespace[\u0027namespace\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"30b0d1d3_77a6255e","line":121,"updated":"2021-08-26 20:05:29.000000000","message":"May be instead of passing client here, we can simply use self.admin_client now","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a774e3948831c14100f0bbc9767c8950c1b34909","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            self.admin_client, self.alt_admin_client)"},{"line_number":119,"context_line":"        return alt_namespaces, project_namespaces"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def cleanup(self, namespaces, client):"},{"line_number":122,"context_line":"        for namespace in namespaces:"},{"line_number":123,"context_line":"            self.addCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":124,"context_line":"                            client.delete_namespace, namespace[\u0027namespace\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"403aef72_d71b79da","line":121,"in_reply_to":"30b0d1d3_77a6255e","updated":"2021-08-30 11:01:37.000000000","message":"Ack","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1060ce210252962fb9803fa70ae785b7da3b6703","unresolved":true,"context_lines":[{"line_number":83,"context_line":"        return client"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"class MetadefV2RbacBaseTests(object):"},{"line_number":87,"context_line":"    @classmethod"},{"line_number":88,"context_line":"    def skip_checks(cls):"},{"line_number":89,"context_line":"        super().skip_checks()"}],"source_content_type":"text/x-python","patch_set":15,"id":"d217cccf_f8bb9a73","line":86,"updated":"2021-08-30 16:05:22.000000000","message":"It looks like a lot of this is duplicated from ImageV2RbacBaseTest. We could consolidate the functionality, or maybe use the ImageV2RbacBaseTest initially to see what it\u0027s missing for the metadef test coverage. If it\u0027s not missing anything, maybe just a better name would help (so it does appear specific to the images API).\n\nAlthough, when I named this originally, I think I used the term \u0027ImageV2\u0027 in the name since I was referring to the image service as a whole, which I think also includes the metadef API (unless I\u0027m mistaken).","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"efe4d34d8e76c232fbec9f7a8e275dcf4473b078","unresolved":true,"context_lines":[{"line_number":83,"context_line":"        return client"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"class MetadefV2RbacBaseTests(object):"},{"line_number":87,"context_line":"    @classmethod"},{"line_number":88,"context_line":"    def skip_checks(cls):"},{"line_number":89,"context_line":"        super().skip_checks()"}],"source_content_type":"text/x-python","patch_set":15,"id":"d2f73d54_0d652510","line":86,"in_reply_to":"d217cccf_f8bb9a73","updated":"2021-08-30 16:25:26.000000000","message":"hmm, so I got confused due to name and thought that this should only be related to Images API and not entire glance service. I think the name GlanceV2RbacBaseTests makes more sense then.\n\n\nAlso we do have limited days in hand so can we go ahead with current structure and then work it for combining during RC weeks?","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b82dff3a222f9f44aee3368be7eeb619fa0ab95f","unresolved":true,"context_lines":[{"line_number":83,"context_line":"        return client"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"class MetadefV2RbacBaseTests(object):"},{"line_number":87,"context_line":"    @classmethod"},{"line_number":88,"context_line":"    def skip_checks(cls):"},{"line_number":89,"context_line":"        super().skip_checks()"}],"source_content_type":"text/x-python","patch_set":15,"id":"397efe64_252542c5","line":86,"in_reply_to":"d2f73d54_0d652510","updated":"2021-08-30 16:45:43.000000000","message":"Yeah - I won\u0027t hold this up. If you\u0027re OK working through the organizational bits in RC, so am I. 😊","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1060ce210252962fb9803fa70ae785b7da3b6703","unresolved":true,"context_lines":[{"line_number":113,"context_line":"            self.assertEqual(response.response.status, expected_status)"},{"line_number":114,"context_line":"            return response"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def create_namespaces(self):"},{"line_number":117,"context_line":"        # Create namespace for two different projects"},{"line_number":118,"context_line":"        project_namespaces, alt_namespaces \u003d fixtures.create_namespaces("},{"line_number":119,"context_line":"            self.admin_client, self.alt_admin_client)"}],"source_content_type":"text/x-python","patch_set":15,"id":"892e0c73_4b1629fb","line":116,"updated":"2021-08-30 16:05:22.000000000","message":"If we consolidate the majority of this class into the ImageV2RbacBaseTest, we could keep namespace-specific methods closes to the namespace tests. Maybe the abstract base class that defines the tests each persona needs to implement?","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"d9632e5cfaf9005e564d3d4ea4b761706163d274","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            self.assertEqual(response.response.status, expected_status)"},{"line_number":114,"context_line":"            return response"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def create_namespaces(self):"},{"line_number":117,"context_line":"        # Create namespace for two different projects"},{"line_number":118,"context_line":"        project_namespaces, alt_namespaces \u003d fixtures.create_namespaces("},{"line_number":119,"context_line":"            self.admin_client, self.alt_admin_client)"}],"source_content_type":"text/x-python","patch_set":15,"id":"f6a5f396_cc7e5835","line":116,"in_reply_to":"3ab24f0d_d5c36274","updated":"2021-08-31 06:34:43.000000000","message":"yes, makes sense, will work it on during RC phase.","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1c4a4e85e3ffcde60d904ea58921df75f0a84624","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            self.assertEqual(response.response.status, expected_status)"},{"line_number":114,"context_line":"            return response"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def create_namespaces(self):"},{"line_number":117,"context_line":"        # Create namespace for two different projects"},{"line_number":118,"context_line":"        project_namespaces, alt_namespaces \u003d fixtures.create_namespaces("},{"line_number":119,"context_line":"            self.admin_client, self.alt_admin_client)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3ab24f0d_d5c36274","line":116,"in_reply_to":"6b99e88c_c3786406","updated":"2021-08-30 20:43:44.000000000","message":"Ok, having a place for a shared method to create namespaces makes sense. I think that justifies having a class like this, without the duplication of skip_checks, setup_clients, and do_request from ImageV2RbacBaseTests. Maybe keeping the metadef specifics here under `MetadefUtilities`?","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"efe4d34d8e76c232fbec9f7a8e275dcf4473b078","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            self.assertEqual(response.response.status, expected_status)"},{"line_number":114,"context_line":"            return response"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def create_namespaces(self):"},{"line_number":117,"context_line":"        # Create namespace for two different projects"},{"line_number":118,"context_line":"        project_namespaces, alt_namespaces \u003d fixtures.create_namespaces("},{"line_number":119,"context_line":"            self.admin_client, self.alt_admin_client)"}],"source_content_type":"text/x-python","patch_set":15,"id":"df4f16ff_fe0f6607","line":116,"in_reply_to":"892e0c73_4b1629fb","updated":"2021-08-30 16:25:26.000000000","message":"Ack","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"8f887a00c72dcb4f42af09f15a39d38a1a20fce5","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            self.assertEqual(response.response.status, expected_status)"},{"line_number":114,"context_line":"            return response"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def create_namespaces(self):"},{"line_number":117,"context_line":"        # Create namespace for two different projects"},{"line_number":118,"context_line":"        project_namespaces, alt_namespaces \u003d fixtures.create_namespaces("},{"line_number":119,"context_line":"            self.admin_client, self.alt_admin_client)"}],"source_content_type":"text/x-python","patch_set":15,"id":"6b99e88c_c3786406","line":116,"in_reply_to":"df4f16ff_fe0f6607","updated":"2021-08-30 20:26:12.000000000","message":"Yeah we could have done that, but if you check the other dependent patches, we are using this method there, for ex. for creating objects, resource types, properties, tags we need to create amespaces first.","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"edaeacaced64e0aaac3a02f2a21eb3ee21a61102","unresolved":true,"context_lines":[{"line_number":103,"context_line":"        cls.admin_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":104,"context_line":"        cls.alt_admin_client \u003d cls.os_project_alt_admin.namespaces_client"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def do_request(self, method, expected_status\u003d200, client\u003dNone, **payload):"},{"line_number":107,"context_line":"        try:"},{"line_number":108,"context_line":"            return getattr(client, method)(**payload)"},{"line_number":109,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":20,"id":"77c8db73_9c9352a8","line":106,"updated":"2021-09-03 14:32:09.000000000","message":"expected status is not used any where, so better to remove it.","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6c262e68454b2f3cba3bbffef76b8295efc0e84a","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        cls.admin_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":104,"context_line":"        cls.alt_admin_client \u003d cls.os_project_alt_admin.namespaces_client"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def do_request(self, method, expected_status\u003d200, client\u003dNone, **payload):"},{"line_number":107,"context_line":"        try:"},{"line_number":108,"context_line":"            return getattr(client, method)(**payload)"},{"line_number":109,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":20,"id":"f246cfe2_9634dac8","line":106,"in_reply_to":"4479f4ce_073de1d0","updated":"2021-09-06 07:47:07.000000000","message":"Ack","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"53eec9ebcc8ede1cf3d9ae20aa2e4b16361630a0","unresolved":true,"context_lines":[{"line_number":103,"context_line":"        cls.admin_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":104,"context_line":"        cls.alt_admin_client \u003d cls.os_project_alt_admin.namespaces_client"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def do_request(self, method, expected_status\u003d200, client\u003dNone, **payload):"},{"line_number":107,"context_line":"        try:"},{"line_number":108,"context_line":"            return getattr(client, method)(**payload)"},{"line_number":109,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":20,"id":"4479f4ce_073de1d0","line":106,"in_reply_to":"77c8db73_9c9352a8","updated":"2021-09-03 15:13:27.000000000","message":"Outside of the metadef specific stuff (which could live somewhere else closer to the metadef tests), couldn\u0027t we reuse the ImageV2RbacBaseTests class above?","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0f7ed985fb5cd69310ed55e3499ec6f149c611bd","unresolved":true,"context_lines":[{"line_number":90,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":91,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":92,"context_line":"        cls.admin_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":93,"context_line":"        cls.alt_admin_client \u003d cls.os_project_alt_admin.namespaces_client"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def cleanup(self, namespaces):"},{"line_number":96,"context_line":"        for namespace in namespaces:"}],"source_content_type":"text/x-python","patch_set":22,"id":"4d02b6c0_6865341d","line":93,"updated":"2021-09-07 21:31:47.000000000","message":"We define a setup_clients() method in MetadefV2RbacNamespaceTest already. Can this live there? I don\u0027t think this is required for the image tests, is it? If not, then we\u0027d reduce some of the changes we\u0027re making in test_images.py.","commit_id":"c4fda21b4bd1bd2d6a41d2cd24e64c3177a36b27"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"ba7c674a34fb45d75cbf3755c0fa10617583bfeb","unresolved":true,"context_lines":[{"line_number":90,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":91,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":92,"context_line":"        cls.admin_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":93,"context_line":"        cls.alt_admin_client \u003d cls.os_project_alt_admin.namespaces_client"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def cleanup(self, namespaces):"},{"line_number":96,"context_line":"        for namespace in namespaces:"}],"source_content_type":"text/x-python","patch_set":22,"id":"69e5ee88_6b652724","line":93,"in_reply_to":"4d02b6c0_6865341d","updated":"2021-09-08 06:07:28.000000000","message":"even if it is not used in images we need to use it in other metadef modules so if we move it there then we need to define this in each module again.\n\nThis is one of the reason I wanted to create separate base class for Metadefs rather than using this one.","commit_id":"c4fda21b4bd1bd2d6a41d2cd24e64c3177a36b27"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"ef50d754985f9394ec74d41d8bd6d232fc0ef365","unresolved":true,"context_lines":[{"line_number":90,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":91,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":92,"context_line":"        cls.admin_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":93,"context_line":"        cls.alt_admin_client \u003d cls.os_project_alt_admin.namespaces_client"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def cleanup(self, namespaces):"},{"line_number":96,"context_line":"        for namespace in namespaces:"}],"source_content_type":"text/x-python","patch_set":22,"id":"1461c6bb_4d758d6a","line":93,"in_reply_to":"69e5ee88_6b652724","updated":"2021-09-08 08:49:05.000000000","message":"+1 Abhishek","commit_id":"c4fda21b4bd1bd2d6a41d2cd24e64c3177a36b27"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6c021ab9da3a542f113a692617dccfb8c4461a8c","unresolved":true,"context_lines":[{"line_number":15,"context_line":"from tempest.lib import auth"},{"line_number":16,"context_line":"from tempest.lib.common.utils import data_utils"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"CONF \u003d config.CONF"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"edc87887_bbab3110","line":18,"updated":"2021-09-14 13:45:08.000000000","message":"nit: unrelated change.","commit_id":"648798449647c6680d1c76ce2ae758c12967ab5c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cbdbfe75cf771bc699a05bd68476cc5742174bd8","unresolved":true,"context_lines":[{"line_number":15,"context_line":"from tempest.lib import auth"},{"line_number":16,"context_line":"from tempest.lib.common.utils import data_utils"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"CONF \u003d config.CONF"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"6c502070_a240d9fb","line":18,"in_reply_to":"edc87887_bbab3110","updated":"2021-09-14 14:02:05.000000000","message":"++","commit_id":"648798449647c6680d1c76ce2ae758c12967ab5c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cbdbfe75cf771bc699a05bd68476cc5742174bd8","unresolved":true,"context_lines":[{"line_number":19,"context_line":"CONF \u003d config.CONF"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class RbacBaseTests(object):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    identity_version \u003d \u0027v3\u0027"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"97b519dd_be84062a","line":22,"updated":"2021-09-14 14:02:05.000000000","message":"It\u0027s unfortunate that this doesn\u0027t inherit from BaseTestCase, as it creates the now thricely-mixed-in triple-inheritance situation we have in the actual tests. This is not your fault, but I really don\u0027t see the point in that confusing arrangement.","commit_id":"648798449647c6680d1c76ce2ae758c12967ab5c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2a3f08431d0d2e59c2d0c47edb10d78071865015","unresolved":true,"context_lines":[{"line_number":83,"context_line":"    @classmethod"},{"line_number":84,"context_line":"    def setup_clients(cls):"},{"line_number":85,"context_line":"        super(RbacBaseTests, cls).setup_clients()"},{"line_number":86,"context_line":"        # FIXME(lbragstad): This should use os_system_admin when glance"},{"line_number":87,"context_line":"        # supports system scope."},{"line_number":88,"context_line":"        cls.persona \u003d getattr(cls, f\u0027os_{cls.credentials[0]}\u0027)"},{"line_number":89,"context_line":"        cls.alt_persona \u003d getattr(cls, f\u0027os_{cls.credentials[1]}\u0027)"},{"line_number":90,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":91,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":92,"context_line":"        cls.admin_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":93,"context_line":"        cls.alt_admin_client \u003d cls.os_project_alt_admin.namespaces_client"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"9eec7b10_28ec6de3","line":91,"range":{"start_line":86,"start_character":0,"end_line":91,"end_character":73},"updated":"2021-09-14 20:40:06.000000000","message":"Dan walked me through why this is here, which is to make sure at least one admin namespace client exists to create namespaces for other metadef resources (e.g., objects). But the rest of this stuff might be fine living in the lower layers closer to the test. For example, the persona running the test is likely in each test class, and we shouldn\u0027t have to look for it here.","commit_id":"7a36e733f7840bbc41f70e72c67e04c3a7749032"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6c0acaf951187e51ed5735311c1cc6b3b05360e2","unresolved":true,"context_lines":[{"line_number":83,"context_line":"    @classmethod"},{"line_number":84,"context_line":"    def setup_clients(cls):"},{"line_number":85,"context_line":"        super(RbacBaseTests, cls).setup_clients()"},{"line_number":86,"context_line":"        # FIXME(lbragstad): This should use os_system_admin when glance"},{"line_number":87,"context_line":"        # supports system scope."},{"line_number":88,"context_line":"        cls.persona \u003d getattr(cls, f\u0027os_{cls.credentials[0]}\u0027)"},{"line_number":89,"context_line":"        cls.alt_persona \u003d getattr(cls, f\u0027os_{cls.credentials[1]}\u0027)"},{"line_number":90,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":91,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":92,"context_line":"        cls.admin_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":93,"context_line":"        cls.alt_admin_client \u003d cls.os_project_alt_admin.namespaces_client"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"376065ca_7dcd4bd2","line":91,"range":{"start_line":86,"start_character":0,"end_line":91,"end_character":73},"in_reply_to":"08021b44_0fe4aeb6","updated":"2021-09-15 14:20:50.000000000","message":"I agree with Lance point, I had hard time to find what all these creds and created in tests classes. \n\nEasy way is we make create_namespace take client and project ids as arg and create the namespace as requested by tests. that is how most of the tempest common methods are defined.","commit_id":"7a36e733f7840bbc41f70e72c67e04c3a7749032"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c8f3b56d9c7538c5456a610c69b2ffc70f2dda0e","unresolved":true,"context_lines":[{"line_number":83,"context_line":"    @classmethod"},{"line_number":84,"context_line":"    def setup_clients(cls):"},{"line_number":85,"context_line":"        super(RbacBaseTests, cls).setup_clients()"},{"line_number":86,"context_line":"        # FIXME(lbragstad): This should use os_system_admin when glance"},{"line_number":87,"context_line":"        # supports system scope."},{"line_number":88,"context_line":"        cls.persona \u003d getattr(cls, f\u0027os_{cls.credentials[0]}\u0027)"},{"line_number":89,"context_line":"        cls.alt_persona \u003d getattr(cls, f\u0027os_{cls.credentials[1]}\u0027)"},{"line_number":90,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":91,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":92,"context_line":"        cls.admin_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":93,"context_line":"        cls.alt_admin_client \u003d cls.os_project_alt_admin.namespaces_client"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"08021b44_0fe4aeb6","line":91,"range":{"start_line":86,"start_character":0,"end_line":91,"end_character":73},"in_reply_to":"4a875b6e_a62a825a","updated":"2021-09-15 06:59:14.000000000","message":"We need project_id and alt_project_id in each module to check for visibility in each module, so IMO it is better to define it in base class only.\n\nLike we check 404 not found for accessing object having namespace private of other project or else check for 200.","commit_id":"7a36e733f7840bbc41f70e72c67e04c3a7749032"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"d33ec25d758723ef140d104fd83faa7dcfedbacd","unresolved":true,"context_lines":[{"line_number":83,"context_line":"    @classmethod"},{"line_number":84,"context_line":"    def setup_clients(cls):"},{"line_number":85,"context_line":"        super(RbacBaseTests, cls).setup_clients()"},{"line_number":86,"context_line":"        # FIXME(lbragstad): This should use os_system_admin when glance"},{"line_number":87,"context_line":"        # supports system scope."},{"line_number":88,"context_line":"        cls.persona \u003d getattr(cls, f\u0027os_{cls.credentials[0]}\u0027)"},{"line_number":89,"context_line":"        cls.alt_persona \u003d getattr(cls, f\u0027os_{cls.credentials[1]}\u0027)"},{"line_number":90,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":91,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":92,"context_line":"        cls.admin_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":93,"context_line":"        cls.alt_admin_client \u003d cls.os_project_alt_admin.namespaces_client"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"4a875b6e_a62a825a","line":91,"range":{"start_line":86,"start_character":0,"end_line":91,"end_character":73},"in_reply_to":"9eec7b10_28ec6de3","updated":"2021-09-15 06:25:14.000000000","message":"Lance, we need project_id and alt_project_id here to create one public and one private namespace under each project and so we would need the persona and alt_persona here itself.","commit_id":"7a36e733f7840bbc41f70e72c67e04c3a7749032"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2a3f08431d0d2e59c2d0c47edb10d78071865015","unresolved":true,"context_lines":[{"line_number":90,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":91,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":92,"context_line":"        cls.admin_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":93,"context_line":"        cls.alt_admin_client \u003d cls.os_project_alt_admin.namespaces_client"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"def namespace(name, owner, visibility\u003d\u0027private\u0027, protected\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f6d77c9_ead20ffa","line":93,"updated":"2021-09-14 20:40:06.000000000","message":"Does it matter which one of these we use? Both are God-like, right?\n\nCouldn\u0027t this be:\n\n  cls.admin_namespace_client \u003d cls.os_project_admin.namespaces_client","commit_id":"7a36e733f7840bbc41f70e72c67e04c3a7749032"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"d33ec25d758723ef140d104fd83faa7dcfedbacd","unresolved":true,"context_lines":[{"line_number":90,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":91,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":92,"context_line":"        cls.admin_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":93,"context_line":"        cls.alt_admin_client \u003d cls.os_project_alt_admin.namespaces_client"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"def namespace(name, owner, visibility\u003d\u0027private\u0027, protected\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":27,"id":"6e778199_5a5bde18","line":93,"in_reply_to":"5f6d77c9_ead20ffa","updated":"2021-09-15 06:25:14.000000000","message":"yeah right, it doesn\u0027t. Creating namespaces for 2 different projects by same admin client would also be enough.","commit_id":"7a36e733f7840bbc41f70e72c67e04c3a7749032"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"60d4f20fefbd23e3ad904c8a896b85981bf65bae","unresolved":true,"context_lines":[{"line_number":90,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":91,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":92,"context_line":"        cls.admin_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":93,"context_line":"        cls.alt_admin_client \u003d cls.os_project_alt_admin.namespaces_client"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"def namespace(name, owner, visibility\u003d\u0027private\u0027, protected\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":27,"id":"a3cdc9a7_20306925","line":93,"in_reply_to":"66a40a8c_8c271edb","updated":"2021-09-15 11:24:59.000000000","message":"The project id\u0027s of both the admin clients are different than the project_id \u0026 alt_project_id.\nSo, here the owner of the namespace is the project_id of it\u0027s client.\n\nI think it\u0027s better to pass project_id as owner while creating namespace, and then only we could check the owner properly in the non admin tests and get the exact result.","commit_id":"7a36e733f7840bbc41f70e72c67e04c3a7749032"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c8f3b56d9c7538c5456a610c69b2ffc70f2dda0e","unresolved":true,"context_lines":[{"line_number":90,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":91,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":92,"context_line":"        cls.admin_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":93,"context_line":"        cls.alt_admin_client \u003d cls.os_project_alt_admin.namespaces_client"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"def namespace(name, owner, visibility\u003d\u0027private\u0027, protected\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":27,"id":"66a40a8c_8c271edb","line":93,"in_reply_to":"6e778199_5a5bde18","updated":"2021-09-15 06:59:14.000000000","message":"If we decided to use same admin client for both the projects then we need to pass project_id as owner while creating the namespace otherwise it will create all the namespaces for same project only.\n\nI think this will be easier to understand that namespace is created for two different projects with this, if you insist then we can keep only one admin client for both the projects (but everytime we need to keep in mind about passing different project_id as owner)","commit_id":"7a36e733f7840bbc41f70e72c67e04c3a7749032"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a14655a6c896730d7a414fb414e5f2374b78a946","unresolved":true,"context_lines":[{"line_number":90,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":91,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":92,"context_line":"        cls.admin_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":93,"context_line":"        cls.alt_admin_client \u003d cls.os_project_alt_admin.namespaces_client"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"def namespace(name, owner, visibility\u003d\u0027private\u0027, protected\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":27,"id":"274e3721_430bdb4a","line":93,"in_reply_to":"a3cdc9a7_20306925","updated":"2021-09-15 20:26:30.000000000","message":"Ok - so using two separate project admins for this is really for readability. Maybe gmann knows if there is a way to fetch the alt_project id from the test class without requiring the credential?","commit_id":"7a36e733f7840bbc41f70e72c67e04c3a7749032"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2a3f08431d0d2e59c2d0c47edb10d78071865015","unresolved":true,"context_lines":[{"line_number":126,"context_line":"                test_utils.call_and_ignore_notfound_exc,"},{"line_number":127,"context_line":"                self.admin_client.delete_namespace, project_ns)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"            alt_namespace \u003d self.alt_admin_client.create_namespace("},{"line_number":130,"context_line":"                **namespace(alt_ns, self.alt_admin_client.project_id,"},{"line_number":131,"context_line":"                            visibility\u003dvisibility))"},{"line_number":132,"context_line":"            alt_namespaces.append(alt_namespace)"}],"source_content_type":"text/x-python","patch_set":27,"id":"52e96019_718b5a3c","line":129,"range":{"start_line":129,"start_character":33,"end_line":129,"end_character":49},"updated":"2021-09-14 20:40:06.000000000","message":"Then this would be cls.admin_namespace_client?","commit_id":"7a36e733f7840bbc41f70e72c67e04c3a7749032"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c8f3b56d9c7538c5456a610c69b2ffc70f2dda0e","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                test_utils.call_and_ignore_notfound_exc,"},{"line_number":127,"context_line":"                self.admin_client.delete_namespace, project_ns)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"            alt_namespace \u003d self.alt_admin_client.create_namespace("},{"line_number":130,"context_line":"                **namespace(alt_ns, self.alt_admin_client.project_id,"},{"line_number":131,"context_line":"                            visibility\u003dvisibility))"},{"line_number":132,"context_line":"            alt_namespaces.append(alt_namespace)"}],"source_content_type":"text/x-python","patch_set":27,"id":"234c599a_85ea9147","line":129,"range":{"start_line":129,"start_character":33,"end_line":129,"end_character":49},"in_reply_to":"364b2ff9_6d2f5c70","updated":"2021-09-15 06:59:14.000000000","message":"I think you can access the same with self as well, and yes if we decided to use only one client then this will be changed to self.admin_namespace_client (or self.admin_client as per current naming structure).","commit_id":"7a36e733f7840bbc41f70e72c67e04c3a7749032"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"d33ec25d758723ef140d104fd83faa7dcfedbacd","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                test_utils.call_and_ignore_notfound_exc,"},{"line_number":127,"context_line":"                self.admin_client.delete_namespace, project_ns)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"            alt_namespace \u003d self.alt_admin_client.create_namespace("},{"line_number":130,"context_line":"                **namespace(alt_ns, self.alt_admin_client.project_id,"},{"line_number":131,"context_line":"                            visibility\u003dvisibility))"},{"line_number":132,"context_line":"            alt_namespaces.append(alt_namespace)"}],"source_content_type":"text/x-python","patch_set":27,"id":"364b2ff9_6d2f5c70","line":129,"range":{"start_line":129,"start_character":33,"end_line":129,"end_character":49},"in_reply_to":"52e96019_718b5a3c","updated":"2021-09-15 06:25:14.000000000","message":"Ack","commit_id":"7a36e733f7840bbc41f70e72c67e04c3a7749032"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e2010a4bde3675d2594793c246c5556283066e4a","unresolved":true,"context_lines":[{"line_number":89,"context_line":"        cls.alt_persona \u003d getattr(cls, f\u0027os_{cls.credentials[1]}\u0027)"},{"line_number":90,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":91,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":92,"context_line":"        cls.admin_namespace_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"def namespace(name, owner, visibility\u003d\u0027private\u0027, protected\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":29,"id":"5a5ed0d3_173bac26","line":92,"updated":"2021-09-15 20:30:12.000000000","message":"We discussed this in #openstack-glance and debated if we should rely on this short-hand convention or if it would be more readable and less fragile if we just use the client strings in the tests directly, removing the need for this method entirely.\n\nSince this method assumes an order (the first string should always represent the client under test), it can be fragile and unclear why things break when people use credentials in each test module.\n\nhttps://meetings.opendev.org/irclogs/%23openstack-glance/%23openstack-glance.2021-09-15.log.html#t2021-09-15T14:32:08","commit_id":"758fc619fdd9ecbc9301691304508d1d0266a578"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"433b2db0e9e821bd6b4036896f748694b665e234","unresolved":true,"context_lines":[{"line_number":89,"context_line":"        cls.alt_persona \u003d getattr(cls, f\u0027os_{cls.credentials[1]}\u0027)"},{"line_number":90,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":91,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":92,"context_line":"        cls.admin_namespace_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"def namespace(name, owner, visibility\u003d\u0027private\u0027, protected\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":29,"id":"b7779e03_08b69437","line":92,"in_reply_to":"2de69f3f_ba335cb2","updated":"2021-09-21 11:42:49.000000000","message":"ack.\nBut I think we can remove the namespace_client setup from here as well, because the project ids are same for all the personas and the admin namespace client we can directly use here.","commit_id":"758fc619fdd9ecbc9301691304508d1d0266a578"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0d27f6edc2b98a618cb087f519eda5e74021bd11","unresolved":true,"context_lines":[{"line_number":89,"context_line":"        cls.alt_persona \u003d getattr(cls, f\u0027os_{cls.credentials[1]}\u0027)"},{"line_number":90,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":91,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":92,"context_line":"        cls.admin_namespace_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"def namespace(name, owner, visibility\u003d\u0027private\u0027, protected\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":29,"id":"7f2fa2c6_040e5fdd","line":92,"in_reply_to":"5a5ed0d3_173bac26","updated":"2021-09-16 05:48:48.000000000","message":"In short we need to remove this setup client method and maintain/initialize/use this clients in test specific modules only, right?","commit_id":"758fc619fdd9ecbc9301691304508d1d0266a578"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"4e4afdf026397e03d58df9a5981bfbd16b38567a","unresolved":true,"context_lines":[{"line_number":89,"context_line":"        cls.alt_persona \u003d getattr(cls, f\u0027os_{cls.credentials[1]}\u0027)"},{"line_number":90,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":91,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":92,"context_line":"        cls.admin_namespace_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"def namespace(name, owner, visibility\u003d\u0027private\u0027, protected\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":29,"id":"2de69f3f_ba335cb2","line":92,"in_reply_to":"7ac12725_a25975fb","updated":"2021-09-20 15:32:04.000000000","message":"+1, that is an easy way to understand and debug the tests.","commit_id":"758fc619fdd9ecbc9301691304508d1d0266a578"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"561125890faba8d1eb39ce51e74368ea362ad3d4","unresolved":true,"context_lines":[{"line_number":89,"context_line":"        cls.alt_persona \u003d getattr(cls, f\u0027os_{cls.credentials[1]}\u0027)"},{"line_number":90,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":91,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":92,"context_line":"        cls.admin_namespace_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"def namespace(name, owner, visibility\u003d\u0027private\u0027, protected\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":29,"id":"7ac12725_a25975fb","line":92,"in_reply_to":"7f2fa2c6_040e5fdd","updated":"2021-09-20 14:28:49.000000000","message":"I think we need a couple things:\n\n 1. Remove the positional credentials-based setup for the persona clients here and elsewhere\n 2. Avoid any of the other \u0027cls.client \u003d \u0027 overrides where cls.client points to something different based on test class.\n\nI think it\u0027s okay to leave the namespaces_client setup here, because lots of things use that, but it should be something like:\n\n cls.namespaces_client \u003d ...\n cls.admin_namespaces_client \u003d ...\n\nto avoid confusion.","commit_id":"758fc619fdd9ecbc9301691304508d1d0266a578"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"57307d97965311a90dbf646031f780e46f04ee63","unresolved":true,"context_lines":[{"line_number":89,"context_line":"    ns[\u0027display_name\u0027] \u003d ns[\u0027namespace\u0027]"},{"line_number":90,"context_line":"    ns[\u0027owner\u0027] \u003d owner"},{"line_number":91,"context_line":"    ns[\u0027protected\u0027] \u003d protected"},{"line_number":92,"context_line":"    return ns"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"class RbacMetadefBase(RbacBaseTests):"}],"source_content_type":"text/x-python","patch_set":30,"id":"77cdfedf_3eddb24a","line":92,"range":{"start_line":92,"start_character":11,"end_line":92,"end_character":13},"updated":"2021-09-23 18:23:01.000000000","message":"Why not just use the more Pythonic:\n\nreturn {\u0027namespace\u0027: name, \u0027visibility\u0027: visibility, ...}\n\n?","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"22ba55487742c33649c3fc48e0727cb079e7eac6","unresolved":true,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"class RbacMetadefBase(RbacBaseTests):"},{"line_number":96,"context_line":"    def create_namespaces(self):"},{"line_number":97,"context_line":"        \"\"\"Create private and public namespaces for different projects.\"\"\""},{"line_number":98,"context_line":"        project_namespaces \u003d []"},{"line_number":99,"context_line":"        alt_namespaces \u003d []"},{"line_number":100,"context_line":"        project_id \u003d self.os_project_admin.namespaces_client.project_id"}],"source_content_type":"text/x-python","patch_set":30,"id":"ef8f447e_78c89ae7","line":97,"updated":"2021-09-21 14:54:04.000000000","message":"If we really wanted to, we could just have the self.os_project_admin use the project client to create an entirely new project instead of relying on the os_project_alt_admin. Then the credentials would only contain the \u0027project_admin\u0027 credentials.\n\nBut, that\u0027s probably splitting hairs at this point. Also, I think we need to update the existing image tests we worked on in Wallaby to be consistent with all this anyway, so we can figure out if we want to do something like this then, too.","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"846eaab74fc91bc0e2898f2a406e21b88dceb473","unresolved":true,"context_lines":[{"line_number":97,"context_line":"        \"\"\"Create private and public namespaces for different projects.\"\"\""},{"line_number":98,"context_line":"        project_namespaces \u003d []"},{"line_number":99,"context_line":"        alt_namespaces \u003d []"},{"line_number":100,"context_line":"        project_id \u003d self.os_project_admin.namespaces_client.project_id"},{"line_number":101,"context_line":"        alt_project_id \u003d \\"},{"line_number":102,"context_line":"            self.os_project_alt_admin.namespaces_client.project_id"},{"line_number":103,"context_line":"        for visibility in [\u0027public\u0027, \u0027private\u0027]:"}],"source_content_type":"text/x-python","patch_set":30,"id":"8a8aace3_bab3314d","line":100,"range":{"start_line":100,"start_character":21,"end_line":100,"end_character":71},"updated":"2021-09-21 15:00:50.000000000","message":"self.project_id","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"846eaab74fc91bc0e2898f2a406e21b88dceb473","unresolved":true,"context_lines":[{"line_number":99,"context_line":"        alt_namespaces \u003d []"},{"line_number":100,"context_line":"        project_id \u003d self.os_project_admin.namespaces_client.project_id"},{"line_number":101,"context_line":"        alt_project_id \u003d \\"},{"line_number":102,"context_line":"            self.os_project_alt_admin.namespaces_client.project_id"},{"line_number":103,"context_line":"        for visibility in [\u0027public\u0027, \u0027private\u0027]:"},{"line_number":104,"context_line":"            project_ns \u003d \"%s_%s_%s\" % ("},{"line_number":105,"context_line":"                project_id,"}],"source_content_type":"text/x-python","patch_set":30,"id":"9a82a1ad_f6636cac","line":102,"range":{"start_line":102,"start_character":12,"end_line":102,"end_character":66},"updated":"2021-09-21 15:00:50.000000000","message":"self.alt_project_id","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"846eaab74fc91bc0e2898f2a406e21b88dceb473","unresolved":true,"context_lines":[{"line_number":110,"context_line":"                                   data_utils.rand_name(\u0027namespace\u0027))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"            project_namespace \u003d \\"},{"line_number":113,"context_line":"                self.os_project_admin.namespaces_client.create_namespace("},{"line_number":114,"context_line":"                    **namespace(project_ns, project_id,"},{"line_number":115,"context_line":"                                visibility\u003dvisibility))"},{"line_number":116,"context_line":"            project_namespaces.append(project_namespace)"}],"source_content_type":"text/x-python","patch_set":30,"id":"83f53b3d_bf406e79","line":113,"range":{"start_line":113,"start_character":16,"end_line":113,"end_character":55},"updated":"2021-09-21 15:00:50.000000000","message":"I think we can directly use self.admin_namespace_client here, right?","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"846eaab74fc91bc0e2898f2a406e21b88dceb473","unresolved":true,"context_lines":[{"line_number":116,"context_line":"            project_namespaces.append(project_namespace)"},{"line_number":117,"context_line":"            self.addCleanup("},{"line_number":118,"context_line":"                test_utils.call_and_ignore_notfound_exc,"},{"line_number":119,"context_line":"                self.os_project_admin.namespaces_client.delete_namespace,"},{"line_number":120,"context_line":"                project_ns)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"            alt_namespace \u003d \\"}],"source_content_type":"text/x-python","patch_set":30,"id":"121bf17d_48a5e720","line":119,"range":{"start_line":119,"start_character":16,"end_line":119,"end_character":55},"updated":"2021-09-21 15:00:50.000000000","message":"ditto","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"846eaab74fc91bc0e2898f2a406e21b88dceb473","unresolved":true,"context_lines":[{"line_number":120,"context_line":"                project_ns)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"            alt_namespace \u003d \\"},{"line_number":123,"context_line":"                self.os_project_admin.namespaces_client.create_namespace("},{"line_number":124,"context_line":"                    **namespace(alt_ns, alt_project_id,"},{"line_number":125,"context_line":"                                visibility\u003dvisibility))"},{"line_number":126,"context_line":"            alt_namespaces.append(alt_namespace)"}],"source_content_type":"text/x-python","patch_set":30,"id":"908186d9_6be8e63c","line":123,"range":{"start_line":123,"start_character":16,"end_line":123,"end_character":55},"updated":"2021-09-21 15:00:50.000000000","message":"ditto","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"846eaab74fc91bc0e2898f2a406e21b88dceb473","unresolved":true,"context_lines":[{"line_number":126,"context_line":"            alt_namespaces.append(alt_namespace)"},{"line_number":127,"context_line":"            self.addCleanup("},{"line_number":128,"context_line":"                test_utils.call_and_ignore_notfound_exc,"},{"line_number":129,"context_line":"                self.os_project_admin.namespaces_client.delete_namespace,"},{"line_number":130,"context_line":"                alt_ns)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        return project_namespaces + alt_namespaces"}],"source_content_type":"text/x-python","patch_set":30,"id":"2644f71c_81fdcdf5","line":129,"range":{"start_line":129,"start_character":16,"end_line":129,"end_character":55},"updated":"2021-09-21 15:00:50.000000000","message":"ditto","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"}],"glance_tempest_plugin/tests/rbac/v2/metadefs/metadef_utils.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0f7ed985fb5cd69310ed55e3499ec6f149c611bd","unresolved":true,"context_lines":[{"line_number":48,"context_line":"            alt_namespace \u003d self.alt_admin_client.create_namespace("},{"line_number":49,"context_line":"                **namespace(alt_namespace, self.alt_admin_client.project_id,"},{"line_number":50,"context_line":"                            visibility\u003dvisibility))"},{"line_number":51,"context_line":"            alt_namespaces.append(alt_namespace)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        return project_namespaces + alt_namespaces"}],"source_content_type":"text/x-python","patch_set":22,"id":"1c14e685_8aa837b5","line":51,"updated":"2021-09-07 21:31:47.000000000","message":"Can we tack the cleanup call in here? This would keep the setup and cleanup of namespaces in one place, reduce a line in each test that\u0027s calling this method to handle cleanup separately, and it would remove the base cleanup() method.\n\nOne potential problem with keeping namespace creation and cleanup separate is that if I go to write a new test and if I don\u0027t know about the cleanup method, I\u0027ll start writing tests that don\u0027t invoke cleanup unless I dig for examples or copy code.","commit_id":"c4fda21b4bd1bd2d6a41d2cd24e64c3177a36b27"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"ef50d754985f9394ec74d41d8bd6d232fc0ef365","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            alt_namespace \u003d self.alt_admin_client.create_namespace("},{"line_number":49,"context_line":"                **namespace(alt_namespace, self.alt_admin_client.project_id,"},{"line_number":50,"context_line":"                            visibility\u003dvisibility))"},{"line_number":51,"context_line":"            alt_namespaces.append(alt_namespace)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        return project_namespaces + alt_namespaces"}],"source_content_type":"text/x-python","patch_set":22,"id":"3525d7f1_2f83dd8c","line":51,"in_reply_to":"1c14e685_8aa837b5","updated":"2021-09-08 08:49:05.000000000","message":"Done","commit_id":"c4fda21b4bd1bd2d6a41d2cd24e64c3177a36b27"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e7256c0509b627f3b1abca92ebcde401f5aa76c0","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        total_namespaces \u003d project_namespaces + alt_namespaces"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        # Cleanup"},{"line_number":56,"context_line":"        self.cleanup(total_namespaces)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        return total_namespaces"}],"source_content_type":"text/x-python","patch_set":23,"id":"bc85fec8_b3e7aede","line":56,"updated":"2021-09-08 09:07:04.000000000","message":"This is not what Lance suggested,\nI think he asked to remove cleanup call from base and add self.Cleanup here after line 46 and 51","commit_id":"bc107e876c13c84bfc8241f52a09605c2769f35b"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"9e83d3cc87871155973dd8df792c85ebd3eee5a8","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        total_namespaces \u003d project_namespaces + alt_namespaces"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        # Cleanup"},{"line_number":56,"context_line":"        self.cleanup(total_namespaces)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        return total_namespaces"}],"source_content_type":"text/x-python","patch_set":23,"id":"8786cbf6_bba93c86","line":56,"in_reply_to":"115643d8_7c229f48","updated":"2021-09-09 13:03:21.000000000","message":"Done","commit_id":"bc107e876c13c84bfc8241f52a09605c2769f35b"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"90e2ca08b4982d15e623472d7f1b342780dd54d5","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        total_namespaces \u003d project_namespaces + alt_namespaces"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        # Cleanup"},{"line_number":56,"context_line":"        self.cleanup(total_namespaces)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        return total_namespaces"}],"source_content_type":"text/x-python","patch_set":23,"id":"115643d8_7c229f48","line":56,"in_reply_to":"1eaed2d8_21e03f30","updated":"2021-09-09 05:32:55.000000000","message":"We are already in a loop and if you want to call it once which will introduce another loop, so its better to call it twice than adding another loop.","commit_id":"bc107e876c13c84bfc8241f52a09605c2769f35b"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"da716e7d8e3d8b5cae00c217da141ea8d80d0736","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        total_namespaces \u003d project_namespaces + alt_namespaces"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        # Cleanup"},{"line_number":56,"context_line":"        self.cleanup(total_namespaces)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        return total_namespaces"}],"source_content_type":"text/x-python","patch_set":23,"id":"1eaed2d8_21e03f30","line":56,"in_reply_to":"bc85fec8_b3e7aede","updated":"2021-09-08 10:24:38.000000000","message":"ohh I missed that, will move the cleanup method here in MetadefTestUtilities.\n\nBut I think calling it once at #56 it better than calling it twice at #46 \u0026 #51.","commit_id":"bc107e876c13c84bfc8241f52a09605c2769f35b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cbdbfe75cf771bc699a05bd68476cc5742174bd8","unresolved":true,"context_lines":[{"line_number":56,"context_line":"                test_utils.call_and_ignore_notfound_exc,"},{"line_number":57,"context_line":"                self.admin_client.delete_namespace, alt_ns)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        return project_namespaces + alt_namespaces"}],"source_content_type":"text/x-python","patch_set":25,"id":"08f4aa25_ac921b37","line":59,"updated":"2021-09-14 14:02:05.000000000","message":"Much like my comment on the refactors in the main tree, I don\u0027t think this needs to be a separate file/class from the base test and doing so doesn\u0027t add anything, IMHO. This clearly requires mixing in to a TestCase class, and keeping it separate just means we have to mix it in everywhere.","commit_id":"648798449647c6680d1c76ce2ae758c12967ab5c"}],"glance_tempest_plugin/tests/rbac/v2/metadefs/test_namespaces.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"94eb8f8f660d30f103b9a15fbfe4824b44fc01fc","unresolved":true,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from glance_tempest_plugin.tests.rbac.v2 import base as rbac_base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"CONF \u003d config.CONF"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class MetadefV2RbacNamespaceTest(rbac_base.MetadefV2RbacBaseTests,"}],"source_content_type":"text/x-python","patch_set":13,"id":"f814c20b_a2320d4d","line":22,"updated":"2021-08-26 20:05:29.000000000","message":"Not seeing it is used anywhere, so do we need it?","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a774e3948831c14100f0bbc9767c8950c1b34909","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from glance_tempest_plugin.tests.rbac.v2 import base as rbac_base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"CONF \u003d config.CONF"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class MetadefV2RbacNamespaceTest(rbac_base.MetadefV2RbacBaseTests,"}],"source_content_type":"text/x-python","patch_set":13,"id":"140393e9_03101c5d","line":22,"in_reply_to":"f814c20b_a2320d4d","updated":"2021-08-30 11:01:37.000000000","message":"yeah, Not needed, will remove it","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"94eb8f8f660d30f103b9a15fbfe4824b44fc01fc","unresolved":true,"context_lines":[{"line_number":34,"context_line":"        cls.alt_member_or_reader_client \u003d cls.alt_persona.namespaces_client"},{"line_number":35,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":36,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @abc.abstractmethod"},{"line_number":39,"context_line":"    def test_get_namespace(self):"},{"line_number":40,"context_line":"        \"\"\"Test get_metadef_namespace policy.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"ae512153_3a220cda","line":37,"updated":"2021-08-26 20:05:29.000000000","message":"nit: both two lines can be shifted to base class","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a774e3948831c14100f0bbc9767c8950c1b34909","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        cls.alt_member_or_reader_client \u003d cls.alt_persona.namespaces_client"},{"line_number":35,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":36,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @abc.abstractmethod"},{"line_number":39,"context_line":"    def test_get_namespace(self):"},{"line_number":40,"context_line":"        \"\"\"Test get_metadef_namespace policy.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"57844d77_6aad31aa","line":37,"in_reply_to":"ae512153_3a220cda","updated":"2021-08-30 11:01:37.000000000","message":"Ack","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"94eb8f8f660d30f103b9a15fbfe4824b44fc01fc","unresolved":true,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        namespace_ids \u003d set(ns[\u0027namespace\u0027] for ns in resp[\u0027namespaces\u0027])"},{"line_number":85,"context_line":"        for ns in total_ns:"},{"line_number":86,"context_line":"            self.assertIn(ns[\u0027namespace\u0027], namespace_ids)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        # Cleanup"},{"line_number":89,"context_line":"        self.cleanup(total_ns, self.alt_admin_client)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba94c9ce_108dee1e","line":86,"updated":"2021-08-26 20:05:29.000000000","message":"You can extract these 3 lines in one method like\n\ndef assertNamespaces(namespaces):\n   …..\n\nAnd call it here and line 76 as well","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a774e3948831c14100f0bbc9767c8950c1b34909","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        namespace_ids \u003d set(ns[\u0027namespace\u0027] for ns in resp[\u0027namespaces\u0027])"},{"line_number":85,"context_line":"        for ns in total_ns:"},{"line_number":86,"context_line":"            self.assertIn(ns[\u0027namespace\u0027], namespace_ids)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        # Cleanup"},{"line_number":89,"context_line":"        self.cleanup(total_ns, self.alt_admin_client)"}],"source_content_type":"text/x-python","patch_set":13,"id":"17843880_9024f677","line":86,"in_reply_to":"ba94c9ce_108dee1e","updated":"2021-08-30 11:01:37.000000000","message":"Ack","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"20016ab79bfaf1742f8742b6383e56df079b388e","unresolved":true,"context_lines":[{"line_number":174,"context_line":"class ProjectMemberTests(MetadefV2RbacNamespaceTest,"},{"line_number":175,"context_line":"                         tempest.test.BaseTestCase):"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    credentials \u003d [\u0027project_member\u0027, \u0027project_alt_member\u0027, \u0027project_admin\u0027,"},{"line_number":178,"context_line":"                   \u0027project_alt_admin\u0027]"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def test_get_namespace(self):"},{"line_number":181,"context_line":"        alt_namespaces, project_namespaces \u003d self.load_data()"}],"source_content_type":"text/x-python","patch_set":13,"id":"b7c7b425_4a8fb374","line":178,"range":{"start_line":177,"start_character":57,"end_line":178,"end_character":38},"updated":"2021-08-30 06:37:32.000000000","message":"I think these two are not required","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a774e3948831c14100f0bbc9767c8950c1b34909","unresolved":false,"context_lines":[{"line_number":174,"context_line":"class ProjectMemberTests(MetadefV2RbacNamespaceTest,"},{"line_number":175,"context_line":"                         tempest.test.BaseTestCase):"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    credentials \u003d [\u0027project_member\u0027, \u0027project_alt_member\u0027, \u0027project_admin\u0027,"},{"line_number":178,"context_line":"                   \u0027project_alt_admin\u0027]"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def test_get_namespace(self):"},{"line_number":181,"context_line":"        alt_namespaces, project_namespaces \u003d self.load_data()"}],"source_content_type":"text/x-python","patch_set":13,"id":"aedb1652_4fb4e6f9","line":178,"range":{"start_line":177,"start_character":57,"end_line":178,"end_character":38},"in_reply_to":"b7c7b425_4a8fb374","updated":"2021-08-30 11:01:37.000000000","message":"Ack","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"94eb8f8f660d30f103b9a15fbfe4824b44fc01fc","unresolved":true,"context_lines":[{"line_number":258,"context_line":"                            expected_status\u003dexpected_status,"},{"line_number":259,"context_line":"                            client\u003dself.member_or_reader_client,"},{"line_number":260,"context_line":"                            description\u003ddata_utils.arbitrary_string(),"},{"line_number":261,"context_line":"                            namespace\u003dns[\u0027namespace\u0027])"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        # Check member role of \u0027alt_project\u0027 is forbidden to update namespace"},{"line_number":264,"context_line":"        for ns in total_ns:"}],"source_content_type":"text/x-python","patch_set":13,"id":"cf6b1561_45b8f867","line":261,"updated":"2021-08-26 20:05:29.000000000","message":"Similarly this could be extracted in one method like\n\ndef assertNamespaceUodate(namespace, owner):\n……..\n\n\nAnd can be called here and line 265","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a774e3948831c14100f0bbc9767c8950c1b34909","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                            expected_status\u003dexpected_status,"},{"line_number":259,"context_line":"                            client\u003dself.member_or_reader_client,"},{"line_number":260,"context_line":"                            description\u003ddata_utils.arbitrary_string(),"},{"line_number":261,"context_line":"                            namespace\u003dns[\u0027namespace\u0027])"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        # Check member role of \u0027alt_project\u0027 is forbidden to update namespace"},{"line_number":264,"context_line":"        for ns in total_ns:"}],"source_content_type":"text/x-python","patch_set":13,"id":"542b03a5_45840b9c","line":261,"in_reply_to":"cf6b1561_45b8f867","updated":"2021-08-30 11:01:37.000000000","message":"Ack","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"94eb8f8f660d30f103b9a15fbfe4824b44fc01fc","unresolved":true,"context_lines":[{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        # Check member role of \u0027project\u0027 is forbidden to delete namespace"},{"line_number":297,"context_line":"        for ns in total_ns:"},{"line_number":298,"context_line":"            expected_status \u003d exceptions.Forbidden"},{"line_number":299,"context_line":"            if not (ns[\u0027visibility\u0027] \u003d\u003d \u0027public\u0027 or"},{"line_number":300,"context_line":"                    ns[\u0027owner\u0027] \u003d\u003d self.project_id):"},{"line_number":301,"context_line":"                expected_status \u003d exceptions.NotFound"}],"source_content_type":"text/x-python","patch_set":13,"id":"a667f980_a6ad1fa0","line":298,"updated":"2021-08-26 20:05:29.000000000","message":"ditto, assertDeleteNamespace","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a774e3948831c14100f0bbc9767c8950c1b34909","unresolved":false,"context_lines":[{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        # Check member role of \u0027project\u0027 is forbidden to delete namespace"},{"line_number":297,"context_line":"        for ns in total_ns:"},{"line_number":298,"context_line":"            expected_status \u003d exceptions.Forbidden"},{"line_number":299,"context_line":"            if not (ns[\u0027visibility\u0027] \u003d\u003d \u0027public\u0027 or"},{"line_number":300,"context_line":"                    ns[\u0027owner\u0027] \u003d\u003d self.project_id):"},{"line_number":301,"context_line":"                expected_status \u003d exceptions.NotFound"}],"source_content_type":"text/x-python","patch_set":13,"id":"96a6aeb2_2a93c97e","line":298,"in_reply_to":"a667f980_a6ad1fa0","updated":"2021-08-30 11:01:37.000000000","message":"Ack","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"20016ab79bfaf1742f8742b6383e56df079b388e","unresolved":true,"context_lines":[{"line_number":329,"context_line":""},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"class ProjectReaderTests(ProjectMemberTests, tempest.test.BaseTestCase):"},{"line_number":332,"context_line":"    credentials \u003d [\u0027project_reader\u0027, \u0027project_alt_reader\u0027, \u0027project_admin\u0027,"},{"line_number":333,"context_line":"                   \u0027project_alt_admin\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"a96a4a45_74efbc73","line":333,"range":{"start_line":332,"start_character":59,"end_line":333,"end_character":38},"updated":"2021-08-30 06:37:32.000000000","message":"ditto","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a774e3948831c14100f0bbc9767c8950c1b34909","unresolved":false,"context_lines":[{"line_number":329,"context_line":""},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"class ProjectReaderTests(ProjectMemberTests, tempest.test.BaseTestCase):"},{"line_number":332,"context_line":"    credentials \u003d [\u0027project_reader\u0027, \u0027project_alt_reader\u0027, \u0027project_admin\u0027,"},{"line_number":333,"context_line":"                   \u0027project_alt_admin\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"85399b01_af7539a2","line":333,"range":{"start_line":332,"start_character":59,"end_line":333,"end_character":38},"in_reply_to":"a96a4a45_74efbc73","updated":"2021-08-30 11:01:37.000000000","message":"Ack","commit_id":"b35be1a69d14bcbf63c0e3748d46a54cec6d1d90"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1060ce210252962fb9803fa70ae785b7da3b6703","unresolved":true,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    credentials \u003d [\u0027project_admin\u0027, \u0027project_alt_admin\u0027]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _assertListNamespaces(self, namespaces, resp, owner\u003dNone):"},{"line_number":64,"context_line":"        namespace_ids \u003d set(ns[\u0027namespace\u0027] for ns in resp[\u0027namespaces\u0027])"},{"line_number":65,"context_line":"        if owner:"},{"line_number":66,"context_line":"            for ns in namespaces:"}],"source_content_type":"text/x-python","patch_set":15,"id":"07e102ca_74e2942a","line":63,"range":{"start_line":63,"start_character":8,"end_line":63,"end_character":29},"updated":"2021-08-30 16:05:22.000000000","message":"This and _assertNamespaceGet seem like nice utilities that are useful across personas.\n\nI feel like this should live in the abstract base class instead of the test module implementation since it\u0027s a utility and the other personas need it. This is also a good opportunity to keep the inheritance between test modules restricted to tests.","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"efe4d34d8e76c232fbec9f7a8e275dcf4473b078","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    credentials \u003d [\u0027project_admin\u0027, \u0027project_alt_admin\u0027]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _assertListNamespaces(self, namespaces, resp, owner\u003dNone):"},{"line_number":64,"context_line":"        namespace_ids \u003d set(ns[\u0027namespace\u0027] for ns in resp[\u0027namespaces\u0027])"},{"line_number":65,"context_line":"        if owner:"},{"line_number":66,"context_line":"            for ns in namespaces:"}],"source_content_type":"text/x-python","patch_set":15,"id":"9e2408d1_2578c83c","line":63,"range":{"start_line":63,"start_character":8,"end_line":63,"end_character":29},"in_reply_to":"07e102ca_74e2942a","updated":"2021-08-30 16:25:26.000000000","message":"Ack","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"8f887a00c72dcb4f42af09f15a39d38a1a20fce5","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    credentials \u003d [\u0027project_admin\u0027, \u0027project_alt_admin\u0027]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _assertListNamespaces(self, namespaces, resp, owner\u003dNone):"},{"line_number":64,"context_line":"        namespace_ids \u003d set(ns[\u0027namespace\u0027] for ns in resp[\u0027namespaces\u0027])"},{"line_number":65,"context_line":"        if owner:"},{"line_number":66,"context_line":"            for ns in namespaces:"}],"source_content_type":"text/x-python","patch_set":15,"id":"7c0a17c7_839b1193","line":63,"range":{"start_line":63,"start_character":8,"end_line":63,"end_character":29},"in_reply_to":"9e2408d1_2578c83c","updated":"2021-08-30 20:26:12.000000000","message":"I don\u0027t see any benefit of having this in abstract class, since it\u0027s limited to namespaces only. Please correct me if i\u0027m wrong.","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"aa4111ead4044f2547837a0b6f8bcdcca7fc31d6","unresolved":true,"context_lines":[{"line_number":165,"context_line":"    def test_get_namespace(self):"},{"line_number":166,"context_line":"        namespaces \u003d self.create_namespaces()"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        def _assertNamespaceGet(namespace, owner):"},{"line_number":169,"context_line":"            expected_status \u003d 200"},{"line_number":170,"context_line":"            if not (namespace[\u0027visibility\u0027] \u003d\u003d \u0027public\u0027 or"},{"line_number":171,"context_line":"                    namespace[\u0027owner\u0027] \u003d\u003d self.project_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"78d94dbf_61901f26","line":168,"range":{"start_line":168,"start_character":43,"end_line":168,"end_character":48},"updated":"2021-08-30 15:41:23.000000000","message":"this is not used.","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"8f887a00c72dcb4f42af09f15a39d38a1a20fce5","unresolved":true,"context_lines":[{"line_number":165,"context_line":"    def test_get_namespace(self):"},{"line_number":166,"context_line":"        namespaces \u003d self.create_namespaces()"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        def _assertNamespaceGet(namespace, owner):"},{"line_number":169,"context_line":"            expected_status \u003d 200"},{"line_number":170,"context_line":"            if not (namespace[\u0027visibility\u0027] \u003d\u003d \u0027public\u0027 or"},{"line_number":171,"context_line":"                    namespace[\u0027owner\u0027] \u003d\u003d self.project_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"62dd707a_5ee708c4","line":168,"range":{"start_line":168,"start_character":43,"end_line":168,"end_character":48},"in_reply_to":"78d94dbf_61901f26","updated":"2021-08-30 20:26:12.000000000","message":"Oops! I missed this..","commit_id":"3d4b78cddab5371f2fbb2d9c75c2d28ed4d6f861"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"3d5f7bd9c285f813df4692b39df3f9818dd2c574","unresolved":true,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"            self.do_request(\u0027show_namespace\u0027,"},{"line_number":176,"context_line":"                            expected_status\u003dexpected_status,"},{"line_number":177,"context_line":"                            client\u003dself.member_or_reader_client,"},{"line_number":178,"context_line":"                            namespace\u003dnamespace[\u0027namespace\u0027])"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        # Get namespace - member role from \u0027project\u0027 can access all"}],"source_content_type":"text/x-python","patch_set":16,"id":"676c0cd2_94f569a4","line":177,"range":{"start_line":177,"start_character":35,"end_line":177,"end_character":64},"updated":"2021-08-31 06:48:32.000000000","message":"this should be different client for alt_project check","commit_id":"51b8810150ff315f46660b7847f6e4bbe1278474"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"3d5f7bd9c285f813df4692b39df3f9818dd2c574","unresolved":true,"context_lines":[{"line_number":200,"context_line":"        # List namespace - member role from \u0027alt_project\u0027 can access all"},{"line_number":201,"context_line":"        # namespaces of it\u0027s own \u0026 only private namespace of \u0027project\u0027"},{"line_number":202,"context_line":"        resp \u003d self.do_request(\u0027list_namespaces\u0027,"},{"line_number":203,"context_line":"                               client\u003dself.member_or_reader_client,"},{"line_number":204,"context_line":"                               expected_status\u003d200)"},{"line_number":205,"context_line":"        self._assertListNamespaces(namespaces, resp, self.alt_project_id)"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"f58cd718_98848b1f","line":203,"range":{"start_line":203,"start_character":38,"end_line":203,"end_character":67},"updated":"2021-08-31 06:48:32.000000000","message":"this should be alt_member_or_reader_client","commit_id":"51b8810150ff315f46660b7847f6e4bbe1278474"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"3d5f7bd9c285f813df4692b39df3f9818dd2c574","unresolved":true,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"            self.do_request(\u0027update_namespace\u0027,"},{"line_number":217,"context_line":"                            expected_status\u003dexpected_status,"},{"line_number":218,"context_line":"                            client\u003dself.member_or_reader_client,"},{"line_number":219,"context_line":"                            description\u003ddata_utils.arbitrary_string(),"},{"line_number":220,"context_line":"                            namespace\u003dnamespace[\u0027namespace\u0027])"},{"line_number":221,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3d613cc1_4df6a700","line":218,"range":{"start_line":218,"start_character":35,"end_line":218,"end_character":64},"updated":"2021-08-31 06:48:32.000000000","message":"This should be different client for alt_project check","commit_id":"51b8810150ff315f46660b7847f6e4bbe1278474"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"3d5f7bd9c285f813df4692b39df3f9818dd2c574","unresolved":true,"context_lines":[{"line_number":251,"context_line":""},{"line_number":252,"context_line":"            self.do_request(\u0027delete_namespace\u0027,"},{"line_number":253,"context_line":"                            expected_status\u003dexpected_status,"},{"line_number":254,"context_line":"                            client\u003dself.member_or_reader_client,"},{"line_number":255,"context_line":"                            namespace\u003dnamespace[\u0027namespace\u0027])"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        # Check member role of \u0027project\u0027 is forbidden to delete namespace"}],"source_content_type":"text/x-python","patch_set":16,"id":"3ec14d1a_fb4bad26","line":254,"range":{"start_line":254,"start_character":28,"end_line":254,"end_character":64},"updated":"2021-08-31 06:48:32.000000000","message":"ditto","commit_id":"51b8810150ff315f46660b7847f6e4bbe1278474"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"53eec9ebcc8ede1cf3d9ae20aa2e4b16361630a0","unresolved":true,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def setUp(self):"},{"line_number":26,"context_line":"        # NOTE(abhishekk): Avoid conflicts with other metadef tests."},{"line_number":27,"context_line":"        self.useFixture(fixtures.LockFixture(\u0027metadef_namespaces\u0027))"},{"line_number":28,"context_line":"        super(MetadefV2RbacNamespaceTest, self).setUp()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":20,"id":"eced4301_48f7e8d1","line":27,"updated":"2021-09-03 15:13:27.000000000","message":"If we leave a NOTE here, it would be good to include why the issue exists. The fixture name eludes to a conflict of some sort.","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"53eec9ebcc8ede1cf3d9ae20aa2e4b16361630a0","unresolved":true,"context_lines":[{"line_number":32,"context_line":"        super(MetadefV2RbacNamespaceTest, cls).setup_clients()"},{"line_number":33,"context_line":"        cls.persona \u003d getattr(cls, f\u0027os_{cls.credentials[0]}\u0027)"},{"line_number":34,"context_line":"        cls.alt_persona \u003d getattr(cls, f\u0027os_{cls.credentials[1]}\u0027)"},{"line_number":35,"context_line":"        cls.member_or_reader_client \u003d cls.persona.namespaces_client"},{"line_number":36,"context_line":"        cls.alt_member_or_reader_client \u003d cls.alt_persona.namespaces_client"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":20,"id":"7750f095_ddc68638","line":35,"range":{"start_line":35,"start_character":12,"end_line":35,"end_character":35},"updated":"2021-09-03 15:13:27.000000000","message":"This name is ambiguous because it depends on the first element of credentials, right?\n\nIn the image tests I used cls.client to represent credentials[0] consistently. I think this was nice because it abstracted the details from the name of the variable name, so when I read something like:\n\n  self.client.create_image(...)\n\nAnd I wanted to know who client was, I needed to reference the credentials list as the source of truth. Here when I read:\n\n  self.member_or_reader_client.create_namespace(...)\n\nI still need to go up to the credentials list to make sure it is a project-reader or a project-member.\n\nJust a thought about consistency and keeping personas definitions and naming in a single place.","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6c262e68454b2f3cba3bbffef76b8295efc0e84a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        super(MetadefV2RbacNamespaceTest, cls).setup_clients()"},{"line_number":33,"context_line":"        cls.persona \u003d getattr(cls, f\u0027os_{cls.credentials[0]}\u0027)"},{"line_number":34,"context_line":"        cls.alt_persona \u003d getattr(cls, f\u0027os_{cls.credentials[1]}\u0027)"},{"line_number":35,"context_line":"        cls.member_or_reader_client \u003d cls.persona.namespaces_client"},{"line_number":36,"context_line":"        cls.alt_member_or_reader_client \u003d cls.alt_persona.namespaces_client"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":20,"id":"a8f080d5_fa453c4f","line":35,"range":{"start_line":35,"start_character":12,"end_line":35,"end_character":35},"in_reply_to":"7750f095_ddc68638","updated":"2021-09-06 07:47:07.000000000","message":"Ack","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"53eec9ebcc8ede1cf3d9ae20aa2e4b16361630a0","unresolved":true,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    credentials \u003d [\u0027project_admin\u0027, \u0027project_alt_admin\u0027]"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def assertListNamespaces(self, namespaces, resp, owner\u003dNone):"},{"line_number":69,"context_line":"        self.assertEqual(200, resp.response.status)"},{"line_number":70,"context_line":"        actual_namespaces \u003d set(ns[\u0027namespace\u0027] for ns in resp[\u0027namespaces\u0027])"},{"line_number":71,"context_line":"        if owner:"}],"source_content_type":"text/x-python","patch_set":20,"id":"fba48cde_7c453409","line":68,"range":{"start_line":68,"start_character":35,"end_line":68,"end_character":45},"updated":"2021-09-03 15:13:27.000000000","message":"nit: using expected and actual as part of the variable names is inline with native python assertions and helps readability. For example:\n\n  def assertLIstNamespaces(self, expected_namespaces, resp, owner\u003dNone):","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6c262e68454b2f3cba3bbffef76b8295efc0e84a","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    credentials \u003d [\u0027project_admin\u0027, \u0027project_alt_admin\u0027]"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def assertListNamespaces(self, namespaces, resp, owner\u003dNone):"},{"line_number":69,"context_line":"        self.assertEqual(200, resp.response.status)"},{"line_number":70,"context_line":"        actual_namespaces \u003d set(ns[\u0027namespace\u0027] for ns in resp[\u0027namespaces\u0027])"},{"line_number":71,"context_line":"        if owner:"}],"source_content_type":"text/x-python","patch_set":20,"id":"18ab275f_f78b3638","line":68,"range":{"start_line":68,"start_character":35,"end_line":68,"end_character":45},"in_reply_to":"fba48cde_7c453409","updated":"2021-09-06 07:47:07.000000000","message":"Ack","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"53eec9ebcc8ede1cf3d9ae20aa2e4b16361630a0","unresolved":true,"context_lines":[{"line_number":80,"context_line":"                self.assertIn(ns[\u0027namespace\u0027], actual_namespaces)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def test_list_namespaces(self):"},{"line_number":83,"context_line":"        namespaces \u003d self.create_namespaces()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        # Get above created namespace by admin role of \u0027project\u0027"},{"line_number":86,"context_line":"        resp \u003d self.do_request(\u0027list_namespaces\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"88a71255_c36c058c","line":83,"updated":"2021-09-03 15:13:27.000000000","message":"I think having this method included in this module would be nice since it keeps the creation of the actual namespaces closer to the tests that call them, making it easier for readers to follow the test logic.","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e90f8c2d7f9416841683a52803b9f164764e5aaf","unresolved":true,"context_lines":[{"line_number":80,"context_line":"                self.assertIn(ns[\u0027namespace\u0027], actual_namespaces)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def test_list_namespaces(self):"},{"line_number":83,"context_line":"        namespaces \u003d self.create_namespaces()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        # Get above created namespace by admin role of \u0027project\u0027"},{"line_number":86,"context_line":"        resp \u003d self.do_request(\u0027list_namespaces\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"bf377d4b_6df32cde","line":83,"in_reply_to":"21c4a3e3_2f662671","updated":"2021-09-03 19:44:31.000000000","message":"Yeah - that makes sense. It doesn\u0027t have to live here long term, but we could put it in a utility mixin class that has separate (less) responsibility than the client/request stuff in ImageV2RbacBaseTests","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"05c1574091ad39b5f9c11996167e50fe228c12da","unresolved":true,"context_lines":[{"line_number":80,"context_line":"                self.assertIn(ns[\u0027namespace\u0027], actual_namespaces)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def test_list_namespaces(self):"},{"line_number":83,"context_line":"        namespaces \u003d self.create_namespaces()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        # Get above created namespace by admin role of \u0027project\u0027"},{"line_number":86,"context_line":"        resp \u003d self.do_request(\u0027list_namespaces\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"21c4a3e3_2f662671","line":83,"in_reply_to":"88a71255_c36c058c","updated":"2021-09-03 17:39:43.000000000","message":"the reason for keeping this in base class is we need to use in all metadef test modules.","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6c262e68454b2f3cba3bbffef76b8295efc0e84a","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                self.assertIn(ns[\u0027namespace\u0027], actual_namespaces)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def test_list_namespaces(self):"},{"line_number":83,"context_line":"        namespaces \u003d self.create_namespaces()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        # Get above created namespace by admin role of \u0027project\u0027"},{"line_number":86,"context_line":"        resp \u003d self.do_request(\u0027list_namespaces\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"61075b17_92f22855","line":83,"in_reply_to":"bf377d4b_6df32cde","updated":"2021-09-06 07:47:07.000000000","message":"Ack","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"53eec9ebcc8ede1cf3d9ae20aa2e4b16361630a0","unresolved":true,"context_lines":[{"line_number":85,"context_line":"        # Get above created namespace by admin role of \u0027project\u0027"},{"line_number":86,"context_line":"        resp \u003d self.do_request(\u0027list_namespaces\u0027,"},{"line_number":87,"context_line":"                               client\u003dself.admin_client)"},{"line_number":88,"context_line":"        self.assertListNamespaces(namespaces, resp)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        # Get above created namespace by admin role of \u0027alt_project\u0027"},{"line_number":91,"context_line":"        resp \u003d self.do_request(\u0027list_namespaces\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"18f8008b_b9bc0daf","line":88,"updated":"2021-09-03 15:13:27.000000000","message":"I think the logic in this assertion is coupled with the logic in create_namespaces. I think some more general purpose utilities/assertions would make the tests more readable. For example (using pseudocode but trying to communicate the general idea):\n\n  def test_list_namespaces(self):\n      public_ns \u003d self.client.create_namespace(visibility\u003d\u0027public\u0027)\n      private_ns \u003d self.client.create_namespace(visibility\u003d\u0027private\u0027)\n      public_ns_alt \u003d self.alt_client.create_namespace(\n          visibility\u003d\u0027public\u0027)\n      private_ns_alt \u003d self.alt_client.create_namespace(\n          visibility\u003d\u0027private\u0027)\n\n      resp \u003d self.do_request(\u0027list_namespaces\u0027,\n                              client\u003dself.client)\n      namespace_ids \u003d [ns[\u0027id\u0027] for ns in resp.json[\u0027namespaces\u0027]]\n      self.assertIn(public_ns[\u0027id\u0027], namespace_ids)\n      self.assertIn(private_ns, namespace_ids)\n      self.assertIn(public_ns_alt, namespace_ids)\n      self.assertNotIn(private_ns_alt, namespace_ids)\n\nThe above requires me to understand the common utilities like create_namespace and do_request, but those are relatively straight forward methods. As opposed to having to understand the internals of create_namespaces, the format of what it returns, and how that should be used with the assertion we\u0027re introducing.","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e30ef422e84803b9656f318b8c658b989a41aea4","unresolved":true,"context_lines":[{"line_number":85,"context_line":"        # Get above created namespace by admin role of \u0027project\u0027"},{"line_number":86,"context_line":"        resp \u003d self.do_request(\u0027list_namespaces\u0027,"},{"line_number":87,"context_line":"                               client\u003dself.admin_client)"},{"line_number":88,"context_line":"        self.assertListNamespaces(namespaces, resp)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        # Get above created namespace by admin role of \u0027alt_project\u0027"},{"line_number":91,"context_line":"        resp \u003d self.do_request(\u0027list_namespaces\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"a6380845_9905f776","line":88,"in_reply_to":"18f8008b_b9bc0daf","updated":"2021-09-06 06:26:34.000000000","message":"Even though it looks straightforward and easy to understand, if we decide to follow this structure then I need to follow it in every test of all metadef modules, like for objects, resource_types, properties and tags I need to create public and private namespaces for each project in each test first.\n\nSo I think it is better to have one method in utility class which will create these namespaces for me and call that method in each test.","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"53eec9ebcc8ede1cf3d9ae20aa2e4b16361630a0","unresolved":true,"context_lines":[{"line_number":102,"context_line":"                                   client\u003dself.admin_client)"},{"line_number":103,"context_line":"            self.assertEqual(200, resp.response.status)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        # Get above created namespace by admin role of \u0027alt_project\u0027"},{"line_number":106,"context_line":"        for ns in namespaces:"},{"line_number":107,"context_line":"            resp \u003d self.do_request(\u0027show_namespace\u0027,"},{"line_number":108,"context_line":"                                   namespace\u003dns[\u0027namespace\u0027],"}],"source_content_type":"text/x-python","patch_set":20,"id":"64035385_5751a2b9","line":105,"updated":"2021-09-03 15:13:27.000000000","message":"I think these two loops are effectively testing the same persona (project-admin). They can both view all namespaces because they\u0027re technically considered system-administrators.","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6c262e68454b2f3cba3bbffef76b8295efc0e84a","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                                   client\u003dself.admin_client)"},{"line_number":103,"context_line":"            self.assertEqual(200, resp.response.status)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        # Get above created namespace by admin role of \u0027alt_project\u0027"},{"line_number":106,"context_line":"        for ns in namespaces:"},{"line_number":107,"context_line":"            resp \u003d self.do_request(\u0027show_namespace\u0027,"},{"line_number":108,"context_line":"                                   namespace\u003dns[\u0027namespace\u0027],"}],"source_content_type":"text/x-python","patch_set":20,"id":"3ff9c625_c3d67127","line":105,"in_reply_to":"64035385_5751a2b9","updated":"2021-09-06 07:47:07.000000000","message":"Ack","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"53eec9ebcc8ede1cf3d9ae20aa2e4b16361630a0","unresolved":true,"context_lines":[{"line_number":120,"context_line":"                                   description\u003ddata_utils.arbitrary_string())"},{"line_number":121,"context_line":"            self.assertEqual(200, resp.response.status)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # Updating the above created namespace by admin role of \u0027alt_project\u0027"},{"line_number":124,"context_line":"        for ns in namespaces:"},{"line_number":125,"context_line":"            resp \u003d self.do_request(\u0027update_namespace\u0027,"},{"line_number":126,"context_line":"                                   namespace\u003dns[\u0027namespace\u0027],"}],"source_content_type":"text/x-python","patch_set":20,"id":"bfe2a381_0dad22b6","line":123,"updated":"2021-09-03 15:13:27.000000000","message":"Same comment here - I think if we test it with one persona (self.admin_client above) we should be exercising what we need.\n\nI don\u0027t think we need to exercise project-admin versus project-admin-alt until we actually implement support for tenancy with project-admins (after we fully implement system-scope support, so maybe Yoga or later?)","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"6c262e68454b2f3cba3bbffef76b8295efc0e84a","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                                   description\u003ddata_utils.arbitrary_string())"},{"line_number":121,"context_line":"            self.assertEqual(200, resp.response.status)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # Updating the above created namespace by admin role of \u0027alt_project\u0027"},{"line_number":124,"context_line":"        for ns in namespaces:"},{"line_number":125,"context_line":"            resp \u003d self.do_request(\u0027update_namespace\u0027,"},{"line_number":126,"context_line":"                                   namespace\u003dns[\u0027namespace\u0027],"}],"source_content_type":"text/x-python","patch_set":20,"id":"594febf8_0956de42","line":123,"in_reply_to":"bfe2a381_0dad22b6","updated":"2021-09-06 07:47:07.000000000","message":"Ack","commit_id":"a70b20fef368d167ff51a00834107563cc1ecec5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cbdbfe75cf771bc699a05bd68476cc5742174bd8","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class MetadefV2RbacNamespaceTest(rbac_base.RbacBaseTests,"},{"line_number":25,"context_line":"                                 metaclass\u003dabc.ABCMeta):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def setUp(self):"},{"line_number":28,"context_line":"        # NOTE(abhishekk): As we are using global data there is a possibility"}],"source_content_type":"text/x-python","patch_set":25,"id":"3c19f0c2_751e1275","line":25,"updated":"2021-09-14 14:02:05.000000000","message":"IMHO, this would be a fine place to put that metadef namespace utility method. It\u0027s used by everything that inherits from this.","commit_id":"648798449647c6680d1c76ce2ae758c12967ab5c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cbdbfe75cf771bc699a05bd68476cc5742174bd8","unresolved":true,"context_lines":[{"line_number":86,"context_line":"                self.assertIn(ns[\u0027namespace\u0027], expected_ns)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def test_list_namespaces(self):"},{"line_number":89,"context_line":"        actual_namespaces \u003d self.create_namespaces()"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        # Get above created namespace by admin role of \u0027project\u0027"},{"line_number":92,"context_line":"        resp \u003d self.do_request(\u0027list_namespaces\u0027, expected_status\u003d200,"}],"source_content_type":"text/x-python","patch_set":25,"id":"048b6664_d37bc095","line":89,"range":{"start_line":89,"start_character":28,"end_line":89,"end_character":52},"updated":"2021-09-14 14:02:05.000000000","message":"Another argument for just putting this in the base class above, is that I would be able to see what this is right here where it\u0027s used. The way this is, I have to flip back to the other file to see what namespaces it is creating in order to know if the validations below are suitable.","commit_id":"648798449647c6680d1c76ce2ae758c12967ab5c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cbdbfe75cf771bc699a05bd68476cc5742174bd8","unresolved":true,"context_lines":[{"line_number":107,"context_line":"        for ns in actual_namespaces:"},{"line_number":108,"context_line":"            self.do_request(\u0027show_namespace\u0027, expected_status\u003d200,"},{"line_number":109,"context_line":"                            namespace\u003dns[\u0027namespace\u0027],"},{"line_number":110,"context_line":"                            client\u003dself.admin_client)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        # Get above created namespace by admin role of \u0027alt_project\u0027"},{"line_number":113,"context_line":"        for ns in actual_namespaces:"}],"source_content_type":"text/x-python","patch_set":25,"id":"a5d846b1_de890271","line":110,"updated":"2021-09-14 14:02:05.000000000","message":"So, no validation that the body contains what we expect?\n\nAlso, this is more a style preference thing, but it doesn\u0027t seem worthwhile to me to test every identical namespace. I\u0027m not sure in what case an admin would be able to see one and not the other, and it just means our test makes more requests and takes longer to run. If there\u0027s a good reason that\u0027s fine, and what you have here _is_ more comprehensive of course, but I just have a hard time thinking it\u0027s worth it, including the same loop below to do wit all again with a different admin :)","commit_id":"648798449647c6680d1c76ce2ae758c12967ab5c"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"60d4f20fefbd23e3ad904c8a896b85981bf65bae","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        for ns in actual_namespaces:"},{"line_number":108,"context_line":"            self.do_request(\u0027show_namespace\u0027, expected_status\u003d200,"},{"line_number":109,"context_line":"                            namespace\u003dns[\u0027namespace\u0027],"},{"line_number":110,"context_line":"                            client\u003dself.admin_client)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        # Get above created namespace by admin role of \u0027alt_project\u0027"},{"line_number":113,"context_line":"        for ns in actual_namespaces:"}],"source_content_type":"text/x-python","patch_set":25,"id":"4ea34d26_46232b77","line":110,"in_reply_to":"a5d846b1_de890271","updated":"2021-09-15 11:24:59.000000000","message":"Done","commit_id":"648798449647c6680d1c76ce2ae758c12967ab5c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cbdbfe75cf771bc699a05bd68476cc5742174bd8","unresolved":true,"context_lines":[{"line_number":135,"context_line":"    def test_create_namespace(self):"},{"line_number":136,"context_line":"        # This will check creation of namespace by admin role of"},{"line_number":137,"context_line":"        # \u0027project\u0027 and \u0027alt_project\u0027"},{"line_number":138,"context_line":"        self.create_namespaces()"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def test_delete_namespace(self):"},{"line_number":141,"context_line":"        actual_namespaces \u003d self.create_namespaces()"}],"source_content_type":"text/x-python","patch_set":25,"id":"9bdd44d6_96a8ac26","line":138,"updated":"2021-09-14 14:02:05.000000000","message":"I think this is pretty well covered in the other tests - is it useful to have it stand alone?","commit_id":"648798449647c6680d1c76ce2ae758c12967ab5c"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"60d4f20fefbd23e3ad904c8a896b85981bf65bae","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    def test_create_namespace(self):"},{"line_number":136,"context_line":"        # This will check creation of namespace by admin role of"},{"line_number":137,"context_line":"        # \u0027project\u0027 and \u0027alt_project\u0027"},{"line_number":138,"context_line":"        self.create_namespaces()"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def test_delete_namespace(self):"},{"line_number":141,"context_line":"        actual_namespaces \u003d self.create_namespaces()"}],"source_content_type":"text/x-python","patch_set":25,"id":"ca730e1d_345f1c84","line":138,"in_reply_to":"9bdd44d6_96a8ac26","updated":"2021-09-15 11:24:59.000000000","message":"Done","commit_id":"648798449647c6680d1c76ce2ae758c12967ab5c"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"087248e7eda103d89535024d43d1d990b7c57957","unresolved":true,"context_lines":[{"line_number":169,"context_line":"                            client\u003dself.alt_admin_client)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class ProjectMemberTests(ProjectAdminTests, MetadefV2RbacNamespaceTest,"},{"line_number":173,"context_line":"                         tempest.test.BaseTestCase):"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    credentials \u003d [\u0027project_member\u0027, \u0027project_alt_member\u0027, \u0027project_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba0e0884_4ba7edd4","line":172,"range":{"start_line":172,"start_character":25,"end_line":172,"end_character":42},"updated":"2021-09-14 13:54:06.000000000","message":"Why do you need this to subclass with ProjectAdminTests ?","commit_id":"648798449647c6680d1c76ce2ae758c12967ab5c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0b1fcd174e62c63e9cf52455e4776eb18fbf7cca","unresolved":true,"context_lines":[{"line_number":169,"context_line":"                            client\u003dself.alt_admin_client)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class ProjectMemberTests(ProjectAdminTests, MetadefV2RbacNamespaceTest,"},{"line_number":173,"context_line":"                         tempest.test.BaseTestCase):"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    credentials \u003d [\u0027project_member\u0027, \u0027project_alt_member\u0027, \u0027project_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"18190f99_eb8ac56f","line":172,"range":{"start_line":172,"start_character":25,"end_line":172,"end_character":42},"in_reply_to":"8fa64703_c1c8fe59","updated":"2021-09-14 14:36:54.000000000","message":"...and the image tests do the same thing, I just realized.","commit_id":"648798449647c6680d1c76ce2ae758c12967ab5c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cbdbfe75cf771bc699a05bd68476cc5742174bd8","unresolved":true,"context_lines":[{"line_number":169,"context_line":"                            client\u003dself.alt_admin_client)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class ProjectMemberTests(ProjectAdminTests, MetadefV2RbacNamespaceTest,"},{"line_number":173,"context_line":"                         tempest.test.BaseTestCase):"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    credentials \u003d [\u0027project_member\u0027, \u0027project_alt_member\u0027, \u0027project_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"8fa64703_c1c8fe59","line":172,"range":{"start_line":172,"start_character":25,"end_line":172,"end_character":42},"in_reply_to":"ba0e0884_4ba7edd4","updated":"2021-09-14 14:02:05.000000000","message":"For assertListNamespaces() I assume, but agree that\u0027s not the best way. Put these asserts in the base class at the top.","commit_id":"648798449647c6680d1c76ce2ae758c12967ab5c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cbdbfe75cf771bc699a05bd68476cc5742174bd8","unresolved":true,"context_lines":[{"line_number":286,"context_line":"            self.do_request(\u0027show_namespace\u0027,"},{"line_number":287,"context_line":"                            expected_status\u003d200,"},{"line_number":288,"context_line":"                            client\u003dself.admin_client,"},{"line_number":289,"context_line":"                            namespace\u003dactual_ns[\u0027namespace\u0027])"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"class ProjectReaderTests(ProjectMemberTests, tempest.test.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":25,"id":"d607f5d3_bdb5c806","line":289,"updated":"2021-09-14 14:02:05.000000000","message":"It might just be me, but it seems like in both of these cases, all of the actual test meat is duplicated. Can\u0027t we put those in the base class and just require each subclass to implement some assertFoo() method(s)? Then the logic is all identical and shared, but what we expect to happen differs.","commit_id":"648798449647c6680d1c76ce2ae758c12967ab5c"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"7aa00c30aee1e4e9fb0889913836ccf1cd0dcfe9","unresolved":true,"context_lines":[{"line_number":33,"context_line":"        super(MetadefV2RbacNamespaceTest, cls).setup_clients()"},{"line_number":34,"context_line":"        cls.persona \u003d getattr(cls, f\u0027os_{cls.credentials[0]}\u0027)"},{"line_number":35,"context_line":"        cls.alt_persona \u003d getattr(cls, f\u0027os_{cls.credentials[1]}\u0027)"},{"line_number":36,"context_line":"        cls.client \u003d cls.persona.namespaces_client"},{"line_number":37,"context_line":"        cls.alt_client \u003d cls.alt_persona.namespaces_client"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def assertListNamespaces(self, actual, expected, owner\u003dNone):"}],"source_content_type":"text/x-python","patch_set":28,"id":"3463a670_37a6c006","line":36,"updated":"2021-09-15 11:38:57.000000000","message":"I think it was assumed to change this name to namespace_client similar to what we changed the admin_client to admin_namespace_client.","commit_id":"8d419bfc60849e459f49642857f298f4df36e378"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"3da6711d21eefad105738322c68ed81e9c75cb50","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        super(MetadefV2RbacNamespaceTest, cls).setup_clients()"},{"line_number":34,"context_line":"        cls.persona \u003d getattr(cls, f\u0027os_{cls.credentials[0]}\u0027)"},{"line_number":35,"context_line":"        cls.alt_persona \u003d getattr(cls, f\u0027os_{cls.credentials[1]}\u0027)"},{"line_number":36,"context_line":"        cls.client \u003d cls.persona.namespaces_client"},{"line_number":37,"context_line":"        cls.alt_client \u003d cls.alt_persona.namespaces_client"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def assertListNamespaces(self, actual, expected, owner\u003dNone):"}],"source_content_type":"text/x-python","patch_set":28,"id":"5e3f38d1_7c2852bd","line":36,"in_reply_to":"3463a670_37a6c006","updated":"2021-09-15 11:58:51.000000000","message":"Done","commit_id":"8d419bfc60849e459f49642857f298f4df36e378"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"22aa1cf16c0fc69a52166e019cf8f3d44d171cf0","unresolved":true,"context_lines":[{"line_number":44,"context_line":"        cls.alt_persona \u003d getattr(cls, \u0027os_%s\u0027 % alt_persona)"},{"line_number":45,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":46,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":47,"context_line":"        cls.admin_namespace_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":48,"context_line":"        cls.namespace_client \u003d cls.persona.namespaces_client"},{"line_number":49,"context_line":"        cls.alt_namespace_client \u003d cls.alt_persona.namespaces_client"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"bc2d5489_a153f861","line":47,"updated":"2021-09-21 14:20:06.000000000","message":"Doesn\u0027t this imply that a test is always going to have admin when it shouldn\u0027t? I would assume this should go in a conditional and only be run if that credential is configured.","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"871cd2873642a7494e264ac20ad0c86c1c4950d0","unresolved":true,"context_lines":[{"line_number":44,"context_line":"        cls.alt_persona \u003d getattr(cls, \u0027os_%s\u0027 % alt_persona)"},{"line_number":45,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":46,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":47,"context_line":"        cls.admin_namespace_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":48,"context_line":"        cls.namespace_client \u003d cls.persona.namespaces_client"},{"line_number":49,"context_line":"        cls.alt_namespace_client \u003d cls.alt_persona.namespaces_client"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"0f570310_d887d3a8","line":47,"in_reply_to":"bc2d5489_a153f861","updated":"2021-09-21 14:25:13.000000000","message":"I think in each class we need admin client to create the namespace as you replied to my comment below, we need admin client to create resource for each test.","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7acbfa47c0ed686215ccc05bdfe6c4326a02426b","unresolved":true,"context_lines":[{"line_number":44,"context_line":"        cls.alt_persona \u003d getattr(cls, \u0027os_%s\u0027 % alt_persona)"},{"line_number":45,"context_line":"        cls.project_id \u003d cls.persona.namespaces_client.project_id"},{"line_number":46,"context_line":"        cls.alt_project_id \u003d cls.alt_persona.namespaces_client.project_id"},{"line_number":47,"context_line":"        cls.admin_namespace_client \u003d cls.os_project_admin.namespaces_client"},{"line_number":48,"context_line":"        cls.namespace_client \u003d cls.persona.namespaces_client"},{"line_number":49,"context_line":"        cls.alt_namespace_client \u003d cls.alt_persona.namespaces_client"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"2534da51_b840267d","line":47,"in_reply_to":"bc2d5489_a153f861","updated":"2021-09-21 14:24:26.000000000","message":"Sorry, I meant to delete this. I guess we always need admin for these tests because the namespace creation requires it. It\u0027s not a convention I think we should persist outside of the metadef stuff though, just FYI :)","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"fecb7ad97983393d721c5ef8b119161387ad72fa","unresolved":true,"context_lines":[{"line_number":93,"context_line":"class ProjectAdminTests(MetadefV2RbacNamespaceTest,"},{"line_number":94,"context_line":"                        MetadefV2RbacNamespaceTemplate):"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    credentials \u003d [\u0027project_admin\u0027, \u0027project_alt_admin\u0027, \u0027primary\u0027]"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def test_list_namespaces(self):"},{"line_number":99,"context_line":"        actual_namespaces \u003d self.create_namespaces()"}],"source_content_type":"text/x-python","patch_set":30,"id":"361cc288_2765f97a","line":96,"range":{"start_line":96,"start_character":4,"end_line":96,"end_character":67},"updated":"2021-09-21 13:55:34.000000000","message":"AFAIK what Lance and Dan has suggested we need to remove these completely.","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c01fc9402c41e8b2ddb9efc6244ddc1ccf9a88aa","unresolved":true,"context_lines":[{"line_number":93,"context_line":"class ProjectAdminTests(MetadefV2RbacNamespaceTest,"},{"line_number":94,"context_line":"                        MetadefV2RbacNamespaceTemplate):"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    credentials \u003d [\u0027project_admin\u0027, \u0027project_alt_admin\u0027, \u0027primary\u0027]"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def test_list_namespaces(self):"},{"line_number":99,"context_line":"        actual_namespaces \u003d self.create_namespaces()"}],"source_content_type":"text/x-python","patch_set":30,"id":"69d34f73_55a1d09e","line":96,"range":{"start_line":96,"start_character":4,"end_line":96,"end_character":67},"in_reply_to":"361cc288_2765f97a","updated":"2021-09-21 13:59:16.000000000","message":"No, I don\u0027t think you can remove them completely, as tempest uses them to set things up. We were proposing removing the f-string indexed setup, which she has. I need to look at the rest of it to see what the new version looks like, and will in a bit.","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"fe7234e496ebd2e647f52d84ea11a88122ce3c1b","unresolved":true,"context_lines":[{"line_number":93,"context_line":"class ProjectAdminTests(MetadefV2RbacNamespaceTest,"},{"line_number":94,"context_line":"                        MetadefV2RbacNamespaceTemplate):"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    credentials \u003d [\u0027project_admin\u0027, \u0027project_alt_admin\u0027, \u0027primary\u0027]"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def test_list_namespaces(self):"},{"line_number":99,"context_line":"        actual_namespaces \u003d self.create_namespaces()"}],"source_content_type":"text/x-python","patch_set":30,"id":"e522dbd7_67e0737f","line":96,"range":{"start_line":96,"start_character":4,"end_line":96,"end_character":67},"in_reply_to":"69d34f73_55a1d09e","updated":"2021-09-21 14:06:21.000000000","message":"ACK, then I think we can have all the credentials in the base class at line #22","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4ecc0a8b7574f899d0bc42155b295a5000ed6d7a","unresolved":true,"context_lines":[{"line_number":93,"context_line":"class ProjectAdminTests(MetadefV2RbacNamespaceTest,"},{"line_number":94,"context_line":"                        MetadefV2RbacNamespaceTemplate):"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    credentials \u003d [\u0027project_admin\u0027, \u0027project_alt_admin\u0027, \u0027primary\u0027]"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def test_list_namespaces(self):"},{"line_number":99,"context_line":"        actual_namespaces \u003d self.create_namespaces()"}],"source_content_type":"text/x-python","patch_set":30,"id":"bfa16e0e_6a710d04","line":96,"range":{"start_line":96,"start_character":4,"end_line":96,"end_character":67},"in_reply_to":"710cd7db_92beb6e1","updated":"2021-09-21 14:51:00.000000000","message":"I think this looks good. Taking care of the special indexing for cls.personas was the big point we wanted to address.\n\nKeeping the credentials defined here, in the actual test, makes sense to me for readability.","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"22aa1cf16c0fc69a52166e019cf8f3d44d171cf0","unresolved":true,"context_lines":[{"line_number":93,"context_line":"class ProjectAdminTests(MetadefV2RbacNamespaceTest,"},{"line_number":94,"context_line":"                        MetadefV2RbacNamespaceTemplate):"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    credentials \u003d [\u0027project_admin\u0027, \u0027project_alt_admin\u0027, \u0027primary\u0027]"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def test_list_namespaces(self):"},{"line_number":99,"context_line":"        actual_namespaces \u003d self.create_namespaces()"}],"source_content_type":"text/x-python","patch_set":30,"id":"710cd7db_92beb6e1","line":96,"range":{"start_line":96,"start_character":4,"end_line":96,"end_character":67},"in_reply_to":"e522dbd7_67e0737f","updated":"2021-09-21 14:20:06.000000000","message":"I think the convention is not to configure the test classes with more credentials than they are supposed to be testing. So, project-only tests would not even have an admin client available, and here we don\u0027t have a project or alt_project because we don\u0027t test that. However, these tests are strange in that they\u0027re really testing something that requires admin to create something for them, but project credentials to read (except for this admin-only test).\n\nEither way, I think keeping the credentials on each leaf class is probably best as it fits with the convention in tempest. But I\u0027ll let one of the people more familiar comment on that.","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"517266d38d27aaca9670d846c5c5d9a3e9e335c6","unresolved":true,"context_lines":[{"line_number":114,"context_line":"                                   client\u003dself.admin_namespace_client)"},{"line_number":115,"context_line":"            self.assertEqual(ns[\u0027namespace\u0027], resp[\u0027namespace\u0027])"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_create_namespace(self):"},{"line_number":118,"context_line":"        # As this is been covered in other tests for admin role,"},{"line_number":119,"context_line":"        # skipping to test only create namespaces seperately."},{"line_number":120,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":30,"id":"b75e0049_ac06bac3","line":117,"updated":"2021-09-21 14:57:06.000000000","message":"You mean on line 123?","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e34399f7107ad01786d67b5188f9a31c39a8fb60","unresolved":true,"context_lines":[{"line_number":114,"context_line":"                                   client\u003dself.admin_namespace_client)"},{"line_number":115,"context_line":"            self.assertEqual(ns[\u0027namespace\u0027], resp[\u0027namespace\u0027])"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_create_namespace(self):"},{"line_number":118,"context_line":"        # As this is been covered in other tests for admin role,"},{"line_number":119,"context_line":"        # skipping to test only create namespaces seperately."},{"line_number":120,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":30,"id":"a0015937_59d6e64d","line":117,"in_reply_to":"9994dc56_f7160c74","updated":"2021-09-21 15:54:03.000000000","message":"I think it\u0027s nice to have the test filled out here for completeness, but we can probably do that in a followup.","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8e09025b4d610c48358f201596ce7f10955cce1a","unresolved":true,"context_lines":[{"line_number":114,"context_line":"                                   client\u003dself.admin_namespace_client)"},{"line_number":115,"context_line":"            self.assertEqual(ns[\u0027namespace\u0027], resp[\u0027namespace\u0027])"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_create_namespace(self):"},{"line_number":118,"context_line":"        # As this is been covered in other tests for admin role,"},{"line_number":119,"context_line":"        # skipping to test only create namespaces seperately."},{"line_number":120,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":30,"id":"f43412d6_c6a86e74","line":117,"in_reply_to":"a0015937_59d6e64d","updated":"2021-09-22 18:33:54.000000000","message":"This was my feedback on an earlier one: that just creating a namespace here when we already create one with the same admin creds many other times in these tests was just wasteful. So, I recommended not having a dedicated test for it.\n\nYou could argue that it\u0027s not enough overhead and nice for symmetry, and you wouldn\u0027t be wrong. I\u0027m certainly not strongly opposed to having one, but I think with a comment about why it\u0027s just duplicative it\u0027s is fine to skip, IMHO.","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"846eaab74fc91bc0e2898f2a406e21b88dceb473","unresolved":true,"context_lines":[{"line_number":114,"context_line":"                                   client\u003dself.admin_namespace_client)"},{"line_number":115,"context_line":"            self.assertEqual(ns[\u0027namespace\u0027], resp[\u0027namespace\u0027])"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_create_namespace(self):"},{"line_number":118,"context_line":"        # As this is been covered in other tests for admin role,"},{"line_number":119,"context_line":"        # skipping to test only create namespaces seperately."},{"line_number":120,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":30,"id":"9994dc56_f7160c74","line":117,"in_reply_to":"b75e0049_ac06bac3","updated":"2021-09-21 15:00:50.000000000","message":"yes or line 99 or 108 as well.","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d18685cae9866365c13480ab05ef2cf2e6d0224a","unresolved":true,"context_lines":[{"line_number":114,"context_line":"                                   client\u003dself.admin_namespace_client)"},{"line_number":115,"context_line":"            self.assertEqual(ns[\u0027namespace\u0027], resp[\u0027namespace\u0027])"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_create_namespace(self):"},{"line_number":118,"context_line":"        # As this is been covered in other tests for admin role,"},{"line_number":119,"context_line":"        # skipping to test only create namespaces seperately."},{"line_number":120,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":30,"id":"12ff66e0_2d8a152c","line":117,"in_reply_to":"f43412d6_c6a86e74","updated":"2021-09-22 21:29:30.000000000","message":"Yeah - that\u0027s fair. I\u0027m only concerned about coverage and so long as a test fails when the policies for create_namespace change, I\u0027m good.","commit_id":"9f4950444e225186c0ff516f68f9b8b5e92d6b75"}],"glance_tempest_plugin/tests/rbac/v2/test_namespaces.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"93f0642fbdf5389c3aa3a0219a2c1565eea23fc7","unresolved":true,"context_lines":[{"line_number":49,"context_line":"        ns[\u0027description\u0027] \u003d data_utils.arbitrary_string()"},{"line_number":50,"context_line":"        ns[\u0027display_name\u0027] \u003d ns[\u0027namespace\u0027]"},{"line_number":51,"context_line":"        ns[\u0027owner\u0027] \u003d owner"},{"line_number":52,"context_line":"        ns[\u0027protected\u0027] \u003d protected if protected else True"},{"line_number":53,"context_line":"        return ns"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _cleanup_namespace(self, namespace):"}],"source_content_type":"text/x-python","patch_set":2,"id":"0b6cc4c7_8d702e7b","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":58},"updated":"2021-07-15 14:50:26.000000000","message":"any specific reason keeping protected to True as default ?","commit_id":"11bd725f048ed5810537f2ec8b3e2016bdf3ac28"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"6314599b234edd710607f61e5c35fcbad8b1aa5d","unresolved":true,"context_lines":[{"line_number":49,"context_line":"        ns[\u0027description\u0027] \u003d data_utils.arbitrary_string()"},{"line_number":50,"context_line":"        ns[\u0027display_name\u0027] \u003d ns[\u0027namespace\u0027]"},{"line_number":51,"context_line":"        ns[\u0027owner\u0027] \u003d owner"},{"line_number":52,"context_line":"        ns[\u0027protected\u0027] \u003d protected if protected else True"},{"line_number":53,"context_line":"        return ns"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _cleanup_namespace(self, namespace):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fe55bb86_b4f72da4","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":58},"in_reply_to":"0b6cc4c7_8d702e7b","updated":"2021-07-23 07:50:42.000000000","message":"yeah, I think protected namespaces will also get tested by this.","commit_id":"11bd725f048ed5810537f2ec8b3e2016bdf3ac28"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"93f0642fbdf5389c3aa3a0219a2c1565eea23fc7","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        return ns"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _cleanup_namespace(self, namespace):"},{"line_number":56,"context_line":"        self.admin_namespaces_client.update_namespace("},{"line_number":57,"context_line":"            namespace\u003dnamespace,"},{"line_number":58,"context_line":"            owner\u003d\u0027admin\u0027,"},{"line_number":59,"context_line":"            protected\u003dFalse)"},{"line_number":60,"context_line":"        self.admin_namespaces_client.delete_namespace(namespace)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"16f399be_eda77bad","line":59,"range":{"start_line":56,"start_character":8,"end_line":59,"end_character":28},"updated":"2021-07-15 14:50:26.000000000","message":"here you can check if namespace is protected then only set it to False.\nWhy there is need to set owner\u003d\u0027admin\u0027 here?","commit_id":"11bd725f048ed5810537f2ec8b3e2016bdf3ac28"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"6314599b234edd710607f61e5c35fcbad8b1aa5d","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        return ns"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _cleanup_namespace(self, namespace):"},{"line_number":56,"context_line":"        self.admin_namespaces_client.update_namespace("},{"line_number":57,"context_line":"            namespace\u003dnamespace,"},{"line_number":58,"context_line":"            owner\u003d\u0027admin\u0027,"},{"line_number":59,"context_line":"            protected\u003dFalse)"},{"line_number":60,"context_line":"        self.admin_namespaces_client.delete_namespace(namespace)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"df3922d9_6a3a4986","line":59,"range":{"start_line":56,"start_character":8,"end_line":59,"end_character":28},"in_reply_to":"16f399be_eda77bad","updated":"2021-07-23 07:50:42.000000000","message":"Done","commit_id":"11bd725f048ed5810537f2ec8b3e2016bdf3ac28"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"93f0642fbdf5389c3aa3a0219a2c1565eea23fc7","unresolved":true,"context_lines":[{"line_number":125,"context_line":"    credentials \u003d [\u0027project_admin\u0027, \u0027system_admin\u0027]"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_get_namespace(self):"},{"line_number":128,"context_line":"        public_namespace \u003d self.admin_namespaces_client.create_namespace("},{"line_number":129,"context_line":"            **self.namespace(\u0027admin\u0027, visibility\u003d\u0027public\u0027))"},{"line_number":130,"context_line":"        self.addCleanup(self._cleanup_namespace, public_namespace[\u0027namespace\u0027])"},{"line_number":131,"context_line":"        self.do_request(\u0027show_namespace\u0027, expected_status\u003d200,"},{"line_number":132,"context_line":"                        namespace\u003dpublic_namespace[\u0027namespace\u0027])"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        project_client \u003d self.setup_user_client(role\u003d\u0027admin\u0027)"},{"line_number":135,"context_line":"        private_namespace \u003d project_client.namespaces_client.create_namespace("},{"line_number":136,"context_line":"            **self.namespace(project_client.credentials.project_id))"},{"line_number":137,"context_line":"        self.addCleanup("},{"line_number":138,"context_line":"            self._cleanup_namespace, private_namespace[\u0027namespace\u0027])"},{"line_number":139,"context_line":"        self.do_request(\u0027show_namespace\u0027, expected_status\u003d200,"},{"line_number":140,"context_line":"                        namespace\u003dprivate_namespace[\u0027namespace\u0027])"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_list_namespaces(self):"},{"line_number":143,"context_line":"        public_namespace \u003d self.admin_namespaces_client.create_namespace("}],"source_content_type":"text/x-python","patch_set":2,"id":"6415ce3d_a34e73b3","line":140,"range":{"start_line":128,"start_character":8,"end_line":140,"end_character":65},"updated":"2021-07-15 14:50:26.000000000","message":"I think here you should test that public and private namespaces created by each project are visible to admin of other projects, instead you are testing namespace created by same project admin is visible to them.\n\nSame goes for every scenario below.","commit_id":"11bd725f048ed5810537f2ec8b3e2016bdf3ac28"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"6314599b234edd710607f61e5c35fcbad8b1aa5d","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    credentials \u003d [\u0027project_admin\u0027, \u0027system_admin\u0027]"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_get_namespace(self):"},{"line_number":128,"context_line":"        public_namespace \u003d self.admin_namespaces_client.create_namespace("},{"line_number":129,"context_line":"            **self.namespace(\u0027admin\u0027, visibility\u003d\u0027public\u0027))"},{"line_number":130,"context_line":"        self.addCleanup(self._cleanup_namespace, public_namespace[\u0027namespace\u0027])"},{"line_number":131,"context_line":"        self.do_request(\u0027show_namespace\u0027, expected_status\u003d200,"},{"line_number":132,"context_line":"                        namespace\u003dpublic_namespace[\u0027namespace\u0027])"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        project_client \u003d self.setup_user_client(role\u003d\u0027admin\u0027)"},{"line_number":135,"context_line":"        private_namespace \u003d project_client.namespaces_client.create_namespace("},{"line_number":136,"context_line":"            **self.namespace(project_client.credentials.project_id))"},{"line_number":137,"context_line":"        self.addCleanup("},{"line_number":138,"context_line":"            self._cleanup_namespace, private_namespace[\u0027namespace\u0027])"},{"line_number":139,"context_line":"        self.do_request(\u0027show_namespace\u0027, expected_status\u003d200,"},{"line_number":140,"context_line":"                        namespace\u003dprivate_namespace[\u0027namespace\u0027])"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_list_namespaces(self):"},{"line_number":143,"context_line":"        public_namespace \u003d self.admin_namespaces_client.create_namespace("}],"source_content_type":"text/x-python","patch_set":2,"id":"b554c89d_8a4793c8","line":140,"range":{"start_line":128,"start_character":8,"end_line":140,"end_character":65},"in_reply_to":"6415ce3d_a34e73b3","updated":"2021-07-23 07:50:42.000000000","message":"Ack","commit_id":"11bd725f048ed5810537f2ec8b3e2016bdf3ac28"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"93f0642fbdf5389c3aa3a0219a2c1565eea23fc7","unresolved":true,"context_lines":[{"line_number":222,"context_line":"        self.addCleanup("},{"line_number":223,"context_line":"            self._cleanup_namespace, private_namespace[\u0027namespace\u0027])"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        self.do_request(\u0027show_namespace\u0027, expected_status\u003dexceptions.NotFound,"},{"line_number":226,"context_line":"                        namespace\u003dprivate_namespace[\u0027namespace\u0027])"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def test_list_namespaces(self):"},{"line_number":229,"context_line":"        public_namespace \u003d self.admin_namespaces_client.create_namespace("}],"source_content_type":"text/x-python","patch_set":2,"id":"476ea4d4_77f947ca","line":226,"range":{"start_line":225,"start_character":8,"end_line":226,"end_character":65},"updated":"2021-07-15 14:50:26.000000000","message":"Add a note here why you are expecting 404 and not 403","commit_id":"11bd725f048ed5810537f2ec8b3e2016bdf3ac28"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"6314599b234edd710607f61e5c35fcbad8b1aa5d","unresolved":true,"context_lines":[{"line_number":222,"context_line":"        self.addCleanup("},{"line_number":223,"context_line":"            self._cleanup_namespace, private_namespace[\u0027namespace\u0027])"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        self.do_request(\u0027show_namespace\u0027, expected_status\u003dexceptions.NotFound,"},{"line_number":226,"context_line":"                        namespace\u003dprivate_namespace[\u0027namespace\u0027])"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def test_list_namespaces(self):"},{"line_number":229,"context_line":"        public_namespace \u003d self.admin_namespaces_client.create_namespace("}],"source_content_type":"text/x-python","patch_set":2,"id":"d7a9af28_03340b3e","line":226,"range":{"start_line":225,"start_character":8,"end_line":226,"end_character":65},"in_reply_to":"476ea4d4_77f947ca","updated":"2021-07-23 07:50:42.000000000","message":"Not needed now, as it\u0027s fixed in glance.","commit_id":"11bd725f048ed5810537f2ec8b3e2016bdf3ac28"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"93f0642fbdf5389c3aa3a0219a2c1565eea23fc7","unresolved":true,"context_lines":[{"line_number":226,"context_line":"                        namespace\u003dprivate_namespace[\u0027namespace\u0027])"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def test_list_namespaces(self):"},{"line_number":229,"context_line":"        public_namespace \u003d self.admin_namespaces_client.create_namespace("},{"line_number":230,"context_line":"            **self.namespace(\u0027admin\u0027, visibility\u003d\u0027public\u0027))"},{"line_number":231,"context_line":"        self.addCleanup(self._cleanup_namespace, public_namespace[\u0027namespace\u0027])"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        project_id \u003d self.persona.credentials.project_id"},{"line_number":234,"context_line":"        project_admin \u003d self.setup_user_client(project_id\u003dproject_id,"},{"line_number":235,"context_line":"                                               role\u003d\u0027admin\u0027)"},{"line_number":236,"context_line":"        project_namespace \u003d project_admin.namespaces_client.create_namespace("},{"line_number":237,"context_line":"            **self.namespace(project_id))"},{"line_number":238,"context_line":"        self.addCleanup(self._cleanup_namespace,"},{"line_number":239,"context_line":"                        project_namespace[\u0027namespace\u0027])"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        project_client \u003d self.setup_user_client(role\u003d\u0027admin\u0027)"},{"line_number":242,"context_line":"        private_namespace \u003d project_client.namespaces_client.create_namespace("},{"line_number":243,"context_line":"            **self.namespace(project_client.credentials.project_id))"},{"line_number":244,"context_line":"        self.addCleanup(self._cleanup_namespace,"},{"line_number":245,"context_line":"                        private_namespace[\u0027namespace\u0027])"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        resp \u003d self.do_request(\u0027list_namespaces\u0027, expected_status\u003d200)"},{"line_number":248,"context_line":"        namespace_ids \u003d set(ns[\u0027namespace\u0027] for ns in resp[\u0027namespaces\u0027])"},{"line_number":249,"context_line":"        self.assertIn(public_namespace[\u0027namespace\u0027], namespace_ids)"},{"line_number":250,"context_line":"        self.assertIn(project_namespace[\u0027namespace\u0027], namespace_ids)"},{"line_number":251,"context_line":"        self.assertNotIn(private_namespace[\u0027namespace\u0027], namespace_ids)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def test_update_namespace(self):"},{"line_number":254,"context_line":"        public_namespace \u003d self.admin_namespaces_client.create_namespace("}],"source_content_type":"text/x-python","patch_set":2,"id":"f96ff227_64c35316","line":251,"range":{"start_line":229,"start_character":8,"end_line":251,"end_character":71},"updated":"2021-07-15 14:50:26.000000000","message":"If you add some verbose comments here then it will help reviewers who are not familiar with metadef APIs.\n\nSomething like\nat line #229, Creating public namespace for project A\nat line #236, Creating private namespace for project A\nat line #242 creating private namespace for project B\n\nat line #247, based on our policy check, we will not see (something, explain which namespace) in our response.","commit_id":"11bd725f048ed5810537f2ec8b3e2016bdf3ac28"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"6314599b234edd710607f61e5c35fcbad8b1aa5d","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                        namespace\u003dprivate_namespace[\u0027namespace\u0027])"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def test_list_namespaces(self):"},{"line_number":229,"context_line":"        public_namespace \u003d self.admin_namespaces_client.create_namespace("},{"line_number":230,"context_line":"            **self.namespace(\u0027admin\u0027, visibility\u003d\u0027public\u0027))"},{"line_number":231,"context_line":"        self.addCleanup(self._cleanup_namespace, public_namespace[\u0027namespace\u0027])"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        project_id \u003d self.persona.credentials.project_id"},{"line_number":234,"context_line":"        project_admin \u003d self.setup_user_client(project_id\u003dproject_id,"},{"line_number":235,"context_line":"                                               role\u003d\u0027admin\u0027)"},{"line_number":236,"context_line":"        project_namespace \u003d project_admin.namespaces_client.create_namespace("},{"line_number":237,"context_line":"            **self.namespace(project_id))"},{"line_number":238,"context_line":"        self.addCleanup(self._cleanup_namespace,"},{"line_number":239,"context_line":"                        project_namespace[\u0027namespace\u0027])"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        project_client \u003d self.setup_user_client(role\u003d\u0027admin\u0027)"},{"line_number":242,"context_line":"        private_namespace \u003d project_client.namespaces_client.create_namespace("},{"line_number":243,"context_line":"            **self.namespace(project_client.credentials.project_id))"},{"line_number":244,"context_line":"        self.addCleanup(self._cleanup_namespace,"},{"line_number":245,"context_line":"                        private_namespace[\u0027namespace\u0027])"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        resp \u003d self.do_request(\u0027list_namespaces\u0027, expected_status\u003d200)"},{"line_number":248,"context_line":"        namespace_ids \u003d set(ns[\u0027namespace\u0027] for ns in resp[\u0027namespaces\u0027])"},{"line_number":249,"context_line":"        self.assertIn(public_namespace[\u0027namespace\u0027], namespace_ids)"},{"line_number":250,"context_line":"        self.assertIn(project_namespace[\u0027namespace\u0027], namespace_ids)"},{"line_number":251,"context_line":"        self.assertNotIn(private_namespace[\u0027namespace\u0027], namespace_ids)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def test_update_namespace(self):"},{"line_number":254,"context_line":"        public_namespace \u003d self.admin_namespaces_client.create_namespace("}],"source_content_type":"text/x-python","patch_set":2,"id":"5dea1e63_3eb6fc2a","line":251,"range":{"start_line":229,"start_character":8,"end_line":251,"end_character":71},"in_reply_to":"f96ff227_64c35316","updated":"2021-07-23 07:50:42.000000000","message":"Ack","commit_id":"11bd725f048ed5810537f2ec8b3e2016bdf3ac28"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"93f0642fbdf5389c3aa3a0219a2c1565eea23fc7","unresolved":true,"context_lines":[{"line_number":262,"context_line":"        project_client \u003d self.setup_user_client(role\u003d\u0027admin\u0027)"},{"line_number":263,"context_line":"        namespace \u003d project_client.namespaces_client.create_namespace("},{"line_number":264,"context_line":"            **self.namespace(project_client.credentials.project_id))"},{"line_number":265,"context_line":"        self.do_request(\u0027update_namespace\u0027,"},{"line_number":266,"context_line":"                        expected_status\u003dexceptions.NotFound,"},{"line_number":267,"context_line":"                        namespace\u003dnamespace[\u0027namespace\u0027],"},{"line_number":268,"context_line":"                        owner\u003dproject_client.credentials.project_id,"},{"line_number":269,"context_line":"                        description\u003ddata_utils.arbitrary_string())"},{"line_number":270,"context_line":"        self.addCleanup(self._cleanup_namespace,"},{"line_number":271,"context_line":"                        namespace[\u0027namespace\u0027])"},{"line_number":272,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"c7167857_a53cdeef","line":269,"range":{"start_line":265,"start_character":8,"end_line":269,"end_character":66},"updated":"2021-07-15 14:50:26.000000000","message":"add note why you are expecting not found and not forbidden.","commit_id":"11bd725f048ed5810537f2ec8b3e2016bdf3ac28"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"93f0642fbdf5389c3aa3a0219a2c1565eea23fc7","unresolved":true,"context_lines":[{"line_number":301,"context_line":"        namespace \u003d project_client.namespaces_client.create_namespace("},{"line_number":302,"context_line":"            **self.namespace(project_client.credentials.project_id))"},{"line_number":303,"context_line":"        self.do_request(\u0027delete_namespace\u0027,"},{"line_number":304,"context_line":"                        expected_status\u003dexceptions.NotFound,"},{"line_number":305,"context_line":"                        namespace\u003dnamespace[\u0027namespace\u0027])"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3e7f3f0b_b7ec1e34","line":304,"range":{"start_line":304,"start_character":24,"end_line":304,"end_character":60},"updated":"2021-07-15 14:50:26.000000000","message":"ditto","commit_id":"11bd725f048ed5810537f2ec8b3e2016bdf3ac28"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"93f0642fbdf5389c3aa3a0219a2c1565eea23fc7","unresolved":true,"context_lines":[{"line_number":305,"context_line":"                        namespace\u003dnamespace[\u0027namespace\u0027])"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"class ProjectReaderTests(ProjectMemberTests, base.BaseV2ImageTest):"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    credentials \u003d [\u0027project_reader\u0027, \u0027project_admin\u0027, \u0027system_admin\u0027]"},{"line_number":311,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"d8df0e9a_58162d6d","line":308,"range":{"start_line":308,"start_character":6,"end_line":308,"end_character":24},"updated":"2021-07-15 14:50:26.000000000","message":"If I am not wrong most of the tests are same for Member and Reader, so can we some how reduce the duplication ?","commit_id":"11bd725f048ed5810537f2ec8b3e2016bdf3ac28"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"6314599b234edd710607f61e5c35fcbad8b1aa5d","unresolved":false,"context_lines":[{"line_number":305,"context_line":"                        namespace\u003dnamespace[\u0027namespace\u0027])"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"class ProjectReaderTests(ProjectMemberTests, base.BaseV2ImageTest):"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    credentials \u003d [\u0027project_reader\u0027, \u0027project_admin\u0027, \u0027system_admin\u0027]"},{"line_number":311,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"2f7ba0df_a52042ec","line":308,"range":{"start_line":308,"start_character":6,"end_line":308,"end_character":24},"in_reply_to":"d8df0e9a_58162d6d","updated":"2021-07-23 07:50:42.000000000","message":"Ack","commit_id":"11bd725f048ed5810537f2ec8b3e2016bdf3ac28"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"98b67f6ddf485c8a8c853ece3175fd8e51317304","unresolved":true,"context_lines":[{"line_number":85,"context_line":"        pass"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"class SystemAdminTests(ImageV2RbacNamespaceTest, base.BaseV2ImageTest):"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    credentials \u003d [\u0027system_admin\u0027, \u0027project_admin\u0027]"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"be2b81eb_b48b91fd","line":88,"range":{"start_line":88,"start_character":54,"end_line":88,"end_character":69},"updated":"2021-07-27 08:49:18.000000000","message":"Why do you need this class?\nMetadefs are not using images at all.\n\nTo avoid confusion, I think you should create separate class for Metadefs","commit_id":"da829566e0037d6ae1021d6394e7b324ab119e20"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a5f7da0c86fe814bcc730ca35fc19ec1fcc8f01a","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        pass"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"class SystemAdminTests(ImageV2RbacNamespaceTest, base.BaseV2ImageTest):"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    credentials \u003d [\u0027system_admin\u0027, \u0027project_admin\u0027]"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"beb58148_98f2b2b5","line":88,"range":{"start_line":88,"start_character":54,"end_line":88,"end_character":69},"in_reply_to":"be2b81eb_b48b91fd","updated":"2021-07-28 19:22:51.000000000","message":"Done","commit_id":"da829566e0037d6ae1021d6394e7b324ab119e20"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"66e57af8a42665e6c9c1a1db4c2f7e02a2999ad7","unresolved":true,"context_lines":[{"line_number":162,"context_line":"        ns_A, ns_B \u003d self.create_namespaces(project_client\u003dproject_client)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        # Deleting the above created namespace by admin role"},{"line_number":165,"context_line":"        total_ns \u003d ns_A + ns_B"},{"line_number":166,"context_line":"        for ns in total_ns:"},{"line_number":167,"context_line":"            self.do_request(\u0027delete_namespace\u0027, expected_status\u003d204,"},{"line_number":168,"context_line":"                            namespace\u003dns[\u0027namespace\u0027],"},{"line_number":169,"context_line":"                            client\u003dproject_client.namespaces_client)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class ProjectMemberTests(ProjectAdminTests, rbac_base.BaseV2MetadefTest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"20c4cc1f_9c1891d0","line":169,"range":{"start_line":165,"start_character":7,"end_line":169,"end_character":68},"updated":"2021-07-29 05:40:32.000000000","message":"You should also verify that you will get 404 after trying to get namespace again to confirm its deleted.","commit_id":"e349cf620c8afcfa0d9a21cb0a49d1e39c5b1370"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"63f338b7dfe0977412baa7f8f1824e2c8ec1e0e8","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        ns_A, ns_B \u003d self.create_namespaces(project_client\u003dproject_client)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        # Deleting the above created namespace by admin role"},{"line_number":165,"context_line":"        total_ns \u003d ns_A + ns_B"},{"line_number":166,"context_line":"        for ns in total_ns:"},{"line_number":167,"context_line":"            self.do_request(\u0027delete_namespace\u0027, expected_status\u003d204,"},{"line_number":168,"context_line":"                            namespace\u003dns[\u0027namespace\u0027],"},{"line_number":169,"context_line":"                            client\u003dproject_client.namespaces_client)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class ProjectMemberTests(ProjectAdminTests, rbac_base.BaseV2MetadefTest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"e5a219bc_d2c3c61f","line":169,"range":{"start_line":165,"start_character":7,"end_line":169,"end_character":68},"in_reply_to":"20c4cc1f_9c1891d0","updated":"2021-08-06 09:59:18.000000000","message":"Done","commit_id":"e349cf620c8afcfa0d9a21cb0a49d1e39c5b1370"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"66e57af8a42665e6c9c1a1db4c2f7e02a2999ad7","unresolved":true,"context_lines":[{"line_number":237,"context_line":"        # Create namespace by 2 different projects A \u0026 B"},{"line_number":238,"context_line":"        ns_A, ns_B \u003d self.create_namespaces(project_client\u003dproject_client)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        # Delete namespace by non admin role is not allowed"},{"line_number":241,"context_line":"        total_ns \u003d ns_A + ns_B"},{"line_number":242,"context_line":"        for ns in total_ns:"},{"line_number":243,"context_line":"            self.do_request(\u0027delete_namespace\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"a83259b0_3b63eee4","line":240,"range":{"start_line":240,"start_character":8,"end_line":240,"end_character":59},"updated":"2021-07-29 05:40:32.000000000","message":"Here you should again make a get call to verify that namespace is present\n\n\nAlso you need to add namespaces to cleanup otherwise those will not be cleaned and remain forever unless deleted manually later..","commit_id":"e349cf620c8afcfa0d9a21cb0a49d1e39c5b1370"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"63f338b7dfe0977412baa7f8f1824e2c8ec1e0e8","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        # Create namespace by 2 different projects A \u0026 B"},{"line_number":238,"context_line":"        ns_A, ns_B \u003d self.create_namespaces(project_client\u003dproject_client)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        # Delete namespace by non admin role is not allowed"},{"line_number":241,"context_line":"        total_ns \u003d ns_A + ns_B"},{"line_number":242,"context_line":"        for ns in total_ns:"},{"line_number":243,"context_line":"            self.do_request(\u0027delete_namespace\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"61117ac4_4d78ce77","line":240,"range":{"start_line":240,"start_character":8,"end_line":240,"end_character":59},"in_reply_to":"a83259b0_3b63eee4","updated":"2021-08-06 09:59:18.000000000","message":"Ack","commit_id":"e349cf620c8afcfa0d9a21cb0a49d1e39c5b1370"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"725128561f1e3feba268b4ce9358ac4cc0369295","unresolved":true,"context_lines":[{"line_number":22,"context_line":"CONF \u003d config.CONF"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class MetadefV2RbacNamespaceTest(rbac_base.ImageV2RbacBaseTests,"},{"line_number":26,"context_line":"                                 metaclass\u003dabc.ABCMeta):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @classmethod"},{"line_number":29,"context_line":"    def setup_clients(cls):"},{"line_number":30,"context_line":"        super().setup_clients()"},{"line_number":31,"context_line":"        cls.persona \u003d getattr(cls, f\u0027os_{cls.credentials[0]}\u0027)"},{"line_number":32,"context_line":"        cls.client \u003d cls.persona.namespaces_client"},{"line_number":33,"context_line":"        cls.admin_client \u003d cls.os_project_admin"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @classmethod"},{"line_number":36,"context_line":"    def setup_credentials(cls):"},{"line_number":37,"context_line":"        super().setup_credentials()"},{"line_number":38,"context_line":"        cls.os_primary \u003d getattr(cls, f\u0027os_{cls.credentials[0]}\u0027)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @abc.abstractmethod"},{"line_number":41,"context_line":"    def test_get_namespace(self):"},{"line_number":42,"context_line":"        \"\"\"Test get_metadef_namespace policy.\"\"\""},{"line_number":43,"context_line":"        pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @abc.abstractmethod"},{"line_number":46,"context_line":"    def test_list_namespaces(self):"},{"line_number":47,"context_line":"        \"\"\"Test get_metadef_namespaces policy.\"\"\""},{"line_number":48,"context_line":"        pass"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @abc.abstractmethod"},{"line_number":51,"context_line":"    def test_update_namespace(self):"},{"line_number":52,"context_line":"        \"\"\"Test modify_metadef_namespace policy.\"\"\""},{"line_number":53,"context_line":"        pass"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @abc.abstractmethod"},{"line_number":56,"context_line":"    def test_create_namespace(self):"},{"line_number":57,"context_line":"        \"\"\"Test add_metadef_namespace policy.\"\"\""},{"line_number":58,"context_line":"        pass"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    @abc.abstractmethod"},{"line_number":61,"context_line":"    def test_delete_namespace(self):"},{"line_number":62,"context_line":"        \"\"\"Test delete_metadef_namespace policy.\"\"\""},{"line_number":63,"context_line":"        pass"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class SystemAdminTests(MetadefV2RbacNamespaceTest,"},{"line_number":67,"context_line":"                       rbac_base.BaseV2MetadefTest):"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    credentials \u003d [\u0027system_admin\u0027, \u0027project_admin\u0027]"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @decorators.skip_because(bug\u003d\u0027968696\u0027)"},{"line_number":72,"context_line":"    def test_get_namespace(self):"},{"line_number":73,"context_line":"        pass"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @decorators.skip_because(bug\u003d\u0027968696\u0027)"},{"line_number":76,"context_line":"    def test_list_namespaces(self):"},{"line_number":77,"context_line":"        pass"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @decorators.skip_because(bug\u003d\u0027968696\u0027)"},{"line_number":80,"context_line":"    def test_update_namespace(self):"},{"line_number":81,"context_line":"        pass"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @decorators.skip_because(bug\u003d\u0027968696\u0027)"},{"line_number":84,"context_line":"    def test_create_namespace(self):"},{"line_number":85,"context_line":"        pass"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    @decorators.skip_because(bug\u003d\u0027968696\u0027)"},{"line_number":88,"context_line":"    def test_delete_namespace(self):"},{"line_number":89,"context_line":"        pass"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class SystemMemberTests(SystemAdminTests, rbac_base.BaseV2MetadefTest):"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    credentials \u003d [\u0027system_member\u0027, \u0027project_admin\u0027, \u0027system_admin\u0027]"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class SystemReaderTests(SystemMemberTests, rbac_base.BaseV2MetadefTest):"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    credentials \u003d [\u0027system_reader\u0027, \u0027project_admin\u0027, \u0027system_admin\u0027]"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"class ProjectAdminTests(MetadefV2RbacNamespaceTest,"},{"line_number":103,"context_line":"                        rbac_base.BaseV2MetadefTest):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7fed878f_03d755f6","line":100,"range":{"start_line":25,"start_character":0,"end_line":100,"end_character":0},"updated":"2021-08-11 15:45:33.000000000","message":"are we running any test in these?","commit_id":"678a116b27ea7cadadeea5ccf06e6e0eb166ba98"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"725128561f1e3feba268b4ce9358ac4cc0369295","unresolved":true,"context_lines":[{"line_number":102,"context_line":"class ProjectAdminTests(MetadefV2RbacNamespaceTest,"},{"line_number":103,"context_line":"                        rbac_base.BaseV2MetadefTest):"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    credentials \u003d [\u0027project_admin\u0027, \u0027system_admin\u0027]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def test_get_namespace(self):"},{"line_number":108,"context_line":"        # Create projects A \u0026 B with admin role"}],"source_content_type":"text/x-python","patch_set":6,"id":"dbe24216_31e95784","line":105,"range":{"start_line":105,"start_character":36,"end_line":105,"end_character":50},"updated":"2021-08-11 15:45:33.000000000","message":"we are not using system admin token in the test class anywhere, we do not need to create also in that case.","commit_id":"678a116b27ea7cadadeea5ccf06e6e0eb166ba98"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"725128561f1e3feba268b4ce9358ac4cc0369295","unresolved":true,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"class ProjectMemberTests(ProjectAdminTests, rbac_base.BaseV2MetadefTest):"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    credentials \u003d [\u0027project_member\u0027, \u0027project_admin\u0027, \u0027system_admin\u0027]"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def test_get_namespace(self):"},{"line_number":194,"context_line":"        # Create projects A \u0026 B with admin role"}],"source_content_type":"text/x-python","patch_set":6,"id":"e63efd9e_68ccaf5c","line":191,"range":{"start_line":191,"start_character":54,"end_line":191,"end_character":68},"updated":"2021-08-11 15:45:33.000000000","message":"ditto","commit_id":"678a116b27ea7cadadeea5ccf06e6e0eb166ba98"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"725128561f1e3feba268b4ce9358ac4cc0369295","unresolved":true,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"class ProjectReaderTests(ProjectMemberTests, rbac_base.BaseV2MetadefTest):"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    credentials \u003d [\u0027project_reader\u0027, \u0027project_admin\u0027, \u0027system_admin\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"0be171ad_0c3f40bf","line":331,"range":{"start_line":331,"start_character":54,"end_line":331,"end_character":69},"updated":"2021-08-11 15:45:33.000000000","message":"ditto","commit_id":"678a116b27ea7cadadeea5ccf06e6e0eb166ba98"}]}
