From: | Markus Pilman <markus(at)pilman(dot)ch> |
---|---|
To: | Erik Wienhold <ewie(at)ewie(dot)name> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Binding Postgres to port 0 for testing |
Date: | 2023-03-25 19:10:38 |
Message-ID: | CALavoow=fvELBK8UP11XvgvoJoMk1JEqNSoVRDQGr27-6-0GEw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Thanks for the suggestions. I didn't know about pg_virtualenv, that's
interesting. Though it seems to achieve something similar as to
containerize the test (potentially in a more platform independent way).
Though it seems pg_virtualenv is mostly doing what my test driver is
currently doing. Trying out the ports is obviously possible, but it seems a
bit hacky to me (though if there's no better way I don't think that's a
good show-stopper).
But I am still wondering: Is there a reason PostgreSQL doesn't allow me to
bind against port 0? I understand that in a production environment this is
almost never the thing you want to do, but I wouldn't consider this option
very dangerous.
Best Markus
On Sat, Mar 25, 2023 at 12:10 PM Erik Wienhold <ewie(at)ewie(dot)name> wrote:
> > On 25/03/2023 18:01 CET Markus Pilman <markus(at)pilman(dot)ch> wrote:
> >
> > I am building a simple integration test framework for an application
> that I
> > am building. For this project I am planning to use PostgreSQL.
> >
> > For testing purposes I'd like to always start with an empty database,
> > populate data, and, if the test was successful, delete everything. These
> > tests are single process tests.
> >
> > I'd like to run many processes in parallel and have one postgres server
> > process running for each. I realize that I could use one and use multiple
> > databases but I don't want to do this for a variety of reasons (one being
> > that I also want to test the control plane logic, the application is
> > multi-tenant and uses a database per tenant, having separate databases
> > simplifies debugging etc).
> >
> > Now the problem is that I need to find a TCP port for each running
> postgres
> > instance. There's multiple ways to do this, but by far the easiest one I
> > know is to bind to port 0. So my plan was to start postgres with "-p 0"
> and
> > then parse stdout to figure out which port it actually uses. But that
> > doesn't seem to work:
> >
> > >postgres -D data/ -p 0
> > 2023-03-25 16:39:54.271 GMT [13924] FATAL: 0 is outside the valid range
> for parameter "port" (1 .. 65535)
> >
> > What would be the recommended way of addressing my issue?
>
> I would try to start Postgres with every port number in a for loop starting
> with port number 1024. The first one that works is your port number. And
> you
> may not even have to parse stdout if you can pass that port number to your
> tests.
>
> Maybe you can also use pg_virtualenv[0] from Debian's postgresql-common.
> It
> tries every port number starting from 5432.
>
> [0]
> https://manpages.debian.org/testing/postgresql-common/pg_virtualenv.1.en.html
>
> --
> Erik
>
From | Date | Subject | |
---|---|---|---|
Next Message | Erik Wienhold | 2023-03-25 21:09:02 | Re: Binding Postgres to port 0 for testing |
Previous Message | Erik Wienhold | 2023-03-25 18:10:19 | Re: Binding Postgres to port 0 for testing |