)]}'
{"tempest/scenario/test_network_dvr_multinode_fip.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3200680d1c8d40a0a5163a72f8e2d22dbd4f3750","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright 2014 Hewlett-Packard Development Company, L.P."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ad0253b_ecf7bdf3","line":1,"updated":"2015-04-28 23:13:56.000000000","message":"no need to keep the foundation copyright.","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"069e4b9fb3c5c71795b6dd943ba2d3549c1634be","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":2,"context_line":"# Copyright 2014 Hewlett-Packard Development Company, L.P."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aca2d91_a04657bd","line":1,"in_reply_to":"5ad0253b_ecf7bdf3","updated":"2015-05-06 21:50:46.000000000","message":"Done","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3200680d1c8d40a0a5163a72f8e2d22dbd4f3750","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                                           [\u0027floating_ip\u0027, \u0027server\u0027])"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class TestNetworkDVRFIPs(manager.NetworkScenarioTest):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    \"\"\""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5ad0253b_039f6c04","line":34,"updated":"2015-04-28 23:13:56.000000000","message":"What is special about DVR here? Having said that, I don\u0027t see this test running. I am not entirely sure what\u0027s going on yet.","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"069e4b9fb3c5c71795b6dd943ba2d3549c1634be","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                                           [\u0027floating_ip\u0027, \u0027server\u0027])"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class TestNetworkDVRFIPs(manager.NetworkScenarioTest):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    \"\"\""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1aca2d91_00b18b8f","line":34,"in_reply_to":"5ad0253b_039f6c04","updated":"2015-05-06 21:50:46.000000000","message":"The test takes every siingle hypervisor in the setup and instantiates a vm in it, then asossiates a fip  with it and tests to make sure it works. You are correct, the initial test(test_fips_on_each_hypervisor) would execute on both DVR and non DVR setups.  But I am not sure it would add any new testing to non DVR, so I put it specifically in this file.\nOther tests which will be added as soon as I get this first one ready and going will be more DVR specific.","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ad7dcfa33c448d77140150d288a2995e028bd22d","unresolved":false,"context_lines":[{"line_number":34,"context_line":"class TestNetworkDVRFIPs(manager.NetworkScenarioTest):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    \"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ad0253b_f5031875","line":37,"updated":"2015-04-28 16:02:32.000000000","message":"Was this intentional to have blank spaces for the doc string.","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"069e4b9fb3c5c71795b6dd943ba2d3549c1634be","unresolved":false,"context_lines":[{"line_number":34,"context_line":"class TestNetworkDVRFIPs(manager.NetworkScenarioTest):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    \"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aca2d91_c0aa7319","line":37,"in_reply_to":"5ad0253b_f5031875","updated":"2015-05-06 21:50:46.000000000","message":"Done","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3200680d1c8d40a0a5163a72f8e2d22dbd4f3750","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            msg \u003d (\u0027Either tenant_networks_reachable must be \"true\", or \u0027"},{"line_number":46,"context_line":"                   \u0027public_network_id must be defined.\u0027)"},{"line_number":47,"context_line":"            raise cls.skipException(msg)"},{"line_number":48,"context_line":"        for ext in [\u0027router\u0027, \u0027security-group\u0027]:"},{"line_number":49,"context_line":"            if not test.is_extension_enabled(ext, \u0027network\u0027):"},{"line_number":50,"context_line":"                msg \u003d \"%s extension not enabled.\" % ext"},{"line_number":51,"context_line":"                raise cls.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ad0253b_a38678b7","line":48,"updated":"2015-04-28 23:13:56.000000000","message":"if this is meant to be a DVR test, shouldn\u0027t we check for the extension to be enabled?","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"069e4b9fb3c5c71795b6dd943ba2d3549c1634be","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            msg \u003d (\u0027Either tenant_networks_reachable must be \"true\", or \u0027"},{"line_number":46,"context_line":"                   \u0027public_network_id must be defined.\u0027)"},{"line_number":47,"context_line":"            raise cls.skipException(msg)"},{"line_number":48,"context_line":"        for ext in [\u0027router\u0027, \u0027security-group\u0027]:"},{"line_number":49,"context_line":"            if not test.is_extension_enabled(ext, \u0027network\u0027):"},{"line_number":50,"context_line":"                msg \u003d \"%s extension not enabled.\" % ext"},{"line_number":51,"context_line":"                raise cls.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aca2d91_e0744fd0","line":48,"in_reply_to":"5ad0253b_a38678b7","updated":"2015-05-06 21:50:46.000000000","message":"yes. I will add check","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3200680d1c8d40a0a5163a72f8e2d22dbd4f3750","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            cls.admin_manager.availability_zone_client"},{"line_number":71,"context_line":"        cls.network_client \u003d cls.admin_manager.network_client"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def setUp(self):"},{"line_number":74,"context_line":"        super(TestNetworkDVRFIPs, self).setUp()"},{"line_number":75,"context_line":"        self.keypairs \u003d {}"},{"line_number":76,"context_line":"        self.servers \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ad0253b_036d2c04","line":73,"updated":"2015-04-28 23:13:56.000000000","message":"this should not be here but resource_setup should be used instead?","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"069e4b9fb3c5c71795b6dd943ba2d3549c1634be","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            cls.admin_manager.availability_zone_client"},{"line_number":71,"context_line":"        cls.network_client \u003d cls.admin_manager.network_client"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def setUp(self):"},{"line_number":74,"context_line":"        super(TestNetworkDVRFIPs, self).setUp()"},{"line_number":75,"context_line":"        self.keypairs \u003d {}"},{"line_number":76,"context_line":"        self.servers \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aca2d91_63528915","line":73,"in_reply_to":"5ad0253b_036d2c04","updated":"2015-05-06 21:50:46.000000000","message":"I am not clear on this as I have seen tests with setup() and tests with resource_setup(), but I think Armando is correct. I will use resource_setup()\nDone","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ad7dcfa33c448d77140150d288a2995e028bd22d","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def check_networks(self):"},{"line_number":94,"context_line":"        \"\"\""},{"line_number":95,"context_line":"        Checks that we see the newly created network/subnet/router via"},{"line_number":96,"context_line":"        checking the result of list_[networks,routers,subnets]"},{"line_number":97,"context_line":"        \"\"\""},{"line_number":98,"context_line":"        seen_nets \u003d self._list_networks()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ad0253b_951064aa","line":95,"updated":"2015-04-28 16:02:32.000000000","message":"Checks to see the newly created ...\nvia the results of ...","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"069e4b9fb3c5c71795b6dd943ba2d3549c1634be","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def check_networks(self):"},{"line_number":94,"context_line":"        \"\"\""},{"line_number":95,"context_line":"        Checks that we see the newly created network/subnet/router via"},{"line_number":96,"context_line":"        checking the result of list_[networks,routers,subnets]"},{"line_number":97,"context_line":"        \"\"\""},{"line_number":98,"context_line":"        seen_nets \u003d self._list_networks()"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aca2d91_c3befdfe","line":95,"in_reply_to":"5ad0253b_951064aa","updated":"2015-05-06 21:50:46.000000000","message":"this comment is superfluous. The method\u0027s purpose is pretty clear from the code itself. I will take it out","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3200680d1c8d40a0a5163a72f8e2d22dbd4f3750","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                          seen_router_ids)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def _create_servers(self, name, network, port_id\u003dNone):"},{"line_number":121,"context_line":"        # each hypervisor gets a server (vm)"},{"line_number":122,"context_line":"        list_of_servers \u003d []"},{"line_number":123,"context_line":"        hypers \u003d self.hypervisor_client.get_hypervisor_list()"},{"line_number":124,"context_line":"        hyper_count \u003d len(hypers)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ad0253b_a309d833","line":121,"updated":"2015-04-28 23:13:56.000000000","message":"if the intention is to have this test run only on multinode deployments, perhaps we\u0027d want to control this via a config variable?","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"069e4b9fb3c5c71795b6dd943ba2d3549c1634be","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                          seen_router_ids)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def _create_servers(self, name, network, port_id\u003dNone):"},{"line_number":121,"context_line":"        # each hypervisor gets a server (vm)"},{"line_number":122,"context_line":"        list_of_servers \u003d []"},{"line_number":123,"context_line":"        hypers \u003d self.hypervisor_client.get_hypervisor_list()"},{"line_number":124,"context_line":"        hyper_count \u003d len(hypers)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aca2d91_83b6c5da","line":121,"in_reply_to":"5ad0253b_a309d833","updated":"2015-05-06 21:50:46.000000000","message":"Its easier to code the tests as being able to run on systems with a compute node count of 1 to ... infinity. \ni.e. the singlenode setup is just a multinode setup with a compute node count of 1 as far as the code is concerned. \nBut we can add a checks as decorators to any test that will not run on  single node. Will keep it in mind for future test to add to this suit. \nIf we really want to exclude the whole suite (this file) from running on multinode, a check can be added to skip_checks()","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3200680d1c8d40a0a5163a72f8e2d22dbd4f3750","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                server, ssh_login, self._get_server_key(server),"},{"line_number":159,"context_line":"                servers_for_debug\u003dself.servers)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def check_public_network_connectivity("},{"line_number":162,"context_line":"            self, should_connect\u003dTrue, msg\u003dNone,"},{"line_number":163,"context_line":"            should_check_floating_ip_status\u003dTrue):"},{"line_number":164,"context_line":"        \"\"\"Verifies connectivty to all VMs via public network and floating IP,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ad0253b_e6247eb0","line":161,"updated":"2015-04-28 23:13:56.000000000","message":"we already have something along the lines of check_public_network_connectivity, in manager.py\n\nCan we try to reuse it?","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"069e4b9fb3c5c71795b6dd943ba2d3549c1634be","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                server, ssh_login, self._get_server_key(server),"},{"line_number":159,"context_line":"                servers_for_debug\u003dself.servers)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def check_public_network_connectivity("},{"line_number":162,"context_line":"            self, should_connect\u003dTrue, msg\u003dNone,"},{"line_number":163,"context_line":"            should_check_floating_ip_status\u003dTrue):"},{"line_number":164,"context_line":"        \"\"\"Verifies connectivty to all VMs via public network and floating IP,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aca2d91_43e78de4","line":161,"in_reply_to":"5ad0253b_e6247eb0","updated":"2015-05-06 21:50:46.000000000","message":"yes. Will look into it.","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ad7dcfa33c448d77140150d288a2995e028bd22d","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                floatingip_status \u003d \u0027ACTIVE\u0027"},{"line_number":184,"context_line":"            # Check FloatingIP Status before initiating a connection"},{"line_number":185,"context_line":"            if should_check_floating_ip_status:"},{"line_number":186,"context_line":"                self.check_floating_ip_status(floating_ip, floatingip_status)"},{"line_number":187,"context_line":"            # call the common method in the parent class"},{"line_number":188,"context_line":"            super(TestNetworkDVRFIPs, self).check_public_network_connectivity("},{"line_number":189,"context_line":"                ip_address, ssh_login, private_key, should_connect, msg,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ad0253b_5837a1e3","line":186,"updated":"2015-04-28 16:02:32.000000000","message":"Is it possible to log the status failure here.","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"069e4b9fb3c5c71795b6dd943ba2d3549c1634be","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                floatingip_status \u003d \u0027ACTIVE\u0027"},{"line_number":184,"context_line":"            # Check FloatingIP Status before initiating a connection"},{"line_number":185,"context_line":"            if should_check_floating_ip_status:"},{"line_number":186,"context_line":"                self.check_floating_ip_status(floating_ip, floatingip_status)"},{"line_number":187,"context_line":"            # call the common method in the parent class"},{"line_number":188,"context_line":"            super(TestNetworkDVRFIPs, self).check_public_network_connectivity("},{"line_number":189,"context_line":"                ip_address, ssh_login, private_key, should_connect, msg,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aca2d91_c3db9d1a","line":186,"in_reply_to":"5ad0253b_5837a1e3","updated":"2015-05-06 21:50:46.000000000","message":"will do","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3200680d1c8d40a0a5163a72f8e2d22dbd4f3750","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                network\u003dself.new_net,"},{"line_number":205,"context_line":"                gateway_ip\u003dNone)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def _check_network_internal_connectivity(self, network,"},{"line_number":208,"context_line":"                                             should_connect\u003dTrue):"},{"line_number":209,"context_line":"        \"\"\""},{"line_number":210,"context_line":"        via ssh check all VMs internal connectivity:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ad0253b_66486e5c","line":207,"updated":"2015-04-28 23:13:56.000000000","message":"I think this should be made conditional as the Tempest node might not have access to the internal network.","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"069e4b9fb3c5c71795b6dd943ba2d3549c1634be","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                network\u003dself.new_net,"},{"line_number":205,"context_line":"                gateway_ip\u003dNone)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def _check_network_internal_connectivity(self, network,"},{"line_number":208,"context_line":"                                             should_connect\u003dTrue):"},{"line_number":209,"context_line":"        \"\"\""},{"line_number":210,"context_line":"        via ssh check all VMs internal connectivity:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aca2d91_231131ad","line":207,"in_reply_to":"5ad0253b_66486e5c","updated":"2015-05-06 21:50:46.000000000","message":"I will look into this, but I think the check in skip_checks()\nif not (CONF.network.tenant_networks_reachable\n                or CONF.network.public_network_id):\n\nmight take care of this. But we can add check. I\u0027ll look into it.","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ad7dcfa33c448d77140150d288a2995e028bd22d","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        for remote_ip in address_list:"},{"line_number":258,"context_line":"            if should_connect:"},{"line_number":259,"context_line":"                msg \u003d \"Timed out waiting for \""},{"line_number":260,"context_line":"                \"%s to become reachable\" % remote_ip"},{"line_number":261,"context_line":"            else:"},{"line_number":262,"context_line":"                msg \u003d \"ip address %s is reachable\" % remote_ip"},{"line_number":263,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ad0253b_d89f31b3","line":260,"updated":"2015-04-28 16:02:32.000000000","message":"For readability this line can be moved below \"Timed\".","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"069e4b9fb3c5c71795b6dd943ba2d3549c1634be","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        for remote_ip in address_list:"},{"line_number":258,"context_line":"            if should_connect:"},{"line_number":259,"context_line":"                msg \u003d \"Timed out waiting for \""},{"line_number":260,"context_line":"                \"%s to become reachable\" % remote_ip"},{"line_number":261,"context_line":"            else:"},{"line_number":262,"context_line":"                msg \u003d \"ip address %s is reachable\" % remote_ip"},{"line_number":263,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aca2d91_e351f963","line":260,"in_reply_to":"5ad0253b_d89f31b3","updated":"2015-05-06 21:50:46.000000000","message":"don\u0027t know what you mean exactly. I tried moving the line around for the %s to be right below Timed,  but pep8 did not like it.\nDone","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ad7dcfa33c448d77140150d288a2995e028bd22d","unresolved":false,"context_lines":[{"line_number":275,"context_line":"    def test_fips_on_each_hypervisor(self):"},{"line_number":276,"context_line":"        \"\"\""},{"line_number":277,"context_line":"        For  freshly-booted VMs with an IP address (\"port\") on a given"},{"line_number":278,"context_line":"            network and one vms per hypervisor (compute-node), it verifies"},{"line_number":279,"context_line":"            that:"},{"line_number":280,"context_line":"        - the Tempest host can ping the floating ip address associated"},{"line_number":281,"context_line":"          with each vm.  This implies, but"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ad0253b_f8e8ad18","line":278,"updated":"2015-04-28 16:02:32.000000000","message":"Why do we need an indent here and also in the following line.","commit_id":"d99fbd7b3baeb2a2810cad170e8014849ae23423"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3cf8badf8d8c33e8d918d53ea1726d33232fa860","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                                           [\u0027floating_ip\u0027, \u0027server\u0027])"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestNetworkDVRFIPs(manager.NetworkScenarioTest):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_f2228651","line":32,"updated":"2015-05-08 20:46:41.000000000","message":"ok so my understanding is that if non-dvr deployments can work with this scenario tests, I think it would be beneficial to simplify the logic of checking for the extension.\n\nIn the end, this is a MultiNode scenario test on steroids where we validate EastWest traffic.\n\nPerhaps we could make this one Configuration driven instead, like the live migration test:\n\nhttps://github.com/openstack/tempest/blob/master/etc/tempest.conf.sample#L365\n\nTo enable it, then we\u0027d need to modify the neutron multi node job to flip the config knob.","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"44645d0381ea76a52528a5a6789f0e18bb611b39","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                                           [\u0027floating_ip\u0027, \u0027server\u0027])"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestNetworkDVRFIPs(manager.NetworkScenarioTest):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5ad58531_a7455618","line":32,"in_reply_to":"1aca2d91_f2228651","updated":"2015-05-11 22:13:12.000000000","message":"The current test will work in non-dvr but the next one won\u0027t. \nI think perhaps I will add the next so that becomes obvious. I think this is small enough now. I just wanted to keep the line count low.","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"e2082ed0b32fdad477dcee286f4c258a57603d13","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                                           [\u0027floating_ip\u0027, \u0027server\u0027])"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestNetworkDVRFIPs(manager.NetworkScenarioTest):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a0c5dc1_6c55f81b","line":32,"in_reply_to":"5ad58531_a7455618","updated":"2015-05-12 15:37:48.000000000","message":"What do mean \u0027the next one\u0027? Tests should be self-sufficient and isolated, I am not sure I understand your point.","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"d3a306b22881b854ebe14ae9553adde6c62df64b","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        if \u0027distributed\u0027 not in router[\u0027router\u0027]:"},{"line_number":72,"context_line":"            msg \u003d \"\u0027distributed\u0027 attribute not found. DVR Possibly not enabled\""},{"line_number":73,"context_line":"            raise cls.skipException(msg)"},{"line_number":74,"context_line":"        cls.os_adm.network_client.delete_router(router[\u0027router\u0027][\u0027id\u0027])"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def setUp(self):"},{"line_number":77,"context_line":"        super(TestNetworkDVRFIPs, self).setUp()"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a0c5dc1_5804327d","line":74,"updated":"2015-05-12 14:46:23.000000000","message":"If DVR is not enabled, a router will be created (L70) but it will no be cleaned up because L73 will raise, right ?","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"df167ac85ad79c8809656591400b20e1213c48f1","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        if \u0027distributed\u0027 not in router[\u0027router\u0027]:"},{"line_number":72,"context_line":"            msg \u003d \"\u0027distributed\u0027 attribute not found. DVR Possibly not enabled\""},{"line_number":73,"context_line":"            raise cls.skipException(msg)"},{"line_number":74,"context_line":"        cls.os_adm.network_client.delete_router(router[\u0027router\u0027][\u0027id\u0027])"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def setUp(self):"},{"line_number":77,"context_line":"        super(TestNetworkDVRFIPs, self).setUp()"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_a7cbec1d","line":74,"in_reply_to":"9a0c5dc1_5804327d","updated":"2015-06-19 23:52:33.000000000","message":"good catch i will add a delete","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"d3a306b22881b854ebe14ae9553adde6c62df64b","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            self.assertIn(self.router.id,"},{"line_number":117,"context_line":"                          seen_router_ids)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _create_servers(self, name, network, port_id\u003dNone):"},{"line_number":120,"context_line":"        # each hypervisor gets a server (vm)"},{"line_number":121,"context_line":"        list_of_servers \u003d []"},{"line_number":122,"context_line":"        hypers \u003d self.hypervisor_client.get_hypervisor_list()"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a0c5dc1_bbf688d5","line":119,"range":{"start_line":119,"start_character":54,"end_line":119,"end_character":59},"updated":"2015-05-12 14:46:23.000000000","message":"Why/how is the port_id argument used ?","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"df167ac85ad79c8809656591400b20e1213c48f1","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            self.assertIn(self.router.id,"},{"line_number":117,"context_line":"                          seen_router_ids)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _create_servers(self, name, network, port_id\u003dNone):"},{"line_number":120,"context_line":"        # each hypervisor gets a server (vm)"},{"line_number":121,"context_line":"        list_of_servers \u003d []"},{"line_number":122,"context_line":"        hypers \u003d self.hypervisor_client.get_hypervisor_list()"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_b286cc63","line":119,"in_reply_to":"9a0c5dc1_bbf688d5","updated":"2015-06-19 23:52:33.000000000","message":"It should actually not be. I will set the port_id\u003dNone for all calls to _create_server","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"d3a306b22881b854ebe14ae9553adde6c62df64b","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        list_of_servers \u003d []"},{"line_number":122,"context_line":"        hypers \u003d self.hypervisor_client.get_hypervisor_list()"},{"line_number":123,"context_line":"        hyper_count \u003d len(hypers)"},{"line_number":124,"context_line":"        for i in range(0, hyper_count):"},{"line_number":125,"context_line":"            hyper_hostname \u003d hypers[i][\u0027hypervisor_hostname\u0027]"},{"line_number":126,"context_line":"            av_zone \u003d \u0027nova:\u0027 + str(hyper_hostname)"},{"line_number":127,"context_line":"            s_name \u003d str(name) + \"-on-\" + str(av_zone)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a0c5dc1_98062a1f","line":124,"range":{"start_line":124,"start_character":27,"end_line":124,"end_character":39},"updated":"2015-05-12 14:46:23.000000000","message":"You should use `enumerate` here","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3cf8badf8d8c33e8d918d53ea1726d33232fa860","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        list_of_servers \u003d []"},{"line_number":122,"context_line":"        hypers \u003d self.hypervisor_client.get_hypervisor_list()"},{"line_number":123,"context_line":"        hyper_count \u003d len(hypers)"},{"line_number":124,"context_line":"        for i in range(0, hyper_count):"},{"line_number":125,"context_line":"            hyper_hostname \u003d hypers[i][\u0027hypervisor_hostname\u0027]"},{"line_number":126,"context_line":"            av_zone \u003d \u0027nova:\u0027 + str(hyper_hostname)"},{"line_number":127,"context_line":"            s_name \u003d str(name) + \"-on-\" + str(av_zone)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_d2d0aaf8","line":124,"updated":"2015-05-08 20:46:41.000000000","message":"we should probably cap this to a more sane number. What if we test this again a 100 nodes cloud? This test will take for ever.","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"df167ac85ad79c8809656591400b20e1213c48f1","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        list_of_servers \u003d []"},{"line_number":122,"context_line":"        hypers \u003d self.hypervisor_client.get_hypervisor_list()"},{"line_number":123,"context_line":"        hyper_count \u003d len(hypers)"},{"line_number":124,"context_line":"        for i in range(0, hyper_count):"},{"line_number":125,"context_line":"            hyper_hostname \u003d hypers[i][\u0027hypervisor_hostname\u0027]"},{"line_number":126,"context_line":"            av_zone \u003d \u0027nova:\u0027 + str(hyper_hostname)"},{"line_number":127,"context_line":"            s_name \u003d str(name) + \"-on-\" + str(av_zone)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_f251b4d9","line":124,"in_reply_to":"1aca2d91_d2d0aaf8","updated":"2015-06-19 23:52:33.000000000","message":"Capped it at a max of 4","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"44645d0381ea76a52528a5a6789f0e18bb611b39","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        list_of_servers \u003d []"},{"line_number":122,"context_line":"        hypers \u003d self.hypervisor_client.get_hypervisor_list()"},{"line_number":123,"context_line":"        hyper_count \u003d len(hypers)"},{"line_number":124,"context_line":"        for i in range(0, hyper_count):"},{"line_number":125,"context_line":"            hyper_hostname \u003d hypers[i][\u0027hypervisor_hostname\u0027]"},{"line_number":126,"context_line":"            av_zone \u003d \u0027nova:\u0027 + str(hyper_hostname)"},{"line_number":127,"context_line":"            s_name \u003d str(name) + \"-on-\" + str(av_zone)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5ad58531_fc03f574","line":124,"in_reply_to":"1aca2d91_d2d0aaf8","updated":"2015-05-11 22:13:12.000000000","message":"Good point. Will cap this to three four hypervisos.  Intenally that is the max numbers we have had to use to cover most scenarios including testing with ha","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"df167ac85ad79c8809656591400b20e1213c48f1","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        list_of_servers \u003d []"},{"line_number":122,"context_line":"        hypers \u003d self.hypervisor_client.get_hypervisor_list()"},{"line_number":123,"context_line":"        hyper_count \u003d len(hypers)"},{"line_number":124,"context_line":"        for i in range(0, hyper_count):"},{"line_number":125,"context_line":"            hyper_hostname \u003d hypers[i][\u0027hypervisor_hostname\u0027]"},{"line_number":126,"context_line":"            av_zone \u003d \u0027nova:\u0027 + str(hyper_hostname)"},{"line_number":127,"context_line":"            s_name \u003d str(name) + \"-on-\" + str(av_zone)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_922aa8e6","line":124,"in_reply_to":"9a0c5dc1_98062a1f","updated":"2015-06-19 23:52:33.000000000","message":"done","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"d3a306b22881b854ebe14ae9553adde6c62df64b","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        for i in range(0, hyper_count):"},{"line_number":125,"context_line":"            hyper_hostname \u003d hypers[i][\u0027hypervisor_hostname\u0027]"},{"line_number":126,"context_line":"            av_zone \u003d \u0027nova:\u0027 + str(hyper_hostname)"},{"line_number":127,"context_line":"            s_name \u003d str(name) + \"-on-\" + str(av_zone)"},{"line_number":128,"context_line":"            server \u003d self._create_server(s_name, network, port_id, av_zone)"},{"line_number":129,"context_line":"            list_of_servers.append(server)"},{"line_number":130,"context_line":"        return list_of_servers"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a0c5dc1_5b266cbb","line":127,"range":{"start_line":127,"start_character":39,"end_line":127,"end_character":52},"updated":"2015-05-12 14:46:23.000000000","message":"This call to `str` here is useless.","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"df167ac85ad79c8809656591400b20e1213c48f1","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        for i in range(0, hyper_count):"},{"line_number":125,"context_line":"            hyper_hostname \u003d hypers[i][\u0027hypervisor_hostname\u0027]"},{"line_number":126,"context_line":"            av_zone \u003d \u0027nova:\u0027 + str(hyper_hostname)"},{"line_number":127,"context_line":"            s_name \u003d str(name) + \"-on-\" + str(av_zone)"},{"line_number":128,"context_line":"            server \u003d self._create_server(s_name, network, port_id, av_zone)"},{"line_number":129,"context_line":"            list_of_servers.append(server)"},{"line_number":130,"context_line":"        return list_of_servers"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_925f0875","line":127,"in_reply_to":"9a0c5dc1_5b266cbb","updated":"2015-06-19 23:52:33.000000000","message":"defensive programming. concatenating wit \"+\" will fail if any of the parts is not a str object, but will take it out as there is very small chance that will hapen.","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"d3a306b22881b854ebe14ae9553adde6c62df64b","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            list_of_servers.append(server)"},{"line_number":130,"context_line":"        return list_of_servers"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def _create_server(self, name, network, port_id\u003dNone, av_zone\u003d\u0027nova\u0027):"},{"line_number":133,"context_line":"        keypair \u003d self.create_keypair()"},{"line_number":134,"context_line":"        self.keypairs[keypair[\u0027name\u0027]] \u003d keypair"},{"line_number":135,"context_line":"        security_groups \u003d [{\u0027name\u0027: self.security_group[\u0027name\u0027]}]"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a0c5dc1_3bbbb8c6","line":132,"range":{"start_line":132,"start_character":8,"end_line":132,"end_character":22},"updated":"2015-05-12 14:46:23.000000000","message":"This is a duplicate of the same method defined in test_network_basic_ops.py (with support for availability_zone).\n\nI suggest you move this method in the base class and reuse it in test_network_basic_ops.py.","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"df167ac85ad79c8809656591400b20e1213c48f1","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            list_of_servers.append(server)"},{"line_number":130,"context_line":"        return list_of_servers"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def _create_server(self, name, network, port_id\u003dNone, av_zone\u003d\u0027nova\u0027):"},{"line_number":133,"context_line":"        keypair \u003d self.create_keypair()"},{"line_number":134,"context_line":"        self.keypairs[keypair[\u0027name\u0027]] \u003d keypair"},{"line_number":135,"context_line":"        security_groups \u003d [{\u0027name\u0027: self.security_group[\u0027name\u0027]}]"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_0d20b948","line":132,"in_reply_to":"9a0c5dc1_3bbbb8c6","updated":"2015-06-19 23:52:33.000000000","message":"Done. However I had to override the method in test_network_basic_ops.py because they are slightly different.","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3cf8badf8d8c33e8d918d53ea1726d33232fa860","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                server, ssh_login, self._get_server_key(server),"},{"line_number":158,"context_line":"                servers_for_debug\u003dself.servers)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def check_public_network_connectivity("},{"line_number":161,"context_line":"            self, should_connect\u003dTrue, msg\u003dNone,"},{"line_number":162,"context_line":"            should_check_floating_ip_status\u003dTrue):"},{"line_number":163,"context_line":"        \"\"\"Verifies connectivty to all VMs via public network and floating IP,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_b24c0ec9","line":160,"updated":"2015-05-08 20:46:41.000000000","message":"are we sure that we don\u0027t have such a test, already somewhere? Did your search yield nothing? \n\nI thought that test:\n\nhttps://github.com/openstack/tempest/blob/master/tempest/scenario/test_security_groups_basic_ops.py#L29\n\ncould be leveraged to force the \u0027anti-affinity\u0027 (aka, VM\u0027s on separate hosts).","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"44645d0381ea76a52528a5a6789f0e18bb611b39","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                server, ssh_login, self._get_server_key(server),"},{"line_number":158,"context_line":"                servers_for_debug\u003dself.servers)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def check_public_network_connectivity("},{"line_number":161,"context_line":"            self, should_connect\u003dTrue, msg\u003dNone,"},{"line_number":162,"context_line":"            should_check_floating_ip_status\u003dTrue):"},{"line_number":163,"context_line":"        \"\"\"Verifies connectivty to all VMs via public network and floating IP,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5ad58531_67652ee0","line":160,"in_reply_to":"1aca2d91_b24c0ec9","updated":"2015-05-11 22:13:12.000000000","message":"All the tests which I have seen (including above) create servers by relying on the scheduler to place  the vms.  The one you list above, as far as I can tell, puts the vms in a particular securitygroup, and tenant but that those not give 100% assurance that the vms are in the hypervisors the test wants them on.  even the round robin scheduler will not place the vms in different hypervisors if the conditions are not correct. \n            The requirements of the test are not that the vms be in different hypervisors, but that they be in a particular hypervisor. Thus the use of the \"availability_zone\" option. \n  It\u0027s not very obvious from the only test being included right now (test_fips_on_each_hypervisor) because  that is a very simple test. \nbut the test that comes next is actually moving the vms and then going to check the hypervisor we just left. (see https://bugs.launchpad.net/neutron/+bug/1450982) \nThen there are more tests which require the same setup. \nYes I could leverage some of the tests, and I started that way, trying to leverage basic_network_ops, but then I concluded that in the long run it would actually be cleaner code if I just started with this one, which still leverages lots of the framework, but doesn\u0027t ty itself to other tests. i.e. I dont\u0027 really want to inherit from too many other tests, because everytime I do that, changes come in to those tests which end up braking the one I am writing.","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"e2082ed0b32fdad477dcee286f4c258a57603d13","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                server, ssh_login, self._get_server_key(server),"},{"line_number":158,"context_line":"                servers_for_debug\u003dself.servers)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def check_public_network_connectivity("},{"line_number":161,"context_line":"            self, should_connect\u003dTrue, msg\u003dNone,"},{"line_number":162,"context_line":"            should_check_floating_ip_status\u003dTrue):"},{"line_number":163,"context_line":"        \"\"\"Verifies connectivty to all VMs via public network and floating IP,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a0c5dc1_e7b463d2","line":160,"in_reply_to":"5ad58531_67652ee0","updated":"2015-05-12 15:37:48.000000000","message":"I am not sure I understand what you mean: say you have 3 hosts, it\u0027s my understanding that you\u0027d want to spawn 3 VM, one per host and then do the cross connectivity checks. Technically speaking the test could provide the same level of test coverage by just landing 2 VM\u0027s. Why do you think we need more than 2?\n\nThat said, code duplication to bypass rebase conflicts is problematic and it\u0027s a practice to be avoided, otherwise the codebase bloats needlessly, and maintenance is more cumbersome than it needs to be.","commit_id":"ab54d53ff285b110fee13feacfe0c8f519cba5a4"}]}
