#
# 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.
#

[pytest]
junit_family = xunit2
filterwarnings =
  ignore:Deprecated call to `pkg_resources.declare_namespace\('.*'\):DeprecationWarning
  ignore::DeprecationWarning:google.rpc

# Disable class-name-based test discovery.
python_classes =
# Disable function-name-based test discovery.
python_functions =
# Discover tests using filenames.
# See conftest.py for extra collection rules.
python_files = test_*.py *_test.py *_test_py3*.py *_test_it.py

markers =
    uses_gcp_java_expansion_service: collect Cross Language GCP Java transforms test runs
    uses_java_expansion_service: collect Cross Language Java transforms test runs
    uses_python_expansion_service: collect Cross Language Python transforms test runs
    uses_io_java_expansion_service: collect Cross Language IO Java transform test runs (with Kafka bootstrap server)
    uses_messaging_java_expansion_service: collect Cross Language Messaging IO Java transform test runs
    xlang_wrapper_generation: collect tests that validate Cross Language wrapper generation
    uses_transform_service: collect Cross Language test runs that uses the Transform Service
    xlang_sql_expansion_service: collect for Cross Language with SQL expansion service test runs
    it_postcommit: collect for post-commit integration test runs
    it_postcommit_sickbay: collect for post-commit sickbay integration test run
    it_validatesrunner: collect for ValidatesRunner integration test runs
    spannerio_it : collect for Spanner IO IT test runs.
    no_sickbay_streaming: run without sickbay-streaming
    no_sickbay_batch: run without sickbay-batch
    it_validatescontainer: collect for ValidatesContainer integration test runs
    it_dataflow_arm: collect for DataflowArm integration test runs
    examples_postcommit: collect for post-commit test examples runs
    sickbay_direct: run without sickbay-direct
    sickbay_spark: run without sickbay-spark
    sickbay_flink: run without sickbay-flink
    sickbay_prism: run without sickbay-prism
    sickbay_dataflow: run without sickbay-dataflow
    # Tests using this marker conflict with the xdist plugin in some way, such
    # as enabling save_main_session.
    no_xdist: run without pytest-xdist plugin
    # We run these tests with multiple major pyarrow versions (BEAM-11211)
    uses_pyarrow: tests that utilize pyarrow in some way.
    # ML tests
    uses_pytorch: tests that utilize pytorch in some way.
    uses_sklearn: tests that utilize scikit-learn in some way.
    uses_tensorflow: tests that utilize tensorflow in some way.
    uses_tft: tests that utilizes tensorflow transforms in some way.
    uses_xgboost: tests that utilize xgboost in some way.
    uses_onnx: tests that utilizes onnx in some way.
    uses_tf: tests that utilize tensorflow.
    uses_transformers: tests that utilize transformers in some way.
    vertex_ai_postcommit: vertex ai postcommits that need additional deps.
    uses_testcontainer: tests that use testcontainers.
    uses_mock_api: tests that uses the mock API cluster.
    uses_feast: tests that uses feast in some way
    gemini_postcommit: gemini postcommits that need additional deps.
    anthropic_postcommit: anthropic postcommits that need additional deps.
    require_docker_in_docker: tests that require running Docker inside Docker (Docker-in-Docker), which is not supported on Beam’s self-hosted runners. Context: https://github.com/apache/beam/pull/35585
    uses_dill: tests that require dill pickle library.

# Default timeout intended for unit tests.
# If certain tests need a different value, please see the docs on how to
# specify: https://github.com/pytest-dev/pytest-timeout/
timeout = 600
