From: Sandro Santilli Date: Thu, 10 Oct 2013 08:29:22 +0000 (+0000) Subject: Create regression tests for pgsql2shp (#2390) X-Git-Tag: 2.2.0rc1~1335 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=41a548c81924d30c8d44b8e1722261091d6c522b;p=postgis Create regression tests for pgsql2shp (#2390) NOTE: only implemented in run_test.pl (not in run_test.sh) git-svn-id: http://svn.osgeo.org/postgis/trunk@12025 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/NEWS b/NEWS index 394f8295f..7c7771abb 100644 --- a/NEWS +++ b/NEWS @@ -19,6 +19,7 @@ PostGIS 2.2.0 variable GDAL_DATA - #2361, Added spatial_index column to raster_columns view - #2397, read encoding info automatically in loader + - #2390, Testsuite for pgsql2shp * Bug Fixes * diff --git a/regress/Makefile.in b/regress/Makefile.in index d975a518f..df62eb23e 100644 --- a/regress/Makefile.in +++ b/regress/Makefile.in @@ -67,6 +67,8 @@ TESTS = \ loader/ReprojectPtsGeog \ loader/Latin1 \ loader/Latin1-implicit \ + dumper/literalsrid \ + dumper/realtable \ binary \ regress \ regress_index \ diff --git a/regress/dumper/literalsrid-post.sql b/regress/dumper/literalsrid-post.sql new file mode 100644 index 000000000..9afb10cbe --- /dev/null +++ b/regress/dumper/literalsrid-post.sql @@ -0,0 +1 @@ +delete from spatial_ref_sys where srid = 1; diff --git a/regress/dumper/literalsrid-pre.sql b/regress/dumper/literalsrid-pre.sql new file mode 100644 index 000000000..d0f6cece7 --- /dev/null +++ b/regress/dumper/literalsrid-pre.sql @@ -0,0 +1 @@ +insert into spatial_ref_sys(srid,srtext) values (1,'fake["srs"],text'); diff --git a/regress/dumper/literalsrid.dmp b/regress/dumper/literalsrid.dmp new file mode 100644 index 000000000..e70ec5108 --- /dev/null +++ b/regress/dumper/literalsrid.dmp @@ -0,0 +1 @@ +SELECT 1 as id, 'SRID=4326;POINT(0 0)'::geometry as g; diff --git a/regress/dumper/literalsrid_expected.dbf b/regress/dumper/literalsrid_expected.dbf new file mode 100644 index 000000000..df11d721a Binary files /dev/null and b/regress/dumper/literalsrid_expected.dbf differ diff --git a/regress/dumper/literalsrid_expected.prj b/regress/dumper/literalsrid_expected.prj new file mode 100644 index 000000000..ab83d5d0e --- /dev/null +++ b/regress/dumper/literalsrid_expected.prj @@ -0,0 +1 @@ +fake["srs"],text \ No newline at end of file diff --git a/regress/dumper/literalsrid_expected.shp b/regress/dumper/literalsrid_expected.shp new file mode 100644 index 000000000..0112cd743 Binary files /dev/null and b/regress/dumper/literalsrid_expected.shp differ diff --git a/regress/dumper/literalsrid_expected.shx b/regress/dumper/literalsrid_expected.shx new file mode 100644 index 000000000..cc0b42ae7 Binary files /dev/null and b/regress/dumper/literalsrid_expected.shx differ diff --git a/regress/dumper/realtable-post.sql b/regress/dumper/realtable-post.sql new file mode 100644 index 000000000..17deeda1e --- /dev/null +++ b/regress/dumper/realtable-post.sql @@ -0,0 +1,2 @@ +drop table c; +delete from spatial_ref_sys where srid = 1; diff --git a/regress/dumper/realtable-pre.sql b/regress/dumper/realtable-pre.sql new file mode 100644 index 000000000..a6d1dcaaa --- /dev/null +++ b/regress/dumper/realtable-pre.sql @@ -0,0 +1,3 @@ +insert into spatial_ref_sys(srid,srtext) values (1,'fake["srs"],text'); +create table c (i int, g geometry); +insert into c values (1,'SRID=1;POINT(0 0)'); diff --git a/regress/dumper/realtable.dmp b/regress/dumper/realtable.dmp new file mode 100644 index 000000000..f2ad6c76f --- /dev/null +++ b/regress/dumper/realtable.dmp @@ -0,0 +1 @@ +c diff --git a/regress/dumper/realtable_expected.dbf b/regress/dumper/realtable_expected.dbf new file mode 100644 index 000000000..0d2ac5037 Binary files /dev/null and b/regress/dumper/realtable_expected.dbf differ diff --git a/regress/dumper/realtable_expected.prj b/regress/dumper/realtable_expected.prj new file mode 100644 index 000000000..ab83d5d0e --- /dev/null +++ b/regress/dumper/realtable_expected.prj @@ -0,0 +1 @@ +fake["srs"],text \ No newline at end of file diff --git a/regress/dumper/realtable_expected.shp b/regress/dumper/realtable_expected.shp new file mode 100644 index 000000000..0112cd743 Binary files /dev/null and b/regress/dumper/realtable_expected.shp differ diff --git a/regress/dumper/realtable_expected.shx b/regress/dumper/realtable_expected.shx new file mode 100644 index 000000000..cc0b42ae7 Binary files /dev/null and b/regress/dumper/realtable_expected.shx differ diff --git a/regress/run_test.pl b/regress/run_test.pl index 6b1a970cf..236520458 100755 --- a/regress/run_test.pl +++ b/regress/run_test.pl @@ -287,9 +287,13 @@ foreach $TEST (@ARGV) my $rv = run_simple_test("${TEST}.sql", "${TEST}_expected"); pass() if $rv; } + elsif ( -r "${TEST}.dmp" ) + { + pass() if run_dumper_test(); + } else { - print " skipped (can't read ${TEST}.sql)\n"; + print " skipped (can't read any ${TEST}.{sql,dbf,tif,dmp})\n"; $SKIP++; next; } @@ -582,7 +586,7 @@ sub run_simple_test if ( $OPT_EXPECT ) { - print " expected\n"; + print " (expected)"; copy($outfile, $expected); } else @@ -901,6 +905,88 @@ sub run_loader_test return 1; } +################################################################## +# run_dumper_test +# +# Run dumper and compare output with various expectances +# test and run simple test with provided expected output. +# +# input is ${TEST}.dmp, where last line is considered to be the +# [table|query] argument for pgsql2shp and all the previous lines, +# if any are +# +################################################################## +sub run_dumper_test +{ + my $dump_file = "${TEST}.dmp"; + + # ON_ERROR_STOP is used by psql to return non-0 on an error + my $psql_opts="--no-psqlrc --variable ON_ERROR_STOP=true"; + + my $shpfile = "${TMPDIR}/dumper-shp"; + my $outfile = "${TMPDIR}/dumper.out"; + my $errfile = "${TMPDIR}/dumper.err"; + + # Produce the output SHP file. + open DUMPFILE, "$dump_file" or die "Cannot open dump file $dump_file\n"; + my @dumplines = ; + my $dumpstring = join '', @dumplines; + chop($dumpstring); + my @cmd = ("${PGSQL2SHP}", "-f", ${shpfile}, ${DB}, ${dumpstring}); + open my $stdout_save, '>&', *STDOUT or die "Cannot dup stdout\n"; + open my $stderr_save, '>&', *STDERR or die "Cannot dup stdout\n"; + open STDOUT, ">${outfile}" or die "Cannot write to ${outfile}\n"; + open STDERR, ">${errfile}" or die "Cannot write to ${errfile}\n"; + my $rv = system(@cmd); + open STDERR, '>&', $stderr_save; + open STDOUT, '>&', $stdout_save; + + show_progress(); + + if ( $rv ) + { + fail("dumping", "$errfile"); + return 0; + } + + my $diffile = sprintf("%s/test_%s_diff", $TMPDIR, $RUN); + + my $numtests = 0; + foreach my $ext ("shp","prj","dbf","shx") { + my $obtained = ${shpfile}.".".$ext; + my $expected = ${TEST}."_expected.".$ext; + if ( $OPT_EXPECT ) + { + copy($obtained, $expected); + } + elsif ( -r ${expected} ) { + show_progress(); + $numtests++; + my $diff = diff($expected, $obtained); + if ( $diff ) + { + open(FILE, ">$diffile"); + print FILE $diff; + close(FILE); + fail("diff expected obtained", $diffile); + return 0; + } + } + } + + #show_progress(); + + if ( $OPT_EXPECT ) { + print " (expected)"; + } + elsif ( ! $numtests ) { + fail("no expectances!"); + return 0; + } + + return 1; +} + ################################################################## # run_raster_loader_test @@ -1182,7 +1268,7 @@ sub uninstall_spatial } else { - pass("($OBJ_COUNT_PRE)"); + pass("($OBJ_COUNT_PRE)"); return 1; } }