)]}'
{"tempest/api/volume/base.py":[{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"f5a7aa2a195352c15e6ad5a889e152b8edc6aea5","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        cls.volumes_client \u003d os.volumes_client"},{"line_number":53,"context_line":"        cls.snapshots_client \u003d os.snapshots_client"},{"line_number":54,"context_line":"        cls.servers_client \u003d os.servers_client"},{"line_number":55,"context_line":"        cls.volumes_extension_client \u003d os.volumes_extension_client"},{"line_number":56,"context_line":"        cls.image_ref \u003d cls.config.compute.image_ref"},{"line_number":57,"context_line":"        cls.flavor_ref \u003d cls.config.compute.flavor_ref"},{"line_number":58,"context_line":"        cls.build_interval \u003d cls.config.volume.build_interval"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FqkU%3D","line":55,"updated":"2013-10-30 17:25:00.000000000","message":"I\u0027d call this extensions_client to keep it consistent with the general naming choice here","commit_id":"c4450cd317d86d7ee570aca15737a1eed0363fcf"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"f0453bf790116546eb9e28dc8a72beeb783515af","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        cls.volumes_client \u003d os.volumes_client"},{"line_number":53,"context_line":"        cls.snapshots_client \u003d os.snapshots_client"},{"line_number":54,"context_line":"        cls.servers_client \u003d os.servers_client"},{"line_number":55,"context_line":"        cls.volumes_extension_client \u003d os.volumes_extension_client"},{"line_number":56,"context_line":"        cls.image_ref \u003d cls.config.compute.image_ref"},{"line_number":57,"context_line":"        cls.flavor_ref \u003d cls.config.compute.flavor_ref"},{"line_number":58,"context_line":"        cls.build_interval \u003d cls.config.volume.build_interval"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2Bdhk%3D","line":55,"in_reply_to":"AAAATn%2F%2FqkU%3D","updated":"2013-11-27 15:47:44.000000000","message":"I honestly would rather keep it the same here to ensure the name is the same. volumes_extensions_client right now overlaps with the nova volumes extension client class. I will push out a patch that will clarify the naming on top of this because I feel that kind of fix up is outside the scope of this change.","commit_id":"c4450cd317d86d7ee570aca15737a1eed0363fcf"}],"tempest/api/volume/test_extensions.py":[{"author":{"_account_id":6983,"name":"YangLei","email":"iamhappg@aliyun.com","username":"YangLei"},"change_message_id":"bf17f032f7eeef3aac767efb1674da5df01a6ec4","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        # List of all extensions"},{"line_number":29,"context_line":"        resp, extensions \u003d self.volumes_extension_client.list_extensions()"},{"line_number":30,"context_line":"        self.assertIn(\"extensions\", extensions)"},{"line_number":31,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class ExtensionsTestXML(ExtensionsTestJSON):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FtNY%3D","line":31,"updated":"2013-10-30 07:08:07.000000000","message":"We had better to change the order of line 30 and line 31.","commit_id":"76e70980e8dab15fc4bc9f6ce492dcc55fc29cc5"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"e5f86ccb15df9035380908d6dadc578fcb3b34da","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        # List of all extensions"},{"line_number":29,"context_line":"        resp, extensions \u003d self.volumes_extension_client.list_extensions()"},{"line_number":30,"context_line":"        self.assertIn(\"extensions\", extensions)"},{"line_number":31,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class ExtensionsTestXML(ExtensionsTestJSON):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FrEs%3D","line":31,"in_reply_to":"AAAATn%2F%2FtNY%3D","updated":"2013-10-30 15:44:22.000000000","message":"Done. Although it doesn\u0027t really make a difference the test would fail in either case, but it makes more sense flipped.","commit_id":"76e70980e8dab15fc4bc9f6ce492dcc55fc29cc5"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"f5a7aa2a195352c15e6ad5a889e152b8edc6aea5","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        # List of all extensions"},{"line_number":29,"context_line":"        resp, extensions \u003d self.volumes_extension_client.list_extensions()"},{"line_number":30,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":31,"context_line":"        self.assertIn(\"extensions\", extensions)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class ExtensionsTestXML(ExtensionsTestJSON):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FqjA%3D","line":31,"updated":"2013-10-30 17:25:00.000000000","message":"this won\u0027t work if you decide to update the extension services too, see my other comments; you could assert that every extension has a name in that case though","commit_id":"c4450cd317d86d7ee570aca15737a1eed0363fcf"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"f0453bf790116546eb9e28dc8a72beeb783515af","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        # List of all extensions"},{"line_number":29,"context_line":"        resp, extensions \u003d self.volumes_extension_client.list_extensions()"},{"line_number":30,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":31,"context_line":"        self.assertIn(\"extensions\", extensions)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class ExtensionsTestXML(ExtensionsTestJSON):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2Bdeg%3D","line":31,"in_reply_to":"AAAATn%2F%2FqjA%3D","updated":"2013-11-27 15:47:44.000000000","message":"Done. This was just a copy of what the nova extension client testing was, I\u0027ll push out another patch to clean up the nova case too.","commit_id":"c4450cd317d86d7ee570aca15737a1eed0363fcf"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"b6673ff471c3653d8c90abbcbb8807ac2d4c3614","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        if ext \u003d\u003d \u0027all\u0027:"},{"line_number":35,"context_line":"            self.assertIn(\u0027Hosts\u0027, map(lambda x: x[\u0027name\u0027], extensions))"},{"line_number":36,"context_line":"        elif ext:"},{"line_number":37,"context_line":"            self.assertIn(ext, map(lambda x: x[\u0027name\u0027], extensions))"},{"line_number":38,"context_line":"        else:"},{"line_number":39,"context_line":"            raise self.skipException(\u0027There are not any extensions configured\u0027)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F88eU%3D","line":37,"updated":"2013-12-18 14:26:36.000000000","message":"Just the first[0] extension tested.","commit_id":"2324e6bf3c333259a6787694c912a9b7b557e287"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"a0c3189e7f2b9c1b3584beaa08920fd018f5e4f6","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        if ext \u003d\u003d \u0027all\u0027:"},{"line_number":35,"context_line":"            self.assertIn(\u0027Hosts\u0027, map(lambda x: x[\u0027name\u0027], extensions))"},{"line_number":36,"context_line":"        elif ext:"},{"line_number":37,"context_line":"            self.assertIn(ext, map(lambda x: x[\u0027name\u0027], extensions))"},{"line_number":38,"context_line":"        else:"},{"line_number":39,"context_line":"            raise self.skipException(\u0027There are not any extensions configured\u0027)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F88JA%3D","line":37,"in_reply_to":"AAAATn%2F88eU%3D","updated":"2013-12-18 15:20:17.000000000","message":"Actually no that\u0027s not the case. The first extension listed in the config file is what we\u0027re checking for here, but there is no guarantee that the first extension in the api response will be the one we\u0027re looking for. You can put extensions in any order in the config file.","commit_id":"2324e6bf3c333259a6787694c912a9b7b557e287"}],"tempest/services/volume/json/extensions_client.py":[{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"1cd81f017446a91ea778972e37756924d417858c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":7,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FtvI%3D","line":4,"updated":"2013-10-30 02:54:47.000000000","message":"a little confuse abot this. copyright should be same to test_extensions.py.","commit_id":"76e70980e8dab15fc4bc9f6ce492dcc55fc29cc5"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"e5f86ccb15df9035380908d6dadc578fcb3b34da","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":7,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FrWI%3D","line":4,"in_reply_to":"AAAATn%2F%2FtvI%3D","updated":"2013-10-30 15:44:22.000000000","message":"You\u0027re assuming that I wrote this code, but it is just a copy of the equivalent client code from nova. The only change I made was to switch the endpoint to point to cinder instead of nova.","commit_id":"76e70980e8dab15fc4bc9f6ce492dcc55fc29cc5"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"f5a7aa2a195352c15e6ad5a889e152b8edc6aea5","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        url \u003d \u0027extensions\u0027"},{"line_number":32,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":33,"context_line":"        body \u003d json.loads(body)"},{"line_number":34,"context_line":"        return resp, body"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def is_enabled(self, extension):"},{"line_number":37,"context_line":"        _, extensions \u003d self.list_extensions()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2Fqjs%3D","line":34,"updated":"2013-10-30 17:25:00.000000000","message":"for consistency, I think this should be \"return resp, body[\u0027extensions\u0027]\"","commit_id":"c4450cd317d86d7ee570aca15737a1eed0363fcf"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"f0453bf790116546eb9e28dc8a72beeb783515af","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        url \u003d \u0027extensions\u0027"},{"line_number":32,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":33,"context_line":"        body \u003d json.loads(body)"},{"line_number":34,"context_line":"        return resp, body"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def is_enabled(self, extension):"},{"line_number":37,"context_line":"        _, extensions \u003d self.list_extensions()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BdeU%3D","line":34,"in_reply_to":"AAAATn%2F%2Fqjs%3D","updated":"2013-11-27 15:47:44.000000000","message":"Done","commit_id":"c4450cd317d86d7ee570aca15737a1eed0363fcf"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"7b74e83801422cbcb1dfa3c4516ad721db9dba56","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        body \u003d json.loads(body)"},{"line_number":34,"context_line":"        return resp, body[\u0027extensions\u0027]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def is_enabled(self, extension):"},{"line_number":37,"context_line":"        _, extensions \u003d self.list_extensions()"},{"line_number":38,"context_line":"        exts \u003d extensions[\u0027extensions\u0027]"},{"line_number":39,"context_line":"        return any([e for e in exts if e[\u0027name\u0027] \u003d\u003d extension])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9rOg%3D","line":36,"updated":"2013-12-08 14:59:10.000000000","message":"unused method?","commit_id":"b11f6646b7e761454cf844d834f44cec754d17e0"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"7543e40818fc9a03a93f249f9a2d3483255ad043","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        body \u003d json.loads(body)"},{"line_number":34,"context_line":"        return resp, body[\u0027extensions\u0027]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def is_enabled(self, extension):"},{"line_number":37,"context_line":"        _, extensions \u003d self.list_extensions()"},{"line_number":38,"context_line":"        exts \u003d extensions[\u0027extensions\u0027]"},{"line_number":39,"context_line":"        return any([e for e in exts if e[\u0027name\u0027] \u003d\u003d extension])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9Frw%3D","line":36,"in_reply_to":"AAAATn%2F9rOg%3D","updated":"2013-12-16 22:03:32.000000000","message":"It was just a copy of the dual for the compute extensions client. But, I pulled it out.","commit_id":"b11f6646b7e761454cf844d834f44cec754d17e0"}],"tempest/services/volume/xml/extensions_client.py":[{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"5b8bb7fd7233312d2d09978b3d30045a17728878","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":7,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FtuQ%3D","line":4,"updated":"2013-10-30 02:57:11.000000000","message":"copyright should be same to test_extensions.py","commit_id":"76e70980e8dab15fc4bc9f6ce492dcc55fc29cc5"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"e5f86ccb15df9035380908d6dadc578fcb3b34da","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":7,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FrFA%3D","line":4,"in_reply_to":"AAAATn%2F%2FtuQ%3D","updated":"2013-10-30 15:44:22.000000000","message":"Same here","commit_id":"76e70980e8dab15fc4bc9f6ce492dcc55fc29cc5"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"f5a7aa2a195352c15e6ad5a889e152b8edc6aea5","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        url \u003d \u0027extensions\u0027"},{"line_number":38,"context_line":"        resp, body \u003d self.get(url, self.headers)"},{"line_number":39,"context_line":"        body \u003d self._parse_array(etree.fromstring(body))"},{"line_number":40,"context_line":"        return resp, {\u0027extensions\u0027: body}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def is_enabled(self, extension):"},{"line_number":43,"context_line":"        _, extensions \u003d self.list_extensions()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FqhY%3D","line":40,"updated":"2013-10-30 17:25:00.000000000","message":"to match the comment on the json service, this should be \"return resp, body\"","commit_id":"c4450cd317d86d7ee570aca15737a1eed0363fcf"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"f0453bf790116546eb9e28dc8a72beeb783515af","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        url \u003d \u0027extensions\u0027"},{"line_number":38,"context_line":"        resp, body \u003d self.get(url, self.headers)"},{"line_number":39,"context_line":"        body \u003d self._parse_array(etree.fromstring(body))"},{"line_number":40,"context_line":"        return resp, {\u0027extensions\u0027: body}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def is_enabled(self, extension):"},{"line_number":43,"context_line":"        _, extensions \u003d self.list_extensions()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BdeQ%3D","line":40,"in_reply_to":"AAAATn%2F%2FqhY%3D","updated":"2013-11-27 15:47:44.000000000","message":"Done","commit_id":"c4450cd317d86d7ee570aca15737a1eed0363fcf"}]}
