)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17716,"name":"Luz Cazares","email":"luz.cazares@intel.com","username":"luzcazares"},"change_message_id":"0599d4c8ac0965b31742c498521f91bbeffe2dfe","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Some test attributes are returned as"},{"line_number":10,"context_line":"[compute,id-fff42874-7db5-4487-a8e1-ddda5fb5288d,smoke,stress], not being"},{"line_number":11,"context_line":"the test id the first item. In this cases, a \u0027compute\u0027 entry is included"},{"line_number":12,"context_line":"to the whitelist regex (when specified via --test-list) , which will match"},{"line_number":13,"context_line":"with more tests than initially required."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I4b4e60e2c2e1bae7d6a86f9af993390ecd7ccf7b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a95cdbc_33ec53c7","line":12,"range":{"start_line":12,"start_character":68,"end_line":12,"end_character":73},"updated":"2016-10-04 17:19:19.000000000","message":"nit: keep commit message up to 72 characters per line","commit_id":"c2a05ce3a7093ddc57f07cb63e2f81502aeec968"}],"refstack_client/list_parser.py":[{"author":{"_account_id":17716,"name":"Luz Cazares","email":"luz.cazares@intel.com","username":"luzcazares"},"change_message_id":"742dd72e8261d36e1d848762a4ec3094f8f1fe52","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    def create_whitelist(self, list_location):"},{"line_number":210,"context_line":"        \"\"\"This takes in a test list file, get normalized, and get whitelist"},{"line_number":211,"context_line":"        test IDs."},{"line_number":212,"context_line":"        Ex:"},{"line_number":213,"context_line":"            \u0027tempest.test1[id-2,gate]\u0027 -\u003e id-2"},{"line_number":214,"context_line":"            \u0027tempest.test2[id-3,smoke](scenario)\u0027 -\u003e id-3"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        :param list_location: file path or URL location of list file"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_5ddf5339","line":213,"range":{"start_line":212,"start_character":11,"end_line":213,"end_character":13},"updated":"2016-10-03 20:44:46.000000000","message":"Add missing case as example for future reference","commit_id":"64841db8fd3e849be70bb395396ef9c1cd2b6de4"},{"author":{"_account_id":17716,"name":"Luz Cazares","email":"luz.cazares@intel.com","username":"luzcazares"},"change_message_id":"e7cda09a72d987a8919d4ba098178ec2b167dd2e","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        normalized_list \u003d open(self.get_normalized_test_list(list_location),"},{"line_number":220,"context_line":"                               \u0027r\u0027).read()"},{"line_number":221,"context_line":"        # Keep the IDs"},{"line_number":222,"context_line":"        test_ids \u003d re.findall(\"id-\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}\","},{"line_number":223,"context_line":"                              re.sub(\".*.\\[\", \"\", normalized_list))"},{"line_number":224,"context_line":"        return self._write_normalized_test_list(test_ids)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a95cdbc_3cb5c8ed","line":223,"range":{"start_line":222,"start_character":19,"end_line":223,"end_character":67},"updated":"2016-10-05 17:58:19.000000000","message":"Ghe can you make this list a set to remove duplicated ids?.\nI noticed some ids are duplicated. This is expected since the same test case can run with different configurations (yet keep same test idempotent). One example from 2016.08 guideline - test_list_servers test case: \n\"tempest.api.compute.servers.test_create_server.ServersTestJSON.test_list_servers\": {\"idempotent_id\": \"id-9a438d88-10c6-4bcd-8b5b-5b6e25e1346f\"},        \n\"tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_list_servers\": {\"idempotent_id\": \"id-9a438d88-10c6-4bcd-8b5b-5b6e25e1346f\"}","commit_id":"be5c7d170df1ead9e748543e006352f2bb8ca656"},{"author":{"_account_id":10526,"name":"Catherine Diep","email":"cdiep@us.ibm.com","username":"cdiep"},"change_message_id":"79701839cefb3e8e4d5b7d65d7c3247786af69b5","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        normalized_list \u003d open(self.get_normalized_test_list(list_location),"},{"line_number":220,"context_line":"                               \u0027r\u0027).read()"},{"line_number":221,"context_line":"        # Keep the IDs"},{"line_number":222,"context_line":"        test_ids \u003d re.findall(\"id-\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}\","},{"line_number":223,"context_line":"                              re.sub(\".*.\\[\", \"\", normalized_list))"},{"line_number":224,"context_line":"        return self._write_normalized_test_list(test_ids)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a95cdbc_55450715","line":223,"range":{"start_line":222,"start_character":19,"end_line":223,"end_character":67},"in_reply_to":"1a95cdbc_3cb5c8ed","updated":"2016-10-05 19:00:40.000000000","message":"@Luz\nWith one idempotent_id, do we know all tests with the same idempotent_id will be run?","commit_id":"be5c7d170df1ead9e748543e006352f2bb8ca656"},{"author":{"_account_id":10526,"name":"Catherine Diep","email":"cdiep@us.ibm.com","username":"cdiep"},"change_message_id":"d6c2ac74ca02be377971c06e11128bd8d3523d05","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        normalized_list \u003d open(self.get_normalized_test_list(list_location),"},{"line_number":220,"context_line":"                               \u0027r\u0027).read()"},{"line_number":221,"context_line":"        # Keep the IDs"},{"line_number":222,"context_line":"        test_ids \u003d re.findall(\"id-\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}\","},{"line_number":223,"context_line":"                              re.sub(\".*.\\[\", \"\", normalized_list))"},{"line_number":224,"context_line":"        return self._write_normalized_test_list(test_ids)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a95cdbc_b99e3db6","line":223,"range":{"start_line":222,"start_character":19,"end_line":223,"end_character":67},"in_reply_to":"1a95cdbc_55450715","updated":"2016-10-06 00:10:27.000000000","message":"Due to the fact that an idempotent_id can represent more than one test cases.  It is best that we use the fully qualified test case names to build the whitelist. For this patch, consider to change the regex to produce the following:\n\n\u0027tempest.test1[id-2,gate]\u0027 -\u003e \u0027tempest.test1\u0027  \n\n\u0027tempest.test2[id-3,smoke](scenario)\u0027 -\u003e \u0027tempest.test2\u0027\n\n\u0027tempest.test3[compute,id-4]\u0027 -\u003e \u0027tempest.test3\u0027\n\nA follow-up patch is needed later to remove the unnecessary method call(s) (like get_normalized_test_list ).","commit_id":"be5c7d170df1ead9e748543e006352f2bb8ca656"},{"author":{"_account_id":1726,"name":"Ghe Rivero","email":"ghe.rivero@gmail.com","username":"ghe.rivero"},"change_message_id":"dca7ac477782cb7152b6882f1d2288cb58bf13ed","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        normalized_list \u003d open(self.get_normalized_test_list(list_location),"},{"line_number":220,"context_line":"                               \u0027r\u0027).read()"},{"line_number":221,"context_line":"        # Keep the IDs"},{"line_number":222,"context_line":"        test_ids \u003d re.findall(\"id-\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}\","},{"line_number":223,"context_line":"                              re.sub(\".*.\\[\", \"\", normalized_list))"},{"line_number":224,"context_line":"        return self._write_normalized_test_list(test_ids)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a95cdbc_f721a44e","line":223,"range":{"start_line":222,"start_character":19,"end_line":223,"end_character":67},"in_reply_to":"1a95cdbc_b99e3db6","updated":"2016-10-06 10:05:07.000000000","message":"I\u0027m doing some tests comparing ids vs name options. Will post the info here and the mailing list once they are finished","commit_id":"be5c7d170df1ead9e748543e006352f2bb8ca656"},{"author":{"_account_id":17716,"name":"Luz Cazares","email":"luz.cazares@intel.com","username":"luzcazares"},"change_message_id":"a1d9fb5915bd6a21538754a777ea888522dd0810","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def create_whitelist(self, list_location):"},{"line_number":210,"context_line":"        \"\"\"This takes in a test list file, get normalized, and get whitelist"},{"line_number":211,"context_line":"        test IDs."},{"line_number":212,"context_line":"        Ex:"},{"line_number":213,"context_line":"            \u0027tempest.test1[id-2,gate]\u0027 -\u003e tempest.test1"},{"line_number":214,"context_line":"            \u0027tempest.test2[id-3,smoke](scenario)\u0027 -\u003e tempest.test2"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_a795dc87","line":211,"range":{"start_line":211,"start_character":8,"end_line":211,"end_character":17},"updated":"2016-10-07 18:19:59.000000000","message":"\u0027s/test IDs/ regexes using full qualified test names (one per line)./g\u0027","commit_id":"7ef3921c0474cc7173caf1327974b719b1ad6abf"},{"author":{"_account_id":17716,"name":"Luz Cazares","email":"luz.cazares@intel.com","username":"luzcazares"},"change_message_id":"a1d9fb5915bd6a21538754a777ea888522dd0810","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        \"\"\"This takes in a test list file, get normalized, and get whitelist"},{"line_number":211,"context_line":"        test IDs."},{"line_number":212,"context_line":"        Ex:"},{"line_number":213,"context_line":"            \u0027tempest.test1[id-2,gate]\u0027 -\u003e tempest.test1"},{"line_number":214,"context_line":"            \u0027tempest.test2[id-3,smoke](scenario)\u0027 -\u003e tempest.test2"},{"line_number":215,"context_line":"            \u0027tempest.test3[compute,id-4]\u0027 -\u003e tempest.test3"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_67cd94b6","line":213,"range":{"start_line":213,"start_character":42,"end_line":213,"end_character":55},"updated":"2016-10-07 18:19:59.000000000","message":"output form is now tempest.test1\\[","commit_id":"7ef3921c0474cc7173caf1327974b719b1ad6abf"},{"author":{"_account_id":10526,"name":"Catherine Diep","email":"cdiep@us.ibm.com","username":"cdiep"},"change_message_id":"b8f822514b023564354214e371536f362636864c","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        \"\"\""},{"line_number":219,"context_line":"        normalized_list \u003d open(self.get_normalized_test_list(list_location),"},{"line_number":220,"context_line":"                               \u0027r\u0027).read()"},{"line_number":221,"context_line":"        # Keep the names"},{"line_number":222,"context_line":"        tests_list \u003d [re.sub(\"\\[\", \"\\[\", test)"},{"line_number":223,"context_line":"                      for test in re.findall(\".*\\[\", normalized_list)]"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        return self._write_normalized_test_list(tests_list)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_443976f1","line":222,"range":{"start_line":221,"start_character":9,"end_line":222,"end_character":46},"updated":"2016-10-07 18:05:28.000000000","message":"so the test list returned will include a \\[ at the end\n\n\u0027tempest.test1[id-2,gate]\u0027 -\u003e tempest.test1\\[\u0027\n\nnot\n\n\u0027tempest.test1[id-2,gate]\u0027 -\u003e tempest.test1\u0027\n\nTests run fine.  However, is this what we want?  How about:\n\ntests_list \u003d [re.sub(\"\\[\", \"\", test)","commit_id":"7ef3921c0474cc7173caf1327974b719b1ad6abf"},{"author":{"_account_id":1726,"name":"Ghe Rivero","email":"ghe.rivero@gmail.com","username":"ghe.rivero"},"change_message_id":"35228f74ddcfb7229391b7247a6e92ebe5216a34","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        \"\"\""},{"line_number":219,"context_line":"        normalized_list \u003d open(self.get_normalized_test_list(list_location),"},{"line_number":220,"context_line":"                               \u0027r\u0027).read()"},{"line_number":221,"context_line":"        # Keep the names"},{"line_number":222,"context_line":"        tests_list \u003d [re.sub(\"\\[\", \"\\[\", test)"},{"line_number":223,"context_line":"                      for test in re.findall(\".*\\[\", normalized_list)]"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        return self._write_normalized_test_list(tests_list)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_47333862","line":222,"range":{"start_line":221,"start_character":9,"end_line":222,"end_character":46},"in_reply_to":"1a95cdbc_443976f1","updated":"2016-10-07 18:29:17.000000000","message":"The ostestr whitelist file is one regex per line.\nIncluding a final \\[, we avoid matching various tests with the same begininig. Ex.\ntest1.compute.reboot_server will also match test1.compute.teboot_server_try_harder but using the regex test1.compute.reboot_server\\[ won\u0027t","commit_id":"7ef3921c0474cc7173caf1327974b719b1ad6abf"},{"author":{"_account_id":10526,"name":"Catherine Diep","email":"cdiep@us.ibm.com","username":"cdiep"},"change_message_id":"fe1d4aaa56d04d92156bdea81eaf6050b939cda4","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        \"\"\""},{"line_number":219,"context_line":"        normalized_list \u003d open(self.get_normalized_test_list(list_location),"},{"line_number":220,"context_line":"                               \u0027r\u0027).read()"},{"line_number":221,"context_line":"        # Keep the names"},{"line_number":222,"context_line":"        tests_list \u003d [re.sub(\"\\[\", \"\\[\", test)"},{"line_number":223,"context_line":"                      for test in re.findall(\".*\\[\", normalized_list)]"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        return self._write_normalized_test_list(tests_list)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_ea8b2966","line":222,"range":{"start_line":221,"start_character":9,"end_line":222,"end_character":46},"in_reply_to":"1a95cdbc_47333862","updated":"2016-10-07 18:44:15.000000000","message":"That is a good reason to include \\[. Thanks!\n\nIf that is the case, just update the comments to reflect what is being output then we are good to go.","commit_id":"7ef3921c0474cc7173caf1327974b719b1ad6abf"}],"refstack_client/tests/unit/test_list_parser.py":[{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"a59c2d44f6f3a3dd90cf5763da8fa8dadb185040","unresolved":false,"context_lines":[{"line_number":189,"context_line":"    @mock.patch.object(parser.TestListParser, \"get_normalized_test_list\")"},{"line_number":190,"context_line":"    def test_create_whitelist(self, mock_get_normalized):"},{"line_number":191,"context_line":"        \"\"\"Test whether a test list is properly parsed to extract test ids\"\"\""},{"line_number":192,"context_line":"        test_list \u003d \"tempest.test.one[id-11111111-2222-3333-4444-55555555555\"\\"},{"line_number":193,"context_line":"                    \"5,gate]\\ntempest.test.two[compute,id-22222222-3333-4444\"\\"},{"line_number":194,"context_line":"                    \"-5555-666666666666]\\ntempest.test.three[id-33333333-444\"\\"},{"line_number":195,"context_line":"                    \"4-5555-6666-777777777777](scenario)\\ntempest.test.four[\"\\"},{"line_number":196,"context_line":"                    \"id-1-22-333-4444-55555\""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        expected_list \u003d \"tempest.test.one\\[\\n\"\\"},{"line_number":199,"context_line":"                        \"tempest.test.two\\[\\n\"\\"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_e97a6587","line":196,"range":{"start_line":192,"start_character":20,"end_line":196,"end_character":44},"updated":"2016-10-07 14:04:53.000000000","message":"If you provide one more patch, please reformat this string in more readable way","commit_id":"7ef3921c0474cc7173caf1327974b719b1ad6abf"}]}
