pgsql: Improve pg_dump regression tests and code coverage

From: Stephen Frost <sfrost(at)snowman(dot)net>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Improve pg_dump regression tests and code coverage
Date: 2017-03-18 17:18:53
Message-ID: E1cpI0D-0007cL-2E@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers pgsql-hackers

Improve pg_dump regression tests and code coverage

These improvements bring the lines-of-code coverage of pg_dump.c up to
87.7% (at least using LCOV 1.12, 1.11 seems to differ slightly). Nearly
every function is covered, three of the four which aren't are only
called when talking to older PG instances.

There is more which can, and should, be done here to improve the
coverage but it's past time to see what the buildfarm thinks of this.

What has been added:

- Coverage for many more command-line options
- Use command_fails_like instead of command_exit_is
- Operator classes, operator families
- Text search configuration, templates, parsers, dictionaries
- FDWs, servers, foreign tables
- Materialized views
- Improved Publications / Subscriptions test (though this needs work,
see PG10 open items and tests marked with XXX in 002_pg_dump.pl)
- Unlogged tables
- Partitioned tables
- Additional ACL testing for various object types

There is room for improvement, specifically:

- Various type-based option (alignment, storage, etc)
- Composite type collation
- Extra Procedural language functions (inline, validator)
- Different function options (SRF, Transform, config, security definer,
cost, leakproof)
- OpClass options (default, storage, order by, recheck)
- OpFamily options (order by, recheck)
- Aggregate functions (combinefunc, serialfunc, deserialfunc, etc)
- Text Search parser 'headline'
- Text Search template 'init'
- FDW options (handler, validator, options)
- Server options (type, version, options)
- User mapping options
- Default ACLs for sequences, types
- Security labels
- View circular dependencies (last function that needs coverage)
- Toast table autovacuum options
- Replica identity options
- Independent indexes (plus marking them as clustered on)
- Deferrable / initially deferred constraints
- Independent domain constraints

There's bits of extension pg_dump'ing also not covered, but those will
need to go into test_pg_dump (such as having a filter for config
tables).

Last, but not least, this approximately halves the number of tests run
with 'ok()' by removing the ok()-based checking of if all runs are
covered by each test. Instead, 002_pg_dump.pl will just exit out in
such a case (with a message in the log file). In general, when adding
tests, cover all runs unless there is a very good reason not to (such as
adding a 'catch-all' case). With these changes, the resulting output
and number of "tests" run is actually reduced.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/31a8b77a9244a0883e1968adcff9b6038e575d77

Modified Files
--------------
src/bin/pg_dump/t/001_basic.pl | 128 +-
src/bin/pg_dump/t/002_pg_dump.pl | 3773 ++++++++++++++++++++++++++++++++------
2 files changed, 3340 insertions(+), 561 deletions(-)

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message Stephen Frost 2017-03-18 17:47:05 pgsql: pg_dump: Remove "option requires an argument -- j" test
Previous Message Peter Eisentraut 2017-03-18 13:43:08 pgsql: doc: Correct row count in table

Browse pgsql-hackers by date

  From Date Subject
Next Message Rushabh Lathia 2017-03-18 17:22:43 Re: wait events for disk I/O
Previous Message Pavel Stehule 2017-03-18 17:16:19 Re: New CORRESPONDING clause design