diff mbox

[6/7] Enable tox tests in Docker

Message ID 1470097486-15269-7-git-send-email-dja@axtens.net
State Superseded
Headers show

Commit Message

Daniel Axtens Aug. 2, 2016, 12:24 a.m. UTC
* Install the python2 dev packages. Update the readme to tell
   people we now download > 200MB of packages, not ~ 200MB.

 * Update the tox.ini file:

    * python3.4 -> python3.5 as that's what's shipped with Ubuntu 16.04
    * Drop Django 1.6, it's not supported by django-request-framework
    * Drop Django 1.7, it seems to break with sqlparse

   If any of these changes are controversial I'm happy to revisit them.
   Also:

    * Pass in the new environment variables for db host and port.
    * Pass in DISPLAY, XAUTHORITY and HOME to fix seleinum tests.

 * Update the entrypoint script to allow you to do --tox and
   --quick-tox in the same way as --test and --quick-test.
   Update the readme appropriately.

Signed-off-by: Daniel Axtens <dja@axtens.net>
---
 README.md            | 4 +++-
 docker/Dockerfile    | 3 ++-
 docker/entrypoint.sh | 7 +++++++
 tox.ini              | 9 ++++-----
 4 files changed, 16 insertions(+), 7 deletions(-)

Comments

Daniel Axtens Aug. 2, 2016, 3:46 a.m. UTC | #1
Daniel Axtens <dja@axtens.net> writes:

>  * Install the python2 dev packages. Update the readme to tell
>    people we now download > 200MB of packages, not ~ 200MB.
>
>  * Update the tox.ini file:
>
>     * python3.4 -> python3.5 as that's what's shipped with Ubuntu 16.04
>     * Drop Django 1.6, it's not supported by django-request-framework
That should be django-rest-framework.

I'd like to revise this patch anyway; it seems d-r-f should be pluggable
so we should be able to test on 1.6 without it.

Apparently 1.6 is also shipped with RHEL7.2 so supporting it is important.

>     * Drop Django 1.7, it seems to break with sqlparse
And if we're supporting 1.6 we should probably support 1.7 so I'll chase
this down.

Regards,
Daniel

>
>    If any of these changes are controversial I'm happy to revisit them.
>    Also:
>
>     * Pass in the new environment variables for db host and port.
>     * Pass in DISPLAY, XAUTHORITY and HOME to fix seleinum tests.
>
>  * Update the entrypoint script to allow you to do --tox and
>    --quick-tox in the same way as --test and --quick-test.
>    Update the readme appropriately.
>
> Signed-off-by: Daniel Axtens <dja@axtens.net>
> ---
>  README.md            | 4 +++-
>  docker/Dockerfile    | 3 ++-
>  docker/entrypoint.sh | 7 +++++++
>  tox.ini              | 9 ++++-----
>  4 files changed, 16 insertions(+), 7 deletions(-)
>
> diff --git a/README.md b/README.md
> index 6f889c09def0..ca212bc6d707 100644
> --- a/README.md
> +++ b/README.md
> @@ -36,7 +36,7 @@ of community projects.
>  
>  1. Install Docker and docker-compose.
>  2. Clone this repo, as with vagrant.
> -3. Build the images. This will download ~200MB from the internet:
> +3. Build the images. (This will download over 200MB from the internet.)
>  
>          $ docker-compose build
>  
> @@ -60,6 +60,8 @@ of community projects.
>  
>            $ docker-compose run --rm web --test
>  
> +  * Tox tests can be run with `--quick-tox` and `--tox`.
> +
>    * To reset the database before beginning, add `--reset` to the command line after `web` and before any other arguments.
>  
>    * If you want to run non-headless tests, you'll need something like this ugly hack:
> diff --git a/docker/Dockerfile b/docker/Dockerfile
> index 507e6c843fe2..365becd107ca 100644
> --- a/docker/Dockerfile
> +++ b/docker/Dockerfile
> @@ -20,7 +20,8 @@ COPY docker/google-chrome.list /etc/apt/sources.list.d/
>  # to install succesfully
>  RUN apt-get update -qq && \
>      apt-get install -y --allow-unauthenticated --no-install-recommends \
> -    python python3-dev python3-pip python3-setuptools python3-wheel \
> +    python-dev python-pip python-setuptools python-wheel \
> +    python3-dev python3-pip python3-setuptools python3-wheel \
>      libmysqlclient-dev mysql-client curl unzip xvfb google-chrome-stable \
>      hicolor-icon-theme build-essential && \
>      curl http://chromedriver.storage.googleapis.com/$chromedriver_version/chromedriver_linux64.zip -o /tmp/chromedriver.zip && \
> diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh
> index 7a42165455b1..15b8dceee2a5 100755
> --- a/docker/entrypoint.sh
> +++ b/docker/entrypoint.sh
> @@ -71,6 +71,13 @@ elif [ "$1" == "--quick-test" ]; then
>      python3 manage.py test
>  elif [ "$1" == "--test" ]; then
>      xvfb-run --server-args='-screen 0, 1024x768x16' python3 manage.py test
> +elif [ "$1" == "--quick-tox" ]; then
> +    shift
> +    export PW_SKIP_BROWSER_TESTS=yes
> +    tox $@
> +elif [ "$1" == "--tox" ]; then
> +    shift
> +    xvfb-run --server-args='-screen 0, 1024x768x16' tox $@
>  else # run whatever CMD is set to
>      $@
>  fi
> diff --git a/tox.ini b/tox.ini
> index d1703251a197..4050d1f8e7b9 100644
> --- a/tox.ini
> +++ b/tox.ini
> @@ -1,21 +1,20 @@
>  [tox]
>  minversion = 2.0
> -envlist = py{27,34}-django{16,17,18,19}
> +envlist = py{27,35}-django{18,19}
>  skipsdist = True
>  
>  [testenv]
>  deps =
>      -r{toxinidir}/requirements-test.txt
> -    django16: django>=1.6,<1.7
> -    django17: django>=1.7,<1.8
>      django18: django>=1.8,<1.9
>      django19: django>=1.9,<1.10
>  setenv =
>      DJANGO_SETTINGS_MODULE = patchwork.settings.dev
>  passenv =
>      http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY
> -    PW_TEST_DB_TYPE PW_TEST_DB_USER PW_TEST_DB_PASS
> -    DISPLAY SELENIUM_BROWSER PW_SKIP_BROWSER_TESTS
> +    PW_TEST_DB_TYPE PW_TEST_DB_USER PW_TEST_DB_PASS PW_TEST_DB_HOST
> +    PW_TEST_DB_PORT DISPLAY SELENIUM_BROWSER PW_SKIP_BROWSER_TESTS
> +    DISPLAY HOME XAUTHORITY
>  commands =
>      {toxinidir}/manage.py test --noinput --liveserver=localhost:9000-9200 \
>          '{posargs:patchwork}'
> -- 
> 2.7.4
diff mbox

Patch

diff --git a/README.md b/README.md
index 6f889c09def0..ca212bc6d707 100644
--- a/README.md
+++ b/README.md
@@ -36,7 +36,7 @@  of community projects.
 
 1. Install Docker and docker-compose.
 2. Clone this repo, as with vagrant.
-3. Build the images. This will download ~200MB from the internet:
+3. Build the images. (This will download over 200MB from the internet.)
 
         $ docker-compose build
 
@@ -60,6 +60,8 @@  of community projects.
 
           $ docker-compose run --rm web --test
 
+  * Tox tests can be run with `--quick-tox` and `--tox`.
+
   * To reset the database before beginning, add `--reset` to the command line after `web` and before any other arguments.
 
   * If you want to run non-headless tests, you'll need something like this ugly hack:
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 507e6c843fe2..365becd107ca 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -20,7 +20,8 @@  COPY docker/google-chrome.list /etc/apt/sources.list.d/
 # to install succesfully
 RUN apt-get update -qq && \
     apt-get install -y --allow-unauthenticated --no-install-recommends \
-    python python3-dev python3-pip python3-setuptools python3-wheel \
+    python-dev python-pip python-setuptools python-wheel \
+    python3-dev python3-pip python3-setuptools python3-wheel \
     libmysqlclient-dev mysql-client curl unzip xvfb google-chrome-stable \
     hicolor-icon-theme build-essential && \
     curl http://chromedriver.storage.googleapis.com/$chromedriver_version/chromedriver_linux64.zip -o /tmp/chromedriver.zip && \
diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh
index 7a42165455b1..15b8dceee2a5 100755
--- a/docker/entrypoint.sh
+++ b/docker/entrypoint.sh
@@ -71,6 +71,13 @@  elif [ "$1" == "--quick-test" ]; then
     python3 manage.py test
 elif [ "$1" == "--test" ]; then
     xvfb-run --server-args='-screen 0, 1024x768x16' python3 manage.py test
+elif [ "$1" == "--quick-tox" ]; then
+    shift
+    export PW_SKIP_BROWSER_TESTS=yes
+    tox $@
+elif [ "$1" == "--tox" ]; then
+    shift
+    xvfb-run --server-args='-screen 0, 1024x768x16' tox $@
 else # run whatever CMD is set to
     $@
 fi
diff --git a/tox.ini b/tox.ini
index d1703251a197..4050d1f8e7b9 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,21 +1,20 @@ 
 [tox]
 minversion = 2.0
-envlist = py{27,34}-django{16,17,18,19}
+envlist = py{27,35}-django{18,19}
 skipsdist = True
 
 [testenv]
 deps =
     -r{toxinidir}/requirements-test.txt
-    django16: django>=1.6,<1.7
-    django17: django>=1.7,<1.8
     django18: django>=1.8,<1.9
     django19: django>=1.9,<1.10
 setenv =
     DJANGO_SETTINGS_MODULE = patchwork.settings.dev
 passenv =
     http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY
-    PW_TEST_DB_TYPE PW_TEST_DB_USER PW_TEST_DB_PASS
-    DISPLAY SELENIUM_BROWSER PW_SKIP_BROWSER_TESTS
+    PW_TEST_DB_TYPE PW_TEST_DB_USER PW_TEST_DB_PASS PW_TEST_DB_HOST
+    PW_TEST_DB_PORT DISPLAY SELENIUM_BROWSER PW_SKIP_BROWSER_TESTS
+    DISPLAY HOME XAUTHORITY
 commands =
     {toxinidir}/manage.py test --noinput --liveserver=localhost:9000-9200 \
         '{posargs:patchwork}'