From 9b012dfe00497c53fdd8a6fffb0f7164f0eb8991 Mon Sep 17 00:00:00 2001 From: Maksim Ekimovskii Date: Sun, 20 Sep 2015 15:41:37 +0800 Subject: [PATCH] Added multi-test environment for travis: postgres 9.0 tests, updated travis config, updated current docker configs --- .travis.yml | 13 +++++++++++-- README.md | 9 +++++++-- compose/common.yml | 7 ++----- docker-compose.yml | 23 ++++------------------- pgclient/client.py | 6 ++++++ pgclient/system_test/Dockerfile.pg90 | 10 ++++++++++ 6 files changed, 40 insertions(+), 28 deletions(-) create mode 100644 pgclient/system_test/Dockerfile.pg90 diff --git a/.travis.yml b/.travis.yml index b19a09a..382dbb2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,19 +15,28 @@ before_install: - sudo apt-get update - sudo apt-get install -y python-dev libpq-dev lxc-docker - docker build -t pgclient/system_test pgclient/system_test + - docker build -t pgclient/system_test_pg90 -f pgclient/system_test/Dockerfile.pg90 pgclient/system_test + - sudo service docker restart ; sleep 10 + - docker run --name pgclient_system_test --privileged -d -p "0.0.0.0:15432:5432" -e POSTGRES_PASSWORD=test pgclient/system_test + - docker run --name pgclient_system_test_pg90 --privileged -d -p "0.0.0.0:54390:5432" -e POSTGRES_PASSWORD=test pgclient/system_test_pg90 - sleep 20 - docker ps -a - docker logs pgclient_system_test + - docker logs pgclient_system_test_pg90 - sudo netstat -ntlp install: - - pip install -r requirements.txt - pip install coveralls script: - make system_test + # Run tests on postgres:9.0 + - export POSTGRES_PORT=54390 + - make system_test after_success: - coveralls \ No newline at end of file + - coveralls + - docker stop pgclient_system_test pgclient_system_test_pg90 + - docker rm pgclient_system_test pgclient_system_test_pg90 \ No newline at end of file diff --git a/README.md b/README.md index bc8e126..1c1eea0 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ Safe transactions ----------------- All requests inside `with` context will be executed and automatically committed within one transaction -(or rollbacked in case if database errors) +(or rolled back in case if database errors) with self.pg_client.cursor as transaction: transaction.execute('INSERT INTO users VALUES name="Mark"') @@ -103,12 +103,17 @@ To run integration test you need to install the following: * [Docker compose](https://docs.docker.com/compose/) -**Run system tests:** +**Run system test:** * Run postgresql container: `docker-compose up -d postgresql` * Run system tests: `make system_test` * Stop postgresql container: `docker-compose stop postgresql` +To test with *postgresql:9.0* run `postgresql_90` container with docker compose. + +Both versions are being tested with travis ci. + + Bug tracker =========== diff --git a/compose/common.yml b/compose/common.yml index d153fdf..30f384f 100644 --- a/compose/common.yml +++ b/compose/common.yml @@ -1,8 +1,5 @@ postgresql_common: - build: pgclient/system_test + build: ../pgclient/system_test environment: POSTGRES_PASSWORD: test # Set password for default (postgres) user - PGPASSWORD: test # For using `psql -c ...` without password - - # Override - command: echo "CREATE DATABASE test WITH OWNER postgres;" >> /docker-entrypoint-initdb.d/create_db.sql && /docker-entrypoint.sh \ No newline at end of file + PGPASSWORD: test # For using `psql -c ...` without password \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 2c1ac8a..267c2c6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,27 +6,12 @@ postgresql: file: compose/common.yml service: postgresql_common -# Older verions +# Older versions postgresql_90: - image: postgres:9.0 + container_name: pgclient_system ports: - "0.0.0.0:54390:5432" + dockerfile: Dockerfile.pg90 extends: file: compose/common.yml - service: postgresql_common - -postgresql_91: - image: postgres:9.1 - ports: - - "0.0.0.0:54391:5432" - extends: - file: compose/common.yml - service: postgresql_common - -postgresql_92: - image: postgres:9.2 - ports: - - "0.0.0.0:54392:5432" - extends: - file: compose/common.yml - service: postgresql_common + service: postgresql_common \ No newline at end of file diff --git a/pgclient/client.py b/pgclient/client.py index 664916a..d655c81 100644 --- a/pgclient/client.py +++ b/pgclient/client.py @@ -6,6 +6,9 @@ import psycopg2.extras as pg_extras +__all__ = ['PostgresClient'] + + class PostgresClient(object): def __init__(self, dsn=None, database=None, user=None, password=None, host=None, port=None, pool_size=1): @@ -29,11 +32,14 @@ def acquire_conn(self): """Get new pool connection :return: psycopg2 connection object + :raise: psycopg2.pool.PoolError: when is no available connections """ return self._pool.getconn() def release_conn(self, conn): """Release connection to a pool + Connection will be returned into the pool in a consistent state + (idle transaction will be rolled back, unknown - closed) :param conn: psycopg2 connection object """ diff --git a/pgclient/system_test/Dockerfile.pg90 b/pgclient/system_test/Dockerfile.pg90 new file mode 100644 index 0000000..6ec25d8 --- /dev/null +++ b/pgclient/system_test/Dockerfile.pg90 @@ -0,0 +1,10 @@ +FROM postgres:9.0 +MAINTAINER Maksim Ekimovskii + +# Default user is postgres +# ENV POSTGRES_PASSWORD: test + +# This dir is supported by official postgresql image +# ENV PSQL_ENTRYPOINT /docker-entrypoint-initdb.d + +RUN echo "CREATE DATABASE test WITH OWNER postgres;" >> /docker-entrypoint-initdb.d/create_db.sql \ No newline at end of file