diff --git a/neutron_tempest_plugin/api/admin/test_quotas.py b/neutron_tempest_plugin/api/admin/test_quotas.py
index 0cf474e..eb47fa5 100644
--- a/neutron_tempest_plugin/api/admin/test_quotas.py
+++ b/neutron_tempest_plugin/api/admin/test_quotas.py
@@ -87,7 +87,7 @@
         new_quotas = {'network': 0, 'security_group': 0}
 
         # Change quotas for tenant
-        quota_set = self._setup_quotas(tenant_id, **new_quotas)
+        quota_set = self._setup_quotas(tenant_id, force=True, **new_quotas)
         for key, value in new_quotas.items():
             self.assertEqual(value, quota_set[key])
 
@@ -112,6 +112,23 @@
         for q in non_default_quotas['quotas']:
             self.assertNotEqual(tenant_id, q['tenant_id'])
 
+    @decorators.idempotent_id('43d01327-d8be-4773-a8f0-1d2e9664fda2')
+    @decorators.attr(type='gate')
+    @utils.requires_ext(extension='quota-check-limit-default',
+                        service='network')
+    def test_quotas_force_false(self):
+        project_id = self.create_project()['id']
+        self._create_network(project_id)
+
+        new_quotas = {'network': 0}
+        # force=false (by default)
+        self.assertRaises(lib_exc.BadRequest, self.admin_client.update_quotas,
+                          project_id, **new_quotas)
+
+        new_quotas['network'] = 100
+        quota_set = self._setup_quotas(project_id, **new_quotas)
+        self.assertEqual(new_quotas['network'], quota_set['network'])
+
     @decorators.idempotent_id('e974b5ba-090a-452c-a578-f9710151d9fc')
     @decorators.attr(type='gate')
     @utils.requires_ext(extension="quota_details", service="network")
diff --git a/neutron_tempest_plugin/api/test_security_groups.py b/neutron_tempest_plugin/api/test_security_groups.py
index 5e8b18e..6992399 100644
--- a/neutron_tempest_plugin/api/test_security_groups.py
+++ b/neutron_tempest_plugin/api/test_security_groups.py
@@ -281,9 +281,10 @@
     def _set_quota(self, val, resource):
         res_quota = self._get_quota(resource)
         project_id = self.client.project_id
-        self.admin_client.update_quotas(project_id, **{resource: val})
+        self.admin_client.update_quotas(project_id, **{resource: val,
+                                                       'force': True})
         self.addCleanup(self.admin_client.update_quotas,
-                        project_id, **{resource: res_quota})
+                        project_id, **{resource: res_quota, 'force': True})
 
     def _get_quota(self, resource):
         project_id = self.client.project_id
@@ -383,7 +384,8 @@
     def _set_sg_rules_quota(self, val):
         project_id = self.client.project_id
         self.admin_client.update_quotas(project_id,
-                                        **{'security_group_rule': val})
+                                        **{'security_group_rule': val,
+                                           'force': True})
         LOG.info('Trying to update security group rule quota {} '.format(val))
 
     def _get_sg_rules_quota(self):
@@ -435,7 +437,8 @@
         sg_rules_quota = self._get_sg_rules_quota()
         project_id = self.client.project_id
         self.addCleanup(self.admin_client.update_quotas,
-                        project_id, **{'security_group_rule': sg_rules_quota})
+                        project_id, **{'security_group_rule': sg_rules_quota,
+                                       'force': True})
         values = [-1, 0, 10, 2147483647]
         for value in values:
             self._set_sg_rules_quota(value)
diff --git a/neutron_tempest_plugin/scenario/test_dns_integration.py b/neutron_tempest_plugin/scenario/test_dns_integration.py
index 8163b51..d520aa2 100644
--- a/neutron_tempest_plugin/scenario/test_dns_integration.py
+++ b/neutron_tempest_plugin/scenario/test_dns_integration.py
@@ -39,8 +39,6 @@
 # when designate_tempest_plugin is not available
 dns_base = testtools.try_import('designate_tempest_plugin.tests.base')
 dns_waiters = testtools.try_import('designate_tempest_plugin.common.waiters')
-dns_data_utils = testtools.try_import('designate_tempest_plugin.data_utils')
-
 if dns_base:
     DNSMixin = dns_base.BaseDnsV2Test
 else:
@@ -54,9 +52,8 @@
     def setup_clients(cls):
         super(BaseDNSIntegrationTests, cls).setup_clients()
         cls.zone_client = cls.os_tempest.dns_v2.ZonesClient()
-        cls.admin_zone_client = cls.os_admin.dns_v2.ZonesClient()
         cls.recordset_client = cls.os_tempest.dns_v2.RecordsetClient()
-        cls.query_client.build_timeout = 60
+        cls.query_client.build_timeout = 30
 
     @classmethod
     def skip_checks(cls):
@@ -71,13 +68,12 @@
     @utils.requires_ext(extension="dns-integration", service="network")
     def resource_setup(cls):
         super(BaseDNSIntegrationTests, cls).resource_setup()
-        cls.zone_name = dns_data_utils.rand_zone_name(
-            name="basednsintegrationtests")
-        cls.zone = cls.zone_client.create_zone(
-            name=cls.zone_name, wait_until='ACTIVE')[1]
-        cls.addClassResourceCleanup(
-            cls.zone_client.delete_zone, cls.zone['id'],
-            ignore_errors=lib_exc.NotFound)
+        cls.zone = cls.zone_client.create_zone()[1]
+        cls.addClassResourceCleanup(cls.zone_client.delete_zone,
+            cls.zone['id'], ignore_errors=lib_exc.NotFound)
+        dns_waiters.wait_for_zone_status(
+            cls.zone_client, cls.zone['id'], 'ACTIVE')
+
         cls.network = cls.create_network(dns_domain=cls.zone['name'])
         cls.subnet = cls.create_subnet(cls.network)
         cls.subnet_v6 = cls.create_subnet(cls.network, ip_version=6)
@@ -85,20 +81,6 @@
         cls.create_router_interface(cls.router['id'], cls.subnet['id'])
         cls.keypair = cls.create_keypair()
 
-    @classmethod
-    def resource_cleanup(cls):
-        super(BaseDNSIntegrationTests, cls).resource_cleanup()
-        admin_listed_zones = cls.admin_zone_client.list_zones(
-            headers=dns_base.BaseDnsV2Test.all_projects_header)[1]['zones']
-        neutron_zone_ids = [
-            zn['id'] for zn in admin_listed_zones if
-            'zone for reverse lookups set up by Neutron.' in
-            str(zn['description']) and cls.zone_name.strip('.') in zn['email']]
-        for id in neutron_zone_ids:
-            cls.admin_zone_client.delete_zone(
-                id, headers=dns_base.BaseDnsV2Test.all_projects_header,
-                ignore_errors=lib_exc.NotFound)
-
     def _create_floatingip_with_dns(self, dns_name):
         return self.create_floatingip(client=self.os_primary.network_client,
                                       dns_name=dns_name,
@@ -268,8 +250,7 @@
     @classmethod
     def resource_setup(cls):
         super(DNSIntegrationExtraTests, cls).resource_setup()
-        cls.network2 = cls.create_network(
-            name=data_utils.rand_name('dns_integration_net'))
+        cls.network2 = cls.create_network()
         cls.subnet2 = cls.create_subnet(cls.network2)
         cls.subnet2_v6 = cls.create_subnet(cls.network2,
                                            ip_version=6,
@@ -293,16 +274,6 @@
         self.client.delete_port(port['id'])
         self._verify_dns_records(addr_v6, name, record_type='AAAA',
                                  found=False)
-        self.client.update_subnet(
-            self.subnet2['id'], dns_publish_fixed_ip=True)
-        port = self.create_port(self.network2,
-                                dns_domain=self.zone['name'],
-                                dns_name=name)
-        addr_v4 = port['fixed_ips'][1 - v6_index]['ip_address']
-        self._verify_dns_records(addr_v4, name, record_type='A')
-        self.client.delete_port(port['id'])
-        self._verify_dns_records(addr_v4, name, record_type='A',
-                                 found=False)
 
 
 class DNSIntegrationDomainPerProjectTests(BaseDNSIntegrationTests):
@@ -315,15 +286,19 @@
     @classmethod
     def resource_setup(cls):
         super(BaseDNSIntegrationTests, cls).resource_setup()
-        cls.name = data_utils.rand_name('test-domain')
-        cls.zone_name = "%s.%s.%s.zone." % (cls.client.user_id,
+
+        name = data_utils.rand_name('test-domain')
+        zone_name = "%s.%s.%s.zone." % (cls.client.user_id,
                                         cls.client.project_id,
-                                        cls.name)
-        dns_domain_template = "<user_id>.<project_id>.%s.zone." % cls.name
-        cls.zone = cls.zone_client.create_zone(
-            name=cls.zone_name, wait_until='ACTIVE')[1]
+                                        name)
+        dns_domain_template = "<user_id>.<project_id>.%s.zone." % name
+
+        cls.zone = cls.zone_client.create_zone(name=zone_name)[1]
         cls.addClassResourceCleanup(cls.zone_client.delete_zone,
             cls.zone['id'], ignore_errors=lib_exc.NotFound)
+        dns_waiters.wait_for_zone_status(
+            cls.zone_client, cls.zone['id'], 'ACTIVE')
+
         cls.network = cls.create_network(dns_domain=dns_domain_template)
         cls.subnet = cls.create_subnet(cls.network,
                                        dns_publish_fixed_ip=True)
@@ -334,20 +309,6 @@
         cls.create_router_interface(cls.router['id'], cls.subnet['id'])
         cls.keypair = cls.create_keypair()
 
-    @classmethod
-    def resource_cleanup(cls):
-        super(BaseDNSIntegrationTests, cls).resource_cleanup()
-        admin_listed_zones = cls.admin_zone_client.list_zones(
-            headers=dns_base.BaseDnsV2Test.all_projects_header)[1]['zones']
-        neutron_zone_ids = [
-            zn['id'] for zn in admin_listed_zones if
-            'zone for reverse lookups set up by Neutron.' in
-            str(zn['description']) and cls.zone_name.strip('.') in zn['email']]
-        for id in neutron_zone_ids:
-            cls.admin_zone_client.delete_zone(
-                id, headers=dns_base.BaseDnsV2Test.all_projects_header,
-                ignore_errors=lib_exc.NotFound)
-
     @decorators.idempotent_id('43a67509-3161-4125-8f2c-0d4a67599721')
     def test_port_with_dns_name(self):
         name = data_utils.rand_name('port-test')
diff --git a/neutron_tempest_plugin/scenario/test_mtu.py b/neutron_tempest_plugin/scenario/test_mtu.py
index ea62fcf..99c5130 100644
--- a/neutron_tempest_plugin/scenario/test_mtu.py
+++ b/neutron_tempest_plugin/scenario/test_mtu.py
@@ -170,18 +170,12 @@
     networks = []
 
     @classmethod
-    def skip_checks(cls):
-        super(NetworkWritableMtuTest, cls).skip_checks()
-        supported_type_drivers = ['vxlan', 'geneve']
-        if not any(type_driver in supported_type_drivers for type_driver in
-                   config.CONF.neutron_plugin_options.available_type_drivers):
-            raise cls.skipException(
-                "Neither VXLAN nor GENEVE type_driver is enabled")
-
-    @classmethod
     @utils.requires_ext(extension="net-mtu-writable", service="network")
     def resource_setup(cls):
         super(NetworkWritableMtuTest, cls).resource_setup()
+        if cls.is_driver_ovn:
+            raise cls.skipException("East/west icmp fragmentation is not "
+                                    "supported with ML2/OVN")
 
     def _create_setup(self):
         self.admin_client = self.os_admin.network_client
diff --git a/zuul.d/2023_1_jobs.yaml b/zuul.d/2023_1_jobs.yaml
index 4325b83..32e2c4c 100644
--- a/zuul.d/2023_1_jobs.yaml
+++ b/zuul.d/2023_1_jobs.yaml
@@ -210,10 +210,6 @@
           (^neutron_tempest_plugin.scenario)|\
           (^tempest.api.compute.servers.test_attach_interfaces)|\
           (^tempest.api.compute.servers.test_multiple_create)"
-      # TODO(jlibosva): Remove the NetworkWritableMtuTest test from the list
-      # once east/west fragmentation is supported in core OVN
-      tempest_exclude_regex: "\
-          (^neutron_tempest_plugin.scenario.test_mtu.NetworkWritableMtuTest)"
       devstack_localrc:
         NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_ovn) | join(',') }}"
       devstack_services:
diff --git a/zuul.d/2023_2_jobs.yaml b/zuul.d/2023_2_jobs.yaml
index 7406440..7aa1642 100644
--- a/zuul.d/2023_2_jobs.yaml
+++ b/zuul.d/2023_2_jobs.yaml
@@ -205,10 +205,6 @@
           (^neutron_tempest_plugin.scenario)|\
           (^tempest.api.compute.servers.test_attach_interfaces)|\
           (^tempest.api.compute.servers.test_multiple_create)"
-      # TODO(jlibosva): Remove the NetworkWritableMtuTest test from the list
-      # once east/west fragmentation is supported in core OVN
-      tempest_exclude_regex: "\
-          (^neutron_tempest_plugin.scenario.test_mtu.NetworkWritableMtuTest)"
       devstack_localrc:
         NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_ovn) | join(',') }}"
       devstack_services:
diff --git a/zuul.d/2024_1_jobs.yaml b/zuul.d/2024_1_jobs.yaml
index f0a182b..86fbc52 100644
--- a/zuul.d/2024_1_jobs.yaml
+++ b/zuul.d/2024_1_jobs.yaml
@@ -207,10 +207,6 @@
           (^neutron_tempest_plugin.scenario)|\
           (^tempest.api.compute.servers.test_attach_interfaces)|\
           (^tempest.api.compute.servers.test_multiple_create)"
-      # TODO(jlibosva): Remove the NetworkWritableMtuTest test from the list
-      # once east/west fragmentation is supported in core OVN
-      tempest_exclude_regex: "\
-          (^neutron_tempest_plugin.scenario.test_mtu.NetworkWritableMtuTest)"
       devstack_localrc:
         NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_ovn) | join(',') }}"
       devstack_local_conf:
diff --git a/zuul.d/master_jobs.yaml b/zuul.d/master_jobs.yaml
index b2e6c86..5518798 100644
--- a/zuul.d/master_jobs.yaml
+++ b/zuul.d/master_jobs.yaml
@@ -627,10 +627,6 @@
       network_api_extensions_ovn:
         - vlan-transparent
         - external-gateway-multihoming
-      # TODO(jlibosva): Remove the NetworkWritableMtuTest test from the list
-      # once east/west fragmentation is supported in core OVN
-      tempest_exclude_regex: "\
-          (^neutron_tempest_plugin.scenario.test_mtu.NetworkWritableMtuTest)"
       devstack_localrc:
         Q_AGENT: ovn
         OVN_AGENT_EXTENSIONS: 'metadata'
diff --git a/zuul.d/zed_jobs.yaml b/zuul.d/zed_jobs.yaml
index 176527d..54e9af5 100644
--- a/zuul.d/zed_jobs.yaml
+++ b/zuul.d/zed_jobs.yaml
@@ -186,8 +186,6 @@
           (^neutron_tempest_plugin.scenario)|\
           (^tempest.api.compute.servers.test_attach_interfaces)|\
           (^tempest.api.compute.servers.test_multiple_create)"
-      tempest_exclude_regex: "\
-          (^neutron_tempest_plugin.scenario.test_mtu.NetworkWritableMtuTest)"
       network_api_extensions: *api_extensions
       network_api_extensions_ovn:
         - vlan-transparent
