blob: 5bf32d54588c04e33b02dff6358be515a367cdae [file] [log] [blame]
# 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.
import os
from uuid import uuid4
import pytest
from dotenv import load_dotenv
import opendal
load_dotenv()
pytest_plugins = ("pytest_asyncio",)
def pytest_configure(config):
# register an additional marker
config.addinivalue_line(
"markers",
"need_capability(*capability): mark test to run only on named capability",
)
@pytest.fixture(scope="session")
def service_name():
service_name = os.environ.get("OPENDAL_TEST")
if service_name is None:
pytest.skip("OPENDAL_TEST not set")
return service_name
@pytest.fixture(scope="session")
def setup_config(service_name):
# Read arguments from envs.
prefix = f"opendal_{service_name}_"
config = {}
for key in os.environ:
if key.lower().startswith(prefix):
config[key[len(prefix) :].lower()] = os.environ.get(key)
disable_random_root = os.environ.get("OPENDAL_DISABLE_RANDOM_ROOT") == "true"
if not disable_random_root:
config["root"] = f"{config.get('root', '/')}/{str(uuid4())}/"
return config
@pytest.fixture(scope="session")
def async_operator(service_name, setup_config):
return (
opendal.AsyncOperator(service_name, **setup_config)
.layer(opendal.layers.RetryLayer())
.layer(opendal.layers.ConcurrentLimitLayer(1024))
.layer(opendal.layers.MimeGuessLayer())
)
@pytest.fixture(scope="session")
def operator(async_operator):
return async_operator.to_operator()
@pytest.fixture(autouse=True)
def check_capability(request, operator, async_operator) -> None:
marker = request.node.get_closest_marker("need_capability")
if (
marker
and marker.args
and not all(
[getattr(operator.capability(), x) for x in marker.args]
+ [getattr(async_operator.capability(), x) for x in marker.args]
)
):
pytest.skip(f"skip because {marker.args} not supported")