Tap Mirror API and scenario tests

Change-Id: I0876068eb15053853f52ba9bdab1f6cce484f417
Depends-On: https://review.opendev.org/c/openstack/tap-as-a-service/+/893509
Depends-On: https://review.opendev.org/c/openstack/neutron/+/905840
Related-Bug: #2015471
diff --git a/zuul.d/2023_1_jobs.yaml b/zuul.d/2023_1_jobs.yaml
index d69054c..0bda403 100644
--- a/zuul.d/2023_1_jobs.yaml
+++ b/zuul.d/2023_1_jobs.yaml
@@ -318,5 +318,9 @@
     nodeset: openstack-single-node-jammy
     override-checkout: stable/2023.1
     vars:
+      network_api_extensions_common: *api_extensions
+      network_api_extensions_tempest:
+        - taas
+        - taas-vlan-filter
       devstack_localrc:
         NEUTRON_DEPLOY_MOD_WSGI: false
diff --git a/zuul.d/2024_1_jobs.yaml b/zuul.d/2024_1_jobs.yaml
index 674d1ab..65fa585 100644
--- a/zuul.d/2024_1_jobs.yaml
+++ b/zuul.d/2024_1_jobs.yaml
@@ -301,5 +301,9 @@
     nodeset: openstack-single-node-jammy
     override-checkout: stable/2024.1
     vars:
+      network_api_extensions_common: *api_extensions
+      network_api_extensions_tempest:
+        - taas
+        - taas-vlan-filter
       devstack_localrc:
         NEUTRON_DEPLOY_MOD_WSGI: false
diff --git a/zuul.d/2024_2_jobs.yaml b/zuul.d/2024_2_jobs.yaml
index e19767c..d54cf35 100644
--- a/zuul.d/2024_2_jobs.yaml
+++ b/zuul.d/2024_2_jobs.yaml
@@ -287,3 +287,10 @@
     parent: neutron-tempest-plugin-tap-as-a-service
     nodeset: openstack-single-node-jammy
     override-checkout: stable/2024.2
+    vars:
+      network_api_extensions_common: *api_extensions
+      network_api_extensions_tempest:
+        - taas
+        - taas-vlan-filter
+      devstack_localrc:
+        NEUTRON_DEPLOY_MOD_WSGI: false
diff --git a/zuul.d/2025_1_jobs.yaml b/zuul.d/2025_1_jobs.yaml
index 40d600f..f1e5b2b 100644
--- a/zuul.d/2025_1_jobs.yaml
+++ b/zuul.d/2025_1_jobs.yaml
@@ -252,3 +252,9 @@
     parent: neutron-tempest-plugin-tap-as-a-service
     nodeset: openstack-single-node-noble
     override-checkout: stable/2025.1
+
+- job:
+    name: neutron-tempest-plugin-tap-as-a-service-ovn-2025-1
+    parent: neutron-tempest-plugin-tap-as-a-service-ovn
+    nodeset: openstack-single-node-noble
+    override-checkout: stable/2025.1
diff --git a/zuul.d/master_jobs.yaml b/zuul.d/master_jobs.yaml
index 232f0a1..11e66b7 100644
--- a/zuul.d/master_jobs.yaml
+++ b/zuul.d/master_jobs.yaml
@@ -1512,12 +1512,14 @@
       network_api_extensions_tempest:
         - taas
         - taas-vlan-filter
+        - tap-mirror
       devstack_localrc:
         NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_tempest) | join(',') }}"
         BUILD_TIMEOUT: 784
         Q_AGENT: openvswitch
         Q_ML2_TENANT_NETWORK_TYPE: vxlan,vlan
         Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
+        OVS_BRANCH: "branch-3.3"
       devstack_local_conf:
         post-config:
           /$NEUTRON_CORE_PLUGIN_CONF:
@@ -1569,10 +1571,11 @@
         q-svc: true
         neutron: true
         taas: true
+        tap_mirror: true
         taas_openvswitch_agent: true
         tempest: true
         dstat: true
-    irrelevant-files:
+    irrelevant-files: &taas_irrelevant_files
       - ^\.pylintrc$
       - ^(test-|)requirements.txt$
       - ^lower-constraints.txt$
@@ -1604,3 +1607,52 @@
       # Ignore everything except for zuul.d/project.yaml
       - ^zuul.d/.*_jobs\.yaml$
       - ^zuul.d/base-nested-switch.yaml
+
+- job:
+    name: neutron-tempest-plugin-tap-as-a-service-ovn
+    parent: neutron-tempest-plugin-base
+    description: |
+      Test tap-mirrors with OVN
+    roles:
+      - zuul: openstack/devstack
+    required-projects:
+      - openstack/neutron
+      - openstack/neutron-tempest-plugin
+      - openstack/tap-as-a-service
+      - openstack/tempest
+    vars:
+      tempest_concurrency: 4
+      tempest_test_regex: ^neutron_tempest_plugin\.tap_as_a_service
+      tox_envlist: all
+      network_api_extensions_tempest:
+        - taas
+        - tap-mirror
+      devstack_localrc:
+        Q_AGENT: ovn
+        NETWORK_API_EXTENSIONS: "{{ (network_api_extensions_common + network_api_extensions_tempest) | join(',') }}"
+        BUILD_TIMEOUT: 784
+        TAAS_SERVICE_DRIVER: "TAAS:TAAS:neutron_taas.services.taas.service_drivers.ovn.taas_ovn.TaasOvnDriver:default"
+        # mirroring is available from OVN 22.12.0 and use OVS 3.2.1 that also have this
+        # feature and builds with the above OVN
+        OVN_BRANCH: "branch-24.03"
+        OVS_BRANCH: "branch-3.3"
+      devstack_local_conf:
+        test-config:
+          $TEMPEST_CONFIG:
+            neutron_plugin_options:
+              image_is_advanced: true
+              advanced_image_flavor_ref: d1
+            taas:
+              provider_physical_network: public
+              provider_segmentation_id: 100
+            image_feature_enabled:
+              api_v2: true
+      devstack_plugins:
+        neutron: git://opendev.org/openstack/neutron.git
+        neutron-tempest-plugin: https://opendev.org/openstack/neutron-tempest-plugin.git
+        tap-as-a-service: git://opendev.org/openstack/tap-as-a-service.git
+      devstack_services:
+        tap_mirror: true
+        taas: true
+        tempest: true
+    irrelevant-files: *taas_irrelevant_files
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
index f9f70dd..1720745 100644
--- a/zuul.d/project.yaml
+++ b/zuul.d/project.yaml
@@ -235,9 +235,11 @@
         - neutron-tempest-plugin-vpnaas-2024-2
         - neutron-tempest-plugin-vpnaas-2025-1
         - neutron-tempest-plugin-tap-as-a-service
+        - neutron-tempest-plugin-tap-as-a-service-ovn
         - neutron-tempest-plugin-tap-as-a-service-2024-1
         - neutron-tempest-plugin-tap-as-a-service-2024-2
         - neutron-tempest-plugin-tap-as-a-service-2025-1
+        - neutron-tempest-plugin-tap-as-a-service-ovn-2025-1
 
     gate:
       jobs:
diff --git a/zuul.d/xena_jobs.yaml b/zuul.d/xena_jobs.yaml
index 847c611..7d58efa 100644
--- a/zuul.d/xena_jobs.yaml
+++ b/zuul.d/xena_jobs.yaml
@@ -284,5 +284,8 @@
     required-projects: *required-projects-xena
     vars:
       network_api_extensions_common: *api_extensions
+      network_api_extensions_tempest:
+        - taas
+        - taas-vlan-filter
       devstack_localrc:
         NEUTRON_DEPLOY_MOD_WSGI: false
diff --git a/zuul.d/yoga_jobs.yaml b/zuul.d/yoga_jobs.yaml
index 2c18450..72a659e 100644
--- a/zuul.d/yoga_jobs.yaml
+++ b/zuul.d/yoga_jobs.yaml
@@ -306,5 +306,8 @@
     required-projects: *required-projects-yoga
     vars:
       network_api_extensions_common: *api_extensions
+      network_api_extensions_tempest:
+        - taas
+        - taas-vlan-filter
       devstack_localrc:
         NEUTRON_DEPLOY_MOD_WSGI: false
diff --git a/zuul.d/zed_jobs.yaml b/zuul.d/zed_jobs.yaml
index fe98935..9c40f76 100644
--- a/zuul.d/zed_jobs.yaml
+++ b/zuul.d/zed_jobs.yaml
@@ -327,5 +327,8 @@
     required-projects: *required-projects-zed
     vars:
       network_api_extensions_common: *api_extensions
+      network_api_extensions_tempest:
+        - taas
+        - taas-vlan-filter
       devstack_localrc:
         NEUTRON_DEPLOY_MOD_WSGI: false