)]}'
{"tempest/api/compute/admin/test_servers.py":[{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"c893db78696d34e599871c100a0a77f670e3fd4c","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":64,"context_line":"    def test_sever_detail_and_show_with_extension(self):"},{"line_number":65,"context_line":"        # Specify a keypair while creating a server"},{"line_number":66,"context_line":"        resp, server \u003d self.non_adm_client.get_server(self.s1_id)"},{"line_number":67,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":68,"context_line":"        # verify the server show extensions"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BhIY%3D","line":65,"updated":"2013-11-25 08:43:59.000000000","message":"I guess the comment is copied form the \u0027test_create_specify_keypair\u0027 test case, and it is irrelevant here.","commit_id":"ec601c8378751ea1f58b98a577a147a1f2b58dea"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"77a38d6d6b0576dd0f8d90943e30a39f7678215f","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":64,"context_line":"    def test_sever_detail_and_show_with_extension(self):"},{"line_number":65,"context_line":"        # Specify a keypair while creating a server"},{"line_number":66,"context_line":"        resp, server \u003d self.non_adm_client.get_server(self.s1_id)"},{"line_number":67,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":68,"context_line":"        # verify the server show extensions"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BhFo%3D","line":65,"in_reply_to":"AAAATn%2F%2BhIY%3D","updated":"2013-11-25 08:52:26.000000000","message":"oh, sorry. will clean up","commit_id":"ec601c8378751ea1f58b98a577a147a1f2b58dea"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"3763f521e87282fffe6c7312104fca427c644b46","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        return flavor_id"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":64,"context_line":"    def test_sever_detail_and_show_with_extension(self):"},{"line_number":65,"context_line":"        resp, server \u003d self.non_adm_client.get_server(self.s1_id)"},{"line_number":66,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":67,"context_line":"        # verify the server show extensions"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BcNc%3D","line":64,"updated":"2013-11-26 02:53:49.000000000","message":"Typo - test_server_detail....","commit_id":"1fc8b9a76a75af5cce9aa350c3f18b586f8a8259"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"2fc83003c1d4e5c99eea9cd1d3c8708949c570a4","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        return flavor_id"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @attr(type\u003d\u0027gate\u0027)"},{"line_number":64,"context_line":"    def test_sever_detail_and_show_with_extension(self):"},{"line_number":65,"context_line":"        resp, server \u003d self.non_adm_client.get_server(self.s1_id)"},{"line_number":66,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":67,"context_line":"        # verify the server show extensions"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BAa4%3D","line":64,"in_reply_to":"AAAATn%2F%2BcNc%3D","updated":"2013-12-03 15:16:42.000000000","message":"done. sorry repley late","commit_id":"1fc8b9a76a75af5cce9aa350c3f18b586f8a8259"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"3763f521e87282fffe6c7312104fca427c644b46","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        for status in [\u0027OS-EXT-STS:task_state\u0027,"},{"line_number":97,"context_line":"                       \u0027OS-EXT-STS:vm_state\u0027,"},{"line_number":98,"context_line":"                       \u0027OS-EXT-STS:power_state\u0027]:"},{"line_number":99,"context_line":"            self.assertIn(status, body[\u0027servers\u0027][0])"},{"line_number":100,"context_line":"        # extension: extended_volume(need attach a volume)"},{"line_number":101,"context_line":"        # verify these extensions require admin role"},{"line_number":102,"context_line":"        resp, server \u003d self.client.get_server(self.s1_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BcD8%3D","line":99,"updated":"2013-11-26 02:53:49.000000000","message":"This is repeated: I suggest making it into either a helper function or better a matcher.","commit_id":"1fc8b9a76a75af5cce9aa350c3f18b586f8a8259"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"2fc83003c1d4e5c99eea9cd1d3c8708949c570a4","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        for status in [\u0027OS-EXT-STS:task_state\u0027,"},{"line_number":97,"context_line":"                       \u0027OS-EXT-STS:vm_state\u0027,"},{"line_number":98,"context_line":"                       \u0027OS-EXT-STS:power_state\u0027]:"},{"line_number":99,"context_line":"            self.assertIn(status, body[\u0027servers\u0027][0])"},{"line_number":100,"context_line":"        # extension: extended_volume(need attach a volume)"},{"line_number":101,"context_line":"        # verify these extensions require admin role"},{"line_number":102,"context_line":"        resp, server \u003d self.client.get_server(self.s1_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BAas%3D","line":99,"in_reply_to":"AAAATn%2F%2BcD8%3D","updated":"2013-12-03 15:16:42.000000000","message":"done","commit_id":"1fc8b9a76a75af5cce9aa350c3f18b586f8a8259"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"2e15ce73168dd8c217b2cd589503f08308c02f41","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        status \u003d [\u0027OS-EXT-STS:task_state\u0027,"},{"line_number":96,"context_line":"                  \u0027OS-EXT-STS:vm_state\u0027,"},{"line_number":97,"context_line":"                  \u0027OS-EXT-STS:power_state\u0027]"},{"line_number":98,"context_line":"        self.assertTrue(set(status) \u003c set(body[\u0027servers\u0027][0].keys()))"},{"line_number":99,"context_line":"        # extension: extended_volume(need attach a volume)"},{"line_number":100,"context_line":"        # verify these extensions require admin role"},{"line_number":101,"context_line":"        resp, server \u003d self.client.get_server(self.s1_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F99ls%3D","line":98,"updated":"2013-12-03 23:42:02.000000000","message":"This worries me - I suspect it will not be at all clear when it fails.\n\nCould you deliberately make it fail and paste the output?\n\nI suggested a helper function or a matcher to preserve your behaviour and output but reduce code duplication.\n\ne.g. - as a helper.\n\ndef assertSubset(self, needles, haystack):\n    for needle in needles:\n        self.assertIn(needle, haystack)","commit_id":"47a51c061403edf3a25d18e46d95e2506fe4c999"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"40df21f9e835a865d026850ca480a4b3cd3f0c4f","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        status \u003d [\u0027OS-EXT-STS:task_state\u0027,"},{"line_number":96,"context_line":"                  \u0027OS-EXT-STS:vm_state\u0027,"},{"line_number":97,"context_line":"                  \u0027OS-EXT-STS:power_state\u0027]"},{"line_number":98,"context_line":"        self.assertTrue(set(status) \u003c set(body[\u0027servers\u0027][0].keys()))"},{"line_number":99,"context_line":"        # extension: extended_volume(need attach a volume)"},{"line_number":100,"context_line":"        # verify these extensions require admin role"},{"line_number":101,"context_line":"        resp, server \u003d self.client.get_server(self.s1_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F99Dc%3D","line":98,"in_reply_to":"AAAATn%2F99ls%3D","updated":"2013-12-04 02:37:42.000000000","message":"oh, there is little thought for the output when it fails. \nwhen it fails, the output is just : \"AssertionError: False is not true\"\nThank you for your suggestions, I will use the helper function.","commit_id":"47a51c061403edf3a25d18e46d95e2506fe4c999"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"993cd3010667ffcb42e49317d645d8e647e31f2f","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        # extension: config_drive"},{"line_number":76,"context_line":"        self.assertIn(\u0027config_drive\u0027, server)"},{"line_number":77,"context_line":"        # extension: extended_availability_zone"},{"line_number":78,"context_line":"        self.assertIn(\u0027OS-EXT-AZ:availability_zone\u0027, server)"},{"line_number":79,"context_line":"        # extension: extend_status"},{"line_number":80,"context_line":"        status \u003d [\u0027OS-EXT-STS:task_state\u0027, \u0027OS-EXT-STS:vm_state\u0027,"},{"line_number":81,"context_line":"                  \u0027OS-EXT-STS:power_state\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9vhY%3D","line":78,"updated":"2013-12-06 14:18:24.000000000","message":"Here also could use _assertSubset() \n extensions \u003d [\u0027..\u0027, \u0027..\u0027] \n self._assertSubset(extensions, server)","commit_id":"fa173350260df5e8f595a00020e729a9018edd7d"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"993cd3010667ffcb42e49317d645d8e647e31f2f","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        # extension: extend_status"},{"line_number":102,"context_line":"        status \u003d [\u0027OS-EXT-STS:task_state\u0027,"},{"line_number":103,"context_line":"                  \u0027OS-EXT-STS:vm_state\u0027,"},{"line_number":104,"context_line":"                  \u0027OS-EXT-STS:power_state\u0027]"},{"line_number":105,"context_line":"        self._assertSubset(status, body[\u0027servers\u0027][0])"},{"line_number":106,"context_line":"        # extension: extended_volume(need attach a volume)"},{"line_number":107,"context_line":"        # verify these extensions require admin role"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9vi0%3D","line":104,"updated":"2013-12-06 14:18:24.000000000","message":"status is defined twice","commit_id":"fa173350260df5e8f595a00020e729a9018edd7d"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"993cd3010667ffcb42e49317d645d8e647e31f2f","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        # extension: extended_server_attributes"},{"line_number":119,"context_line":"        attrs \u003d [\u0027OS-EXT-SRV-ATTR:hypervisor_hostname\u0027,"},{"line_number":120,"context_line":"                 \u0027OS-EXT-SRV-ATTR:instance_name\u0027,"},{"line_number":121,"context_line":"                 \u0027OS-EXT-SRV-ATTR:host\u0027]"},{"line_number":122,"context_line":"        self._assertSubset(attrs, body[\u0027servers\u0027][0])"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    @attr(type\u003d\u0027gate\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9viQ%3D","line":121,"updated":"2013-12-06 14:18:24.000000000","message":"attrs is defined four times.","commit_id":"fa173350260df5e8f595a00020e729a9018edd7d"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"15924aa0f46d94e39adc9143fcdb90b7b516c92d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":71,"context_line":"        # verify the server show extensions"},{"line_number":72,"context_line":"        # extension: config_drive"},{"line_number":73,"context_line":"        self.assertIn(\u0027config_drive\u0027, server)"},{"line_number":74,"context_line":"        # extension: extended_availability_zone"},{"line_number":75,"context_line":"        self.assertIn(\u0027OS-EXT-AZ:availability_zone\u0027, server)"},{"line_number":76,"context_line":"        # extension: extend_status"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2B92k%3D","line":73,"updated":"2014-01-20 10:06:46.000000000","message":"So I think you need to take into account the value of the nova api_extensions  config value (in compute-feature-enabled) to see if the relevant extension is actually enabled.","commit_id":"1e1755a0eebec27c6fb95ab4bfd9defc8cece49b"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"8ef143fb299a6eb493f3188a2e2f94569899dd60","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                 \u0027OS-EXT-SRV-ATTR:instance_name\u0027,"},{"line_number":83,"context_line":"                 \u0027OS-EXT-SRV-ATTR:host\u0027]"},{"line_number":84,"context_line":"        if test.is_extension_enabled(\"OS-EXT-SRV-ATTR\", \"compute\"):"},{"line_number":85,"context_line":"            self._assertNotSubset(attrs, server)"},{"line_number":86,"context_line":"        params \u003d {\u0027name\u0027: self.s1_name}"},{"line_number":87,"context_line":"        resp, body \u003d self.non_admin_client.list_servers_with_detail(params)"},{"line_number":88,"context_line":"        self.assertEqual(200, resp.status)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2FlhA%3D","line":85,"updated":"2014-02-12 07:22:19.000000000","message":"It would be better to create a helper function for line 68~85, and add a flag for role. Reuse it for both admin/non admin checking. This can also check other extensions for admin role.","commit_id":"37378ac652145dd8d5acc6cf0634a1a0d8c6d0e0"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"8ef143fb299a6eb493f3188a2e2f94569899dd60","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        # extension: OS-EXT-STS"},{"line_number":100,"context_line":"        if test.is_extension_enabled(\"OS-EXT-STS\", \"compute\"):"},{"line_number":101,"context_line":"            self._assertSubset(status, body[\u0027servers\u0027][0])"},{"line_number":102,"context_line":"        # extension: extended_volume(need attach a volume)"},{"line_number":103,"context_line":"        # verify these extensions require admin role"},{"line_number":104,"context_line":"        resp, server \u003d self.client.get_server(self.s1_id)"},{"line_number":105,"context_line":"        self.assertEqual(200, resp.status)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2Fles%3D","line":102,"updated":"2014-02-12 07:22:19.000000000","message":"will add tests for extended_volume?","commit_id":"37378ac652145dd8d5acc6cf0634a1a0d8c6d0e0"}],"tempest/api/compute/v3/admin/test_servers.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"1ea206591ba14e588c53ae622f6a75ad7a44c093","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":68,"context_line":"        # verify the server show extensions"},{"line_number":69,"context_line":"        # extension: os-config-drive"},{"line_number":70,"context_line":"        if test.is_extension_enabled(\"os-config-drive\", \"compute_v3\"):"},{"line_number":71,"context_line":"            self.assertIn(\u0027os-config-drive:config_drive\u0027, server)"},{"line_number":72,"context_line":"        # extension: os-extended-availability-zone"},{"line_number":73,"context_line":"        if test.is_extension_enabled(\"os-extended-availability-zone\","}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUX%2F%2FDjI%3D","line":70,"updated":"2014-02-17 12:15:29.000000000","message":"os-config-drive is being removed from the V3 API and is instead part of the core servers so there will no longer be a need to test for the extension explicitly\n\nhttps://review.openstack.org/#/c/73894/","commit_id":"37378ac652145dd8d5acc6cf0634a1a0d8c6d0e0"}]}
