Source: geoalchemy2
Version: 0.13.1-2
Severity: serious
Tags: sid bookworm bookworm-ignore
User: debian...@lists.debian.org
Usertags: regression

Dear maintainer(s),

With a recent upload of geoalchemy2 the autopkgtest of geoalchemy2 fails in testing on s390x when that autopkgtest is run with the binary packages of geoalchemy2 from unstable. It passes when run with only packages from testing. In tabular form:

                       pass            fail
geoalchemy2            from testing    0.13.1-2
all others             from testing    from testing

I copied some of the output at the bottom of this report.

Currently this regression is blocking the migration to testing [1]. Can you please investigate the situation and fix it? Please be reminded that s390x is our only big endian architecture.

[Release Team member hat on] Because we're currently in the hard freeze for bookworm, I have marked this bug as bookworm-ignore. Targeted fixes are still welcome.

More information about this bug and the reason for filing it can be found on
https://wiki.debian.org/ContinuousIntegration/RegressionEmailInformation

Paul

[1] https://qa.debian.org/excuses.php?package=geoalchemy2

https://ci.debian.net/data/autopkgtest/testing/s390x/g/geoalchemy2/32779104/log.gz

=================================== FAILURES =================================== _________________ TestInsertionORM.test_WKTElement[postgresql] _________________

self = <tests.test_functional.TestInsertionORM object at 0x3ff88ddd910>
session = <sqlalchemy.orm.session.Session object at 0x3ff890e8a90>
Lake = <class 'tests.schema_fixtures.Lake.<locals>.Lake'>, setup_tables = None

    def test_WKTElement(self, session, Lake, setup_tables):
        lake = Lake(WKTElement("LINESTRING(0 0,1 1)", srid=4326))
        session.add(lake)
        session.flush()
        session.expire(lake)
        assert isinstance(lake.geom, WKBElement)
      assert str(lake.geom) == (

"0102000020e6100000020000000000000000000000000000000000000000000"
            "0000000f03f000000000000f03f"
        )
E AssertionError: assert '002000000200...0000000000000' == '0102000020e6...000000000f03f' E - 0102000020e61000000200000000000000000000000000000000000000000000000000f03f000000000000f03f E ? - ^ ^^^^^ -- - -- E + 0020000002000010e600000002000000000000000000000000000000003ff00000000000003ff0000000000000 E ? ++ +++++ ^ +++ ^

tests/test_functional.py:297: AssertionError
_________________ TestInsertionORM.test_WKBElement[postgresql] _________________

self = <tests.test_functional.TestInsertionORM object at 0x3ff88ddeb50>
session = <sqlalchemy.orm.session.Session object at 0x3ff88efb310>
Lake = <class 'tests.schema_fixtures.Lake.<locals>.Lake'>, setup_tables = None

    def test_WKBElement(self, session, Lake, setup_tables):
        shape = LineString([[0, 0], [1, 1]])
        lake = Lake(from_shape(shape, srid=4326))
        session.add(lake)
        session.flush()
        session.expire(lake)
        assert isinstance(lake.geom, WKBElement)
      assert str(lake.geom) == (

"0102000020e6100000020000000000000000000000000000000000000000000"
            "0000000f03f000000000000f03f"
        )
E AssertionError: assert '002000000200...0000000000000' == '0102000020e6...000000000f03f' E - 0102000020e61000000200000000000000000000000000000000000000000000000000f03f000000000000f03f E ? - ^ ^^^^^ -- - -- E + 0020000002000010e600000002000000000000000000000000000000003ff00000000000003ff0000000000000 E ? ++ +++++ ^ +++ ^

tests/test_functional.py:313: AssertionError
____________________ TestUpdateORM.test_Raster[postgresql] _____________________

self = <tests.test_functional_postgresql.TestUpdateORM object at 0x3ff8900de90>
session = <sqlalchemy.orm.session.Session object at 0x3ff890c9890>
Ocean = <class 'tests.schema_fixtures.Ocean.<locals>.Ocean'>
setup_tables = None

    def test_Raster(self, session, Ocean, setup_tables):
        skip_postgis1(session)
        polygon = WKTElement("POLYGON((0 0,1 1,0 1,0 0))", srid=4326)
        o = Ocean(polygon.ST_AsRaster(5, 5))
        session.add(o)
        session.flush()
        session.expire(o)
            assert isinstance(o.rast, RasterElement)
            rast_data = (

"01000001009A9999999999C93F9A9999999999C9BF0000000000000000000000000000F03"

"F00000000000000000000000000000000E610000005000500440001010101010101010100"
            "010101000001010000000100000000"
        )
    >       assert o.rast.data == rast_data
E AssertionError: assert '00000000013F...0000100000000' == '01000001009A...0000100000000'
E         Skipping 45 identical trailing characters in diff, use -v to show
E - 01000001009A9999999999C93F9A9999999999C9BF0000000000000000000000000000F03F00000000000000000000000000000000E610000005000500440001010 E ? ^ ^^^^ - -- - ^^ ^^^^^^^^^^^^ -- --- -- E + 00000000013FC999999999999ABFC999999999999A00000000000000003FF000000000000000000000000000000000000000000000000010E600050005440001010 E ? ^^^ ^^^ +++ ^^ ^ ++++++++++++++++++

tests/test_functional_postgresql.py:365: AssertionError
__________ TestDecipherRaster.test_decipher_raster[postgresql-16BSI] ___________

self = <tests.gallery.test_decipher_raster.TestDecipherRaster object at 0x3ff88e363d0>
pixel_type = '16BSI'
session = <sqlalchemy.orm.session.Session object at 0x3ff891b8610>
conn = <sqlalchemy.engine.base.Connection object at 0x3ff88d89850>

    @pytest.mark.parametrize(
        "pixel_type",
        [
            "1BB",
            "2BUI",
            "4BUI",
            "8BSI",
            "8BUI",
            "16BSI",
            "16BUI",
            "32BSI",
            "32BUI",
            "32BF",
            "64BF",
        ],
    )
    def test_decipher_raster(self, pixel_type, session, conn):
        """Create a raster and decipher it"""
        metadata.drop_all(conn, checkfirst=True)
        metadata.create_all(conn)
            # Create a new raster
        polygon = WKTElement("POLYGON((0 0,1 1,0 1,0 0))", srid=4326)
        o = Ocean(polygon.ST_AsRaster(5, 6, pixel_type))
        session.add(o)
        session.flush()
            # Decipher data from each raster
        image = wkbImage(o.rast.data)
            # Define expected result
        expected = [
            [0, 1, 1, 1, 1],
            [1, 1, 1, 1, 1],
            [0, 1, 1, 1, 0],
            [0, 1, 1, 0, 0],
            [0, 1, 0, 0, 0],
            [0, 0, 0, 0, 0],
        ]
            # Check results
        band = image[0]
      assert band == expected
E assert [[0, 256, 256..., 0, 0, 0, 0]] == [[0, 1, 1, 1,..., 0, 0, 0, 0]]
E         At index 0 diff: [0, 256, 256, 256, 256] != [0, 1, 1, 1, 1]
E         Use -v to get more diff

tests/gallery/test_decipher_raster.py:188: AssertionError
__________ TestDecipherRaster.test_decipher_raster[postgresql-16BUI] ___________

self = <tests.gallery.test_decipher_raster.TestDecipherRaster object at 0x3ff88e35190>
pixel_type = '16BUI'
session = <sqlalchemy.orm.session.Session object at 0x3ff88e3a690>
conn = <sqlalchemy.engine.base.Connection object at 0x3ff88e3b710>

    @pytest.mark.parametrize(
        "pixel_type",
        [
            "1BB",
            "2BUI",
            "4BUI",
            "8BSI",
            "8BUI",
            "16BSI",
            "16BUI",
            "32BSI",
            "32BUI",
            "32BF",
            "64BF",
        ],
    )
    def test_decipher_raster(self, pixel_type, session, conn):
        """Create a raster and decipher it"""
        metadata.drop_all(conn, checkfirst=True)
        metadata.create_all(conn)
            # Create a new raster
        polygon = WKTElement("POLYGON((0 0,1 1,0 1,0 0))", srid=4326)
        o = Ocean(polygon.ST_AsRaster(5, 6, pixel_type))
        session.add(o)
        session.flush()
            # Decipher data from each raster
        image = wkbImage(o.rast.data)
            # Define expected result
        expected = [
            [0, 1, 1, 1, 1],
            [1, 1, 1, 1, 1],
            [0, 1, 1, 1, 0],
            [0, 1, 1, 0, 0],
            [0, 1, 0, 0, 0],
            [0, 0, 0, 0, 0],
        ]
            # Check results
        band = image[0]
      assert band == expected
E assert [[0, 256, 256..., 0, 0, 0, 0]] == [[0, 1, 1, 1,..., 0, 0, 0, 0]]
E         At index 0 diff: [0, 256, 256, 256, 256] != [0, 1, 1, 1, 1]
E         Use -v to get more diff

tests/gallery/test_decipher_raster.py:188: AssertionError
__________ TestDecipherRaster.test_decipher_raster[postgresql-32BSI] ___________

self = <tests.gallery.test_decipher_raster.TestDecipherRaster object at 0x3ff88e37d50>
pixel_type = '32BSI'
session = <sqlalchemy.orm.session.Session object at 0x3ff88cc6310>
conn = <sqlalchemy.engine.base.Connection object at 0x3ff88cc70d0>

    @pytest.mark.parametrize(
        "pixel_type",
        [
            "1BB",
            "2BUI",
            "4BUI",
            "8BSI",
            "8BUI",
            "16BSI",
            "16BUI",
            "32BSI",
            "32BUI",
            "32BF",
            "64BF",
        ],
    )
    def test_decipher_raster(self, pixel_type, session, conn):
        """Create a raster and decipher it"""
        metadata.drop_all(conn, checkfirst=True)
        metadata.create_all(conn)
            # Create a new raster
        polygon = WKTElement("POLYGON((0 0,1 1,0 1,0 0))", srid=4326)
        o = Ocean(polygon.ST_AsRaster(5, 6, pixel_type))
        session.add(o)
        session.flush()
            # Decipher data from each raster
        image = wkbImage(o.rast.data)
            # Define expected result
        expected = [
            [0, 1, 1, 1, 1],
            [1, 1, 1, 1, 1],
            [0, 1, 1, 1, 0],
            [0, 1, 1, 0, 0],
            [0, 1, 0, 0, 0],
            [0, 0, 0, 0, 0],
        ]
            # Check results
        band = image[0]
      assert band == expected
E assert [[0, 16777216..., 0, 0, 0, 0]] == [[0, 1, 1, 1,..., 0, 0, 0, 0]] E At index 0 diff: [0, 16777216, 16777216, 16777216, 16777216] != [0, 1, 1, 1, 1]
E         Use -v to get more diff

tests/gallery/test_decipher_raster.py:188: AssertionError
__________ TestDecipherRaster.test_decipher_raster[postgresql-32BUI] ___________

self = <tests.gallery.test_decipher_raster.TestDecipherRaster object at 0x3ff88e36350>
pixel_type = '32BUI'
session = <sqlalchemy.orm.session.Session object at 0x3ff88f8f210>
conn = <sqlalchemy.engine.base.Connection object at 0x3ff88ef9450>

    @pytest.mark.parametrize(
        "pixel_type",
        [
            "1BB",
            "2BUI",
            "4BUI",
            "8BSI",
            "8BUI",
            "16BSI",
            "16BUI",
            "32BSI",
            "32BUI",
            "32BF",
            "64BF",
        ],
    )
    def test_decipher_raster(self, pixel_type, session, conn):
        """Create a raster and decipher it"""
        metadata.drop_all(conn, checkfirst=True)
        metadata.create_all(conn)
            # Create a new raster
        polygon = WKTElement("POLYGON((0 0,1 1,0 1,0 0))", srid=4326)
        o = Ocean(polygon.ST_AsRaster(5, 6, pixel_type))
        session.add(o)
        session.flush()
            # Decipher data from each raster
        image = wkbImage(o.rast.data)
            # Define expected result
        expected = [
            [0, 1, 1, 1, 1],
            [1, 1, 1, 1, 1],
            [0, 1, 1, 1, 0],
            [0, 1, 1, 0, 0],
            [0, 1, 0, 0, 0],
            [0, 0, 0, 0, 0],
        ]
            # Check results
        band = image[0]
      assert band == expected
E assert [[0, 16777216..., 0, 0, 0, 0]] == [[0, 1, 1, 1,..., 0, 0, 0, 0]] E At index 0 diff: [0, 16777216, 16777216, 16777216, 16777216] != [0, 1, 1, 1, 1]
E         Use -v to get more diff

tests/gallery/test_decipher_raster.py:188: AssertionError
___________ TestDecipherRaster.test_decipher_raster[postgresql-32BF] ___________

self = <tests.gallery.test_decipher_raster.TestDecipherRaster object at 0x3ff88e37550>
pixel_type = '32BF'
session = <sqlalchemy.orm.session.Session object at 0x3ff890a7210>
conn = <sqlalchemy.engine.base.Connection object at 0x3ff890a56d0>

    @pytest.mark.parametrize(
        "pixel_type",
        [
            "1BB",
            "2BUI",
            "4BUI",
            "8BSI",
            "8BUI",
            "16BSI",
            "16BUI",
            "32BSI",
            "32BUI",
            "32BF",
            "64BF",
        ],
    )
    def test_decipher_raster(self, pixel_type, session, conn):
        """Create a raster and decipher it"""
        metadata.drop_all(conn, checkfirst=True)
        metadata.create_all(conn)
            # Create a new raster
        polygon = WKTElement("POLYGON((0 0,1 1,0 1,0 0))", srid=4326)
        o = Ocean(polygon.ST_AsRaster(5, 6, pixel_type))
        session.add(o)
        session.flush()
            # Decipher data from each raster
        image = wkbImage(o.rast.data)
            # Define expected result
        expected = [
            [0, 1, 1, 1, 1],
            [1, 1, 1, 1, 1],
            [0, 1, 1, 1, 0],
            [0, 1, 1, 0, 0],
            [0, 1, 0, 0, 0],
            [0, 0, 0, 0, 0],
        ]
            # Check results
        band = image[0]
      assert band == expected
E assert [[0.0, 4.6006....0, 0.0, 0.0]] == [[0, 1, 1, 1,..., 0, 0, 0, 0]] E At index 0 diff: [0.0, 4.600602988224807e-41, 4.600602988224807e-41, 4.600602988224807e-41, 4.600602988224807e-41] != [0, 1, 1, 1, 1]
E         Use -v to get more diff

tests/gallery/test_decipher_raster.py:188: AssertionError
___________ TestDecipherRaster.test_decipher_raster[postgresql-64BF] ___________

self = <tests.gallery.test_decipher_raster.TestDecipherRaster object at 0x3ff88e37690>
pixel_type = '64BF'
session = <sqlalchemy.orm.session.Session object at 0x3ff88cd69d0>
conn = <sqlalchemy.engine.base.Connection object at 0x3ff88cd5710>

    @pytest.mark.parametrize(
        "pixel_type",
        [
            "1BB",
            "2BUI",
            "4BUI",
            "8BSI",
            "8BUI",
            "16BSI",
            "16BUI",
            "32BSI",
            "32BUI",
            "32BF",
            "64BF",
        ],
    )
    def test_decipher_raster(self, pixel_type, session, conn):
        """Create a raster and decipher it"""
        metadata.drop_all(conn, checkfirst=True)
        metadata.create_all(conn)
            # Create a new raster
        polygon = WKTElement("POLYGON((0 0,1 1,0 1,0 0))", srid=4326)
        o = Ocean(polygon.ST_AsRaster(5, 6, pixel_type))
        session.add(o)
        session.flush()
            # Decipher data from each raster
        image = wkbImage(o.rast.data)
            # Define expected result
        expected = [
            [0, 1, 1, 1, 1],
            [1, 1, 1, 1, 1],
            [0, 1, 1, 1, 0],
            [0, 1, 1, 0, 0],
            [0, 1, 0, 0, 0],
            [0, 0, 0, 0, 0],
        ]
            # Check results
        band = image[0]
      assert band == expected
E assert [[0.0, 3.0386....0, 0.0, 0.0]] == [[0, 1, 1, 1,..., 0, 0, 0, 0]] E At index 0 diff: [0.0, 3.03865e-319, 3.03865e-319, 3.03865e-319, 3.03865e-319] != [0, 1, 1, 1, 1]
E         Use -v to get more diff

tests/gallery/test_decipher_raster.py:188: AssertionError
_________________ TestTypeDecorator.test_force_3d[postgresql] __________________

self = <tests.gallery.test_type_decorator.TestTypeDecorator object at 0x3ff88eda590>
session = <sqlalchemy.orm.session.Session object at 0x3ff890cb3d0>
conn = <sqlalchemy.engine.base.Connection object at 0x3ff89017590>

    def test_force_3d(self, session, conn):
        self._create_one_point(session, conn)
            # Query the point and check the result
        pt = session.query(Point).one()
            assert pt.id == 1
        assert pt.three_d_geom.srid == 4326
      assert pt.three_d_geom.desc.lower() == (

"01010000a0e6100000000000000000144000000000008046400000000000000000"
        )
E AssertionError: assert '00a000000100...0000000000000' == '01010000a0e6...0000000000000' E - 01010000a0e6100000000000000000144000000000008046400000000000000000 E + 00a0000001000010e6401400000000000040468000000000000000000000000000

tests/gallery/test_type_decorator.py:168: AssertionError
_______________________________ test_from_shape ________________________________

    def test_from_shape():
        # Standard case: POINT(1 2)
expected = WKBElement(str("0101000000000000000000f03f0000000000000040"))
        p = Point(1, 2)
        e = from_shape(p)
        assert isinstance(e, WKBElement)
        assert isinstance(e.data, memoryview)
      assert e == expected
E assert <WKBElement at 0x3ff88c1b590; 00000000013ff00000000000004000000000000000> == <WKBElement at 0x3ff88b21390; 0101000000000000000000f03f0000000000000040>

tests/test_shape.py:68: AssertionError
=============================== warnings summary ===============================
tests/test_functional_postgresql.py:529

/tmp/autopkgtest-lxc.s0f82vua/downtmp/build.qUM/src/tests/test_functional_postgresql.py:529: MovedIn20Warning: Deprecated API features detected! These feature(s) are not compatible with SQLAlchemy 2.0. To prevent incompatible upgrades prior to updating applications, ensure requirements files are pinned to "sqlalchemy<2.0". Set environment variable SQLALCHEMY_WARN_20=1 to show all deprecation warnings. Set environment variable SQLALCHEMY_SILENCE_UBER_WARNING=1 to silence this message. (Background on SQLAlchemy 2.0 at: https://sqlalche.me/e/b8d9)
    InternalBase = declarative_base()

tests/test_functional.py: 4 warnings
tests/test_functional_postgresql.py: 10 warnings

/tmp/autopkgtest-lxc.s0f82vua/downtmp/build.qUM/src/geoalchemy2/types.py:150: PendingDeprecationWarning: The 'management' parameter is going to be deprecated and will raise an error in the version 0.14
    warnings.warn(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================ FAILED tests/test_functional.py::TestInsertionORM::test_WKTElement[postgresql] FAILED tests/test_functional.py::TestInsertionORM::test_WKBElement[postgresql] FAILED tests/test_functional_postgresql.py::TestUpdateORM::test_Raster[postgresql] FAILED tests/gallery/test_decipher_raster.py::TestDecipherRaster::test_decipher_raster[postgresql-16BSI] FAILED tests/gallery/test_decipher_raster.py::TestDecipherRaster::test_decipher_raster[postgresql-16BUI] FAILED tests/gallery/test_decipher_raster.py::TestDecipherRaster::test_decipher_raster[postgresql-32BSI] FAILED tests/gallery/test_decipher_raster.py::TestDecipherRaster::test_decipher_raster[postgresql-32BUI] FAILED tests/gallery/test_decipher_raster.py::TestDecipherRaster::test_decipher_raster[postgresql-32BF] FAILED tests/gallery/test_decipher_raster.py::TestDecipherRaster::test_decipher_raster[postgresql-64BF] FAILED tests/gallery/test_type_decorator.py::TestTypeDecorator::test_force_3d[postgresql] FAILED tests/test_shape.py::test_from_shape - assert <WKBElement at 0x3ff88c1... ==== 11 failed, 374 passed, 80 skipped, 6 deselected, 15 warnings in 4.80s =====
stopping server
server error log

2023-04-11 17:30:01.768 EDT [5346] LOG: starting PostgreSQL 15.2 (Debian 15.2-2) on s390x-ibm-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit 2023-04-11 17:30:01.768 EDT [5346] LOG: listening on IPv6 address "::1", port 34897 2023-04-11 17:30:01.768 EDT [5346] LOG: listening on IPv4 address "127.0.0.1", port 34897 2023-04-11 17:30:01.768 EDT [5346] LOG: listening on Unix socket "/tmp/tmpfk6x0e7w/tmp/.s.PGSQL.34897" 2023-04-11 17:30:01.770 EDT [5349] LOG: database system was shut down at 2023-04-11 17:30:01 EDT 2023-04-11 17:30:01.773 EDT [5346] LOG: database system is ready to accept connections 2023-04-11 17:30:03.487 EDT [5358] WARNING: there is no transaction in progress 2023-04-11 17:30:04.109 EDT [5381] ERROR: function st_geomfromewkt(integer) does not exist at character 26 2023-04-11 17:30:04.109 EDT [5381] HINT: No function matches the given name and argument types. You might need to add explicit type casts. 2023-04-11 17:30:04.109 EDT [5381] STATEMENT: UPDATE gis.lake SET geom=ST_GeomFromEWKT(1) WHERE gis.lake.id = 1 2023-04-11 17:30:04.287 EDT [5386] ERROR: function st_unknownfunction(geometry, integer) does not exist at character 8 2023-04-11 17:30:04.287 EDT [5386] HINT: No function matches the given name and argument types. You might need to add explicit type casts. 2023-04-11 17:30:04.287 EDT [5386] STATEMENT: SELECT ST_UnknownFunction(gis.lake.geom, 2) AS "ST_UnknownFunction_1" FROM gis.lake 2023-04-11 17:30:04.504 EDT [5390] ERROR: new row for relation "contrained_lake" violates check constraint "check_geom_sk" 2023-04-11 17:30:04.504 EDT [5390] DETAIL: Failing row contains (4, null, should fail, null). 2023-04-11 17:30:04.504 EDT [5390] STATEMENT: INSERT INTO contrained_lake (a_str, checked_str, geom) VALUES (NULL, 'should fail', ST_GeomFromEWKT(NULL)) RETURNING contrained_lake.id 2023-04-11 17:30:05.237 EDT [5406] ERROR: contains: Operation on mixed SRID geometries (Polygon, 4326) != (Point, 0) 2023-04-11 17:30:05.237 EDT [5406] STATEMENT: SELECT gis.lake.id AS gis_lake_id, ST_AsEWKB(gis.lake.geom) AS gis_lake_geom FROM gis.lake WHERE ST_Within('POINT(0 0)', ST_Buffer(gis.lake.geom, 2)) 2023-04-11 17:30:06.922 EDT [5425] WARNING: OGC WKT expected, EWKT provided - use GeomFromEWKT() for this 2023-04-11 17:30:06.931 EDT [5425] WARNING: OGC WKT expected, EWKT provided - use GeomFromEWKT() for this
2023-04-11 17:30:07.408 EDT [5346] LOG:  received smart shutdown request
2023-04-11 17:30:12.419 EDT [5419] FATAL: terminating connection due to unexpected postmaster exit 2023-04-11 17:30:12.419 EDT [5423] FATAL: terminating connection due to unexpected postmaster exit 2023-04-11 17:30:12.419 EDT [5389] FATAL: terminating connection due to unexpected postmaster exit 2023-04-11 17:30:12.419 EDT [5409] FATAL: terminating connection due to unexpected postmaster exit 2023-04-11 17:30:12.419 EDT [5428] FATAL: terminating connection due to unexpected postmaster exit 2023-04-11 17:30:12.420 EDT [5402] FATAL: terminating connection due to unexpected postmaster exit 2023-04-11 17:30:12.422 EDT [5396] FATAL: terminating connection due to unexpected postmaster exit

clean up
autopkgtest [17:30:12]: test setup-db-and-run-tests.py

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to