)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"57d8114d9c256cc7bd16d34a413d72b56c334561","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Maho Koshiya \u003ckoshiya.maho@po.ntts.co.jp\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-02-05 11:25:13 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add tests of port_id and fixed_ips in the attach interfaces nova API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The attach interfaces API of nova does not specify port_id or"},{"line_number":10,"context_line":"fixed_ips in tempests."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"5a5ae5dd_e9b14d48","line":7,"range":{"start_line":7,"start_character":21,"end_line":7,"end_character":35},"updated":"2016-02-05 03:26:38.000000000","message":"This \"and fixed_ips\" is unnecessary now from the commit message.","commit_id":"c35e1ff5ca7df48975f43618d29f507012d062be"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"9b6a74479cb97d3d8ed87d1fed783a7a7c4cdeb9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Maho Koshiya \u003ckoshiya.maho@po.ntts.co.jp\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-02-05 11:25:13 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add tests of port_id and fixed_ips in the attach interfaces nova API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The attach interfaces API of nova does not specify port_id or"},{"line_number":10,"context_line":"fixed_ips in tempests."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"5a5ae5dd_6476e4a5","line":7,"range":{"start_line":7,"start_character":21,"end_line":7,"end_character":35},"in_reply_to":"5a5ae5dd_e9b14d48","updated":"2016-02-05 04:09:00.000000000","message":"Done","commit_id":"c35e1ff5ca7df48975f43618d29f507012d062be"}],"tempest/api/compute/servers/test_attach_interfaces.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c70d27dee1ee511ba5439a1094f25eb9d18106a2","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def setup_clients(cls):"},{"line_number":46,"context_line":"        super(AttachInterfacesTestJSON, cls).setup_clients()"},{"line_number":47,"context_line":"        cls.client \u003d cls.os.interfaces_client"},{"line_number":48,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":49,"context_line":"        cls.ports_client \u003d cls.os.ports_client"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def wait_for_interface_status(self, server, port_id, status):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_72d85e1e","line":48,"updated":"2015-12-17 05:38:06.000000000","message":"I couldn\u0027t find where networks_client was used in added codes.\nThis line need not be added.","commit_id":"4f7f1fbd69c0cdfabeec4f2a6f9df8fad5d9e045"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"850fd496663878db8c8ad5b3fe91076b621da98a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def setup_clients(cls):"},{"line_number":46,"context_line":"        super(AttachInterfacesTestJSON, cls).setup_clients()"},{"line_number":47,"context_line":"        cls.client \u003d cls.os.interfaces_client"},{"line_number":48,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":49,"context_line":"        cls.ports_client \u003d cls.os.ports_client"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def wait_for_interface_status(self, server, port_id, status):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_b9c46692","line":48,"in_reply_to":"3a7e1126_72d85e1e","updated":"2015-12-17 07:10:15.000000000","message":"Done","commit_id":"4f7f1fbd69c0cdfabeec4f2a6f9df8fad5d9e045"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"734e11ebabe38964cd81952d999fc8cff876318e","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        fixed_ips \u003d [{\u0027ip_address\u0027: ip}]"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        # not specify a network_id, it results in BadRequest"},{"line_number":133,"context_line":"        self.assertRaises(lib_exc.BadRequest,"},{"line_number":134,"context_line":"                          self.client.create_interface,"},{"line_number":135,"context_line":"                          server[\u0027id\u0027], fixed_ips\u003dfixed_ips)"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_fde18bd1","line":133,"updated":"2016-01-18 19:04:50.000000000","message":"I think we should separate this check out into it\u0027s own test method","commit_id":"40dcfc17a7e10a36fbbbe5e9e02923f7e63208a9"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"bada6bd1f0a1d3ad6d23d4351688cb877d9ee55a","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        fixed_ips \u003d [{\u0027ip_address\u0027: ip}]"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        # not specify a network_id, it results in BadRequest"},{"line_number":133,"context_line":"        self.assertRaises(lib_exc.BadRequest,"},{"line_number":134,"context_line":"                          self.client.create_interface,"},{"line_number":135,"context_line":"                          server[\u0027id\u0027], fixed_ips\u003dfixed_ips)"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_466aeab4","line":133,"in_reply_to":"ba63e191_fde18bd1","updated":"2016-01-20 07:27:53.000000000","message":"Done","commit_id":"40dcfc17a7e10a36fbbbe5e9e02923f7e63208a9"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"26c85ec1ed0d3c22870209a0bb496d0116cda2ab","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        ip \u003d port[\u0027port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":222,"context_line":"        fixed_ips \u003d [{\u0027ip_address\u0027: ip}]"},{"line_number":223,"context_line":"        # not specify a network_id, it results in BadRequest"},{"line_number":224,"context_line":"        self.assertRaises(lib_exc.BadRequest,"},{"line_number":225,"context_line":"                          self.client.create_interface,"},{"line_number":226,"context_line":"                          server[\u0027id\u0027], fixed_ips\u003dfixed_ips)"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_5068c2ba","line":224,"updated":"2016-01-20 12:46:05.000000000","message":"This is a negative test. We don\u0027t do negative test in Tempest anymore. Those kind of tests are best places in Neutron repository.","commit_id":"0e7f1c6f552e0ae4798c6c6928f27d090870549d"},{"author":{"_account_id":13454,"name":"Alexander Gubanov","email":"ogubanov@mirantis.com","username":"hop"},"change_message_id":"2191131375ccdc832ff7a0bf2c6199f046bba06e","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        ip \u003d port[\u0027port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":222,"context_line":"        fixed_ips \u003d [{\u0027ip_address\u0027: ip}]"},{"line_number":223,"context_line":"        # not specify a network_id, it results in BadRequest"},{"line_number":224,"context_line":"        self.assertRaises(lib_exc.BadRequest,"},{"line_number":225,"context_line":"                          self.client.create_interface,"},{"line_number":226,"context_line":"                          server[\u0027id\u0027], fixed_ips\u003dfixed_ips)"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_56419a38","line":224,"in_reply_to":"9a68dd71_5068c2ba","updated":"2016-01-20 13:21:22.000000000","message":"Jordan Pittier, \n\u003e We don\u0027t do negative test in Tempest anymore\n\ncould you please describe why ?","commit_id":"0e7f1c6f552e0ae4798c6c6928f27d090870549d"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"4ef4373e72e931504f67ebfcb5000f99396dc0ce","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        ip \u003d port[\u0027port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":222,"context_line":"        fixed_ips \u003d [{\u0027ip_address\u0027: ip}]"},{"line_number":223,"context_line":"        # not specify a network_id, it results in BadRequest"},{"line_number":224,"context_line":"        self.assertRaises(lib_exc.BadRequest,"},{"line_number":225,"context_line":"                          self.client.create_interface,"},{"line_number":226,"context_line":"                          server[\u0027id\u0027], fixed_ips\u003dfixed_ips)"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_de049316","line":224,"in_reply_to":"9a68dd71_56419a38","updated":"2016-01-21 06:03:17.000000000","message":"I tended to agree with Jordan\u0027s point new negative tests should be implemented with external plugin in each project own repo.\n\nBut after discussing this with mtreinish, we can accept the negative tests which are implemented with \"the negative test framework\".\n\nThe tempest doc clarifies that already on http://docs.openstack.org/developer/tempest/HACKING.html#negative-tests\n\nAnyways, I don\u0027t prefer a negative tests in test module without \"_negative.py\" on the file name.\nSo if necessary to implement them, please put them in test_attach_interfaces_negative.py or some file.","commit_id":"0e7f1c6f552e0ae4798c6c6928f27d090870549d"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"0fb5e16473fb36a4e4b349bc4bec814399e0d7c0","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        ip \u003d port[\u0027port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":222,"context_line":"        fixed_ips \u003d [{\u0027ip_address\u0027: ip}]"},{"line_number":223,"context_line":"        # not specify a network_id, it results in BadRequest"},{"line_number":224,"context_line":"        self.assertRaises(lib_exc.BadRequest,"},{"line_number":225,"context_line":"                          self.client.create_interface,"},{"line_number":226,"context_line":"                          server[\u0027id\u0027], fixed_ips\u003dfixed_ips)"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_7e7322b2","line":224,"in_reply_to":"9a68dd71_de049316","updated":"2016-01-21 08:47:22.000000000","message":"Thank you, everyone.\nI created a new file of negative test, and put method of test_create_interface_without_network_id in that file.","commit_id":"0e7f1c6f552e0ae4798c6c6928f27d090870549d"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"e1c932de24eb79bfbaca3cf27e4a6241e90662b7","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        network_id \u003d ifs[0][\u0027net_id\u0027]"},{"line_number":126,"context_line":"        port \u003d self.ports_client.create_port(network_id\u003dnetwork_id)"},{"line_number":127,"context_line":"        port_id \u003d port[\u0027port\u0027][\u0027id\u0027]"},{"line_number":128,"context_line":"        self.ports_client.delete_port(port_id)"},{"line_number":129,"context_line":"        ip \u003d port[\u0027port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":130,"context_line":"        fixed_ips \u003d [{\u0027ip_address\u0027: ip}]"},{"line_number":131,"context_line":"        iface \u003d self.client.create_interface("},{"line_number":132,"context_line":"            server[\u0027id\u0027], net_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_5dc1b62d","line":129,"range":{"start_line":128,"start_character":8,"end_line":129,"end_character":55},"updated":"2016-02-03 07:09:44.000000000","message":"This delete_port is just for allocating valid ip-address, right?\n\nTo be honest, I don\u0027t like this way. a little tricky.\n\nHow about separating the first part(by_port_id) and the second part to 2 patches ?\nAt this time, I cannot find the better way about the second part. but the first part is good for me, and I feel we can merge it soon.","commit_id":"f196a73d4766d6532e510e3d2a4b85bc85990bd5"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"23228e7dcf029015488510ed1696543d18a7ddbd","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        network_id \u003d ifs[0][\u0027net_id\u0027]"},{"line_number":126,"context_line":"        port \u003d self.ports_client.create_port(network_id\u003dnetwork_id)"},{"line_number":127,"context_line":"        port_id \u003d port[\u0027port\u0027][\u0027id\u0027]"},{"line_number":128,"context_line":"        self.ports_client.delete_port(port_id)"},{"line_number":129,"context_line":"        ip \u003d port[\u0027port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":130,"context_line":"        fixed_ips \u003d [{\u0027ip_address\u0027: ip}]"},{"line_number":131,"context_line":"        iface \u003d self.client.create_interface("},{"line_number":132,"context_line":"            server[\u0027id\u0027], net_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_7b9c470f","line":129,"range":{"start_line":128,"start_character":8,"end_line":129,"end_character":55},"in_reply_to":"5a5ae5dd_5dc1b62d","updated":"2016-02-05 02:32:29.000000000","message":"\u003e This delete_port is just for allocating valid ip-address, right?\n\nYes.\nSo, I will move the second part to another new patch.","commit_id":"f196a73d4766d6532e510e3d2a4b85bc85990bd5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"605c512ccc59a966a6aa196e0bd4ad94594e720d","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        iface \u003d self.wait_for_interface_status("},{"line_number":119,"context_line":"            server[\u0027id\u0027], iface[\u0027port_id\u0027], \u0027ACTIVE\u0027)"},{"line_number":120,"context_line":"        self._check_interface(iface, port_id\u003dport_id)"},{"line_number":121,"context_line":"        self.addCleanup(self.ports_client.delete_port, port_id)"},{"line_number":122,"context_line":"        return iface"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _test_show_interface(self, server, ifs):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_35e0d395","line":121,"range":{"start_line":121,"start_character":8,"end_line":121,"end_character":63},"updated":"2016-02-08 03:17:40.000000000","message":"Sorry, I missed one point.\n\nThis addCleanup should be moved to line 115 for avoiding the remaining port if an error happens at lines 116-120.","commit_id":"16e15db03ada0a6e9809fb8bd995c93f07505793"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"933b7b4f3f4a860d05d2335a0bee7bdca71cd2f4","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        iface \u003d self.wait_for_interface_status("},{"line_number":119,"context_line":"            server[\u0027id\u0027], iface[\u0027port_id\u0027], \u0027ACTIVE\u0027)"},{"line_number":120,"context_line":"        self._check_interface(iface, port_id\u003dport_id)"},{"line_number":121,"context_line":"        self.addCleanup(self.ports_client.delete_port, port_id)"},{"line_number":122,"context_line":"        return iface"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _test_show_interface(self, server, ifs):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_2b814ffb","line":121,"range":{"start_line":121,"start_character":8,"end_line":121,"end_character":63},"in_reply_to":"5a5ae5dd_35e0d395","updated":"2016-02-08 06:18:39.000000000","message":"I implemented \"addCleanup\" after getting port_id.","commit_id":"16e15db03ada0a6e9809fb8bd995c93f07505793"}]}
