Make L3AgentSchedulerTestJSON DVR-aware

test_add_list_remove_router_on_l3_agent fails when testing with DVR
routers as distributed routers follow a different agent binding logic.

Due to this failure, performance improvements like e99f6e00 were reverted.
This called for a revision of the test case. This change ensures that,
when needed, the test provisions extra resources so that the binding logic
can be successful.

Closes-Bug: #1433349

Co-Authored-By: Armando Migliaccio <armamig@gmail.com>

Change-Id: I15bbf16fd4378c6431e9da8942d0968e7a012a91
diff --git a/tempest/api/network/admin/test_l3_agent_scheduler.py b/tempest/api/network/admin/test_l3_agent_scheduler.py
index cf0b5e3..fca57c6 100644
--- a/tempest/api/network/admin/test_l3_agent_scheduler.py
+++ b/tempest/api/network/admin/test_l3_agent_scheduler.py
@@ -65,6 +65,21 @@
             msg = "L3 Agent Scheduler enabled in conf, but L3 Agent not found"
             raise exceptions.InvalidConfiguration(msg)
         cls.router = cls.create_router(data_utils.rand_name('router'))
+        # NOTE(armax): If DVR is an available extension, and the created router
+        # is indeed a distributed one, more resources need to be provisioned
+        # in order to bind the router to the L3 agent.
+        # That said, let's preserve the existing test logic, where the extra
+        # query and setup steps are only required if the extension is available
+        # and only if the router's default type is distributed.
+        if test.is_extension_enabled('dvr', 'network'):
+            is_dvr_router = cls.admin_client.show_router(
+                cls.router['id'])['router'].get('distributed', False)
+            if is_dvr_router:
+                cls.network = cls.create_network()
+                cls.create_subnet(cls.network)
+                cls.port = cls.create_port(cls.network)
+                cls.client.add_router_interface_with_port_id(
+                    cls.router['id'], cls.port['id'])
 
     @test.attr(type='smoke')
     @test.idempotent_id('b7ce6e89-e837-4ded-9b78-9ed3c9c6a45a')