)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"b8f55c4dc42d306a6009ae91a073786fd79bfd1b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add NeutronNetworks.create_and_show_ports scenario"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This scenario create and show a given number of ports."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Id3e8acbc2c9b5ae77efd95d4a56b118b82ef91a8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1a1ced50_b2a539a3","line":10,"updated":"2017-03-21 11:12:21.000000000","message":"Pls add `Co-Authored-By: zhangzhang \u003czhangzh.fnst@cn.fujitsu.com\u003e`","commit_id":"86c49bff8ea02c29d9d8cebf92b7c592584cacb3"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"2f23591d69ea2f054c09bf3c05500138184e33c7","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add NeutronNetworks.create_and_show_ports scenario"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This scenario create and show a given number of ports."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Id3e8acbc2c9b5ae77efd95d4a56b118b82ef91a8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1a1ced50_e89cf4c1","line":10,"in_reply_to":"1a1ced50_b2a539a3","updated":"2017-03-22 09:16:25.000000000","message":"Done","commit_id":"86c49bff8ea02c29d9d8cebf92b7c592584cacb3"}],"rally-jobs/rally-neutron.yaml":[{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"16c7a72b491f988afe860018f6d697a43848cbde","unresolved":false,"context_lines":[{"line_number":205,"context_line":"      context:"},{"line_number":206,"context_line":"        users:"},{"line_number":207,"context_line":"          tenants: {{smoke or 3}}"},{"line_number":208,"context_line":"          users_per_tenant: {{smoke or 2}}"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"  NeutronNetworks.create_and_show_ports:"},{"line_number":211,"context_line":"    -"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3a71b18c_150dd5e7","line":208,"range":{"start_line":208,"start_character":1,"end_line":208,"end_character":42},"updated":"2016-12-06 06:01:18.000000000","message":"please add sla","commit_id":"e3e5068e7602ec5ec4265181129748fed57ba2b4"}],"rally/plugins/openstack/scenarios/neutron/network.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b8745a713d0b5da2028803afc24f7df59ddc2ef6","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        :param ports_per_network: int, number of ports for one network"},{"line_number":295,"context_line":"        \"\"\""},{"line_number":296,"context_line":"        network \u003d self._get_or_create_network(network_create_args)"},{"line_number":297,"context_line":"        for i in range(ports_per_network):"},{"line_number":298,"context_line":"            port \u003d self._create_port(network, port_create_args or {})"},{"line_number":299,"context_line":"            self._show_port(port)"},{"line_number":300,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_e48b031d","line":297,"updated":"2016-10-17 17:06:52.000000000","message":"please wrap it into AtomicAction https://github.com/openstack/rally/blob/master/rally/plugins/openstack/scenarios/murano/environments.py#L73\ncreate_port also should be a bit changed. See the last argument by the link.\n\nNot related to you patch(just an idea for the future contribution), just to prevent you wonder question: yes, there are many pretty like snippets in this file. They all should be change by the same logic","commit_id":"9038982cf2b0c6eda70f70ae5beb59e47ad83a09"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"e61579a0d36a1f6db78808db4fc7c6836e6a7e2c","unresolved":false,"context_lines":[{"line_number":286,"context_line":"class CreateAndShowPorts(utils.NeutronScenario):"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def run(self, network_create_args\u003dNone,"},{"line_number":289,"context_line":"            port_create_args\u003dNone, ports_per_network\u003dNone):"},{"line_number":290,"context_line":"        \"\"\"Create a given number of ports and show all created ports."},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        Measure the \"neutron port-create\" and \"neutron port-show\" commands"}],"source_content_type":"text/x-python","patch_set":2,"id":"da6895a0_c55f703f","line":289,"range":{"start_line":289,"start_character":35,"end_line":289,"end_character":57},"updated":"2016-10-26 05:48:36.000000000","message":"I think the ports_per_network\u003dNone is incorrent,the type of the value is integer.so I suggest ports_per_network\u003d2,Do you think so?","commit_id":"6cd8e12616fc45d764393a480a38d6b1adde484b"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"e61579a0d36a1f6db78808db4fc7c6836e6a7e2c","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def run(self, network_create_args\u003dNone,"},{"line_number":289,"context_line":"            port_create_args\u003dNone, ports_per_network\u003dNone):"},{"line_number":290,"context_line":"        \"\"\"Create a given number of ports and show all created ports."},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        Measure the \"neutron port-create\" and \"neutron port-show\" commands"},{"line_number":293,"context_line":"        performance."}],"source_content_type":"text/x-python","patch_set":2,"id":"da6895a0_25558c1c","line":290,"range":{"start_line":290,"start_character":11,"end_line":290,"end_character":41},"updated":"2016-10-26 05:48:36.000000000","message":"please change it:Create given number of ports","commit_id":"6cd8e12616fc45d764393a480a38d6b1adde484b"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"e61579a0d36a1f6db78808db4fc7c6836e6a7e2c","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def run(self, network_create_args\u003dNone,"},{"line_number":289,"context_line":"            port_create_args\u003dNone, ports_per_network\u003dNone):"},{"line_number":290,"context_line":"        \"\"\"Create a given number of ports and show all created ports."},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        Measure the \"neutron port-create\" and \"neutron port-show\" commands"},{"line_number":293,"context_line":"        performance."}],"source_content_type":"text/x-python","patch_set":2,"id":"da6895a0_651ce477","line":290,"range":{"start_line":290,"start_character":46,"end_line":290,"end_character":69},"updated":"2016-10-26 05:48:36.000000000","message":"please change it:show per created port","commit_id":"6cd8e12616fc45d764393a480a38d6b1adde484b"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"e61579a0d36a1f6db78808db4fc7c6836e6a7e2c","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        :param network_create_args: dict, POST /v2.0/networks request"},{"line_number":296,"context_line":"                                    options. Deprecated."},{"line_number":297,"context_line":"        :param port_create_args: dict, POST /v2.0/ports request options"},{"line_number":298,"context_line":"        :param ports_per_network: int, number of ports for one network"},{"line_number":299,"context_line":"        \"\"\""},{"line_number":300,"context_line":"        network \u003d self._get_or_create_network(network_create_args)"},{"line_number":301,"context_line":"        with atomic.ActionTimer(self, \"neutron.create_port\"):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da6895a0_c52690cd","line":298,"range":{"start_line":298,"start_character":39,"end_line":298,"end_character":70},"updated":"2016-10-26 05:48:36.000000000","message":"please change it:number of ports for per network","commit_id":"6cd8e12616fc45d764393a480a38d6b1adde484b"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"3dd970f2bc96d515fffcc2f146fdd7a8c7750c5f","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        :param port_create_args: dict, POST /v2.0/ports request options"},{"line_number":298,"context_line":"        :param ports_per_network: int, number of ports for one network"},{"line_number":299,"context_line":"        \"\"\""},{"line_number":300,"context_line":"        network \u003d self._get_or_create_network(network_create_args)"},{"line_number":301,"context_line":"        with atomic.ActionTimer(self, \"neutron.create_port\"):"},{"line_number":302,"context_line":"            for i in range(ports_per_network):"},{"line_number":303,"context_line":"                port \u003d self._create_port(network, port_create_args or {})"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_d407ff15","line":300,"range":{"start_line":300,"start_character":23,"end_line":300,"end_character":66},"updated":"2017-01-22 17:54:22.000000000","message":"I think this function have a problem. Because this function choose a net by random(). So we could not create a number of ports for per network possibly:(. If you have some good ideas, pls help us to fix it.","commit_id":"6cd8e12616fc45d764393a480a38d6b1adde484b"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"9117c95e305590b9ed7e83d01dbfb17964d1e8d6","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        :param ports_per_network: int, number of ports for one network"},{"line_number":325,"context_line":"        \"\"\""},{"line_number":326,"context_line":"        network \u003d self._get_or_create_network(network_create_args)"},{"line_number":327,"context_line":"        with atomic.ActionTimer(self, \"neutron.create_port\"):"},{"line_number":328,"context_line":"            for i in range(ports_per_network):"},{"line_number":329,"context_line":"                port \u003d self._create_port(network, port_create_args)"},{"line_number":330,"context_line":"                self._show_port(port)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_38d513b9","line":327,"updated":"2016-11-14 10:53:47.000000000","message":"It is important to view explicit number of created ports in reports:\n\n with atomic.ActionTimer(self, \"neutron.create_and_show_%i_ports\" % ports_per_network):","commit_id":"39891ee30d33abcbac0cebbab20e251450a5b99b"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"16c7a72b491f988afe860018f6d697a43848cbde","unresolved":false,"context_lines":[{"line_number":312,"context_line":"class CreateAndShowPorts(utils.NeutronScenario):"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def run(self, network_create_args\u003dNone,"},{"line_number":315,"context_line":"            port_create_args\u003dNone, ports_per_network\u003dNone):"},{"line_number":316,"context_line":"        \"\"\"Create a given number of ports and show all created ports."},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        Measure the \"neutron port-create\" and \"neutron port-show\" commands"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_15f15501","line":315,"range":{"start_line":315,"start_character":35,"end_line":315,"end_character":57},"updated":"2016-12-06 06:01:18.000000000","message":"please change default value of ports_per_network to 1","commit_id":"e3e5068e7602ec5ec4265181129748fed57ba2b4"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"16c7a72b491f988afe860018f6d697a43848cbde","unresolved":false,"context_lines":[{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def run(self, network_create_args\u003dNone,"},{"line_number":315,"context_line":"            port_create_args\u003dNone, ports_per_network\u003dNone):"},{"line_number":316,"context_line":"        \"\"\"Create a given number of ports and show all created ports."},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        Measure the \"neutron port-create\" and \"neutron port-show\" commands"},{"line_number":319,"context_line":"        performance."}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_95bc8507","line":316,"range":{"start_line":316,"start_character":46,"end_line":316,"end_character":68},"updated":"2016-12-06 06:01:18.000000000","message":"please change \"show all created ports\" to \"show created ports in trun\"","commit_id":"e3e5068e7602ec5ec4265181129748fed57ba2b4"},{"author":{"_account_id":19011,"name":"Anton Studenov","email":"tohin1332@gmail.com","username":"tohin"},"change_message_id":"ff1604045a84f98c4dad34a09af1ef82564159e0","unresolved":false,"context_lines":[{"line_number":345,"context_line":"                                ports_per_network):"},{"line_number":346,"context_line":"            for i in range(ports_per_network):"},{"line_number":347,"context_line":"                port \u003d self._create_port(network, port_create_args)"},{"line_number":348,"context_line":"                self.assertTrue(port)"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"                port_info \u003d self._show_port(port)"},{"line_number":351,"context_line":"                self.assertEqual(port[\"port\"][\"id\"], port_info[\"port\"][\"id\"])"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_0c40e9a4","line":348,"range":{"start_line":348,"start_character":36,"end_line":348,"end_character":37},"updated":"2017-03-20 10:26:56.000000000","message":"Please add assert message","commit_id":"86c49bff8ea02c29d9d8cebf92b7c592584cacb3"},{"author":{"_account_id":19011,"name":"Anton Studenov","email":"tohin1332@gmail.com","username":"tohin"},"change_message_id":"ff1604045a84f98c4dad34a09af1ef82564159e0","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                self.assertTrue(port)"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"                port_info \u003d self._show_port(port)"},{"line_number":351,"context_line":"                self.assertEqual(port[\"port\"][\"id\"], port_info[\"port\"][\"id\"])"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"@validation.required_parameters(\"ports_per_network\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_8c1219b3","line":351,"range":{"start_line":351,"start_character":76,"end_line":351,"end_character":77},"updated":"2017-03-20 10:26:56.000000000","message":"Please add assert message","commit_id":"86c49bff8ea02c29d9d8cebf92b7c592584cacb3"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"3b6de71331d0a1f83a9864df1676cf865cdb7044","unresolved":false,"context_lines":[{"line_number":328,"context_line":"                    name\u003d\"NeutronNetworks.create_and_show_ports\")"},{"line_number":329,"context_line":"class CreateAndShowPorts(utils.NeutronScenario):"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def run(self, network_create_args\u003dNone,"},{"line_number":332,"context_line":"            port_create_args\u003dNone, ports_per_network\u003d1):"},{"line_number":333,"context_line":"        \"\"\"Create a given number of ports and show created ports in trun."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        Measure the \"neutron port-create\" and \"neutron port-show\" commands"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a1ced50_12028d0b","line":332,"range":{"start_line":331,"start_character":18,"end_line":332,"end_character":33},"updated":"2017-03-21 11:08:02.000000000","message":"If user do not transmit anything there, we will have an error while creating network and port. Let\u0027s add appropriate checks like:\n\n    if network_create_args is None:\n        network_create_args \u003d {}\n    if port_create_args is None:\n        port_create_args \u003d {}","commit_id":"8098bf283b9c94d671ab765c94fdaf2fb0df7a80"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"cd835d0a8f9aa8e282107e0d8b9c377fa8a32bd7","unresolved":false,"context_lines":[{"line_number":328,"context_line":"                    name\u003d\"NeutronNetworks.create_and_show_ports\")"},{"line_number":329,"context_line":"class CreateAndShowPorts(utils.NeutronScenario):"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def run(self, network_create_args\u003dNone,"},{"line_number":332,"context_line":"            port_create_args\u003dNone, ports_per_network\u003d1):"},{"line_number":333,"context_line":"        \"\"\"Create a given number of ports and show created ports in trun."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        Measure the \"neutron port-create\" and \"neutron port-show\" commands"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a1ced50_75745d67","line":332,"range":{"start_line":331,"start_character":18,"end_line":332,"end_character":33},"in_reply_to":"1a1ced50_12028d0b","updated":"2017-03-22 09:12:00.000000000","message":"Done","commit_id":"8098bf283b9c94d671ab765c94fdaf2fb0df7a80"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"3b6de71331d0a1f83a9864df1676cf865cdb7044","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        performance."},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"        :param network_create_args: dict, POST /v2.0/networks request"},{"line_number":339,"context_line":"                                    options. Deprecated."},{"line_number":340,"context_line":"        :param port_create_args: dict, POST /v2.0/ports request options"},{"line_number":341,"context_line":"        :param ports_per_network: int, number of ports for one network"},{"line_number":342,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a1ced50_923e7dd8","line":339,"range":{"start_line":339,"start_character":45,"end_line":339,"end_character":56},"updated":"2017-03-21 11:08:02.000000000","message":"It is new scenario, why we have deprecated argument?","commit_id":"8098bf283b9c94d671ab765c94fdaf2fb0df7a80"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"cd835d0a8f9aa8e282107e0d8b9c377fa8a32bd7","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        performance."},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"        :param network_create_args: dict, POST /v2.0/networks request"},{"line_number":339,"context_line":"                                    options. Deprecated."},{"line_number":340,"context_line":"        :param port_create_args: dict, POST /v2.0/ports request options"},{"line_number":341,"context_line":"        :param ports_per_network: int, number of ports for one network"},{"line_number":342,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a1ced50_355665ce","line":339,"range":{"start_line":339,"start_character":45,"end_line":339,"end_character":56},"in_reply_to":"1a1ced50_923e7dd8","updated":"2017-03-22 09:12:00.000000000","message":"Done","commit_id":"8098bf283b9c94d671ab765c94fdaf2fb0df7a80"}],"rally/plugins/openstack/scenarios/neutron/utils.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b8745a713d0b5da2028803afc24f7df59ddc2ef6","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        return self.clients(\"neutron\").list_ports()[\"ports\"]"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    @atomic.action_timer(\"neutron.show_port\")"},{"line_number":217,"context_line":"    def _show_port(self, port, **_params):"},{"line_number":218,"context_line":"        \"\"\"Return user port details.\"\"\""},{"line_number":219,"context_line":"        return self.clients(\"neutron\").show_port(port[\"port\"][\"id\"], **_params)"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_c42fdfa5","line":217,"updated":"2016-10-17 17:06:52.000000000","message":"s/_params/params","commit_id":"9038982cf2b0c6eda70f70ae5beb59e47ad83a09"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b8745a713d0b5da2028803afc24f7df59ddc2ef6","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    @atomic.action_timer(\"neutron.show_port\")"},{"line_number":217,"context_line":"    def _show_port(self, port, **_params):"},{"line_number":218,"context_line":"        \"\"\"Return user port details.\"\"\""},{"line_number":219,"context_line":"        return self.clients(\"neutron\").show_port(port[\"port\"][\"id\"], **_params)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    @atomic.action_timer(\"neutron.update_port\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_e44dc39a","line":218,"updated":"2016-10-17 17:06:52.000000000","message":"all parameters should be documented and return value too","commit_id":"9038982cf2b0c6eda70f70ae5beb59e47ad83a09"}],"samples/tasks/scenarios/neutron/create-and-show-ports.yaml":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b8745a713d0b5da2028803afc24f7df59ddc2ef6","unresolved":false,"context_lines":[{"line_number":8,"context_line":"      runner:"},{"line_number":9,"context_line":"        type: \"constant\""},{"line_number":10,"context_line":"        times: 5"},{"line_number":11,"context_line":"        concurrency: 2 "},{"line_number":12,"context_line":"      context:"},{"line_number":13,"context_line":"        network: {}"},{"line_number":14,"context_line":"        users:"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"fa6399be_a42bcb93","line":11,"updated":"2016-10-17 17:06:52.000000000","message":"please remove redundant space","commit_id":"9038982cf2b0c6eda70f70ae5beb59e47ad83a09"}],"tests/unit/plugins/openstack/scenarios/neutron/test_network.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b8745a713d0b5da2028803afc24f7df59ddc2ef6","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        ports_per_network \u003d 2"},{"line_number":300,"context_line":"        network_create_args \u003d {\"router:external\": True}"},{"line_number":301,"context_line":"        net \u003d mock.MagicMock()"},{"line_number":302,"context_line":"        ports \u003d [mock.MagicMock() for _ in range(ports_per_network)]"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        scenario \u003d network.CreateAndShowPorts(self.context)"},{"line_number":305,"context_line":"        scenario._get_or_create_network \u003d mock.Mock(return_value\u003dnet)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_d729538b","line":302,"updated":"2016-10-17 17:06:52.000000000","message":"same as 316","commit_id":"9038982cf2b0c6eda70f70ae5beb59e47ad83a09"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b8745a713d0b5da2028803afc24f7df59ddc2ef6","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            network_create_args)"},{"line_number":314,"context_line":"        scenario._create_port.assert_has_calls("},{"line_number":315,"context_line":"            [mock.call(net, port_create_args)"},{"line_number":316,"context_line":"             for _ in range(ports_per_network)])"},{"line_number":317,"context_line":"        scenario._show_port.assert_has_calls("},{"line_number":318,"context_line":"            [mock.call(p) for p in ports])"},{"line_number":319,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_37128f59","line":316,"updated":"2016-10-17 17:06:52.000000000","message":"[mock.call(net, port_create_args) for _ in range(ports_per_network)]\n\ncould be simpler\n[mock.call(net, port_create_args)] * ports_per_network","commit_id":"9038982cf2b0c6eda70f70ae5beb59e47ad83a09"},{"author":{"_account_id":19011,"name":"Anton Studenov","email":"tohin1332@gmail.com","username":"tohin"},"change_message_id":"a24b9c63f196b4da1bfbf675b8f0b4690974b3c9","unresolved":false,"context_lines":[{"line_number":333,"context_line":"        port_create_args \u003d {\"allocation_pools\": []}"},{"line_number":334,"context_line":"        ports_per_network \u003d 2"},{"line_number":335,"context_line":"        network_create_args \u003d {\"router:external\": True}"},{"line_number":336,"context_line":"        net \u003d mock.MagicMock()"},{"line_number":337,"context_line":"        ports \u003d [mock.MagicMock()] * ports_per_network"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        scenario \u003d network.CreateAndShowPorts(self.context)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_d7d5e842","line":336,"range":{"start_line":336,"start_character":14,"end_line":336,"end_character":30},"updated":"2016-12-07 08:47:03.000000000","message":"Why do we need exactly MagicMock? I think regular Mock would be enough here.","commit_id":"04b53db5facd80d43963cd9f1ef36b3e4f378de5"},{"author":{"_account_id":19011,"name":"Anton Studenov","email":"tohin1332@gmail.com","username":"tohin"},"change_message_id":"a24b9c63f196b4da1bfbf675b8f0b4690974b3c9","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        ports_per_network \u003d 2"},{"line_number":335,"context_line":"        network_create_args \u003d {\"router:external\": True}"},{"line_number":336,"context_line":"        net \u003d mock.MagicMock()"},{"line_number":337,"context_line":"        ports \u003d [mock.MagicMock()] * ports_per_network"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        scenario \u003d network.CreateAndShowPorts(self.context)"},{"line_number":340,"context_line":"        scenario._get_or_create_network \u003d mock.Mock(return_value\u003dnet)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_d70a48d1","line":337,"range":{"start_line":337,"start_character":16,"end_line":337,"end_character":54},"updated":"2016-12-07 08:47:03.000000000","message":"ditto","commit_id":"04b53db5facd80d43963cd9f1ef36b3e4f378de5"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"fc53ed66cfab17b0f99f8fdd2b154396078b4ffa","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        scenario._update_port.assert_has_calls("},{"line_number":354,"context_line":"            [mock.call(p, port_update_args) for p in ports])"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def test_create_and_show_ports_positive(self):"},{"line_number":357,"context_line":"        port_create_args \u003d {\"allocation_pools\": []}"},{"line_number":358,"context_line":"        ports_per_network \u003d 1"},{"line_number":359,"context_line":"        network_create_args \u003d {\"router:external\": True}"},{"line_number":360,"context_line":"        net \u003d mock.MagicMock()"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        scenario \u003d network.CreateAndShowPorts(self.context)"},{"line_number":363,"context_line":"        scenario._get_or_create_network \u003d mock.MagicMock(return_value\u003dnet)"},{"line_number":364,"context_line":"        scenario._create_port \u003d mock.MagicMock()"},{"line_number":365,"context_line":"        scenario._show_port \u003d mock.MagicMock()"},{"line_number":366,"context_line":"        port \u003d {\"port\": {\"id\": 1, \"name\": \"f\"}}"},{"line_number":367,"context_line":"        port_info \u003d {\"port\": {\"id\": 1, \"name\": \"f\", \"status\": \"ACTIVE\"}}"},{"line_number":368,"context_line":"        scenario._show_port.return_value \u003d port_info"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        # Positive case:"},{"line_number":371,"context_line":"        scenario._create_port.return_value \u003d port"},{"line_number":372,"context_line":"        scenario.run(network_create_args\u003dnetwork_create_args,"},{"line_number":373,"context_line":"                     port_create_args\u003dport_create_args,"},{"line_number":374,"context_line":"                     ports_per_network\u003dports_per_network)"},{"line_number":375,"context_line":"        scenario._get_or_create_network.assert_called_once_with("},{"line_number":376,"context_line":"            network_create_args)"},{"line_number":377,"context_line":"        scenario._create_port.assert_called_with(net, port_create_args)"},{"line_number":378,"context_line":"        scenario._show_port.assert_called_with(port)"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def test_create_and_show_ports_negative(self):"},{"line_number":381,"context_line":"        port_create_args \u003d {\"allocation_pools\": []}"},{"line_number":382,"context_line":"        ports_per_network \u003d 1"},{"line_number":383,"context_line":"        network_create_args \u003d {\"router:external\": True}"},{"line_number":384,"context_line":"        net \u003d mock.MagicMock()"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        scenario \u003d network.CreateAndShowPorts(self.context)"},{"line_number":387,"context_line":"        scenario._get_or_create_network \u003d mock.MagicMock(return_value\u003dnet)"},{"line_number":388,"context_line":"        scenario._create_port \u003d mock.MagicMock()"},{"line_number":389,"context_line":"        scenario._show_port \u003d mock.MagicMock()"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        # Negative case1: port isn\u0027t created"},{"line_number":392,"context_line":"        scenario._create_port.return_value \u003d None"},{"line_number":393,"context_line":"        self.assertRaises(rally_exceptions.RallyAssertionError,"},{"line_number":394,"context_line":"                          scenario.run,"},{"line_number":395,"context_line":"                          network_create_args,"},{"line_number":396,"context_line":"                          port_create_args,"},{"line_number":397,"context_line":"                          ports_per_network)"},{"line_number":398,"context_line":"        scenario._get_or_create_network.assert_called_once_with("},{"line_number":399,"context_line":"            network_create_args)"},{"line_number":400,"context_line":"        scenario._create_port.assert_called_once_with(net, port_create_args)"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        # Negative case2: port isn\u0027t show"},{"line_number":403,"context_line":"        port \u003d {\"port\": {\"id\": 1, \"name\": \"f1\"}}"},{"line_number":404,"context_line":"        port_info \u003d {\"port\": {\"id\": 2, \"name\": \"f2\", \"status\": \"ACTIVE\"}}"},{"line_number":405,"context_line":"        scenario._show_port.return_value \u003d port_info"},{"line_number":406,"context_line":"        scenario._create_port.return_value \u003d port"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"        self.assertRaises(rally_exceptions.RallyAssertionError,"},{"line_number":409,"context_line":"                          scenario.run,"},{"line_number":410,"context_line":"                          network_create_args,"},{"line_number":411,"context_line":"                          port_create_args,"},{"line_number":412,"context_line":"                          ports_per_network)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        scenario._get_or_create_network.assert_called_with("},{"line_number":415,"context_line":"            network_create_args)"},{"line_number":416,"context_line":"        scenario._create_port.assert_called_with(net, port_create_args)"},{"line_number":417,"context_line":"        scenario._show_port.assert_called_with(port)"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    def test_create_and_delete_ports(self):"},{"line_number":420,"context_line":"        port_create_args \u003d {\"allocation_pools\": []}"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_a62b76ea","line":417,"range":{"start_line":356,"start_character":4,"end_line":417,"end_character":52},"updated":"2017-03-20 09:29:11.000000000","message":"It could be in a test called `test_create_and_show_ports` with positive and negative cases.","commit_id":"86c49bff8ea02c29d9d8cebf92b7c592584cacb3"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"2f23591d69ea2f054c09bf3c05500138184e33c7","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        scenario._update_port.assert_has_calls("},{"line_number":354,"context_line":"            [mock.call(p, port_update_args) for p in ports])"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def test_create_and_show_ports_positive(self):"},{"line_number":357,"context_line":"        port_create_args \u003d {\"allocation_pools\": []}"},{"line_number":358,"context_line":"        ports_per_network \u003d 1"},{"line_number":359,"context_line":"        network_create_args \u003d {\"router:external\": True}"},{"line_number":360,"context_line":"        net \u003d mock.MagicMock()"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        scenario \u003d network.CreateAndShowPorts(self.context)"},{"line_number":363,"context_line":"        scenario._get_or_create_network \u003d mock.MagicMock(return_value\u003dnet)"},{"line_number":364,"context_line":"        scenario._create_port \u003d mock.MagicMock()"},{"line_number":365,"context_line":"        scenario._show_port \u003d mock.MagicMock()"},{"line_number":366,"context_line":"        port \u003d {\"port\": {\"id\": 1, \"name\": \"f\"}}"},{"line_number":367,"context_line":"        port_info \u003d {\"port\": {\"id\": 1, \"name\": \"f\", \"status\": \"ACTIVE\"}}"},{"line_number":368,"context_line":"        scenario._show_port.return_value \u003d port_info"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        # Positive case:"},{"line_number":371,"context_line":"        scenario._create_port.return_value \u003d port"},{"line_number":372,"context_line":"        scenario.run(network_create_args\u003dnetwork_create_args,"},{"line_number":373,"context_line":"                     port_create_args\u003dport_create_args,"},{"line_number":374,"context_line":"                     ports_per_network\u003dports_per_network)"},{"line_number":375,"context_line":"        scenario._get_or_create_network.assert_called_once_with("},{"line_number":376,"context_line":"            network_create_args)"},{"line_number":377,"context_line":"        scenario._create_port.assert_called_with(net, port_create_args)"},{"line_number":378,"context_line":"        scenario._show_port.assert_called_with(port)"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def test_create_and_show_ports_negative(self):"},{"line_number":381,"context_line":"        port_create_args \u003d {\"allocation_pools\": []}"},{"line_number":382,"context_line":"        ports_per_network \u003d 1"},{"line_number":383,"context_line":"        network_create_args \u003d {\"router:external\": True}"},{"line_number":384,"context_line":"        net \u003d mock.MagicMock()"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        scenario \u003d network.CreateAndShowPorts(self.context)"},{"line_number":387,"context_line":"        scenario._get_or_create_network \u003d mock.MagicMock(return_value\u003dnet)"},{"line_number":388,"context_line":"        scenario._create_port \u003d mock.MagicMock()"},{"line_number":389,"context_line":"        scenario._show_port \u003d mock.MagicMock()"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        # Negative case1: port isn\u0027t created"},{"line_number":392,"context_line":"        scenario._create_port.return_value \u003d None"},{"line_number":393,"context_line":"        self.assertRaises(rally_exceptions.RallyAssertionError,"},{"line_number":394,"context_line":"                          scenario.run,"},{"line_number":395,"context_line":"                          network_create_args,"},{"line_number":396,"context_line":"                          port_create_args,"},{"line_number":397,"context_line":"                          ports_per_network)"},{"line_number":398,"context_line":"        scenario._get_or_create_network.assert_called_once_with("},{"line_number":399,"context_line":"            network_create_args)"},{"line_number":400,"context_line":"        scenario._create_port.assert_called_once_with(net, port_create_args)"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        # Negative case2: port isn\u0027t show"},{"line_number":403,"context_line":"        port \u003d {\"port\": {\"id\": 1, \"name\": \"f1\"}}"},{"line_number":404,"context_line":"        port_info \u003d {\"port\": {\"id\": 2, \"name\": \"f2\", \"status\": \"ACTIVE\"}}"},{"line_number":405,"context_line":"        scenario._show_port.return_value \u003d port_info"},{"line_number":406,"context_line":"        scenario._create_port.return_value \u003d port"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"        self.assertRaises(rally_exceptions.RallyAssertionError,"},{"line_number":409,"context_line":"                          scenario.run,"},{"line_number":410,"context_line":"                          network_create_args,"},{"line_number":411,"context_line":"                          port_create_args,"},{"line_number":412,"context_line":"                          ports_per_network)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        scenario._get_or_create_network.assert_called_with("},{"line_number":415,"context_line":"            network_create_args)"},{"line_number":416,"context_line":"        scenario._create_port.assert_called_with(net, port_create_args)"},{"line_number":417,"context_line":"        scenario._show_port.assert_called_with(port)"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    def test_create_and_delete_ports(self):"},{"line_number":420,"context_line":"        port_create_args \u003d {\"allocation_pools\": []}"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_c86738b5","line":417,"range":{"start_line":356,"start_character":4,"end_line":417,"end_character":52},"in_reply_to":"1a1ced50_52c16553","updated":"2017-03-22 09:16:25.000000000","message":"Thanks for your comment, but I think test\u0027name is not important. your idea and my idea all are ok.","commit_id":"86c49bff8ea02c29d9d8cebf92b7c592584cacb3"},{"author":{"_account_id":23435,"name":"zhangzhihui","email":"zhangzh.fnst@cn.fujitsu.com","username":"zhangzhang"},"change_message_id":"83f71b7d44e073d2715470e5172f10e5660dbf4b","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        scenario._update_port.assert_has_calls("},{"line_number":354,"context_line":"            [mock.call(p, port_update_args) for p in ports])"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def test_create_and_show_ports_positive(self):"},{"line_number":357,"context_line":"        port_create_args \u003d {\"allocation_pools\": []}"},{"line_number":358,"context_line":"        ports_per_network \u003d 1"},{"line_number":359,"context_line":"        network_create_args \u003d {\"router:external\": True}"},{"line_number":360,"context_line":"        net \u003d mock.MagicMock()"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        scenario \u003d network.CreateAndShowPorts(self.context)"},{"line_number":363,"context_line":"        scenario._get_or_create_network \u003d mock.MagicMock(return_value\u003dnet)"},{"line_number":364,"context_line":"        scenario._create_port \u003d mock.MagicMock()"},{"line_number":365,"context_line":"        scenario._show_port \u003d mock.MagicMock()"},{"line_number":366,"context_line":"        port \u003d {\"port\": {\"id\": 1, \"name\": \"f\"}}"},{"line_number":367,"context_line":"        port_info \u003d {\"port\": {\"id\": 1, \"name\": \"f\", \"status\": \"ACTIVE\"}}"},{"line_number":368,"context_line":"        scenario._show_port.return_value \u003d port_info"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        # Positive case:"},{"line_number":371,"context_line":"        scenario._create_port.return_value \u003d port"},{"line_number":372,"context_line":"        scenario.run(network_create_args\u003dnetwork_create_args,"},{"line_number":373,"context_line":"                     port_create_args\u003dport_create_args,"},{"line_number":374,"context_line":"                     ports_per_network\u003dports_per_network)"},{"line_number":375,"context_line":"        scenario._get_or_create_network.assert_called_once_with("},{"line_number":376,"context_line":"            network_create_args)"},{"line_number":377,"context_line":"        scenario._create_port.assert_called_with(net, port_create_args)"},{"line_number":378,"context_line":"        scenario._show_port.assert_called_with(port)"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def test_create_and_show_ports_negative(self):"},{"line_number":381,"context_line":"        port_create_args \u003d {\"allocation_pools\": []}"},{"line_number":382,"context_line":"        ports_per_network \u003d 1"},{"line_number":383,"context_line":"        network_create_args \u003d {\"router:external\": True}"},{"line_number":384,"context_line":"        net \u003d mock.MagicMock()"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        scenario \u003d network.CreateAndShowPorts(self.context)"},{"line_number":387,"context_line":"        scenario._get_or_create_network \u003d mock.MagicMock(return_value\u003dnet)"},{"line_number":388,"context_line":"        scenario._create_port \u003d mock.MagicMock()"},{"line_number":389,"context_line":"        scenario._show_port \u003d mock.MagicMock()"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        # Negative case1: port isn\u0027t created"},{"line_number":392,"context_line":"        scenario._create_port.return_value \u003d None"},{"line_number":393,"context_line":"        self.assertRaises(rally_exceptions.RallyAssertionError,"},{"line_number":394,"context_line":"                          scenario.run,"},{"line_number":395,"context_line":"                          network_create_args,"},{"line_number":396,"context_line":"                          port_create_args,"},{"line_number":397,"context_line":"                          ports_per_network)"},{"line_number":398,"context_line":"        scenario._get_or_create_network.assert_called_once_with("},{"line_number":399,"context_line":"            network_create_args)"},{"line_number":400,"context_line":"        scenario._create_port.assert_called_once_with(net, port_create_args)"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        # Negative case2: port isn\u0027t show"},{"line_number":403,"context_line":"        port \u003d {\"port\": {\"id\": 1, \"name\": \"f1\"}}"},{"line_number":404,"context_line":"        port_info \u003d {\"port\": {\"id\": 2, \"name\": \"f2\", \"status\": \"ACTIVE\"}}"},{"line_number":405,"context_line":"        scenario._show_port.return_value \u003d port_info"},{"line_number":406,"context_line":"        scenario._create_port.return_value \u003d port"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"        self.assertRaises(rally_exceptions.RallyAssertionError,"},{"line_number":409,"context_line":"                          scenario.run,"},{"line_number":410,"context_line":"                          network_create_args,"},{"line_number":411,"context_line":"                          port_create_args,"},{"line_number":412,"context_line":"                          ports_per_network)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        scenario._get_or_create_network.assert_called_with("},{"line_number":415,"context_line":"            network_create_args)"},{"line_number":416,"context_line":"        scenario._create_port.assert_called_with(net, port_create_args)"},{"line_number":417,"context_line":"        scenario._show_port.assert_called_with(port)"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    def test_create_and_delete_ports(self):"},{"line_number":420,"context_line":"        port_create_args \u003d {\"allocation_pools\": []}"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_e612ce61","line":417,"range":{"start_line":356,"start_character":4,"end_line":417,"end_character":52},"in_reply_to":"1a1ced50_a62b76ea","updated":"2017-03-20 09:38:44.000000000","message":"Sorry, please look at Roman\u0027comment in patch:https://review.openstack.org/#/c/437829/\nwe should split it into two tests. Positive and negative.","commit_id":"86c49bff8ea02c29d9d8cebf92b7c592584cacb3"},{"author":{"_account_id":19011,"name":"Anton Studenov","email":"tohin1332@gmail.com","username":"tohin"},"change_message_id":"48412c0ee5cf069ff5690b0982684dabf6e1a842","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        scenario._update_port.assert_has_calls("},{"line_number":354,"context_line":"            [mock.call(p, port_update_args) for p in ports])"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def test_create_and_show_ports_positive(self):"},{"line_number":357,"context_line":"        port_create_args \u003d {\"allocation_pools\": []}"},{"line_number":358,"context_line":"        ports_per_network \u003d 1"},{"line_number":359,"context_line":"        network_create_args \u003d {\"router:external\": True}"},{"line_number":360,"context_line":"        net \u003d mock.MagicMock()"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        scenario \u003d network.CreateAndShowPorts(self.context)"},{"line_number":363,"context_line":"        scenario._get_or_create_network \u003d mock.MagicMock(return_value\u003dnet)"},{"line_number":364,"context_line":"        scenario._create_port \u003d mock.MagicMock()"},{"line_number":365,"context_line":"        scenario._show_port \u003d mock.MagicMock()"},{"line_number":366,"context_line":"        port \u003d {\"port\": {\"id\": 1, \"name\": \"f\"}}"},{"line_number":367,"context_line":"        port_info \u003d {\"port\": {\"id\": 1, \"name\": \"f\", \"status\": \"ACTIVE\"}}"},{"line_number":368,"context_line":"        scenario._show_port.return_value \u003d port_info"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        # Positive case:"},{"line_number":371,"context_line":"        scenario._create_port.return_value \u003d port"},{"line_number":372,"context_line":"        scenario.run(network_create_args\u003dnetwork_create_args,"},{"line_number":373,"context_line":"                     port_create_args\u003dport_create_args,"},{"line_number":374,"context_line":"                     ports_per_network\u003dports_per_network)"},{"line_number":375,"context_line":"        scenario._get_or_create_network.assert_called_once_with("},{"line_number":376,"context_line":"            network_create_args)"},{"line_number":377,"context_line":"        scenario._create_port.assert_called_with(net, port_create_args)"},{"line_number":378,"context_line":"        scenario._show_port.assert_called_with(port)"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def test_create_and_show_ports_negative(self):"},{"line_number":381,"context_line":"        port_create_args \u003d {\"allocation_pools\": []}"},{"line_number":382,"context_line":"        ports_per_network \u003d 1"},{"line_number":383,"context_line":"        network_create_args \u003d {\"router:external\": True}"},{"line_number":384,"context_line":"        net \u003d mock.MagicMock()"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        scenario \u003d network.CreateAndShowPorts(self.context)"},{"line_number":387,"context_line":"        scenario._get_or_create_network \u003d mock.MagicMock(return_value\u003dnet)"},{"line_number":388,"context_line":"        scenario._create_port \u003d mock.MagicMock()"},{"line_number":389,"context_line":"        scenario._show_port \u003d mock.MagicMock()"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        # Negative case1: port isn\u0027t created"},{"line_number":392,"context_line":"        scenario._create_port.return_value \u003d None"},{"line_number":393,"context_line":"        self.assertRaises(rally_exceptions.RallyAssertionError,"},{"line_number":394,"context_line":"                          scenario.run,"},{"line_number":395,"context_line":"                          network_create_args,"},{"line_number":396,"context_line":"                          port_create_args,"},{"line_number":397,"context_line":"                          ports_per_network)"},{"line_number":398,"context_line":"        scenario._get_or_create_network.assert_called_once_with("},{"line_number":399,"context_line":"            network_create_args)"},{"line_number":400,"context_line":"        scenario._create_port.assert_called_once_with(net, port_create_args)"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        # Negative case2: port isn\u0027t show"},{"line_number":403,"context_line":"        port \u003d {\"port\": {\"id\": 1, \"name\": \"f1\"}}"},{"line_number":404,"context_line":"        port_info \u003d {\"port\": {\"id\": 2, \"name\": \"f2\", \"status\": \"ACTIVE\"}}"},{"line_number":405,"context_line":"        scenario._show_port.return_value \u003d port_info"},{"line_number":406,"context_line":"        scenario._create_port.return_value \u003d port"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"        self.assertRaises(rally_exceptions.RallyAssertionError,"},{"line_number":409,"context_line":"                          scenario.run,"},{"line_number":410,"context_line":"                          network_create_args,"},{"line_number":411,"context_line":"                          port_create_args,"},{"line_number":412,"context_line":"                          ports_per_network)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        scenario._get_or_create_network.assert_called_with("},{"line_number":415,"context_line":"            network_create_args)"},{"line_number":416,"context_line":"        scenario._create_port.assert_called_with(net, port_create_args)"},{"line_number":417,"context_line":"        scenario._show_port.assert_called_with(port)"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    def test_create_and_delete_ports(self):"},{"line_number":420,"context_line":"        port_create_args \u003d {\"allocation_pools\": []}"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_f171a6a9","line":417,"range":{"start_line":356,"start_character":4,"end_line":417,"end_character":52},"in_reply_to":"1a1ced50_e612ce61","updated":"2017-03-20 09:41:10.000000000","message":"It\u0027s always better to have multiple tests(each test for one case). Such tests are shorter and easier to maintain.","commit_id":"86c49bff8ea02c29d9d8cebf92b7c592584cacb3"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"b8f55c4dc42d306a6009ae91a073786fd79bfd1b","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        scenario._update_port.assert_has_calls("},{"line_number":354,"context_line":"            [mock.call(p, port_update_args) for p in ports])"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def test_create_and_show_ports_positive(self):"},{"line_number":357,"context_line":"        port_create_args \u003d {\"allocation_pools\": []}"},{"line_number":358,"context_line":"        ports_per_network \u003d 1"},{"line_number":359,"context_line":"        network_create_args \u003d {\"router:external\": True}"},{"line_number":360,"context_line":"        net \u003d mock.MagicMock()"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        scenario \u003d network.CreateAndShowPorts(self.context)"},{"line_number":363,"context_line":"        scenario._get_or_create_network \u003d mock.MagicMock(return_value\u003dnet)"},{"line_number":364,"context_line":"        scenario._create_port \u003d mock.MagicMock()"},{"line_number":365,"context_line":"        scenario._show_port \u003d mock.MagicMock()"},{"line_number":366,"context_line":"        port \u003d {\"port\": {\"id\": 1, \"name\": \"f\"}}"},{"line_number":367,"context_line":"        port_info \u003d {\"port\": {\"id\": 1, \"name\": \"f\", \"status\": \"ACTIVE\"}}"},{"line_number":368,"context_line":"        scenario._show_port.return_value \u003d port_info"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        # Positive case:"},{"line_number":371,"context_line":"        scenario._create_port.return_value \u003d port"},{"line_number":372,"context_line":"        scenario.run(network_create_args\u003dnetwork_create_args,"},{"line_number":373,"context_line":"                     port_create_args\u003dport_create_args,"},{"line_number":374,"context_line":"                     ports_per_network\u003dports_per_network)"},{"line_number":375,"context_line":"        scenario._get_or_create_network.assert_called_once_with("},{"line_number":376,"context_line":"            network_create_args)"},{"line_number":377,"context_line":"        scenario._create_port.assert_called_with(net, port_create_args)"},{"line_number":378,"context_line":"        scenario._show_port.assert_called_with(port)"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def test_create_and_show_ports_negative(self):"},{"line_number":381,"context_line":"        port_create_args \u003d {\"allocation_pools\": []}"},{"line_number":382,"context_line":"        ports_per_network \u003d 1"},{"line_number":383,"context_line":"        network_create_args \u003d {\"router:external\": True}"},{"line_number":384,"context_line":"        net \u003d mock.MagicMock()"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        scenario \u003d network.CreateAndShowPorts(self.context)"},{"line_number":387,"context_line":"        scenario._get_or_create_network \u003d mock.MagicMock(return_value\u003dnet)"},{"line_number":388,"context_line":"        scenario._create_port \u003d mock.MagicMock()"},{"line_number":389,"context_line":"        scenario._show_port \u003d mock.MagicMock()"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        # Negative case1: port isn\u0027t created"},{"line_number":392,"context_line":"        scenario._create_port.return_value \u003d None"},{"line_number":393,"context_line":"        self.assertRaises(rally_exceptions.RallyAssertionError,"},{"line_number":394,"context_line":"                          scenario.run,"},{"line_number":395,"context_line":"                          network_create_args,"},{"line_number":396,"context_line":"                          port_create_args,"},{"line_number":397,"context_line":"                          ports_per_network)"},{"line_number":398,"context_line":"        scenario._get_or_create_network.assert_called_once_with("},{"line_number":399,"context_line":"            network_create_args)"},{"line_number":400,"context_line":"        scenario._create_port.assert_called_once_with(net, port_create_args)"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        # Negative case2: port isn\u0027t show"},{"line_number":403,"context_line":"        port \u003d {\"port\": {\"id\": 1, \"name\": \"f1\"}}"},{"line_number":404,"context_line":"        port_info \u003d {\"port\": {\"id\": 2, \"name\": \"f2\", \"status\": \"ACTIVE\"}}"},{"line_number":405,"context_line":"        scenario._show_port.return_value \u003d port_info"},{"line_number":406,"context_line":"        scenario._create_port.return_value \u003d port"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"        self.assertRaises(rally_exceptions.RallyAssertionError,"},{"line_number":409,"context_line":"                          scenario.run,"},{"line_number":410,"context_line":"                          network_create_args,"},{"line_number":411,"context_line":"                          port_create_args,"},{"line_number":412,"context_line":"                          ports_per_network)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        scenario._get_or_create_network.assert_called_with("},{"line_number":415,"context_line":"            network_create_args)"},{"line_number":416,"context_line":"        scenario._create_port.assert_called_with(net, port_create_args)"},{"line_number":417,"context_line":"        scenario._show_port.assert_called_with(port)"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    def test_create_and_delete_ports(self):"},{"line_number":420,"context_line":"        port_create_args \u003d {\"allocation_pools\": []}"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_52c16553","line":417,"range":{"start_line":356,"start_character":4,"end_line":417,"end_character":52},"in_reply_to":"1a1ced50_f171a6a9","updated":"2017-03-21 11:12:21.000000000","message":"OK, It is fine to me. But to those tests\u0027 name: `test_create_and_show_ports_negative(positive)`, I prefer to port `test_create_and_show_ports_positive` to `test_create_and_show_ports` and port `test_create_and_show_ports_negative` to `test_create_and_show_ports_with_fail`.If you think the tests\u0027 name is fine, pls neglect with my comment;)","commit_id":"86c49bff8ea02c29d9d8cebf92b7c592584cacb3"}],"tests/unit/plugins/openstack/scenarios/neutron/test_utils.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b8745a713d0b5da2028803afc24f7df59ddc2ef6","unresolved":false,"context_lines":[{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    def test_show_port(self):"},{"line_number":361,"context_line":"        network \u003d self.scenario._create_network({})"},{"line_number":362,"context_line":"        port \u003d self.scenario._create_port(network, {})"},{"line_number":363,"context_line":"        self.clients(\"neutron\").show_port.return_value \u003d port"},{"line_number":364,"context_line":"        self.assertEqual(port, self.scenario._show_port(port))"},{"line_number":365,"context_line":"        self._test_atomic_action_timer(self.scenario.atomic_actions(),"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_d7ecf32b","line":362,"updated":"2016-10-17 17:06:52.000000000","message":"please don\u0027t use in unit test of the function another atomic action. This may lead to the situation when _create_port will fail two tests except one.\n\nYou should check that neutron command get exact parameters and mock return value of neutron show_port commmand","commit_id":"9038982cf2b0c6eda70f70ae5beb59e47ad83a09"}]}
