)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"e435273c4031d393268c8c81a052a6926db364c9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Improve UT for DB device profile"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch add some UT for device profile:"},{"line_number":10,"context_line":"1. get"},{"line_number":11,"context_line":"2. update"},{"line_number":12,"context_line":"3. create"},{"line_number":13,"context_line":"4. list"},{"line_number":14,"context_line":"5. delete"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ia6f415b74150cdda94d71dc8b5e760f7758a526e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3fa7e38b_fa0d6340","line":14,"range":{"start_line":10,"start_character":0,"end_line":14,"end_character":9},"updated":"2020-01-15 06:22:02.000000000","message":"It seems to only affect the create method, I think you just need to list the affected method.","commit_id":"ed83ebeda9c594e8807245b3b1104382a6f7f1ba"}],"cyborg/tests/unit/db/test_db_device_profile.py":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"53457931a17e7f112eba1f24a413d4ee26943c3a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                uuid\u003duuidutils.generate_uuid(),"},{"line_number":54,"context_line":"                name\u003d\"device_profile_name_%s\" % i)"},{"line_number":55,"context_line":"            uuids.append(dp[\u0027uuid\u0027])"},{"line_number":56,"context_line":"        dps \u003d self.dbapi.device_profile_list(self.context)"},{"line_number":57,"context_line":"        dp_uuids \u003d [item.uuid for item in dps]"},{"line_number":58,"context_line":"        self.assertEqual(sorted(uuids), sorted(dp_uuids))"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_255f3711","line":56,"range":{"start_line":56,"start_character":8,"end_line":56,"end_character":58},"updated":"2020-01-17 08:18:05.000000000","message":"After this call, you will get 3 results in dps, I think you can assert self.assertEqual(3, len(dps))","commit_id":"c4bc275383448052e9aef9c87927498c4cefdfbd"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"5f6cc849c7f11a4ece4b3bae596341f288dfa934","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                uuid\u003duuidutils.generate_uuid(),"},{"line_number":54,"context_line":"                name\u003d\"device_profile_name_%s\" % i)"},{"line_number":55,"context_line":"            uuids.append(dp[\u0027uuid\u0027])"},{"line_number":56,"context_line":"        dps \u003d self.dbapi.device_profile_list(self.context)"},{"line_number":57,"context_line":"        dp_uuids \u003d [item.uuid for item in dps]"},{"line_number":58,"context_line":"        self.assertEqual(sorted(uuids), sorted(dp_uuids))"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_e5a11f94","line":56,"range":{"start_line":56,"start_character":8,"end_line":56,"end_character":58},"in_reply_to":"3fa7e38b_255f3711","updated":"2020-01-17 08:46:44.000000000","message":"Thanks bailin. self.assertEqual() is simple. I think both is ok.","commit_id":"c4bc275383448052e9aef9c87927498c4cefdfbd"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"53457931a17e7f112eba1f24a413d4ee26943c3a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        dp_uuids \u003d [item.uuid for item in dps]"},{"line_number":58,"context_line":"        self.assertEqual(sorted(uuids), sorted(dp_uuids))"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def test_list_with_filters(self):"},{"line_number":61,"context_line":"        dp1 \u003d utils.create_test_device_profile("},{"line_number":62,"context_line":"            self.context,"},{"line_number":63,"context_line":"            id\u003d1,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_c5e0a32a","line":60,"range":{"start_line":60,"start_character":4,"end_line":60,"end_character":7},"updated":"2020-01-17 08:18:05.000000000","message":"Can you add a test case for the exception with invalid filter type? I think when the filter\u003dNone, there will be raised a \u0027TypeError\u0027 exception.","commit_id":"c4bc275383448052e9aef9c87927498c4cefdfbd"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"53457931a17e7f112eba1f24a413d4ee26943c3a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        dp_uuids \u003d [item.uuid for item in dps]"},{"line_number":58,"context_line":"        self.assertEqual(sorted(uuids), sorted(dp_uuids))"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def test_list_with_filters(self):"},{"line_number":61,"context_line":"        dp1 \u003d utils.create_test_device_profile("},{"line_number":62,"context_line":"            self.context,"},{"line_number":63,"context_line":"            id\u003d1,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_a52567af","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":30},"updated":"2020-01-17 08:18:05.000000000","message":"you use name to filter the device profiles, so I think you can rename this \"test_list_filter_by_name\".","commit_id":"c4bc275383448052e9aef9c87927498c4cefdfbd"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"7fb6d27fbbf576b8bcae556811fb0f41af9500b9","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        dp_uuids \u003d [item.uuid for item in dps]"},{"line_number":58,"context_line":"        self.assertEqual(sorted(uuids), sorted(dp_uuids))"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def test_list_with_filters(self):"},{"line_number":61,"context_line":"        dp1 \u003d utils.create_test_device_profile("},{"line_number":62,"context_line":"            self.context,"},{"line_number":63,"context_line":"            id\u003d1,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_e5235fba","line":60,"range":{"start_line":60,"start_character":4,"end_line":60,"end_character":7},"in_reply_to":"3fa7e38b_85d70bf5","updated":"2020-01-17 09:11:39.000000000","message":"I test in my env, an it will be raised:\n---\nself.dbapi.device_profile_list_by_filters(self.context, filters\u003dNone)\n*** TypeError: argument of type \u0027NoneType\u0027 is not iterable\n\nI think you can try. In db.device_profile_list_by_filters() while exact_match_filter_names is not None, and filter is None, I think [1] will raised \u0027NoneType\u0027. Here doesnot check for the parameter (This is just personal opinions, it just test db api).\n\nIs this to init the filter? such as filter\u003d{}, that will be not raise the excetpion.\n\n[1]https://github.com/openstack/cyborg/blob/a39f816b554235027ef786f57f2eec00f885bcb1/cyborg/db/sqlalchemy/api.py#L221","commit_id":"c4bc275383448052e9aef9c87927498c4cefdfbd"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"5f6cc849c7f11a4ece4b3bae596341f288dfa934","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        dp_uuids \u003d [item.uuid for item in dps]"},{"line_number":58,"context_line":"        self.assertEqual(sorted(uuids), sorted(dp_uuids))"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def test_list_with_filters(self):"},{"line_number":61,"context_line":"        dp1 \u003d utils.create_test_device_profile("},{"line_number":62,"context_line":"            self.context,"},{"line_number":63,"context_line":"            id\u003d1,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_05223b03","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":30},"in_reply_to":"3fa7e38b_a52567af","updated":"2020-01-17 08:46:44.000000000","message":"Thanks for your advice. test_list_filter_by_name will more clear.","commit_id":"c4bc275383448052e9aef9c87927498c4cefdfbd"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"5f6cc849c7f11a4ece4b3bae596341f288dfa934","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        dp_uuids \u003d [item.uuid for item in dps]"},{"line_number":58,"context_line":"        self.assertEqual(sorted(uuids), sorted(dp_uuids))"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def test_list_with_filters(self):"},{"line_number":61,"context_line":"        dp1 \u003d utils.create_test_device_profile("},{"line_number":62,"context_line":"            self.context,"},{"line_number":63,"context_line":"            id\u003d1,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_85d70bf5","line":60,"range":{"start_line":60,"start_character":4,"end_line":60,"end_character":7},"in_reply_to":"3fa7e38b_c5e0a32a","updated":"2020-01-17 08:46:44.000000000","message":"Invalid filter type will not raise exception. The code will ignore it[1]. So I think the current testcase for name is enough.\n[1]. https://github.com/openstack/cyborg/blob/master/cyborg/db/sqlalchemy/api.py#L555","commit_id":"c4bc275383448052e9aef9c87927498c4cefdfbd"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"3aa8fe8cadbb469512f2a40b6e8ec8c4a828b81a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        dp_uuids \u003d [item.uuid for item in dps]"},{"line_number":58,"context_line":"        self.assertEqual(sorted(uuids), sorted(dp_uuids))"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def test_list_with_filters(self):"},{"line_number":61,"context_line":"        dp1 \u003d utils.create_test_device_profile("},{"line_number":62,"context_line":"            self.context,"},{"line_number":63,"context_line":"            id\u003d1,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_e849f62e","line":60,"range":{"start_line":60,"start_character":4,"end_line":60,"end_character":7},"in_reply_to":"3fa7e38b_e5235fba","updated":"2020-01-17 09:23:03.000000000","message":"Init also has the same issue, because we set filter\u003dNone. Simple way is change \"if key not in filters\" to \"if filters and key not in filters\".","commit_id":"c4bc275383448052e9aef9c87927498c4cefdfbd"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"6c33ef6268766d9dde50b7cbba22d13d79e4b30a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        dp_uuids \u003d [item.uuid for item in dps]"},{"line_number":58,"context_line":"        self.assertEqual(sorted(uuids), sorted(dp_uuids))"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def test_list_with_filters(self):"},{"line_number":61,"context_line":"        dp1 \u003d utils.create_test_device_profile("},{"line_number":62,"context_line":"            self.context,"},{"line_number":63,"context_line":"            id\u003d1,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_c828ba99","line":60,"range":{"start_line":60,"start_character":4,"end_line":60,"end_character":7},"in_reply_to":"3fa7e38b_e849f62e","updated":"2020-01-17 09:58:06.000000000","message":"I do a follow-up to fix this issue https://review.opendev.org/#/c/703049/","commit_id":"c4bc275383448052e9aef9c87927498c4cefdfbd"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"53457931a17e7f112eba1f24a413d4ee26943c3a","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            name\u003d\"name_2\")"},{"line_number":71,"context_line":"        res \u003d self.dbapi.device_profile_list_by_filters("},{"line_number":72,"context_line":"            self.context, filters\u003d{\"name\": \"name_1\"})"},{"line_number":73,"context_line":"        self.assertEqual([dp1[\u0027uuid\u0027]], [dp[\u0027uuid\u0027] for dp in res])"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def test_delete(self):"},{"line_number":76,"context_line":"        created_dp \u003d utils.create_test_device_profile(self.context)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_65544ffe","line":73,"range":{"start_line":73,"start_character":8,"end_line":73,"end_character":67},"updated":"2020-01-17 08:18:05.000000000","message":"I think you can just check the name is ok, because you filter by name.\n\nTwo steps:\n1. the GET response will return 1 object.\n2.assert equal the response\u0027s name is you filter name.\n\nmaybe such as:\n\nself.assertEqual(1, len(res))\nself.assertEqual(\u0027name_1\u0027, res[0][\u0027name\u0027])","commit_id":"c4bc275383448052e9aef9c87927498c4cefdfbd"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"5f6cc849c7f11a4ece4b3bae596341f288dfa934","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            name\u003d\"name_2\")"},{"line_number":71,"context_line":"        res \u003d self.dbapi.device_profile_list_by_filters("},{"line_number":72,"context_line":"            self.context, filters\u003d{\"name\": \"name_1\"})"},{"line_number":73,"context_line":"        self.assertEqual([dp1[\u0027uuid\u0027]], [dp[\u0027uuid\u0027] for dp in res])"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def test_delete(self):"},{"line_number":76,"context_line":"        created_dp \u003d utils.create_test_device_profile(self.context)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_25c17731","line":73,"range":{"start_line":73,"start_character":8,"end_line":73,"end_character":67},"in_reply_to":"3fa7e38b_65544ffe","updated":"2020-01-17 08:46:44.000000000","message":"Ye. That\u0027s will be more clear.","commit_id":"c4bc275383448052e9aef9c87927498c4cefdfbd"},{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"6214e975cdc3b18c3f0c645e4aa1ecc76a6236e4","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def test_get_by_uuid(self):"},{"line_number":30,"context_line":"        created_dp \u003d utils.create_test_device_profile(self.context)"},{"line_number":31,"context_line":"        queryed_dp \u003d self.dbapi.device_profile_get_by_uuid("},{"line_number":32,"context_line":"            self.context, created_dp[\u0027uuid\u0027])"},{"line_number":33,"context_line":"        self.assertEqual(created_dp[\u0027uuid\u0027], queryed_dp[\u0027uuid\u0027])"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_b7bb4b0e","line":31,"updated":"2020-01-18 17:33:06.000000000","message":"Nit: \u0027queried_dp\u0027 here and many places below","commit_id":"d461b01a654f6ae211c9fdcc1e69a404293aaa48"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"cac409b56d0f7f1beb65c1191bd060bdac5abf3a","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def test_get_by_uuid(self):"},{"line_number":30,"context_line":"        created_dp \u003d utils.create_test_device_profile(self.context)"},{"line_number":31,"context_line":"        queryed_dp \u003d self.dbapi.device_profile_get_by_uuid("},{"line_number":32,"context_line":"            self.context, created_dp[\u0027uuid\u0027])"},{"line_number":33,"context_line":"        self.assertEqual(created_dp[\u0027uuid\u0027], queryed_dp[\u0027uuid\u0027])"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_3a2c2248","line":31,"in_reply_to":"3fa7e38b_b7bb4b0e","updated":"2020-01-19 01:40:10.000000000","message":"Done","commit_id":"d461b01a654f6ae211c9fdcc1e69a404293aaa48"}]}
