summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--python-mbtest.spec475
-rw-r--r--sources1
3 files changed, 477 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..0a14fd0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/mbtest-2.11.0.tar.gz
diff --git a/python-mbtest.spec b/python-mbtest.spec
new file mode 100644
index 0000000..3b583f0
--- /dev/null
+++ b/python-mbtest.spec
@@ -0,0 +1,475 @@
+%global _empty_manifest_terminate_build 0
+Name: python-mbtest
+Version: 2.11.0
+Release: 1
+Summary: Python wrapper & utils for the Mountebank over the wire test double tool.
+License: MIT License
+URL: https://github.com/brunns/mbtest/
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/a1/18/25e73126c5cb52f72280303f89c142222cdd8219ee19a1bab90ad760b36d/mbtest-2.11.0.tar.gz
+BuildArch: noarch
+
+Requires: python3-requests
+Requires: python3-furl
+Requires: python3-pyhamcrest
+Requires: python3-Deprecated
+Requires: python3-brunns-matchers
+Requires: python3-imurl
+Requires: python3-pytest-cov
+Requires: python3-codacy-coverage
+Requires: python3-sphinx
+Requires: python3-sphinx-autodoc-typehints
+Requires: python3-pytest
+Requires: python3-furo
+Requires: python3-requests
+Requires: python3-furl
+Requires: python3-pyhamcrest
+Requires: python3-Deprecated
+Requires: python3-brunns-matchers
+Requires: python3-imurl
+Requires: python3-pytest
+Requires: python3-contexttimer
+Requires: python3-brunns-builder
+Requires: python3-trustme
+
+%description
+# mbtest
+
+Opinionated Python wrapper & utils for the [Mountebank](https://www.mbtest.org/) over the wire test double tool.
+
+Includes [pytest](https://pytest.org) fixture and [PyHamcrest](https://pyhamcrest.readthedocs.io) matchers.
+
+[![made-with-python](https://img.shields.io/badge/Made%20with-Python-1f425f.svg)](https://www.python.org/)
+[![Continuous Integration](https://github.com/brunns/mbtest/workflows/Continuous%20Integration/badge.svg)](https://github.com/brunns/mbtest/actions)
+[![Python Versions](https://img.shields.io/pypi/pyversions/mbtest.svg?logo=python)](https://pypi.org/project/mbtest/)
+[![Licence](https://img.shields.io/github/license/brunns/mbtest.svg)](https://github.com/brunns/mbtest/blob/master/LICENSE)
+[![GitHub all releases](https://img.shields.io/github/downloads/brunns/mbtest/total.svg?logo=github)](https://github.com/brunns/mbtest/releases/)
+[![GitHub forks](https://img.shields.io/github/forks/brunns/mbtest.svg?label=Fork&logo=github)](https://github.com/brunns/mbtest/network/members)
+[![GitHub stars](https://img.shields.io/github/stars/brunns/mbtest.svg?label=Star&logo=github)](https://github.com/brunns/mbtest/stargazers/)
+[![GitHub watchers](https://img.shields.io/github/watchers/brunns/mbtest.svg?label=Watch&logo=github)](https://github.com/brunns/mbtest/watchers/)
+[![GitHub contributors](https://img.shields.io/github/contributors/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/graphs/contributors/)
+[![GitHub issues](https://img.shields.io/github/issues/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/issues/)
+[![GitHub issues-closed](https://img.shields.io/github/issues-closed/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/issues?q=is%3Aissue+is%3Aclosed)
+[![GitHub pull-requests](https://img.shields.io/github/issues-pr/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/pulls)
+[![GitHub pull-requests closed](https://img.shields.io/github/issues-pr-closed/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aclosed)
+[![Codacy Badge](https://api.codacy.com/project/badge/Grade/3b7c694664974d17a34e594c43af0c1b)](https://www.codacy.com/app/brunns/mbtest)
+[![Codacy Coverage](https://api.codacy.com/project/badge/coverage/3b7c694664974d17a34e594c43af0c1b)](https://www.codacy.com/app/brunns/mbtest)
+[![Documentation Status](https://readthedocs.org/projects/mbtest/badge/?version=latest)](https://mbtest.readthedocs.io/en/latest/?badge=latest)
+[![Lines of Code](https://tokei.rs/b1/github/brunns/mbtest)](https://github.com/brunns/mbtest)
+
+
+## Setup
+
+Install with pip:
+
+ pip install mbtest
+
+(As usual, use of a [venv](https://docs.python.org/3/library/venv.html) or [virtualenv](https://virtualenv.pypa.io) is recommended.) Also requires [Mountebank](http://www.mbtest.org/) to have been installed:
+
+ npm install mountebank@2.8 --omit=dev
+
+(Alternatively, you can attach to an instance of Mountebank running elsewhere, perhaps [in docker](https://mbtest.readthedocs.io/en/latest/guide/docker.html).)
+
+## Basic example
+
+```python
+import requests
+from hamcrest import assert_that
+from brunns.matchers.response import is_response
+from mbtest.matchers import had_request
+from mbtest.imposters import Imposter, Predicate, Response, Stub
+
+def test_request_to_mock_server(mock_server):
+ # Set up mock server with required behavior
+ imposter = Imposter(Stub(Predicate(path="/test"),
+ Response(body="sausages")))
+
+ with mock_server(imposter):
+ # Make request to mock server - exercise code under test here
+ response = requests.get(f"{imposter.url}/test")
+
+ assert_that("We got the expected response",
+ response, is_response().with_status_code(200).and_body("sausages"))
+ assert_that("The mock server recorded the request",
+ imposter, had_request().with_path("/test").and_method("GET"))
+```
+
+Needs a [pytest fixture](https://docs.pytest.org/en/latest/fixture.html), most easily defined in [`conftest.py`](https://docs.pytest.org/en/latest/how-to/fixtures.html#scope-sharing-fixtures-across-classes-modules-packages-or-session):
+
+```python
+import pytest
+from mbtest import server
+
+@pytest.fixture(scope="session")
+def mock_server(request):
+ return server.mock_server(request)
+```
+
+This will take care of starting and stopping the Mountebank server for you. Examples of more complex predicates can be
+found in the [integration tests](https://github.com/brunns/mbtest/tree/master/tests/integration/).
+
+See the [Documentation](https://mbtest.readthedocs.io/) for more.
+
+
+## Contributing
+
+Requires [make](https://www.gnu.org/software/make/manual/html_node/index.html) and [tox](https://tox.readthedocs.io).
+[PyEnv](https://github.com/pyenv/pyenv) may also come in handy so tests can be run against various Python versions.
+
+Integration tests run against an instance of Mountebank running in Docker.
+
+Currently, the `Makefile` targets use Python 3.8 and 3.11 via tox, so a quick-start setup could be:
+
+```sh
+brew install pyenv colima docker
+versions=(3.7 3.11)
+for v in "${versions[@]}"; do pyenv install $v -s; done
+pyenv local 3.11 3.7
+pip install tox tox-pyenv
+colima start
+```
+
+In order to run `make test`, you'll also need to have Mountebank installed locally:
+
+```sh
+npm install mountebank@2.6 --production
+```
+
+(`mbtest` is tested against Mountebank versions back as far as 1.16, but obviously only features supported by the Mountebank version you're using will work.)
+
+After that, you should be ready to roll; running `make test` will let you know if your setup is correct.
+
+Running `make precommit` tells you if you're OK to commit. For more options, run:
+
+ make help
+
+## Releasing
+
+Requires [hub](https://hub.github.com/), [setuptools](https://setuptools.readthedocs.io),
+[wheel](https://github.com/pypa/wheel) and [twine](https://twine.readthedocs.io). To release version `n.n.n`, first
+update the version number in `setup.py`, then:
+
+```sh
+version="n.n.n" # Needs to match new version number in setup.py.
+git checkout -b "release-$version"
+make precommit && git commit -am"Release $version" && git push --set-upstream origin "release-$version" # If not already all pushed, which it should be.
+hub release create "V$version" -t"release-$version" -m"Version $version"
+python setup.py sdist bdist_wheel
+twine upload dist/*$version*
+git checkout master
+git merge "release-$version"
+git push
+```
+
+
+%package -n python3-mbtest
+Summary: Python wrapper & utils for the Mountebank over the wire test double tool.
+Provides: python-mbtest
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-mbtest
+# mbtest
+
+Opinionated Python wrapper & utils for the [Mountebank](https://www.mbtest.org/) over the wire test double tool.
+
+Includes [pytest](https://pytest.org) fixture and [PyHamcrest](https://pyhamcrest.readthedocs.io) matchers.
+
+[![made-with-python](https://img.shields.io/badge/Made%20with-Python-1f425f.svg)](https://www.python.org/)
+[![Continuous Integration](https://github.com/brunns/mbtest/workflows/Continuous%20Integration/badge.svg)](https://github.com/brunns/mbtest/actions)
+[![Python Versions](https://img.shields.io/pypi/pyversions/mbtest.svg?logo=python)](https://pypi.org/project/mbtest/)
+[![Licence](https://img.shields.io/github/license/brunns/mbtest.svg)](https://github.com/brunns/mbtest/blob/master/LICENSE)
+[![GitHub all releases](https://img.shields.io/github/downloads/brunns/mbtest/total.svg?logo=github)](https://github.com/brunns/mbtest/releases/)
+[![GitHub forks](https://img.shields.io/github/forks/brunns/mbtest.svg?label=Fork&logo=github)](https://github.com/brunns/mbtest/network/members)
+[![GitHub stars](https://img.shields.io/github/stars/brunns/mbtest.svg?label=Star&logo=github)](https://github.com/brunns/mbtest/stargazers/)
+[![GitHub watchers](https://img.shields.io/github/watchers/brunns/mbtest.svg?label=Watch&logo=github)](https://github.com/brunns/mbtest/watchers/)
+[![GitHub contributors](https://img.shields.io/github/contributors/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/graphs/contributors/)
+[![GitHub issues](https://img.shields.io/github/issues/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/issues/)
+[![GitHub issues-closed](https://img.shields.io/github/issues-closed/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/issues?q=is%3Aissue+is%3Aclosed)
+[![GitHub pull-requests](https://img.shields.io/github/issues-pr/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/pulls)
+[![GitHub pull-requests closed](https://img.shields.io/github/issues-pr-closed/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aclosed)
+[![Codacy Badge](https://api.codacy.com/project/badge/Grade/3b7c694664974d17a34e594c43af0c1b)](https://www.codacy.com/app/brunns/mbtest)
+[![Codacy Coverage](https://api.codacy.com/project/badge/coverage/3b7c694664974d17a34e594c43af0c1b)](https://www.codacy.com/app/brunns/mbtest)
+[![Documentation Status](https://readthedocs.org/projects/mbtest/badge/?version=latest)](https://mbtest.readthedocs.io/en/latest/?badge=latest)
+[![Lines of Code](https://tokei.rs/b1/github/brunns/mbtest)](https://github.com/brunns/mbtest)
+
+
+## Setup
+
+Install with pip:
+
+ pip install mbtest
+
+(As usual, use of a [venv](https://docs.python.org/3/library/venv.html) or [virtualenv](https://virtualenv.pypa.io) is recommended.) Also requires [Mountebank](http://www.mbtest.org/) to have been installed:
+
+ npm install mountebank@2.8 --omit=dev
+
+(Alternatively, you can attach to an instance of Mountebank running elsewhere, perhaps [in docker](https://mbtest.readthedocs.io/en/latest/guide/docker.html).)
+
+## Basic example
+
+```python
+import requests
+from hamcrest import assert_that
+from brunns.matchers.response import is_response
+from mbtest.matchers import had_request
+from mbtest.imposters import Imposter, Predicate, Response, Stub
+
+def test_request_to_mock_server(mock_server):
+ # Set up mock server with required behavior
+ imposter = Imposter(Stub(Predicate(path="/test"),
+ Response(body="sausages")))
+
+ with mock_server(imposter):
+ # Make request to mock server - exercise code under test here
+ response = requests.get(f"{imposter.url}/test")
+
+ assert_that("We got the expected response",
+ response, is_response().with_status_code(200).and_body("sausages"))
+ assert_that("The mock server recorded the request",
+ imposter, had_request().with_path("/test").and_method("GET"))
+```
+
+Needs a [pytest fixture](https://docs.pytest.org/en/latest/fixture.html), most easily defined in [`conftest.py`](https://docs.pytest.org/en/latest/how-to/fixtures.html#scope-sharing-fixtures-across-classes-modules-packages-or-session):
+
+```python
+import pytest
+from mbtest import server
+
+@pytest.fixture(scope="session")
+def mock_server(request):
+ return server.mock_server(request)
+```
+
+This will take care of starting and stopping the Mountebank server for you. Examples of more complex predicates can be
+found in the [integration tests](https://github.com/brunns/mbtest/tree/master/tests/integration/).
+
+See the [Documentation](https://mbtest.readthedocs.io/) for more.
+
+
+## Contributing
+
+Requires [make](https://www.gnu.org/software/make/manual/html_node/index.html) and [tox](https://tox.readthedocs.io).
+[PyEnv](https://github.com/pyenv/pyenv) may also come in handy so tests can be run against various Python versions.
+
+Integration tests run against an instance of Mountebank running in Docker.
+
+Currently, the `Makefile` targets use Python 3.8 and 3.11 via tox, so a quick-start setup could be:
+
+```sh
+brew install pyenv colima docker
+versions=(3.7 3.11)
+for v in "${versions[@]}"; do pyenv install $v -s; done
+pyenv local 3.11 3.7
+pip install tox tox-pyenv
+colima start
+```
+
+In order to run `make test`, you'll also need to have Mountebank installed locally:
+
+```sh
+npm install mountebank@2.6 --production
+```
+
+(`mbtest` is tested against Mountebank versions back as far as 1.16, but obviously only features supported by the Mountebank version you're using will work.)
+
+After that, you should be ready to roll; running `make test` will let you know if your setup is correct.
+
+Running `make precommit` tells you if you're OK to commit. For more options, run:
+
+ make help
+
+## Releasing
+
+Requires [hub](https://hub.github.com/), [setuptools](https://setuptools.readthedocs.io),
+[wheel](https://github.com/pypa/wheel) and [twine](https://twine.readthedocs.io). To release version `n.n.n`, first
+update the version number in `setup.py`, then:
+
+```sh
+version="n.n.n" # Needs to match new version number in setup.py.
+git checkout -b "release-$version"
+make precommit && git commit -am"Release $version" && git push --set-upstream origin "release-$version" # If not already all pushed, which it should be.
+hub release create "V$version" -t"release-$version" -m"Version $version"
+python setup.py sdist bdist_wheel
+twine upload dist/*$version*
+git checkout master
+git merge "release-$version"
+git push
+```
+
+
+%package help
+Summary: Development documents and examples for mbtest
+Provides: python3-mbtest-doc
+%description help
+# mbtest
+
+Opinionated Python wrapper & utils for the [Mountebank](https://www.mbtest.org/) over the wire test double tool.
+
+Includes [pytest](https://pytest.org) fixture and [PyHamcrest](https://pyhamcrest.readthedocs.io) matchers.
+
+[![made-with-python](https://img.shields.io/badge/Made%20with-Python-1f425f.svg)](https://www.python.org/)
+[![Continuous Integration](https://github.com/brunns/mbtest/workflows/Continuous%20Integration/badge.svg)](https://github.com/brunns/mbtest/actions)
+[![Python Versions](https://img.shields.io/pypi/pyversions/mbtest.svg?logo=python)](https://pypi.org/project/mbtest/)
+[![Licence](https://img.shields.io/github/license/brunns/mbtest.svg)](https://github.com/brunns/mbtest/blob/master/LICENSE)
+[![GitHub all releases](https://img.shields.io/github/downloads/brunns/mbtest/total.svg?logo=github)](https://github.com/brunns/mbtest/releases/)
+[![GitHub forks](https://img.shields.io/github/forks/brunns/mbtest.svg?label=Fork&logo=github)](https://github.com/brunns/mbtest/network/members)
+[![GitHub stars](https://img.shields.io/github/stars/brunns/mbtest.svg?label=Star&logo=github)](https://github.com/brunns/mbtest/stargazers/)
+[![GitHub watchers](https://img.shields.io/github/watchers/brunns/mbtest.svg?label=Watch&logo=github)](https://github.com/brunns/mbtest/watchers/)
+[![GitHub contributors](https://img.shields.io/github/contributors/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/graphs/contributors/)
+[![GitHub issues](https://img.shields.io/github/issues/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/issues/)
+[![GitHub issues-closed](https://img.shields.io/github/issues-closed/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/issues?q=is%3Aissue+is%3Aclosed)
+[![GitHub pull-requests](https://img.shields.io/github/issues-pr/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/pulls)
+[![GitHub pull-requests closed](https://img.shields.io/github/issues-pr-closed/brunns/mbtest.svg?logo=github)](https://github.com/brunns/mbtest/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aclosed)
+[![Codacy Badge](https://api.codacy.com/project/badge/Grade/3b7c694664974d17a34e594c43af0c1b)](https://www.codacy.com/app/brunns/mbtest)
+[![Codacy Coverage](https://api.codacy.com/project/badge/coverage/3b7c694664974d17a34e594c43af0c1b)](https://www.codacy.com/app/brunns/mbtest)
+[![Documentation Status](https://readthedocs.org/projects/mbtest/badge/?version=latest)](https://mbtest.readthedocs.io/en/latest/?badge=latest)
+[![Lines of Code](https://tokei.rs/b1/github/brunns/mbtest)](https://github.com/brunns/mbtest)
+
+
+## Setup
+
+Install with pip:
+
+ pip install mbtest
+
+(As usual, use of a [venv](https://docs.python.org/3/library/venv.html) or [virtualenv](https://virtualenv.pypa.io) is recommended.) Also requires [Mountebank](http://www.mbtest.org/) to have been installed:
+
+ npm install mountebank@2.8 --omit=dev
+
+(Alternatively, you can attach to an instance of Mountebank running elsewhere, perhaps [in docker](https://mbtest.readthedocs.io/en/latest/guide/docker.html).)
+
+## Basic example
+
+```python
+import requests
+from hamcrest import assert_that
+from brunns.matchers.response import is_response
+from mbtest.matchers import had_request
+from mbtest.imposters import Imposter, Predicate, Response, Stub
+
+def test_request_to_mock_server(mock_server):
+ # Set up mock server with required behavior
+ imposter = Imposter(Stub(Predicate(path="/test"),
+ Response(body="sausages")))
+
+ with mock_server(imposter):
+ # Make request to mock server - exercise code under test here
+ response = requests.get(f"{imposter.url}/test")
+
+ assert_that("We got the expected response",
+ response, is_response().with_status_code(200).and_body("sausages"))
+ assert_that("The mock server recorded the request",
+ imposter, had_request().with_path("/test").and_method("GET"))
+```
+
+Needs a [pytest fixture](https://docs.pytest.org/en/latest/fixture.html), most easily defined in [`conftest.py`](https://docs.pytest.org/en/latest/how-to/fixtures.html#scope-sharing-fixtures-across-classes-modules-packages-or-session):
+
+```python
+import pytest
+from mbtest import server
+
+@pytest.fixture(scope="session")
+def mock_server(request):
+ return server.mock_server(request)
+```
+
+This will take care of starting and stopping the Mountebank server for you. Examples of more complex predicates can be
+found in the [integration tests](https://github.com/brunns/mbtest/tree/master/tests/integration/).
+
+See the [Documentation](https://mbtest.readthedocs.io/) for more.
+
+
+## Contributing
+
+Requires [make](https://www.gnu.org/software/make/manual/html_node/index.html) and [tox](https://tox.readthedocs.io).
+[PyEnv](https://github.com/pyenv/pyenv) may also come in handy so tests can be run against various Python versions.
+
+Integration tests run against an instance of Mountebank running in Docker.
+
+Currently, the `Makefile` targets use Python 3.8 and 3.11 via tox, so a quick-start setup could be:
+
+```sh
+brew install pyenv colima docker
+versions=(3.7 3.11)
+for v in "${versions[@]}"; do pyenv install $v -s; done
+pyenv local 3.11 3.7
+pip install tox tox-pyenv
+colima start
+```
+
+In order to run `make test`, you'll also need to have Mountebank installed locally:
+
+```sh
+npm install mountebank@2.6 --production
+```
+
+(`mbtest` is tested against Mountebank versions back as far as 1.16, but obviously only features supported by the Mountebank version you're using will work.)
+
+After that, you should be ready to roll; running `make test` will let you know if your setup is correct.
+
+Running `make precommit` tells you if you're OK to commit. For more options, run:
+
+ make help
+
+## Releasing
+
+Requires [hub](https://hub.github.com/), [setuptools](https://setuptools.readthedocs.io),
+[wheel](https://github.com/pypa/wheel) and [twine](https://twine.readthedocs.io). To release version `n.n.n`, first
+update the version number in `setup.py`, then:
+
+```sh
+version="n.n.n" # Needs to match new version number in setup.py.
+git checkout -b "release-$version"
+make precommit && git commit -am"Release $version" && git push --set-upstream origin "release-$version" # If not already all pushed, which it should be.
+hub release create "V$version" -t"release-$version" -m"Version $version"
+python setup.py sdist bdist_wheel
+twine upload dist/*$version*
+git checkout master
+git merge "release-$version"
+git push
+```
+
+
+%prep
+%autosetup -n mbtest-2.11.0
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-mbtest -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Wed May 10 2023 Python_Bot <Python_Bot@openeuler.org> - 2.11.0-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..5ccd87b
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+314dd963b816c533797108b5bcc05a65 mbtest-2.11.0.tar.gz