From 303ab1480ef465f1ed1d46cef1b193e1356e4d22 Mon Sep 17 00:00:00 2001 From: c0llab0rat0r <78339685+c0llab0rat0r@users.noreply.github.com> Date: Sat, 10 Apr 2021 13:56:51 -0500 Subject: [PATCH] * Update docs on how to run tests * Use Docker to support running functional tests from IDE --- README.md | 13 ++++++------ tools/ipfs/Dockerfile | 7 +++++++ tools/ipfs/README.md | 43 ++++++++++++++++++++++++++++++++++++++++ tools/ipfs/daemon.sh | 9 +++++++++ tools/ipfs/entrypoint.sh | 15 ++++++++++++++ 5 files changed, 80 insertions(+), 7 deletions(-) create mode 100644 tools/ipfs/Dockerfile create mode 100644 tools/ipfs/README.md create mode 100755 tools/ipfs/daemon.sh create mode 100755 tools/ipfs/entrypoint.sh diff --git a/README.md b/README.md index 80b6f55f..281816d5 100644 --- a/README.md +++ b/README.md @@ -208,10 +208,8 @@ You can submit bug reports using the ### Setting up a local development environment - 1. Follow the instructions in the IPFS documentation to install go-IPFS into your `${PATH}`: - https://docs.ipfs.io/install/command-line/ - 2. Follow the instructions in the (Python) tox documentation to install the `tox` Python environment runner: - https://tox.readthedocs.io/en/latest/install.html + 1. [Install tox](https://tox.readthedocs.io/en/latest/install.html) + 2. [Install a local IPFS server](tools/ipfs/README.md): 3. Clone the GIT repository if you haven't already: `git clone https://github.com/ipfs-shipyard/py-ipfs-http-client.git` @@ -235,15 +233,16 @@ make sure that your code passes both the $ tox -e styleck -e typeck -As well as the unit tests: +As well as the tests: $ tox -e py3 -e py3-httpx If you are unsure, don't hesitate to just submit your code, and a human will take a look. 🙂 -If you can, Please make sure to include new unit tests for new features or -changes in behavior. We aim to bring coverage to 100% at some point. +Please make sure to include new unit tests for new features or +changes in behavior. + #### Installing the pre-commit Hook diff --git a/tools/ipfs/Dockerfile b/tools/ipfs/Dockerfile new file mode 100644 index 00000000..34b6ed42 --- /dev/null +++ b/tools/ipfs/Dockerfile @@ -0,0 +1,7 @@ +FROM ipfs/go-ipfs:v0.8.0 + +RUN sed -i 's/exec ipfs "$@"//' /usr/local/bin/start_ipfs +ADD entrypoint.sh / + +ENTRYPOINT ["/entrypoint.sh"] +CMD ["ipfs", "daemon", "--migrate=true", "--enable-namesys-pubsub"] diff --git a/tools/ipfs/README.md b/tools/ipfs/README.md new file mode 100644 index 00000000..f96d9cd4 --- /dev/null +++ b/tools/ipfs/README.md @@ -0,0 +1,43 @@ + +# Running Tests + +Tests are primarily run from the command line using a locally installed IPFS server. + +Alternatively, you can launch the IPFS daemon with Docker and run tests from your IDE. + + +## Local IPFS Server Installation + +To install it, follow the [official instructions](https://docs.ipfs.io/install/command-line/). + +Remaining configuration is applied by [run_tests.py](../../test/run-tests.py) on each run. + + +## Running Tests Using Local Installation From Command Line + +* `tox -e py3` +* `tox -e py3-httpx` + + +## Running Tests Using Docker from IDE (e.g. PyCharm) + +1. Start [daemon.sh](daemon.sh) +2. Run `pytest` tests from your IDE as your normally would + +You can keep the Docker container running across multiple +executions of the functional test suite. + + +## Running Tests Without Live Server + +You can run unit tests without a live server; `pytest` will skip +over the functional tests when our fixtures detect the server +isn't running. + + +## pytest-docker Plugin + +While `pytest-docker` supports running functional tests against a +Docker container using Docker Compose, it is not supported on +Windows or Mac with Travis and IPFS. + diff --git a/tools/ipfs/daemon.sh b/tools/ipfs/daemon.sh new file mode 100755 index 00000000..b05c2cf1 --- /dev/null +++ b/tools/ipfs/daemon.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -e + +tag=py-ipfs-http-client-daemon:latest + +docker build -t $tag . +docker run --rm -p 4001:4001 -p 5001:5001 -p 8080:8080 $tag + diff --git a/tools/ipfs/entrypoint.sh b/tools/ipfs/entrypoint.sh new file mode 100755 index 00000000..52caa3f4 --- /dev/null +++ b/tools/ipfs/entrypoint.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e + +# Only does configuration; doesn't start the daemon +/usr/local/bin/start_ipfs + +echo "Enabling experimental features" + +ipfs config --json Experimental.FilestoreEnabled true + +echo "Enabled experimental features" + +# Start the daemon (unless other args provided) +exec "$@"