You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by mo...@apache.org on 2025/06/03 09:07:46 UTC

(airflow) branch main updated: feat: Add Airflow-specific OL system tests validation and more tests (#51084)

This is an automated email from the ASF dual-hosted git repository.

mobuchowski pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 5e8dee899da feat: Add Airflow-specific OL system tests validation and more tests (#51084)
5e8dee899da is described below

commit 5e8dee899dab74a0d9e1ec69a1e6f93bb9f13014
Author: Kacper Muda <mu...@gmail.com>
AuthorDate: Tue Jun 3 11:07:40 2025 +0200

    feat: Add Airflow-specific OL system tests validation and more tests (#51084)
---
 .../system/openlineage/example_openlineage.json    |  169 ---
 .../example_openlineage_base_complex_dag.py        |  132 ++
 ...e.py => example_openlineage_base_simple_dag.py} |   24 +-
 .../openlineage/example_openlineage_defer.json     |   38 -
 ....py => example_openlineage_defer_simple_dag.py} |   55 +-
 .../example_openlineage_mapped_simple_dag.py       |   85 ++
 ...ample_openlineage_schedule_asset_or_time_dag.py |   78 ++
 ...py => example_openlineage_schedule_cron_dag.py} |   29 +-
 ...penlineage_schedule_list_complex_assets_dag.py} |   37 +-
 ...enlineage_schedule_list_multiple_assets_dag.py} |   30 +-
 ..._openlineage_schedule_list_single_asset_dag.py} |   30 +-
 ...le_openlineage_schedule_multiple_assets_dag.py} |   33 +-
 ...ample_openlineage_schedule_single_asset_dag.py} |   30 +-
 ... example_openlineage_schedule_timetable_dag.py} |   39 +-
 ...e.py => example_openlineage_task_groups_dag.py} |   32 +-
 ...neage.py => example_openlineage_trigger_dag.py} |   46 +-
 ...age.py => example_openlineage_versioned_dag.py} |   24 +-
 .../system/openlineage/expected_events/__init__.py |   75 +
 .../openlineage_base_complex_dag__af2.json         | 1436 ++++++++++++++++++++
 .../openlineage_base_complex_dag__af3.json         | 1392 +++++++++++++++++++
 .../openlineage_base_simple_dag__af2.json          |  338 +++++
 .../openlineage_base_simple_dag__af3.json          |  330 +++++
 .../openlineage_defer_simple_dag.json              |   32 +
 .../openlineage_mapped_simple_dag.json             |   38 +
 ...penlineage_schedule_asset_or_time_dag__af2.json |  188 +++
 ...penlineage_schedule_asset_or_time_dag__af3.json |  215 +++
 .../openlineage_schedule_cron_dag__af2.json        |   59 +
 .../openlineage_schedule_cron_dag__af3.json        |   59 +
 ...eage_schedule_list_complex_assets_dag__af2.json |    1 +
 ...eage_schedule_list_complex_assets_dag__af3.json |  206 +++
 ...age_schedule_list_multiple_assets_dag__af2.json |  101 ++
 ...age_schedule_list_multiple_assets_dag__af3.json |  116 ++
 ...ineage_schedule_list_single_asset_dag__af2.json |   89 ++
 ...ineage_schedule_list_single_asset_dag__af3.json |   95 ++
 ...nlineage_schedule_multiple_assets_dag__af2.json |  164 +++
 ...nlineage_schedule_multiple_assets_dag__af3.json |  188 +++
 ...openlineage_schedule_single_asset_dag__af2.json |   74 +
 ...openlineage_schedule_single_asset_dag__af3.json |   80 ++
 .../openlineage_schedule_timetable_dag__af2.json   |   71 +
 .../openlineage_schedule_timetable_dag__af3.json   |   71 +
 .../openlineage_task_groups_dag.json               |   94 ++
 .../expected_events/openlineage_trigger_dag.json   |  188 +++
 .../openlineage_versioned_dag__af2.json            |    1 +
 .../openlineage_versioned_dag__af3.json            |   53 +
 .../tests/system/openlineage/operator.py           |    5 +-
 45 files changed, 6311 insertions(+), 359 deletions(-)

diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage.json b/providers/openlineage/tests/system/openlineage/example_openlineage.json
deleted file mode 100644
index 5949941d214..00000000000
--- a/providers/openlineage/tests/system/openlineage/example_openlineage.json
+++ /dev/null
@@ -1,169 +0,0 @@
-[
-    {
-        "eventType": "START",
-        "eventTime": "{{ is_datetime(result) }}",
-        "producer": "{{ result.startswith('https://github.com/apache/airflow/tree/providers-openlineage') }}",
-        "schemaURL": "{{ result.startswith('https://openlineage.io/spec') }}",
-        "inputs": [],
-        "outputs": [],
-        "run": {
-            "runId": "{{ is_uuid(result) }}",
-            "facets": {
-                "parent": {
-                    "job": {
-                        "namespace": "{{ result is string }}",
-                        "name": "openlineage_basic_dag"
-                    },
-                    "run": {
-                        "runId": "{{ is_uuid(result) }}"
-                    }
-                },
-                "airflow": {
-                    "dag": {
-                        "dag_id": "openlineage_basic_dag",
-                        "fileloc": "{{ result.endswith('openlineage/example_openlineage.py') }}",
-                        "owner": "airflow",
-                        "start_date": "{{ is_datetime(result) }}"
-                    },
-                    "dagRun": {
-                        "conf": {},
-                        "dag_id": "openlineage_basic_dag",
-                        "data_interval_end": "{{ is_datetime(result) }}",
-                        "data_interval_start": "{{ is_datetime(result) }}",
-                        "start_date": "{{ is_datetime(result) }}"
-                    },
-                    "taskInstance": {
-                        "try_number": "{{ result is number }}"
-                    },
-                    "task": {
-                        "inlets": "[]",
-                        "mapped": false,
-                        "outlets": "[]",
-                        "task_id": "do_nothing_task",
-                        "trigger_rule": "all_success",
-                        "operator_class": "PythonOperator",
-                        "retries": "{{ result is number }}",
-                        "depends_on_past": false,
-                        "executor_config": {},
-                        "priority_weight": 1,
-                        "multiple_outputs": false,
-                        "upstream_task_ids": "[]",
-                        "downstream_task_ids": "['check_events']",
-                        "operator_class_path": "{{ result.endswith('.PythonOperator') }}",
-                        "wait_for_downstream": false,
-                        "retry_exponential_backoff": false,
-                        "wait_for_past_depends_before_skipping": false
-                    },
-                    "taskUuid": "{{ is_uuid(result) }}"
-                },
-                "nominalTime": {
-                    "nominalEndTime": "{{ is_datetime(result) }}",
-                    "nominalStartTime": "{{ is_datetime(result) }}"
-                },
-                "processing_engine": {
-                    "name": "Airflow",
-                    "openlineageAdapterVersion": "{{ result is string }}",
-                    "version": "{{ result is string }}"
-                }
-            }
-        },
-        "job": {
-            "namespace": "{{ result is string }}",
-            "name": "openlineage_basic_dag.do_nothing_task",
-            "facets": {
-                "jobType": {
-                    "integration": "AIRFLOW",
-                    "jobType": "TASK",
-                    "processingType": "BATCH"
-                },
-                "ownership": {
-                    "owners": [
-                        {
-                            "name": "{{ result is string }}"
-                        }
-                    ]
-                },
-                "sourceCode": {
-                    "language": "python",
-                    "sourceCode": "def do_nothing():\n    pass\n"
-                }
-            }
-        }
-    },
-    {
-        "eventType": "COMPLETE",
-        "eventTime": "{{ is_datetime(result) }}",
-        "run": {
-            "runId": "{{ is_uuid(result) }}",
-            "facets": {
-                "parent": {
-                    "job": {
-                        "namespace": "{{ result is string }}",
-                        "name": "openlineage_basic_dag"
-                    },
-                    "run": {
-                        "runId": "{{ is_uuid(result) }}"
-                    }
-                },
-                "airflow": {
-                    "dag": {
-                        "dag_id": "openlineage_basic_dag",
-                        "fileloc": "{{ result.endswith('openlineage/example_openlineage.py') }}",
-                        "owner": "airflow",
-                        "start_date": "{{ is_datetime(result) }}"
-                    },
-                    "dagRun": {
-                        "conf": {},
-                        "dag_id": "openlineage_basic_dag",
-                        "data_interval_end": "{{ is_datetime(result) }}",
-                        "data_interval_start": "{{ is_datetime(result) }}",
-                        "start_date": "{{ is_datetime(result) }}"
-                    },
-                    "taskInstance": {
-                        "try_number": "{{ result is number }}"
-                    },
-                    "task": {
-                        "inlets": "[]",
-                        "mapped": false,
-                        "outlets": "[]",
-                        "task_id": "do_nothing_task",
-                        "trigger_rule": "all_success",
-                        "operator_class": "PythonOperator",
-                        "retries": "{{ result is number }}",
-                        "depends_on_past": false,
-                        "executor_config": {},
-                        "priority_weight": 1,
-                        "multiple_outputs": false,
-                        "upstream_task_ids": "[]",
-                        "downstream_task_ids": "['check_events']",
-                        "operator_class_path": "{{ result.endswith('.PythonOperator') }}",
-                        "wait_for_downstream": false,
-                        "retry_exponential_backoff": false,
-                        "wait_for_past_depends_before_skipping": false
-                    },
-                    "taskUuid": "{{ is_uuid(result) }}"
-                },
-                "processing_engine": {
-                    "name": "Airflow",
-                    "openlineageAdapterVersion": "{{ result is string }}",
-                    "version": "{{ result is string }}"
-                }
-            }
-        },
-        "job": {
-            "namespace": "{{ result is string }}",
-            "name": "openlineage_basic_dag.do_nothing_task",
-            "facets": {
-                "jobType": {
-                    "integration": "AIRFLOW",
-                    "jobType": "TASK",
-                    "processingType": "BATCH"
-                },
-                "sourceCode": {
-                    "language": "python",
-                    "sourceCode": "def do_nothing():\n    pass\n"
-                }
-            }
-        }
-    }
-]
diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage_base_complex_dag.py b/providers/openlineage/tests/system/openlineage/example_openlineage_base_complex_dag.py
new file mode 100644
index 00000000000..a8cadc73fef
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/example_openlineage_base_complex_dag.py
@@ -0,0 +1,132 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""
+Complex DAG without schedule, with multiple operators, task groups, dependencies etc.
+
+It checks:
+    - required keys
+    - field formats and types
+    - number of task events (one start, one complete)
+    - if EmptyOperator will emit OL events with callback or outlet
+    - if EmptyOperator without modification will not emit OL events
+    - if CustomOperator without Extractor will emit OL events
+    - task groups serialization without dependencies
+    - additional task configuration attrs (owner, max_active_tis_per_dag etc.)
+"""
+
+from __future__ import annotations
+
+from datetime import datetime, timedelta
+
+from airflow import DAG
+from airflow.models import Variable
+from airflow.providers.common.compat.assets import Asset
+from airflow.providers.standard.operators.bash import BashOperator
+from airflow.providers.standard.operators.empty import EmptyOperator
+from airflow.providers.standard.operators.python import PythonOperator
+from airflow.utils.task_group import TaskGroup
+
+from system.openlineage.expected_events import AIRFLOW_VERSION, get_expected_event_file_path
+from system.openlineage.operator import OpenLineageTestOperator
+
+
+def check_events_number_func():
+    for event_type in ("start", "complete", "fail"):
+        try:
+            Variable.get(key=f"openlineage_base_complex_dag.task_0.event.{event_type}", deserialize_json=True)
+        except Exception:
+            pass
+        else:
+            raise ValueError("Expected no events for task `task_0`.")
+
+
+def do_nothing():
+    pass
+
+
+class SomeCustomOperator(BashOperator):
+    def __init__(self, **kwargs):
+        # Just to test that these attrs are included in OL event
+        self.deferrable = True
+        self.external_dag_id = "external_dag_id"
+        self.external_task_id = "external_task_id"
+        super().__init__(**kwargs)
+
+
+DAG_ID = "openlineage_base_complex_dag"
+
+with DAG(
+    dag_id=DAG_ID,
+    start_date=datetime(2021, 1, 1),
+    schedule=None,
+    catchup=False,
+    description="OpenLineage complex DAG description",
+    owner_links={"airflow": "https://airflow.apache.org/"},
+    tags=["first", "second@", "with'quote"],
+    default_args={"retries": 0},
+) as dag:
+    # task_0 will not emit any events, but the owner will be picked up and added to DAG
+    task_0 = EmptyOperator(task_id="task_0", owner="owner1")
+    task_1 = BashOperator(
+        task_id="task_1.id.with.dots",
+        bash_command="exit 0;",
+        owner="owner2",
+        execution_timeout=timedelta(seconds=456),
+    )
+    task_2 = PythonOperator(
+        task_id="task_2",
+        python_callable=do_nothing,
+        inlets=[Asset(uri="s3://bucket2/dir2/file2.txt")],
+        max_retry_delay=42,
+    )
+    task_3 = EmptyOperator(task_id="task_3", outlets=[Asset(uri="s3://bucket/dir/file.txt")])
+    task_4 = SomeCustomOperator(
+        task_id="task_4",
+        bash_command="exit 0;",
+        owner="owner3",
+        max_active_tis_per_dag=7,
+        max_active_tis_per_dagrun=2,
+    )
+
+    with TaskGroup("section_1", prefix_group_id=True) as tg:
+        task_5 = PythonOperator(task_id="task_5", python_callable=lambda: 1)
+        with TaskGroup("section_2", parent_group=tg, tooltip="group_tooltip") as tg2:
+            if AIRFLOW_VERSION.major == 3:
+                add_args = {"run_as_user": "some_user"}  # Random user break task execution on AF2
+            else:
+                add_args = {"sla": timedelta(seconds=123)}  # type: ignore[dict-item] # SLA is not present in AF3 yet
+            task_6 = EmptyOperator(task_id="task_6", on_success_callback=lambda x: print(1), **add_args)
+            with TaskGroup("section_3", parent_group=tg2):
+                task_7 = PythonOperator(task_id="task_7", python_callable=lambda: 1)
+
+    check_events_number = PythonOperator(
+        task_id="check_events_number", python_callable=check_events_number_func
+    )
+
+    check_events = OpenLineageTestOperator(
+        task_id="check_events", file_path=get_expected_event_file_path(DAG_ID)
+    )
+
+    task_1 >> [task_2, task_7] >> check_events_number
+    task_2 >> task_3 >> [task_4, task_5] >> task_6 >> check_events_number
+    check_events_number >> check_events
+
+
+from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
+
+# Needed to run the example DAG with pytest (see: tests/system/README.md#run_via_pytest)
+test_run = get_test_run(dag)
diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage.py b/providers/openlineage/tests/system/openlineage/example_openlineage_base_simple_dag.py
similarity index 69%
copy from providers/openlineage/tests/system/openlineage/example_openlineage.py
copy to providers/openlineage/tests/system/openlineage/example_openlineage_base_simple_dag.py
index f823898f254..7310b51cf16 100644
--- a/providers/openlineage/tests/system/openlineage/example_openlineage.py
+++ b/providers/openlineage/tests/system/openlineage/example_openlineage_base_simple_dag.py
@@ -14,14 +14,23 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+"""
+Simple DAG without schedule and extra args, with one operator, to verify OpenLineage event integrity.
+
+It checks:
+    - required keys
+    - field formats and types
+    - number of task events (one start, one complete)
+"""
+
 from __future__ import annotations
 
 from datetime import datetime
-from pathlib import Path
 
 from airflow import DAG
 from airflow.providers.standard.operators.python import PythonOperator
 
+from system.openlineage.expected_events import get_expected_event_file_path
 from system.openlineage.operator import OpenLineageTestOperator
 
 
@@ -29,21 +38,22 @@ def do_nothing():
     pass
 
 
-# Instantiate the DAG
+DAG_ID = "openlineage_base_simple_dag"
+
 with DAG(
-    "openlineage_basic_dag",
+    dag_id=DAG_ID,
     start_date=datetime(2021, 1, 1),
     schedule=None,
     catchup=False,
+    default_args={"retries": 0},
 ) as dag:
-    nothing_task = PythonOperator(task_id="do_nothing_task", python_callable=do_nothing)
+    do_nothing_task = PythonOperator(task_id="do_nothing_task", python_callable=do_nothing)
 
     check_events = OpenLineageTestOperator(
-        task_id="check_events",
-        file_path=str(Path(__file__).parent / "example_openlineage.json"),
+        task_id="check_events", file_path=get_expected_event_file_path(DAG_ID)
     )
 
-    nothing_task >> check_events
+    do_nothing_task >> check_events
 
 
 from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage_defer.json b/providers/openlineage/tests/system/openlineage/example_openlineage_defer.json
deleted file mode 100644
index 05c64292c2a..00000000000
--- a/providers/openlineage/tests/system/openlineage/example_openlineage_defer.json
+++ /dev/null
@@ -1,38 +0,0 @@
-[
-    {
-        "eventType": "START",
-        "eventTime": "{{ is_datetime(result) }}",
-        "run": {
-            "runId": "{{ is_uuid(result) }}"
-        },
-        "job": {
-            "namespace": "{{ result is string }}",
-            "name": "openlineage_basic_defer_dag.wait",
-            "facets": {
-                "jobType": {
-                    "integration": "AIRFLOW",
-                    "jobType": "TASK",
-                    "processingType": "BATCH"
-                }
-            }
-        }
-    },
-    {
-        "eventType": "COMPLETE",
-        "eventTime": "{{ is_datetime(result) }}",
-        "run": {
-            "runId": "{{ is_uuid(result) }}"
-        },
-        "job": {
-            "namespace": "{{ result is string }}",
-            "name": "openlineage_basic_defer_dag.wait",
-            "facets": {
-                "jobType": {
-                    "integration": "AIRFLOW",
-                    "jobType": "TASK",
-                    "processingType": "BATCH"
-                }
-            }
-        }
-    }
-]
diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage_defer.py b/providers/openlineage/tests/system/openlineage/example_openlineage_defer_simple_dag.py
similarity index 55%
rename from providers/openlineage/tests/system/openlineage/example_openlineage_defer.py
rename to providers/openlineage/tests/system/openlineage/example_openlineage_defer_simple_dag.py
index 17410366c92..14e04b9c961 100644
--- a/providers/openlineage/tests/system/openlineage/example_openlineage_defer.py
+++ b/providers/openlineage/tests/system/openlineage/example_openlineage_defer_simple_dag.py
@@ -14,13 +14,18 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+"""
+Simple DAG with deferrable operator.
+
+It checks:
+    - that at least two task START events (before and after deferral) are emitted and
+     the try_num remains at 1
+"""
+
 from __future__ import annotations
 
-import os
+import warnings
 from datetime import datetime, timedelta
-from pathlib import Path
-
-import pytest
 
 from airflow import DAG
 from airflow.exceptions import AirflowProviderDeprecationWarning
@@ -28,42 +33,42 @@ from airflow.models import Variable
 from airflow.providers.standard.operators.python import PythonOperator
 from airflow.providers.standard.sensors.time_delta import TimeDeltaSensorAsync
 
+from system.openlineage.expected_events import get_expected_event_file_path
 from system.openlineage.operator import OpenLineageTestOperator
 
 
-def my_task(task_number):
-    print(os.getcwd())
-    print(f"Executing task number: {task_number}")
-
-
-def check_start_amount_func():
-    events = Variable.get(key="openlineage_basic_defer_dag.wait.event.start", deserialize_json=True)
+def check_events_number_func():
+    events = Variable.get(key="openlineage_defer_simple_dag.wait.event.start", deserialize_json=True)
     if len(events) < 2:
-        raise ValueError(f"Expected at least 2 events, got {len(events)}")
+        raise ValueError(f"Expected at least 2 START events for task `wait`, got {len(events)}")
+
 
+DAG_ID = "openlineage_defer_simple_dag"
 
 with DAG(
-    dag_id="openlineage_basic_defer_dag",
+    dag_id=DAG_ID,
     start_date=datetime(2021, 1, 1),
     schedule=None,
     catchup=False,
+    default_args={"retries": 0},
 ) as dag:
-    with pytest.warns(AirflowProviderDeprecationWarning):
-        # Timedelta is compared to the DAGRun start timestamp, which can occur long before a worker picks up the
-        # task. We need to ensure the sensor gets deferred at least once, so setting 180s.
+    # Timedelta is compared to the DAGRun start timestamp, which can occur long before a worker picks up the
+    # task. We need to ensure the sensor gets deferred at least once, so setting 180s.
+    with warnings.catch_warnings():  # TODO Switch to TimeDeltaSensor when deferrable is released
+        warnings.simplefilter("ignore", AirflowProviderDeprecationWarning)
         wait = TimeDeltaSensorAsync(task_id="wait", delta=timedelta(seconds=180))
 
-        check_start_events_amount = PythonOperator(
-            task_id="check_start_events_amount", python_callable=check_start_amount_func
-        )
+    check_events_number = PythonOperator(
+        task_id="check_events_number", python_callable=check_events_number_func
+    )
 
-        check_events = OpenLineageTestOperator(
-            task_id="check_events",
-            file_path=str(Path(__file__).parent / "example_openlineage_defer.json"),
-            allow_duplicate_events=True,
-        )
+    check_events = OpenLineageTestOperator(
+        task_id="check_events",
+        file_path=get_expected_event_file_path(DAG_ID),
+        allow_duplicate_events=True,
+    )
 
-        wait >> check_start_events_amount >> check_events
+    wait >> check_events_number >> check_events
 
 
 from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage_mapped_simple_dag.py b/providers/openlineage/tests/system/openlineage/example_openlineage_mapped_simple_dag.py
new file mode 100644
index 00000000000..7b812264c26
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/example_openlineage_mapped_simple_dag.py
@@ -0,0 +1,85 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""
+Simple DAG with mapped task.
+
+It checks:
+    - task's `mapped` attribute
+    - taskInstance's `map_index` attribute
+    - number of OL events emitted for mapped task
+"""
+
+from __future__ import annotations
+
+from datetime import datetime
+
+from airflow import DAG
+from airflow.decorators import task
+from airflow.models import Variable
+from airflow.providers.standard.operators.python import PythonOperator
+
+from system.openlineage.expected_events import get_expected_event_file_path
+from system.openlineage.operator import OpenLineageTestOperator
+
+
+def check_events_number_func():
+    for event_type in ("start", "complete"):
+        events = Variable.get(
+            key=f"openlineage_mapped_simple_dag.add_one.event.{event_type}", deserialize_json=True
+        )
+        if len(events) != 2:
+            raise ValueError(
+                f"Expected exactly 2 {event_type.upper()} events for task `add_one`, got {len(events)}"
+            )
+
+
+DAG_ID = "openlineage_mapped_simple_dag"
+
+with DAG(
+    dag_id=DAG_ID,
+    start_date=datetime(2021, 1, 1),
+    schedule=None,
+    catchup=False,
+    default_args={"retries": 0},
+) as dag:
+
+    @task(max_active_tis_per_dagrun=1)  # Execute sequentially to not overwrite each other OL events
+    def add_one(x: int):
+        return x + 1
+
+    @task
+    def sum_it(values):
+        total = sum(values)
+        print(f"Total was {total}")
+
+    added_values = add_one.expand(x=[1, 2])
+
+    check_events_number = PythonOperator(
+        task_id="check_events_number", python_callable=check_events_number_func
+    )
+
+    check_events = OpenLineageTestOperator(
+        task_id="check_events", file_path=get_expected_event_file_path(DAG_ID), allow_duplicate_events=True
+    )
+
+    sum_it(added_values) >> check_events_number >> check_events
+
+
+from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
+
+# Needed to run the example DAG with pytest (see: tests/system/README.md#run_via_pytest)
+test_run = get_test_run(dag)
diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage_schedule_asset_or_time_dag.py b/providers/openlineage/tests/system/openlineage/example_openlineage_schedule_asset_or_time_dag.py
new file mode 100644
index 00000000000..f4944cc1b39
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/example_openlineage_schedule_asset_or_time_dag.py
@@ -0,0 +1,78 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""
+Simple DAG with asset or time schedule.
+
+It checks:
+    - schedule serialization
+"""
+
+from __future__ import annotations
+
+from datetime import datetime
+
+from airflow import DAG
+from airflow.providers.common.compat.assets import Asset
+from airflow.providers.standard.operators.bash import BashOperator
+from airflow.timetables.trigger import CronTriggerTimetable
+
+from system.openlineage.expected_events import AIRFLOW_VERSION, get_expected_event_file_path
+from system.openlineage.operator import OpenLineageTestOperator
+
+DAG_ID = "openlineage_schedule_asset_or_time_dag"
+
+if AIRFLOW_VERSION.major == 3:
+    from airflow.timetables.assets import AssetOrTimeSchedule
+
+    schedule = AssetOrTimeSchedule(
+        timetable=CronTriggerTimetable("21 13 29 2 4", timezone="UTC"),
+        assets=(
+            (Asset(uri="s3://bucket/file.txt", extra={"a": 1}) | Asset(uri="s3://bucket2/file.txt"))
+            & (Asset(uri="s3://bucket3/file.txt") | Asset(uri="s3://bucket4/file.txt", extra={"b": 2}))
+        ),
+    )
+else:
+    from airflow.timetables.datasets import DatasetOrTimeSchedule
+
+    schedule = DatasetOrTimeSchedule(  # type: ignore[assignment]  # re-defining schedule, but it's for different AF
+        timetable=CronTriggerTimetable("21 13 29 2 4", timezone="UTC"),
+        datasets=(
+            (Asset(uri="s3://bucket/file.txt", extra={"a": 1}) | Asset(uri="s3://bucket2/file.txt"))
+            & (Asset(uri="s3://bucket3/file.txt") | Asset(uri="s3://bucket4/file.txt", extra={"b": 2}))
+        ),
+    )
+
+with DAG(
+    dag_id=DAG_ID,
+    start_date=datetime(2025, 5, 1),
+    schedule=schedule,
+    catchup=False,
+    default_args={"retries": 0},
+) as dag:
+    do_nothing_task = BashOperator(task_id="do_nothing_task", bash_command="sleep 10;")
+
+    check_events = OpenLineageTestOperator(
+        task_id="check_events", file_path=get_expected_event_file_path(DAG_ID)
+    )
+
+    do_nothing_task >> check_events
+
+
+from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
+
+# Needed to run the example DAG with pytest (see: tests/system/README.md#run_via_pytest)
+test_run = get_test_run(dag)
diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage.py b/providers/openlineage/tests/system/openlineage/example_openlineage_schedule_cron_dag.py
similarity index 67%
copy from providers/openlineage/tests/system/openlineage/example_openlineage.py
copy to providers/openlineage/tests/system/openlineage/example_openlineage_schedule_cron_dag.py
index f823898f254..77750f760c3 100644
--- a/providers/openlineage/tests/system/openlineage/example_openlineage.py
+++ b/providers/openlineage/tests/system/openlineage/example_openlineage_schedule_cron_dag.py
@@ -14,36 +14,39 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+"""
+Simple DAG with cron schedule.
+
+It checks:
+    - schedule serialization
+"""
+
 from __future__ import annotations
 
 from datetime import datetime
-from pathlib import Path
 
 from airflow import DAG
-from airflow.providers.standard.operators.python import PythonOperator
+from airflow.providers.standard.operators.bash import BashOperator
 
+from system.openlineage.expected_events import get_expected_event_file_path
 from system.openlineage.operator import OpenLineageTestOperator
 
+DAG_ID = "openlineage_schedule_cron_dag"
 
-def do_nothing():
-    pass
-
-
-# Instantiate the DAG
 with DAG(
-    "openlineage_basic_dag",
+    dag_id=DAG_ID,
     start_date=datetime(2021, 1, 1),
-    schedule=None,
+    schedule="21 13 29 2 4",  # Unlikely to ever get triggered by itself, February 29th and Thursday
     catchup=False,
+    default_args={"retries": 0},
 ) as dag:
-    nothing_task = PythonOperator(task_id="do_nothing_task", python_callable=do_nothing)
+    do_nothing_task = BashOperator(task_id="do_nothing_task", bash_command="sleep 10;")
 
     check_events = OpenLineageTestOperator(
-        task_id="check_events",
-        file_path=str(Path(__file__).parent / "example_openlineage.json"),
+        task_id="check_events", file_path=get_expected_event_file_path(DAG_ID)
     )
 
-    nothing_task >> check_events
+    do_nothing_task >> check_events
 
 
 from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage.py b/providers/openlineage/tests/system/openlineage/example_openlineage_schedule_list_complex_assets_dag.py
similarity index 51%
copy from providers/openlineage/tests/system/openlineage/example_openlineage.py
copy to providers/openlineage/tests/system/openlineage/example_openlineage_schedule_list_complex_assets_dag.py
index f823898f254..c3e38ee2358 100644
--- a/providers/openlineage/tests/system/openlineage/example_openlineage.py
+++ b/providers/openlineage/tests/system/openlineage/example_openlineage_schedule_list_complex_assets_dag.py
@@ -14,36 +14,51 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+"""
+Simple DAG with multiple asset logical condition in list schedule for Airflow 3.
+Use of list will result in the whole condition being wrapped with additional `asset_all`.
+
+It checks:
+    - schedule serialization
+"""
+
 from __future__ import annotations
 
 from datetime import datetime
-from pathlib import Path
 
 from airflow import DAG
-from airflow.providers.standard.operators.python import PythonOperator
+from airflow.providers.common.compat.assets import Asset
+from airflow.providers.standard.operators.bash import BashOperator
 
+from system.openlineage.expected_events import AIRFLOW_VERSION, get_expected_event_file_path
 from system.openlineage.operator import OpenLineageTestOperator
 
+if AIRFLOW_VERSION.major == 3:
+    schedule = [
+        (Asset(uri="s3://bucket/file.txt", extra={"a": 1}) | Asset(uri="s3://bucket2/file.txt"))
+        & (Asset(uri="s3://bucket3/file.txt") | Asset(uri="s3://bucket4/file.txt", extra={"b": 2}))
+    ]
+else:
+    # Logical Asset condition wrapped in list breaks DAG processing in Airflow 2 - check is skipped
+    schedule = None  # type: ignore[assignment]
 
-def do_nothing():
-    pass
 
+DAG_ID = "openlineage_schedule_list_complex_assets_dag"
 
-# Instantiate the DAG
 with DAG(
-    "openlineage_basic_dag",
+    dag_id=DAG_ID,
     start_date=datetime(2021, 1, 1),
-    schedule=None,
+    schedule=schedule,
     catchup=False,
+    default_args={"retries": 0},
 ) as dag:
-    nothing_task = PythonOperator(task_id="do_nothing_task", python_callable=do_nothing)
+    do_nothing_task = BashOperator(task_id="do_nothing_task", bash_command="sleep 10;")
 
     check_events = OpenLineageTestOperator(
-        task_id="check_events",
-        file_path=str(Path(__file__).parent / "example_openlineage.json"),
+        task_id="check_events", file_path=get_expected_event_file_path(DAG_ID)
     )
 
-    nothing_task >> check_events
+    do_nothing_task >> check_events
 
 
 from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage.py b/providers/openlineage/tests/system/openlineage/example_openlineage_schedule_list_multiple_assets_dag.py
similarity index 64%
copy from providers/openlineage/tests/system/openlineage/example_openlineage.py
copy to providers/openlineage/tests/system/openlineage/example_openlineage_schedule_list_multiple_assets_dag.py
index f823898f254..8997ac02dfa 100644
--- a/providers/openlineage/tests/system/openlineage/example_openlineage.py
+++ b/providers/openlineage/tests/system/openlineage/example_openlineage_schedule_list_multiple_assets_dag.py
@@ -14,36 +14,40 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+"""
+Simple DAG with multiple asset in list schedule.
+
+It checks:
+    - schedule serialization
+"""
+
 from __future__ import annotations
 
 from datetime import datetime
-from pathlib import Path
 
 from airflow import DAG
-from airflow.providers.standard.operators.python import PythonOperator
+from airflow.providers.common.compat.assets import Asset
+from airflow.providers.standard.operators.bash import BashOperator
 
+from system.openlineage.expected_events import get_expected_event_file_path
 from system.openlineage.operator import OpenLineageTestOperator
 
+DAG_ID = "openlineage_schedule_list_multiple_assets_dag"
 
-def do_nothing():
-    pass
-
-
-# Instantiate the DAG
 with DAG(
-    "openlineage_basic_dag",
+    dag_id=DAG_ID,
     start_date=datetime(2021, 1, 1),
-    schedule=None,
+    schedule=[Asset(uri="s3://bucket/file.txt", extra={"a": 1}), Asset(uri="s3://bucket2/file.txt")],
     catchup=False,
+    default_args={"retries": 0},
 ) as dag:
-    nothing_task = PythonOperator(task_id="do_nothing_task", python_callable=do_nothing)
+    do_nothing_task = BashOperator(task_id="do_nothing_task", bash_command="sleep 10;")
 
     check_events = OpenLineageTestOperator(
-        task_id="check_events",
-        file_path=str(Path(__file__).parent / "example_openlineage.json"),
+        task_id="check_events", file_path=get_expected_event_file_path(DAG_ID)
     )
 
-    nothing_task >> check_events
+    do_nothing_task >> check_events
 
 
 from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage.py b/providers/openlineage/tests/system/openlineage/example_openlineage_schedule_list_single_asset_dag.py
similarity index 65%
copy from providers/openlineage/tests/system/openlineage/example_openlineage.py
copy to providers/openlineage/tests/system/openlineage/example_openlineage_schedule_list_single_asset_dag.py
index f823898f254..db0aa95527e 100644
--- a/providers/openlineage/tests/system/openlineage/example_openlineage.py
+++ b/providers/openlineage/tests/system/openlineage/example_openlineage_schedule_list_single_asset_dag.py
@@ -14,36 +14,40 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+"""
+Simple DAG with single asset in list schedule.
+
+It checks:
+    - schedule serialization
+"""
+
 from __future__ import annotations
 
 from datetime import datetime
-from pathlib import Path
 
 from airflow import DAG
-from airflow.providers.standard.operators.python import PythonOperator
+from airflow.providers.common.compat.assets import Asset
+from airflow.providers.standard.operators.bash import BashOperator
 
+from system.openlineage.expected_events import get_expected_event_file_path
 from system.openlineage.operator import OpenLineageTestOperator
 
+DAG_ID = "openlineage_schedule_list_single_asset_dag"
 
-def do_nothing():
-    pass
-
-
-# Instantiate the DAG
 with DAG(
-    "openlineage_basic_dag",
+    dag_id=DAG_ID,
     start_date=datetime(2021, 1, 1),
-    schedule=None,
+    schedule=[Asset(uri="s3://bucket/file.txt", extra={"some_extra": 123})],
     catchup=False,
+    default_args={"retries": 0},
 ) as dag:
-    nothing_task = PythonOperator(task_id="do_nothing_task", python_callable=do_nothing)
+    do_nothing_task = BashOperator(task_id="do_nothing_task", bash_command="sleep 10;")
 
     check_events = OpenLineageTestOperator(
-        task_id="check_events",
-        file_path=str(Path(__file__).parent / "example_openlineage.json"),
+        task_id="check_events", file_path=get_expected_event_file_path(DAG_ID)
     )
 
-    nothing_task >> check_events
+    do_nothing_task >> check_events
 
 
 from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage.py b/providers/openlineage/tests/system/openlineage/example_openlineage_schedule_multiple_assets_dag.py
similarity index 60%
copy from providers/openlineage/tests/system/openlineage/example_openlineage.py
copy to providers/openlineage/tests/system/openlineage/example_openlineage_schedule_multiple_assets_dag.py
index f823898f254..a8228ca09f1 100644
--- a/providers/openlineage/tests/system/openlineage/example_openlineage.py
+++ b/providers/openlineage/tests/system/openlineage/example_openlineage_schedule_multiple_assets_dag.py
@@ -14,36 +14,43 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+"""
+Simple DAG with multiple assets with logical conditions in schedule.
+
+It checks:
+    - schedule serialization
+"""
+
 from __future__ import annotations
 
 from datetime import datetime
-from pathlib import Path
 
 from airflow import DAG
-from airflow.providers.standard.operators.python import PythonOperator
+from airflow.providers.common.compat.assets import Asset
+from airflow.providers.standard.operators.bash import BashOperator
 
+from system.openlineage.expected_events import get_expected_event_file_path
 from system.openlineage.operator import OpenLineageTestOperator
 
+DAG_ID = "openlineage_schedule_multiple_assets_dag"
 
-def do_nothing():
-    pass
-
-
-# Instantiate the DAG
 with DAG(
-    "openlineage_basic_dag",
+    dag_id=DAG_ID,
     start_date=datetime(2021, 1, 1),
-    schedule=None,
+    schedule=(
+        (Asset(uri="s3://bucket/file.txt", extra={"a": 1}) | Asset(uri="s3://bucket2/file.txt"))
+        & (Asset(uri="s3://bucket3/file.txt") | Asset(uri="s3://bucket4/file.txt", extra={"b": 2}))
+    ),
     catchup=False,
+    default_args={"retries": 0},
 ) as dag:
-    nothing_task = PythonOperator(task_id="do_nothing_task", python_callable=do_nothing)
+    do_nothing_task = BashOperator(task_id="do_nothing_task", bash_command="sleep 10;")
 
     check_events = OpenLineageTestOperator(
-        task_id="check_events",
-        file_path=str(Path(__file__).parent / "example_openlineage.json"),
+        task_id="check_events", file_path=get_expected_event_file_path(DAG_ID)
     )
 
-    nothing_task >> check_events
+    do_nothing_task >> check_events
 
 
 from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage.py b/providers/openlineage/tests/system/openlineage/example_openlineage_schedule_single_asset_dag.py
similarity index 65%
copy from providers/openlineage/tests/system/openlineage/example_openlineage.py
copy to providers/openlineage/tests/system/openlineage/example_openlineage_schedule_single_asset_dag.py
index f823898f254..40b0a1d6cbf 100644
--- a/providers/openlineage/tests/system/openlineage/example_openlineage.py
+++ b/providers/openlineage/tests/system/openlineage/example_openlineage_schedule_single_asset_dag.py
@@ -14,36 +14,40 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+"""
+Simple DAG with single asset direct schedule.
+
+It checks:
+    - schedule serialization
+"""
+
 from __future__ import annotations
 
 from datetime import datetime
-from pathlib import Path
 
 from airflow import DAG
-from airflow.providers.standard.operators.python import PythonOperator
+from airflow.providers.common.compat.assets import Asset
+from airflow.providers.standard.operators.bash import BashOperator
 
+from system.openlineage.expected_events import get_expected_event_file_path
 from system.openlineage.operator import OpenLineageTestOperator
 
+DAG_ID = "openlineage_schedule_single_asset_dag"
 
-def do_nothing():
-    pass
-
-
-# Instantiate the DAG
 with DAG(
-    "openlineage_basic_dag",
+    dag_id=DAG_ID,
     start_date=datetime(2021, 1, 1),
-    schedule=None,
+    schedule=Asset(uri="s3://bucket/file.txt", extra={"some_extra": 123}),
     catchup=False,
+    default_args={"retries": 0},
 ) as dag:
-    nothing_task = PythonOperator(task_id="do_nothing_task", python_callable=do_nothing)
+    do_nothing_task = BashOperator(task_id="do_nothing_task", bash_command="sleep 10;")
 
     check_events = OpenLineageTestOperator(
-        task_id="check_events",
-        file_path=str(Path(__file__).parent / "example_openlineage.json"),
+        task_id="check_events", file_path=get_expected_event_file_path(DAG_ID)
     )
 
-    nothing_task >> check_events
+    do_nothing_task >> check_events
 
 
 from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage.py b/providers/openlineage/tests/system/openlineage/example_openlineage_schedule_timetable_dag.py
similarity index 56%
copy from providers/openlineage/tests/system/openlineage/example_openlineage.py
copy to providers/openlineage/tests/system/openlineage/example_openlineage_schedule_timetable_dag.py
index f823898f254..7e552374e2d 100644
--- a/providers/openlineage/tests/system/openlineage/example_openlineage.py
+++ b/providers/openlineage/tests/system/openlineage/example_openlineage_schedule_timetable_dag.py
@@ -14,36 +14,49 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+"""
+Simple DAG with timetable schedule.
+
+It checks:
+    - schedule serialization
+"""
+
 from __future__ import annotations
 
 from datetime import datetime
-from pathlib import Path
+
+import pendulum
 
 from airflow import DAG
-from airflow.providers.standard.operators.python import PythonOperator
+from airflow.providers.standard.operators.bash import BashOperator
+from airflow.timetables.events import EventsTimetable
 
+from system.openlineage.expected_events import get_expected_event_file_path
 from system.openlineage.operator import OpenLineageTestOperator
 
+DAG_ID = "openlineage_schedule_timetable_dag"
 
-def do_nothing():
-    pass
-
-
-# Instantiate the DAG
 with DAG(
-    "openlineage_basic_dag",
+    dag_id=DAG_ID,
     start_date=datetime(2021, 1, 1),
-    schedule=None,
+    schedule=EventsTimetable(  # Unlikely to ever get triggered by itself
+        event_dates=[
+            pendulum.datetime(2095, 3, 3, 8, 27, tz="America/Chicago"),
+            pendulum.datetime(2095, 3, 17, 8, 27, tz="America/Chicago"),
+            pendulum.datetime(2095, 3, 22, 20, 50, tz="America/Chicago"),
+        ],
+        description="My Team's Baseball Games",
+    ),
     catchup=False,
+    default_args={"retries": 0},
 ) as dag:
-    nothing_task = PythonOperator(task_id="do_nothing_task", python_callable=do_nothing)
+    do_nothing_task = BashOperator(task_id="do_nothing_task", bash_command="sleep 10;")
 
     check_events = OpenLineageTestOperator(
-        task_id="check_events",
-        file_path=str(Path(__file__).parent / "example_openlineage.json"),
+        task_id="check_events", file_path=get_expected_event_file_path(DAG_ID)
     )
 
-    nothing_task >> check_events
+    do_nothing_task >> check_events
 
 
 from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage.py b/providers/openlineage/tests/system/openlineage/example_openlineage_task_groups_dag.py
similarity index 64%
copy from providers/openlineage/tests/system/openlineage/example_openlineage.py
copy to providers/openlineage/tests/system/openlineage/example_openlineage_task_groups_dag.py
index f823898f254..9c4e5b9c473 100644
--- a/providers/openlineage/tests/system/openlineage/example_openlineage.py
+++ b/providers/openlineage/tests/system/openlineage/example_openlineage_task_groups_dag.py
@@ -14,36 +14,46 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+"""
+Simple DAG with task group dependency
+
+It checks:
+    - task's `task_group` attr
+"""
+
 from __future__ import annotations
 
 from datetime import datetime
-from pathlib import Path
 
 from airflow import DAG
 from airflow.providers.standard.operators.python import PythonOperator
+from airflow.utils.task_group import TaskGroup
 
+from system.openlineage.expected_events import get_expected_event_file_path
 from system.openlineage.operator import OpenLineageTestOperator
 
+DAG_ID = "openlineage_task_groups_dag"
 
-def do_nothing():
-    pass
-
-
-# Instantiate the DAG
 with DAG(
-    "openlineage_basic_dag",
+    dag_id=DAG_ID,
     start_date=datetime(2021, 1, 1),
     schedule=None,
     catchup=False,
+    default_args={"retries": 0},
 ) as dag:
-    nothing_task = PythonOperator(task_id="do_nothing_task", python_callable=do_nothing)
+    task_0 = PythonOperator(task_id="task_0", python_callable=lambda: print("task 0"))
+
+    with TaskGroup("tg1") as tg1:
+        task_1 = PythonOperator(task_id="task_1", python_callable=lambda: print("task 1"))
+
+    with TaskGroup("tg2") as tg2:
+        task_2 = PythonOperator(task_id="task_2", python_callable=lambda: print("task 2"))
 
     check_events = OpenLineageTestOperator(
-        task_id="check_events",
-        file_path=str(Path(__file__).parent / "example_openlineage.json"),
+        task_id="check_events", file_path=get_expected_event_file_path(DAG_ID)
     )
 
-    nothing_task >> check_events
+    task_0 >> tg1 >> tg2 >> check_events
 
 
 from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage.py b/providers/openlineage/tests/system/openlineage/example_openlineage_trigger_dag.py
similarity index 51%
copy from providers/openlineage/tests/system/openlineage/example_openlineage.py
copy to providers/openlineage/tests/system/openlineage/example_openlineage_trigger_dag.py
index f823898f254..4eac1607062 100644
--- a/providers/openlineage/tests/system/openlineage/example_openlineage.py
+++ b/providers/openlineage/tests/system/openlineage/example_openlineage_trigger_dag.py
@@ -14,36 +14,58 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+"""
+Simple DAG that triggers another simple DAG.
+
+It checks:
+    - task's trigger_dag_id
+    - DAGRun START and COMPLETE events, for the triggered DAG
+"""
+
 from __future__ import annotations
 
 from datetime import datetime
-from pathlib import Path
 
 from airflow import DAG
-from airflow.providers.standard.operators.python import PythonOperator
+from airflow.providers.standard.operators.bash import BashOperator
+from airflow.providers.standard.operators.trigger_dagrun import TriggerDagRunOperator
 
+from system.openlineage.expected_events import get_expected_event_file_path
 from system.openlineage.operator import OpenLineageTestOperator
 
+DAG_ID = "openlineage_trigger_dag"
 
-def do_nothing():
-    pass
-
-
-# Instantiate the DAG
 with DAG(
-    "openlineage_basic_dag",
+    dag_id=DAG_ID,
     start_date=datetime(2021, 1, 1),
     schedule=None,
     catchup=False,
+    default_args={"retries": 0},
 ) as dag:
-    nothing_task = PythonOperator(task_id="do_nothing_task", python_callable=do_nothing)
+    trigger_dagrun = TriggerDagRunOperator(
+        task_id="trigger_dagrun",
+        trigger_dag_id="openlineage_trigger_dag_child__notrigger",
+        trigger_run_id=f"openlineage_trigger_dag_triggering_child_{datetime.now().isoformat()}",
+        wait_for_completion=True,
+        conf={"some_config": "value1"},
+        poke_interval=10,
+    )
 
     check_events = OpenLineageTestOperator(
-        task_id="check_events",
-        file_path=str(Path(__file__).parent / "example_openlineage.json"),
+        task_id="check_events", file_path=get_expected_event_file_path(DAG_ID)
     )
 
-    nothing_task >> check_events
+    trigger_dagrun >> check_events
+
+
+with DAG(
+    dag_id="openlineage_trigger_dag_child__notrigger",
+    start_date=datetime(2021, 1, 1),
+    schedule=None,
+    catchup=False,
+    default_args={"retries": 0},
+) as child_dag:
+    do_nothing_task = BashOperator(task_id="do_nothing_task", bash_command="sleep 10;")
 
 
 from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
diff --git a/providers/openlineage/tests/system/openlineage/example_openlineage.py b/providers/openlineage/tests/system/openlineage/example_openlineage_versioned_dag.py
similarity index 70%
rename from providers/openlineage/tests/system/openlineage/example_openlineage.py
rename to providers/openlineage/tests/system/openlineage/example_openlineage_versioned_dag.py
index f823898f254..a36c65d7e71 100644
--- a/providers/openlineage/tests/system/openlineage/example_openlineage.py
+++ b/providers/openlineage/tests/system/openlineage/example_openlineage_versioned_dag.py
@@ -14,14 +14,23 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+"""
+Simple DAG to verify version attributes for AF3.
+This DAG should only be run when versioned DagBundle is present.
+
+It checks:
+    - DagRun version related attributes
+    - TaskInstance version related attributes
+"""
+
 from __future__ import annotations
 
 from datetime import datetime
-from pathlib import Path
 
 from airflow import DAG
 from airflow.providers.standard.operators.python import PythonOperator
 
+from system.openlineage.expected_events import get_expected_event_file_path
 from system.openlineage.operator import OpenLineageTestOperator
 
 
@@ -29,21 +38,22 @@ def do_nothing():
     pass
 
 
-# Instantiate the DAG
+DAG_ID = "openlineage_versioned_dag"
+
 with DAG(
-    "openlineage_basic_dag",
+    dag_id=DAG_ID,
     start_date=datetime(2021, 1, 1),
     schedule=None,
     catchup=False,
+    default_args={"retries": 0},
 ) as dag:
-    nothing_task = PythonOperator(task_id="do_nothing_task", python_callable=do_nothing)
+    do_nothing_task = PythonOperator(task_id="do_nothing_task", python_callable=do_nothing)
 
     check_events = OpenLineageTestOperator(
-        task_id="check_events",
-        file_path=str(Path(__file__).parent / "example_openlineage.json"),
+        task_id="check_events", file_path=get_expected_event_file_path(DAG_ID)
     )
 
-    nothing_task >> check_events
+    do_nothing_task >> check_events
 
 
 from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/__init__.py b/providers/openlineage/tests/system/openlineage/expected_events/__init__.py
new file mode 100644
index 00000000000..6b65722cb53
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/__init__.py
@@ -0,0 +1,75 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import os
+from pathlib import Path
+
+from packaging.version import Version
+
+from airflow import __version__
+
+AIRFLOW_VERSION = Version(__version__)
+
+
+def get_expected_event_file_path(dag_id: str) -> str:
+    """
+    Retrieve the file path to the OpenLineage expected events JSON file for a given DAG ID,
+    taking into account the Airflow version currently in use.
+
+    Since expected event outputs may differ between Airflow versions, this function attempts
+    to locate the most specific expected event file available for the running Airflow version,
+    following this precedence order:
+
+    1. A file named `{dag_id}__af{major_version}_{minor_version}.json`
+        (e.g., `example_dag__af2_10.json` for Airflow 2.10.x)
+    2. A file named `{dag_id}__af{major_version}.json`
+        (e.g., `example_dag__af3.json` for any Airflow 3.x version)
+    3. A generic file named `{dag_id}.json` without version suffix
+        (e.g., `example_dag.json` for any Airflow version)
+
+    The function returns the path to the first existing file found in this order.
+    We expect all the files to follow the naming convention described above.
+
+    If none of the expected files exist, it raises a ValueError indicating that no matching
+    expected event file could be found.
+
+    Args:
+        dag_id: The identifier of the DAG whose expected event file is to be retrieved.
+
+    Returns:
+        The file path to the appropriate expected events JSON file.
+
+    Raises:
+        ValueError: If no expected event files matching the DAG ID and Airflow version are found.
+    """
+    base_path = Path(__file__).parent
+
+    paths_to_check = (
+        str(base_path / f"{dag_id}__af{AIRFLOW_VERSION.major}_{AIRFLOW_VERSION.minor}.json"),
+        str(base_path / f"{dag_id}__af{AIRFLOW_VERSION.major}.json"),
+        str(base_path / f"{dag_id}.json"),
+    )
+
+    for path in paths_to_check:
+        if os.path.exists(path):
+            return path
+
+    raise ValueError(
+        f"Could not locate expected event files for dag_id {dag_id}. "
+        f"Expected one of the following files: `{paths_to_check}`"
+    )
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_base_complex_dag__af2.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_base_complex_dag__af2.json
new file mode 100644
index 00000000000..3fb89997bd1
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_base_complex_dag__af2.json
@@ -0,0 +1,1436 @@
+[
+  {
+    "eventType": "START",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "airflowDagRun": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {}
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "external_trigger": "{{ result == true }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "nominalTime": {
+          "nominalEndTime": "{{ is_datetime(result) }}",
+          "nominalStartTime": "{{ is_datetime(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/NominalTimeRunFacet.json\\#\\/\\$defs\\/NominalTimeRunFacet$\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "DAG",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        },
+        "documentation": {
+          "description": "OpenLineage complex DAG description",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/DocumentationJobFacet.json\\#\\/\\$defs\\/DocumentationJobFacet\") }}"
+        },
+        "ownership": {
+          "owners": "{{ result | map(attribute='name') | list | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/OwnershipJobFacet.json\\#\\/\\$defs\\/OwnershipJobFacet\") }}"
+        },
+        "airflow": {
+          "taskGroups": {
+            "section_1": {
+              "ui_color": "CornflowerBlue",
+              "ui_fgcolor": "#000",
+              "ui_label": "section_1"
+            },
+            "section_1.section_2": {
+              "parent_group": "section_1",
+              "ui_color": "CornflowerBlue",
+              "ui_fgcolor": "#000",
+              "ui_label": "section_2"
+            },
+            "section_1.section_2.section_3": {
+              "parent_group": "section_1.section_2",
+              "ui_color": "CornflowerBlue",
+              "ui_fgcolor": "#000",
+              "ui_label": "section_3"
+            }
+          },
+          "taskTree": {},
+          "tasks": {
+            "section_1.section_2.section_3.task_7": {
+              "downstream_task_ids": [
+                "check_events_number"
+              ],
+              "emits_ol_events": "{{ result == true }}",
+              "is_setup": false,
+              "is_teardown": false,
+              "operator": "airflow.providers.standard.operators.python.PythonOperator",
+              "task_group": "section_1.section_2.section_3",
+              "ui_color": "#ffefeb",
+              "ui_fgcolor": "#000",
+              "ui_label": "task_7"
+            },
+            "section_1.section_2.task_6": {
+              "downstream_task_ids": [
+                "check_events_number"
+              ],
+              "emits_ol_events": "{{ result == true }}",
+              "is_setup": false,
+              "is_teardown": false,
+              "operator": "airflow.providers.standard.operators.empty.EmptyOperator",
+              "task_group": "section_1.section_2",
+              "ui_color": "#e8f7e4",
+              "ui_fgcolor": "#000",
+              "ui_label": "task_6"
+            },
+            "section_1.task_5": {
+              "downstream_task_ids": [
+                "section_1.section_2.task_6"
+              ],
+              "emits_ol_events": "{{ result == true }}",
+              "is_setup": false,
+              "is_teardown": false,
+              "operator": "airflow.providers.standard.operators.python.PythonOperator",
+              "task_group": "section_1",
+              "ui_color": "#ffefeb",
+              "ui_fgcolor": "#000",
+              "ui_label": "task_5"
+            },
+            "task_0": {
+              "downstream_task_ids": [],
+              "emits_ol_events": false,
+              "is_setup": false,
+              "is_teardown": false,
+              "operator": "airflow.providers.standard.operators.empty.EmptyOperator",
+              "ui_color": "#e8f7e4",
+              "ui_fgcolor": "#000",
+              "ui_label": "task_0"
+            },
+            "task_1.id.with.dots": {
+              "downstream_task_ids": "{{ result | sort == ['section_1.section_2.section_3.task_7', 'task_2'] }}",
+              "emits_ol_events": "{{ result == true }}",
+              "is_setup": false,
+              "is_teardown": false,
+              "operator": "airflow.providers.standard.operators.bash.BashOperator",
+              "ui_color": "#f0ede4",
+              "ui_fgcolor": "#000",
+              "ui_label": "task_1.id.with.dots"
+            },
+            "task_2": {
+              "downstream_task_ids": "{{ result | sort == ['check_events_number', 'task_3'] }}",
+              "emits_ol_events": "{{ result == true }}",
+              "is_setup": false,
+              "is_teardown": false,
+              "operator": "airflow.providers.standard.operators.python.PythonOperator",
+              "ui_color": "#ffefeb",
+              "ui_fgcolor": "#000",
+              "ui_label": "task_2"
+            },
+            "task_3": {
+              "downstream_task_ids": "{{ result | sort == ['section_1.task_5', 'task_4'] }}",
+              "emits_ol_events": "{{ result == true }}",
+              "is_setup": false,
+              "is_teardown": false,
+              "operator": "airflow.providers.standard.operators.empty.EmptyOperator",
+              "ui_color": "#e8f7e4",
+              "ui_fgcolor": "#000",
+              "ui_label": "task_3"
+            },
+            "task_4": {
+              "downstream_task_ids": [
+                "section_1.section_2.task_6"
+              ],
+              "emits_ol_events": "{{ result == true }}",
+              "is_setup": false,
+              "is_teardown": false,
+              "operator": "{{ result.endswith('openlineage_base_complex_dag.SomeCustomOperator') }}",
+              "ui_color": "#f0ede4",
+              "ui_fgcolor": "#000",
+              "ui_label": "task_4"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/JobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "START",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {}
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "external_trigger": "{{ result == true }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "try_number": "{{ result is number }}",
+            "pool": "{{ result is string }}",
+            "queued_dttm": "{{ is_datetime(result) }}",
+            "log_url": "{{ regex_match(result, \"^http[s]?:\\/\\/.*\\/dags\\/openlineage_base_complex_dag\\/grid\\?dag_run_id=.*?\\&task_id=task_1.id.with.dots.*\") }}"
+          },
+          "task": {
+            "depends_on_past": false,
+            "downstream_task_ids": "{{ 'task_2' in result and 'section_1.section_2.section_3.task_7' in result }}",
+            "execution_timeout": "456.0 seconds",
+            "executor_config": {},
+            "ignore_first_depends_on_past": "{{ result == true }}",
+            "inlets": "[]",
+            "is_setup": false,
+            "is_teardown": false,
+            "mapped": false,
+            "multiple_outputs": false,
+            "operator_class": "BashOperator",
+            "operator_class_path": "airflow.providers.standard.operators.bash.BashOperator",
+            "outlets": "[]",
+            "owner": "owner2",
+            "priority_weight": 1,
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_id": "task_1.id.with.dots",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "[]",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "nominalTime": {
+          "nominalEndTime": "{{ is_datetime(result) }}",
+          "nominalStartTime": "{{ is_datetime(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/NominalTimeRunFacet.json\\#\\/\\$defs\\/NominalTimeRunFacet$\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.task_1.id.with.dots",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        },
+        "documentation": {
+          "description": "OpenLineage complex DAG description",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/DocumentationJobFacet.json\\#\\/\\$defs\\/DocumentationJobFacet\") }}"
+        },
+        "ownership": {
+          "owners": "{{ result | map(attribute='name') | list | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/OwnershipJobFacet.json\\#\\/\\$defs\\/OwnershipJobFacet\") }}"
+        },
+        "sourceCode": {
+          "language": "bash",
+          "sourceCode": "exit 0;",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/SourceCodeJobFacet.json\\#\\/\\$defs\\/SourceCodeJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "COMPLETE",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {}
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "external_trigger": "{{ result == true }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "duration": "{{ result is number }}",
+            "log_url": "{{ regex_match(result, \"^http[s]?:\\/\\/.*\\/dags\\/openlineage_base_complex_dag\\/grid\\?dag_run_id=.*?\\&task_id=task_1.id.with.dots.*\") }}",
+            "pool": "{{ result is string }}",
+            "queued_dttm": "{{ is_datetime(result) }}",
+            "try_number": "{{ result is number }}"
+          },
+          "task": {
+            "depends_on_past": false,
+            "downstream_task_ids": "{{ 'task_2' in result and 'section_1.section_2.section_3.task_7' in result }}",
+            "execution_timeout": "456.0 seconds",
+            "executor_config": {},
+            "ignore_first_depends_on_past": "{{ result == true }}",
+            "inlets": "[]",
+            "is_setup": false,
+            "is_teardown": false,
+            "mapped": false,
+            "multiple_outputs": false,
+            "operator_class": "BashOperator",
+            "operator_class_path": "airflow.providers.standard.operators.bash.BashOperator",
+            "outlets": "[]",
+            "owner": "owner2",
+            "priority_weight": 1,
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_id": "task_1.id.with.dots",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "[]",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.task_1.id.with.dots",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "START",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {}
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "external_trigger": "{{ result == true }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "try_number": "{{ result is number }}",
+            "pool": "{{ result is string }}",
+            "queued_dttm": "{{ is_datetime(result) }}",
+            "log_url": "{{ regex_match(result, \"^http[s]?:\\/\\/.*\\/dags\\/openlineage_base_complex_dag\\/grid\\?dag_run_id=.*?\\&task_id=task_2.*\") }}"
+          },
+          "task": {
+            "depends_on_past": false,
+            "downstream_task_ids": "{{ 'task_3' in result and 'check_events_number' in result }}",
+            "executor_config": {},
+            "ignore_first_depends_on_past": "{{ result == true }}",
+            "inlets": "[{'uri': 's3://bucket2/dir2/file2.txt', 'extra': None}]",
+            "is_setup": false,
+            "is_teardown": false,
+            "mapped": false,
+            "max_retry_delay": "42.0 seconds",
+            "multiple_outputs": false,
+            "operator_class": "PythonOperator",
+            "operator_class_path": "airflow.providers.standard.operators.python.PythonOperator",
+            "outlets": "[]",
+            "owner": "airflow",
+            "priority_weight": 1,
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_id": "task_2",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "['task_1.id.with.dots']",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "nominalTime": {
+          "nominalEndTime": "{{ is_datetime(result) }}",
+          "nominalStartTime": "{{ is_datetime(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/NominalTimeRunFacet.json\\#\\/\\$defs\\/NominalTimeRunFacet$\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.task_2",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        },
+        "documentation": {
+          "description": "OpenLineage complex DAG description",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/DocumentationJobFacet.json\\#\\/\\$defs\\/DocumentationJobFacet\") }}"
+        },
+        "ownership": {
+          "owners": "{{ result | map(attribute='name') | list | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/OwnershipJobFacet.json\\#\\/\\$defs\\/OwnershipJobFacet\") }}"
+        },
+        "sourceCode": {
+          "language": "python",
+          "sourceCode": "def do_nothing():\n    pass\n",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/SourceCodeJobFacet.json\\#\\/\\$defs\\/SourceCodeJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "COMPLETE",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {}
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "external_trigger": "{{ result == true }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "duration": "{{ result is number }}",
+            "log_url": "{{ regex_match(result, \"^http[s]?:\\/\\/.*\\/dags\\/openlineage_base_complex_dag\\/grid\\?dag_run_id=.*?\\&task_id=task_2.*\") }}",
+            "pool": "{{ result is string }}",
+            "queued_dttm": "{{ is_datetime(result) }}",
+            "try_number": "{{ result is number }}"
+          },
+          "task": {
+            "depends_on_past": false,
+            "downstream_task_ids": "{{ 'task_3' in result and 'check_events_number' in result }}",
+            "executor_config": {},
+            "ignore_first_depends_on_past": "{{ result == true }}",
+            "inlets": "[{'uri': 's3://bucket2/dir2/file2.txt', 'extra': None}]",
+            "is_setup": false,
+            "is_teardown": false,
+            "mapped": false,
+            "max_retry_delay": "42.0 seconds",
+            "multiple_outputs": false,
+            "operator_class": "PythonOperator",
+            "operator_class_path": "airflow.providers.standard.operators.python.PythonOperator",
+            "outlets": "[]",
+            "owner": "airflow",
+            "priority_weight": 1,
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_id": "task_2",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "['task_1.id.with.dots']",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.task_2",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "START",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {}
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "external_trigger": "{{ result == true }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "try_number": "{{ result is number }}",
+            "pool": "{{ result is string }}",
+            "queued_dttm": "{{ is_datetime(result) }}",
+            "log_url": "{{ regex_match(result, \"^http[s]?:\\/\\/.*\\/dags\\/openlineage_base_complex_dag\\/grid\\?dag_run_id=.*?\\&task_id=task_3.*\") }}"
+          },
+          "task": {
+            "depends_on_past": false,
+            "downstream_task_ids": "{{ 'task_4' in result and 'section_1.task_5' in result }}",
+            "executor_config": {},
+            "ignore_first_depends_on_past": "{{ result == true }}",
+            "inlets": "[]",
+            "is_setup": false,
+            "is_teardown": false,
+            "mapped": false,
+            "multiple_outputs": false,
+            "operator_class": "EmptyOperator",
+            "operator_class_path": "airflow.providers.standard.operators.empty.EmptyOperator",
+            "outlets": "[{'uri': 's3://bucket/dir/file.txt', 'extra': None}]",
+            "owner": "airflow",
+            "priority_weight": 1,
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_id": "task_3",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "['task_2']",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "nominalTime": {
+          "nominalEndTime": "{{ is_datetime(result) }}",
+          "nominalStartTime": "{{ is_datetime(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/NominalTimeRunFacet.json\\#\\/\\$defs\\/NominalTimeRunFacet$\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.task_3",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        },
+        "documentation": {
+          "description": "OpenLineage complex DAG description",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/DocumentationJobFacet.json\\#\\/\\$defs\\/DocumentationJobFacet\") }}"
+        },
+        "ownership": {
+          "owners": "{{ result | map(attribute='name') | list | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/OwnershipJobFacet.json\\#\\/\\$defs\\/OwnershipJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "COMPLETE",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {}
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "external_trigger": "{{ result == true }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "duration": "{{ result is number }}",
+            "log_url": "{{ regex_match(result, \"^http[s]?:\\/\\/.*\\/dags\\/openlineage_base_complex_dag\\/grid\\?dag_run_id=.*?\\&task_id=task_3.*\") }}",
+            "pool": "{{ result is string }}",
+            "queued_dttm": "{{ is_datetime(result) }}",
+            "try_number": "{{ result is number }}"
+          },
+          "task": {
+            "depends_on_past": false,
+            "downstream_task_ids": "{{ 'task_4' in result and 'section_1.task_5' in result }}",
+            "executor_config": {},
+            "ignore_first_depends_on_past": "{{ result == true }}",
+            "inlets": "[]",
+            "is_setup": false,
+            "is_teardown": false,
+            "mapped": false,
+            "multiple_outputs": false,
+            "operator_class": "EmptyOperator",
+            "operator_class_path": "airflow.providers.standard.operators.empty.EmptyOperator",
+            "outlets": "[{'uri': 's3://bucket/dir/file.txt', 'extra': None}]",
+            "owner": "airflow",
+            "priority_weight": 1,
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_id": "task_3",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "['task_2']",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.task_3",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "START",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {}
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "external_trigger": "{{ result == true }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "try_number": "{{ result is number }}",
+            "pool": "{{ result is string }}",
+            "queued_dttm": "{{ is_datetime(result) }}",
+            "log_url": "{{ regex_match(result, \"^http[s]?:\\/\\/.*\\/dags\\/openlineage_base_complex_dag\\/grid\\?dag_run_id=.*?\\&task_id=task_4.*\") }}"
+          },
+          "task": {
+            "deferrable": "{{ result == true }}",
+            "depends_on_past": false,
+            "downstream_task_ids": "['section_1.section_2.task_6']",
+            "executor_config": {},
+            "external_dag_id": "external_dag_id",
+            "external_task_id": "external_task_id",
+            "ignore_first_depends_on_past": "{{ result == true }}",
+            "inlets": "[]",
+            "is_setup": false,
+            "is_teardown": false,
+            "mapped": false,
+            "max_active_tis_per_dag": 7,
+            "max_active_tis_per_dagrun": 2,
+            "multiple_outputs": false,
+            "operator_class": "SomeCustomOperator",
+            "operator_class_path": "{{ result.endswith('openlineage_base_complex_dag.SomeCustomOperator') }}",
+            "outlets": "[]",
+            "owner": "owner3",
+            "priority_weight": 1,
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_id": "task_4",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "['task_3']",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "nominalTime": {
+          "nominalEndTime": "{{ is_datetime(result) }}",
+          "nominalStartTime": "{{ is_datetime(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/NominalTimeRunFacet.json\\#\\/\\$defs\\/NominalTimeRunFacet$\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.task_4",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        },
+        "documentation": {
+          "description": "OpenLineage complex DAG description",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/DocumentationJobFacet.json\\#\\/\\$defs\\/DocumentationJobFacet\") }}"
+        },
+        "ownership": {
+          "owners": "{{ result | map(attribute='name') | list | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/OwnershipJobFacet.json\\#\\/\\$defs\\/OwnershipJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "COMPLETE",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {}
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "external_trigger": "{{ result == true }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "duration": "{{ result is number }}",
+            "log_url": "{{ regex_match(result, \"^http[s]?:\\/\\/.*\\/dags\\/openlineage_base_complex_dag\\/grid\\?dag_run_id=.*?\\&task_id=task_4.*\") }}",
+            "pool": "{{ result is string }}",
+            "queued_dttm": "{{ is_datetime(result) }}",
+            "try_number": "{{ result is number }}"
+          },
+          "task": {
+            "deferrable": "{{ result == true }}",
+            "depends_on_past": false,
+            "downstream_task_ids": "['section_1.section_2.task_6']",
+            "executor_config": {},
+            "external_dag_id": "external_dag_id",
+            "external_task_id": "external_task_id",
+            "ignore_first_depends_on_past": "{{ result == true }}",
+            "inlets": "[]",
+            "is_setup": false,
+            "is_teardown": false,
+            "mapped": false,
+            "max_active_tis_per_dag": 7,
+            "max_active_tis_per_dagrun": 2,
+            "multiple_outputs": false,
+            "operator_class": "SomeCustomOperator",
+            "operator_class_path": "{{ result.endswith('openlineage_base_complex_dag.SomeCustomOperator') }}",
+            "outlets": "[]",
+            "owner": "owner3",
+            "priority_weight": 1,
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_id": "task_4",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "['task_3']",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.task_4",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "START",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {}
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "external_trigger": "{{ result == true }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "try_number": "{{ result is number }}",
+            "pool": "{{ result is string }}",
+            "queued_dttm": "{{ is_datetime(result) }}",
+            "log_url": "{{ regex_match(result, \"^http[s]?:\\/\\/.*\\/dags\\/openlineage_base_complex_dag\\/grid\\?dag_run_id=.*?\\&task_id=section_1.section_2.task_6.*\") }}"
+          },
+          "task": {
+            "depends_on_past": false,
+            "downstream_task_ids": "['check_events_number']",
+            "executor_config": {},
+            "ignore_first_depends_on_past": "{{ result == true }}",
+            "inlets": "[]",
+            "is_setup": false,
+            "is_teardown": false,
+            "mapped": false,
+            "multiple_outputs": false,
+            "operator_class": "EmptyOperator",
+            "operator_class_path": "airflow.providers.standard.operators.empty.EmptyOperator",
+            "outlets": "[]",
+            "owner": "airflow",
+            "priority_weight": 1,
+            "sla": "123.0 seconds",
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_group": {
+              "downstream_group_ids": "[]",
+              "downstream_task_ids": "[]",
+              "group_id": "section_2",
+              "prefix_group_id": true,
+              "tooltip": "group_tooltip",
+              "upstream_group_ids": "[]",
+              "upstream_task_ids": "[]"
+            },
+            "task_id": "section_1.section_2.task_6",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "{{ 'task_4' in result and 'section_1.task_5' in result }}",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "nominalTime": {
+          "nominalEndTime": "{{ is_datetime(result) }}",
+          "nominalStartTime": "{{ is_datetime(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/NominalTimeRunFacet.json\\#\\/\\$defs\\/NominalTimeRunFacet$\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.section_1.section_2.task_6",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        },
+        "documentation": {
+          "description": "OpenLineage complex DAG description",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/DocumentationJobFacet.json\\#\\/\\$defs\\/DocumentationJobFacet\") }}"
+        },
+        "ownership": {
+          "owners": "{{ result | map(attribute='name') | list | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/OwnershipJobFacet.json\\#\\/\\$defs\\/OwnershipJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "COMPLETE",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {}
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "external_trigger": "{{ result == true }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "duration": "{{ result is number }}",
+            "log_url": "{{ regex_match(result, \"^http[s]?:\\/\\/.*\\/dags\\/openlineage_base_complex_dag\\/grid\\?dag_run_id=.*?\\&task_id=section_1.section_2.task_6.*\") }}",
+            "pool": "{{ result is string }}",
+            "queued_dttm": "{{ is_datetime(result) }}",
+            "try_number": "{{ result is number }}"
+          },
+          "task": {
+            "depends_on_past": false,
+            "downstream_task_ids": "['check_events_number']",
+            "executor_config": {},
+            "ignore_first_depends_on_past": "{{ result == true }}",
+            "inlets": "[]",
+            "is_setup": false,
+            "is_teardown": false,
+            "mapped": false,
+            "multiple_outputs": false,
+            "operator_class": "EmptyOperator",
+            "operator_class_path": "airflow.providers.standard.operators.empty.EmptyOperator",
+            "outlets": "[]",
+            "owner": "airflow",
+            "priority_weight": 1,
+            "sla": "123.0 seconds",
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_group": {
+              "downstream_group_ids": "[]",
+              "downstream_task_ids": "[]",
+              "group_id": "section_2",
+              "prefix_group_id": true,
+              "tooltip": "group_tooltip",
+              "upstream_group_ids": "[]",
+              "upstream_task_ids": "[]"
+            },
+            "task_id": "section_1.section_2.task_6",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "{{ 'task_4' in result and 'section_1.task_5' in result }}",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.section_1.section_2.task_6",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        }
+      }
+    }
+  }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_base_complex_dag__af3.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_base_complex_dag__af3.json
new file mode 100644
index 00000000000..cdd3fa38310
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_base_complex_dag__af3.json
@@ -0,0 +1,1392 @@
+[
+  {
+    "eventType": "START",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "airflowDagRun": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {},
+            "timetable_summary": "None"
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_after": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "nominalTime": {
+          "nominalEndTime": "{{ is_datetime(result) }}",
+          "nominalStartTime": "{{ is_datetime(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/NominalTimeRunFacet.json\\#\\/\\$defs\\/NominalTimeRunFacet$\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "DAG",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        },
+        "documentation": {
+          "description": "OpenLineage complex DAG description",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/DocumentationJobFacet.json\\#\\/\\$defs\\/DocumentationJobFacet\") }}"
+        },
+        "ownership": {
+          "owners": "{{ result | map(attribute='name') | list | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/OwnershipJobFacet.json\\#\\/\\$defs\\/OwnershipJobFacet\") }}"
+        },
+        "airflow": {
+          "taskGroups": {
+            "section_1": {
+              "ui_color": "CornflowerBlue",
+              "ui_fgcolor": "#000",
+              "ui_label": "section_1"
+            },
+            "section_1.section_2": {
+              "parent_group": "section_1",
+              "ui_color": "CornflowerBlue",
+              "ui_fgcolor": "#000",
+              "ui_label": "section_2"
+            },
+            "section_1.section_2.section_3": {
+              "parent_group": "section_1.section_2",
+              "ui_color": "CornflowerBlue",
+              "ui_fgcolor": "#000",
+              "ui_label": "section_3"
+            }
+          },
+          "taskTree": {},
+          "tasks": {
+            "section_1.section_2.section_3.task_7": {
+              "downstream_task_ids": [
+                "check_events_number"
+              ],
+              "emits_ol_events": "{{ result == true }}",
+              "is_setup": false,
+              "is_teardown": false,
+              "operator": "airflow.providers.standard.operators.python.PythonOperator",
+              "task_group": "section_1.section_2.section_3",
+              "ui_color": "#ffefeb",
+              "ui_fgcolor": "#000",
+              "ui_label": "task_7"
+            },
+            "section_1.section_2.task_6": {
+              "downstream_task_ids": [
+                "check_events_number"
+              ],
+              "emits_ol_events": "{{ result == true }}",
+              "is_setup": false,
+              "is_teardown": false,
+              "operator": "airflow.providers.standard.operators.empty.EmptyOperator",
+              "task_group": "section_1.section_2",
+              "ui_color": "#e8f7e4",
+              "ui_fgcolor": "#000",
+              "ui_label": "task_6"
+            },
+            "section_1.task_5": {
+              "downstream_task_ids": [
+                "section_1.section_2.task_6"
+              ],
+              "emits_ol_events": "{{ result == true }}",
+              "is_setup": false,
+              "is_teardown": false,
+              "operator": "airflow.providers.standard.operators.python.PythonOperator",
+              "task_group": "section_1",
+              "ui_color": "#ffefeb",
+              "ui_fgcolor": "#000",
+              "ui_label": "task_5"
+            },
+            "task_0": {
+              "downstream_task_ids": [],
+              "emits_ol_events": false,
+              "is_setup": false,
+              "is_teardown": false,
+              "operator": "airflow.providers.standard.operators.empty.EmptyOperator",
+              "ui_color": "#e8f7e4",
+              "ui_fgcolor": "#000",
+              "ui_label": "task_0"
+            },
+            "task_1.id.with.dots": {
+              "downstream_task_ids": "{{ result | sort == ['section_1.section_2.section_3.task_7', 'task_2'] }}",
+              "emits_ol_events": "{{ result == true }}",
+              "is_setup": false,
+              "is_teardown": false,
+              "operator": "airflow.providers.standard.operators.bash.BashOperator",
+              "ui_color": "#f0ede4",
+              "ui_fgcolor": "#000",
+              "ui_label": "task_1.id.with.dots"
+            },
+            "task_2": {
+              "downstream_task_ids": "{{ result | sort == ['check_events_number', 'task_3'] }}",
+              "emits_ol_events": "{{ result == true }}",
+              "is_setup": false,
+              "is_teardown": false,
+              "operator": "airflow.providers.standard.operators.python.PythonOperator",
+              "ui_color": "#ffefeb",
+              "ui_fgcolor": "#000",
+              "ui_label": "task_2"
+            },
+            "task_3": {
+              "downstream_task_ids": "{{ result | sort == ['section_1.task_5', 'task_4'] }}",
+              "emits_ol_events": "{{ result == true }}",
+              "is_setup": false,
+              "is_teardown": false,
+              "operator": "airflow.providers.standard.operators.empty.EmptyOperator",
+              "ui_color": "#e8f7e4",
+              "ui_fgcolor": "#000",
+              "ui_label": "task_3"
+            },
+            "task_4": {
+              "downstream_task_ids": [
+                "section_1.section_2.task_6"
+              ],
+              "emits_ol_events": "{{ result == true }}",
+              "is_setup": false,
+              "is_teardown": false,
+              "operator": "{{ result.endswith('openlineage_base_complex_dag.SomeCustomOperator') }}",
+              "ui_color": "#f0ede4",
+              "ui_fgcolor": "#000",
+              "ui_label": "task_4"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/JobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "START",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {},
+            "timetable_summary": "None"
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_after": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "try_number": "{{ result is number }}"
+          },
+          "task": {
+            "depends_on_past": false,
+            "downstream_task_ids": "{{ 'task_2' in result and 'section_1.section_2.section_3.task_7' in result }}",
+            "execution_timeout": "456.0 seconds",
+            "executor_config": {},
+            "ignore_first_depends_on_past": false,
+            "inlets": "[]",
+            "mapped": false,
+            "multiple_outputs": false,
+            "operator_class": "BashOperator",
+            "operator_class_path": "airflow.providers.standard.operators.bash.BashOperator",
+            "outlets": "[]",
+            "owner": "owner2",
+            "priority_weight": 1,
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_id": "task_1.id.with.dots",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "[]",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "nominalTime": {
+          "nominalEndTime": "{{ is_datetime(result) }}",
+          "nominalStartTime": "{{ is_datetime(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/NominalTimeRunFacet.json\\#\\/\\$defs\\/NominalTimeRunFacet$\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.task_1.id.with.dots",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        },
+        "documentation": {
+          "description": "OpenLineage complex DAG description",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/DocumentationJobFacet.json\\#\\/\\$defs\\/DocumentationJobFacet\") }}"
+        },
+        "ownership": {
+          "owners": "{{ result | map(attribute='name') | list | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/OwnershipJobFacet.json\\#\\/\\$defs\\/OwnershipJobFacet\") }}"
+        },
+        "sourceCode": {
+          "language": "bash",
+          "sourceCode": "exit 0;",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/SourceCodeJobFacet.json\\#\\/\\$defs\\/SourceCodeJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "COMPLETE",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {},
+            "timetable_summary": "None"
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_after": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "try_number": "{{ result is number }}"
+          },
+          "task": {
+            "depends_on_past": false,
+            "downstream_task_ids": "{{ 'task_2' in result and 'section_1.section_2.section_3.task_7' in result }}",
+            "execution_timeout": "456.0 seconds",
+            "executor_config": {},
+            "ignore_first_depends_on_past": false,
+            "inlets": "[]",
+            "mapped": false,
+            "multiple_outputs": false,
+            "operator_class": "BashOperator",
+            "operator_class_path": "airflow.providers.standard.operators.bash.BashOperator",
+            "outlets": "[]",
+            "owner": "owner2",
+            "priority_weight": 1,
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_id": "task_1.id.with.dots",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "[]",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.task_1.id.with.dots",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "START",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {},
+            "timetable_summary": "None"
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_after": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "try_number": "{{ result is number }}"
+          },
+          "task": {
+            "depends_on_past": false,
+            "downstream_task_ids": "{{ 'task_3' in result and 'check_events_number' in result }}",
+            "executor_config": {},
+            "ignore_first_depends_on_past": false,
+            "inlets": "[{'uri': 's3://bucket2/dir2/file2.txt', 'extra': {}}]",
+            "mapped": false,
+            "max_retry_delay": "42.0 seconds",
+            "multiple_outputs": false,
+            "operator_class": "PythonOperator",
+            "operator_class_path": "airflow.providers.standard.operators.python.PythonOperator",
+            "outlets": "[]",
+            "owner": "airflow",
+            "priority_weight": 1,
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_id": "task_2",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "['task_1.id.with.dots']",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "nominalTime": {
+          "nominalEndTime": "{{ is_datetime(result) }}",
+          "nominalStartTime": "{{ is_datetime(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/NominalTimeRunFacet.json\\#\\/\\$defs\\/NominalTimeRunFacet$\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.task_2",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        },
+        "documentation": {
+          "description": "OpenLineage complex DAG description",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/DocumentationJobFacet.json\\#\\/\\$defs\\/DocumentationJobFacet\") }}"
+        },
+        "ownership": {
+          "owners": "{{ result | map(attribute='name') | list | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/OwnershipJobFacet.json\\#\\/\\$defs\\/OwnershipJobFacet\") }}"
+        },
+        "sourceCode": {
+          "language": "python",
+          "sourceCode": "def do_nothing():\n    pass\n",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/SourceCodeJobFacet.json\\#\\/\\$defs\\/SourceCodeJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "COMPLETE",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {},
+            "timetable_summary": "None"
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_after": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "try_number": "{{ result is number }}"
+          },
+          "task": {
+            "depends_on_past": false,
+            "downstream_task_ids": "{{ 'task_3' in result and 'check_events_number' in result }}",
+            "executor_config": {},
+            "ignore_first_depends_on_past": false,
+            "inlets": "[{'uri': 's3://bucket2/dir2/file2.txt', 'extra': {}}]",
+            "mapped": false,
+            "max_retry_delay": "42.0 seconds",
+            "multiple_outputs": false,
+            "operator_class": "PythonOperator",
+            "operator_class_path": "airflow.providers.standard.operators.python.PythonOperator",
+            "outlets": "[]",
+            "owner": "airflow",
+            "priority_weight": 1,
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_id": "task_2",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "['task_1.id.with.dots']",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.task_2",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "START",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {},
+            "timetable_summary": "None"
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_after": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "try_number": "{{ result is number }}"
+          },
+          "task": {
+            "depends_on_past": false,
+            "downstream_task_ids": "{{ 'task_4' in result and 'section_1.task_5' in result }}",
+            "executor_config": {},
+            "ignore_first_depends_on_past": false,
+            "inlets": "[]",
+            "mapped": false,
+            "multiple_outputs": false,
+            "operator_class": "EmptyOperator",
+            "operator_class_path": "airflow.providers.standard.operators.empty.EmptyOperator",
+            "outlets": "[{'uri': 's3://bucket/dir/file.txt', 'extra': {}}]",
+            "owner": "airflow",
+            "priority_weight": 1,
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_id": "task_3",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "['task_2']",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "nominalTime": {
+          "nominalEndTime": "{{ is_datetime(result) }}",
+          "nominalStartTime": "{{ is_datetime(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/NominalTimeRunFacet.json\\#\\/\\$defs\\/NominalTimeRunFacet$\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.task_3",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        },
+        "documentation": {
+          "description": "OpenLineage complex DAG description",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/DocumentationJobFacet.json\\#\\/\\$defs\\/DocumentationJobFacet\") }}"
+        },
+        "ownership": {
+          "owners": "{{ result | map(attribute='name') | list | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/OwnershipJobFacet.json\\#\\/\\$defs\\/OwnershipJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "COMPLETE",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {},
+            "timetable_summary": "None"
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_after": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "try_number": "{{ result is number }}"
+          },
+          "task": {
+            "depends_on_past": false,
+            "downstream_task_ids": "{{ 'task_4' in result and 'section_1.task_5' in result }}",
+            "executor_config": {},
+            "ignore_first_depends_on_past": false,
+            "inlets": "[]",
+            "mapped": false,
+            "multiple_outputs": false,
+            "operator_class": "EmptyOperator",
+            "operator_class_path": "airflow.providers.standard.operators.empty.EmptyOperator",
+            "outlets": "[{'uri': 's3://bucket/dir/file.txt', 'extra': {}}]",
+            "owner": "airflow",
+            "priority_weight": 1,
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_id": "task_3",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "['task_2']",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.task_3",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "START",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {},
+            "timetable_summary": "None"
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_after": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "try_number": "{{ result is number }}"
+          },
+          "task": {
+            "deferrable": "{{ result == true }}",
+            "depends_on_past": false,
+            "downstream_task_ids": "['section_1.section_2.task_6']",
+            "executor_config": {},
+            "external_dag_id": "external_dag_id",
+            "external_task_id": "external_task_id",
+            "ignore_first_depends_on_past": false,
+            "inlets": "[]",
+            "mapped": false,
+            "max_active_tis_per_dag": 7,
+            "max_active_tis_per_dagrun": 2,
+            "multiple_outputs": false,
+            "operator_class": "SomeCustomOperator",
+            "operator_class_path": "{{ result.endswith('openlineage_base_complex_dag.SomeCustomOperator') }}",
+            "outlets": "[]",
+            "owner": "owner3",
+            "priority_weight": 1,
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_id": "task_4",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "['task_3']",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "nominalTime": {
+          "nominalEndTime": "{{ is_datetime(result) }}",
+          "nominalStartTime": "{{ is_datetime(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/NominalTimeRunFacet.json\\#\\/\\$defs\\/NominalTimeRunFacet$\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.task_4",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        },
+        "documentation": {
+          "description": "OpenLineage complex DAG description",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/DocumentationJobFacet.json\\#\\/\\$defs\\/DocumentationJobFacet\") }}"
+        },
+        "ownership": {
+          "owners": "{{ result | map(attribute='name') | list | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/OwnershipJobFacet.json\\#\\/\\$defs\\/OwnershipJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "COMPLETE",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {},
+            "timetable_summary": "None"
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_after": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "try_number": "{{ result is number }}"
+          },
+          "task": {
+            "deferrable": "{{ result == true }}",
+            "depends_on_past": false,
+            "downstream_task_ids": "['section_1.section_2.task_6']",
+            "executor_config": {},
+            "external_dag_id": "external_dag_id",
+            "external_task_id": "external_task_id",
+            "ignore_first_depends_on_past": false,
+            "inlets": "[]",
+            "mapped": false,
+            "max_active_tis_per_dag": 7,
+            "max_active_tis_per_dagrun": 2,
+            "multiple_outputs": false,
+            "operator_class": "SomeCustomOperator",
+            "operator_class_path": "{{ result.endswith('openlineage_base_complex_dag.SomeCustomOperator') }}",
+            "outlets": "[]",
+            "owner": "owner3",
+            "priority_weight": 1,
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_id": "task_4",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "['task_3']",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.task_4",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "START",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {},
+            "timetable_summary": "None"
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_after": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "try_number": "{{ result is number }}"
+          },
+          "task": {
+            "depends_on_past": false,
+            "downstream_task_ids": "['check_events_number']",
+            "executor_config": {},
+            "ignore_first_depends_on_past": false,
+            "inlets": "[]",
+            "mapped": false,
+            "multiple_outputs": false,
+            "operator_class": "EmptyOperator",
+            "operator_class_path": "airflow.providers.standard.operators.empty.EmptyOperator",
+            "outlets": "[]",
+            "owner": "airflow",
+            "priority_weight": 1,
+            "run_as_user": "some_user",
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_group": {
+              "downstream_group_ids": "[]",
+              "downstream_task_ids": "[]",
+              "group_id": "section_2",
+              "prefix_group_id": "{{ result == true }}",
+              "tooltip": "group_tooltip",
+              "upstream_group_ids": "[]",
+              "upstream_task_ids": "[]"
+            },
+            "task_id": "section_1.section_2.task_6",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "{{ 'task_4' in result and 'section_1.task_5' in result }}",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "nominalTime": {
+          "nominalEndTime": "{{ is_datetime(result) }}",
+          "nominalStartTime": "{{ is_datetime(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/NominalTimeRunFacet.json\\#\\/\\$defs\\/NominalTimeRunFacet$\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.section_1.section_2.task_6",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        },
+        "documentation": {
+          "description": "OpenLineage complex DAG description",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/DocumentationJobFacet.json\\#\\/\\$defs\\/DocumentationJobFacet\") }}"
+        },
+        "ownership": {
+          "owners": "{{ result | map(attribute='name') | list | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/OwnershipJobFacet.json\\#\\/\\$defs\\/OwnershipJobFacet\") }}"
+        }
+      }
+    }
+  },
+  {
+    "eventType": "COMPLETE",
+    "eventTime": "{{ is_datetime(result) }}",
+    "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+    "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+    "inputs": [],
+    "outputs": [],
+    "run": {
+      "runId": "{{ is_uuid(result) }}",
+      "facets": {
+        "parent": {
+          "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_complex_dag"
+          },
+          "run": {
+            "runId": "{{ is_uuid(result) }}"
+          },
+          "root": {
+            "job": {
+              "name": "openlineage_base_complex_dag",
+              "namespace": "{{ result is string }}"
+            },
+            "run": {
+              "runId": "{{ is_uuid(result) }}"
+            }
+          },
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+        },
+        "airflow": {
+          "dag": {
+            "dag_id": "openlineage_base_complex_dag",
+            "description": "OpenLineage complex DAG description",
+            "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_complex_dag.py') }}",
+            "owner": "{{ result.split(', ') | sort == ['airflow', 'owner1', 'owner2', 'owner3'] }}",
+            "owner_links": {
+              "airflow": "https://airflow.apache.org/"
+            },
+            "start_date": "{{ is_datetime(result) }}",
+            "tags": "{{ result[1:-1].split(', ') | sort == ['\"with\\'quote\"', \"'first'\", \"'second@'\"] }}",
+            "timetable": {},
+            "timetable_summary": "None"
+          },
+          "dagRun": {
+            "conf": {},
+            "dag_id": "openlineage_base_complex_dag",
+            "data_interval_end": "{{ is_datetime(result) }}",
+            "data_interval_start": "{{ is_datetime(result) }}",
+            "logical_date": "{{ is_datetime(result) }}",
+            "run_after": "{{ is_datetime(result) }}",
+            "run_id": "{{ result is string }}",
+            "run_type": "manual",
+            "start_date": "{{ is_datetime(result) }}"
+          },
+          "taskInstance": {
+            "try_number": "{{ result is number }}"
+          },
+          "task": {
+            "depends_on_past": false,
+            "downstream_task_ids": "['check_events_number']",
+            "executor_config": {},
+            "ignore_first_depends_on_past": false,
+            "inlets": "[]",
+            "mapped": false,
+            "multiple_outputs": false,
+            "operator_class": "EmptyOperator",
+            "operator_class_path": "airflow.providers.standard.operators.empty.EmptyOperator",
+            "outlets": "[]",
+            "owner": "airflow",
+            "priority_weight": 1,
+            "run_as_user": "some_user",
+            "queue": "{{ result is string }}",
+            "retries": "{{ result is number }}",
+            "retry_exponential_backoff": false,
+            "task_group": {
+              "downstream_group_ids": "[]",
+              "downstream_task_ids": "[]",
+              "group_id": "section_2",
+              "prefix_group_id": "{{ result == true }}",
+              "tooltip": "group_tooltip",
+              "upstream_group_ids": "[]",
+              "upstream_task_ids": "[]"
+            },
+            "task_id": "section_1.section_2.task_6",
+            "trigger_rule": "all_success",
+            "upstream_task_ids": "{{ 'task_4' in result and 'section_1.task_5' in result }}",
+            "wait_for_downstream": false,
+            "wait_for_past_depends_before_skipping": false
+          },
+          "taskUuid": "{{ is_uuid(result) }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+        },
+        "processing_engine": {
+          "name": "Airflow",
+          "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+        }
+      }
+    },
+    "job": {
+      "namespace": "{{ result is string }}",
+      "name": "openlineage_base_complex_dag.section_1.section_2.task_6",
+      "facets": {
+        "jobType": {
+          "integration": "AIRFLOW",
+          "jobType": "TASK",
+          "processingType": "BATCH",
+          "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+          "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+        }
+      }
+    }
+  }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_base_simple_dag__af2.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_base_simple_dag__af2.json
new file mode 100644
index 00000000000..972048659ec
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_base_simple_dag__af2.json
@@ -0,0 +1,338 @@
+[
+    {
+        "eventType": "START",
+        "eventTime": "{{ is_datetime(result) }}",
+        "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+        "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+        "inputs": [],
+        "outputs": [],
+        "run": {
+            "runId": "{{ is_uuid(result) }}",
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "dag_id": "openlineage_base_simple_dag",
+                        "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_simple_dag.py') }}",
+                        "owner": "airflow",
+                        "owner_links": {},
+                        "start_date": "{{ is_datetime(result) }}",
+                        "tags": "[]",
+                        "timetable": {}
+                    },
+                    "dagRun": {
+                        "conf": {},
+                        "dag_id": "openlineage_base_simple_dag",
+                        "data_interval_end": "{{ is_datetime(result) }}",
+                        "data_interval_start": "{{ is_datetime(result) }}",
+                        "external_trigger": "{{ result == true or result == false }}",
+                        "logical_date": "{{ is_datetime(result) }}",
+                        "run_id": "{{ result is string }}",
+                        "run_type": "manual",
+                        "start_date": "{{ is_datetime(result) }}"
+                    },
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+                },
+                "nominalTime": {
+                    "nominalEndTime": "{{ is_datetime(result) }}",
+                    "nominalStartTime": "{{ is_datetime(result) }}",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/NominalTimeRunFacet.json\\#\\/\\$defs\\/NominalTimeRunFacet$\") }}"
+                },
+                "processing_engine": {
+                    "name": "Airflow",
+                    "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+                    "version": "{{ regex_match(result, \"^2\\.[\\d]+\\.[\\d]+.*\") }}",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+                }
+            }
+        },
+        "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_simple_dag",
+            "facets": {
+                "jobType": {
+                    "integration": "AIRFLOW",
+                    "jobType": "DAG",
+                    "processingType": "BATCH",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+                },
+                "ownership": {
+                    "owners": [
+                        {
+                            "name": "airflow"
+                        }
+                    ],
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/OwnershipJobFacet.json\\#\\/\\$defs\\/OwnershipJobFacet\") }}"
+                },
+                "airflow": {
+                    "taskGroups": {},
+                    "taskTree": {},
+                    "tasks": {
+                        "do_nothing_task": {
+                            "downstream_task_ids": [
+                                "check_events"
+                            ],
+                            "emits_ol_events": "{{ result == true }}",
+                            "is_setup": false,
+                            "is_teardown": false,
+                            "operator": "airflow.providers.standard.operators.python.PythonOperator",
+                            "ui_color": "#ffefeb",
+                            "ui_fgcolor": "#000",
+                            "ui_label": "do_nothing_task"
+                        }
+                    },
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/JobFacet\") }}"
+                }
+            }
+        }
+    },
+    {
+        "eventType": "START",
+        "eventTime": "{{ is_datetime(result) }}",
+        "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+        "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+        "inputs": [],
+        "outputs": [],
+        "run": {
+            "runId": "{{ is_uuid(result) }}",
+            "facets": {
+                "parent": {
+                    "job": {
+                        "namespace": "{{ result is string }}",
+                        "name": "openlineage_base_simple_dag"
+                    },
+                    "run": {
+                        "runId": "{{ is_uuid(result) }}"
+                    },
+                    "root": {
+                        "job": {
+                            "name": "openlineage_base_simple_dag",
+                            "namespace": "{{ result is string }}"
+                        },
+                        "run": {
+                            "runId": "{{ is_uuid(result) }}"
+                        }
+                    },
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+                },
+                "airflow": {
+                    "dag": {
+                        "dag_id": "openlineage_base_simple_dag",
+                        "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_simple_dag.py') }}",
+                        "owner": "airflow",
+                        "owner_links": {},
+                        "start_date": "{{ is_datetime(result) }}",
+                        "tags": "[]",
+                        "timetable": {}
+                    },
+                    "dagRun": {
+                        "conf": {},
+                        "dag_id": "openlineage_base_simple_dag",
+                        "data_interval_end": "{{ is_datetime(result) }}",
+                        "data_interval_start": "{{ is_datetime(result) }}",
+                        "external_trigger": "{{ result == true or result == false }}",
+                        "logical_date": "{{ is_datetime(result) }}",
+                        "run_id": "{{ result is string }}",
+                        "run_type": "manual",
+                        "start_date": "{{ is_datetime(result) }}"
+                    },
+                    "taskInstance": {
+                        "try_number": "{{ result is number }}",
+                        "pool": "{{ result is string }}",
+                        "queued_dttm": "{{ is_datetime(result) }}",
+                        "log_url": "{{ regex_match(result, \"^http[s]?:\\/\\/.*\\/dags\\/openlineage_base_simple_dag\\/grid\\?dag_run_id=.*?\\&task_id=do_nothing_task.*\") }}"
+                    },
+                    "task": {
+                        "depends_on_past": false,
+                        "downstream_task_ids": "['check_events']",
+                        "executor_config": {},
+                        "ignore_first_depends_on_past": true,
+                        "inlets": "[]",
+                        "is_setup": false,
+                        "is_teardown": false,
+                        "mapped": false,
+                        "multiple_outputs": false,
+                        "operator_class": "PythonOperator",
+                        "operator_class_path": "airflow.providers.standard.operators.python.PythonOperator",
+                        "outlets": "[]",
+                        "owner": "airflow",
+                        "priority_weight": 1,
+                        "queue": "{{ result is string }}",
+                        "retries": "{{ result is number }}",
+                        "retry_exponential_backoff": false,
+                        "task_id": "do_nothing_task",
+                        "trigger_rule": "all_success",
+                        "upstream_task_ids": "[]",
+                        "wait_for_downstream": false,
+                        "wait_for_past_depends_before_skipping": false
+                    },
+                    "taskUuid": "{{ is_uuid(result) }}",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+                },
+                "nominalTime": {
+                    "nominalEndTime": "{{ is_datetime(result) }}",
+                    "nominalStartTime": "{{ is_datetime(result) }}",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/NominalTimeRunFacet.json\\#\\/\\$defs\\/NominalTimeRunFacet$\") }}"
+                },
+                "processing_engine": {
+                    "name": "Airflow",
+                    "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+                    "version": "{{ regex_match(result, \"^2\\.[\\d]+\\.[\\d]+.*\") }}",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+                }
+            }
+        },
+        "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_simple_dag.do_nothing_task",
+            "facets": {
+                "jobType": {
+                    "integration": "AIRFLOW",
+                    "jobType": "TASK",
+                    "processingType": "BATCH",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+                },
+                "ownership": {
+                    "owners": [
+                        {
+                            "name": "airflow"
+                        }
+                    ],
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/OwnershipJobFacet.json\\#\\/\\$defs\\/OwnershipJobFacet\") }}"
+                },
+                "sourceCode": {
+                    "language": "python",
+                    "sourceCode": "def do_nothing():\n    pass\n",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/SourceCodeJobFacet.json\\#\\/\\$defs\\/SourceCodeJobFacet\") }}"
+                }
+            }
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "eventTime": "{{ is_datetime(result) }}",
+        "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+        "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+        "inputs": [],
+        "outputs": [],
+        "run": {
+            "runId": "{{ is_uuid(result) }}",
+            "facets": {
+                "parent": {
+                    "job": {
+                        "namespace": "{{ result is string }}",
+                        "name": "openlineage_base_simple_dag"
+                    },
+                    "run": {
+                        "runId": "{{ is_uuid(result) }}"
+                    },
+                    "root": {
+                        "job": {
+                            "name": "openlineage_base_simple_dag",
+                            "namespace": "{{ result is string }}"
+                        },
+                        "run": {
+                            "runId": "{{ is_uuid(result) }}"
+                        }
+                    },
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+                },
+                "airflow": {
+                    "dag": {
+                        "dag_id": "openlineage_base_simple_dag",
+                        "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_simple_dag.py') }}",
+                        "owner": "airflow",
+                        "owner_links": {},
+                        "start_date": "{{ is_datetime(result) }}",
+                        "tags": "[]",
+                        "timetable": {}
+                    },
+                    "dagRun": {
+                        "conf": {},
+                        "dag_id": "openlineage_base_simple_dag",
+                        "data_interval_end": "{{ is_datetime(result) }}",
+                        "data_interval_start": "{{ is_datetime(result) }}",
+                        "external_trigger": "{{ result == true or result == false }}",
+                        "logical_date": "{{ is_datetime(result) }}",
+                        "run_id": "{{ result is string }}",
+                        "run_type": "manual",
+                        "start_date": "{{ is_datetime(result) }}"
+                    },
+                    "taskInstance": {
+                        "duration": "{{ result is number }}",
+                        "log_url": "{{ regex_match(result, \"^http[s]?:\\/\\/.*\\/dags\\/openlineage_base_simple_dag\\/grid\\?dag_run_id=.*?\\&task_id=do_nothing_task.*\") }}",
+                        "pool": "{{ result is string }}",
+                        "queued_dttm": "{{ is_datetime(result) }}",
+                        "try_number": "{{ result is number }}"
+                    },
+                    "task": {
+                        "depends_on_past": false,
+                        "downstream_task_ids": "['check_events']",
+                        "executor_config": {},
+                        "ignore_first_depends_on_past": true,
+                        "inlets": "[]",
+                        "is_setup": false,
+                        "is_teardown": false,
+                        "mapped": false,
+                        "multiple_outputs": false,
+                        "operator_class": "PythonOperator",
+                        "operator_class_path": "airflow.providers.standard.operators.python.PythonOperator",
+                        "outlets": "[]",
+                        "owner": "airflow",
+                        "priority_weight": 1,
+                        "queue": "{{ result is string }}",
+                        "retries": "{{ result is number }}",
+                        "retry_exponential_backoff": false,
+                        "task_id": "do_nothing_task",
+                        "trigger_rule": "all_success",
+                        "upstream_task_ids": "[]",
+                        "wait_for_downstream": false,
+                        "wait_for_past_depends_before_skipping": false
+                    },
+                    "taskUuid": "{{ is_uuid(result) }}",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+                },
+                "processing_engine": {
+                    "name": "Airflow",
+                    "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+                    "version": "{{ regex_match(result, \"^2\\.[\\d]+\\.[\\d]+.*\") }}",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+                }
+            }
+        },
+        "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_simple_dag.do_nothing_task",
+            "facets": {
+                "jobType": {
+                    "integration": "AIRFLOW",
+                    "jobType": "TASK",
+                    "processingType": "BATCH",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+                },
+                "sourceCode": {
+                    "language": "python",
+                    "sourceCode": "def do_nothing():\n    pass\n",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/SourceCodeJobFacet.json\\#\\/\\$defs\\/SourceCodeJobFacet\") }}"
+                }
+            }
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_base_simple_dag__af3.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_base_simple_dag__af3.json
new file mode 100644
index 00000000000..4dcfd63b92c
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_base_simple_dag__af3.json
@@ -0,0 +1,330 @@
+[
+    {
+        "eventType": "START",
+        "eventTime": "{{ is_datetime(result) }}",
+        "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+        "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+        "inputs": [],
+        "outputs": [],
+        "run": {
+            "runId": "{{ is_uuid(result) }}",
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "dag_id": "openlineage_base_simple_dag",
+                        "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_simple_dag.py') }}",
+                        "owner": "airflow",
+                        "owner_links": {},
+                        "start_date": "{{ is_datetime(result) }}",
+                        "tags": "[]",
+                        "timetable": {},
+                        "timetable_summary": "None"
+                    },
+                    "dagRun": {
+                        "conf": {},
+                        "dag_id": "openlineage_base_simple_dag",
+                        "data_interval_end": "{{ is_datetime(result) }}",
+                        "data_interval_start": "{{ is_datetime(result) }}",
+                        "logical_date": "{{ is_datetime(result) }}",
+                        "run_after": "{{ is_datetime(result) }}",
+                        "run_id": "{{ result is string }}",
+                        "run_type": "manual",
+                        "start_date": "{{ is_datetime(result) }}"
+                    },
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+                },
+                "nominalTime": {
+                    "nominalEndTime": "{{ is_datetime(result) }}",
+                    "nominalStartTime": "{{ is_datetime(result) }}",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/NominalTimeRunFacet.json\\#\\/\\$defs\\/NominalTimeRunFacet$\") }}"
+                },
+                "processing_engine": {
+                    "name": "Airflow",
+                    "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+                    "version": "{{ regex_match(result, \"^3\\.[\\d]+\\.[\\d]+.*\") }}",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+                }
+            }
+        },
+        "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_simple_dag",
+            "facets": {
+                "jobType": {
+                    "integration": "AIRFLOW",
+                    "jobType": "DAG",
+                    "processingType": "BATCH",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+                },
+                "ownership": {
+                    "owners": [
+                        {
+                            "name": "airflow"
+                        }
+                    ],
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/OwnershipJobFacet.json\\#\\/\\$defs\\/OwnershipJobFacet\") }}"
+                },
+                "airflow": {
+                    "taskGroups": {},
+                    "taskTree": {},
+                    "tasks": {
+                        "do_nothing_task": {
+                            "downstream_task_ids": [
+                                "check_events"
+                            ],
+                            "emits_ol_events": "{{ result == true }}",
+                            "is_setup": false,
+                            "is_teardown": false,
+                            "operator": "airflow.providers.standard.operators.python.PythonOperator",
+                            "ui_color": "#ffefeb",
+                            "ui_fgcolor": "#000",
+                            "ui_label": "do_nothing_task"
+                        }
+                    },
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/JobFacet\") }}"
+                }
+            }
+        }
+    },
+    {
+        "eventType": "START",
+        "eventTime": "{{ is_datetime(result) }}",
+        "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+        "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+        "inputs": [],
+        "outputs": [],
+        "run": {
+            "runId": "{{ is_uuid(result) }}",
+            "facets": {
+                "parent": {
+                    "job": {
+                        "namespace": "{{ result is string }}",
+                        "name": "openlineage_base_simple_dag"
+                    },
+                    "run": {
+                        "runId": "{{ is_uuid(result) }}"
+                    },
+                    "root": {
+                        "job": {
+                            "name": "openlineage_base_simple_dag",
+                            "namespace": "{{ result is string }}"
+                        },
+                        "run": {
+                            "runId": "{{ is_uuid(result) }}"
+                        }
+                    },
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+                },
+                "airflow": {
+                    "dag": {
+                        "dag_id": "openlineage_base_simple_dag",
+                        "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_simple_dag.py') }}",
+                        "owner": "airflow",
+                        "owner_links": {},
+                        "start_date": "{{ is_datetime(result) }}",
+                        "tags": "[]",
+                        "timetable": {},
+                        "timetable_summary": "None"
+                    },
+                    "dagRun": {
+                        "conf": {},
+                        "dag_id": "openlineage_base_simple_dag",
+                        "data_interval_end": "{{ is_datetime(result) }}",
+                        "data_interval_start": "{{ is_datetime(result) }}",
+                        "logical_date": "{{ is_datetime(result) }}",
+                        "run_after": "{{ is_datetime(result) }}",
+                        "run_id": "{{ result is string }}",
+                        "run_type": "manual",
+                        "start_date": "{{ is_datetime(result) }}"
+                    },
+                    "taskInstance": {
+                        "try_number": "{{ result is number }}"
+                    },
+                    "task": {
+                        "depends_on_past": false,
+                        "downstream_task_ids": "['check_events']",
+                        "executor_config": {},
+                        "ignore_first_depends_on_past": false,
+                        "inlets": "[]",
+                        "mapped": false,
+                        "multiple_outputs": false,
+                        "operator_class": "PythonOperator",
+                        "operator_class_path": "airflow.providers.standard.operators.python.PythonOperator",
+                        "outlets": "[]",
+                        "owner": "airflow",
+                        "priority_weight": 1,
+                        "queue": "{{ result is string }}",
+                        "retries": "{{ result is number }}",
+                        "retry_exponential_backoff": false,
+                        "task_id": "do_nothing_task",
+                        "trigger_rule": "all_success",
+                        "upstream_task_ids": "[]",
+                        "wait_for_downstream": false,
+                        "wait_for_past_depends_before_skipping": false
+                    },
+                    "taskUuid": "{{ is_uuid(result) }}",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+                },
+                "nominalTime": {
+                    "nominalEndTime": "{{ is_datetime(result) }}",
+                    "nominalStartTime": "{{ is_datetime(result) }}",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/NominalTimeRunFacet.json\\#\\/\\$defs\\/NominalTimeRunFacet$\") }}"
+                },
+                "processing_engine": {
+                    "name": "Airflow",
+                    "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+                    "version": "{{ regex_match(result, \"^3\\.[\\d]+\\.[\\d]+.*\") }}",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+                }
+            }
+        },
+        "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_simple_dag.do_nothing_task",
+            "facets": {
+                "jobType": {
+                    "integration": "AIRFLOW",
+                    "jobType": "TASK",
+                    "processingType": "BATCH",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+                },
+                "ownership": {
+                    "owners": [
+                        {
+                            "name": "airflow"
+                        }
+                    ],
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/OwnershipJobFacet.json\\#\\/\\$defs\\/OwnershipJobFacet\") }}"
+                },
+                "sourceCode": {
+                    "language": "python",
+                    "sourceCode": "def do_nothing():\n    pass\n",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/SourceCodeJobFacet.json\\#\\/\\$defs\\/SourceCodeJobFacet\") }}"
+                }
+            }
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "eventTime": "{{ is_datetime(result) }}",
+        "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+        "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+        "inputs": [],
+        "outputs": [],
+        "run": {
+            "runId": "{{ is_uuid(result) }}",
+            "facets": {
+                "parent": {
+                    "job": {
+                        "namespace": "{{ result is string }}",
+                        "name": "openlineage_base_simple_dag"
+                    },
+                    "run": {
+                        "runId": "{{ is_uuid(result) }}"
+                    },
+                    "root": {
+                        "job": {
+                            "name": "openlineage_base_simple_dag",
+                            "namespace": "{{ result is string }}"
+                        },
+                        "run": {
+                            "runId": "{{ is_uuid(result) }}"
+                        }
+                    },
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ParentRunFacet.json\\#\\/\\$defs\\/ParentRunFacet$\") }}"
+                },
+                "airflow": {
+                    "dag": {
+                        "dag_id": "openlineage_base_simple_dag",
+                        "fileloc": "{{ result.endswith('openlineage/example_openlineage_base_simple_dag.py') }}",
+                        "owner": "airflow",
+                        "owner_links": {},
+                        "start_date": "{{ is_datetime(result) }}",
+                        "tags": "[]",
+                        "timetable": {},
+                        "timetable_summary": "None"
+                    },
+                    "dagRun": {
+                        "conf": {},
+                        "dag_id": "openlineage_base_simple_dag",
+                        "data_interval_end": "{{ is_datetime(result) }}",
+                        "data_interval_start": "{{ is_datetime(result) }}",
+                        "logical_date": "{{ is_datetime(result) }}",
+                        "run_after": "{{ is_datetime(result) }}",
+                        "run_id": "{{ result is string }}",
+                        "run_type": "manual",
+                        "start_date": "{{ is_datetime(result) }}"
+                    },
+                    "taskInstance": {
+                        "try_number": "{{ result is number }}"
+                    },
+                    "task": {
+                        "depends_on_past": false,
+                        "downstream_task_ids": "['check_events']",
+                        "executor_config": {},
+                        "ignore_first_depends_on_past": false,
+                        "inlets": "[]",
+                        "mapped": false,
+                        "multiple_outputs": false,
+                        "operator_class": "PythonOperator",
+                        "operator_class_path": "airflow.providers.standard.operators.python.PythonOperator",
+                        "outlets": "[]",
+                        "owner": "airflow",
+                        "priority_weight": 1,
+                        "queue": "{{ result is string }}",
+                        "retries": "{{ result is number }}",
+                        "retry_exponential_backoff": false,
+                        "task_id": "do_nothing_task",
+                        "trigger_rule": "all_success",
+                        "upstream_task_ids": "[]",
+                        "wait_for_downstream": false,
+                        "wait_for_past_depends_before_skipping": false
+                    },
+                    "taskUuid": "{{ is_uuid(result) }}",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+                },
+                "processing_engine": {
+                    "name": "Airflow",
+                    "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+                    "version": "{{ regex_match(result, \"^3\\.[\\d]+\\.[\\d]+.*\") }}",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+                }
+            }
+        },
+        "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_base_simple_dag.do_nothing_task",
+            "facets": {
+                "jobType": {
+                    "integration": "AIRFLOW",
+                    "jobType": "TASK",
+                    "processingType": "BATCH",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+                },
+                "sourceCode": {
+                    "language": "python",
+                    "sourceCode": "def do_nothing():\n    pass\n",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/SourceCodeJobFacet.json\\#\\/\\$defs\\/SourceCodeJobFacet\") }}"
+                }
+            }
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_defer_simple_dag.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_defer_simple_dag.json
new file mode 100644
index 00000000000..d3604f916d0
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_defer_simple_dag.json
@@ -0,0 +1,32 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "taskInstance": {
+                        "try_number": 1
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_defer_simple_dag.wait"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "taskInstance": {
+                        "try_number": 1
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_defer_simple_dag.wait"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_mapped_simple_dag.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_mapped_simple_dag.json
new file mode 100644
index 00000000000..be04d491a7e
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_mapped_simple_dag.json
@@ -0,0 +1,38 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "task": {
+                        "mapped": "{{ result == true }}"
+                    },
+                    "taskInstance": {
+                        "map_index": 1
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_mapped_simple_dag.add_one"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "task": {
+                        "mapped": "{{ result == true }}"
+                    },
+                    "taskInstance": {
+                        "map_index": 1
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_mapped_simple_dag.add_one"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_asset_or_time_dag__af2.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_asset_or_time_dag__af2.json
new file mode 100644
index 00000000000..ffcd43d7546
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_asset_or_time_dag__af2.json
@@ -0,0 +1,188 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "timetable": {
+                            "timetable": {
+                                "__type": "airflow.timetables.trigger.CronTriggerTimetable",
+                                "__var": {
+                                    "expression": "21 13 29 2 4",
+                                    "timezone": "UTC",
+                                    "interval": 0.0
+                                }
+                            },
+                            "dataset_condition": {
+                                "__type": "dataset_all",
+                                "objects": [
+                                    {
+                                        "__type": "dataset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket/file.txt",
+                                                "extra": {
+                                                    "a": 1
+                                                }
+                                            },
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket2/file.txt"
+                                            }
+                                        ]
+                                    },
+                                    {
+                                        "__type": "dataset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket3/file.txt"
+                                            },
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket4/file.txt",
+                                                "extra": {
+                                                    "b": 2
+                                                }
+                                            }
+                                        ]
+                                    }
+                                ]
+                            }
+                        },
+                        "schedule_interval": "Dataset or 21 13 29 2 4"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_asset_or_time_dag"
+        }
+    },
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "timetable": {
+                                "__type": "airflow.timetables.trigger.CronTriggerTimetable",
+                                "__var": {
+                                    "expression": "21 13 29 2 4",
+                                    "timezone": "UTC",
+                                    "interval": 0.0
+                                }
+                            },
+                            "dataset_condition": {
+                                "__type": "dataset_all",
+                                "objects": [
+                                    {
+                                        "__type": "dataset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket/file.txt",
+                                                "extra": {
+                                                    "a": 1
+                                                }
+                                            },
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket2/file.txt"
+                                            }
+                                        ]
+                                    },
+                                    {
+                                        "__type": "dataset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket3/file.txt"
+                                            },
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket4/file.txt",
+                                                "extra": {
+                                                    "b": 2
+                                                }
+                                            }
+                                        ]
+                                    }
+                                ]
+                            }
+                        },
+                        "schedule_interval": "Dataset or 21 13 29 2 4"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_asset_or_time_dag.do_nothing_task"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "timetable": {
+                                "__type": "airflow.timetables.trigger.CronTriggerTimetable",
+                                "__var": {
+                                    "expression": "21 13 29 2 4",
+                                    "timezone": "UTC",
+                                    "interval": 0.0
+                                }
+                            },
+                            "dataset_condition": {
+                                "__type": "dataset_all",
+                                "objects": [
+                                    {
+                                        "__type": "dataset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket/file.txt",
+                                                "extra": {
+                                                    "a": 1
+                                                }
+                                            },
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket2/file.txt"
+                                            }
+                                        ]
+                                    },
+                                    {
+                                        "__type": "dataset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket3/file.txt"
+                                            },
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket4/file.txt",
+                                                "extra": {
+                                                    "b": 2
+                                                }
+                                            }
+                                        ]
+                                    }
+                                ]
+                            }
+                        },
+                        "schedule_interval": "Dataset or 21 13 29 2 4"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_asset_or_time_dag.do_nothing_task"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_asset_or_time_dag__af3.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_asset_or_time_dag__af3.json
new file mode 100644
index 00000000000..509cc731e52
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_asset_or_time_dag__af3.json
@@ -0,0 +1,215 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "timetable": {
+                            "timetable": {
+                                "__type": "airflow.timetables.trigger.CronTriggerTimetable",
+                                "__var": {
+                                    "expression": "21 13 29 2 4",
+                                    "timezone": "UTC",
+                                    "interval": 0.0,
+                                    "run_immediately": false
+                                }
+                            },
+                            "asset_condition": {
+                                "__type": "asset_all",
+                                "objects": [
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket/file.txt",
+                                                "name": "s3://bucket/file.txt",
+                                                "group": "asset",
+                                                "extra": {
+                                                    "a": 1
+                                                }
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket2/file.txt",
+                                                "name": "s3://bucket2/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            }
+                                        ]
+                                    },
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket3/file.txt",
+                                                "name": "s3://bucket3/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket4/file.txt",
+                                                "name": "s3://bucket4/file.txt",
+                                                "group": "asset",
+                                                "extra": {"b":  2}
+                                            }
+                                        ]
+                                    }
+                                ]
+                            }
+                        },
+                        "timetable_summary": "Asset or 21 13 29 2 4"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_asset_or_time_dag"
+        }
+    },
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "timetable": {
+                                "__type": "airflow.timetables.trigger.CronTriggerTimetable",
+                                "__var": {
+                                    "expression": "21 13 29 2 4",
+                                    "timezone": "UTC",
+                                    "interval": 0.0,
+                                    "run_immediately": false
+                                }
+                            },
+                            "asset_condition": {
+                                "__type": "asset_all",
+                                "objects": [
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket/file.txt",
+                                                "name": "s3://bucket/file.txt",
+                                                "group": "asset",
+                                                "extra": {
+                                                    "a": 1
+                                                }
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket2/file.txt",
+                                                "name": "s3://bucket2/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            }
+                                        ]
+                                    },
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket3/file.txt",
+                                                "name": "s3://bucket3/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket4/file.txt",
+                                                "name": "s3://bucket4/file.txt",
+                                                "group": "asset",
+                                                "extra": {"b":  2}
+                                            }
+                                        ]
+                                    }
+                                ]
+                            }
+                        },
+                        "timetable_summary": "Asset or 21 13 29 2 4"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_asset_or_time_dag.do_nothing_task"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "timetable": {
+                                "__type": "airflow.timetables.trigger.CronTriggerTimetable",
+                                "__var": {
+                                    "expression": "21 13 29 2 4",
+                                    "timezone": "UTC",
+                                    "interval": 0.0,
+                                    "run_immediately": false
+                                }
+                            },
+                            "asset_condition": {
+                                "__type": "asset_all",
+                                "objects": [
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket/file.txt",
+                                                "name": "s3://bucket/file.txt",
+                                                "group": "asset",
+                                                "extra": {
+                                                    "a": 1
+                                                }
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket2/file.txt",
+                                                "name": "s3://bucket2/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            }
+                                        ]
+                                    },
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket3/file.txt",
+                                                "name": "s3://bucket3/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket4/file.txt",
+                                                "name": "s3://bucket4/file.txt",
+                                                "group": "asset",
+                                                "extra": {"b":  2}
+                                            }
+                                        ]
+                                    }
+                                ]
+                            }
+                        },
+                        "timetable_summary": "Asset or 21 13 29 2 4"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_asset_or_time_dag.do_nothing_task"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_cron_dag__af2.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_cron_dag__af2.json
new file mode 100644
index 00000000000..1a476c8b720
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_cron_dag__af2.json
@@ -0,0 +1,59 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "timetable": {
+                            "expression": "21 13 29 2 4",
+                            "timezone": "UTC"
+                        },
+                        "schedule_interval": "21 13 29 2 4"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_cron_dag"
+        }
+    },
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "expression": "21 13 29 2 4",
+                            "timezone": "UTC"
+                        },
+                        "schedule_interval": "21 13 29 2 4"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_cron_dag.do_nothing_task"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "expression": "21 13 29 2 4",
+                            "timezone": "UTC"
+                        },
+                        "schedule_interval": "21 13 29 2 4"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_cron_dag.do_nothing_task"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_cron_dag__af3.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_cron_dag__af3.json
new file mode 100644
index 00000000000..cc24cdc65c1
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_cron_dag__af3.json
@@ -0,0 +1,59 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "timetable": {
+                            "expression": "21 13 29 2 4",
+                            "timezone": "UTC"
+                        },
+                        "timetable_summary": "21 13 29 2 4"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_cron_dag"
+        }
+    },
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "expression": "21 13 29 2 4",
+                            "timezone": "UTC"
+                        },
+                        "timetable_summary": "21 13 29 2 4"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_cron_dag.do_nothing_task"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "expression": "21 13 29 2 4",
+                            "timezone": "UTC"
+                        },
+                        "timetable_summary": "21 13 29 2 4"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_cron_dag.do_nothing_task"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_complex_assets_dag__af2.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_complex_assets_dag__af2.json
new file mode 100644
index 00000000000..fe51488c706
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_complex_assets_dag__af2.json
@@ -0,0 +1 @@
+[]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_complex_assets_dag__af3.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_complex_assets_dag__af3.json
new file mode 100644
index 00000000000..003e149339d
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_complex_assets_dag__af3.json
@@ -0,0 +1,206 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "timetable": {
+                            "asset_condition": {
+                                "__type": "asset_all",
+                                "objects": [
+                                    {
+                                        "__type": "asset_all",
+                                        "objects": [
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket/file.txt",
+                                                "name": "s3://bucket/file.txt",
+                                                "group": "asset",
+                                                "extra": {
+                                                    "a": 1
+                                                }
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket2/file.txt",
+                                                "name": "s3://bucket2/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            }
+                                        ]
+                                    },
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket3/file.txt",
+                                                "name": "s3://bucket3/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket4/file.txt",
+                                                "name": "s3://bucket4/file.txt",
+                                                "group": "asset",
+                                                "extra": {"b":  2}
+                                            }
+                                        ]
+                                    }
+                                ]
+                                    }
+                                ]
+
+                            }
+                        },
+                        "timetable_summary": "Asset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_list_complex_assets_dag"
+        }
+    },
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "asset_condition": {
+                                "__type": "asset_all",
+                                "objects": [
+                                    {
+                                        "__type": "asset_all",
+                                        "objects": [
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket/file.txt",
+                                                "name": "s3://bucket/file.txt",
+                                                "group": "asset",
+                                                "extra": {
+                                                    "a": 1
+                                                }
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket2/file.txt",
+                                                "name": "s3://bucket2/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            }
+                                        ]
+                                    },
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket3/file.txt",
+                                                "name": "s3://bucket3/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket4/file.txt",
+                                                "name": "s3://bucket4/file.txt",
+                                                "group": "asset",
+                                                "extra": {"b":  2}
+                                            }
+                                        ]
+                                    }
+                                ]
+                                    }
+                                ]
+
+                            }
+                        },
+                        "timetable_summary": "Asset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_list_complex_assets_dag.do_nothing_task"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "asset_condition": {
+                                "__type": "asset_all",
+                                "objects": [
+                                    {
+                                        "__type": "asset_all",
+                                        "objects": [
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket/file.txt",
+                                                "name": "s3://bucket/file.txt",
+                                                "group": "asset",
+                                                "extra": {
+                                                    "a": 1
+                                                }
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket2/file.txt",
+                                                "name": "s3://bucket2/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            }
+                                        ]
+                                    },
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket3/file.txt",
+                                                "name": "s3://bucket3/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket4/file.txt",
+                                                "name": "s3://bucket4/file.txt",
+                                                "group": "asset",
+                                                "extra": {"b":  2}
+                                            }
+                                        ]
+                                    }
+                                ]
+                                    }
+                                ]
+
+                            }
+                        },
+                        "timetable_summary": "Asset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_list_complex_assets_dag.do_nothing_task"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_multiple_assets_dag__af2.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_multiple_assets_dag__af2.json
new file mode 100644
index 00000000000..ca47fca149f
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_multiple_assets_dag__af2.json
@@ -0,0 +1,101 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "timetable": {
+                            "dataset_condition": {
+                                "__type": "dataset_all",
+                                "objects": [
+                                    {
+                                        "__type": "dataset",
+                                        "uri": "s3://bucket/file.txt",
+                                        "extra": {
+                                            "a": 1
+                                        }
+                                    },
+                                    {
+                                        "__type": "dataset",
+                                        "uri": "s3://bucket2/file.txt"
+                                    }
+                                ]
+                            }
+                        },
+                        "schedule_interval": "Dataset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_list_multiple_assets_dag"
+        }
+    },
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "dataset_condition": {
+                                "__type": "dataset_all",
+                                "objects": [
+                                    {
+                                        "__type": "dataset",
+                                        "uri": "s3://bucket/file.txt",
+                                        "extra": {
+                                            "a": 1
+                                        }
+                                    },
+                                    {
+                                        "__type": "dataset",
+                                        "uri": "s3://bucket2/file.txt"
+                                    }
+                                ]
+                            }
+                        },
+                        "schedule_interval": "Dataset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_list_multiple_assets_dag.do_nothing_task"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "dataset_condition": {
+                                "__type": "dataset_all",
+                                "objects": [
+                                    {
+                                        "__type": "dataset",
+                                        "uri": "s3://bucket/file.txt",
+                                        "extra": {
+                                            "a": 1
+                                        }
+                                    },
+                                    {
+                                        "__type": "dataset",
+                                        "uri": "s3://bucket2/file.txt"
+                                    }
+                                ]
+                            }
+                        },
+                        "schedule_interval": "Dataset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_list_multiple_assets_dag.do_nothing_task"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_multiple_assets_dag__af3.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_multiple_assets_dag__af3.json
new file mode 100644
index 00000000000..214e4b50597
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_multiple_assets_dag__af3.json
@@ -0,0 +1,116 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "timetable": {
+                            "asset_condition": {
+                                "__type": "asset_all",
+                                "objects": [
+                                    {
+                                        "__type": "asset",
+                                        "uri": "s3://bucket/file.txt",
+                                        "name": "s3://bucket/file.txt",
+                                        "group": "asset",
+                                        "extra": {
+                                            "a": 1
+                                        }
+                                    },
+                                    {
+                                        "__type": "asset",
+                                        "uri": "s3://bucket2/file.txt",
+                                        "name": "s3://bucket2/file.txt",
+                                        "group": "asset",
+                                        "extra": {}
+                                    }
+                                ]
+                            }
+                        },
+                        "timetable_summary": "Asset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_list_multiple_assets_dag"
+        }
+    },
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "asset_condition": {
+                                "__type": "asset_all",
+                                "objects": [
+                                    {
+                                        "__type": "asset",
+                                        "uri": "s3://bucket/file.txt",
+                                        "name": "s3://bucket/file.txt",
+                                        "group": "asset",
+                                        "extra": {
+                                            "a": 1
+                                        }
+                                    },
+                                    {
+                                        "__type": "asset",
+                                        "uri": "s3://bucket2/file.txt",
+                                        "name": "s3://bucket2/file.txt",
+                                        "group": "asset",
+                                        "extra": {}
+                                    }
+                                ]
+                            }
+                        },
+                        "timetable_summary": "Asset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_list_multiple_assets_dag.do_nothing_task"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "asset_condition": {
+                                "__type": "asset_all",
+                                "objects": [
+                                    {
+                                        "__type": "asset",
+                                        "uri": "s3://bucket/file.txt",
+                                        "name": "s3://bucket/file.txt",
+                                        "group": "asset",
+                                        "extra": {
+                                            "a": 1
+                                        }
+                                    },
+                                    {
+                                        "__type": "asset",
+                                        "uri": "s3://bucket2/file.txt",
+                                        "name": "s3://bucket2/file.txt",
+                                        "group": "asset",
+                                        "extra": {}
+                                    }
+                                ]
+                            }
+                        },
+                        "timetable_summary": "Asset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_list_multiple_assets_dag.do_nothing_task"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_single_asset_dag__af2.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_single_asset_dag__af2.json
new file mode 100644
index 00000000000..98c2c25b254
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_single_asset_dag__af2.json
@@ -0,0 +1,89 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "timetable": {
+                            "dataset_condition": {
+                                "__type": "dataset_all",
+                                "objects": [
+                                    {
+                                        "__type": "dataset",
+                                        "uri": "s3://bucket/file.txt",
+                                        "extra": {
+                                            "some_extra": 123
+                                        }
+                                    }
+                                ]
+                            }
+                        },
+                        "schedule_interval": "Dataset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_list_single_asset_dag"
+        }
+    },
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "dataset_condition": {
+                                "__type": "dataset_all",
+                                "objects": [
+                                    {
+                                        "__type": "dataset",
+                                        "uri": "s3://bucket/file.txt",
+                                        "extra": {
+                                            "some_extra": 123
+                                        }
+                                    }
+                                ]
+                            }
+                        },
+                        "schedule_interval": "Dataset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_list_single_asset_dag.do_nothing_task"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "dataset_condition": {
+                                "__type": "dataset_all",
+                                "objects": [
+                                    {
+                                        "__type": "dataset",
+                                        "uri": "s3://bucket/file.txt",
+                                        "extra": {
+                                            "some_extra": 123
+                                        }
+                                    }
+                                ]
+                            }
+                        },
+                        "schedule_interval": "Dataset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_list_single_asset_dag.do_nothing_task"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_single_asset_dag__af3.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_single_asset_dag__af3.json
new file mode 100644
index 00000000000..ef95e1a0339
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_list_single_asset_dag__af3.json
@@ -0,0 +1,95 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "timetable": {
+                            "asset_condition": {
+                                "__type": "asset_all",
+                                "objects": [
+                                    {
+                                        "__type": "asset",
+                                        "uri": "s3://bucket/file.txt",
+                                        "name": "s3://bucket/file.txt",
+                                        "group": "asset",
+                                        "extra": {
+                                            "some_extra": 123
+                                        }
+                                    }
+                                ]
+                            }
+                        },
+                        "timetable_summary": "Asset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_list_single_asset_dag"
+        }
+    },
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "asset_condition": {
+                                "__type": "asset_all",
+                                "objects": [
+                                    {
+                                        "__type": "asset",
+                                        "uri": "s3://bucket/file.txt",
+                                        "name": "s3://bucket/file.txt",
+                                        "group": "asset",
+                                        "extra": {
+                                            "some_extra": 123
+                                        }
+                                    }
+                                ]
+                            }
+                        },
+                        "timetable_summary": "Asset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_list_single_asset_dag.do_nothing_task"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "asset_condition": {
+                                "__type": "asset_all",
+                                "objects": [
+                                    {
+                                        "__type": "asset",
+                                        "uri": "s3://bucket/file.txt",
+                                        "name": "s3://bucket/file.txt",
+                                        "group": "asset",
+                                        "extra": {
+                                            "some_extra": 123
+                                        }
+                                    }
+                                ]
+                            }
+                        },
+                        "timetable_summary": "Asset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_list_single_asset_dag.do_nothing_task"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_multiple_assets_dag__af2.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_multiple_assets_dag__af2.json
new file mode 100644
index 00000000000..783091cfc0d
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_multiple_assets_dag__af2.json
@@ -0,0 +1,164 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "timetable": {
+                            "dataset_condition": {
+                                "__type": "dataset_all",
+                                "objects": [
+                                    {
+                                        "__type": "dataset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket/file.txt",
+                                                "extra": {
+                                                    "a": 1
+                                                }
+                                            },
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket2/file.txt"
+                                            }
+                                        ]
+                                    },
+                                    {
+                                        "__type": "dataset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket3/file.txt"
+                                            },
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket4/file.txt",
+                                                "extra": {
+                                                    "b": 2
+                                                }
+                                            }
+                                        ]
+                                    }
+                                ]
+                            }
+                        },
+                        "schedule_interval": "Dataset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_multiple_assets_dag"
+        }
+    },
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "dataset_condition": {
+                                "__type": "dataset_all",
+                                "objects": [
+                                    {
+                                        "__type": "dataset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket/file.txt",
+                                                "extra": {
+                                                    "a": 1
+                                                }
+                                            },
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket2/file.txt"
+                                            }
+                                        ]
+                                    },
+                                    {
+                                        "__type": "dataset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket3/file.txt"
+                                            },
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket4/file.txt",
+                                                "extra": {
+                                                    "b": 2
+                                                }
+                                            }
+                                        ]
+                                    }
+                                ]
+                            }
+                        },
+                        "schedule_interval": "Dataset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_multiple_assets_dag.do_nothing_task"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "dataset_condition": {
+                                "__type": "dataset_all",
+                                "objects": [
+                                    {
+                                        "__type": "dataset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket/file.txt",
+                                                "extra": {
+                                                    "a": 1
+                                                }
+                                            },
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket2/file.txt"
+                                            }
+                                        ]
+                                    },
+                                    {
+                                        "__type": "dataset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket3/file.txt"
+                                            },
+                                            {
+                                                "__type": "dataset",
+                                                "uri": "s3://bucket4/file.txt",
+                                                "extra": {
+                                                    "b": 2
+                                                }
+                                            }
+                                        ]
+                                    }
+                                ]
+                            }
+                        },
+                        "schedule_interval": "Dataset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_multiple_assets_dag.do_nothing_task"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_multiple_assets_dag__af3.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_multiple_assets_dag__af3.json
new file mode 100644
index 00000000000..40ae29b228e
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_multiple_assets_dag__af3.json
@@ -0,0 +1,188 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "timetable": {
+                            "asset_condition": {
+                                "__type": "asset_all",
+                                "objects": [
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket/file.txt",
+                                                "name": "s3://bucket/file.txt",
+                                                "group": "asset",
+                                                "extra": {
+                                                    "a": 1
+                                                }
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket2/file.txt",
+                                                "name": "s3://bucket2/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            }
+                                        ]
+                                    },
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket3/file.txt",
+                                                "name": "s3://bucket3/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket4/file.txt",
+                                                "name": "s3://bucket4/file.txt",
+                                                "group": "asset",
+                                                "extra": {"b":  2}
+                                            }
+                                        ]
+                                    }
+                                ]
+                            }
+                        },
+                        "timetable_summary": "Asset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_multiple_assets_dag"
+        }
+    },
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "asset_condition": {
+                                "__type": "asset_all",
+                                "objects": [
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket/file.txt",
+                                                "name": "s3://bucket/file.txt",
+                                                "group": "asset",
+                                                "extra": {
+                                                    "a": 1
+                                                }
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket2/file.txt",
+                                                "name": "s3://bucket2/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            }
+                                        ]
+                                    },
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket3/file.txt",
+                                                "name": "s3://bucket3/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket4/file.txt",
+                                                "name": "s3://bucket4/file.txt",
+                                                "group": "asset",
+                                                "extra": {"b":  2}
+                                            }
+                                        ]
+                                    }
+                                ]
+                            }
+                        },
+                        "timetable_summary": "Asset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_multiple_assets_dag.do_nothing_task"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "asset_condition": {
+                                "__type": "asset_all",
+                                "objects": [
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket/file.txt",
+                                                "name": "s3://bucket/file.txt",
+                                                "group": "asset",
+                                                "extra": {
+                                                    "a": 1
+                                                }
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket2/file.txt",
+                                                "name": "s3://bucket2/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            }
+                                        ]
+                                    },
+                                    {
+                                        "__type": "asset_any",
+                                        "objects": [
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket3/file.txt",
+                                                "name": "s3://bucket3/file.txt",
+                                                "group": "asset",
+                                                "extra": {}
+                                            },
+                                            {
+                                                "__type": "asset",
+                                                "uri": "s3://bucket4/file.txt",
+                                                "name": "s3://bucket4/file.txt",
+                                                "group": "asset",
+                                                "extra": {"b":  2}
+                                            }
+                                        ]
+                                    }
+                                ]
+                            }
+                        },
+                        "timetable_summary": "Asset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_multiple_assets_dag.do_nothing_task"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_single_asset_dag__af2.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_single_asset_dag__af2.json
new file mode 100644
index 00000000000..f9b3e241140
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_single_asset_dag__af2.json
@@ -0,0 +1,74 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "timetable": {
+                            "dataset_condition": {
+                                "__type": "dataset",
+                                "uri": "s3://bucket/file.txt",
+                                "extra": {
+                                    "some_extra": 123
+                                }
+                            }
+                        },
+                        "schedule_interval": "Dataset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_single_asset_dag"
+        }
+    },
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "dataset_condition": {
+                                "__type": "dataset",
+                                "uri": "s3://bucket/file.txt",
+                                "extra": {
+                                    "some_extra": 123
+                                }
+                            }
+                        },
+                        "schedule_interval": "Dataset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_single_asset_dag.do_nothing_task"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "dataset_condition": {
+                                "__type": "dataset",
+                                "uri": "s3://bucket/file.txt",
+                                "extra": {
+                                    "some_extra": 123
+                                }
+                            }
+                        },
+                        "schedule_interval": "Dataset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_single_asset_dag.do_nothing_task"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_single_asset_dag__af3.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_single_asset_dag__af3.json
new file mode 100644
index 00000000000..98b19a7bc52
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_single_asset_dag__af3.json
@@ -0,0 +1,80 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "timetable": {
+                            "asset_condition": {
+                                "__type": "asset",
+                                "uri": "s3://bucket/file.txt",
+                                "name": "s3://bucket/file.txt",
+                                "group": "asset",
+                                "extra": {
+                                    "some_extra": 123
+                                }
+                            }
+                        },
+                        "timetable_summary": "Asset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_single_asset_dag"
+        }
+    },
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "asset_condition": {
+                                "__type": "asset",
+                                "uri": "s3://bucket/file.txt",
+                                "name": "s3://bucket/file.txt",
+                                "group": "asset",
+                                "extra": {
+                                    "some_extra": 123
+                                }
+                            }
+                        },
+                        "timetable_summary": "Asset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_single_asset_dag.do_nothing_task"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "asset_condition": {
+                                "__type": "asset",
+                                "uri": "s3://bucket/file.txt",
+                                "name": "s3://bucket/file.txt",
+                                "group": "asset",
+                                "extra": {
+                                    "some_extra": 123
+                                }
+                            }
+                        },
+                        "timetable_summary": "Asset"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_single_asset_dag.do_nothing_task"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_timetable_dag__af2.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_timetable_dag__af2.json
new file mode 100644
index 00000000000..2269e8c6117
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_timetable_dag__af2.json
@@ -0,0 +1,71 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "timetable": {
+                            "event_dates": [
+                                "2095-03-03 08:27:00-06:00",
+                                "2095-03-17 08:27:00-05:00",
+                                "2095-03-22 20:50:00-05:00"
+                            ],
+                            "restrict_to_events": false
+                        },
+                        "schedule_interval": "3 events"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_timetable_dag"
+        }
+    },
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "event_dates": [
+                                "2095-03-03 08:27:00-06:00",
+                                "2095-03-17 08:27:00-05:00",
+                                "2095-03-22 20:50:00-05:00"
+                            ],
+                            "restrict_to_events": false
+                        },
+                        "schedule_interval": "My Team's Baseball Games"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_timetable_dag.do_nothing_task"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "event_dates": [
+                                "2095-03-03 08:27:00-06:00",
+                                "2095-03-17 08:27:00-05:00",
+                                "2095-03-22 20:50:00-05:00"
+                            ],
+                            "restrict_to_events": false
+                        },
+                        "schedule_interval": "My Team's Baseball Games"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_timetable_dag.do_nothing_task"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_timetable_dag__af3.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_timetable_dag__af3.json
new file mode 100644
index 00000000000..537e6a22d9e
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_schedule_timetable_dag__af3.json
@@ -0,0 +1,71 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "timetable": {
+                            "event_dates": [
+                                "2095-03-03T08:27:00-06:00",
+                                "2095-03-17T08:27:00-05:00",
+                                "2095-03-22T20:50:00-05:00"
+                            ],
+                            "restrict_to_events": false
+                        },
+                        "timetable_summary": "3 events"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_timetable_dag"
+        }
+    },
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "event_dates": [
+                                "2095-03-03T08:27:00-06:00",
+                                "2095-03-17T08:27:00-05:00",
+                                "2095-03-22T20:50:00-05:00"
+                            ],
+                            "restrict_to_events": false
+                        },
+                        "timetable_summary": "My Team's Baseball Games"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_timetable_dag.do_nothing_task"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "dag": {
+                        "timetable": {
+                            "event_dates": [
+                                "2095-03-03T08:27:00-06:00",
+                                "2095-03-17T08:27:00-05:00",
+                                "2095-03-22T20:50:00-05:00"
+                            ],
+                            "restrict_to_events": false
+                        },
+                        "timetable_summary": "My Team's Baseball Games"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_schedule_timetable_dag.do_nothing_task"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_task_groups_dag.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_task_groups_dag.json
new file mode 100644
index 00000000000..c1b2124c6b7
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_task_groups_dag.json
@@ -0,0 +1,94 @@
+[
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "task": {
+                        "task_group": {
+                            "downstream_group_ids": "['tg2']",
+                            "downstream_task_ids": "[]",
+                            "group_id": "tg1",
+                            "prefix_group_id": true,
+                            "tooltip": "",
+                            "upstream_group_ids": "[]",
+                            "upstream_task_ids": "['task_0']"
+                        }
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_task_groups_dag.tg1.task_1"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "task": {
+                        "task_group": {
+                            "downstream_group_ids": "['tg2']",
+                            "downstream_task_ids": "[]",
+                            "group_id": "tg1",
+                            "prefix_group_id": true,
+                            "tooltip": "",
+                            "upstream_group_ids": "[]",
+                            "upstream_task_ids": "['task_0']"
+                        }
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_task_groups_dag.tg1.task_1"
+        }
+    },
+        {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "task": {
+                        "task_group": {
+                            "downstream_group_ids": "[]",
+                            "downstream_task_ids": "['check_events']",
+                            "group_id": "tg2",
+                            "prefix_group_id": true,
+                            "tooltip": "",
+                            "upstream_group_ids": "['tg1']",
+                            "upstream_task_ids": "['tg1.task_1']"
+                      }
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_task_groups_dag.tg2.task_2"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "task": {
+                        "task_group": {
+                            "downstream_group_ids": "[]",
+                            "downstream_task_ids": "['check_events']",
+                            "group_id": "tg2",
+                            "prefix_group_id": true,
+                            "tooltip": "",
+                            "upstream_group_ids": "['tg1']",
+                            "upstream_task_ids": "['tg1.task_1']"
+                        }
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_task_groups_dag.tg2.task_2"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_trigger_dag.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_trigger_dag.json
new file mode 100644
index 00000000000..d39207d006f
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_trigger_dag.json
@@ -0,0 +1,188 @@
+[
+    {
+        "eventType": "START",
+        "eventTime": "{{ is_datetime(result) }}",
+        "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+        "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+        "inputs": [],
+        "outputs": [],
+        "run": {
+            "runId": "{{ is_uuid(result) }}",
+            "facets": {
+                "airflowDagRun": {
+                    "dag": {
+                        "dag_id": "openlineage_trigger_dag_child__notrigger",
+                        "fileloc": "{{ result.endswith('openlineage/example_openlineage_trigger_dag.py') }}",
+                        "owner": "airflow",
+                        "owner_links": {},
+                        "start_date": "{{ is_datetime(result) }}",
+                        "tags": "[]",
+                        "timetable": {}
+                    },
+                    "dagRun": {
+                        "conf": {
+                            "some_config": "value1"
+                        },
+                        "dag_id": "openlineage_trigger_dag_child__notrigger",
+                        "data_interval_end": "{{ is_datetime(result) }}",
+                        "data_interval_start": "{{ is_datetime(result) }}",
+                        "logical_date": "{{ is_datetime(result) }}",
+                        "run_id": "{{ result.startswith('openlineage_trigger_dag_triggering_child') }}",
+                        "run_type": "manual",
+                        "start_date": "{{ is_datetime(result) }}"
+                    },
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+                },
+                "nominalTime": {
+                    "nominalEndTime": "{{ is_datetime(result) }}",
+                    "nominalStartTime": "{{ is_datetime(result) }}",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/NominalTimeRunFacet.json\\#\\/\\$defs\\/NominalTimeRunFacet$\") }}"
+                },
+                "processing_engine": {
+                    "name": "Airflow",
+                    "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+                    "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+                }
+            }
+        },
+        "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_trigger_dag_child__notrigger",
+            "facets": {
+                "jobType": {
+                    "integration": "AIRFLOW",
+                    "jobType": "DAG",
+                    "processingType": "BATCH",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+                },
+                "ownership": {
+                    "owners": [
+                        {
+                            "name": "airflow"
+                        }
+                    ],
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/OwnershipJobFacet.json\\#\\/\\$defs\\/OwnershipJobFacet\") }}"
+                },
+                "airflow": {
+                    "taskGroups": {},
+                    "taskTree": {},
+                    "tasks": {
+                        "do_nothing_task": {
+                            "downstream_task_ids": [],
+                            "emits_ol_events": "{{ result == true }}",
+                            "is_setup": false,
+                            "is_teardown": false,
+                            "operator": "airflow.providers.standard.operators.bash.BashOperator",
+                            "ui_label": "do_nothing_task"
+                        }
+                    },
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/JobFacet\") }}"
+                }
+            }
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "eventTime": "{{ is_datetime(result) }}",
+        "producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+        "schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunEvent$\") }}",
+        "inputs": [],
+        "outputs": [],
+        "run": {
+            "runId": "{{ is_uuid(result) }}",
+            "facets": {
+                "airflowState": {
+                    "dagRunState": "success",
+                    "tasksState": {
+                        "do_nothing_task": "success"
+                    },
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+                },
+                "airflowDagRun": {
+                    "dag": {
+                        "dag_id": "openlineage_trigger_dag_child__notrigger",
+                        "fileloc": "{{ result.endswith('openlineage/example_openlineage_trigger_dag.py') }}",
+                        "owner": "airflow",
+                        "owner_links": {},
+                        "start_date": "{{ is_datetime(result) }}",
+                        "tags": "[]",
+                        "timetable": {}
+                    },
+                    "dagRun": {
+                        "conf": {
+                            "some_config": "value1"
+                        },
+                        "dag_id": "openlineage_trigger_dag_child__notrigger",
+                        "data_interval_end": "{{ is_datetime(result) }}",
+                        "data_interval_start": "{{ is_datetime(result) }}",
+                        "logical_date": "{{ is_datetime(result) }}",
+                        "run_id": "{{ result.startswith('openlineage_trigger_dag_triggering_child') }}",
+                        "run_type": "manual",
+                        "start_date": "{{ is_datetime(result) }}",
+                        "duration": "{{ result is number }}"
+                    },
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/[\\d-]+\\/OpenLineage.json\\#\\/\\$defs\\/RunFacet\") }}"
+                },
+                "processing_engine": {
+                    "name": "Airflow",
+                    "openlineageAdapterVersion": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+                    "version": "{{ regex_match(result, \"^[\\d]+\\.[\\d]+\\.[\\d]+.*\") }}",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/ProcessingEngineRunFacet.json\\#\\/\\$defs\\/ProcessingEngineRunFacet$\") }}"
+                }
+            }
+        },
+        "job": {
+            "namespace": "{{ result is string }}",
+            "name": "openlineage_trigger_dag_child__notrigger",
+            "facets": {
+                "jobType": {
+                    "integration": "AIRFLOW",
+                    "jobType": "DAG",
+                    "processingType": "BATCH",
+                    "_producer": "{{ regex_match(result, \"^https:\\/\\/github.com/apache/airflow/tree/providers-openlineage\\/[\\d]+\\.[\\d]+\\.[\\d]+.*$\") }}",
+                    "_schemaURL": "{{ regex_match(result, \"^https:\\/\\/openlineage.io\\/spec\\/facets\\/[\\d-]+\\/JobTypeJobFacet.json\\#\\/\\$defs\\/JobTypeJobFacet\") }}"
+                }
+            }
+        }
+    },
+    {
+        "eventType": "START",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "task": {
+                        "trigger_dag_id": "openlineage_trigger_dag_child__notrigger"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_trigger_dag.trigger_dagrun"
+        }
+    },
+    {
+        "eventType": "COMPLETE",
+        "run": {
+            "facets": {
+                "airflow": {
+                    "task": {
+                        "trigger_dag_id": "openlineage_trigger_dag_child__notrigger"
+                    }
+                }
+            }
+        },
+        "job": {
+            "name": "openlineage_trigger_dag.trigger_dagrun"
+        }
+    }
+]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_versioned_dag__af2.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_versioned_dag__af2.json
new file mode 100644
index 00000000000..fe51488c706
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_versioned_dag__af2.json
@@ -0,0 +1 @@
+[]
diff --git a/providers/openlineage/tests/system/openlineage/expected_events/openlineage_versioned_dag__af3.json b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_versioned_dag__af3.json
new file mode 100644
index 00000000000..09ac861c065
--- /dev/null
+++ b/providers/openlineage/tests/system/openlineage/expected_events/openlineage_versioned_dag__af3.json
@@ -0,0 +1,53 @@
+[
+  {
+    "eventType": "START",
+    "run": {
+      "facets": {
+        "airflowDagRun": {
+          "dagRun": {
+            "dag_id": "openlineage_versioned_dag",
+            "dag_bundle_name": "{{ result is string }}",
+            "dag_bundle_version": "{{ result is string }}",
+            "dag_version_id": "{{ is_uuid(result) }}",
+            "dag_version_number": "{{ result is number }}"
+          }
+        }
+      }
+    },
+    "job": {
+      "name": "openlineage_versioned_dag"
+    }
+  },
+  {
+    "eventType": "START",
+    "run": {
+      "facets": {
+        "airflow": {
+          "taskInstance": {
+            "dag_bundle_name": "{{ result is string }}",
+            "dag_bundle_version": "{{ result is string }}"
+          }
+        }
+      }
+    },
+    "job": {
+      "name": "openlineage_versioned_dag.do_nothing_task"
+    }
+  },
+  {
+    "eventType": "COMPLETE",
+    "run": {
+      "facets": {
+        "airflow": {
+          "taskInstance": {
+            "dag_bundle_name": "{{ result is string }}",
+            "dag_bundle_version": "{{ result is string }}"
+          }
+        }
+      }
+    },
+    "job": {
+      "name": "openlineage_versioned_dag.do_nothing_task"
+    }
+  }
+]
diff --git a/providers/openlineage/tests/system/openlineage/operator.py b/providers/openlineage/tests/system/openlineage/operator.py
index d742037ea2d..353959c3230 100644
--- a/providers/openlineage/tests/system/openlineage/operator.py
+++ b/providers/openlineage/tests/system/openlineage/operator.py
@@ -222,9 +222,11 @@ class OpenLineageTestOperator(BaseOperator):
     def execute(self, context: Context) -> None:
         if self.file_path is not None:
             self.event_templates = {}
+            self.log.info("Reading OpenLineage event templates from file `%s`", self.file_path)
             with open(self.file_path) as f:  # type: ignore[arg-type]
                 events = json.load(f)
             for event in events:
+                # Just a single event per job and event type is loaded as this is the most common scenario
                 key = event["job"]["name"] + ".event." + event["eventType"].lower()
                 self.event_templates[key] = event
         try:
@@ -241,7 +243,8 @@ class OpenLineageTestOperator(BaseOperator):
                     raise ValueError(f"No event for key {key}")
                 if len(actual_events) != 1 and not self.multiple_events:
                     raise ValueError(f"Expected one event for key {key}, got {len(actual_events)}")
-                if not match(template, json.loads(actual_events[0]), self.env):
+                # Last event is checked against the template, this will allow to f.e. check change in try_num
+                if not match(template, json.loads(actual_events[-1]), self.env):
                     raise ValueError("Event received does not match one specified in test")
         finally:
             if self.delete: