)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"5f42c8adcb2846a84e8bc5382423d47fb5dfe0b7","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Expand baremetal nodes coverage `GET`"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add `GET` tests for baremetal nodes API."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ia1a58412e52282e3278e92bea765d0837e20e6bd"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"1ae5cdf2_eba12147","line":9,"updated":"2014-06-11 03:44:46.000000000","message":"it should be expand \u0027GET\u0027 tests, I will be easy and good to have little bit more details about changes for example\n- expand get test\n- expand list test with \u0027limit\u0027 param\n- add list detail test.","commit_id":"689aa30b66089244f778b42553a5eccf6bc8ebc6"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"79c5ccd5cd5aff8f13f632529b00c83a345c6f32","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Expand baremetal nodes coverage `GET`"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add `GET` tests for baremetal nodes API."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ia1a58412e52282e3278e92bea765d0837e20e6bd"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"1ae5cdf2_b783f354","line":9,"in_reply_to":"1ae5cdf2_eba12147","updated":"2014-06-11 09:34:18.000000000","message":"Done","commit_id":"689aa30b66089244f778b42553a5eccf6bc8ebc6"}],"tempest/api/baremetal/admin/base.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6bf261dcf7a4d0e7248dfc45919e2d9a566bdad0","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        :return: Created node."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        \"\"\""},{"line_number":102,"context_line":"        extra \u003d extra or {}"},{"line_number":103,"context_line":"        resp, body \u003d cls.client.create_node(chassis_id, cpu_arch\u003dcpu_arch,"},{"line_number":104,"context_line":"                                            cpu_num\u003dcpu_num, storage\u003dstorage,"},{"line_number":105,"context_line":"                                            memory\u003dmemory, driver\u003ddriver,"}],"source_content_type":"text/x-python","patch_set":20,"id":"baada198_2da37401","line":102,"updated":"2014-07-23 04:30:04.000000000","message":"extra already defaults to {} to if extra is None you could not pass it","commit_id":"acbe2a07ebb2791ac04d2875b9a1f0fed78e22b4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6bf261dcf7a4d0e7248dfc45919e2d9a566bdad0","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        resp, body \u003d cls.client.create_node(chassis_id, cpu_arch\u003dcpu_arch,"},{"line_number":104,"context_line":"                                            cpu_num\u003dcpu_num, storage\u003dstorage,"},{"line_number":105,"context_line":"                                            memory\u003dmemory, driver\u003ddriver,"},{"line_number":106,"context_line":"                                            uuid\u003duuid, extra\u003dextra)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        return resp, body"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"baada198_ad0064ac","line":106,"updated":"2014-07-23 04:30:04.000000000","message":"I\u0027m not convinced about using the default \"None\" here.\nIf uuid is not passed, I would not send it through to create_node, so that the default there is used.","commit_id":"acbe2a07ebb2791ac04d2875b9a1f0fed78e22b4"}],"tempest/api/baremetal/admin/test_nodes_negative.py":[{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"0ff2220dfab69b48d66f3928e2f30ee98b6a1143","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        # /detail should only work against collections"},{"line_number":27,"context_line":"        self.assertRaises(exc.NotFound,"},{"line_number":28,"context_line":"                          self.client._list_request,"},{"line_number":29,"context_line":"                          \u0027nodes/%s/detail\u0027 % uuid)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027, \u0027smoke\u0027])"},{"line_number":32,"context_line":"    def test_show_node_malformed_uuid(self):"}],"source_content_type":"text/x-python","patch_set":20,"id":"baada198_8209f796","line":29,"updated":"2014-07-15 09:24:40.000000000","message":"This test may not make sense as \u0027nodes/%s/detail\u0027 is not a valid api.","commit_id":"acbe2a07ebb2791ac04d2875b9a1f0fed78e22b4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6bf261dcf7a4d0e7248dfc45919e2d9a566bdad0","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        # /detail should only work against collections"},{"line_number":27,"context_line":"        self.assertRaises(exc.NotFound,"},{"line_number":28,"context_line":"                          self.client._list_request,"},{"line_number":29,"context_line":"                          \u0027nodes/%s/detail\u0027 % uuid)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027, \u0027smoke\u0027])"},{"line_number":32,"context_line":"    def test_show_node_malformed_uuid(self):"}],"source_content_type":"text/x-python","patch_set":20,"id":"baada198_3b580d8a","line":29,"in_reply_to":"baada198_8209f796","updated":"2014-07-23 04:30:04.000000000","message":"Yes, we usually don\u0027t verify that an API does not exists, unless it\u0027s only available in special conditions. \nI don\u0027t have a strong feeling against this anyways.","commit_id":"acbe2a07ebb2791ac04d2875b9a1f0fed78e22b4"}],"tempest/api/baremetal/base.py":[{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"08813ad39e4342f28145ebbcd95e696ef99625b1","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        :return: Created node."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":"        uuid \u003d uuid or data_utils.rand_uuid()"},{"line_number":105,"context_line":"        extra \u003d extra or {}"},{"line_number":106,"context_line":"        resp, body \u003d cls.client.create_node(chassis_id, cpu_arch\u003dcpu_arch,"},{"line_number":107,"context_line":"                                            cpu_num\u003dcpu_num, storage\u003dstorage,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2B%2FYI%3D","line":104,"updated":"2014-03-10 20:58:11.000000000","message":"These should be default values in the def.","commit_id":"892594888db676c6726b76f1873184aef198cf72"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"d1c26d5570664364ed058ed4a209791314cd621f","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    @classmethod"},{"line_number":88,"context_line":"    @creates(\u0027node\u0027)"},{"line_number":89,"context_line":"    def create_node(cls, chassis_id, cpu_arch\u003d\u0027x86\u0027, cpu_num\u003d8, storage\u003d1024,"},{"line_number":90,"context_line":"                    memory\u003d4096, driver\u003d\u0027fake\u0027, uuid\u003dNone, extra\u003dNone):"},{"line_number":91,"context_line":"        \"\"\""},{"line_number":92,"context_line":"        Wrapper utility for creating test baremetal nodes."},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F9wX8%3D","line":90,"updated":"2014-04-02 10:48:07.000000000","message":"let\u0027s use extra\u003d{}  there.","commit_id":"bb5249109300efeb2f05f2e1491f99ce8d1e2c67"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"d1c26d5570664364ed058ed4a209791314cd621f","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        :return: Created node."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        \"\"\""},{"line_number":104,"context_line":"        extra \u003d extra or {}"},{"line_number":105,"context_line":"        resp, body \u003d cls.client.create_node(chassis_id, cpu_arch\u003dcpu_arch,"},{"line_number":106,"context_line":"                                            cpu_num\u003dcpu_num, storage\u003dstorage,"},{"line_number":107,"context_line":"                                            memory\u003dmemory, driver\u003ddriver,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F9wYM%3D","line":104,"updated":"2014-04-02 10:48:07.000000000","message":"Let\u0027s remove this line and use value \u0027{}\u0027 as default value for extra.","commit_id":"bb5249109300efeb2f05f2e1491f99ce8d1e2c67"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"6b0868f9b8c928fe8d62d2ae1e9bf3db240b4e6f","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    @classmethod"},{"line_number":88,"context_line":"    @creates(\u0027node\u0027)"},{"line_number":89,"context_line":"    def create_node(cls, chassis_id, cpu_arch\u003d\u0027x86\u0027, cpu_num\u003d8, storage\u003d1024,"},{"line_number":90,"context_line":"                    memory\u003d4096, driver\u003d\u0027fake\u0027, uuid\u003dNone, extra\u003d{}):"},{"line_number":91,"context_line":"        \"\"\""},{"line_number":92,"context_line":"        Wrapper utility for creating test baremetal nodes."},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7adec928_66244daf","line":90,"updated":"2014-05-16 12:58:04.000000000","message":"my own curiosity, do we need to pass {} for extra or are we safe if None is passed?","commit_id":"134e8963455c8b7c9df47094907f768d74c3c29b"},{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"204f77c06d810befb5c96fec53c4c6c6a8a81424","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    @classmethod"},{"line_number":88,"context_line":"    @creates(\u0027node\u0027)"},{"line_number":89,"context_line":"    def create_node(cls, chassis_id, cpu_arch\u003d\u0027x86\u0027, cpu_num\u003d8, storage\u003d1024,"},{"line_number":90,"context_line":"                    memory\u003d4096, driver\u003d\u0027fake\u0027, uuid\u003dNone, extra\u003d{}):"},{"line_number":91,"context_line":"        \"\"\""},{"line_number":92,"context_line":"        Wrapper utility for creating test baremetal nodes."},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7adec928_6687edd7","line":90,"in_reply_to":"7adec928_66244daf","updated":"2014-05-16 13:45:00.000000000","message":"Having extra default to a mutable type raises issues as that parameter will carry over state between method calls. The solution is to set the default value of extra to None, and then check if it is none inside the method and then set it to an empty dict","commit_id":"134e8963455c8b7c9df47094907f768d74c3c29b"}],"tempest/api/baremetal/test_nodes.py":[{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"08813ad39e4342f28145ebbcd95e696ef99625b1","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        resp, body \u003d self.client.list_nodes()"},{"line_number":79,"context_line":"        loaded_uuids \u003d [n[\u0027uuid\u0027] for n in body[\u0027nodes\u0027]]"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        self.assertEqual(200, int(resp[\u0027status\u0027]))"},{"line_number":82,"context_line":"        for u in uuids:"},{"line_number":83,"context_line":"            self.assertIn(u, loaded_uuids)"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2B%2FXE%3D","line":81,"updated":"2014-03-10 20:58:11.000000000","message":"This should go right after the call.","commit_id":"892594888db676c6726b76f1873184aef198cf72"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"f2c47c6a4da4380ac9b84174ace408d46494e6df","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                 for i in range(0, 5)]"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        resp, body \u003d self.client.list_nodes()"},{"line_number":79,"context_line":"        self.assertEqual(200, int(resp[\u0027status\u0027]))"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        loaded_uuids \u003d [n[\u0027uuid\u0027] for n in body[\u0027nodes\u0027]]"},{"line_number":82,"context_line":"        for u in uuids:"}],"source_content_type":"text/x-python","patch_set":14,"id":"bad4c104_52d8721d","line":79,"updated":"2014-04-29 15:01:29.000000000","message":"Here you can use  \n\nself.assertEqual(200, resp.status)\n\nas you do it in line 64.","commit_id":"9410ce46d3b6c3af0319b8a0d1d28958e01a7d5f"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"f2c47c6a4da4380ac9b84174ace408d46494e6df","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        resp, body \u003d self.client.list_nodes(limit\u003d\u00272\u0027)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        self.assertEqual(200, int(resp[\u0027status\u0027]))"},{"line_number":93,"context_line":"        self.assertEqual(2, len(body[\u0027nodes\u0027]))"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        next_marker \u003d body[\u0027nodes\u0027][-1][\u0027uuid\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"bad4c104_52ef92b0","line":92,"updated":"2014-04-29 15:01:29.000000000","message":"ditto","commit_id":"9410ce46d3b6c3af0319b8a0d1d28958e01a7d5f"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"f2c47c6a4da4380ac9b84174ace408d46494e6df","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        resp, body \u003d self.client.list_nodes_detail()"},{"line_number":104,"context_line":"        loaded_nodes \u003d [n for n in body[\u0027nodes\u0027] if n[\u0027uuid\u0027] in uuids]"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        self.assertEqual(200, int(resp[\u0027status\u0027]))"},{"line_number":107,"context_line":"        self.assertEqual(2, len(loaded_nodes))"},{"line_number":108,"context_line":"        for node in loaded_nodes:"},{"line_number":109,"context_line":"            self.assertIn(\u0027links\u0027, node)"}],"source_content_type":"text/x-python","patch_set":14,"id":"bad4c104_d23ac235","line":106,"updated":"2014-04-29 15:01:29.000000000","message":"ditto","commit_id":"9410ce46d3b6c3af0319b8a0d1d28958e01a7d5f"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"6b0868f9b8c928fe8d62d2ae1e9bf3db240b4e6f","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        extra \u003d {\u0027key\u0027: \u0027value\u0027}"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        created_node \u003d self.create_node(chassis_id, extra\u003dextra,"},{"line_number":60,"context_line":"                                        **props)[\u0027node\u0027]"},{"line_number":61,"context_line":"        node_id \u003d created_node[\u0027uuid\u0027]"},{"line_number":62,"context_line":"        resp, node \u003d self.client.show_node(node_id)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7adec928_66728dae","line":60,"updated":"2014-05-16 12:58:04.000000000","message":"I think it is common in other clients to return body[\u0027$resource_type\u0027] (for example body[\u0027volume\u0027]) so you don\u0027t have to do it in the test code\n\nMaybe explore how much effort would be needed to conform this if further patchset are needed.","commit_id":"134e8963455c8b7c9df47094907f768d74c3c29b"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"57128d7ef9eaa281133e121599197843eaf91b6d","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":86,"context_line":"    def test_list_nodes_with_limit(self):"},{"line_number":87,"context_line":"        for i in range(0, 5):"},{"line_number":88,"context_line":"            self.create_node(self.chassis[\u0027uuid\u0027])"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        resp, body \u003d self.client.list_nodes(limit\u003d\u00272\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7adec928_1572e3ac","line":87,"updated":"2014-05-15 13:48:03.000000000","message":"I think 3 nodes will be enough.","commit_id":"134e8963455c8b7c9df47094907f768d74c3c29b"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"6b0868f9b8c928fe8d62d2ae1e9bf3db240b4e6f","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":86,"context_line":"    def test_list_nodes_with_limit(self):"},{"line_number":87,"context_line":"        for i in range(0, 5):"},{"line_number":88,"context_line":"            self.create_node(self.chassis[\u0027uuid\u0027])"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        resp, body \u003d self.client.list_nodes(limit\u003d\u00272\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7adec928_866a39b1","line":87,"in_reply_to":"7adec928_1572e3ac","updated":"2014-05-16 12:58:04.000000000","message":"Yep, agree here.","commit_id":"134e8963455c8b7c9df47094907f768d74c3c29b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"b2429d557bdda2b27c76e8c925fa13e3651c913c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        resp, node \u003d self.client.show_node(node_id)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":65,"context_line":"        self.assertEqual(node_id, node[\u0027uuid\u0027])"},{"line_number":66,"context_line":"        self.assertIn(node_id, node[\u0027links\u0027][0][\u0027href\u0027])"},{"line_number":67,"context_line":"        self.assertEqual(2, len(node[\u0027links\u0027]))"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1ae5cdf2_f738253f","line":65,"updated":"2014-06-11 03:40:47.000000000","message":"\u0027uuid\u0027 will be covered by for loop below. so this check can be removed.","commit_id":"689aa30b66089244f778b42553a5eccf6bc8ebc6"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"79c5ccd5cd5aff8f13f632529b00c83a345c6f32","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        resp, node \u003d self.client.show_node(node_id)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":65,"context_line":"        self.assertEqual(node_id, node[\u0027uuid\u0027])"},{"line_number":66,"context_line":"        self.assertIn(node_id, node[\u0027links\u0027][0][\u0027href\u0027])"},{"line_number":67,"context_line":"        self.assertEqual(2, len(node[\u0027links\u0027]))"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1ae5cdf2_771a4b70","line":65,"in_reply_to":"1ae5cdf2_f738253f","updated":"2014-06-11 09:34:18.000000000","message":"Done","commit_id":"689aa30b66089244f778b42553a5eccf6bc8ebc6"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"b2429d557bdda2b27c76e8c925fa13e3651c913c","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        resp, body \u003d self.client.list_nodes_detail()"},{"line_number":104,"context_line":"        loaded_nodes \u003d [n for n in body[\u0027nodes\u0027] if n[\u0027uuid\u0027] in uuids]"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":107,"context_line":"        self.assertEqual(2, len(loaded_nodes))"},{"line_number":108,"context_line":"        for node in loaded_nodes:"},{"line_number":109,"context_line":"            self.assertIn(\u0027links\u0027, node)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1ae5cdf2_6b71910b","line":106,"updated":"2014-06-11 03:40:47.000000000","message":"resp code check should be place before fetching data from body.","commit_id":"689aa30b66089244f778b42553a5eccf6bc8ebc6"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"79c5ccd5cd5aff8f13f632529b00c83a345c6f32","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        resp, body \u003d self.client.list_nodes_detail()"},{"line_number":104,"context_line":"        loaded_nodes \u003d [n for n in body[\u0027nodes\u0027] if n[\u0027uuid\u0027] in uuids]"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        self.assertEqual(200, resp.status)"},{"line_number":107,"context_line":"        self.assertEqual(2, len(loaded_nodes))"},{"line_number":108,"context_line":"        for node in loaded_nodes:"},{"line_number":109,"context_line":"            self.assertIn(\u0027links\u0027, node)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1ae5cdf2_5738efd2","line":106,"in_reply_to":"1ae5cdf2_6b71910b","updated":"2014-06-11 09:34:18.000000000","message":"Done","commit_id":"689aa30b66089244f778b42553a5eccf6bc8ebc6"}],"tempest/api/baremetal/test_nodes_negative.py":[{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"2f24611ed108c6471e1e52e0088862182505f58e","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        self.chassis \u003d self.create_chassis()[\u0027chassis\u0027]"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @test.attr(type\u003d\u0027negative\u0027)"},{"line_number":28,"context_line":"    def test_list_nodes_detail_against_single(self):"},{"line_number":29,"context_line":"        uuid \u003d self.create_node(self.chassis[\u0027uuid\u0027])[\u0027node\u0027][\u0027uuid\u0027]"},{"line_number":30,"context_line":"        # /detail should only work against collections"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUX%2F%2FBik%3D","line":27,"updated":"2014-02-17 15:34:50.000000000","message":"These tests will not run in smoke, gate and the non voting ironic jobs looks smoke.","commit_id":"373474a9b9b8e5e16cf23a336a53b470fd7432b8"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"d37c9cd243f523b780edec8e4c8972568bb6c13c","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        self.chassis \u003d self.create_chassis()[\u0027chassis\u0027]"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @test.attr(type\u003d[\u0027nagative\u0027, \u0027smoke\u0027])"},{"line_number":28,"context_line":"    def test_list_nodes_detail_against_single(self):"},{"line_number":29,"context_line":"        uuid \u003d self.create_node(self.chassis[\u0027uuid\u0027])[\u0027node\u0027][\u0027uuid\u0027]"},{"line_number":30,"context_line":"        # /detail should only work against collections"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F%2BAZM%3D","line":27,"updated":"2014-03-31 15:43:52.000000000","message":"\u0027negative\u0027, same for others in this file","commit_id":"bb5249109300efeb2f05f2e1491f99ce8d1e2c67"},{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"6d7504c57ffdbed8529aa0a3128fb28e230221d7","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from tempest import test"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class TestNodesNegative(base.BaseBaremetalTest):"},{"line_number":20,"context_line":"    \"\"\"Negative tests for nodes.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F9PHk%3D","line":19,"updated":"2014-04-07 18:50:33.000000000","message":"It seems like a data driven approach with the input value and an expected result would be easier than explicitly defining each case as a concrete test","commit_id":"7b0bf8dc45534b98f600d1ecb1fda2531c49f066"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"23cfe8a06e4de7bc33220b2462c2b28b4b47fb7a","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from tempest import test"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class TestNodesNegative(base.BaseBaremetalTest):"},{"line_number":20,"context_line":"    \"\"\"Negative tests for nodes.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F9PBo%3D","line":19,"in_reply_to":"AAAAWH%2F9PHk%3D","updated":"2014-04-07 19:05:44.000000000","message":"Please look at [1] @afazekas comment on L27.\n[1] https://review.openstack.org/#/c/71476/8/tempest/api/baremetal/test_nodes_negative.py","commit_id":"7b0bf8dc45534b98f600d1ecb1fda2531c49f066"},{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"6d7504c57ffdbed8529aa0a3128fb28e230221d7","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        self.chassis \u003d self.create_chassis()[\u0027chassis\u0027]"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @test.attr(type\u003d[\u0027nagative\u0027, \u0027smoke\u0027])"},{"line_number":28,"context_line":"    def test_list_nodes_detail_against_single(self):"},{"line_number":29,"context_line":"        uuid \u003d self.create_node(self.chassis[\u0027uuid\u0027])[\u0027node\u0027][\u0027uuid\u0027]"},{"line_number":30,"context_line":"        # /detail should only work against collections"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F9PIQ%3D","line":27,"updated":"2014-04-07 18:50:33.000000000","message":"Typo here. This should be negative","commit_id":"7b0bf8dc45534b98f600d1ecb1fda2531c49f066"},{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"6d7504c57ffdbed8529aa0a3128fb28e230221d7","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                          self.client._list_request,"},{"line_number":33,"context_line":"                          \u0027nodes/%s/detail\u0027 % uuid)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @test.attr(type\u003d[\u0027nagative\u0027, \u0027smoke\u0027])"},{"line_number":36,"context_line":"    def test_show_node_malformed_uuid(self):"},{"line_number":37,"context_line":"        self.assertRaises(exc.BadRequest, self.client.show_node,"},{"line_number":38,"context_line":"                          uuid\u003d\u0027malformed:uuid\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F9PJQ%3D","line":35,"updated":"2014-04-07 18:50:33.000000000","message":"Typo here. This should be negative","commit_id":"7b0bf8dc45534b98f600d1ecb1fda2531c49f066"},{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"6d7504c57ffdbed8529aa0a3128fb28e230221d7","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.assertRaises(exc.BadRequest, self.client.show_node,"},{"line_number":38,"context_line":"                          uuid\u003d\u0027malformed:uuid\u0027)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @test.attr(type\u003d[\u0027nagative\u0027, \u0027smoke\u0027])"},{"line_number":41,"context_line":"    def test_show_node_nonexistent_uuid(self):"},{"line_number":42,"context_line":"        self.assertRaises(exc.NotFound, self.client.show_node,"},{"line_number":43,"context_line":"                          uuid\u003ddata_utils.rand_uuid())"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAWH%2F9PJE%3D","line":40,"updated":"2014-04-07 18:50:33.000000000","message":"Typo here. This should be negative","commit_id":"7b0bf8dc45534b98f600d1ecb1fda2531c49f066"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"f2c47c6a4da4380ac9b84174ace408d46494e6df","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class TestNodesNegative(base.BaseBaremetalTest):"},{"line_number":20,"context_line":"    \"\"\"Negative tests for nodes.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def setUp(self):"},{"line_number":23,"context_line":"        super(TestNodesNegative, self).setUp()"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        self.chassis \u003d self.create_chassis()[\u0027chassis\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"bad4c104_d881034c","line":22,"updated":"2014-04-29 15:01:29.000000000","message":"Why do you create chassis in setUp method? You use chassis in the only test \"test_list_nodes_detail_against_single\", however, setUp method will be executed for each test. You can create chassis either in setUpClass or in \"test_list_nodes_detail_against_single\" test.","commit_id":"9410ce46d3b6c3af0319b8a0d1d28958e01a7d5f"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"04b4f7d08ee090db60a1becb4f77b6d219816579","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class TestNodesNegative(base.BaseBaremetalTest):"},{"line_number":20,"context_line":"    \"\"\"Negative tests for nodes.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    @test.attr(type\u003d[\u0027nagative\u0027, \u0027smoke\u0027])"},{"line_number":23,"context_line":"    def test_list_nodes_detail_against_single(self):"},{"line_number":24,"context_line":"        chassis \u003d self.create_chassis()[\u0027chassis\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"1ae5cdf2_596cd9d0","line":21,"updated":"2014-06-24 22:55:36.000000000","message":"typo on all three tests. s/nagative/negative/","commit_id":"7a301055462f9d401c0d772583f468066a293c54"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"efaafbb6b354a8f6471e9d17eb63ab9d0c3b6002","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class TestNodesNegative(base.BaseBaremetalTest):"},{"line_number":20,"context_line":"    \"\"\"Negative tests for nodes.\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    @test.attr(type\u003d[\u0027nagative\u0027, \u0027smoke\u0027])"},{"line_number":23,"context_line":"    def test_list_nodes_detail_against_single(self):"},{"line_number":24,"context_line":"        chassis \u003d self.create_chassis()[\u0027chassis\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_56e82110","line":21,"in_reply_to":"1ae5cdf2_596cd9d0","updated":"2014-07-02 08:36:56.000000000","message":"Done. Thanks for Review @Deva!!! :)","commit_id":"7a301055462f9d401c0d772583f468066a293c54"}],"tempest/services/baremetal/base.py":[{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"08813ad39e4342f28145ebbcd95e696ef99625b1","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        prefix \u003d self.uri_prefix if not permanent else \u0027\u0027"},{"line_number":76,"context_line":"        param \u003d \u0027\u0027"},{"line_number":77,"context_line":"        if kw:"},{"line_number":78,"context_line":"            param \u003d \u0027?\u0027 + \u0027\u0026\u0027.join("},{"line_number":79,"context_line":"                [key + \u0027\u003d\u0027 + value for key, value in six.iteritems(kw)])"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        return \u0027{pref}/{res}{uuid}{param}\u0027.format(pref\u003dprefix,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2B%2FS0%3D","line":78,"updated":"2014-03-10 20:58:11.000000000","message":"Please use\n\nparam \u003d \u0027?%s\u0027 % urllib.urlencode(kw)","commit_id":"892594888db676c6726b76f1873184aef198cf72"}],"tempest/services/baremetal/v1/base_v1.py":[{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"08813ad39e4342f28145ebbcd95e696ef99625b1","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                \u0027driver\u0027: kwargs.get(\u0027driver\u0027, \u0027fake\u0027),"},{"line_number":101,"context_line":"                \u0027extra\u0027: kwargs.get(\u0027extra\u0027, {}),"},{"line_number":102,"context_line":"                \u0027uuid\u0027: kwargs.get(\u0027uuid\u0027,"},{"line_number":103,"context_line":"                                   \u00271be26c0b-03f2-4d2e-ae87-c02d7f33c781\u0027)}"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        return self._create_request(\u0027nodes\u0027, \u0027node\u0027, node)"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2B%2FRk%3D","line":103,"updated":"2014-03-10 20:58:11.000000000","message":"Is this supposed to be some uuid that does not exist? Please use \n\ntempest.common.utils.data_utils.rand_uuid","commit_id":"892594888db676c6726b76f1873184aef198cf72"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6bf261dcf7a4d0e7248dfc45919e2d9a566bdad0","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        :param cpu_num: Number of CPUs. Default: 8."},{"line_number":114,"context_line":"        :param storage: Disk size. Default: 1024."},{"line_number":115,"context_line":"        :param memory: Available RAM. Default: 4096."},{"line_number":116,"context_line":"        :param driver: Driver name. Default: \"fake\""},{"line_number":117,"context_line":"        :return: A tuple with the server response and the created node."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"baada198_4df6e8fa","line":116,"updated":"2014-07-23 04:30:04.000000000","message":"Can you update the docstring here?","commit_id":"acbe2a07ebb2791ac04d2875b9a1f0fed78e22b4"}]}
