Skip to content

Commit

Permalink
Merge pull request ceph#482 from cbodley/wip-tox-pytest
Browse files Browse the repository at this point in the history
replace deprecated nose with pytest
  • Loading branch information
alimaredia authored Jan 25, 2023
2 parents 114397c + 7993dd0 commit b8422a2
Show file tree
Hide file tree
Showing 19 changed files with 2,871 additions and 6,032 deletions.
36 changes: 14 additions & 22 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,10 @@ This is a set of unofficial Amazon AWS S3 compatibility
tests, that can be useful to people implementing software
that exposes an S3-like API. The tests use the Boto2 and Boto3 libraries.

The tests use the Nose test framework. To get started, ensure you have
the ``virtualenv`` software installed; e.g. on Debian/Ubuntu::
The tests use the Tox tool. To get started, ensure you have the ``tox``
software installed; e.g. on Debian/Ubuntu::

sudo apt-get install python-virtualenv

and then run::

./bootstrap
sudo apt-get install tox

You will need to create a configuration file with the location of the
service and two different credentials. A sample configuration file named
Expand All @@ -22,37 +18,33 @@ used to run the s3 tests on a Ceph cluster started with vstart.

Once you have that file copied and edited, you can run the tests with::

S3TEST_CONF=your.conf ./virtualenv/bin/nosetests
S3TEST_CONF=your.conf tox

You can specify which directory of tests to run::

S3TEST_CONF=your.conf ./virtualenv/bin/nosetests s3tests_boto3.functional
S3TEST_CONF=your.conf tox s3tests_boto3/functional

You can specify which file of tests to run::

S3TEST_CONF=your.conf ./virtualenv/bin/nosetests s3tests_boto3.functional.test_s3
S3TEST_CONF=your.conf tox s3tests_boto3/functional/test_s3.py

You can specify which test to run::

S3TEST_CONF=your.conf ./virtualenv/bin/nosetests s3tests_boto3.functional.test_s3:test_bucket_list_empty

To gather a list of tests being run, use the flags::

-v --collect-only
S3TEST_CONF=your.conf tox s3tests_boto3/functional/test_s3.py::test_bucket_list_empty

Some tests have attributes set based on their current reliability and
things like AWS not enforcing their spec stricly. You can filter tests
based on their attributes::

S3TEST_CONF=aws.conf ./virtualenv/bin/nosetests -a '!fails_on_aws'
S3TEST_CONF=aws.conf tox -- -m 'not fails_on_aws'

Most of the tests have both Boto3 and Boto2 versions. Tests written in
Boto2 are in the ``s3tests`` directory. Tests written in Boto3 are
located in the ``s3test_boto3`` directory.

You can run only the boto3 tests with::

S3TEST_CONF=your.conf ./virtualenv/bin/nosetests -v -s -A 'not fails_on_rgw' s3tests_boto3.functional
S3TEST_CONF=your.conf tox -- -m 'not fails_on_aws' s3tests_boto3/functional

========================
STS compatibility tests
Expand All @@ -62,11 +54,11 @@ This section contains some basic tests for the AssumeRole, GetSessionToken and A

You can run only the sts tests (all the three API's) with::

S3TEST_CONF=your.conf ./virtualenv/bin/nosetests s3tests_boto3.functional.test_sts
S3TEST_CONF=your.conf tox s3tests_boto3/functional/test_sts.py

You can filter tests based on the attributes. There is a attribute named ``test_of_sts`` to run AssumeRole and GetSessionToken tests and ``webidentity_test`` to run the AssumeRoleWithWebIdentity tests. If you want to execute only ``test_of_sts`` tests you can apply that filter as below::

S3TEST_CONF=your.conf ./virtualenv/bin/nosetests -v -s -A 'test_of_sts' s3tests_boto3.functional.test_sts
S3TEST_CONF=your.conf tox -- -m test_of_sts s3tests_boto3/functional/test_sts.py

For running ``webidentity_test`` you'll need have Keycloak running.

Expand All @@ -88,14 +80,14 @@ Adding above capabilities to "iam" user is also taken care by vstart (If Ceph cl
To run these tests, create configuration file with section "iam" and "s3 alt" refer s3tests.conf.SAMPLE.
Once you have that configuration file copied and edited, you can run all the tests with::

S3TEST_CONF=your.conf ./virtualenv/bin/nosetests s3tests_boto3.functional.test_iam
S3TEST_CONF=your.conf tox s3tests_boto3/functional/test_iam.py

You can also specify specific test to run::

S3TEST_CONF=your.conf ./virtualenv/bin/nosetests s3tests_boto3.functional.test_iam:test_put_user_policy
S3TEST_CONF=your.conf tox s3tests_boto3/functional/test_iam.py::test_put_user_policy

Some tests have attributes set such as "fails_on_rgw".
You can filter tests based on their attributes::

S3TEST_CONF=your.conf ./virtualenv/bin/nosetests s3tests_boto3.functional.test_iam -a '!fails_on_rgw'
S3TEST_CONF=your.conf tox -- s3tests_boto3/functional/test_iam.py -m 'not fails_on_rgw'

76 changes: 0 additions & 76 deletions bootstrap

This file was deleted.

43 changes: 43 additions & 0 deletions pytest.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
[pytest]
markers =
abac_test
appendobject
auth_aws2
auth_aws4
auth_common
bucket_policy
bucket_encryption
cloud_transition
encryption
fails_on_aws
fails_on_dbstore
fails_on_dho
fails_on_mod_proxy_fcgi
fails_on_rgw
fails_on_s3
fails_with_subdomain
lifecycle
lifecycle_expiration
lifecycle_transition
list_objects_v2
object_lock
session_policy
s3select
s3website
s3website_routing_rules
s3website_redirect_location
3website
sse_s3
storage_class
tagging
test_of_iam
test_of_sts
token_claims_trust_policy_test
token_principal_tag_role_policy_test
token_request_tag_trust_policy_test
token_resource_tags_test
token_role_tags_test
token_tag_keys_test
user_policy
versioning
webidentity_test
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
PyYAML
nose >=1.0.0
boto >=2.6.0
boto3 >=1.0.0
# botocore-1.28 broke v2 signatures, see https://tracker.ceph.com/issues/58059
Expand All @@ -12,3 +11,4 @@ requests >=2.23.0
pytz >=2011k
httplib2
lxml
pytest
10 changes: 10 additions & 0 deletions s3tests/functional/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import os
import random
import string
import pytest
from http.client import HTTPConnection, HTTPSConnection
from urllib.parse import urlparse

Expand Down Expand Up @@ -370,6 +371,15 @@ def teardown():
# remove our buckets here also, to avoid littering
nuke_prefixed_buckets(prefix=prefix)

@pytest.fixture(scope="package")
def configfile():
setup()
yield config

@pytest.fixture(autouse=True)
def setup_teardown(configfile):
yield
teardown()

bucket_counter = itertools.count(1)

Expand Down
Loading

0 comments on commit b8422a2

Please sign in to comment.