)]}'
{"openstackclient/tests/functional/compute/v2/test_flavor.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b05237d5916d6dc62f699270d2586550f99780f4","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        self.assertIn(name1, col_name)"},{"line_number":136,"context_line":"        self.assertNotIn(name2, col_name)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        for x in cmd_output:"},{"line_number":139,"context_line":"            if x[\u0027Name\u0027] \u003d\u003d name1:"},{"line_number":140,"context_line":"                self.assertEqual({\u0027a\u0027: \u0027b\u0027, \u0027c\u0027: \u0027d\u0027}, x[\u0027Properties\u0027])"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        # Test list --public"},{"line_number":143,"context_line":"        cmd_output \u003d json.loads(self.openstack("}],"source_content_type":"text/x-python","patch_set":1,"id":"9f436f4f_bf7971c5","line":140,"range":{"start_line":138,"start_character":8,"end_line":140,"end_character":71},"updated":"2017-08-17 05:49:04.000000000","message":"Same comment for tests/functional/compute/v2/test_server_group.py","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"4eac700786d051ad7de988e6558db2fc4d0bc83a","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        self.assertIn(name1, col_name)"},{"line_number":136,"context_line":"        self.assertNotIn(name2, col_name)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        for x in cmd_output:"},{"line_number":139,"context_line":"            if x[\u0027Name\u0027] \u003d\u003d name1:"},{"line_number":140,"context_line":"                self.assertEqual({\u0027a\u0027: \u0027b\u0027, \u0027c\u0027: \u0027d\u0027}, x[\u0027Properties\u0027])"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        # Test list --public"},{"line_number":143,"context_line":"        cmd_output \u003d json.loads(self.openstack("}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_f4490232","line":140,"range":{"start_line":138,"start_character":8,"end_line":140,"end_character":71},"in_reply_to":"9f436f4f_bf7971c5","updated":"2017-09-06 03:28:09.000000000","message":"Done","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"}],"openstackclient/tests/functional/compute/v2/test_server.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b05237d5916d6dc62f699270d2586550f99780f4","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        ))"},{"line_number":245,"context_line":"        self.assertIsInstance(cmd_output[\u0027addresses\u0027], dict)"},{"line_number":246,"context_line":"        # Convert json output to str, then assert floating ip in"},{"line_number":247,"context_line":"        self.assertIn(floating_ip, json.dumps(cmd_output[\u0027addresses\u0027]))"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        # detach ip"},{"line_number":250,"context_line":"        raw_output \u003d self.openstack("}],"source_content_type":"text/x-python","patch_set":1,"id":"9f436f4f_5f3965ef","line":247,"range":{"start_line":247,"start_character":8,"end_line":247,"end_character":71},"updated":"2017-08-17 05:49:04.000000000","message":"Can\u0027t we check the result without using json.dumps? json.dumps loses the data structure so it is better to check it without converting it into a string.","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"4eac700786d051ad7de988e6558db2fc4d0bc83a","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        ))"},{"line_number":245,"context_line":"        self.assertIsInstance(cmd_output[\u0027addresses\u0027], dict)"},{"line_number":246,"context_line":"        # Convert json output to str, then assert floating ip in"},{"line_number":247,"context_line":"        self.assertIn(floating_ip, json.dumps(cmd_output[\u0027addresses\u0027]))"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        # detach ip"},{"line_number":250,"context_line":"        raw_output \u003d self.openstack("}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_974e4036","line":247,"range":{"start_line":247,"start_character":8,"end_line":247,"end_character":71},"in_reply_to":"9f436f4f_5f3965ef","updated":"2017-09-06 03:28:09.000000000","message":"Ah, I think we can assert the private network content directly.","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b05237d5916d6dc62f699270d2586550f99780f4","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        self.assertEqual(server_name, server[\u0027name\u0027])"},{"line_number":550,"context_line":"        self.assertIsInstance(server[\u0027security_groups\u0027], list)"},{"line_number":551,"context_line":"        self.assertEqual(2, len(server[\u0027security_groups\u0027]))"},{"line_number":552,"context_line":"        sg_ids \u003d [each_sg[\u0027name\u0027] for each_sg in server[\u0027security_groups\u0027]]"},{"line_number":553,"context_line":"        self.assertIn(str(security_group1[\u0027id\u0027]), sg_ids)"},{"line_number":554,"context_line":"        self.assertIn(str(security_group2[\u0027id\u0027]), sg_ids)"},{"line_number":555,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f436f4f_ff0a5923","line":552,"range":{"start_line":552,"start_character":8,"end_line":552,"end_character":14},"updated":"2017-08-17 05:49:04.000000000","message":"ID is contained in \u0027name\u0027 field. Some comment would be nice.","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"4eac700786d051ad7de988e6558db2fc4d0bc83a","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        self.assertEqual(server_name, server[\u0027name\u0027])"},{"line_number":550,"context_line":"        self.assertIsInstance(server[\u0027security_groups\u0027], list)"},{"line_number":551,"context_line":"        self.assertEqual(2, len(server[\u0027security_groups\u0027]))"},{"line_number":552,"context_line":"        sg_ids \u003d [each_sg[\u0027name\u0027] for each_sg in server[\u0027security_groups\u0027]]"},{"line_number":553,"context_line":"        self.assertIn(str(security_group1[\u0027id\u0027]), sg_ids)"},{"line_number":554,"context_line":"        self.assertIn(str(security_group2[\u0027id\u0027]), sg_ids)"},{"line_number":555,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_379e6c07","line":552,"range":{"start_line":552,"start_character":8,"end_line":552,"end_character":14},"in_reply_to":"9f436f4f_ff0a5923","updated":"2017-09-06 03:28:09.000000000","message":"This is a Nova issue, it return security group id in response of \"server create\", but return security group name in the following \"server show\", I will add some comments to clarify it, thanks.","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b05237d5916d6dc62f699270d2586550f99780f4","unresolved":false,"context_lines":[{"line_number":550,"context_line":"        self.assertIsInstance(server[\u0027security_groups\u0027], list)"},{"line_number":551,"context_line":"        self.assertEqual(2, len(server[\u0027security_groups\u0027]))"},{"line_number":552,"context_line":"        sg_ids \u003d [each_sg[\u0027name\u0027] for each_sg in server[\u0027security_groups\u0027]]"},{"line_number":553,"context_line":"        self.assertIn(str(security_group1[\u0027id\u0027]), sg_ids)"},{"line_number":554,"context_line":"        self.assertIn(str(security_group2[\u0027id\u0027]), sg_ids)"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"        self.wait_for_status(server_name, \u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f436f4f_bf2731c7","line":553,"range":{"start_line":553,"start_character":22,"end_line":553,"end_character":48},"updated":"2017-08-17 05:49:04.000000000","message":"Why do we need to use str() here?","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"4eac700786d051ad7de988e6558db2fc4d0bc83a","unresolved":false,"context_lines":[{"line_number":550,"context_line":"        self.assertIsInstance(server[\u0027security_groups\u0027], list)"},{"line_number":551,"context_line":"        self.assertEqual(2, len(server[\u0027security_groups\u0027]))"},{"line_number":552,"context_line":"        sg_ids \u003d [each_sg[\u0027name\u0027] for each_sg in server[\u0027security_groups\u0027]]"},{"line_number":553,"context_line":"        self.assertIn(str(security_group1[\u0027id\u0027]), sg_ids)"},{"line_number":554,"context_line":"        self.assertIn(str(security_group2[\u0027id\u0027]), sg_ids)"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"        self.wait_for_status(server_name, \u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_f7546456","line":553,"range":{"start_line":553,"start_character":22,"end_line":553,"end_character":48},"in_reply_to":"9f436f4f_bf2731c7","updated":"2017-09-06 03:28:09.000000000","message":"See my comments in #540 line","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b05237d5916d6dc62f699270d2586550f99780f4","unresolved":false,"context_lines":[{"line_number":559,"context_line":"        ))"},{"line_number":560,"context_line":"        self.assertIsInstance(server[\u0027security_groups\u0027], list)"},{"line_number":561,"context_line":"        self.assertEqual(2, len(server[\u0027security_groups\u0027]))"},{"line_number":562,"context_line":"        sg_ids \u003d [each_sg[\u0027name\u0027] for each_sg in server[\u0027security_groups\u0027]]"},{"line_number":563,"context_line":"        self.assertIn(sg_name1, sg_ids)"},{"line_number":564,"context_line":"        self.assertIn(sg_name2, sg_ids)"},{"line_number":565,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f436f4f_5f128563","line":562,"range":{"start_line":562,"start_character":8,"end_line":562,"end_character":14},"updated":"2017-08-17 05:49:04.000000000","message":"sg_names?","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"4eac700786d051ad7de988e6558db2fc4d0bc83a","unresolved":false,"context_lines":[{"line_number":559,"context_line":"        ))"},{"line_number":560,"context_line":"        self.assertIsInstance(server[\u0027security_groups\u0027], list)"},{"line_number":561,"context_line":"        self.assertEqual(2, len(server[\u0027security_groups\u0027]))"},{"line_number":562,"context_line":"        sg_ids \u003d [each_sg[\u0027name\u0027] for each_sg in server[\u0027security_groups\u0027]]"},{"line_number":563,"context_line":"        self.assertIn(sg_name1, sg_ids)"},{"line_number":564,"context_line":"        self.assertIn(sg_name2, sg_ids)"},{"line_number":565,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_77c63419","line":562,"range":{"start_line":562,"start_character":8,"end_line":562,"end_character":14},"in_reply_to":"9f436f4f_5f128563","updated":"2017-09-06 03:28:09.000000000","message":"Done","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"}],"openstackclient/tests/functional/compute/v2/test_server_group.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b05237d5916d6dc62f699270d2586550f99780f4","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            if x[\u0027Name\u0027] \u003d\u003d name1:"},{"line_number":94,"context_line":"                self.assertEqual([\u0027affinity\u0027], x[\"Policies\"])"},{"line_number":95,"context_line":"            elif x[\u0027Name\u0027] \u003d\u003d name2:"},{"line_number":96,"context_line":"                self.assertEqual([\u0027anti-affinity\u0027], x[\"Policies\"])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f436f4f_5f6ba5ef","line":96,"updated":"2017-08-17 05:49:04.000000000","message":"If you use if, elif, we cannot check a case where they do not exist.\n\nInstead it is better to extract an item with Name \u003d\u003d name1 explicitly and call assertEqual. By doing so, we can catch a case where name1 item does not exist.\n\n  item_name1 \u003d [x for x in cmd_output if x[\u0027Name\u0027] \u003d\u003d name1][0]\n  self.assertEqual([\u0027affinity\u0027], x[\u0027Policies\u0027])","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"4eac700786d051ad7de988e6558db2fc4d0bc83a","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            if x[\u0027Name\u0027] \u003d\u003d name1:"},{"line_number":94,"context_line":"                self.assertEqual([\u0027affinity\u0027], x[\"Policies\"])"},{"line_number":95,"context_line":"            elif x[\u0027Name\u0027] \u003d\u003d name2:"},{"line_number":96,"context_line":"                self.assertEqual([\u0027anti-affinity\u0027], x[\"Policies\"])"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_f7d467eb","line":96,"in_reply_to":"9f436f4f_5f6ba5ef","updated":"2017-09-06 03:28:09.000000000","message":"Done","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"}],"openstackclient/tests/unit/compute/v2/test_aggregate.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b05237d5916d6dc62f699270d2586550f99780f4","unresolved":false,"context_lines":[{"line_number":474,"context_line":"                self.assertEqual(self.data[index].human_readable(),"},{"line_number":475,"context_line":"                                 value.human_readable())"},{"line_number":476,"context_line":"            else:"},{"line_number":477,"context_line":"                self.assertEqual(self.data[index], value)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"class TestAggregateUnset(TestAggregate):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f436f4f_5f9de507","line":477,"updated":"2017-08-17 05:49:04.000000000","message":"assertItemEqual and assertListItemEqual have been merged. You can now use them and simplify the code.\n\nhttps://review.openstack.org/#/c/494181/2/openstackclient/tests/unit/utils.py","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"4eac700786d051ad7de988e6558db2fc4d0bc83a","unresolved":false,"context_lines":[{"line_number":474,"context_line":"                self.assertEqual(self.data[index].human_readable(),"},{"line_number":475,"context_line":"                                 value.human_readable())"},{"line_number":476,"context_line":"            else:"},{"line_number":477,"context_line":"                self.assertEqual(self.data[index], value)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"class TestAggregateUnset(TestAggregate):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_d794cbea","line":477,"in_reply_to":"9f436f4f_5f9de507","updated":"2017-09-06 03:28:09.000000000","message":"Thank you very much, it\u0027s a great help function.","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"}],"openstackclient/tests/unit/compute/v2/test_flavor.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b05237d5916d6dc62f699270d2586550f99780f4","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                self.assertEqual(self.data[index].human_readable(),"},{"line_number":114,"context_line":"                                 value.human_readable())"},{"line_number":115,"context_line":"            else:"},{"line_number":116,"context_line":"                self.assertEqual(self.data[index], value)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def test_flavor_create_all_options(self):"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f436f4f_7a043715","line":116,"updated":"2017-08-17 05:49:04.000000000","message":"assertItemEqual and assertListItemEqual have been merged. You can now use them and simplify the code.","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"4eac700786d051ad7de988e6558db2fc4d0bc83a","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                self.assertEqual(self.data[index].human_readable(),"},{"line_number":114,"context_line":"                                 value.human_readable())"},{"line_number":115,"context_line":"            else:"},{"line_number":116,"context_line":"                self.assertEqual(self.data[index], value)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def test_flavor_create_all_options(self):"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_f4f7c2d3","line":116,"in_reply_to":"9f436f4f_7a043715","updated":"2017-09-06 03:28:09.000000000","message":"Done","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b05237d5916d6dc62f699270d2586550f99780f4","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                self.assertEqual(self.data[index].human_readable(),"},{"line_number":167,"context_line":"                                 value.human_readable())"},{"line_number":168,"context_line":"            else:"},{"line_number":169,"context_line":"                self.assertEqual(self.data[index], value)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def test_flavor_create_other_options(self):"},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f436f4f_5a073319","line":169,"updated":"2017-08-17 05:49:04.000000000","message":"ditto","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"4eac700786d051ad7de988e6558db2fc4d0bc83a","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                self.assertEqual(self.data[index].human_readable(),"},{"line_number":167,"context_line":"                                 value.human_readable())"},{"line_number":168,"context_line":"            else:"},{"line_number":169,"context_line":"                self.assertEqual(self.data[index], value)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def test_flavor_create_other_options(self):"},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_5430d69e","line":169,"in_reply_to":"9f436f4f_5a073319","updated":"2017-09-06 03:28:09.000000000","message":"Done","commit_id":"95ef50e345c9ec05a43a6ce607f48eaa96dbedd2"}]}
