)]}'
{"neutron/tests/common/agents/l3_agent.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"d0e16d570521ebbd3779d28fddc4de45bdf53e05","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        router \u003d ("},{"line_number":65,"context_line":"            super(L3NATAgentForTest, self)._create_router(router_id, router))"},{"line_number":66,"context_line":"        router.get_internal_device_name \u003d get_internal_device_name"},{"line_number":67,"context_line":"        router.get_external_device_name \u003d get_external_device_name"},{"line_number":68,"context_line":"        return router"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_f84c00ca","line":67,"range":{"start_line":67,"start_character":8,"end_line":67,"end_character":66},"updated":"2016-11-25 18:11:46.000000000","message":"I don\u0027t think this is safe thing to do, rewriting bound method with function. It can lead to side-effects that will be hard to debug. You should bind the method:\n\n router.get_external_device_name \u003d types.MethodType(get_external_device_name, router)","commit_id":"a3819cd78bfb0ddde12d5bbd6646b17e35fd4fae"}],"neutron/tests/fullstack/resources/config.py":[{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"bdab6bff5a24997f3b18af86778390fda15b76ed","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                \u0027auth_strategy\u0027: \u0027noauth\u0027,"},{"line_number":82,"context_line":"                \u0027verbose\u0027: \u0027True\u0027,"},{"line_number":83,"context_line":"                \u0027debug\u0027: \u0027True\u0027,"},{"line_number":84,"context_line":"                \u0027api_workers\u0027: str(2),"},{"line_number":85,"context_line":"            },"},{"line_number":86,"context_line":"            \u0027database\u0027: {"},{"line_number":87,"context_line":"                \u0027connection\u0027: connection,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_cc566529","line":84,"updated":"2016-02-29 20:37:06.000000000","message":"How about simply \u00272\u0027? :)\n\nWhy do you need this change?","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"468085b232c89d0d8801bff817de031c98dc5729","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                \u0027auth_strategy\u0027: \u0027noauth\u0027,"},{"line_number":82,"context_line":"                \u0027verbose\u0027: \u0027True\u0027,"},{"line_number":83,"context_line":"                \u0027debug\u0027: \u0027True\u0027,"},{"line_number":84,"context_line":"                \u0027api_workers\u0027: str(2),"},{"line_number":85,"context_line":"            },"},{"line_number":86,"context_line":"            \u0027database\u0027: {"},{"line_number":87,"context_line":"                \u0027connection\u0027: connection,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_9fae212c","line":84,"in_reply_to":"9aed3d3a_cc566529","updated":"2016-03-01 09:19:26.000000000","message":"I added this to speed up the test. By default api_workers is none. In this test we call many api requests in loop. So I thought all api requests will be handled by these seperate api_workers.","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"}],"neutron/tests/fullstack/resources/environment.py":[{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"bdab6bff5a24997f3b18af86778390fda15b76ed","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        parent_range \u003d netaddr.IPRange(low, high)"},{"line_number":236,"context_line":"        return str(random.choice(parent_range))"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def disconnect(self):"},{"line_number":239,"context_line":"        if self.env_desc.tunneling_enabled:"},{"line_number":240,"context_line":"            self.tunnel_device.addr.flush(4)"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_d7ab8e73","line":238,"updated":"2016-02-29 20:37:06.000000000","message":"What about VLANs support? You\u0027d need to disconnect the provider bridge from the centralized bridge. (See line 199).","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"1eacbf69cdb2de6ecbb55350fd574da436668e13","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        parent_range \u003d netaddr.IPRange(low, high)"},{"line_number":236,"context_line":"        return str(random.choice(parent_range))"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def disconnect(self):"},{"line_number":239,"context_line":"        if self.env_desc.tunneling_enabled:"},{"line_number":240,"context_line":"            self.tunnel_device.addr.flush(4)"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_c61d4468","line":238,"in_reply_to":"9aed3d3a_3f1b9582","updated":"2016-03-01 15:42:27.000000000","message":"I will update this method for vlan later.","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"468085b232c89d0d8801bff817de031c98dc5729","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        parent_range \u003d netaddr.IPRange(low, high)"},{"line_number":236,"context_line":"        return str(random.choice(parent_range))"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def disconnect(self):"},{"line_number":239,"context_line":"        if self.env_desc.tunneling_enabled:"},{"line_number":240,"context_line":"            self.tunnel_device.addr.flush(4)"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_3f1b9582","line":238,"in_reply_to":"9aed3d3a_d7ab8e73","updated":"2016-03-01 09:19:26.000000000","message":"Thanks. I was using vxlan for the test. But I will update this method for vlan also, as it is already available in the other patch.","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"09bb8d2bb2942f3e2ba31c5bcf312ad3a96a920b","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def disconnect(self):"},{"line_number":239,"context_line":"        if self.env_desc.tunneling_enabled:"},{"line_number":240,"context_line":"            self.tunnel_device.addr.flush(4)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    @property"},{"line_number":243,"context_line":"    def hostname(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_712aa491","line":240,"updated":"2016-02-29 15:36:22.000000000","message":"nit: maybe would be better to use here some \"contant\" because I was not sure what this \"4\" means here.","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"468085b232c89d0d8801bff817de031c98dc5729","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def disconnect(self):"},{"line_number":239,"context_line":"        if self.env_desc.tunneling_enabled:"},{"line_number":240,"context_line":"            self.tunnel_device.addr.flush(4)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    @property"},{"line_number":243,"context_line":"    def hostname(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_1f1e916f","line":240,"in_reply_to":"9aed3d3a_712aa491","updated":"2016-03-01 09:19:26.000000000","message":"sure, thanks","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4e94414a977ef5ae9c8c009a3d416a33ae0e5b67","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        parent_range \u003d netaddr.IPRange(low, high)"},{"line_number":240,"context_line":"        return str(random.choice(parent_range))"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def disconnect(self):"},{"line_number":243,"context_line":"        if self.env_desc.tunneling_enabled:"},{"line_number":244,"context_line":"            self.tunnel_device.addr.flush(constants.IP_VERSION_4)"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_5aba7f24","line":242,"range":{"start_line":242,"start_character":8,"end_line":242,"end_character":18},"updated":"2016-03-29 13:53:00.000000000","message":"\"disconnet\" is pretty ambiguous. what are you disconneting?","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"a65660ee9e93f6c8d6b67e2873f3697c104b0ca3","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        parent_range \u003d netaddr.IPRange(low, high)"},{"line_number":240,"context_line":"        return str(random.choice(parent_range))"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def disconnect(self):"},{"line_number":243,"context_line":"        if self.env_desc.tunneling_enabled:"},{"line_number":244,"context_line":"            self.tunnel_device.addr.flush(constants.IP_VERSION_4)"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_f0372fe1","line":242,"range":{"start_line":242,"start_character":8,"end_line":242,"end_character":18},"in_reply_to":"ba0121b8_5aba7f24","updated":"2016-03-29 14:55:46.000000000","message":"disconnecting the host from provider network(both internal and external). But this change, for now, implements disconnecting from only internal network.","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"8271afba449921e8d51a81b764685b0fb3254c2b","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        parent_range \u003d netaddr.IPRange(low, high)"},{"line_number":240,"context_line":"        return str(random.choice(parent_range))"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def disconnect(self):"},{"line_number":243,"context_line":"        if self.env_desc.tunneling_enabled:"},{"line_number":244,"context_line":"            self.tunnel_device.addr.flush(constants.IP_VERSION_4)"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_45e4343a","line":242,"range":{"start_line":242,"start_character":8,"end_line":242,"end_character":18},"in_reply_to":"ba0121b8_9e91809c","updated":"2016-03-30 09:22:37.000000000","message":"sure, thanks","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"df537364dbf418f609aaefdf84865efc28f9f89d","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        parent_range \u003d netaddr.IPRange(low, high)"},{"line_number":240,"context_line":"        return str(random.choice(parent_range))"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def disconnect(self):"},{"line_number":243,"context_line":"        if self.env_desc.tunneling_enabled:"},{"line_number":244,"context_line":"            self.tunnel_device.addr.flush(constants.IP_VERSION_4)"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_9e91809c","line":242,"range":{"start_line":242,"start_character":8,"end_line":242,"end_character":18},"in_reply_to":"ba0121b8_f0372fe1","updated":"2016-03-30 08:11:57.000000000","message":"Can we perhaps rename the function to \u0027disconnect_from_internal_network\u0027 or something more indicative?","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4e94414a977ef5ae9c8c009a3d416a33ae0e5b67","unresolved":false,"context_lines":[{"line_number":324,"context_line":"                 self.central_external_bridge))"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def _setUp(self):"},{"line_number":327,"context_line":"        self.temp_dir \u003d self.useFixture(fixtures.TempDir()).path"},{"line_number":328,"context_line":"        #we need this bridge before rabbit and neutron service will start"},{"line_number":329,"context_line":"        self.central_data_bridge \u003d self.useFixture("},{"line_number":330,"context_line":"            net_helpers.OVSBridgeFixture(\u0027cnt-data\u0027)).bridge"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_1a6927bf","line":327,"updated":"2016-03-29 13:53:00.000000000","message":"Unrelated change here (a line was deleted for no reason).","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"a65660ee9e93f6c8d6b67e2873f3697c104b0ca3","unresolved":false,"context_lines":[{"line_number":324,"context_line":"                 self.central_external_bridge))"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def _setUp(self):"},{"line_number":327,"context_line":"        self.temp_dir \u003d self.useFixture(fixtures.TempDir()).path"},{"line_number":328,"context_line":"        #we need this bridge before rabbit and neutron service will start"},{"line_number":329,"context_line":"        self.central_data_bridge \u003d self.useFixture("},{"line_number":330,"context_line":"            net_helpers.OVSBridgeFixture(\u0027cnt-data\u0027)).bridge"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_4de648b5","line":327,"in_reply_to":"ba0121b8_1a6927bf","updated":"2016-03-29 14:55:46.000000000","message":"sure","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"}],"neutron/tests/fullstack/test_l3_agent.py":[{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"0ee058c8f5979d75bbdf577314e8a19948268d36","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            agents[\u0027agents\u0027][0][\u0027ha_state\u0027] !\u003d agents[\u0027agents\u0027][1][\u0027ha_state\u0027])"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def test_ha_router(self):"},{"line_number":82,"context_line":"        # TODO(amuller): Test external connectivity before and after a"},{"line_number":83,"context_line":"        # failover, see: https://review.openstack.org/#/c/196393/"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        tenant_id \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_37ebda79","line":82,"updated":"2016-02-29 20:39:04.000000000","message":"You can remove this TODO.","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"468085b232c89d0d8801bff817de031c98dc5729","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            agents[\u0027agents\u0027][0][\u0027ha_state\u0027] !\u003d agents[\u0027agents\u0027][1][\u0027ha_state\u0027])"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def test_ha_router(self):"},{"line_number":82,"context_line":"        # TODO(amuller): Test external connectivity before and after a"},{"line_number":83,"context_line":"        # failover, see: https://review.openstack.org/#/c/196393/"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        tenant_id \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_5f14994b","line":82,"in_reply_to":"9aed3d3a_37ebda79","updated":"2016-03-01 09:19:26.000000000","message":"sure, thanks","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"bdab6bff5a24997f3b18af86778390fda15b76ed","unresolved":false,"context_lines":[{"line_number":98,"context_line":"class TestHARouterFailover(base.BaseFullStackTestCase):"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def setUp(self):"},{"line_number":101,"context_line":"        # This test is taking 180 to 380 seconds to complete."},{"line_number":102,"context_line":"        os.environ[\"OS_TEST_TIMEOUT\"] \u003d str(1800)"},{"line_number":103,"context_line":"        host_descriptions \u003d ["},{"line_number":104,"context_line":"            environment.HostDescription(l3_agent\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_b71b6ac9","line":101,"updated":"2016-02-29 20:37:06.000000000","message":"str(1800) -\u003e \u00271800\u0027","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"09bb8d2bb2942f3e2ba31c5bcf312ad3a96a920b","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    def setUp(self):"},{"line_number":101,"context_line":"        # This test is taking 180 to 380 seconds to complete."},{"line_number":102,"context_line":"        os.environ[\"OS_TEST_TIMEOUT\"] \u003d str(1800)"},{"line_number":103,"context_line":"        host_descriptions \u003d ["},{"line_number":104,"context_line":"            environment.HostDescription(l3_agent\u003dTrue),"},{"line_number":105,"context_line":"            environment.HostDescription(l3_agent\u003dTrue),"},{"line_number":106,"context_line":"            environment.HostDescription()]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_742f3288","line":103,"updated":"2016-02-29 15:36:22.000000000","message":"nit: maybe hosts_descritption instead of host_descriptions would be better?","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"468085b232c89d0d8801bff817de031c98dc5729","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    def setUp(self):"},{"line_number":101,"context_line":"        # This test is taking 180 to 380 seconds to complete."},{"line_number":102,"context_line":"        os.environ[\"OS_TEST_TIMEOUT\"] \u003d str(1800)"},{"line_number":103,"context_line":"        host_descriptions \u003d ["},{"line_number":104,"context_line":"            environment.HostDescription(l3_agent\u003dTrue),"},{"line_number":105,"context_line":"            environment.HostDescription(l3_agent\u003dTrue),"},{"line_number":106,"context_line":"            environment.HostDescription()]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_c244524b","line":103,"in_reply_to":"9aed3d3a_742f3288","updated":"2016-03-01 09:19:26.000000000","message":"sure, thanks","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"bdab6bff5a24997f3b18af86778390fda15b76ed","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            environment.HostDescription(l3_agent\u003dTrue),"},{"line_number":106,"context_line":"            environment.HostDescription()]"},{"line_number":107,"context_line":"        env \u003d environment.Environment("},{"line_number":108,"context_line":"            environment.EnvironmentDescription(),"},{"line_number":109,"context_line":"            host_descriptions)"},{"line_number":110,"context_line":"        super(TestHARouterFailover, self).setUp(env)"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_d71eeeb9","line":108,"updated":"2016-02-29 20:37:06.000000000","message":"I see you import testscenarios, did you intend to run this twice, once with l2pop and once without?","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"468085b232c89d0d8801bff817de031c98dc5729","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            environment.HostDescription(l3_agent\u003dTrue),"},{"line_number":106,"context_line":"            environment.HostDescription()]"},{"line_number":107,"context_line":"        env \u003d environment.Environment("},{"line_number":108,"context_line":"            environment.EnvironmentDescription(),"},{"line_number":109,"context_line":"            host_descriptions)"},{"line_number":110,"context_line":"        super(TestHARouterFailover, self).setUp(env)"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_02347adb","line":108,"in_reply_to":"9aed3d3a_d71eeeb9","updated":"2016-03-01 09:19:26.000000000","message":"No, I will remove them.","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"09bb8d2bb2942f3e2ba31c5bcf312ad3a96a920b","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            host_descriptions)"},{"line_number":110,"context_line":"        super(TestHARouterFailover, self).setUp(env)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _is_ha_router_active_on_one_agent(self, router_id):"},{"line_number":113,"context_line":"        agents \u003d self.client.list_l3_agent_hosting_routers(router_id)[\u0027agents\u0027]"},{"line_number":114,"context_line":"        if len(agents) \u003d\u003d 2 and ("},{"line_number":115,"context_line":"            agents[0][\u0027ha_state\u0027] !\u003d agents[1][\u0027ha_state\u0027]):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_b4d6da4c","line":112,"updated":"2016-02-29 15:36:22.000000000","message":"isn\u0027t this method same as method from line 76? Maybe it could be made as one method used somehow in both classes?","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"468085b232c89d0d8801bff817de031c98dc5729","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            host_descriptions)"},{"line_number":110,"context_line":"        super(TestHARouterFailover, self).setUp(env)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _is_ha_router_active_on_one_agent(self, router_id):"},{"line_number":113,"context_line":"        agents \u003d self.client.list_l3_agent_hosting_routers(router_id)[\u0027agents\u0027]"},{"line_number":114,"context_line":"        if len(agents) \u003d\u003d 2 and ("},{"line_number":115,"context_line":"            agents[0][\u0027ha_state\u0027] !\u003d agents[1][\u0027ha_state\u0027]):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_62cc66bb","line":112,"in_reply_to":"9aed3d3a_b4d6da4c","updated":"2016-03-01 09:19:26.000000000","message":"I will check, thanks","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"bdab6bff5a24997f3b18af86778390fda15b76ed","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            sleep\u003d3)"},{"line_number":127,"context_line":"        return router"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _is_ha_router_interface_up(self, router_id):"},{"line_number":130,"context_line":"        ports \u003d self.client.list_ports("},{"line_number":131,"context_line":"            device_owner\u003d\u0027network:router_interface\u0027)[\u0027ports\u0027]"},{"line_number":132,"context_line":"        if ports[0][\u0027status\u0027] \u003d\u003d \u0027ACTIVE\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_4c109559","line":129,"updated":"2016-02-29 20:37:06.000000000","message":"Am I blind or are you not using the router_id here? This would just check a random port, not necessarily a router port.","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"468085b232c89d0d8801bff817de031c98dc5729","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            sleep\u003d3)"},{"line_number":127,"context_line":"        return router"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _is_ha_router_interface_up(self, router_id):"},{"line_number":130,"context_line":"        ports \u003d self.client.list_ports("},{"line_number":131,"context_line":"            device_owner\u003d\u0027network:router_interface\u0027)[\u0027ports\u0027]"},{"line_number":132,"context_line":"        if ports[0][\u0027status\u0027] \u003d\u003d \u0027ACTIVE\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_0262bad7","line":129,"in_reply_to":"9aed3d3a_4c109559","updated":"2016-03-01 09:19:26.000000000","message":"thanks :)\nI am using only one router, so not using router_id. But I will make it generic and update it to use router_id.","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"bdab6bff5a24997f3b18af86778390fda15b76ed","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            timeout\u003d90,"},{"line_number":142,"context_line":"            sleep\u003d3)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def _is_server_down(self):"},{"line_number":145,"context_line":"        return not self.environment.neutron_server.server_is_live()"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def block_until_server_down(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_8c0e1d39","line":144,"updated":"2016-02-29 20:37:06.000000000","message":"This could be defined as a private method in \u0027block_until_server_down\u0027, or even as a lambda.","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"468085b232c89d0d8801bff817de031c98dc5729","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            timeout\u003d90,"},{"line_number":142,"context_line":"            sleep\u003d3)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def _is_server_down(self):"},{"line_number":145,"context_line":"        return not self.environment.neutron_server.server_is_live()"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def block_until_server_down(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_e25cf61a","line":144,"in_reply_to":"9aed3d3a_8c0e1d39","updated":"2016-03-01 09:19:26.000000000","message":"sure","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"bdab6bff5a24997f3b18af86778390fda15b76ed","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        hostname \u003d next("},{"line_number":163,"context_line":"            agent[\u0027host\u0027] for agent in result[\u0027agents\u0027] if"},{"line_number":164,"context_line":"            agent[\u0027ha_state\u0027] \u003d\u003d \u0027active\u0027)"},{"line_number":165,"context_line":"        for host in self.environment.hosts:"},{"line_number":166,"context_line":"            if host.hostname \u003d\u003d hostname:"},{"line_number":167,"context_line":"                return host"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_f72cd29a","line":165,"updated":"2016-02-29 20:37:06.000000000","message":"These 3 lines probably belong to a class at the fullstack level, this would be useful to more than just this test.","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"468085b232c89d0d8801bff817de031c98dc5729","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        hostname \u003d next("},{"line_number":163,"context_line":"            agent[\u0027host\u0027] for agent in result[\u0027agents\u0027] if"},{"line_number":164,"context_line":"            agent[\u0027ha_state\u0027] \u003d\u003d \u0027active\u0027)"},{"line_number":165,"context_line":"        for host in self.environment.hosts:"},{"line_number":166,"context_line":"            if host.hostname \u003d\u003d hostname:"},{"line_number":167,"context_line":"                return host"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_62f586eb","line":165,"in_reply_to":"9aed3d3a_f72cd29a","updated":"2016-03-01 09:19:26.000000000","message":"I will check","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"bdab6bff5a24997f3b18af86778390fda15b76ed","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        active_host.disconnect()"},{"line_number":199,"context_line":"        vm.block_until_ping(router_ip)"},{"line_number":200,"context_line":"        # server needed for cleanup"},{"line_number":201,"context_line":"        self.environment.neutron_server.process_fixture.process.start("},{"line_number":202,"context_line":"            block\u003dTrue)"},{"line_number":203,"context_line":"        utils.wait_until_true(self.environment.neutron_server.server_is_live)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_375aba2a","line":200,"updated":"2016-02-29 20:37:06.000000000","message":"Maybe the clean ups should be changed instead.","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"468085b232c89d0d8801bff817de031c98dc5729","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        active_host.disconnect()"},{"line_number":199,"context_line":"        vm.block_until_ping(router_ip)"},{"line_number":200,"context_line":"        # server needed for cleanup"},{"line_number":201,"context_line":"        self.environment.neutron_server.process_fixture.process.start("},{"line_number":202,"context_line":"            block\u003dTrue)"},{"line_number":203,"context_line":"        utils.wait_until_true(self.environment.neutron_server.server_is_live)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_22effe1e","line":200,"in_reply_to":"9aed3d3a_375aba2a","updated":"2016-03-01 09:19:26.000000000","message":"sorry I didn\u0027t get it.\nMy intention was, when the test finished, remove_router_interface, delete_router etc will be called and neutron-server is needed for this.\nHow can we avoid this? Thanks","commit_id":"03841114099648e68ad1209fe7ee3aec52bf8a65"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"840fe15d224a54fb5b9041c642545b15af8c27c2","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            return not self.environment.neutron_server.server_is_live()"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        utils.wait_until_true("},{"line_number":77,"context_line":"            functools.partial("},{"line_number":78,"context_line":"                is_server_down),"},{"line_number":79,"context_line":"            timeout\u003d90,"},{"line_number":80,"context_line":"            sleep\u003d3)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da0c15f0_bd856c5a","line":77,"updated":"2016-03-28 07:32:06.000000000","message":"functools not needed for this call","commit_id":"1f86c1a3a0fc8c7eff6e6c07693e61986bb40b29"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"203d1f7662b9733df1e22570e992c8fed2a6d2c5","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            return not self.environment.neutron_server.server_is_live()"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        utils.wait_until_true("},{"line_number":77,"context_line":"            functools.partial("},{"line_number":78,"context_line":"                is_server_down),"},{"line_number":79,"context_line":"            timeout\u003d90,"},{"line_number":80,"context_line":"            sleep\u003d3)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da0c15f0_7d3593f5","line":77,"in_reply_to":"da0c15f0_bd856c5a","updated":"2016-03-28 08:39:53.000000000","message":"sure, thanks","commit_id":"1f86c1a3a0fc8c7eff6e6c07693e61986bb40b29"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"840fe15d224a54fb5b9041c642545b15af8c27c2","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def setUp(self):"},{"line_number":155,"context_line":"        # This test is taking 180 to 380 seconds to complete."},{"line_number":156,"context_line":"        os.environ[\"OS_TEST_TIMEOUT\"] \u003d \u0027600\u0027"},{"line_number":157,"context_line":"        hosts_description \u003d ["},{"line_number":158,"context_line":"            environment.HostDescription(l3_agent\u003dTrue),"},{"line_number":159,"context_line":"            environment.HostDescription(l3_agent\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":8,"id":"da0c15f0_1d7d786e","line":156,"updated":"2016-03-28 07:32:06.000000000","message":"At a minimum this needs a cleanup otherwise the timeout will be applied to every test after this is set.\n\nHowever, isn\u0027t there a way we can make this test faster? What is the component that is taking so long to recover? I would rather this test change keepalive timeouts or whatever is necessary to speed this up. It shouldn\u0027t take 5 minutes for something like this to complete.","commit_id":"1f86c1a3a0fc8c7eff6e6c07693e61986bb40b29"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"203d1f7662b9733df1e22570e992c8fed2a6d2c5","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def setUp(self):"},{"line_number":155,"context_line":"        # This test is taking 180 to 380 seconds to complete."},{"line_number":156,"context_line":"        os.environ[\"OS_TEST_TIMEOUT\"] \u003d \u0027600\u0027"},{"line_number":157,"context_line":"        hosts_description \u003d ["},{"line_number":158,"context_line":"            environment.HostDescription(l3_agent\u003dTrue),"},{"line_number":159,"context_line":"            environment.HostDescription(l3_agent\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":8,"id":"da0c15f0_5d31af04","line":156,"in_reply_to":"da0c15f0_1d7d786e","updated":"2016-03-28 08:39:53.000000000","message":"I will remove this timeout as by default we are using 600 as timeout for fullstack tests\nhttps://github.com/openstack/neutron/commit/56912b99db1edcacd46f750a398bb71c0415ff3a","commit_id":"1f86c1a3a0fc8c7eff6e6c07693e61986bb40b29"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4e94414a977ef5ae9c8c009a3d416a33ae0e5b67","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from neutron.tests.fullstack.resources import machine"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class L3TestCaseMixin(object):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def _get_namespace(self, router_id):"},{"line_number":32,"context_line":"        return namespaces.build_ns_name(l3_agent.NS_PREFIX, router_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_da416f0d","line":29,"range":{"start_line":29,"start_character":6,"end_line":29,"end_character":21},"updated":"2016-03-29 13:53:00.000000000","message":"We definitely don\u0027t want Mixin classes when we can avoid them. Why not have this case be declared like so:\n\n class L3BaseTestCase(base.BaseFullStackTestCase):\n     #...\n\nAnd have the other tests in this file inherit from it?\n\n\nAlso, it doesn\u0027t seem like the 2 existing classes (TestLegacyL3Agent, TestHAL3Agent) are using any of this new functionality, so I\u0027m wondering why this is even needed as a base class for them.","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"8271afba449921e8d51a81b764685b0fb3254c2b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from neutron.tests.fullstack.resources import machine"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class L3TestCaseMixin(object):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def _get_namespace(self, router_id):"},{"line_number":32,"context_line":"        return namespaces.build_ns_name(l3_agent.NS_PREFIX, router_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_651cd812","line":29,"range":{"start_line":29,"start_character":6,"end_line":29,"end_character":21},"in_reply_to":"ba0121b8_be3a8496","updated":"2016-03-30 09:22:37.000000000","message":"I will try. thanks John","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"df537364dbf418f609aaefdf84865efc28f9f89d","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from neutron.tests.fullstack.resources import machine"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class L3TestCaseMixin(object):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def _get_namespace(self, router_id):"},{"line_number":32,"context_line":"        return namespaces.build_ns_name(l3_agent.NS_PREFIX, router_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_be3a8496","line":29,"range":{"start_line":29,"start_character":6,"end_line":29,"end_character":21},"in_reply_to":"ba0121b8_cd99b870","updated":"2016-03-30 08:11:57.000000000","message":"If these functions are not used by current classes, they shouldn\u0027t be added to them. If we want them later on, we can add them then.\n\nEven with Assaf\u0027s comment, you can still use \u0027class L3BaseTestCase(base.BaseFullStackTestCase):\u0027 - just don\u0027t define the setUp() and make this class an abstract one.","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"a65660ee9e93f6c8d6b67e2873f3697c104b0ca3","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from neutron.tests.fullstack.resources import machine"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class L3TestCaseMixin(object):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def _get_namespace(self, router_id):"},{"line_number":32,"context_line":"        return namespaces.build_ns_name(l3_agent.NS_PREFIX, router_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_cd99b870","line":29,"range":{"start_line":29,"start_character":6,"end_line":29,"end_character":21},"in_reply_to":"ba0121b8_da416f0d","updated":"2016-03-29 14:55:46.000000000","message":"These functions are generic functions which can be used in for any tests(if we are adding later) in TestLegacyL3Agent, TestHAL3Agent.\n\nAlso as Assaf explained why separate class needed for TestHARouterFailover, I can\u0027t use \nclass L3BaseTestCase(base.BaseFullStackTestCase):","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4e94414a977ef5ae9c8c009a3d416a33ae0e5b67","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class L3TestCaseMixin(object):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def _get_namespace(self, router_id):"},{"line_number":32,"context_line":"        return namespaces.build_ns_name(l3_agent.NS_PREFIX, router_id)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def _assert_namespace_exists(self, ns_name):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_facb9370","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":22},"updated":"2016-03-29 13:53:00.000000000","message":"The following 2 functions can be static methods.","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"a65660ee9e93f6c8d6b67e2873f3697c104b0ca3","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class L3TestCaseMixin(object):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def _get_namespace(self, router_id):"},{"line_number":32,"context_line":"        return namespaces.build_ns_name(l3_agent.NS_PREFIX, router_id)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def _assert_namespace_exists(self, ns_name):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_0da450a4","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":22},"in_reply_to":"ba0121b8_facb9370","updated":"2016-03-29 14:55:46.000000000","message":"sure, thanks","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4e94414a977ef5ae9c8c009a3d416a33ae0e5b67","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            sleep\u003d3)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def block_until_server_down(self):"},{"line_number":72,"context_line":"        def is_server_down():"},{"line_number":73,"context_line":"            return not self.environment.neutron_server.server_is_live()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        utils.wait_until_true(is_server_down(), timeout\u003d90, sleep\u003d3)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_3a9d0b66","line":72,"range":{"start_line":72,"start_character":12,"end_line":72,"end_character":26},"updated":"2016-03-29 13:53:00.000000000","message":"nit: can be done with a lambda expression, but you don\u0027t have to do it if you don\u0027t want to :)","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"9899edb48ed83aa7c696d5baf09b1fa6fc3a615f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            sleep\u003d3)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def block_until_server_down(self):"},{"line_number":72,"context_line":"        def is_server_down():"},{"line_number":73,"context_line":"            return not self.environment.neutron_server.server_is_live()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        utils.wait_until_true(is_server_down(), timeout\u003d90, sleep\u003d3)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_356a3c81","line":72,"range":{"start_line":72,"start_character":12,"end_line":72,"end_character":26},"in_reply_to":"ba0121b8_3a9d0b66","updated":"2016-03-29 14:02:00.000000000","message":"In retrospect, the wording of my comment is a bit weird here - I meant this in the \"no action required\" sense.","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4e94414a977ef5ae9c8c009a3d416a33ae0e5b67","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            timeout\u003d90)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"class TestHARouterFailover(base.BaseFullStackTestCase, L3TestCaseMixin):"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def setUp(self):"},{"line_number":150,"context_line":"        hosts_description \u003d ["}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_9a8ff722","line":147,"range":{"start_line":147,"start_character":6,"end_line":147,"end_character":26},"updated":"2016-03-29 13:53:00.000000000","message":"I\u0027m against declaring one test class for each test. This test should be incorporated into TestHAL3Agent.","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"60d5bf5274e2dd52a2ca088d02c02770ba43f6ee","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            timeout\u003d90)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"class TestHARouterFailover(base.BaseFullStackTestCase, L3TestCaseMixin):"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def setUp(self):"},{"line_number":150,"context_line":"        hosts_description \u003d ["}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_d509402e","line":147,"range":{"start_line":147,"start_character":6,"end_line":147,"end_character":26},"in_reply_to":"ba0121b8_9a8ff722","updated":"2016-03-29 14:01:27.000000000","message":"The test class defines the test topology. TestHAL3Agent doesn\u0027t need a third host for example.","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4e94414a977ef5ae9c8c009a3d416a33ae0e5b67","unresolved":false,"context_lines":[{"line_number":165,"context_line":"            tenant_uuid, network[\u0027id\u0027], \u002720.0.0.0/24\u0027, enable_dhcp\u003dFalse)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        # hosts[0] and hosts[1] are hosting ha router."},{"line_number":168,"context_line":"        # host[2] is not having l3 agent."},{"line_number":169,"context_line":"        vm \u003d self.useFixture("},{"line_number":170,"context_line":"            machine.FakeFullstackMachine("},{"line_number":171,"context_line":"                self.environment.hosts[2],"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_1a4007a5","line":168,"range":{"start_line":168,"start_character":18,"end_line":168,"end_character":31},"updated":"2016-03-29 13:53:00.000000000","message":"s/is not having/doesn\u0027t have/","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"a65660ee9e93f6c8d6b67e2873f3697c104b0ca3","unresolved":false,"context_lines":[{"line_number":165,"context_line":"            tenant_uuid, network[\u0027id\u0027], \u002720.0.0.0/24\u0027, enable_dhcp\u003dFalse)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        # hosts[0] and hosts[1] are hosting ha router."},{"line_number":168,"context_line":"        # host[2] is not having l3 agent."},{"line_number":169,"context_line":"        vm \u003d self.useFixture("},{"line_number":170,"context_line":"            machine.FakeFullstackMachine("},{"line_number":171,"context_line":"                self.environment.hosts[2],"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_6dbb4cc5","line":168,"range":{"start_line":168,"start_character":18,"end_line":168,"end_character":31},"in_reply_to":"ba0121b8_1a4007a5","updated":"2016-03-29 14:55:46.000000000","message":"sure","commit_id":"a7f9d6dde398f8fd0fe5b0e8538a742816088cd2"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"d0e16d570521ebbd3779d28fddc4de45bdf53e05","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _is_ha_router_active_on_one_agent(self, router_id):"},{"line_number":130,"context_line":"        agents \u003d self.client.list_l3_agent_hosting_routers(router_id)[\u0027agents\u0027]"},{"line_number":131,"context_line":"        if len(agents) \u003d\u003d 2 and ("},{"line_number":132,"context_line":"            agents[0][\u0027ha_state\u0027] !\u003d agents[1][\u0027ha_state\u0027]):"},{"line_number":133,"context_line":"            return True"},{"line_number":134,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_3384db5c","line":131,"range":{"start_line":131,"start_character":25,"end_line":131,"end_character":27},"updated":"2016-11-25 18:11:46.000000000","message":"This BaseClass should be generic, there can be different amount of l3 agents.","commit_id":"a3819cd78bfb0ddde12d5bbd6646b17e35fd4fae"}]}
