pgloader/test/Makefile
Dimitri Fontaine 150d288d7a Improve our regression testing facility.
Next parallelism improvements will allow pgloader to use more than one
COPY thread to load data, with the impact of changing the order of rows
in the database.

Rather than doing a copy out and `diff` of the data just loaded, load
the reference data and do the diff in SQL:

          select * from loaded.data
  except
          select * from expected.data

If such a query returns any row, we know we didn't load what was
expected and the regression test is failing.

This regression testing facility should also allow us to finally add
support for multiple-table regression tests (sqlite, mysql, etc).
2015-11-17 17:03:08 +01:00

100 lines
2.6 KiB
Makefile

TMPDIR ?= /tmp
TESTS = $(wildcard *.load)
OUT = $(TESTS:.load=.out)
REMOTE = archive.load bossa-all.load bossa.load census-places.load dbf-zip.load
LOCAL = $(filter-out $(REMOTE:.load=.out),$(OUT))
REGRESS= allcols.load \
csv-before-after.load \
csv-districts.load \
csv-parse-date.load \
csv-error.load \
csv-escape-mode.load \
csv-filename-pattern.load \
csv-header.load \
csv-json.load \
csv-keep-extra-blanks.load \
csv-non-printable.load \
csv-nulls.load \
csv-temp.load \
csv-trim-extra-blanks.load \
csv.load \
copy.load \
copy-hex.load \
dbf.load \
errors.load \
fixed.load \
fields-with-periods.load \
ixf.load \
overflow.load \
partial.load \
serial.load \
udc.load \
xzero.load
PGLOADER ?= ../build/bin/pgloader
regress: clean-out $(addprefix regress/out/, $(REGRESS:.load=.out)) ;
clean-out:
rm -f regress/out/*
local: prepare $(LOCAL)
remote: prepare $(REMOTE:.load=.out)
all: prepare $(OUT)
prepare: bossa.sql sakila
-dropdb -U postgres pgloader
-dropdb -U postgres stocks
-dropdb -U postgres ip4r
-createdb -U postgres -O `whoami` pgloader
-createdb -U postgres -O `whoami` stocks
-createdb -U postgres -O `whoami` ip4r
-psql -d pgloader -c 'create schema expected'
-psql -U postgres -d pgloader -c 'create extension ip4r'
-psql -U postgres -d ip4r -c 'create extension ip4r'
-psql -d stocks -f bossa.sql
errors.out: errors.load
-$(PGLOADER) $<
@echo
nofile.out: nofile.load
-$(PGLOADER) $<
@echo
csv-hstore.out: csv-hstore.load
@echo skipping $@
# sakila needs preparing a MySQL database too
$(TMPDIR)/sakila-db/sakila-schema.sql: data/sakila-db.zip
rm -rf $(TMPDIR)/sakila-db
unzip $< -d $(TMPDIR)
sakila: $(TMPDIR)/sakila-db/sakila-schema.sql
-dropdb -U postgres sakila
-createdb -U postgres -O `whoami` sakila
-echo "DROP DATABASE sakila" | mysql -u root
echo "SOURCE $(TMPDIR)/sakila-db/sakila-schema.sql" | mysql -u root
echo "SOURCE $(TMPDIR)/sakila-db/sakila-data.sql" | mysql -u root
sakila.out: sakila sakila.load
-$(PGLOADER) sakila.load
@echo
csv-districts-stdin.out: csv-districts-stdin.load
cat data/2013_Gaz_113CDs_national.txt | $(PGLOADER) $^
# General case where we do NOT expect any error
%.out: %.load
$(PGLOADER) $<
@echo
# Regression tests
regress/out/%.out: %.load
#./regress.sh $(PGLOADER) $<
$(PGLOADER) --regress $<
touch $@