zonkyio / embedded-postgres

Java embedded PostgreSQL component for testing
Apache License 2.0
352 stars 47 forks source link

Tests not pass on mac os #58

Closed mcherb closed 3 years ago

mcherb commented 3 years ago

I have joined a new team that use cucumber testing. All features pass on Jenkins and the other developers on linux machines. But not me and another guy that has the same machine as me.

The tests are falling because of the order of elements. On macos the order is not the same as on linux !

In the build file I have

testImplementation 'io.zonky.test:embedded-postgres:1.2.10'
testImplementation enforcedPlatform('io.zonky.test.postgres:embedded-postgres-binaries-bom:9.6.15')

Macbook Pro / macOS Big Sur v11.1

java version "11.0.9" 2020-10-20 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.9+7-LTS) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.9+7-LTS, mixed mode)

Any Idea to fix this bug ?

Some log :

17:32:58.299 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : Detected a Darwin x86_64 system 17:32:58.302 INFO i.z.t.d.p.embedded.DefaultPostgresBinaryResolver : Detected distribution: 'Unknown' 17:32:58.305 INFO i.z.t.d.p.embedded.DefaultPostgresBinaryResolver : System specific postgres binaries found: postgres-darwin-x86_64.txz 17:32:58.373 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : Extracting Postgres... 17:33:00.406 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : Postgres binaries at build/pg/PG-5b5c46e3e13176f8e4de48960ea8e163 17:33:01.338 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : The files belonging to this database system will be owned by user "xxxx". 17:33:01.339 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : This user must also own the server process. 17:33:01.339 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : 17:33:01.339 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : The database cluster will be initialized with locales 17:33:01.339 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : COLLATE: C 17:33:01.339 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : CTYPE: fr_FR.UTF-8 17:33:01.339 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : MESSAGES: C 17:33:01.339 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : MONETARY: C 17:33:01.339 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : NUMERIC: C 17:33:01.339 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : TIME: C 17:33:01.339 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : The default text search configuration will be set to "french". 17:33:01.339 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : 17:33:01.339 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : Data page checksums are disabled. 17:33:01.339 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : 17:33:01.339 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : fixing permissions on existing directory build/pg/data ... ok 17:33:01.340 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : creating subdirectories ... ok 17:33:01.358 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : selecting default max_connections ... 100 17:33:01.388 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : selecting default shared_buffers ... 128MB 17:33:01.392 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : selecting default timezone ... Europe/Paris 17:33:01.392 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : selecting dynamic shared memory implementation ... posix 17:33:01.396 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : creating configuration files ... ok 17:33:02.142 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : running bootstrap script ... ok 17:33:07.436 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : performing post-bootstrap initialization ... ok 17:33:07.454 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : syncing data to disk ... ok 17:33:07.454 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : 17:33:07.454 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : Success. You can now start the database server using: 17:33:07.454 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : 17:33:07.454 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : build/pg/PG-5b5c46e3e13176f8e4de48960ea8e163/bin/pg_ctl -D build/pg/data -l logfile start 17:33:07.454 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : 17:33:07.455 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : 99b1a999-fd20-4311-9bc3-9da1e0e3feae initdb completed in 00:00:07.042 17:33:07.469 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : 99b1a999-fd20-4311-9bc3-9da1e0e3feae postmaster started as Process[pid=42804, exitValue="not exited"] on port 23423. Waiting up to PT10S for server startup to finish. 17:33:07.499 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : LOG: database system was shut down at 2021-04-16 17:33:07 CEST 17:33:07.499 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : LOG: MultiXact member wraparound protections are now enabled 17:33:07.501 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : LOG: database system is ready to accept connections 17:33:07.501 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : LOG: autovacuum launcher started 17:33:07.577 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : LOG: incomplete startup packet 17:33:07.777 INFO i.z.test.db.postgres.embedded.EmbeddedPostgres : 99b1a999-fd20-4311-9bc3-9da1e0e3feae postmaster startup finished in 00:00:00.315

tomix26 commented 3 years ago

Try to upgrade to embedded-postgres-binaries-bom:9.6.21. The version 9.6.15 was released a long time ago, and I don't backport all fixes to these older versions.

mcherb commented 3 years ago

Sorry it didn't work.

The insertion order in the database on MacOS is different from linux. The same java list is inserted differently in the two operating system !

tomix26 commented 3 years ago

The insertion order is not guaranteed in PostgreSQL. So you have to either modify the test to not rely on the order of the records, or use the order by clause to sort the records explicitly. More info here: https://dba.stackexchange.com/questions/95822/does-postgres-preserve-insertion-order-of-records

mcherb commented 3 years ago

ok thank you :)