)]}'
{"cinderclient/tests/functional/base.py":[{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"263f630183b25a9221db93c6919b9ba4389511e4","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def assertRows(self, output_lines):"},{"line_number":100,"context_line":"        \"\"\""},{"line_number":101,"context_line":"        Check presence of common volume properties"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        :param output_lines: output table from cmd"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_49988478","line":101,"updated":"2015-07-01 17:50:35.000000000","message":"Please, do not use doc strings with first empty line.\n\nMore info:\nhttp://docs.openstack.org/developer/hacking/#docstrings","commit_id":"fe8fa55ca177b187d0f2b7d6926ea77676499662"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"263f630183b25a9221db93c6919b9ba4389511e4","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        Check presence of common volume properties"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        :param output_lines: output table from cmd"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        \"\"\""},{"line_number":106,"context_line":"        self.assertIn(\u0027attachments\u0027, output_lines)"},{"line_number":107,"context_line":"        self.assertIn(\u0027availability_zone\u0027, output_lines)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_c98a541b","line":104,"updated":"2015-07-01 17:50:35.000000000","message":"and please do not use extra blank lines in the end of doc strings.","commit_id":"fe8fa55ca177b187d0f2b7d6926ea77676499662"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"270f7d51d1c32c9eb8f1c5c65648f5e670043a5e","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        :param status: expected status of volume"},{"line_number":123,"context_line":"        \"\"\""},{"line_number":124,"context_line":"        def volume_at_status(output, volid, state):"},{"line_number":125,"context_line":"            for line in output.split(\"\\n\"):"},{"line_number":126,"context_line":"                fields \u003d line.split()"},{"line_number":127,"context_line":"                if len(fields) \u003e 4:"},{"line_number":128,"context_line":"                    if fields[1] \u003d\u003d volid:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_3f54f5c7","line":125,"updated":"2015-07-03 11:31:42.000000000","message":"Can we use here another way of checking volume status? without splitting lines? for example, maybe we can call get(volume_id) and check status of this object?","commit_id":"d3847e6469e94239f786afafb135b1f7d93e414f"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"270f7d51d1c32c9eb8f1c5c65648f5e670043a5e","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            raise Exception(\"Volume %s did not reach status \u0027%s\u0027 in output: %s\""},{"line_number":131,"context_line":"                            % (volid, state, output))"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        for x in xrange(60):"},{"line_number":134,"context_line":"            volumes \u003d self.cinder(\u0027list\u0027)"},{"line_number":135,"context_line":"            if volume_at_status(volumes, volume_id, status):"},{"line_number":136,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_9c750fcc","line":133,"updated":"2015-07-03 11:31:42.000000000","message":"I would prefer not to hardcode \u0027timeout\u0027 and pass it as an argument","commit_id":"d3847e6469e94239f786afafb135b1f7d93e414f"},{"author":{"_account_id":13962,"name":"Victor Ryzhenkin","email":"vryzhenkin@mirantis.com","username":"vryzhenkin"},"change_message_id":"1817a422549ff39fdff1d62098c26683f924cfe1","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            raise Exception(\"Volume %s did not reach status \u0027%s\u0027 in output: %s\""},{"line_number":131,"context_line":"                            % (volid, state, output))"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        for x in xrange(60):"},{"line_number":134,"context_line":"            volumes \u003d self.cinder(\u0027list\u0027)"},{"line_number":135,"context_line":"            if volume_at_status(volumes, volume_id, status):"},{"line_number":136,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_dfb5c9ec","line":133,"in_reply_to":"ba3cc151_9c750fcc","updated":"2015-07-03 11:42:08.000000000","message":"Agreed with Nastya.\nMaybe u can use while loop for this? \ne.g. \nwhile time.time() - start_time \u003c timeout\n    ...","commit_id":"d3847e6469e94239f786afafb135b1f7d93e414f"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"270f7d51d1c32c9eb8f1c5c65648f5e670043a5e","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        else:"},{"line_number":139,"context_line":"            self.fail(\"Volume %s not available after 60s\" % volume_id)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def checkVolumeNotDeleted(self, volume_id):"},{"line_number":142,"context_line":"        \"\"\"Check that volume id appears in volumes list."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        :param volume_id: uuid4 id of given volume"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_df21499f","line":141,"updated":"2015-07-03 11:31:42.000000000","message":"Let\u0027s use one style for method names: lower_case_with_underscores or mixedCase","commit_id":"d3847e6469e94239f786afafb135b1f7d93e414f"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"5f2a89ea07acf3337a0616a7d065ab035ce5e5ea","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        :param volume_id: uuid4 id of given volume"},{"line_number":152,"context_line":"        \"\"\""},{"line_number":153,"context_line":"        sec \u003d 1"},{"line_number":154,"context_line":"        while volume_id in self.cinder(\u0027list\u0027):"},{"line_number":155,"context_line":"            time.sleep(1)"},{"line_number":156,"context_line":"            sec +\u003d 1"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_bf6c85d0","line":153,"updated":"2015-07-03 11:28:44.000000000","message":"why we start from 1? Probably we can use 0 here?","commit_id":"d3847e6469e94239f786afafb135b1f7d93e414f"},{"author":{"_account_id":13962,"name":"Victor Ryzhenkin","email":"vryzhenkin@mirantis.com","username":"vryzhenkin"},"change_message_id":"1817a422549ff39fdff1d62098c26683f924cfe1","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        while volume_id in self.cinder(\u0027list\u0027):"},{"line_number":155,"context_line":"            time.sleep(1)"},{"line_number":156,"context_line":"            sec +\u003d 1"},{"line_number":157,"context_line":"            if sec \u003d\u003d 60:"},{"line_number":158,"context_line":"                self.fail(\"Volume %s not deleted after 60s\" % volume_id)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def volume_delete(self, volume_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_7f7fdd14","line":157,"updated":"2015-07-03 11:42:08.000000000","message":"Strange timeout realization. Can u use time library for this?\n\nstart_time - time.time()\nwhile time.time() - start_time \u003c timeout\n    if volume_id in self.cinder(\u0027list\u0027):\n         ...\n    else:\n        return\nself.fail(msg)","commit_id":"d3847e6469e94239f786afafb135b1f7d93e414f"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"5f2a89ea07acf3337a0616a7d065ab035ce5e5ea","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            time.sleep(1)"},{"line_number":156,"context_line":"            sec +\u003d 1"},{"line_number":157,"context_line":"            if sec \u003d\u003d 60:"},{"line_number":158,"context_line":"                self.fail(\"Volume %s not deleted after 60s\" % volume_id)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def volume_delete(self, volume_id):"},{"line_number":161,"context_line":"        \"\"\"Delete volume if it appears in volumes list."}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_3fe63544","line":158,"updated":"2015-07-03 11:28:44.000000000","message":"why do you use different logic for lines 133-139 and 154-158? Looks like we can use the same code for both cases to keep it in one style.","commit_id":"d3847e6469e94239f786afafb135b1f7d93e414f"},{"author":{"_account_id":13962,"name":"Victor Ryzhenkin","email":"vryzhenkin@mirantis.com","username":"vryzhenkin"},"change_message_id":"1817a422549ff39fdff1d62098c26683f924cfe1","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        :param volume_id:  uuid4 id of given volume"},{"line_number":164,"context_line":"        \"\"\""},{"line_number":165,"context_line":"        if volume_id in self.cinder(\u0027list\u0027):"},{"line_number":166,"context_line":"            self.cinder(\u0027delete\u0027, params\u003dstr(volume_id))"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_5fa779a6","line":166,"updated":"2015-07-03 11:42:08.000000000","message":"I think we need to check this. \nSome asserts for successfully deletion needed.","commit_id":"d3847e6469e94239f786afafb135b1f7d93e414f"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"7f045d50125c6fa02712db6df1c863781d3c1aff","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":"        start_time \u003d time.time()"},{"line_number":130,"context_line":"        while time.time()-start_time \u003c timeout:"},{"line_number":131,"context_line":"            if status in self.cinder(\u0027list\u0027):"},{"line_number":132,"context_line":"                break"},{"line_number":133,"context_line":"        else:"},{"line_number":134,"context_line":"            self.fail(\"Volume %s did not reach status %s after %d s\""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_638e3529","line":131,"updated":"2015-07-06 13:19:07.000000000","message":"I guess,  that it is not correct check. For example, it is possible that during test execution some volumes can already exist and be in different statuses (in desired too). In this case, you volume won\u0027t reach given status, but method return that all is ok.","commit_id":"15bb212d53782a3ba400003006783044768e87af"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"9b3285940dfc1cae7466092c01932b1308b6f70d","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    \"\"\"Cinder base class, issues calls to cinderclient."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    \"\"\""},{"line_number":59,"context_line":"    uuid_pattern \u003d re.compile(\u0027[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]\u0027"},{"line_number":60,"context_line":"                              \u0027{4}-[0-9a-f]{12}\u0027)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_ca0e02e5","line":59,"updated":"2015-07-07 11:02:46.000000000","message":"You can use uuid.UUID(vol_id) to match uuid here","commit_id":"4dab4995c7aaa5dccf790ab144fb9d11731247f2"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"9b3285940dfc1cae7466092c01932b1308b6f70d","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            for field in field_names:"},{"line_number":101,"context_line":"                self.assertIn(field, item)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def assert_rows(self, output_lines):"},{"line_number":104,"context_line":"        \"\"\"Check presence of common volume properties."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        :param output_lines: output table from cmd"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_0ad38a39","line":103,"updated":"2015-07-07 11:02:46.000000000","message":"Why do you check rows in each test, we have such tests in test_readonly_cli, whatever you can use assertTableHeaders for this","commit_id":"4dab4995c7aaa5dccf790ab144fb9d11731247f2"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"0ebd952c876261a231a89743c9496eb70fb13184","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        :param status: expected status of volume"},{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":"        start_time \u003d time.time()"},{"line_number":130,"context_line":"        while time.time()-start_time \u003c timeout:"},{"line_number":131,"context_line":"            if status in self.cinder(\u0027show\u0027, params\u003dvolume_id):"},{"line_number":132,"context_line":"                break"},{"line_number":133,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_e7a77f09","line":130,"updated":"2015-07-07 10:28:05.000000000","message":"I suggest to use \u0027 \u0027 before and after \u0027-\u0027 here.","commit_id":"4dab4995c7aaa5dccf790ab144fb9d11731247f2"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"9b3285940dfc1cae7466092c01932b1308b6f70d","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        if volume_id in self.cinder(\u0027list\u0027):"},{"line_number":164,"context_line":"            self.cinder(\u0027delete\u0027, params\u003dvolume_id)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def volume_id_from_cli_create(self, output):"},{"line_number":167,"context_line":"        \"\"\"Scrape the volume id out of the \u0027cinder create\u0027 command.\"\"\""},{"line_number":168,"context_line":"        volume_id \u003d \u0027\u0027.join(self.uuid_pattern.findall(output))"},{"line_number":169,"context_line":"        return volume_id"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_aa35bedb","line":166,"updated":"2015-07-07 11:02:46.000000000","message":"Why do you need your own pattern matcher, you can use tempest parser.listing (it return list of dict with 2 keys \u0027Property\u0027 and \u0027Value\u0027)and then extract property you need, e.g. for volume id : \n\nvol \u003d self.parser.listing(self.cinder(\u0027create\u0027, params\u003d\u00271\u0027))\n\nvol_id \u003d next(prop[\u0027Value\u0027] for prop in vol if prop[\u0027Property\u0027]\u003d\u003d\u0027id\u0027)","commit_id":"4dab4995c7aaa5dccf790ab144fb9d11731247f2"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"f074ad0a43629b0020b6bbc9679b7cb04ff903cb","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        if volume_id in self.cinder(\u0027list\u0027):"},{"line_number":178,"context_line":"            self.cinder(\u0027delete\u0027, params\u003dvolume_id)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def get_volume_id(self, output):"},{"line_number":181,"context_line":"        \"\"\"Extract Volume ID and check UUID match."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        :param output: output table from cmd"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_6e8d1130","line":180,"updated":"2015-07-09 09:36:45.000000000","message":"I would prefer to delete this method to avoid duplication, for getting volume_is you can use get_volume_property","commit_id":"f46a674f1667b176b64006ad657b19b1d81baa60"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"1ac47fa1bab010f44b9284aa17e88c85bdcc8db8","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        volume[\u0027created\u0027] \u003d self.cinder(\u0027create\u0027, params\u003dparams)"},{"line_number":167,"context_line":"        volume[\u0027id\u0027] \u003d self.get_volume_property(volume[\u0027created\u0027], \u0027id\u0027)"},{"line_number":168,"context_line":"        self.addCleanup(self.volume_delete, volume[\u0027id\u0027])"},{"line_number":169,"context_line":"        uuid.UUID(volume[\u0027id\u0027])"},{"line_number":170,"context_line":"        self.assert_rows(volume[\u0027created\u0027])"},{"line_number":171,"context_line":"        return volume"},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_98e09b98","line":169,"updated":"2015-07-10 10:11:53.000000000","message":"Why do you check id on uuid each volume creation operation?","commit_id":"3e55b0c8fe8f1e6b03d75e7eeb09f565d621f2d9"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"250d6c3cf6d39fe5ab68d767ef65f782bc294abd","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        if volume_id in self.cinder(\u0027list\u0027):"},{"line_number":178,"context_line":"            self.cinder(\u0027delete\u0027, params\u003dvolume_id)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    # def get_volume_id(self, output):"},{"line_number":181,"context_line":"    #     \"\"\"Extract Volume ID and check UUID match."},{"line_number":182,"context_line":"    #"},{"line_number":183,"context_line":"    #     :param output: output table from cmd"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_e3bfaffa","line":180,"updated":"2015-07-10 13:57:06.000000000","message":"Please, delete this block","commit_id":"a41ed70adca224f967ebd86f7301ab2f5eef66c0"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"f56aad7c0bdf630c1fe77c6129eb21de13fd89ef","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            for field in field_names:"},{"line_number":99,"context_line":"                self.assertIn(field, item)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def assert_rows(self, output_lines):"},{"line_number":102,"context_line":"        \"\"\"Check presence of common volume properties."},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        :param output_lines: output table from CLI"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_46074d1c","line":101,"updated":"2015-07-13 21:31:55.000000000","message":"Please, rename it tot assert_volume_details_rows or something less general","commit_id":"1dba24abc94708c29ad29da351010651cda59ff7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"f56aad7c0bdf630c1fe77c6129eb21de13fd89ef","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        self.assertIn(\u0027size\u0027, output_lines)"},{"line_number":117,"context_line":"        self.assertIn(\u0027status\u0027, output_lines)"},{"line_number":118,"context_line":"        self.assertIn(\u0027user_id\u0027, output_lines)"},{"line_number":119,"context_line":"        self.assertIn(\u0027volume_type\u0027, output_lines)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def wait_for_volume_status(self, volume_id, status, timeout\u003d60):"},{"line_number":122,"context_line":"        \"\"\"Wait until volume reaches given status."}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_2151d30e","line":119,"updated":"2015-07-13 21:31:55.000000000","message":"The lines above could be replaced with:\nvalues \u003d [\u0027attachments\u0027, \u0027availability_zone\u0027, ...]\n\nfor value in values:\n    self.assertIn(value, output_lines)","commit_id":"1dba24abc94708c29ad29da351010651cda59ff7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"f56aad7c0bdf630c1fe77c6129eb21de13fd89ef","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        :param volume_id: uuid4 id of given volume"},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        self.assertTrue(volume_id in self.cinder(\u0027list\u0027))"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def check_volume_deleted(self, volume_id, timeout\u003d60):"},{"line_number":144,"context_line":"        \"\"\"Check that volume deleted from volumes list."}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_219f93b5","line":141,"updated":"2015-07-13 21:31:55.000000000","message":"Please, use cinder show instead of list","commit_id":"1dba24abc94708c29ad29da351010651cda59ff7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"f56aad7c0bdf630c1fe77c6129eb21de13fd89ef","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \"\"\""},{"line_number":150,"context_line":"        start_time \u003d time.time()"},{"line_number":151,"context_line":"        while time.time() - start_time \u003c timeout:"},{"line_number":152,"context_line":"            if volume_id not in self.cinder(\u0027list\u0027):"},{"line_number":153,"context_line":"                break"},{"line_number":154,"context_line":"        else:"},{"line_number":155,"context_line":"            self.fail(\"Volume %s not deleted after %d s\""}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_e1a8cbdd","line":152,"updated":"2015-07-13 21:31:55.000000000","message":"Please, use cinder show instead of list","commit_id":"1dba24abc94708c29ad29da351010651cda59ff7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"f56aad7c0bdf630c1fe77c6129eb21de13fd89ef","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        volume[\u0027created\u0027] \u003d self.cinder(\u0027create\u0027, params\u003dparams)"},{"line_number":166,"context_line":"        volume[\u0027id\u0027] \u003d self.get_volume_property(volume[\u0027created\u0027], \u0027id\u0027)"},{"line_number":167,"context_line":"        self.addCleanup(self.volume_delete, volume[\u0027id\u0027])"},{"line_number":168,"context_line":"        self.assert_rows(volume[\u0027created\u0027])"},{"line_number":169,"context_line":"        self.wait_for_volume_status(volume[\u0027id\u0027], \u0027available\u0027)"},{"line_number":170,"context_line":"        return volume"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_01836f57","line":168,"updated":"2015-07-13 21:31:55.000000000","message":"Why do we need this assert?","commit_id":"1dba24abc94708c29ad29da351010651cda59ff7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"f56aad7c0bdf630c1fe77c6129eb21de13fd89ef","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        return volume"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def volume_delete(self, volume_id):"},{"line_number":173,"context_line":"        \"\"\"Delete volume if it appears in volumes list."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        :param volume_id: uuid4 id of given volume"},{"line_number":176,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_618cbb7f","line":173,"updated":"2015-07-13 21:31:55.000000000","message":"Why do we need this method?","commit_id":"1dba24abc94708c29ad29da351010651cda59ff7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"f56aad7c0bdf630c1fe77c6129eb21de13fd89ef","unresolved":false,"context_lines":[{"line_number":178,"context_line":"            self.cinder(\u0027delete\u0027, params\u003dvolume_id)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def get_volume_property(self, output, property_name):"},{"line_number":181,"context_line":"        \"\"\"Extract custom volume properties form CLI output."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        :param output: given CLI output"},{"line_number":184,"context_line":"        :param property_name: name of desired property"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_015fefe5","line":181,"updated":"2015-07-13 21:31:55.000000000","message":"\"Extract custom volume properties\" \u003d\u003e \"Extract volume property value\"","commit_id":"1dba24abc94708c29ad29da351010651cda59ff7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"f56aad7c0bdf630c1fe77c6129eb21de13fd89ef","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        :return prop: value of desired property"},{"line_number":186,"context_line":"        \"\"\""},{"line_number":187,"context_line":"        volume \u003d self.parser.listing(output)"},{"line_number":188,"context_line":"        prop \u003d str(next(prop[\u0027Value\u0027] for prop in volume"},{"line_number":189,"context_line":"                        if prop[\u0027Property\u0027] \u003d\u003d property_name))"},{"line_number":190,"context_line":"        return prop"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_61ba7b0c","line":188,"updated":"2015-07-13 21:31:55.000000000","message":"Do we really need \u0027next\u0027 call here?","commit_id":"1dba24abc94708c29ad29da351010651cda59ff7"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"2fa58c687eac5c8f6de0882fa65114d1baa0733a","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from six.moves import configparser"},{"line_number":17,"context_line":"from tempest_lib.cli import base"},{"line_number":18,"context_line":"from tempest_lib.cli import output_parser"},{"line_number":19,"context_line":"from tempest_lib.exceptions import CommandFailed"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"_CREDS_FILE \u003d \u0027functional_creds.conf\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_55961c4d","line":19,"updated":"2015-07-21 09:10:12.000000000","message":"please don\u0027t import classes, only modules","commit_id":"c59bdfe9f47a22e4f92d85cd169d9e6e8b1da243"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"d58bb3f035b53de37160e70a9840d307990fdb5a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    \"\"\"Cinder base class, issues calls to cinderclient."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    \"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def setUp(self):"},{"line_number":62,"context_line":"        super(ClientTestBase, self).setUp()"},{"line_number":63,"context_line":"        self.clients \u003d self._get_clients()"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_92910f55","line":60,"updated":"2015-07-21 11:42:28.000000000","message":"Additional line?","commit_id":"c59bdfe9f47a22e4f92d85cd169d9e6e8b1da243"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"2fa58c687eac5c8f6de0882fa65114d1baa0733a","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            self.fail(\"Volume %s did not reach status %s after %d s\""},{"line_number":126,"context_line":"                      % (volume_id, status, timeout))"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def check_volume_not_deleted(self, volume_id):"},{"line_number":129,"context_line":"        \"\"\"Check that volume id appears in volumes list."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        :param volume_id: uuid4 id of given volume"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_f5bf285e","line":128,"updated":"2015-07-21 09:10:12.000000000","message":"Do you need this method?","commit_id":"c59bdfe9f47a22e4f92d85cd169d9e6e8b1da243"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"bb8d0da1d3b751225b04ffcb59d069884d169c55","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                      % (volume_id, status, timeout))"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def check_volume_not_deleted(self, volume_id):"},{"line_number":128,"context_line":"        \"\"\"Check that volume id appears in volumes list."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        :param volume_id: uuid4 id of given volume"},{"line_number":131,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_5e764aa4","line":128,"updated":"2015-07-31 09:42:02.000000000","message":"This docstring doesn\u0027t describe what function does","commit_id":"01b8f48fa42b62e946d76c831c5f3b96cd09a34a"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"bb8d0da1d3b751225b04ffcb59d069884d169c55","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        self.assertTrue(self.cinder(\u0027show\u0027, params\u003dvolume_id))"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def check_volume_deleted(self, volume_id, timeout\u003d60):"},{"line_number":135,"context_line":"        \"\"\"Check that volume deleted from volumes list."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        :param timeout:"},{"line_number":138,"context_line":"        :param volume_id: uuid4 id of given volume"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_fe7ab676","line":135,"updated":"2015-07-31 09:42:02.000000000","message":"The same comment as above","commit_id":"01b8f48fa42b62e946d76c831c5f3b96cd09a34a"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"3013fbe03a0152079ac7dea0591241fe65fbac67","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        :param params: parameters to cinder command"},{"line_number":156,"context_line":"        :return: volume: dictionary with CLI output and volume ID"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        volume \u003d {\u0027created\u0027: \u0027\u0027, \u0027id\u0027: \u0027\u0027}"},{"line_number":159,"context_line":"        volume[\u0027created\u0027] \u003d self.cinder(\u0027create\u0027, params\u003dparams)"},{"line_number":160,"context_line":"        volume[\u0027id\u0027] \u003d self.get_volume_property(volume[\u0027created\u0027], \u0027id\u0027)"},{"line_number":161,"context_line":"        self.addCleanup(self.volume_delete, volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_a33d4e2c","line":158,"updated":"2015-07-23 15:47:31.000000000","message":"you can just create empty list here: volume \u003d {}","commit_id":"01b8f48fa42b62e946d76c831c5f3b96cd09a34a"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"bb8d0da1d3b751225b04ffcb59d069884d169c55","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        :param params: parameters to cinder command"},{"line_number":156,"context_line":"        :return: volume: dictionary with CLI output and volume ID"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        volume \u003d {\u0027created\u0027: \u0027\u0027, \u0027id\u0027: \u0027\u0027}"},{"line_number":159,"context_line":"        volume[\u0027created\u0027] \u003d self.cinder(\u0027create\u0027, params\u003dparams)"},{"line_number":160,"context_line":"        volume[\u0027id\u0027] \u003d self.get_volume_property(volume[\u0027created\u0027], \u0027id\u0027)"},{"line_number":161,"context_line":"        self.addCleanup(self.volume_delete, volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_fe3f1685","line":158,"in_reply_to":"3a50d1a3_a33d4e2c","updated":"2015-07-31 09:42:02.000000000","message":"+1","commit_id":"01b8f48fa42b62e946d76c831c5f3b96cd09a34a"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"bb8d0da1d3b751225b04ffcb59d069884d169c55","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        :return: volume: dictionary with CLI output and volume ID"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        volume \u003d {\u0027created\u0027: \u0027\u0027, \u0027id\u0027: \u0027\u0027}"},{"line_number":159,"context_line":"        volume[\u0027created\u0027] \u003d self.cinder(\u0027create\u0027, params\u003dparams)"},{"line_number":160,"context_line":"        volume[\u0027id\u0027] \u003d self.get_volume_property(volume[\u0027created\u0027], \u0027id\u0027)"},{"line_number":161,"context_line":"        self.addCleanup(self.volume_delete, volume[\u0027id\u0027])"},{"line_number":162,"context_line":"        self.wait_for_volume_status(volume[\u0027id\u0027], \u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_5e072ac9","line":159,"updated":"2015-07-31 09:42:02.000000000","message":"What will be returned from self.cinder(\u0027create\u0027, params\u003dparams)? Do we really need to introduce new structure for volume?","commit_id":"01b8f48fa42b62e946d76c831c5f3b96cd09a34a"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"bb8d0da1d3b751225b04ffcb59d069884d169c55","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        return volume"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def volume_delete(self, volume_id):"},{"line_number":166,"context_line":"        \"\"\"Delete volume if it appears in volumes list."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        :param volume_id: uuid4 id of given volume"},{"line_number":169,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_bef8aec5","line":166,"updated":"2015-07-31 09:42:02.000000000","message":"The same as above","commit_id":"01b8f48fa42b62e946d76c831c5f3b96cd09a34a"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"3a5185c34a8e9990371b6f84bdc6039700b19439","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            if status in self.cinder(\u0027show\u0027, params\u003dvolume_id):"},{"line_number":122,"context_line":"                break"},{"line_number":123,"context_line":"        else:"},{"line_number":124,"context_line":"            self.fail(\"Volume %s did not reach status %s after %d s\""},{"line_number":125,"context_line":"                      % (volume_id, status, timeout))"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def check_volume_not_deleted(self, volume_id):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a50d1a3_be129cb2","line":124,"updated":"2015-08-03 11:59:22.000000000","message":"Please add s top \u0027.\u0027in the end and use seconds instead of s.","commit_id":"31c14f15a53d001acbb023356e7fe6d624e487fd"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"3a5185c34a8e9990371b6f84bdc6039700b19439","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        :return prop: value of desired property"},{"line_number":179,"context_line":"        \"\"\""},{"line_number":180,"context_line":"        volume \u003d self.parser.listing(output)"},{"line_number":181,"context_line":"        prop \u003d str(next(prop[\u0027Value\u0027] for prop in volume"},{"line_number":182,"context_line":"                        if prop[\u0027Property\u0027] \u003d\u003d property_name))"},{"line_number":183,"context_line":"        return prop"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a50d1a3_5e7a7825","line":181,"updated":"2015-08-03 11:59:22.000000000","message":"Please use six.text_type instead of str","commit_id":"31c14f15a53d001acbb023356e7fe6d624e487fd"}],"cinderclient/tests/functional/test_cli.py":[{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"263f630183b25a9221db93c6919b9ba4389511e4","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"def volume_id_from_cli_create(output):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    \"\"\"Scrape the volume id out of the \u0027volume create\u0027 command\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    for line in output.split(\"\\n\"):"},{"line_number":24,"context_line":"        fields \u003d line.split()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_497f2415","line":21,"updated":"2015-07-01 17:50:35.000000000","message":"We need to add \u0027.\u0027 at the end of doc strings.","commit_id":"fe8fa55ca177b187d0f2b7d6926ea77676499662"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"263f630183b25a9221db93c6919b9ba4389511e4","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def match_uuid(uuid):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    \"\"\"Check UUID match to regexp\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    check \u003d re.compile(\u0027[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]\u0027"},{"line_number":35,"context_line":"                       \u0027{4}-[0-9a-f]{12}\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_697c681f","line":32,"updated":"2015-07-01 17:50:35.000000000","message":"We need to add \u0027.\u0027 at the end of doc strings.","commit_id":"fe8fa55ca177b187d0f2b7d6926ea77676499662"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"263f630183b25a9221db93c6919b9ba4389511e4","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    \"\"\"Basic test for cinder client."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    Check of base cinder commands."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    \"\"\""},{"line_number":45,"context_line":"    def test_volume_create_delete_id(self):"},{"line_number":46,"context_line":"        \"\"\"Creates and deletes volume by ID\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_89976c39","line":43,"updated":"2015-07-01 17:50:35.000000000","message":"please do not use  blank lines in the end of doc strings.","commit_id":"fe8fa55ca177b187d0f2b7d6926ea77676499662"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"263f630183b25a9221db93c6919b9ba4389511e4","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    \"\"\""},{"line_number":45,"context_line":"    def test_volume_create_delete_id(self):"},{"line_number":46,"context_line":"        \"\"\"Creates and deletes volume by ID\"\"\""},{"line_number":47,"context_line":"        volume_create \u003d self.cinder(\u0027create\u0027, params\u003d\u00271\u0027)"},{"line_number":48,"context_line":"        volume_id \u003d volume_id_from_cli_create(volume_create)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_09759c30","line":46,"updated":"2015-07-01 17:50:35.000000000","message":"We need to add \u0027.\u0027 at the end of doc strings.","commit_id":"fe8fa55ca177b187d0f2b7d6926ea77676499662"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"2079d57da9be86b54c7dd566affc5bf531eae00b","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self.assertRows(volume_create)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        self.cinder(\u0027delete\u0027, params\u003dstr(volume_id))"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def test_volume_create_delete_name(self):"},{"line_number":60,"context_line":"        \"\"\"Creates and deletes volume by Name\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_332eac43","line":57,"updated":"2015-07-02 09:18:01.000000000","message":"Why don\u0027t you check that volume is actually was deleted? You just sent \u0027delete\u0027 request, but didn\u0027t do any checks after that. Also you don\u0027t have a tearDown / cleanaup methods, so if test fails, all volumes still be exist.","commit_id":"fe8fa55ca177b187d0f2b7d6926ea77676499662"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"263f630183b25a9221db93c6919b9ba4389511e4","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        self.cinder(\u0027delete\u0027, params\u003dstr(volume_id))"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def test_volume_create_delete_name(self):"},{"line_number":60,"context_line":"        \"\"\"Creates and deletes volume by Name\"\"\""},{"line_number":61,"context_line":"        volume_create \u003d self.cinder(\u0027create\u0027,"},{"line_number":62,"context_line":"                                    params\u003d\u00271 --name TestVolumeNamedCreate\u0027)"},{"line_number":63,"context_line":"        self.assertTableHeaders(volume_create, [\u0027Property\u0027, \u0027Value\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_2972e049","line":60,"updated":"2015-07-01 17:50:35.000000000","message":"We need to add \u0027.\u0027 at the end of doc strings.","commit_id":"fe8fa55ca177b187d0f2b7d6926ea77676499662"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"263f630183b25a9221db93c6919b9ba4389511e4","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.cinder(\u0027delete\u0027, params\u003d\u0027TestVolumeNamedCreate\u0027)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def test_volume_show(self):"},{"line_number":72,"context_line":"        \"\"\"Shows volume details\"\"\""},{"line_number":73,"context_line":"        self.cinder(\u0027create\u0027, params\u003d\u00271 --name TestVolumeShow\u0027)"},{"line_number":74,"context_line":"        time.sleep(10)"},{"line_number":75,"context_line":"        volume_show \u003d self.cinder(\u0027show\u0027, params\u003d\u0027TestVolumeShow\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_c991f448","line":72,"updated":"2015-07-01 17:50:35.000000000","message":"We need to add \u0027.\u0027 at the end of doc strings.","commit_id":"fe8fa55ca177b187d0f2b7d6926ea77676499662"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"263f630183b25a9221db93c6919b9ba4389511e4","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    def test_volume_show(self):"},{"line_number":72,"context_line":"        \"\"\"Shows volume details\"\"\""},{"line_number":73,"context_line":"        self.cinder(\u0027create\u0027, params\u003d\u00271 --name TestVolumeShow\u0027)"},{"line_number":74,"context_line":"        time.sleep(10)"},{"line_number":75,"context_line":"        volume_show \u003d self.cinder(\u0027show\u0027, params\u003d\u0027TestVolumeShow\u0027)"},{"line_number":76,"context_line":"        self.assertTableHeaders(volume_show, [\u0027Property\u0027, \u0027Value\u0027])"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_695ea845","line":74,"updated":"2015-07-01 17:50:35.000000000","message":"Let\u0027s not use sleep(10) it automated tests, we need to avoid it. Could you please add some while loop which will wait required status of the resource?","commit_id":"fe8fa55ca177b187d0f2b7d6926ea77676499662"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"270f7d51d1c32c9eb8f1c5c65648f5e670043a5e","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import re"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def volume_id_from_cli_create(output):"},{"line_number":19,"context_line":"    \"\"\"Scrape the volume id out of the \u0027cinder create\u0027 command.\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    for line in output.split(\"\\n\"):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_df106902","line":18,"updated":"2015-07-03 11:31:42.000000000","message":"Why do you define this methods here? You already have base file.\nAlso you use the same way for getting volume status, let\u0027t do not duplicate code.","commit_id":"d3847e6469e94239f786afafb135b1f7d93e414f"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"d60dbc933d7e07a2cf3d1f1d02ead51afe0c3997","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        self.volume_delete(volume_id)"},{"line_number":53,"context_line":"        self.checkVolumeDeleted(volume_id)"},{"line_number":54,"context_line":"        self.addCleanup(self.volume_delete, volume_id)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def test_volume_create_delete_name(self):"},{"line_number":57,"context_line":"        \"\"\"Creates and deletes volume by Name.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_3facf58a","line":54,"updated":"2015-07-03 11:38:12.000000000","message":"I suggest to move addCleanup after volume_id_from_cli_create(volume_create), otherwise if test fails in one of asserts, addCleanup won\u0027t be called","commit_id":"d3847e6469e94239f786afafb135b1f7d93e414f"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"9b3285940dfc1cae7466092c01932b1308b6f70d","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        \"\"\"Creates and deletes volume by ID.\"\"\""},{"line_number":24,"context_line":"        volume_create \u003d self.cinder(\u0027create\u0027, params\u003d\u00271\u0027)"},{"line_number":25,"context_line":"        volume_id \u003d self.volume_id_from_cli_create(volume_create)"},{"line_number":26,"context_line":"        self.addCleanup(self.volume_delete, volume_id)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        self.assertTrue(self.match_uuid(volume_id))"},{"line_number":29,"context_line":"        self.assertTableHeaders(volume_create, [\u0027Property\u0027, \u0027Value\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_0a9b8aca","line":26,"updated":"2015-07-07 11:02:46.000000000","message":"Could we make clean up in base class if needed  to avoid code duplication","commit_id":"4dab4995c7aaa5dccf790ab144fb9d11731247f2"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"9b3285940dfc1cae7466092c01932b1308b6f70d","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.addCleanup(self.volume_delete, volume_id)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        self.assertTrue(self.match_uuid(volume_id))"},{"line_number":29,"context_line":"        self.assertTableHeaders(volume_create, [\u0027Property\u0027, \u0027Value\u0027])"},{"line_number":30,"context_line":"        self.assertIn(volume_id, volume_create)"},{"line_number":31,"context_line":"        self.assert_rows(volume_create)"},{"line_number":32,"context_line":"        self.wait_for_volume_status(volume_id, \u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_ca57e2c8","line":29,"updated":"2015-07-07 11:02:46.000000000","message":"I think assertTableHeaders is redundant here. if operation succeed, it is always return  \u0027Property\u0027, \u0027Value\u0027","commit_id":"4dab4995c7aaa5dccf790ab144fb9d11731247f2"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"4f9df230603df913e22dd327d96846a8ea374b9a","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.wait_for_volume_status(volume[\u0027id\u0027], \u0027available\u0027)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        volume_show \u003d self.cinder(\u0027show\u0027, params\u003d\u0027TestVolumeShow\u0027)"},{"line_number":44,"context_line":"        self.assertTrue(self.get_volume_property(volume_show, \u0027name\u0027)"},{"line_number":45,"context_line":"                        \u003d\u003d \u0027TestVolumeShow\u0027)"},{"line_number":46,"context_line":"        self.assert_rows(volume_show)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_947f42aa","line":44,"updated":"2015-07-09 10:09:53.000000000","message":"We can use assertEqual here","commit_id":"f46a674f1667b176b64006ad657b19b1d81baa60"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"1ac47fa1bab010f44b9284aa17e88c85bdcc8db8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        \"\"\"Creates and deletes volume by ID.\"\"\""},{"line_number":24,"context_line":"        volume \u003d self.volume_create(params\u003d\u00271\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"        self.wait_for_volume_status(volume[\u0027id\u0027], \u0027available\u0027)"},{"line_number":27,"context_line":"        self.volume_delete(volume[\u0027id\u0027])"},{"line_number":28,"context_line":"        self.check_volume_deleted(volume[\u0027id\u0027])"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_3802af73","line":26,"updated":"2015-07-10 10:11:53.000000000","message":"waiting for volume creation is better in volume_crate method to avoid code duplication.","commit_id":"3e55b0c8fe8f1e6b03d75e7eeb09f565d621f2d9"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"f56aad7c0bdf630c1fe77c6129eb21de13fd89ef","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    def test_volume_create_delete_id(self):"},{"line_number":24,"context_line":"        \"\"\"Creates and deletes volume by ID.\"\"\""},{"line_number":25,"context_line":"        volume \u003d self.volume_create(params\u003d\u00271\u0027)"},{"line_number":26,"context_line":"        uuid.UUID(volume[\u0027id\u0027])"},{"line_number":27,"context_line":"        self.volume_delete(volume[\u0027id\u0027])"},{"line_number":28,"context_line":"        self.check_volume_deleted(volume[\u0027id\u0027])"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_e1120b09","line":26,"updated":"2015-07-13 21:31:55.000000000","message":"Do we really need it here?","commit_id":"1dba24abc94708c29ad29da351010651cda59ff7"}]}
