From 37f28b7fddb228e648658f10e76d8492157ebf41 Mon Sep 17 00:00:00 2001 From: Rob Harrison Date: Thu, 27 Jun 2019 15:48:35 +0100 Subject: [PATCH] Added example test import and export --- postgres-backup-s3/Dockerfile | 1 + postgres-backup-s3/config/sample_sql_file.sql | 118 ++++++++++++++++++ postgres-backup-s3/integration-tests.sh | 65 ++++++++++ postgres-backup-s3/integration-tests.test.yml | 3 + 4 files changed, 187 insertions(+) create mode 100644 postgres-backup-s3/config/sample_sql_file.sql diff --git a/postgres-backup-s3/Dockerfile b/postgres-backup-s3/Dockerfile index 2c44b23..1be5bac 100644 --- a/postgres-backup-s3/Dockerfile +++ b/postgres-backup-s3/Dockerfile @@ -22,5 +22,6 @@ ENV SCHEDULE **None** ADD run.sh run.sh ADD backup.sh backup.sh ADD integration-tests.sh integration-tests.sh +ADD config/sample_sql_file.sql sample_sql_file.sql CMD ["sh", "run.sh"] diff --git a/postgres-backup-s3/config/sample_sql_file.sql b/postgres-backup-s3/config/sample_sql_file.sql new file mode 100644 index 0000000..3bb03ad --- /dev/null +++ b/postgres-backup-s3/config/sample_sql_file.sql @@ -0,0 +1,118 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 9.6.13 +-- Dumped by pg_dump version 10.8 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; + + +-- +-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; + + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- Name: user_details; Type: TABLE; Schema: public; Owner: user +-- + +CREATE TABLE public.user_details ( + user_id integer NOT NULL, + username character varying(255) DEFAULT NULL::character varying, + first_name character varying(50) DEFAULT NULL::character varying, + last_name character varying(50) DEFAULT NULL::character varying, + gender character varying(10) DEFAULT NULL::character varying, + password character varying(50) DEFAULT NULL::character varying, + status integer +); + + +ALTER TABLE public.user_details OWNER TO "user"; + +-- +-- Name: user_details_user_id_seq; Type: SEQUENCE; Schema: public; Owner: user +-- + +CREATE SEQUENCE public.user_details_user_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.user_details_user_id_seq OWNER TO "user"; + +-- +-- Name: user_details_user_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: user +-- + +ALTER SEQUENCE public.user_details_user_id_seq OWNED BY public.user_details.user_id; + + +-- +-- Name: user_details user_id; Type: DEFAULT; Schema: public; Owner: user +-- + +ALTER TABLE ONLY public.user_details ALTER COLUMN user_id SET DEFAULT nextval('public.user_details_user_id_seq'::regclass); + + +-- +-- Data for Name: user_details; Type: TABLE DATA; Schema: public; Owner: user +-- + +COPY public.user_details (user_id, username, first_name, last_name, gender, password, status) FROM stdin; +1 rogers63 david john Female asdfa 1 +2 mike28 rogers paul Male afda 1 +3 rivera92 david john Male asdf 1 +4 ross95 maria sanders Male asdf 1 +5 paul85 morris miller Female asdf 1 +6 smith34 daniel michael Female sa 1 +7 james84 sanders paul Female fds 1 +8 daniel53 mark mike Male sdfa 1 +9 brooks80 morgan maria Female fasdf 1 +10 morgan65 paul miller Female fdsa 1 +\. + + +-- +-- Name: user_details_user_id_seq; Type: SEQUENCE SET; Schema: public; Owner: user +-- + +SELECT pg_catalog.setval('public.user_details_user_id_seq', 1, false); + + +-- +-- Name: user_details user_details_pkey; Type: CONSTRAINT; Schema: public; Owner: user +-- + +ALTER TABLE ONLY public.user_details + ADD CONSTRAINT user_details_pkey PRIMARY KEY (user_id); + + +-- +-- PostgreSQL database dump complete +-- + diff --git a/postgres-backup-s3/integration-tests.sh b/postgres-backup-s3/integration-tests.sh index 388abd4..7039bc9 100644 --- a/postgres-backup-s3/integration-tests.sh +++ b/postgres-backup-s3/integration-tests.sh @@ -2,4 +2,69 @@ set -e +RETRIES=60 + +until psql -h postgres -U user -c "select 1" > /dev/null 2>&1 || [ $RETRIES -eq 0 ]; do + echo "Waiting for postgres server, $((RETRIES--)) remaining attempts..." + sleep 3 +done + +OUT=$(psql -h postgres -U user -v ON_ERROR_STOP=1 -1 -f sample_sql_file.sql) + +EXPECTED="SET +SET +SET +SET +SET + set_config +------------ + +(1 row) + +SET +SET +SET +SET +CREATE EXTENSION +COMMENT +SET +SET +CREATE TABLE +ALTER TABLE +CREATE SEQUENCE +ALTER TABLE +ALTER SEQUENCE +ALTER TABLE +COPY 10 + setval +-------- + 1 +(1 row) + +ALTER TABLE" + +if [ "$OUT" != "$EXPECTED" ]; then + echo "OUT = '$OUT'" + echo "Not '$EXPECTED'" + exit 1 +fi + +pg_dump -h postgres -U user > sample_output.sql + +DIFF=$(diff sample_sql_file.sql sample_output.sql) + +if [ "$DIFF" != "" ]; then + echo "Expected output from diff was ''" + echo "Actual output was '$DIFF'" + exit 1 +fi + +# apt-get update && apt-get install -y wget + +# wget "https://sample-videos.com/sql/Sample-SQL-File-10rows.sql" + + +# echo "Cleaning Up..." +# rm Sample-SQL-File-10rows.sql echo "This worked ok" + diff --git a/postgres-backup-s3/integration-tests.test.yml b/postgres-backup-s3/integration-tests.test.yml index 32ccd69..841454a 100644 --- a/postgres-backup-s3/integration-tests.test.yml +++ b/postgres-backup-s3/integration-tests.test.yml @@ -5,8 +5,11 @@ services: environment: - POSTGRES_PASSWORD=12345 - POSTGRES_USER=user + - PGDATA=/var/lib/postgresql/data/pgdata sut: build: . command: 'sh integration-tests.sh' + environment: + - PGPASSWORD=12345 depends_on: - postgres