|
| 1 | +--- |
| 2 | +name: regression-test |
| 3 | +on: |
| 4 | + pull_request: |
| 5 | +jobs: |
| 6 | + test-regression: |
| 7 | + runs-on: ubuntu-latest |
| 8 | + steps: |
| 9 | + - uses: actions/checkout@v4 |
| 10 | + |
| 11 | + # build local test image |
| 12 | + - name: Set up Docker Buildx |
| 13 | + uses: docker/setup-buildx-action@v3 |
| 14 | + with: |
| 15 | + driver: docker |
| 16 | + - name: Build test image |
| 17 | + uses: docker/build-push-action@v5 |
| 18 | + with: |
| 19 | + push: false |
| 20 | + tags: pdok/mapserver:local |
| 21 | + - name: Build test image (NL target) |
| 22 | + uses: docker/build-push-action@v5 |
| 23 | + with: |
| 24 | + push: false |
| 25 | + target: NL |
| 26 | + tags: pdok/mapserver:local-nl |
| 27 | + |
| 28 | + - name: Regression test => rectObj wrong projection (WMS) |
| 29 | + run: | |
| 30 | + # start WMS mapserver |
| 31 | + docker run -e MAPSERVER_CONFIG_FILE=/srv/data/rectobj.conf -e MS_MAPFILE=/srv/data/rectobj.map -e SERVICE_TYPE=WMS --rm -d \ |
| 32 | + -p 8181:80 --name mapserver-rectobj-wms -v `pwd`/testdata/rectobj:/srv/data pdok/mapserver:local |
| 33 | +
|
| 34 | + # execute request |
| 35 | + mkdir -p `pwd`/testdata/rectobj/actual |
| 36 | + curl "http://localhost:8181/mapserver?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&BBOX=545287.2873572960962,6867556.049125162885,545689.3385149866808,6868025.580225903541&CRS=EPSG:3857&WIDTH=995&HEIGHT=1162&LAYERS=pand&STYLES=&FORMAT=image/png&TRANSPARENT=TRUE" -sLo `pwd`/testdata/rectobj/actual/rectobj.png |
| 37 | +
|
| 38 | + # assert results are as expected |
| 39 | + exit_code=0 |
| 40 | +
|
| 41 | + # diff WMS png files, if binary diff exists, check for 'perceptual diff' using compiled binary of https://github.com/myint/perceptualdiff |
| 42 | + wms_diff=$(diff -q `pwd`/testdata/rectobj/expected/wms.png `pwd`/testdata/rectobj/actual/rectobj.png) |
| 43 | + if [ -n "$wms_diff" ] |
| 44 | + then |
| 45 | + echo "binary diff between images, checking for perceptual diff" |
| 46 | + wms_pdiff=$(`pwd`/testdata/perceptualdiff `pwd`/testdata/rectobj/expected/wms.png `pwd`/testdata/rectobj/actual/rectobj.png) |
| 47 | + if [ -n "$wms_pdiff" ] |
| 48 | + then |
| 49 | + echo "$wms_pdiff" |
| 50 | + exit_code=1 |
| 51 | + fi |
| 52 | + fi |
| 53 | +
|
| 54 | + # cleanup |
| 55 | + rm -rf `pwd`/testdata/rectobj/actual |
| 56 | +
|
| 57 | + # stop mapserver |
| 58 | + docker stop mapserver-rectobj-wms |
| 59 | +
|
| 60 | + exit $exit_code |
| 61 | +
|
| 62 | + - name: Regression test => rectObj wrong projection (WFS) |
| 63 | + run: | |
| 64 | + # start WFS mapserver |
| 65 | + docker run -e MAPSERVER_CONFIG_FILE=/srv/data/rectobj.conf -e MS_MAPFILE=/srv/data/rectobj.map -e SERVICE_TYPE=WFS --rm -d \ |
| 66 | + -p 8182:80 --name mapserver-rectobj-wfs -v `pwd`/testdata/rectobj:/srv/data pdok/mapserver:local |
| 67 | +
|
| 68 | + # execute request |
| 69 | + mkdir -p `pwd`/testdata/rectobj/actual |
| 70 | + curl "http://localhost:8182/mapserver?SERVICE=WFS&REQUEST=GetFeature&VERSION=2.0.0&TYPENAMES=bag:pand&STARTINDEX=0&COUNT=1000&SRSNAME=urn:ogc:def:crs:EPSG::3857&BBOX=545287.2873572960962,6867556.049125162885,545689.3385149866808,6868025.580225903541,urn:ogc:def:crs:EPSG::3857" -sLo `pwd`/testdata/rectobj/actual/rectobj.xml |
| 71 | +
|
| 72 | + # assert results are as expected |
| 73 | + exit_code=0 |
| 74 | +
|
| 75 | + # diff WFS xml files, ignore timestamp but match numberMatched and numberReturned |
| 76 | + wfs_diff=$(diff -q `pwd`/testdata/rectobj/expected/wfs.xml `pwd`/testdata/rectobj/actual/rectobj.xml -I 'timeStamp="[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}T[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}"\snumberMatched="5"\snumberReturned="5"') |
| 77 | + if [ -n "$wfs_diff" ] |
| 78 | + then |
| 79 | + echo "$wfs_diff" |
| 80 | + exit_code=1 |
| 81 | + fi |
| 82 | +
|
| 83 | + # cleanup |
| 84 | + rm -rf `pwd`/testdata/rectobj/actual |
| 85 | +
|
| 86 | + # stop mapserver |
| 87 | + docker stop mapserver-rectobj-wfs |
| 88 | +
|
| 89 | + exit $exit_code |
| 90 | +
|
| 91 | + - name: Regression test => RDNAPTRANS (RD->ETRS89) |
| 92 | + run: | |
| 93 | + # start mapserver |
| 94 | + docker run --rm -d -p 8181:80 --name mapserver-rdnap-wfs -v `pwd`/testdata/ETRS89andRDNAP:/srv/data -e MAPSERVER_CONFIG_FILE=/srv/data/rd.conf -e SERVICE_TYPE=wfs -e MS_MAPFILE=/srv/data/rd.map pdok/mapserver:local |
| 95 | +
|
| 96 | + # execute request |
| 97 | + mkdir -p `pwd`/testdata/ETRS89andRDNAP/actual |
| 98 | + curl "http://localhost:8181/mapserver?service=WFS&version=2.0.0&request=GetFeature&typeName=rd&outputFormat=geojson&srsName=EPSG:4258" -sL | \ |
| 99 | + jq --arg crs "etrs89" '.features | .[] | { id, x_dev: (.geometry.coordinates[0] - (.properties[$crs+"_x"]|tonumber)), y_dev: (.geometry.coordinates[1] - (.properties[$crs+"_y"]|tonumber)) } | {error: ((.x_dev|fabs) > 0.001 or (.y_dev|fabs) > 0.001 )} + .' | \ |
| 100 | + jq -s 'group_by (.error)[] | {error: .[0].error, count: length}' > `pwd`/testdata/ETRS89andRDNAP/actual/etrs89.json |
| 101 | +
|
| 102 | + # assert results are as expected |
| 103 | + exit_code=0 |
| 104 | + results=($(cat `pwd`/testdata/ETRS89andRDNAP/actual/etrs89.json | jq -r '.error')) |
| 105 | + for err in "${results[@]}" |
| 106 | + do |
| 107 | + if [ "$err" == "true" ] |
| 108 | + then |
| 109 | + echo "found errors in RDNAPTRANS from RD to ETRS89:" |
| 110 | + cat `pwd`/testdata/ETRS89andRDNAP/actual/etrs89.json |
| 111 | + exit_code=1 |
| 112 | + fi |
| 113 | + done |
| 114 | +
|
| 115 | + # cleanup |
| 116 | + rm -rf `pwd`/testdata/ETRS89andRDNAP/actual |
| 117 | +
|
| 118 | + # stop mapserver |
| 119 | + docker stop mapserver-rdnap-wfs |
| 120 | +
|
| 121 | + exit $exit_code |
| 122 | +
|
| 123 | + - name: Regression test => RDNAPTRANS (ETRS89->RD) |
| 124 | + run: | |
| 125 | + # start mapserver |
| 126 | + docker run --rm -d -p 8181:80 --name mapserver-rdnap-wfs -v `pwd`/testdata/ETRS89andRDNAP:/srv/data -e MAPSERVER_CONFIG_FILE=/srv/data/etrs89.conf -e SERVICE_TYPE=wfs -e MS_MAPFILE=/srv/data/etrs89.map pdok/mapserver:local-nl |
| 127 | +
|
| 128 | + # execute request |
| 129 | + mkdir -p `pwd`/testdata/ETRS89andRDNAP/actual |
| 130 | + curl "http://localhost:8181/mapserver?service=WFS&version=2.0.0&request=GetFeature&typeName=etrs89&outputFormat=geojson&srsName=EPSG:28992" -sL | \ |
| 131 | + jq --arg crs "rd" '.features | .[] | { id, x_dev: (.geometry.coordinates[0] - (.properties[$crs+"_x"]|tonumber)), y_dev: (.geometry.coordinates[1] - (.properties[$crs+"_y"]|tonumber)) } | {error: ((.x_dev|fabs) > 0.001 or (.y_dev|fabs) > 0.001 )} + .' | \ |
| 132 | + jq -s 'group_by (.error)[] | {error: .[0].error, count: length}' > `pwd`/testdata/ETRS89andRDNAP/actual/rd.json |
| 133 | +
|
| 134 | + # assert results are as expected |
| 135 | + exit_code=0 |
| 136 | + results=($(cat `pwd`/testdata/ETRS89andRDNAP/actual/rd.json | jq -r '.error')) |
| 137 | + for err in "${results[@]}" |
| 138 | + do |
| 139 | + if [ "$err" == "true" ] |
| 140 | + then |
| 141 | + echo "found errors in RDNAPTRANS from ETRS89 to RD:" |
| 142 | + cat `pwd`/testdata/ETRS89andRDNAP/actual/rd.json |
| 143 | + exit_code=1 |
| 144 | + fi |
| 145 | + done |
| 146 | +
|
| 147 | + # cleanup |
| 148 | + rm -rf `pwd`/testdata/ETRS89andRDNAP/actual |
| 149 | +
|
| 150 | + # stop mapserver |
| 151 | + docker stop mapserver-rdnap-wfs |
| 152 | +
|
| 153 | + exit $exit_code |
0 commit comments