Skip to main content

A pytest plugin for mocking Minio S3 interactions

Project description

pytest-minio-mock

Pip Stats

PyPI version Downloads linting: pylint

Overview

pytest-minio-mock is a pytest plugin designed to simplify testing of applications that interact with Minio the code S3 compatible object storage system. It is not designed to test the correnction to the minio server. It provides a fixture that mocks the minio.Minio class, allowing for easy testing of Minio interactions without the need for a real Minio server.

The plugin supports python version 3.8 or above.

Features

  • Mock implementation of the minio.Minio client.

  • Easy to use pytest fixture.

  • Supports versioning.

  • Currently the plugin mocks the following Minio client APIs:

    Bucket Operations:

    • make_bucket
    • list_buckets
    • bucket_exists
    • remove_bucket
    • list_objects
    • get_bucket_versioning
    • set_bucket_versioning

    Objects Operations:

    • get_object
    • fget_object
    • put_object
    • fput_object
    • stat_object
    • remove_object
    • get_presigned_url
    • presigned_put_object
    • presigned_get_object

Installation

To install pytest-minio-mock, run:

pip install pytest-minio-mock

Usage

To use the minio_mock fixture in your pytest tests, simply include it as a parameter in your test functions. Then use minio.Minio() as usual Here's an example:

def foo():
    try:
        minio_client = minio.Minio(
            endpoint=S3_URI,
            access_key=S3_ACCESS_KEY,
            secret_key=S3_SECRET_KEY,
            region=S3_REGION
        )
        return minio_client.make_bucket("buckets")
    except Exception as e:
        logging.error(e)


def test_file_upload(minio_mock):
    # Calling function foo that involves using minio.Minio()
    assert foo()
    minio_client = minio.Minio(
            endpoint=S3_URI,
            access_key=S3_ACCESS_KEY,
            secret_key=S3_SECRET_KEY,
            region=S3_REGION
        )
    buckets = minio.list_buckets()
    assert len(buckets)==1

The minio_mock fixture will patch newly created minio.Minio() thus providing you with a way to test your code around the Minio client easily.

At the moment, instances of minio.Minio() created before loading the minio_mock fixture code will not be patched. This might be an issue if one or more of the fixtures you are using in your tests that preceeds minio_mock in the parameters list of the test function, initiates instances of minio.Minio() that you want to test. As a workaround make sure that minio_mock is the first fixture in the list of arguments of function where minio_mock is needed. Example:

@pytest.fixture()
def system_under_test(minio_mock: MockMinioClient, storage_provider_stub: StorageProvider):
    # your code here
    pass

API

MockMinioClient

A brief description of the mocked methods and their behavior, like:

  • make_bucket(bucket_name, ...) # Mocks bucket creation.
  • fput_object(bucket_name, object_name, file_path, ...) # Mocks file upload.
  • ...

Contributing

Contributions to pytest-minio-mock are welcome!

Follow the usual path:

  • fork the repository
  • create a feature branch
  • push the branch to your forked repository
  • from the forked repository, create a "pull request" to this project.

When creating a pull request make sure to use the following template:

Change Summary
 - item one
 - item two
Related issue number
 - issue a
 - issue b
Checklist
  [ ] code is ready
  [ ] add tests
  [ ] all tests passing
  [ ] test coverage did not drop
  [ ] PR is ready for review

After a pull request has been submitted:

  • A reviewer must review the pull-request
  • the pull requests must pass all tests for all supported python versions 3.8, 3.9, 3.10, 3.11 and 3.12.
  • A maintainer will eventually merges the pull request
  • A release manager will upload it to pypi.

License

pytest-minio-mock is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytest_minio_mock-0.4.19.tar.gz (19.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pytest_minio_mock-0.4.19-py3-none-any.whl (14.1 kB view details)

Uploaded Python 3

File details

Details for the file pytest_minio_mock-0.4.19.tar.gz.

File metadata

  • Download URL: pytest_minio_mock-0.4.19.tar.gz
  • Upload date:
  • Size: 19.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pytest_minio_mock-0.4.19.tar.gz
Algorithm Hash digest
SHA256 b8dabd09dd4a4dc5970bd57155a32b1161f88a48d0aac38ab9b95c39029e1d09
MD5 5b5732511ce21d85ed5bceacd32a1cad
BLAKE2b-256 851cd504ee8c7af4b08df1dcebf450e7a55d74efc1bf89f1e9d5488491a34a16

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytest_minio_mock-0.4.19.tar.gz:

Publisher: publish-to-pypi-workflow.yaml on oussjarrousse/pytest-minio-mock

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytest_minio_mock-0.4.19-py3-none-any.whl.

File metadata

File hashes

Hashes for pytest_minio_mock-0.4.19-py3-none-any.whl
Algorithm Hash digest
SHA256 d93567670a01acfe2e2f8f4d056e64686eb14b622682702058dd53e71eba62c7
MD5 00326230bea0579e22e66c7654d4e30e
BLAKE2b-256 7122da64288b3891d7b0394fcb322a8c0f04504eebbe58019c18f1ea0edc7075

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytest_minio_mock-0.4.19-py3-none-any.whl:

Publisher: publish-to-pypi-workflow.yaml on oussjarrousse/pytest-minio-mock

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page