)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"e951b1672defc4c9937f13bf2de2002ca7fab059","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Add new get location api"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change adds a new location api GET"},{"line_number":10,"context_line":"/v2/images/{image_id}/locations to get the locations associate"},{"line_number":11,"context_line":"to the image."},{"line_number":12,"context_line":"This operation will be allowed to service user only,"},{"line_number":13,"context_line":"and validated by the new policy rule `fetch_image_location`."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"c61cb3f1_ab561957","line":10,"updated":"2023-05-11 15:00:55.000000000","message":"associateD","commit_id":"ac3cd29aacd8e696c3ffa55539dd41cdb84d4ac6"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"558ccab4f83d6a81537c81af9e89308574caa0e1","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add new get location api"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change adds a new location api GET"},{"line_number":10,"context_line":"/v2/images/{image_id}/locations to get the locations associate"},{"line_number":11,"context_line":"to the image."},{"line_number":12,"context_line":"This operation will be allowed to service user only,"},{"line_number":13,"context_line":"and validated by the new policy rule `fetch_image_location`."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"f382a7e6_3e65bd90","line":10,"in_reply_to":"c61cb3f1_ab561957","updated":"2023-05-12 11:35:42.000000000","message":"Done","commit_id":"ac3cd29aacd8e696c3ffa55539dd41cdb84d4ac6"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"1b8c1e0e61811caa314caeedd3e036357ff60179","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e07cd504_8f367e69","updated":"2023-05-07 19:19:17.000000000","message":"Manual steps for testing both new location APIs,\nhttps://etherpad.opendev.org/p/glance-test-new-location-apis","commit_id":"445826a3507f11380944f4c5812a88d83b341fb8"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"7fb7474cdc5cccf86c492c3da7ecc603c28435fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"e13f7815_af338f26","updated":"2023-05-11 12:37:57.000000000","message":"recheck nova-ceph-multistore failure","commit_id":"ac3cd29aacd8e696c3ffa55539dd41cdb84d4ac6"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"b896cfc920a18004fdde8049c27713e9bbe6bb59","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"dfa7f188_bd53bbe0","updated":"2023-05-16 15:12:20.000000000","message":"Looks good to me,\n+1 as documentation is pending!","commit_id":"1780a461020657ab93bc376a5b2384445b168f2f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"47810f287c748b67cdf50abf1b45add93f158f90","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"83fd0ad6_9e21cde4","updated":"2023-07-27 14:24:52.000000000","message":"recheck tempest timeout situation improved","commit_id":"ddc0724400ce68ffdc1424eb2814e9e324a15ed0"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"2b068982f1cdb4a75733ec5bcae0ebb0364b7ab4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"54886ff3_cc99d91c","updated":"2023-07-31 18:06:58.000000000","message":"I\u0027m a bit confused regarding the latest revisions of this patch: do we not want to update the relevant files in api-ref/ ?","commit_id":"92590e0b186a97fa45b5629bf87cf88719bd7a6a"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a26caaaac1a8829d1eca88ce0b1fcf7ba2c3ad02","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"8f097fe8_d9b3bfb7","updated":"2023-08-29 16:39:21.000000000","message":"recheck on multiple failures","commit_id":"0ac91f66e27975464df21fcb66ab8ed49dfa7935"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"fff03d624366182ea67399f78fe1a938e9377a3a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"ec3922c7_e8655fc9","updated":"2023-09-21 06:36:48.000000000","message":"recheck","commit_id":"e7b8e8f9406e853f29b1fd403a0b36ccdef4901e"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"850691adbcccd0403f43462a3e6e81c22a134bac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":43,"id":"71f13c6e_0b3278f8","updated":"2024-01-03 11:40:45.000000000","message":"recheck timeout on tempest integrated storage import","commit_id":"27859e352e12561f4109afab31b1918906b4b5c4"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"04027aa90cb49a5c02622a08b6dec5c4daf76689","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":49,"id":"bd220c60_187da078","updated":"2024-02-13 15:02:51.000000000","message":"Just caught an issue in the release notes, otherwise looks great!","commit_id":"d28d526e6fd71d360f31ca8f07632849fbaae7fa"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"3b4ccd26ae6ff81598b43a51c2bb874809012aeb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":51,"id":"0b2f8484_b796d8eb","updated":"2024-02-20 14:50:56.000000000","message":"The release notes have been fixed, so +2 from me.","commit_id":"b0d88e22a1e8def054a787b63d897aeb2bf116b0"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"8df6815b645cfb795a82a5a4d15677f5ecd6f5f9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":60,"id":"2f48c943_310c6d13","updated":"2024-02-28 10:30:04.000000000","message":"Looks good, thank you!","commit_id":"a90a0c78123a58fc16f4f3264d03d6a3bd50e39d"}],"api-ref/source/v2/samples/locations-list-detail-response.json":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"f0de1b34aaf3e4c3726d5300fd6edff19715c27d","unresolved":true,"context_lines":[{"line_number":1,"context_line":"["},{"line_number":2,"context_line":"\t{"},{"line_number":3,"context_line":"\t\t\"url\": \"cinder://lvmdriver-1/39e6ffab-7502-4199-9609-416601615ca3\","},{"line_number":4,"context_line":"\t\t\"metadata\": {"},{"line_number":5,"context_line":"\t\t\t\"store\": \"lvmdriver-1\""},{"line_number":6,"context_line":"\t\t}"},{"line_number":7,"context_line":"\t}"},{"line_number":8,"context_line":"]"}],"source_content_type":"application/json","patch_set":9,"id":"93e8f578_a511a779","line":8,"range":{"start_line":2,"start_character":0,"end_line":8,"end_character":1},"updated":"2023-05-15 05:22:36.000000000","message":"correct this formatting issue","commit_id":"860d3188915a34dbee7a44c82d4a116f6f906398"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"1a47b0f3ef9764a9e99da15b6fbb5b30fa90a74a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"["},{"line_number":2,"context_line":"\t{"},{"line_number":3,"context_line":"\t\t\"url\": \"cinder://lvmdriver-1/39e6ffab-7502-4199-9609-416601615ca3\","},{"line_number":4,"context_line":"\t\t\"metadata\": {"},{"line_number":5,"context_line":"\t\t\t\"store\": \"lvmdriver-1\""},{"line_number":6,"context_line":"\t\t}"},{"line_number":7,"context_line":"\t}"},{"line_number":8,"context_line":"]"}],"source_content_type":"application/json","patch_set":9,"id":"185de76f_129b0c42","line":8,"range":{"start_line":2,"start_character":0,"end_line":8,"end_character":1},"in_reply_to":"93e8f578_a511a779","updated":"2023-05-15 13:20:49.000000000","message":"Done","commit_id":"860d3188915a34dbee7a44c82d4a116f6f906398"}],"glance/api/v2/images.py":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"e951b1672defc4c9937f13bf2de2002ca7fab059","unresolved":true,"context_lines":[{"line_number":1210,"context_line":"                                                self.policy)"},{"line_number":1211,"context_line":"            api_pol.get_locations()"},{"line_number":1212,"context_line":"            locations \u003d list(image.locations)"},{"line_number":1213,"context_line":"            if locations:"},{"line_number":1214,"context_line":"                for loc in locations:"},{"line_number":1215,"context_line":"                    loc.pop(\u0027id\u0027, None)"},{"line_number":1216,"context_line":"                    loc.pop(\u0027status\u0027, None)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5d076834_948f1382","line":1213,"updated":"2023-05-11 15:00:55.000000000","message":"Please remove this \"if\". Should locations be an empty list, just loop over it (which will do nothing).","commit_id":"ac3cd29aacd8e696c3ffa55539dd41cdb84d4ac6"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"558ccab4f83d6a81537c81af9e89308574caa0e1","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"                                                self.policy)"},{"line_number":1211,"context_line":"            api_pol.get_locations()"},{"line_number":1212,"context_line":"            locations \u003d list(image.locations)"},{"line_number":1213,"context_line":"            if locations:"},{"line_number":1214,"context_line":"                for loc in locations:"},{"line_number":1215,"context_line":"                    loc.pop(\u0027id\u0027, None)"},{"line_number":1216,"context_line":"                    loc.pop(\u0027status\u0027, None)"}],"source_content_type":"text/x-python","patch_set":8,"id":"366d458c_401dad16","line":1213,"in_reply_to":"5d076834_948f1382","updated":"2023-05-12 11:35:42.000000000","message":"Done","commit_id":"ac3cd29aacd8e696c3ffa55539dd41cdb84d4ac6"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"c8ca2ec8c95b8dac76bd639048f2d67c60ace34c","unresolved":true,"context_lines":[{"line_number":1234,"context_line":"            for loc in locations:"},{"line_number":1235,"context_line":"                loc.pop(\u0027id\u0027, None)"},{"line_number":1236,"context_line":"                loc.pop(\u0027status\u0027, None)"},{"line_number":1237,"context_line":"        except exception.NotFound as e:"},{"line_number":1238,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.msg)"},{"line_number":1239,"context_line":"        except exception.Forbidden as e:"},{"line_number":1240,"context_line":"            LOG.debug(\"User not permitted to get the image locations.\")"},{"line_number":1241,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003de.msg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fb95c1c5_d7dff527","line":1238,"range":{"start_line":1237,"start_character":8,"end_line":1238,"end_character":59},"updated":"2023-05-15 14:27:28.000000000","message":"I think this scenario is missing in unit tests","commit_id":"0dcf0ae374c7106a22aaa3d69bc3edba8ac08d4c"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"d10cefa7f57f14aa62b2dec4ba57a3d3e0f0c166","unresolved":false,"context_lines":[{"line_number":1234,"context_line":"            for loc in locations:"},{"line_number":1235,"context_line":"                loc.pop(\u0027id\u0027, None)"},{"line_number":1236,"context_line":"                loc.pop(\u0027status\u0027, None)"},{"line_number":1237,"context_line":"        except exception.NotFound as e:"},{"line_number":1238,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.msg)"},{"line_number":1239,"context_line":"        except exception.Forbidden as e:"},{"line_number":1240,"context_line":"            LOG.debug(\"User not permitted to get the image locations.\")"},{"line_number":1241,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003de.msg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"14a9cdcb_eb96c6f6","line":1238,"range":{"start_line":1237,"start_character":8,"end_line":1238,"end_character":59},"in_reply_to":"fb95c1c5_d7dff527","updated":"2023-05-16 14:21:38.000000000","message":"Done","commit_id":"0dcf0ae374c7106a22aaa3d69bc3edba8ac08d4c"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"9d38ea27dedce2033a9444a6cb6e2da490b8a95a","unresolved":true,"context_lines":[{"line_number":1221,"context_line":"            api_pol \u003d api_policy.ImageAPIPolicy(req.context, image,"},{"line_number":1222,"context_line":"                                                self.policy)"},{"line_number":1223,"context_line":"            api_pol.get_locations()"},{"line_number":1224,"context_line":"            locations \u003d list(image.locations)"},{"line_number":1225,"context_line":"            for loc in locations:"},{"line_number":1226,"context_line":"                loc.pop(\u0027id\u0027, None)"},{"line_number":1227,"context_line":"                loc.pop(\u0027status\u0027, None)"}],"source_content_type":"text/x-python","patch_set":78,"id":"e6d5524c_51679a5c","line":1224,"updated":"2024-07-18 05:49:05.000000000","message":"nit: New line before this","commit_id":"48a0c5c2a7afcb9fa05b61ede7b2eb223afcbc45"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"120f476a6a5ffb13e5ad592f4f65e5ba4560d845","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"            api_pol \u003d api_policy.ImageAPIPolicy(req.context, image,"},{"line_number":1222,"context_line":"                                                self.policy)"},{"line_number":1223,"context_line":"            api_pol.get_locations()"},{"line_number":1224,"context_line":"            locations \u003d list(image.locations)"},{"line_number":1225,"context_line":"            for loc in locations:"},{"line_number":1226,"context_line":"                loc.pop(\u0027id\u0027, None)"},{"line_number":1227,"context_line":"                loc.pop(\u0027status\u0027, None)"}],"source_content_type":"text/x-python","patch_set":78,"id":"683dd8f1_43622ae8","line":1224,"in_reply_to":"e6d5524c_51679a5c","updated":"2024-07-22 07:26:20.000000000","message":"Done","commit_id":"48a0c5c2a7afcb9fa05b61ede7b2eb223afcbc45"}],"glance/api/v2/policy.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e39f20d3380b470d68e7cf50a20320b9fa1e34dd","unresolved":true,"context_lines":[{"line_number":236,"context_line":"        self._enforce(\u0027add_image_location\u0027)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def get_locations(self):"},{"line_number":239,"context_line":"        self._enforce(\u0027get_image_locations\u0027)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def add_image(self):"},{"line_number":242,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"f5dc0ca9_ccf70748","line":239,"range":{"start_line":239,"start_character":23,"end_line":239,"end_character":42},"updated":"2023-05-08 09:09:21.000000000","message":"this sounds confusing with get_image_location, how about changing it to get_location or fetch_image_location?","commit_id":"2987d52f5f6000833fdc1fcdcfdb50dbf9b2bdec"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a89d2592d81b7c715b1e944fd61790cd45fae287","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        self._enforce(\u0027add_image_location\u0027)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def get_locations(self):"},{"line_number":239,"context_line":"        self._enforce(\u0027get_image_locations\u0027)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def add_image(self):"},{"line_number":242,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"2c828077_b76f2e02","line":239,"range":{"start_line":239,"start_character":23,"end_line":239,"end_character":42},"in_reply_to":"f5dc0ca9_ccf70748","updated":"2023-05-09 13:44:02.000000000","message":"Done","commit_id":"2987d52f5f6000833fdc1fcdcfdb50dbf9b2bdec"}],"glance/tests/functional/v2/test_images.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e39f20d3380b470d68e7cf50a20320b9fa1e34dd","unresolved":true,"context_lines":[{"line_number":3755,"context_line":"        response \u003d requests.post(path, headers\u003dheaders, data\u003ddata)"},{"line_number":3756,"context_line":"        self.assertEqual(201, response.status_code, response.text)"},{"line_number":3757,"context_line":""},{"line_number":3758,"context_line":"        # Get Locations not allowed for owner"},{"line_number":3759,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"},{"line_number":3760,"context_line":"        response \u003d requests.get(path, headers\u003dheaders)"},{"line_number":3761,"context_line":"        self.assertEqual(http.FORBIDDEN, response.status_code, response.text)"},{"line_number":3762,"context_line":""},{"line_number":3763,"context_line":""},{"line_number":3764,"context_line":"class TestImagesIPv6(functional.FunctionalTest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"615e1ddd_d00ae7bd","line":3761,"range":{"start_line":3758,"start_character":8,"end_line":3761,"end_character":77},"updated":"2023-05-08 09:09:21.000000000","message":"Can we not test with service user here?\n\nAlso add test to cover image not found case.\nAlso a test to cover image is in queued state and location is none when this api is called.","commit_id":"2987d52f5f6000833fdc1fcdcfdb50dbf9b2bdec"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a89d2592d81b7c715b1e944fd61790cd45fae287","unresolved":false,"context_lines":[{"line_number":3755,"context_line":"        response \u003d requests.post(path, headers\u003dheaders, data\u003ddata)"},{"line_number":3756,"context_line":"        self.assertEqual(201, response.status_code, response.text)"},{"line_number":3757,"context_line":""},{"line_number":3758,"context_line":"        # Get Locations not allowed for owner"},{"line_number":3759,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"},{"line_number":3760,"context_line":"        response \u003d requests.get(path, headers\u003dheaders)"},{"line_number":3761,"context_line":"        self.assertEqual(http.FORBIDDEN, response.status_code, response.text)"},{"line_number":3762,"context_line":""},{"line_number":3763,"context_line":""},{"line_number":3764,"context_line":"class TestImagesIPv6(functional.FunctionalTest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"96c9a0b4_4bbd2847","line":3761,"range":{"start_line":3758,"start_character":8,"end_line":3761,"end_character":77},"in_reply_to":"615e1ddd_d00ae7bd","updated":"2023-05-09 13:44:02.000000000","message":"Done","commit_id":"2987d52f5f6000833fdc1fcdcfdb50dbf9b2bdec"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"38a8721973913213178c7decded851beaeb5b2bd","unresolved":true,"context_lines":[{"line_number":4020,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"},{"line_number":4021,"context_line":"        response \u003d requests.get(path, headers\u003dheaders)"},{"line_number":4022,"context_line":"        self.assertEqual(200, response.status_code, response.text)"},{"line_number":4023,"context_line":""},{"line_number":4024,"context_line":""},{"line_number":4025,"context_line":"class TestImagesIPv6(functional.FunctionalTest):"},{"line_number":4026,"context_line":"    \"\"\"Verify that API and REG servers running IPv6 can communicate\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"dda05b99_e1d6bde9","line":4023,"updated":"2023-08-09 17:54:02.000000000","message":"I think we should have a get location call checking image created and data is uploaded to it by upload call and not add location call as well.","commit_id":"bcb04989808a5a56bfa89b7e6bc805cdecc61a49"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"ee67f0741210b76dd550b9c4a49ed0443f316691","unresolved":false,"context_lines":[{"line_number":4020,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"},{"line_number":4021,"context_line":"        response \u003d requests.get(path, headers\u003dheaders)"},{"line_number":4022,"context_line":"        self.assertEqual(200, response.status_code, response.text)"},{"line_number":4023,"context_line":""},{"line_number":4024,"context_line":""},{"line_number":4025,"context_line":"class TestImagesIPv6(functional.FunctionalTest):"},{"line_number":4026,"context_line":"    \"\"\"Verify that API and REG servers running IPv6 can communicate\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"5f7657bd_e6ffdaf8","line":4023,"in_reply_to":"dda05b99_e1d6bde9","updated":"2023-08-14 11:54:57.000000000","message":"Done","commit_id":"bcb04989808a5a56bfa89b7e6bc805cdecc61a49"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"aecb5841e77b3ef73fedc16ee38b36f19368370a","unresolved":true,"context_lines":[{"line_number":3995,"context_line":"        self.assertIsNone(image[\u0027size\u0027])"},{"line_number":3996,"context_line":"        self.assertIsNone(image[\u0027virtual_size\u0027])"},{"line_number":3997,"context_line":""},{"line_number":3998,"context_line":"        # Add location with Invalid Validation Data"},{"line_number":3999,"context_line":"        url \u003d \u0027http://127.0.0.1:%s/foo_image\u0027 % self.http_port0"},{"line_number":4000,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"},{"line_number":4001,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027service\u0027})"},{"line_number":4002,"context_line":"        validation_data \u003d {"},{"line_number":4003,"context_line":"            \u0027os_hash_algo\u0027: \"sha512\","},{"line_number":4004,"context_line":"            \u0027os_hash_value\u0027: \"dbc9e0f80d131e64b94913a7b40bb5\""},{"line_number":4005,"context_line":"        }"},{"line_number":4006,"context_line":"        headers \u003d self._headers({\u0027X-Tenant-Id\u0027: TENANT1})"},{"line_number":4007,"context_line":"        data \u003d jsonutils.dumps({\u0027url\u0027: url,"},{"line_number":4008,"context_line":"                                \u0027validation_data\u0027: validation_data})"},{"line_number":4009,"context_line":"        response \u003d requests.post(path, headers\u003dheaders, data\u003ddata)"},{"line_number":4010,"context_line":"        self.assertEqual(http.BAD_REQUEST, response.status_code,"},{"line_number":4011,"context_line":"                         response.text)"},{"line_number":4012,"context_line":""},{"line_number":4013,"context_line":"        # Get location when add location failed"},{"line_number":4014,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027service\u0027})"},{"line_number":4015,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"}],"source_content_type":"text/x-python","patch_set":33,"id":"aaceb17d_57cd0f2b","line":4012,"range":{"start_line":3998,"start_character":7,"end_line":4012,"end_character":0},"updated":"2023-08-30 15:53:27.000000000","message":"you can avoid this and try to fetch location of queued image that will be similar result.","commit_id":"14775f96b8dd48f715b586e1ada3dd7cdadd8e9a"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"b7b4ea4f23d157d9f7a3be4c84eac0033fe7174f","unresolved":false,"context_lines":[{"line_number":3995,"context_line":"        self.assertIsNone(image[\u0027size\u0027])"},{"line_number":3996,"context_line":"        self.assertIsNone(image[\u0027virtual_size\u0027])"},{"line_number":3997,"context_line":""},{"line_number":3998,"context_line":"        # Add location with Invalid Validation Data"},{"line_number":3999,"context_line":"        url \u003d \u0027http://127.0.0.1:%s/foo_image\u0027 % self.http_port0"},{"line_number":4000,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"},{"line_number":4001,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027service\u0027})"},{"line_number":4002,"context_line":"        validation_data \u003d {"},{"line_number":4003,"context_line":"            \u0027os_hash_algo\u0027: \"sha512\","},{"line_number":4004,"context_line":"            \u0027os_hash_value\u0027: \"dbc9e0f80d131e64b94913a7b40bb5\""},{"line_number":4005,"context_line":"        }"},{"line_number":4006,"context_line":"        headers \u003d self._headers({\u0027X-Tenant-Id\u0027: TENANT1})"},{"line_number":4007,"context_line":"        data \u003d jsonutils.dumps({\u0027url\u0027: url,"},{"line_number":4008,"context_line":"                                \u0027validation_data\u0027: validation_data})"},{"line_number":4009,"context_line":"        response \u003d requests.post(path, headers\u003dheaders, data\u003ddata)"},{"line_number":4010,"context_line":"        self.assertEqual(http.BAD_REQUEST, response.status_code,"},{"line_number":4011,"context_line":"                         response.text)"},{"line_number":4012,"context_line":""},{"line_number":4013,"context_line":"        # Get location when add location failed"},{"line_number":4014,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027service\u0027})"},{"line_number":4015,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"}],"source_content_type":"text/x-python","patch_set":33,"id":"89a1fdca_bf97bdf9","line":4012,"range":{"start_line":3998,"start_character":7,"end_line":4012,"end_character":0},"in_reply_to":"aaceb17d_57cd0f2b","updated":"2023-08-31 10:28:12.000000000","message":"Done","commit_id":"14775f96b8dd48f715b586e1ada3dd7cdadd8e9a"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"aecb5841e77b3ef73fedc16ee38b36f19368370a","unresolved":true,"context_lines":[{"line_number":8082,"context_line":"        self.assertIsNone(image[\u0027size\u0027])"},{"line_number":8083,"context_line":"        self.assertIsNone(image[\u0027virtual_size\u0027])"},{"line_number":8084,"context_line":""},{"line_number":8085,"context_line":"        # Add location with Invalid Validation Data"},{"line_number":8086,"context_line":"        url \u003d \u0027http://127.0.0.1:%s/store1/foo_image\u0027 % self.http_port0"},{"line_number":8087,"context_line":"        path \u003d \u0027/v2/images/%s/locations\u0027 % image_id"},{"line_number":8088,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027service\u0027})"},{"line_number":8089,"context_line":"        validation_data \u003d {"},{"line_number":8090,"context_line":"            \u0027os_hash_algo\u0027: \"sha512\","},{"line_number":8091,"context_line":"            \u0027os_hash_value\u0027: \"dbc9e0f80d131e64b94913a7b40bb5\""},{"line_number":8092,"context_line":"        }"},{"line_number":8093,"context_line":"        headers \u003d self._headers({\u0027X-Tenant-Id\u0027: TENANT1})"},{"line_number":8094,"context_line":"        data \u003d {\u0027url\u0027: url, \u0027validation_data\u0027: validation_data}"},{"line_number":8095,"context_line":"        response \u003d self.api_post(path, headers\u003dheaders, json\u003ddata)"},{"line_number":8096,"context_line":"        self.assertEqual(http.BAD_REQUEST, response.status_code,"},{"line_number":8097,"context_line":"                         response.text)"},{"line_number":8098,"context_line":""},{"line_number":8099,"context_line":"        # Get location when add location failed"},{"line_number":8100,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027service\u0027})"}],"source_content_type":"text/x-python","patch_set":33,"id":"de055e12_02f5f967","line":8097,"range":{"start_line":8085,"start_character":8,"end_line":8097,"end_character":39},"updated":"2023-08-30 15:53:27.000000000","message":"ditto","commit_id":"14775f96b8dd48f715b586e1ada3dd7cdadd8e9a"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"b7b4ea4f23d157d9f7a3be4c84eac0033fe7174f","unresolved":false,"context_lines":[{"line_number":8082,"context_line":"        self.assertIsNone(image[\u0027size\u0027])"},{"line_number":8083,"context_line":"        self.assertIsNone(image[\u0027virtual_size\u0027])"},{"line_number":8084,"context_line":""},{"line_number":8085,"context_line":"        # Add location with Invalid Validation Data"},{"line_number":8086,"context_line":"        url \u003d \u0027http://127.0.0.1:%s/store1/foo_image\u0027 % self.http_port0"},{"line_number":8087,"context_line":"        path \u003d \u0027/v2/images/%s/locations\u0027 % image_id"},{"line_number":8088,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027service\u0027})"},{"line_number":8089,"context_line":"        validation_data \u003d {"},{"line_number":8090,"context_line":"            \u0027os_hash_algo\u0027: \"sha512\","},{"line_number":8091,"context_line":"            \u0027os_hash_value\u0027: \"dbc9e0f80d131e64b94913a7b40bb5\""},{"line_number":8092,"context_line":"        }"},{"line_number":8093,"context_line":"        headers \u003d self._headers({\u0027X-Tenant-Id\u0027: TENANT1})"},{"line_number":8094,"context_line":"        data \u003d {\u0027url\u0027: url, \u0027validation_data\u0027: validation_data}"},{"line_number":8095,"context_line":"        response \u003d self.api_post(path, headers\u003dheaders, json\u003ddata)"},{"line_number":8096,"context_line":"        self.assertEqual(http.BAD_REQUEST, response.status_code,"},{"line_number":8097,"context_line":"                         response.text)"},{"line_number":8098,"context_line":""},{"line_number":8099,"context_line":"        # Get location when add location failed"},{"line_number":8100,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027service\u0027})"}],"source_content_type":"text/x-python","patch_set":33,"id":"3f2746a3_f909e0ab","line":8097,"range":{"start_line":8085,"start_character":8,"end_line":8097,"end_character":39},"in_reply_to":"de055e12_02f5f967","updated":"2023-08-31 10:28:12.000000000","message":"Done","commit_id":"14775f96b8dd48f715b586e1ada3dd7cdadd8e9a"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"50de1cc6e683da598932a1e7410f405012441abb","unresolved":true,"context_lines":[{"line_number":4007,"context_line":"        image \u003d jsonutils.loads(response.text)"},{"line_number":4008,"context_line":"        image_id \u003d image[\u0027id\u0027]"},{"line_number":4009,"context_line":"        self.assertEqual(\u0027queued\u0027, image[\u0027status\u0027])"},{"line_number":4010,"context_line":"        self.assertIsNone(image[\u0027size\u0027])"},{"line_number":4011,"context_line":"        self.assertIsNone(image[\u0027virtual_size\u0027])"},{"line_number":4012,"context_line":""},{"line_number":4013,"context_line":"        # Get locations of `queued` image"},{"line_number":4014,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027service\u0027})"},{"line_number":4015,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"}],"source_content_type":"text/x-python","patch_set":47,"id":"a5781820_2df2a3b9","line":4012,"range":{"start_line":4010,"start_character":8,"end_line":4012,"end_character":1},"updated":"2024-01-30 07:31:02.000000000","message":"ditto, if we are not checking for image size after active then we should not check it for None","commit_id":"fe9558caf373eeba49c3e93215cf79903eb8dd07"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"e1a3335ad73d0dbf5b2350d85d08ae3b6b4239a7","unresolved":false,"context_lines":[{"line_number":4007,"context_line":"        image \u003d jsonutils.loads(response.text)"},{"line_number":4008,"context_line":"        image_id \u003d image[\u0027id\u0027]"},{"line_number":4009,"context_line":"        self.assertEqual(\u0027queued\u0027, image[\u0027status\u0027])"},{"line_number":4010,"context_line":"        self.assertIsNone(image[\u0027size\u0027])"},{"line_number":4011,"context_line":"        self.assertIsNone(image[\u0027virtual_size\u0027])"},{"line_number":4012,"context_line":""},{"line_number":4013,"context_line":"        # Get locations of `queued` image"},{"line_number":4014,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027service\u0027})"},{"line_number":4015,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"}],"source_content_type":"text/x-python","patch_set":47,"id":"b617ac24_5760aba5","line":4012,"range":{"start_line":4010,"start_character":8,"end_line":4012,"end_character":1},"in_reply_to":"a5781820_2df2a3b9","updated":"2024-02-07 06:54:43.000000000","message":"Done","commit_id":"fe9558caf373eeba49c3e93215cf79903eb8dd07"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"50de1cc6e683da598932a1e7410f405012441abb","unresolved":true,"context_lines":[{"line_number":4019,"context_line":"        self.assertEqual(\u0027queued\u0027, image[\u0027status\u0027])"},{"line_number":4020,"context_line":""},{"line_number":4021,"context_line":"        # Get location of invalid image"},{"line_number":4022,"context_line":"        image_id \u003d str(uuid.uuid4())"},{"line_number":4023,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"},{"line_number":4024,"context_line":"        response \u003d requests.get(path, headers\u003dheaders)"},{"line_number":4025,"context_line":"        self.assertEqual(http.NOT_FOUND, response.status_code, response.text)"},{"line_number":4026,"context_line":""},{"line_number":4027,"context_line":"        # Add Location with valid URL and image owner"},{"line_number":4028,"context_line":"        image_id \u003d image[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa5223a7_3d1affa0","line":4025,"range":{"start_line":4022,"start_character":8,"end_line":4025,"end_character":77},"updated":"2024-01-30 07:31:02.000000000","message":"I think better to refactor this test and move negative scenarios and possible positive scenarios in separate tests.\n\nFrankly, it takes lot of patience to review the test and if the test is big enough then sometimes might miss few key things.","commit_id":"fe9558caf373eeba49c3e93215cf79903eb8dd07"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"b4ed47f12d4e3ac1a8651292e077321071a66593","unresolved":false,"context_lines":[{"line_number":4019,"context_line":"        self.assertEqual(\u0027queued\u0027, image[\u0027status\u0027])"},{"line_number":4020,"context_line":""},{"line_number":4021,"context_line":"        # Get location of invalid image"},{"line_number":4022,"context_line":"        image_id \u003d str(uuid.uuid4())"},{"line_number":4023,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"},{"line_number":4024,"context_line":"        response \u003d requests.get(path, headers\u003dheaders)"},{"line_number":4025,"context_line":"        self.assertEqual(http.NOT_FOUND, response.status_code, response.text)"},{"line_number":4026,"context_line":""},{"line_number":4027,"context_line":"        # Add Location with valid URL and image owner"},{"line_number":4028,"context_line":"        image_id \u003d image[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":47,"id":"f2be1346_24788c09","line":4025,"range":{"start_line":4022,"start_character":8,"end_line":4025,"end_character":77},"in_reply_to":"2c967064_74c1620e","updated":"2024-04-18 12:06:03.000000000","message":"Done","commit_id":"fe9558caf373eeba49c3e93215cf79903eb8dd07"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"e1a3335ad73d0dbf5b2350d85d08ae3b6b4239a7","unresolved":true,"context_lines":[{"line_number":4019,"context_line":"        self.assertEqual(\u0027queued\u0027, image[\u0027status\u0027])"},{"line_number":4020,"context_line":""},{"line_number":4021,"context_line":"        # Get location of invalid image"},{"line_number":4022,"context_line":"        image_id \u003d str(uuid.uuid4())"},{"line_number":4023,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"},{"line_number":4024,"context_line":"        response \u003d requests.get(path, headers\u003dheaders)"},{"line_number":4025,"context_line":"        self.assertEqual(http.NOT_FOUND, response.status_code, response.text)"},{"line_number":4026,"context_line":""},{"line_number":4027,"context_line":"        # Add Location with valid URL and image owner"},{"line_number":4028,"context_line":"        image_id \u003d image[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":47,"id":"2c967064_74c1620e","line":4025,"range":{"start_line":4022,"start_character":8,"end_line":4025,"end_character":77},"in_reply_to":"fa5223a7_3d1affa0","updated":"2024-02-07 06:54:43.000000000","message":"there are only 3-4 scenarios in this test, hence not separated out. But I have moved the negative scenarios for add location tests since those are quite big.","commit_id":"fe9558caf373eeba49c3e93215cf79903eb8dd07"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"50de1cc6e683da598932a1e7410f405012441abb","unresolved":true,"context_lines":[{"line_number":4062,"context_line":"        # Returned image entity should have a generated id and status"},{"line_number":4063,"context_line":"        image \u003d jsonutils.loads(response.text)"},{"line_number":4064,"context_line":"        image_id \u003d image[\u0027id\u0027]"},{"line_number":4065,"context_line":"        self.assertEqual(\u0027queued\u0027, image[\u0027status\u0027])"},{"line_number":4066,"context_line":"        self.assertIsNone(image[\u0027size\u0027])"},{"line_number":4067,"context_line":"        self.assertIsNone(image[\u0027virtual_size\u0027])"},{"line_number":4068,"context_line":""},{"line_number":4069,"context_line":"        # Upload some image data"},{"line_number":4070,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/file\u0027 % image_id)"}],"source_content_type":"text/x-python","patch_set":47,"id":"013e07e0_24ca9e00","line":4067,"range":{"start_line":4065,"start_character":51,"end_line":4067,"end_character":48},"updated":"2024-01-30 07:31:02.000000000","message":"ditto","commit_id":"fe9558caf373eeba49c3e93215cf79903eb8dd07"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"e1a3335ad73d0dbf5b2350d85d08ae3b6b4239a7","unresolved":false,"context_lines":[{"line_number":4062,"context_line":"        # Returned image entity should have a generated id and status"},{"line_number":4063,"context_line":"        image \u003d jsonutils.loads(response.text)"},{"line_number":4064,"context_line":"        image_id \u003d image[\u0027id\u0027]"},{"line_number":4065,"context_line":"        self.assertEqual(\u0027queued\u0027, image[\u0027status\u0027])"},{"line_number":4066,"context_line":"        self.assertIsNone(image[\u0027size\u0027])"},{"line_number":4067,"context_line":"        self.assertIsNone(image[\u0027virtual_size\u0027])"},{"line_number":4068,"context_line":""},{"line_number":4069,"context_line":"        # Upload some image data"},{"line_number":4070,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/file\u0027 % image_id)"}],"source_content_type":"text/x-python","patch_set":47,"id":"90d5e7c0_9a61a508","line":4067,"range":{"start_line":4065,"start_character":51,"end_line":4067,"end_character":48},"in_reply_to":"013e07e0_24ca9e00","updated":"2024-02-07 06:54:43.000000000","message":"Done","commit_id":"fe9558caf373eeba49c3e93215cf79903eb8dd07"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"50de1cc6e683da598932a1e7410f405012441abb","unresolved":true,"context_lines":[{"line_number":8098,"context_line":"        image \u003d jsonutils.loads(response.text)"},{"line_number":8099,"context_line":"        image_id \u003d image[\u0027id\u0027]"},{"line_number":8100,"context_line":"        self.assertEqual(\u0027queued\u0027, image[\u0027status\u0027])"},{"line_number":8101,"context_line":"        self.assertIsNone(image[\u0027size\u0027])"},{"line_number":8102,"context_line":"        self.assertIsNone(image[\u0027virtual_size\u0027])"},{"line_number":8103,"context_line":""},{"line_number":8104,"context_line":"        # Get location of `queued` image"},{"line_number":8105,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027service\u0027})"}],"source_content_type":"text/x-python","patch_set":47,"id":"27decc8e_c1f78c76","line":8102,"range":{"start_line":8101,"start_character":8,"end_line":8102,"end_character":48},"updated":"2024-01-30 07:31:02.000000000","message":"ditto","commit_id":"fe9558caf373eeba49c3e93215cf79903eb8dd07"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"e1a3335ad73d0dbf5b2350d85d08ae3b6b4239a7","unresolved":false,"context_lines":[{"line_number":8098,"context_line":"        image \u003d jsonutils.loads(response.text)"},{"line_number":8099,"context_line":"        image_id \u003d image[\u0027id\u0027]"},{"line_number":8100,"context_line":"        self.assertEqual(\u0027queued\u0027, image[\u0027status\u0027])"},{"line_number":8101,"context_line":"        self.assertIsNone(image[\u0027size\u0027])"},{"line_number":8102,"context_line":"        self.assertIsNone(image[\u0027virtual_size\u0027])"},{"line_number":8103,"context_line":""},{"line_number":8104,"context_line":"        # Get location of `queued` image"},{"line_number":8105,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027service\u0027})"}],"source_content_type":"text/x-python","patch_set":47,"id":"aa38311d_43d6db9e","line":8102,"range":{"start_line":8101,"start_character":8,"end_line":8102,"end_character":48},"in_reply_to":"27decc8e_c1f78c76","updated":"2024-02-07 06:54:43.000000000","message":"Done","commit_id":"fe9558caf373eeba49c3e93215cf79903eb8dd07"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"9d38ea27dedce2033a9444a6cb6e2da490b8a95a","unresolved":true,"context_lines":[{"line_number":4078,"context_line":"                                   start_delay_sec\u003d1)"},{"line_number":4079,"context_line":""},{"line_number":4080,"context_line":"        # Get Locations not allowed for any other user"},{"line_number":4081,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027admin,member\u0027})"},{"line_number":4082,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"},{"line_number":4083,"context_line":"        response \u003d requests.get(path, headers\u003dheaders)"},{"line_number":4084,"context_line":"        self.assertEqual(http.FORBIDDEN, response.status_code, response.text)"}],"source_content_type":"text/x-python","patch_set":78,"id":"86ef311a_f487788d","line":4081,"updated":"2024-07-18 05:49:05.000000000","message":"I think admin should also able to see image location, but we can discuss that in PTG and modify it.","commit_id":"48a0c5c2a7afcb9fa05b61ede7b2eb223afcbc45"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"120f476a6a5ffb13e5ad592f4f65e5ba4560d845","unresolved":false,"context_lines":[{"line_number":4078,"context_line":"                                   start_delay_sec\u003d1)"},{"line_number":4079,"context_line":""},{"line_number":4080,"context_line":"        # Get Locations not allowed for any other user"},{"line_number":4081,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027admin,member\u0027})"},{"line_number":4082,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"},{"line_number":4083,"context_line":"        response \u003d requests.get(path, headers\u003dheaders)"},{"line_number":4084,"context_line":"        self.assertEqual(http.FORBIDDEN, response.status_code, response.text)"}],"source_content_type":"text/x-python","patch_set":78,"id":"0dcf30fe_eca04d5e","line":4081,"in_reply_to":"86ef311a_f487788d","updated":"2024-07-22 07:26:20.000000000","message":"Acknowledged","commit_id":"48a0c5c2a7afcb9fa05b61ede7b2eb223afcbc45"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"9d38ea27dedce2033a9444a6cb6e2da490b8a95a","unresolved":true,"context_lines":[{"line_number":4087,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027service\u0027})"},{"line_number":4088,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"},{"line_number":4089,"context_line":"        response \u003d requests.get(path, headers\u003dheaders)"},{"line_number":4090,"context_line":"        self.assertEqual(200, response.status_code, response.text)"},{"line_number":4091,"context_line":""},{"line_number":4092,"context_line":"    def test_get_location_with_data_upload(self):"},{"line_number":4093,"context_line":"        self.start_servers(**self.__dict__.copy())"}],"source_content_type":"text/x-python","patch_set":78,"id":"e439b087_37669ea9","line":4090,"updated":"2024-07-18 05:49:05.000000000","message":"Need to call self.stop_servers()","commit_id":"48a0c5c2a7afcb9fa05b61ede7b2eb223afcbc45"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"120f476a6a5ffb13e5ad592f4f65e5ba4560d845","unresolved":false,"context_lines":[{"line_number":4087,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027service\u0027})"},{"line_number":4088,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"},{"line_number":4089,"context_line":"        response \u003d requests.get(path, headers\u003dheaders)"},{"line_number":4090,"context_line":"        self.assertEqual(200, response.status_code, response.text)"},{"line_number":4091,"context_line":""},{"line_number":4092,"context_line":"    def test_get_location_with_data_upload(self):"},{"line_number":4093,"context_line":"        self.start_servers(**self.__dict__.copy())"}],"source_content_type":"text/x-python","patch_set":78,"id":"af0ba112_8baf50e2","line":4090,"in_reply_to":"e439b087_37669ea9","updated":"2024-07-22 07:26:20.000000000","message":"Done","commit_id":"48a0c5c2a7afcb9fa05b61ede7b2eb223afcbc45"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"9d38ea27dedce2033a9444a6cb6e2da490b8a95a","unresolved":true,"context_lines":[{"line_number":4116,"context_line":"        func_utils.verify_image_hashes_and_status(self, image_id, expect_c,"},{"line_number":4117,"context_line":"                                                  expect_h, \u0027active\u0027,"},{"line_number":4118,"context_line":"                                                  size\u003dlen(image_data))"},{"line_number":4119,"context_line":""},{"line_number":4120,"context_line":"        # Get Locations allowed only for service user"},{"line_number":4121,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027service\u0027})"},{"line_number":4122,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"},{"line_number":4123,"context_line":"        response \u003d requests.get(path, headers\u003dheaders)"}],"source_content_type":"text/x-python","patch_set":78,"id":"da817a4c_1b9dc581","line":4120,"range":{"start_line":4119,"start_character":0,"end_line":4120,"end_character":8},"updated":"2024-07-18 05:49:05.000000000","message":"In addition to this you should also assert non service roles","commit_id":"48a0c5c2a7afcb9fa05b61ede7b2eb223afcbc45"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"120f476a6a5ffb13e5ad592f4f65e5ba4560d845","unresolved":false,"context_lines":[{"line_number":4116,"context_line":"        func_utils.verify_image_hashes_and_status(self, image_id, expect_c,"},{"line_number":4117,"context_line":"                                                  expect_h, \u0027active\u0027,"},{"line_number":4118,"context_line":"                                                  size\u003dlen(image_data))"},{"line_number":4119,"context_line":""},{"line_number":4120,"context_line":"        # Get Locations allowed only for service user"},{"line_number":4121,"context_line":"        headers \u003d self._headers({\u0027X-Roles\u0027: \u0027service\u0027})"},{"line_number":4122,"context_line":"        path \u003d self._url(\u0027/v2/images/%s/locations\u0027 % image_id)"},{"line_number":4123,"context_line":"        response \u003d requests.get(path, headers\u003dheaders)"}],"source_content_type":"text/x-python","patch_set":78,"id":"fb138599_e43743e2","line":4120,"range":{"start_line":4119,"start_character":0,"end_line":4120,"end_character":8},"in_reply_to":"da817a4c_1b9dc581","updated":"2024-07-22 07:26:20.000000000","message":"Done","commit_id":"48a0c5c2a7afcb9fa05b61ede7b2eb223afcbc45"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"9d38ea27dedce2033a9444a6cb6e2da490b8a95a","unresolved":true,"context_lines":[{"line_number":4124,"context_line":"        self.assertEqual(200, response.status_code, response.text)"},{"line_number":4125,"context_line":"        output \u003d jsonutils.loads(response.text)"},{"line_number":4126,"context_line":"        self.assertTrue(output[0][\u0027url\u0027])"},{"line_number":4127,"context_line":""},{"line_number":4128,"context_line":""},{"line_number":4129,"context_line":"class TestImagesIPv6(functional.FunctionalTest):"},{"line_number":4130,"context_line":"    \"\"\"Verify that API and REG servers running IPv6 can communicate\"\"\""}],"source_content_type":"text/x-python","patch_set":78,"id":"56e013eb_7eed6bd6","line":4127,"updated":"2024-07-18 05:49:05.000000000","message":"Need to call stop_servers method","commit_id":"48a0c5c2a7afcb9fa05b61ede7b2eb223afcbc45"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"120f476a6a5ffb13e5ad592f4f65e5ba4560d845","unresolved":false,"context_lines":[{"line_number":4124,"context_line":"        self.assertEqual(200, response.status_code, response.text)"},{"line_number":4125,"context_line":"        output \u003d jsonutils.loads(response.text)"},{"line_number":4126,"context_line":"        self.assertTrue(output[0][\u0027url\u0027])"},{"line_number":4127,"context_line":""},{"line_number":4128,"context_line":""},{"line_number":4129,"context_line":"class TestImagesIPv6(functional.FunctionalTest):"},{"line_number":4130,"context_line":"    \"\"\"Verify that API and REG servers running IPv6 can communicate\"\"\""}],"source_content_type":"text/x-python","patch_set":78,"id":"326810c2_d02292eb","line":4127,"in_reply_to":"56e013eb_7eed6bd6","updated":"2024-07-22 07:26:20.000000000","message":"Done","commit_id":"48a0c5c2a7afcb9fa05b61ede7b2eb223afcbc45"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"9d38ea27dedce2033a9444a6cb6e2da490b8a95a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":78,"id":"3d1da1ac_af3d2010","line":8226,"updated":"2024-07-18 05:49:05.000000000","message":"Need to call stop_servers method","commit_id":"48a0c5c2a7afcb9fa05b61ede7b2eb223afcbc45"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"4b42d26f8e0ce86722789674148034a6696917ea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":78,"id":"9e2edade_5f2e689a","line":8226,"in_reply_to":"3d1da1ac_af3d2010","updated":"2024-07-25 10:33:22.000000000","message":"Done","commit_id":"48a0c5c2a7afcb9fa05b61ede7b2eb223afcbc45"}],"glance/tests/unit/v2/test_images_resource.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e39f20d3380b470d68e7cf50a20320b9fa1e34dd","unresolved":true,"context_lines":[{"line_number":4158,"context_line":"            \"get_image\": \"\","},{"line_number":4159,"context_line":"            \"add_location\": \"\u0027{0}\u0027:%(owner)s\".format(TENANT1)"},{"line_number":4160,"context_line":"        })"},{"line_number":4161,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4162,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d\u0027admin,member\u0027)"},{"line_number":4163,"context_line":"        self.assertRaises("},{"line_number":4164,"context_line":"            webob.exc.HTTPForbidden,"},{"line_number":4165,"context_line":"            self.controller.add_location,"},{"line_number":4166,"context_line":"            request, image_id, url)"},{"line_number":4167,"context_line":""},{"line_number":4168,"context_line":"    @mock.patch.object(glance.location.ImageRepoProxy, \u0027_set_acls\u0027)"},{"line_number":4169,"context_line":"    @mock.patch.object(store, \u0027get_size_from_backend\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"b86f52c7_9afa0f86","line":4166,"range":{"start_line":4161,"start_character":8,"end_line":4166,"end_character":35},"updated":"2023-05-08 09:09:21.000000000","message":"the test is get_locations_by_owner_or_admin and you are asserting add_location here? \n\nAlso for curiosity the image is already in active state at line 4155, and owner is TENANT1 (line 4142) so how it is rejected with forbidden?","commit_id":"2987d52f5f6000833fdc1fcdcfdb50dbf9b2bdec"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"aa7a5d8b1876155f63c0081a6950813091234a75","unresolved":false,"context_lines":[{"line_number":4158,"context_line":"            \"get_image\": \"\","},{"line_number":4159,"context_line":"            \"add_location\": \"\u0027{0}\u0027:%(owner)s\".format(TENANT1)"},{"line_number":4160,"context_line":"        })"},{"line_number":4161,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4162,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d\u0027admin,member\u0027)"},{"line_number":4163,"context_line":"        self.assertRaises("},{"line_number":4164,"context_line":"            webob.exc.HTTPForbidden,"},{"line_number":4165,"context_line":"            self.controller.add_location,"},{"line_number":4166,"context_line":"            request, image_id, url)"},{"line_number":4167,"context_line":""},{"line_number":4168,"context_line":"    @mock.patch.object(glance.location.ImageRepoProxy, \u0027_set_acls\u0027)"},{"line_number":4169,"context_line":"    @mock.patch.object(store, \u0027get_size_from_backend\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"90f64568_7849aa4d","line":4166,"range":{"start_line":4161,"start_character":8,"end_line":4166,"end_character":35},"in_reply_to":"28553435_c30de33f","updated":"2023-05-11 10:22:13.000000000","message":"Done","commit_id":"2987d52f5f6000833fdc1fcdcfdb50dbf9b2bdec"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"a89d2592d81b7c715b1e944fd61790cd45fae287","unresolved":true,"context_lines":[{"line_number":4158,"context_line":"            \"get_image\": \"\","},{"line_number":4159,"context_line":"            \"add_location\": \"\u0027{0}\u0027:%(owner)s\".format(TENANT1)"},{"line_number":4160,"context_line":"        })"},{"line_number":4161,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4162,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d\u0027admin,member\u0027)"},{"line_number":4163,"context_line":"        self.assertRaises("},{"line_number":4164,"context_line":"            webob.exc.HTTPForbidden,"},{"line_number":4165,"context_line":"            self.controller.add_location,"},{"line_number":4166,"context_line":"            request, image_id, url)"},{"line_number":4167,"context_line":""},{"line_number":4168,"context_line":"    @mock.patch.object(glance.location.ImageRepoProxy, \u0027_set_acls\u0027)"},{"line_number":4169,"context_line":"    @mock.patch.object(store, \u0027get_size_from_backend\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"28553435_c30de33f","line":4166,"range":{"start_line":4161,"start_character":8,"end_line":4166,"end_character":35},"in_reply_to":"b86f52c7_9afa0f86","updated":"2023-05-09 13:44:02.000000000","message":"Updated.\n\nI think that might be because of the rule i\u0027ve enforced above","commit_id":"2987d52f5f6000833fdc1fcdcfdb50dbf9b2bdec"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"e39f20d3380b470d68e7cf50a20320b9fa1e34dd","unresolved":true,"context_lines":[{"line_number":4186,"context_line":"        self.assertEqual(url, output.locations[0][\u0027url\u0027])"},{"line_number":4187,"context_line":"        self.assertEqual(\u0027active\u0027, output.status)"},{"line_number":4188,"context_line":""},{"line_number":4189,"context_line":"        output \u003d self.controller.get_locations(request, image_id)"},{"line_number":4190,"context_line":"        self.assertEqual(1, len(output))"},{"line_number":4191,"context_line":"        self.assertEqual(url, output[0][\u0027url\u0027])"},{"line_number":4192,"context_line":""},{"line_number":4193,"context_line":""},{"line_number":4194,"context_line":"class TestImagesControllerPolicies(base.IsolatedUnitTest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"28fd4886_d555d751","line":4191,"range":{"start_line":4189,"start_character":8,"end_line":4191,"end_character":47},"updated":"2023-05-08 09:09:21.000000000","message":"Shouldn\u0027t it be 403 for normal user since this API is only allowed for service user?","commit_id":"2987d52f5f6000833fdc1fcdcfdb50dbf9b2bdec"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"39db1899ddfed65620acd83982df5c87d710f840","unresolved":true,"context_lines":[{"line_number":4186,"context_line":"        self.assertEqual(url, output.locations[0][\u0027url\u0027])"},{"line_number":4187,"context_line":"        self.assertEqual(\u0027active\u0027, output.status)"},{"line_number":4188,"context_line":""},{"line_number":4189,"context_line":"        output \u003d self.controller.get_locations(request, image_id)"},{"line_number":4190,"context_line":"        self.assertEqual(1, len(output))"},{"line_number":4191,"context_line":"        self.assertEqual(url, output[0][\u0027url\u0027])"},{"line_number":4192,"context_line":""},{"line_number":4193,"context_line":""},{"line_number":4194,"context_line":"class TestImagesControllerPolicies(base.IsolatedUnitTest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"8d06a91d_157f7c42","line":4191,"range":{"start_line":4189,"start_character":8,"end_line":4191,"end_character":47},"in_reply_to":"28fd4886_d555d751","updated":"2023-05-10 14:55:34.000000000","message":"I think the user with service role it should allow here and user with other roles should be 403","commit_id":"2987d52f5f6000833fdc1fcdcfdb50dbf9b2bdec"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"aa7a5d8b1876155f63c0081a6950813091234a75","unresolved":false,"context_lines":[{"line_number":4186,"context_line":"        self.assertEqual(url, output.locations[0][\u0027url\u0027])"},{"line_number":4187,"context_line":"        self.assertEqual(\u0027active\u0027, output.status)"},{"line_number":4188,"context_line":""},{"line_number":4189,"context_line":"        output \u003d self.controller.get_locations(request, image_id)"},{"line_number":4190,"context_line":"        self.assertEqual(1, len(output))"},{"line_number":4191,"context_line":"        self.assertEqual(url, output[0][\u0027url\u0027])"},{"line_number":4192,"context_line":""},{"line_number":4193,"context_line":""},{"line_number":4194,"context_line":"class TestImagesControllerPolicies(base.IsolatedUnitTest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"44e335c8_b7c61a2b","line":4191,"range":{"start_line":4189,"start_character":8,"end_line":4191,"end_character":47},"in_reply_to":"8d06a91d_157f7c42","updated":"2023-05-11 10:22:13.000000000","message":"Done","commit_id":"2987d52f5f6000833fdc1fcdcfdb50dbf9b2bdec"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"ee04a52abb425d9baeeb3c3681f5803076ce0a6a","unresolved":true,"context_lines":[{"line_number":4166,"context_line":""},{"line_number":4167,"context_line":"        enforcer \u003d unit_test_utils.enforcer_from_rules({"},{"line_number":4168,"context_line":"            \"get_image\": \"\","},{"line_number":4169,"context_line":"            \"fetch_image_location\": \"role:admin,member\""},{"line_number":4170,"context_line":"        })"},{"line_number":4171,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4172,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d\u0027admin,member\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1926a2cf_622e41c4","line":4169,"range":{"start_line":4169,"start_character":12,"end_line":4169,"end_character":55},"updated":"2023-05-10 01:51:27.000000000","message":"If I am not wrong this line means allowing fetch_image_location_policy for admin and member role.\n\nThe test will fail if you change line 4172 to roles\u003d[\u0027admin\u0027,\u0027member\u0027]","commit_id":"97ae8a6e7b06403a1d07c9a7a6f3200fbdb4ebf4"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"39db1899ddfed65620acd83982df5c87d710f840","unresolved":true,"context_lines":[{"line_number":4166,"context_line":""},{"line_number":4167,"context_line":"        enforcer \u003d unit_test_utils.enforcer_from_rules({"},{"line_number":4168,"context_line":"            \"get_image\": \"\","},{"line_number":4169,"context_line":"            \"fetch_image_location\": \"role:admin,member\""},{"line_number":4170,"context_line":"        })"},{"line_number":4171,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4172,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d\u0027admin,member\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"f33e17de_7f2f3a2f","line":4169,"range":{"start_line":4169,"start_character":12,"end_line":4169,"end_character":55},"in_reply_to":"1926a2cf_622e41c4","updated":"2023-05-10 14:55:34.000000000","message":"ohh yes, now allowing for service role only.","commit_id":"97ae8a6e7b06403a1d07c9a7a6f3200fbdb4ebf4"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"aa7a5d8b1876155f63c0081a6950813091234a75","unresolved":false,"context_lines":[{"line_number":4166,"context_line":""},{"line_number":4167,"context_line":"        enforcer \u003d unit_test_utils.enforcer_from_rules({"},{"line_number":4168,"context_line":"            \"get_image\": \"\","},{"line_number":4169,"context_line":"            \"fetch_image_location\": \"role:admin,member\""},{"line_number":4170,"context_line":"        })"},{"line_number":4171,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4172,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d\u0027admin,member\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bd966f28_231b40c2","line":4169,"range":{"start_line":4169,"start_character":12,"end_line":4169,"end_character":55},"in_reply_to":"f33e17de_7f2f3a2f","updated":"2023-05-11 10:22:13.000000000","message":"Done","commit_id":"97ae8a6e7b06403a1d07c9a7a6f3200fbdb4ebf4"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"f6f4ce2bf9d907cd68a6cec217e01a1a73892391","unresolved":true,"context_lines":[{"line_number":4224,"context_line":"            \"fetch_image_location\": \"role:service\""},{"line_number":4225,"context_line":"        })"},{"line_number":4226,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4227,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d[\u0027admin,member\u0027])"},{"line_number":4228,"context_line":"        self.assertRaises("},{"line_number":4229,"context_line":"            webob.exc.HTTPForbidden,"},{"line_number":4230,"context_line":"            self.controller.get_locations, request, image_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"e538d3f5_b6544714","line":4227,"range":{"start_line":4227,"start_character":58,"end_line":4227,"end_character":71},"updated":"2023-05-10 16:01:01.000000000","message":"still you are passing this incorrectly.\ncorrect way is roles \u003d [\u0027admin\u0027, \u0027member\u0027]","commit_id":"0cf889c9f3190ef09a3abccb36e4cd277fb92f52"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"aa7a5d8b1876155f63c0081a6950813091234a75","unresolved":false,"context_lines":[{"line_number":4224,"context_line":"            \"fetch_image_location\": \"role:service\""},{"line_number":4225,"context_line":"        })"},{"line_number":4226,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4227,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d[\u0027admin,member\u0027])"},{"line_number":4228,"context_line":"        self.assertRaises("},{"line_number":4229,"context_line":"            webob.exc.HTTPForbidden,"},{"line_number":4230,"context_line":"            self.controller.get_locations, request, image_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f789cf8_141e932c","line":4227,"range":{"start_line":4227,"start_character":58,"end_line":4227,"end_character":71},"in_reply_to":"e538d3f5_b6544714","updated":"2023-05-11 10:22:13.000000000","message":"Done","commit_id":"0cf889c9f3190ef09a3abccb36e4cd277fb92f52"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"f6f4ce2bf9d907cd68a6cec217e01a1a73892391","unresolved":true,"context_lines":[{"line_number":4254,"context_line":"        enforcer \u003d unit_test_utils.enforcer_from_rules({"},{"line_number":4255,"context_line":"            \"get_image\": \"\","},{"line_number":4256,"context_line":"            \"fetch_image_location\":"},{"line_number":4257,"context_line":"            \"role:service and \u0027{0}\u0027:%(owner)s\".format(TENANT2)"},{"line_number":4258,"context_line":"        })"},{"line_number":4259,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4260,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d\u0027service\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"e141a373_d146b450","line":4257,"range":{"start_line":4257,"start_character":12,"end_line":4257,"end_character":62},"updated":"2023-05-10 16:01:01.000000000","message":"I didn\u0027t understood this policy.","commit_id":"0cf889c9f3190ef09a3abccb36e4cd277fb92f52"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"558ccab4f83d6a81537c81af9e89308574caa0e1","unresolved":false,"context_lines":[{"line_number":4254,"context_line":"        enforcer \u003d unit_test_utils.enforcer_from_rules({"},{"line_number":4255,"context_line":"            \"get_image\": \"\","},{"line_number":4256,"context_line":"            \"fetch_image_location\":"},{"line_number":4257,"context_line":"            \"role:service and \u0027{0}\u0027:%(owner)s\".format(TENANT2)"},{"line_number":4258,"context_line":"        })"},{"line_number":4259,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4260,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d\u0027service\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bc1ae8aa_011e7a61","line":4257,"range":{"start_line":4257,"start_character":12,"end_line":4257,"end_character":62},"in_reply_to":"bd8cfba4_c833ca9b","updated":"2023-05-12 11:35:42.000000000","message":"Done","commit_id":"0cf889c9f3190ef09a3abccb36e4cd277fb92f52"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"aa7a5d8b1876155f63c0081a6950813091234a75","unresolved":true,"context_lines":[{"line_number":4254,"context_line":"        enforcer \u003d unit_test_utils.enforcer_from_rules({"},{"line_number":4255,"context_line":"            \"get_image\": \"\","},{"line_number":4256,"context_line":"            \"fetch_image_location\":"},{"line_number":4257,"context_line":"            \"role:service and \u0027{0}\u0027:%(owner)s\".format(TENANT2)"},{"line_number":4258,"context_line":"        })"},{"line_number":4259,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4260,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d\u0027service\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bd8cfba4_c833ca9b","line":4257,"range":{"start_line":4257,"start_character":12,"end_line":4257,"end_character":62},"in_reply_to":"e141a373_d146b450","updated":"2023-05-11 10:22:13.000000000","message":"This one I tried with the non owner with service role.","commit_id":"0cf889c9f3190ef09a3abccb36e4cd277fb92f52"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"f6f4ce2bf9d907cd68a6cec217e01a1a73892391","unresolved":true,"context_lines":[{"line_number":4286,"context_line":"        enforcer \u003d unit_test_utils.enforcer_from_rules({"},{"line_number":4287,"context_line":"            \"get_image\": \"\","},{"line_number":4288,"context_line":"            \"fetch_image_location\":"},{"line_number":4289,"context_line":"            \"role:service and \u0027{0}\u0027:%(owner)s\".format(TENANT1)"},{"line_number":4290,"context_line":"        })"},{"line_number":4291,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4292,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d[\u0027service\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"61d34182_0cf5fae3","line":4289,"range":{"start_line":4289,"start_character":12,"end_line":4289,"end_character":62},"updated":"2023-05-10 16:01:01.000000000","message":"ditto\nthe get_locations is allowed only to role:service then why we are adding it with image_owner?","commit_id":"0cf889c9f3190ef09a3abccb36e4cd277fb92f52"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"aa7a5d8b1876155f63c0081a6950813091234a75","unresolved":false,"context_lines":[{"line_number":4286,"context_line":"        enforcer \u003d unit_test_utils.enforcer_from_rules({"},{"line_number":4287,"context_line":"            \"get_image\": \"\","},{"line_number":4288,"context_line":"            \"fetch_image_location\":"},{"line_number":4289,"context_line":"            \"role:service and \u0027{0}\u0027:%(owner)s\".format(TENANT1)"},{"line_number":4290,"context_line":"        })"},{"line_number":4291,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4292,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d[\u0027service\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"94b902d6_4c272c59","line":4289,"range":{"start_line":4289,"start_character":12,"end_line":4289,"end_character":62},"in_reply_to":"61d34182_0cf5fae3","updated":"2023-05-11 10:22:13.000000000","message":"Done","commit_id":"0cf889c9f3190ef09a3abccb36e4cd277fb92f52"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"7fa2dbf42426379dc0dcaae407ac03e04f5eda40","unresolved":true,"context_lines":[{"line_number":4258,"context_line":"        enforcer \u003d unit_test_utils.enforcer_from_rules({"},{"line_number":4259,"context_line":"            \"get_image\": \"\","},{"line_number":4260,"context_line":"            \"fetch_image_location\":"},{"line_number":4261,"context_line":"            \"role:service and \u0027{0}\u0027:%(owner)s\".format(TENANT2)"},{"line_number":4262,"context_line":"        })"},{"line_number":4263,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4264,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d\u0027service\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"e44c48b8_da582bf6","line":4261,"range":{"start_line":4261,"start_character":26,"end_line":4261,"end_character":29},"updated":"2023-05-12 15:56:54.000000000","message":"I still think this policy should be \u0027or\u0027 and not \u0027and\u0027","commit_id":"860d3188915a34dbee7a44c82d4a116f6f906398"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"1a47b0f3ef9764a9e99da15b6fbb5b30fa90a74a","unresolved":false,"context_lines":[{"line_number":4258,"context_line":"        enforcer \u003d unit_test_utils.enforcer_from_rules({"},{"line_number":4259,"context_line":"            \"get_image\": \"\","},{"line_number":4260,"context_line":"            \"fetch_image_location\":"},{"line_number":4261,"context_line":"            \"role:service and \u0027{0}\u0027:%(owner)s\".format(TENANT2)"},{"line_number":4262,"context_line":"        })"},{"line_number":4263,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4264,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d\u0027service\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"d6a69052_4bb29412","line":4261,"range":{"start_line":4261,"start_character":26,"end_line":4261,"end_character":29},"in_reply_to":"e44c48b8_da582bf6","updated":"2023-05-15 13:20:49.000000000","message":"Done","commit_id":"860d3188915a34dbee7a44c82d4a116f6f906398"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"38a8721973913213178c7decded851beaeb5b2bd","unresolved":true,"context_lines":[{"line_number":4185,"context_line":"        enforcer \u003d unit_test_utils.enforcer_from_rules({"},{"line_number":4186,"context_line":"            \"get_image\": \"\","},{"line_number":4187,"context_line":"            \"fetch_image_location\":"},{"line_number":4188,"context_line":"            \"role:service or \u0027{0}\u0027:%(owner)s\".format(TENANT2)"},{"line_number":4189,"context_line":"        })"},{"line_number":4190,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4191,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d\u0027service\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"48b0a3b1_9856e265","line":4188,"range":{"start_line":4188,"start_character":0,"end_line":4188,"end_character":61},"updated":"2023-08-09 17:54:02.000000000","message":"why we are checking this scenario?\nWe specifically recommend this API to restrict service to service call only. Does not make any sense of having this test.\n\nAlso we need to document this strictly in documentation patch.","commit_id":"bcb04989808a5a56bfa89b7e6bc805cdecc61a49"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"ee67f0741210b76dd550b9c4a49ed0443f316691","unresolved":true,"context_lines":[{"line_number":4185,"context_line":"        enforcer \u003d unit_test_utils.enforcer_from_rules({"},{"line_number":4186,"context_line":"            \"get_image\": \"\","},{"line_number":4187,"context_line":"            \"fetch_image_location\":"},{"line_number":4188,"context_line":"            \"role:service or \u0027{0}\u0027:%(owner)s\".format(TENANT2)"},{"line_number":4189,"context_line":"        })"},{"line_number":4190,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4191,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d\u0027service\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5cd89f38_06ac691d","line":4188,"range":{"start_line":4188,"start_character":0,"end_line":4188,"end_character":61},"in_reply_to":"48b0a3b1_9856e265","updated":"2023-08-14 11:54:57.000000000","message":"Yeah, right! Removing this.","commit_id":"bcb04989808a5a56bfa89b7e6bc805cdecc61a49"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"7e46eb8680007be642ace5ee69cd0ca30cbc945e","unresolved":false,"context_lines":[{"line_number":4185,"context_line":"        enforcer \u003d unit_test_utils.enforcer_from_rules({"},{"line_number":4186,"context_line":"            \"get_image\": \"\","},{"line_number":4187,"context_line":"            \"fetch_image_location\":"},{"line_number":4188,"context_line":"            \"role:service or \u0027{0}\u0027:%(owner)s\".format(TENANT2)"},{"line_number":4189,"context_line":"        })"},{"line_number":4190,"context_line":"        self.controller.policy \u003d enforcer"},{"line_number":4191,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d\u0027service\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"f7b28b27_231f43db","line":4188,"range":{"start_line":4188,"start_character":0,"end_line":4188,"end_character":61},"in_reply_to":"5cd89f38_06ac691d","updated":"2023-08-16 09:31:41.000000000","message":"Done","commit_id":"bcb04989808a5a56bfa89b7e6bc805cdecc61a49"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"38a8721973913213178c7decded851beaeb5b2bd","unresolved":true,"context_lines":[{"line_number":4206,"context_line":"                                    \u0027metadata\u0027: {}, \u0027status\u0027: \u0027active\u0027}]),"},{"line_number":4207,"context_line":"        ]"},{"line_number":4208,"context_line":"        self.db.image_create(None, self.images[0])"},{"line_number":4209,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d[\u0027member\u0027])"},{"line_number":4210,"context_line":""},{"line_number":4211,"context_line":"        enforcer \u003d unit_test_utils.enforcer_from_rules({"},{"line_number":4212,"context_line":"            \"get_image\": \"\","}],"source_content_type":"text/x-python","patch_set":21,"id":"d40f9ae0_a8c260eb","line":4209,"range":{"start_line":4209,"start_character":8,"end_line":4209,"end_character":68},"updated":"2023-08-09 17:54:02.000000000","message":"I think this is leftover by mistake?","commit_id":"bcb04989808a5a56bfa89b7e6bc805cdecc61a49"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"ee67f0741210b76dd550b9c4a49ed0443f316691","unresolved":false,"context_lines":[{"line_number":4206,"context_line":"                                    \u0027metadata\u0027: {}, \u0027status\u0027: \u0027active\u0027}]),"},{"line_number":4207,"context_line":"        ]"},{"line_number":4208,"context_line":"        self.db.image_create(None, self.images[0])"},{"line_number":4209,"context_line":"        request \u003d unit_test_utils.get_fake_request(roles\u003d[\u0027member\u0027])"},{"line_number":4210,"context_line":""},{"line_number":4211,"context_line":"        enforcer \u003d unit_test_utils.enforcer_from_rules({"},{"line_number":4212,"context_line":"            \"get_image\": \"\","}],"source_content_type":"text/x-python","patch_set":21,"id":"0429575f_6c9240a4","line":4209,"range":{"start_line":4209,"start_character":8,"end_line":4209,"end_character":68},"in_reply_to":"d40f9ae0_a8c260eb","updated":"2023-08-14 11:54:57.000000000","message":"Done","commit_id":"bcb04989808a5a56bfa89b7e6bc805cdecc61a49"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"38a8721973913213178c7decded851beaeb5b2bd","unresolved":true,"context_lines":[{"line_number":4218,"context_line":"        self.assertEqual(1, len(output))"},{"line_number":4219,"context_line":"        self.assertEqual(url, output[0][\u0027url\u0027])"},{"line_number":4220,"context_line":""},{"line_number":4221,"context_line":"    def test_get_locations_with_invalid_image(self):"},{"line_number":4222,"context_line":"        url \u003d \u0027%s/fake_location_1\u0027 % BASE_URI"},{"line_number":4223,"context_line":"        image_id \u003d str(uuid.uuid4())"},{"line_number":4224,"context_line":"        self.images \u003d ["}],"source_content_type":"text/x-python","patch_set":21,"id":"941eb892_c06ee23c","line":4221,"range":{"start_line":4221,"start_character":32,"end_line":4221,"end_character":46},"updated":"2023-08-09 17:54:02.000000000","message":"what do you mean by invalid image?\nIs not non existing?","commit_id":"bcb04989808a5a56bfa89b7e6bc805cdecc61a49"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"7e46eb8680007be642ace5ee69cd0ca30cbc945e","unresolved":false,"context_lines":[{"line_number":4218,"context_line":"        self.assertEqual(1, len(output))"},{"line_number":4219,"context_line":"        self.assertEqual(url, output[0][\u0027url\u0027])"},{"line_number":4220,"context_line":""},{"line_number":4221,"context_line":"    def test_get_locations_with_invalid_image(self):"},{"line_number":4222,"context_line":"        url \u003d \u0027%s/fake_location_1\u0027 % BASE_URI"},{"line_number":4223,"context_line":"        image_id \u003d str(uuid.uuid4())"},{"line_number":4224,"context_line":"        self.images \u003d ["}],"source_content_type":"text/x-python","patch_set":21,"id":"62bb13f7_4409b53e","line":4221,"range":{"start_line":4221,"start_character":32,"end_line":4221,"end_character":46},"in_reply_to":"5d843e50_9ffbe657","updated":"2023-08-16 09:31:41.000000000","message":"Done","commit_id":"bcb04989808a5a56bfa89b7e6bc805cdecc61a49"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"ee67f0741210b76dd550b9c4a49ed0443f316691","unresolved":true,"context_lines":[{"line_number":4218,"context_line":"        self.assertEqual(1, len(output))"},{"line_number":4219,"context_line":"        self.assertEqual(url, output[0][\u0027url\u0027])"},{"line_number":4220,"context_line":""},{"line_number":4221,"context_line":"    def test_get_locations_with_invalid_image(self):"},{"line_number":4222,"context_line":"        url \u003d \u0027%s/fake_location_1\u0027 % BASE_URI"},{"line_number":4223,"context_line":"        image_id \u003d str(uuid.uuid4())"},{"line_number":4224,"context_line":"        self.images \u003d ["}],"source_content_type":"text/x-python","patch_set":21,"id":"5d843e50_9ffbe657","line":4221,"range":{"start_line":4221,"start_character":32,"end_line":4221,"end_character":46},"in_reply_to":"941eb892_c06ee23c","updated":"2023-08-14 11:54:57.000000000","message":"Yes, Non existing.","commit_id":"bcb04989808a5a56bfa89b7e6bc805cdecc61a49"}],"releasenotes/notes/add-new-get-locations-api-83c4b6dc077efc5f.yaml":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"04027aa90cb49a5c02622a08b6dec5c4daf76689","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    This release brings the additional functionality of adding new"},{"line_number":5,"context_line":"    get locations associated to an image accessible to only service"},{"line_number":6,"context_line":"    users i.e., consumers like cinder and nova for OSSN-0090 and OSSN-0065."},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":49,"id":"864c49e3_2d76ef13","line":4,"range":{"start_line":4,"start_character":63,"end_line":4,"end_character":66},"updated":"2024-02-13 15:02:51.000000000","message":"Is that a leftover of a copy/paste from the \"add location\" patch?","commit_id":"d28d526e6fd71d360f31ca8f07632849fbaae7fa"},{"author":{"_account_id":19138,"name":"Pranali Deore","email":"pdeore@redhat.com","username":"PranaliD"},"change_message_id":"6c51d3895a27ae1ac6534be55b37222cd708d7cb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    This release brings the additional functionality of adding new"},{"line_number":5,"context_line":"    get locations associated to an image accessible to only service"},{"line_number":6,"context_line":"    users i.e., consumers like cinder and nova for OSSN-0090 and OSSN-0065."},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":49,"id":"000fef0b_3bff0fab","line":4,"range":{"start_line":4,"start_character":63,"end_line":4,"end_character":66},"in_reply_to":"864c49e3_2d76ef13","updated":"2024-02-15 10:33:13.000000000","message":"Done","commit_id":"d28d526e6fd71d360f31ca8f07632849fbaae7fa"}]}
