)]}'
{"tempest/api/compute/admin/test_aggregates.py":[{"author":{"_account_id":6983,"name":"YangLei","email":"iamhappg@aliyun.com","username":"YangLei"},"change_message_id":"5ba54ce87c84fdb079fd5cab27caf332472ed3b9","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":109,"context_line":"    def test_aggregate_create_invalid_aggregate_name(self):"},{"line_number":110,"context_line":"        # Create an aggregate with invalid name should raise exception."},{"line_number":111,"context_line":"        self.assertRaises(exceptions.BadRequest,"},{"line_number":112,"context_line":"                          self.client.create_aggregate,"},{"line_number":113,"context_line":"                          999)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2FP7c%3D","line":110,"updated":"2013-10-01 15:22:37.000000000","message":"It is a confusing docstring:\nDoes it mean:\nIt should raise exception, when we create an aggregate with invalid name.\nSame questions to the follow docstrings.","commit_id":"aa3822ab8f601212570527e35c9639bec273e326"},{"author":{"_account_id":8625,"name":"Anju Tiwari","username":"Anju5","inactive":true},"change_message_id":"7aaa50808813e34cd8c37b42580973c5bda46555","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        while True:"},{"line_number":328,"context_line":"            non_exist_host \u003d rand_name(\u0027nonexist_host_\u0027)"},{"line_number":329,"context_line":"            if non_exist_host not in hosts:"},{"line_number":330,"context_line":"                break"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        aggregate_name \u003d rand_name(self.aggregate_name_prefix)"},{"line_number":333,"context_line":"        resp, aggregate \u003d self.client.create_aggregate(aggregate_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAS3%2F%2FM2Y%3D","line":330,"updated":"2013-10-02 13:39:01.000000000","message":"Why we need to check here that a non_exist_host is in hosts?\nCan\u0027t we use directly  non_exist_host?","commit_id":"1575bb40be6c335de9219682ac5f8493ef5acbc5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f9ad20a9b6b7f379d15b8a38b2f248de2b162233","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        while True:"},{"line_number":328,"context_line":"            non_exist_host \u003d rand_name(\u0027nonexist_host_\u0027)"},{"line_number":329,"context_line":"            if non_exist_host not in hosts:"},{"line_number":330,"context_line":"                break"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        aggregate_name \u003d rand_name(self.aggregate_name_prefix)"},{"line_number":333,"context_line":"        resp, aggregate \u003d self.client.create_aggregate(aggregate_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAS3%2F%2FMWU%3D","line":330,"in_reply_to":"AAAAS3%2F%2FM2Y%3D","updated":"2013-10-02 15:51:14.000000000","message":"nice idea, Anju.\nThe other idea is that line325-330 are merged to one line \"non_exist_host \u003d uuid.uuid4()\".\n\nuuid.uuid4() is used for creating non_existent stuffs many places in Tempest.","commit_id":"1575bb40be6c335de9219682ac5f8493ef5acbc5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"22425b822d20303d862e53b4c3a76ad236c77a76","unresolved":false,"context_lines":[{"line_number":277,"context_line":"                          aggregate[\u0027id\u0027], self.host)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":280,"context_line":"    def test_aggregate_add_host_with_invalid_aggregate_id(self):"},{"line_number":281,"context_line":"        # Add an host to an aggregate with invalid id should raise exception."},{"line_number":282,"context_line":"        self.assertRaises(exceptions.NotFound, self.client.add_host, 999,"},{"line_number":283,"context_line":"                          self.host)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2FHLo%3D","line":280,"updated":"2013-10-04 06:25:13.000000000","message":"I guess this test case should be [..]_nonexistent_aggregate_id, because the exception is NotFound.\n\nThe following comment also should be fixed.","commit_id":"fabb7b4c0d1ce88482bca6daafeff2040a488807"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"22425b822d20303d862e53b4c3a76ad236c77a76","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                          aggregate[\u0027id\u0027], self.host)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":315,"context_line":"    def test_aggregate_remove_host_with_invalid_aggregate_id(self):"},{"line_number":316,"context_line":"        # Remove an host from an aggregate with invalid id should raise"},{"line_number":317,"context_line":"        # exception."},{"line_number":318,"context_line":"        self.assertRaises(exceptions.NotFound, self.client.remove_host, 999,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2FHLg%3D","line":315,"updated":"2013-10-04 06:25:13.000000000","message":"ditto","commit_id":"fabb7b4c0d1ce88482bca6daafeff2040a488807"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"063e5403c8af054790b9c2f7c1fb380e609e5b8a","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":280,"context_line":"    def test_aggregate_add_host_with_nonexistent_aggregate_id(self):"},{"line_number":281,"context_line":"        # Add an host to an aggregate with invalid id should raise exception."},{"line_number":282,"context_line":"        self.assertRaises(exceptions.NotFound, self.client.add_host, 999,"},{"line_number":283,"context_line":"                          self.host)"},{"line_number":284,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2FHBk%3D","line":281,"updated":"2013-10-04 08:08:20.000000000","message":"nit: s/invalid/nonexistent/","commit_id":"18257224014428507273530ecc9275d03aa4eef2"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"063e5403c8af054790b9c2f7c1fb380e609e5b8a","unresolved":false,"context_lines":[{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":315,"context_line":"    def test_aggregate_remove_host_with_nonexistent_aggregate_id(self):"},{"line_number":316,"context_line":"        # Remove an host from an aggregate with invalid id should raise"},{"line_number":317,"context_line":"        # exception."},{"line_number":318,"context_line":"        self.assertRaises(exceptions.NotFound, self.client.remove_host, 999,"},{"line_number":319,"context_line":"                          self.host)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2FHBg%3D","line":316,"updated":"2013-10-04 08:08:20.000000000","message":"ditto","commit_id":"18257224014428507273530ecc9275d03aa4eef2"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"e49cf2496eda854ddf04a457013e438efabb5dbf","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":287,"context_line":"    def test_aggregate_add_existent_host(self):"},{"line_number":288,"context_line":"        # Add an existent host to an aggreagte should raise exception."},{"line_number":289,"context_line":"        self.useFixture(fixtures.LockFixture(\u0027availability_zone\u0027))"},{"line_number":290,"context_line":"        aggregate_name \u003d rand_name(self.aggregate_name_prefix)"},{"line_number":291,"context_line":"        resp, aggregate \u003d self.client.create_aggregate(aggregate_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATH%2F%2F3hE%3D","line":288,"updated":"2013-10-08 18:33:14.000000000","message":"typo: aggreagte","commit_id":"e55035b84dd3c9dea8ef6a2572b65a90372f5591"},{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"17c05765ac12638cc5beb174d2256b043180021d","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":287,"context_line":"    def test_aggregate_add_existent_host(self):"},{"line_number":288,"context_line":"        # Add an existent host to an aggreagte should raise exception."},{"line_number":289,"context_line":"        self.useFixture(fixtures.LockFixture(\u0027availability_zone\u0027))"},{"line_number":290,"context_line":"        aggregate_name \u003d rand_name(self.aggregate_name_prefix)"},{"line_number":291,"context_line":"        resp, aggregate \u003d self.client.create_aggregate(aggregate_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATH%2F%2F2dE%3D","line":288,"in_reply_to":"AAAATH%2F%2F3hE%3D","updated":"2013-10-09 00:23:41.000000000","message":"Thanks Joe!","commit_id":"e55035b84dd3c9dea8ef6a2572b65a90372f5591"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"ceaef36a8de6638d460c446145809c1f33ae4dd8","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                          self.user_client.create_aggregate,"},{"line_number":105,"context_line":"                          aggregate_name)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":108,"context_line":"    def test_aggregate_create_aggregate_name_length_less_than_1(self):"},{"line_number":109,"context_line":"        # Create an aggregate with aggregate name length less than 1 should"},{"line_number":110,"context_line":"        # raise exception."}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATH%2F%2F2Nc%3D","line":107,"updated":"2013-10-09 01:54:29.000000000","message":"Suggest moving those negative tests to a independent file.","commit_id":"023a33209ca78e41f7380f2c9d44fe7dc88c8790"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"e5b267894f28bfdb0116ff00cbb88a234fe314e0","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                          self.user_client.create_aggregate,"},{"line_number":105,"context_line":"                          aggregate_name)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":108,"context_line":"    def test_aggregate_create_aggregate_name_length_less_than_1(self):"},{"line_number":109,"context_line":"        # Create an aggregate with aggregate name length less than 1 should"},{"line_number":110,"context_line":"        # raise exception."}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATH%2F%2Fhm4%3D","line":107,"in_reply_to":"AAAATH%2F%2F2LA%3D","updated":"2013-10-15 00:30:50.000000000","message":"Good point. Now the change (Ieb3fc3670bb9229c6791e5c8c0a7ac4fbde03c4d) of HACKING.rst requires an independent negative test file.","commit_id":"023a33209ca78e41f7380f2c9d44fe7dc88c8790"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"f1fde38ee0f0a3a6da863fff7afb99479363d2fb","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                          self.user_client.create_aggregate,"},{"line_number":105,"context_line":"                          aggregate_name)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":108,"context_line":"    def test_aggregate_create_aggregate_name_length_less_than_1(self):"},{"line_number":109,"context_line":"        # Create an aggregate with aggregate name length less than 1 should"},{"line_number":110,"context_line":"        # raise exception."}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATH%2F%2F2LA%3D","line":107,"in_reply_to":"AAAATH%2F%2F2Ls%3D","updated":"2013-10-09 02:21:44.000000000","message":"Well,it is good. What are other people\u0027s opinion?","commit_id":"023a33209ca78e41f7380f2c9d44fe7dc88c8790"},{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"46f5eac80c7cd5ea03cede2dd50d185327236f4f","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                          self.user_client.create_aggregate,"},{"line_number":105,"context_line":"                          aggregate_name)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":108,"context_line":"    def test_aggregate_create_aggregate_name_length_less_than_1(self):"},{"line_number":109,"context_line":"        # Create an aggregate with aggregate name length less than 1 should"},{"line_number":110,"context_line":"        # raise exception."}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATH%2F%2F2Ls%3D","line":107,"in_reply_to":"AAAATH%2F%2F2Nc%3D","updated":"2013-10-09 02:12:54.000000000","message":"Thanks wanghao! Very good point!\nI think I should summit a new patch to acheve this, right?","commit_id":"023a33209ca78e41f7380f2c9d44fe7dc88c8790"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a3e13907f9b1c7179ccc1ecf305f72c1e1755ffa","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from tempest.api.compute import base"},{"line_number":19,"context_line":"from tempest.common import tempest_fixtures as fixtures"},{"line_number":20,"context_line":"from tempest.common.utils.data_utils import rand_name"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATH%2F%2Fcyk%3D","side":"PARENT","line":17,"updated":"2013-10-16 01:16:36.000000000","message":"Why do you remove this blank line?","commit_id":"f55f4e54ceab7c6a4d330f92c8059e46233e3560"},{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"4f4198a01346e97f5cfcbdbb193d2d54c1520a5e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from tempest.api.compute import base"},{"line_number":19,"context_line":"from tempest.common import tempest_fixtures as fixtures"},{"line_number":20,"context_line":"from tempest.common.utils.data_utils import rand_name"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATH%2F%2FTV0%3D","side":"PARENT","line":17,"in_reply_to":"AAAATH%2F%2Fcyk%3D","updated":"2013-10-18 04:06:06.000000000","message":"Thanks, kenichi","commit_id":"f55f4e54ceab7c6a4d330f92c8059e46233e3560"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a3e13907f9b1c7179ccc1ecf305f72c1e1755ffa","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"from tempest.api.compute import base"},{"line_number":18,"context_line":"from tempest.common import tempest_fixtures as fixtures"},{"line_number":19,"context_line":"from tempest.common.utils import data_utils"},{"line_number":20,"context_line":"from tempest.test import attr"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATH%2F%2FcyQ%3D","line":19,"updated":"2013-10-16 01:16:36.000000000","message":"We\u0027d better to Import data_utils instead of rand_name in a *new* file.\nbut I guess changing the existing \"rand_name\" to \"data_utils\" is out of scope from this patch.","commit_id":"c117e9701f4cae60919bf3909bb86452dde0f9e0"},{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"4f4198a01346e97f5cfcbdbb193d2d54c1520a5e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"from tempest.api.compute import base"},{"line_number":18,"context_line":"from tempest.common import tempest_fixtures as fixtures"},{"line_number":19,"context_line":"from tempest.common.utils import data_utils"},{"line_number":20,"context_line":"from tempest.test import attr"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATH%2F%2FTVc%3D","line":19,"in_reply_to":"AAAATH%2F%2FcyQ%3D","updated":"2013-10-18 04:06:06.000000000","message":"hi kenichi, according to Giulio\u0027s comments in \u0027https://review.openstack.org/#/c/49231/10/tempest/api/compute/servers/test_attach_interfaces_negative.py\u0027. we should start to do right things. agreed?","commit_id":"c117e9701f4cae60919bf3909bb86452dde0f9e0"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"4e573ee42bbb6c66a6e252c9a335328c5b75836c","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from tempest.api.compute import base"},{"line_number":19,"context_line":"from tempest.common import tempest_fixtures as fixtures"},{"line_number":20,"context_line":"from tempest.common.utils import data_utils"},{"line_number":21,"context_line":"from tempest.test import attr"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATH%2F%2FIp0%3D","line":20,"updated":"2013-10-22 17:16:06.000000000","message":"This change (and the related changes below) is outside the scope of the change, see:\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Structural_split_of_changes\n\nIt would be fine by itself as a separate patch.","commit_id":"7dbf0520a0d081011d9a83c88ac2ece103e15f51"},{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"500561c291156f3274be2801a3801248cbf39dcf","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from tempest.api.compute import base"},{"line_number":19,"context_line":"from tempest.common import tempest_fixtures as fixtures"},{"line_number":20,"context_line":"from tempest.common.utils import data_utils"},{"line_number":21,"context_line":"from tempest.test import attr"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATH%2F%2FHP4%3D","line":20,"in_reply_to":"AAAATH%2F%2FIp0%3D","updated":"2013-10-23 01:05:35.000000000","message":"according to what Giulio said in some patches before, we should do things right from now on. Maybe we have some differences here, we need talk about it. Do you have some time?","commit_id":"7dbf0520a0d081011d9a83c88ac2ece103e15f51"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"cbbb81bb013d67a3109ad2d8770bb05bd95f22a5","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from tempest.test import attr"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class AggregatesAdminTestJSON(base.BaseComputeAdminTest):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    Tests Aggregates API that require admin privileges"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F%2FHys%3D","line":24,"updated":"2013-11-14 06:19:08.000000000","message":"base.BaseV2ComputeAdminTest","commit_id":"8d2c15896a1615b21b5f477bcd2711fa2c42bc37"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"e4471e7f4a4f853244a63f56cf053026d68ab0a3","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from tempest.api.compute import base"},{"line_number":19,"context_line":"from tempest.common import tempest_fixtures as fixtures"},{"line_number":20,"context_line":"from tempest.common.utils.data_utils import rand_name"},{"line_number":21,"context_line":"from tempest.test import attr"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F9ZFo%3D","line":20,"updated":"2013-12-12 00:08:27.000000000","message":"Please do not change here.\nThis change is old style \"import\".","commit_id":"405132208a27727f4b8cb8d3bbf3f682ca820998"}],"tempest/api/compute/admin/test_aggregates_negative.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"dd5c7f4b04b0b7aeb402c8fa7047b20b12eaab06","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":14,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"from tempest.api.compute import base"},{"line_number":18,"context_line":"from tempest.common import tempest_fixtures as fixtures"},{"line_number":19,"context_line":"from tempest.common.utils import data_utils"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FTUU%3D","line":16,"updated":"2013-10-18 04:37:31.000000000","message":"why don\u0027t you add a blank line?","commit_id":"b91f336c31d4bbb079cea2abf83231a5c20dee21"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"dd5c7f4b04b0b7aeb402c8fa7047b20b12eaab06","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    Tests Aggregates API that require admin privileges"},{"line_number":28,"context_line":"    \"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    _host_key \u003d \u0027OS-EXT-SRV-ATTR:host\u0027"},{"line_number":31,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FTRw%3D","line":30,"updated":"2013-10-18 04:37:31.000000000","message":"In positive tests, _host_key is used.\nHowever, it is not used in this negative tests.\n\nso _host_key seems unnecessary.","commit_id":"b91f336c31d4bbb079cea2abf83231a5c20dee21"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"dd5c7f4b04b0b7aeb402c8fa7047b20b12eaab06","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    def test_aggregate_delete_as_user(self):"},{"line_number":86,"context_line":"        # Regular user is not allowed to delete an aggregate."},{"line_number":87,"context_line":"        aggregate_name \u003d data_utils.rand_name(self.aggregate_name_prefix)"},{"line_number":88,"context_line":"        resp, aggregate \u003d self.client.create_aggregate(aggregate_name)"},{"line_number":89,"context_line":"        self.addCleanup(self.client.delete_aggregate, aggregate[\u0027id\u0027])"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        self.assertRaises(exceptions.Unauthorized,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FTSM%3D","line":88,"updated":"2013-10-18 04:37:31.000000000","message":"self.assertEqual(200, resp.status) is necessary.","commit_id":"b91f336c31d4bbb079cea2abf83231a5c20dee21"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"dd5c7f4b04b0b7aeb402c8fa7047b20b12eaab06","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    def test_aggregate_get_details_as_user(self):"},{"line_number":103,"context_line":"        # Regular user is not allowed to get aggregate details."},{"line_number":104,"context_line":"        aggregate_name \u003d data_utils.rand_name(self.aggregate_name_prefix)"},{"line_number":105,"context_line":"        resp, aggregate \u003d self.client.create_aggregate(aggregate_name)"},{"line_number":106,"context_line":"        self.addCleanup(self.client.delete_aggregate, aggregate[\u0027id\u0027])"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        self.assertRaises(exceptions.Unauthorized,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FTSI%3D","line":105,"updated":"2013-10-18 04:37:31.000000000","message":"self.assertEqual(200, resp.status) is necessary.","commit_id":"b91f336c31d4bbb079cea2abf83231a5c20dee21"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"dd5c7f4b04b0b7aeb402c8fa7047b20b12eaab06","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":113,"context_line":"    def test_aggregate_delete_with_invalid_id(self):"},{"line_number":114,"context_line":"        # Delete an aggregate with invalid id should raise exceptions."},{"line_number":115,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":116,"context_line":"                          self.client.delete_aggregate, -1)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FTTA%3D","line":114,"updated":"2013-10-18 04:37:31.000000000","message":"How about naming test_aggregate_delete_with_nonexistent_id?\n\nbecause the exception is NotFound.\n\nIf an invalid id, nova should return a BadRequest response.","commit_id":"b91f336c31d4bbb079cea2abf83231a5c20dee21"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"dd5c7f4b04b0b7aeb402c8fa7047b20b12eaab06","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":119,"context_line":"    def test_aggregate_get_details_with_invalid_id(self):"},{"line_number":120,"context_line":"        # Get aggregate details with invalid id should raise exceptions."},{"line_number":121,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":122,"context_line":"                          self.client.get_aggregate, -1)"},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FTTE%3D","line":120,"updated":"2013-10-18 04:37:31.000000000","message":"ditto","commit_id":"b91f336c31d4bbb079cea2abf83231a5c20dee21"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"dd5c7f4b04b0b7aeb402c8fa7047b20b12eaab06","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                break"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        aggregate_name \u003d data_utils.rand_name(self.aggregate_name_prefix)"},{"line_number":135,"context_line":"        resp, aggregate \u003d self.client.create_aggregate(aggregate_name)"},{"line_number":136,"context_line":"        self.addCleanup(self.client.delete_aggregate, aggregate[\u0027id\u0027])"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        self.assertRaises(exceptions.NotFound, self.client.add_host,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FTSE%3D","line":135,"updated":"2013-10-18 04:37:31.000000000","message":"self.assertEqual(200, resp.status) is necessary.","commit_id":"b91f336c31d4bbb079cea2abf83231a5c20dee21"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"dd5c7f4b04b0b7aeb402c8fa7047b20b12eaab06","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    def test_aggregate_add_host_as_user(self):"},{"line_number":143,"context_line":"        # Regular user is not allowed to add a host to an aggregate."},{"line_number":144,"context_line":"        aggregate_name \u003d data_utils.rand_name(self.aggregate_name_prefix)"},{"line_number":145,"context_line":"        resp, aggregate \u003d self.client.create_aggregate(aggregate_name)"},{"line_number":146,"context_line":"        self.addCleanup(self.client.delete_aggregate, aggregate[\u0027id\u0027])"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        self.assertRaises(exceptions.Unauthorized,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FTSA%3D","line":145,"updated":"2013-10-18 04:37:31.000000000","message":"self.assertEqual(200, resp.status) is necessary.","commit_id":"b91f336c31d4bbb079cea2abf83231a5c20dee21"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"dd5c7f4b04b0b7aeb402c8fa7047b20b12eaab06","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        # Regular user is not allowed to remove a host from an aggregate."},{"line_number":178,"context_line":"        self.useFixture(fixtures.LockFixture(\u0027availability_zone\u0027))"},{"line_number":179,"context_line":"        aggregate_name \u003d data_utils.rand_name(self.aggregate_name_prefix)"},{"line_number":180,"context_line":"        resp, aggregate \u003d self.client.create_aggregate(aggregate_name)"},{"line_number":181,"context_line":"        self.addCleanup(self.client.delete_aggregate, aggregate[\u0027id\u0027])"},{"line_number":182,"context_line":"        self.client.add_host(aggregate[\u0027id\u0027], self.host)"},{"line_number":183,"context_line":"        self.addCleanup(self.client.remove_host, aggregate[\u0027id\u0027], self.host)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FTR0%3D","line":180,"updated":"2013-10-18 04:37:31.000000000","message":"self.assertEqual(200, resp.status) is necessary.","commit_id":"b91f336c31d4bbb079cea2abf83231a5c20dee21"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"dd5c7f4b04b0b7aeb402c8fa7047b20b12eaab06","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        aggregate_name \u003d data_utils.rand_name(self.aggregate_name_prefix)"},{"line_number":180,"context_line":"        resp, aggregate \u003d self.client.create_aggregate(aggregate_name)"},{"line_number":181,"context_line":"        self.addCleanup(self.client.delete_aggregate, aggregate[\u0027id\u0027])"},{"line_number":182,"context_line":"        self.client.add_host(aggregate[\u0027id\u0027], self.host)"},{"line_number":183,"context_line":"        self.addCleanup(self.client.remove_host, aggregate[\u0027id\u0027], self.host)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        self.assertRaises(exceptions.Unauthorized,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FTRc%3D","line":182,"updated":"2013-10-18 04:37:31.000000000","message":"self.assertEqual(200, resp.status) is necessary.","commit_id":"b91f336c31d4bbb079cea2abf83231a5c20dee21"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"dd5c7f4b04b0b7aeb402c8fa7047b20b12eaab06","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"class AggregatesAdminNegativeTestXML(AggregatesAdminNegativeTestJSON):"},{"line_number":210,"context_line":"    _host_key \u003d ("},{"line_number":211,"context_line":"        \u0027{http://docs.openstack.org/compute/ext/extended_status/api/v1.1}host\u0027)"},{"line_number":212,"context_line":"    _interface \u003d \u0027xml\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATH%2F%2FTRo%3D","line":211,"updated":"2013-10-18 04:37:31.000000000","message":"_host_key is not used in this negative tests.","commit_id":"b91f336c31d4bbb079cea2abf83231a5c20dee21"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"4e573ee42bbb6c66a6e252c9a335328c5b75836c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":55,"context_line":"    def test_aggregate_create_aggregate_name_length_less_than_1(self):"},{"line_number":56,"context_line":"        # Create an aggregate with aggregate name length less than 1 should"},{"line_number":57,"context_line":"        # raise exception."},{"line_number":58,"context_line":"        self.assertRaises(exceptions.BadRequest,"},{"line_number":59,"context_line":"                          self.client.create_aggregate,"},{"line_number":60,"context_line":"                          \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATH%2F%2FIrk%3D","line":57,"updated":"2013-10-22 17:16:06.000000000","message":"Raise exception here is misleading, that\u0027s a tempest thing not part of the api being tested. If you have comments like this you should be clear about it being the api error response that is the expected result. This is true for all the comments below too.","commit_id":"7dbf0520a0d081011d9a83c88ac2ece103e15f51"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"4e573ee42bbb6c66a6e252c9a335328c5b75836c","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        hosts \u003d map(lambda x: x[\u0027host_name\u0027], hosts_all)"},{"line_number":131,"context_line":"        while True:"},{"line_number":132,"context_line":"            non_exist_host \u003d data_utils.rand_name(\u0027nonexist_host_\u0027)"},{"line_number":133,"context_line":"            if non_exist_host not in hosts:"},{"line_number":134,"context_line":"                break"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        aggregate_name \u003d data_utils.rand_name(self.aggregate_name_prefix)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATH%2F%2FIqc%3D","line":133,"updated":"2013-10-22 17:16:06.000000000","message":"I find this extremely unlikely not to be true.","commit_id":"7dbf0520a0d081011d9a83c88ac2ece103e15f51"},{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"500561c291156f3274be2801a3801248cbf39dcf","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        hosts \u003d map(lambda x: x[\u0027host_name\u0027], hosts_all)"},{"line_number":131,"context_line":"        while True:"},{"line_number":132,"context_line":"            non_exist_host \u003d data_utils.rand_name(\u0027nonexist_host_\u0027)"},{"line_number":133,"context_line":"            if non_exist_host not in hosts:"},{"line_number":134,"context_line":"                break"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        aggregate_name \u003d data_utils.rand_name(self.aggregate_name_prefix)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATH%2F%2FHPs%3D","line":133,"in_reply_to":"AAAATH%2F%2FIqc%3D","updated":"2013-10-23 01:05:35.000000000","message":"just to ensure that, like some other test files do.","commit_id":"7dbf0520a0d081011d9a83c88ac2ece103e15f51"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"cbbb81bb013d67a3109ad2d8770bb05bd95f22a5","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from tempest.test import attr"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class AggregatesAdminNegativeTestJSON(base.BaseComputeAdminTest):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    \"\"\""},{"line_number":30,"context_line":"    Tests Aggregates API that require admin privileges"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F%2FHyw%3D","line":27,"updated":"2013-11-14 06:19:08.000000000","message":"base.BaseV2ComputeAdminTest","commit_id":"8d2c15896a1615b21b5f477bcd2711fa2c42bc37"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"6f06685e6180143025a88be20c7a8cf772e61b8e","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":194,"context_line":"    def test_aggregate_remove_host_with_nonexistent_id(self):"},{"line_number":195,"context_line":"        nonexistent_ag \u003d str(uuid.uuid4())"},{"line_number":196,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":197,"context_line":"                          self.client.remove_host,"},{"line_number":198,"context_line":"                          nonexistent_ag,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F9GWo%3D","line":195,"updated":"2013-12-16 22:45:29.000000000","message":"I\u0027m pretty confident that you must use an int here instead of uuid and that made sqlalcemy fail","commit_id":"8a88a6151fb6b2d40cff785bdc78685c99dba6b0"},{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"4af8344591fb7b556fd270689f941bf9eb4f1302","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":194,"context_line":"    def test_aggregate_remove_host_with_nonexistent_id(self):"},{"line_number":195,"context_line":"        nonexistent_ag \u003d str(uuid.uuid4())"},{"line_number":196,"context_line":"        self.assertRaises(exceptions.NotFound,"},{"line_number":197,"context_line":"                          self.client.remove_host,"},{"line_number":198,"context_line":"                          nonexistent_ag,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F9E%2BI%3D","line":195,"in_reply_to":"AAAATn%2F9GWo%3D","updated":"2013-12-17 01:00:36.000000000","message":"thanks Mauro. yes, you are right, I\u0027ll delete this function, for it\u0027s duplicated with \u0027test_aggregate_remove_nonexistent_host\u0027","commit_id":"8a88a6151fb6b2d40cff785bdc78685c99dba6b0"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"3504c2337dd14fc5aacdcc864550e236be10b1bd","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import uuid"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from tempest.api.compute import base"},{"line_number":21,"context_line":"from tempest.common import tempest_fixtures as fixtures"},{"line_number":22,"context_line":"from tempest.common.utils import data_utils"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAATn%2F9E48%3D","line":19,"updated":"2013-12-17 01:24:52.000000000","message":"forgot to remove uuid import","commit_id":"48102595be49acc707e4f7da9c07eb657dff6125"},{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"aba765294d4db1ed1d20c2dcb5b610541fd5f286","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import uuid"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from tempest.api.compute import base"},{"line_number":21,"context_line":"from tempest.common import tempest_fixtures as fixtures"},{"line_number":22,"context_line":"from tempest.common.utils import data_utils"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAATn%2F9Epo%3D","line":19,"in_reply_to":"AAAATn%2F9E48%3D","updated":"2013-12-17 02:38:34.000000000","message":"thanks very much, Mauro. I have no python environment and devstack at the moment, so it\u0027s very hard to check. But thanks for you reviewing!","commit_id":"48102595be49acc707e4f7da9c07eb657dff6125"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"576d77584a22f6c828e1ce1e9e3a978940b981f1","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":57,"context_line":"    def test_aggregate_create_aggregate_name_length_less_than_1(self):"},{"line_number":58,"context_line":"        # the length of aggregate name should \u003e\u003d 1 and \u003c\u003d255"},{"line_number":59,"context_line":"        self.assertRaises(exceptions.BadRequest,"},{"line_number":60,"context_line":"                          self.client.create_aggregate,"},{"line_number":61,"context_line":"                          \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAATn%2F9Ey8%3D","line":58,"updated":"2013-12-17 02:00:28.000000000","message":"Should those negative test like parameter validation not be merged?","commit_id":"48102595be49acc707e4f7da9c07eb657dff6125"},{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"ba42b4120b238bae789f37f3d292eb9a6a703965","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":57,"context_line":"    def test_aggregate_create_aggregate_name_length_less_than_1(self):"},{"line_number":58,"context_line":"        # the length of aggregate name should \u003e\u003d 1 and \u003c\u003d255"},{"line_number":59,"context_line":"        self.assertRaises(exceptions.BadRequest,"},{"line_number":60,"context_line":"                          self.client.create_aggregate,"},{"line_number":61,"context_line":"                          \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAATn%2F9Eq4%3D","line":58,"in_reply_to":"AAAATn%2F9Ey8%3D","updated":"2013-12-17 02:31:48.000000000","message":"this patch is approved before, just rebase it.","commit_id":"48102595be49acc707e4f7da9c07eb657dff6125"}]}
