Re: How can I include sql file in pgTAP unittest?

From: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
To: Stéphane Klein <contact(at)stephane-klein(dot)info>, pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: How can I include sql file in pgTAP unittest?
Date: 2018-03-02 13:52:36
Message-ID: c5a7c0d8-b057-4262-5122-c338f6da97a0@aklaver.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 03/02/2018 01:17 AM, Stéphane Klein wrote:
> Hi,
>
> context: I would like to write UnitTest to test pgSQL triggers which use
> postgres_fdw extension.
> I use pgTAP <http://pgtap.org/> to write this UnitTest (I use this
> Docker environment poc-postgresql-pgTAP
> <https://github.com/harobed/poc-postgresql-pgTAP>).
>
> All works perfectly with this test file:
>
> BEGIN;
>   SELECT plan(1);
>
>   CREATE EXTENSION IF NOT EXISTS postgres_fdw;
>   DROP SERVER IF EXISTS db2 CASCADE;
>   CREATE SERVER kea FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host
> 'db2', dbname 'db2');
>   CREATE USER MAPPING FOR USER SERVER db2 OPTIONS (user 'db2', password
> 'password');
>
>   CREATE SCHEMA IF NOT EXISTS db2;
>
>   IMPORT FOREIGN SCHEMA public FROM SERVER db2 INTO db2;
>
>   SELECT ok(
>     (SELECT COUNT(host_id) FROM db2.hosts) = 1,
>     'foobar'
>   );
>
>   -- ;
> ROLLBACK;
>
> Now, I would like to extract db2 initialization in separate file
> "/test/init.sql" with this content:
>
>   CREATE EXTENSION IF NOT EXISTS postgres_fdw;
>   DROP SERVER IF EXISTS db2 CASCADE;
>   CREATE SERVER kea FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host
> 'db2', dbname 'db2');
>   CREATE USER MAPPING FOR USER SERVER db2 OPTIONS (user 'db2', password
> 'password');
>
>   CREATE SCHEMA IF NOT EXISTS db2;
>
>   IMPORT FOREIGN SCHEMA public FROM SERVER db2 INTO db2;
>
> Now, my test file is:
>
> BEGIN;
>   SELECT plan(1);
>
>   \i /test/init.sql
>
>   SELECT ok(
>     (SELECT COUNT(host_id) FROM db2.hosts) = 1,
>     'foobar'
>   );
>
> In log I see that "init.sql" file is loaded with success:
>
> Running tests: /test/*.sql -v
> /test/init.sql ................... No subtests run
>
> But I have this error:
>
> ERROR:  user mapping not found for "db2"
>
> Question: where is my mistake? How can I include some sql file in my test?

It is early morning here and I may be missing something, but I do not
see where you actually create server db2. I do see you creating server kea.

>
> Best regards,
> Stéphane
> --
> Stéphane Klein <contact(at)stephane-klein(dot)info
> <mailto:contact(at)stephane-klein(dot)info>>
> blog: http://stephane-klein.info
> cv : http://cv.stephane-klein.info
> Twitter: http://twitter.com/klein_stephane

--
Adrian Klaver
adrian(dot)klaver(at)aklaver(dot)com

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Alexander Farber 2018-03-02 13:52:45 jsonb_array_length: ERROR: 22023: cannot get array length of a scalar
Previous Message Łukasz Jarych 2018-03-02 11:15:03 Tracking changes DML in history log table