From 8abe6eed6dfc2a9b7b8de4bf8f8873f206a3a056 Mon Sep 17 00:00:00 2001
From: Hummeltech <6109326+hummeltech@users.noreply.github.com>
Date: Tue, 12 Dec 2023 12:48:15 -0700
Subject: [PATCH] Fix `DEFAULT_ATTRIBUTION` value and add tests (#360)
The value for `DEFAULT_ATTRIBUTION` in `includes/mod_tile.h` needed to be escaped, it was causing a JSON parsing failure.
* Added basic test for `/.../.../tile-layer.json` to ensure parsing is successful
* Added basic tests for `/metrics` & `/mod_tile` URLs
---
.../actions/dependencies/install/action.yml | 10 ++
.../dependencies/install/brew/action.yml | 2 +-
includes/mod_tile.h | 2 +-
tests/CMakeLists.txt | 95 ++++++++++++++++---
4 files changed, 94 insertions(+), 15 deletions(-)
diff --git a/.github/actions/dependencies/install/action.yml b/.github/actions/dependencies/install/action.yml
index 90e6df60..94a8a0ab 100644
--- a/.github/actions/dependencies/install/action.yml
+++ b/.github/actions/dependencies/install/action.yml
@@ -31,6 +31,7 @@ inputs:
debian-test-dependencies:
default: >-
apache2
+ jq
fedora-build-dependencies:
default: >-
cairo-devel
@@ -45,6 +46,7 @@ inputs:
fedora-test-dependencies:
default: >-
httpd
+ jq
freebsd-build-dependencies:
default: >-
apache24
@@ -56,6 +58,9 @@ inputs:
libmemcached
mapnik
pkgconf
+ freebsd-test-dependencies:
+ default: >-
+ jq
macos-build-dependencies:
default: >-
apr
@@ -70,6 +75,7 @@ inputs:
macos-test-dependencies:
default: >-
coreutils
+ jq
opensuse-build-dependencies:
default: >-
apache2-devel
@@ -85,6 +91,7 @@ inputs:
apache2
apache2-event
apache2-prefork
+ jq
opensuse-mapnik-build-dependencies:
default: >-
bzip2
@@ -121,6 +128,7 @@ inputs:
rhel-test-dependencies:
default: >-
httpd
+ jq
rhel-mapnik-build-dependencies:
default: >-
boost-devel
@@ -172,6 +180,7 @@ inputs:
ubuntu-test-dependencies:
default: >-
apache2
+ jq
mapnik-build-version-centos-stream:
default: 3.1.0
mapnik-build-version-amazonlinux2-centos7:
@@ -224,6 +233,7 @@ runs:
with:
packages: >-
${{ inputs.freebsd-build-dependencies }}
+ ${{ inputs.freebsd-test-dependencies }}
${{ matrix.build_system == 'CMake' && 'cmake' || 'autoconf automake' }}
${{ matrix.compiler == 'GNU' && 'gcc' || 'llvm' }}
if: github.job == 'FreeBSD'
diff --git a/.github/actions/dependencies/install/brew/action.yml b/.github/actions/dependencies/install/brew/action.yml
index b256f2bf..1ce176e9 100644
--- a/.github/actions/dependencies/install/brew/action.yml
+++ b/.github/actions/dependencies/install/brew/action.yml
@@ -8,5 +8,5 @@ runs:
using: composite
steps:
- name: Install package(s)
- run: brew install ${{ inputs.packages }}
+ run: brew install ${{ inputs.packages }} || true
shell: bash --noprofile --norc -euxo pipefail {0}
diff --git a/includes/mod_tile.h b/includes/mod_tile.h
index e26c9be1..12cd342f 100644
--- a/includes/mod_tile.h
+++ b/includes/mod_tile.h
@@ -49,7 +49,7 @@
/* Maximum number of times we camp out before giving up */
#define MAXCAMP 10
-#define DEFAULT_ATTRIBUTION "©OpenStreetMap and contributors, (ODbL)"
+#define DEFAULT_ATTRIBUTION "©OpenStreetMap and contributors, (ODbL)"
typedef struct delaypool_entry {
struct in6_addr ip_addr;
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 466665a8..98be505f 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -23,6 +23,7 @@ find_program(CURL_EXECUTABLE NAMES curl REQUIRED)
find_program(GREP_EXECUTABLE NAMES grep REQUIRED)
find_program(HTTPD_EXECUTABLE NAMES ${HTTPD_PROGNAME} REQUIRED)
find_program(ID_EXECUTABLE NAMES id REQUIRED)
+find_program(JQ_EXECUTABLE NAMES jq)
find_program(KILL_EXECUTABLE NAMES kill REQUIRED)
find_program(MKDIR_EXECUTABLE NAMES mkdir REQUIRED)
find_program(SHA256SUM_EXECUTABLE NAMES gsha256sum sha256sum REQUIRED)
@@ -52,20 +53,20 @@ set(TILE_DIRTY_ON_URL "http://localhost:${HTTPD0_PORT}/tiles/renderd-example/9/2
set(TILE_STATUS_OFF_URL "http://localhost:${HTTPD1_PORT}/tiles/renderd-example/9/297/191.png/status")
set(TILE_STATUS_ON_URL "http://localhost:${HTTPD0_PORT}/tiles/renderd-example/9/297/191.png/status")
-set(CURL_CMD "${CURL_EXECUTABLE} --fail --silent")
-set(TILE_DEFAULT_CMD "${CURL_CMD} ${TILE_DEFAULT_URL}")
+set(METRICS_URL "http://localhost:${HTTPD0_PORT}/metrics")
+set(MOD_TILE_URL "http://localhost:${HTTPD0_PORT}/mod_tile")
+set(TILE_DEFAULT_TILEJSON_URL "http://localhost:${HTTPD0_PORT}/tiles/renderd-example/tile-layer.json")
+
set(TILE_DEFAULT_SHA256SUM "dbf26531286e844a3a9735cdd193598dca78d22f77cafe5824bcaf17f88cbb08")
-set(TILE_JPG_CMD "${CURL_CMD} ${TILE_JPG_URL}")
set(TILE_JPG_SHA256SUM "e09c3406c02f03583dadf0c8404c2d3efdc06a40d399e381ed2f47f49fde42d7")
-set(TILE_PNG256_CMD "${CURL_CMD} ${TILE_PNG256_URL}")
set(TILE_PNG256_SHA256SUM "${TILE_DEFAULT_SHA256SUM}")
-set(TILE_PNG32_CMD "${CURL_CMD} ${TILE_PNG32_URL}")
set(TILE_PNG32_SHA256SUM "1006d92152f1e18896e0016fb43201b14bbcf7655955b74495ad3610541d325b")
-set(TILE_WEBP_CMD "${CURL_CMD} ${TILE_WEBP_URL}")
set(TILE_WEBP_SHA256SUM_4 "ef3862a57831b21ec69c15be196e1e2b4fea66246c361142631b9fa22b85decc") # libwebp.so.4
set(TILE_WEBP_SHA256SUM_6 "96fc0455b2269a7bcd4a5b3c9844529c3c77e3bb15f56e72f78a5af3bc15b6b5") # libwebp.so.6
set(TILE_WEBP_SHA256SUM_7 "a82ef9ba5dc333de88af7b645084c30ab2b01c664e17162cbf6659c287cc4df4") # libwebp.so.7
+set(CURL_CMD "${CURL_EXECUTABLE} --fail --silent")
+
execute_process(COMMAND ${ID_EXECUTABLE} -gn ${WWW_USER_NAME}
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE WWW_GROUP_NAME
@@ -167,23 +168,23 @@ add_test(
add_test(
NAME download_tiles
COMMAND ${BASH} -c "
- until $(${TILE_DEFAULT_CMD} --output tile.png); do
+ until $(${CURL_CMD} ${TILE_DEFAULT_URL} --output tile.png); do
echo 'Sleeping 1s (DEFAULT)';
sleep 1;
done
- until $(${TILE_JPG_CMD} --output tile.jpg); do
+ until $(${CURL_CMD} ${TILE_JPG_URL} --output tile.jpg); do
echo 'Sleeping 1s (JPG)';
sleep 1;
done
- until $(${TILE_PNG256_CMD} --output tile.png256); do
+ until $(${CURL_CMD} ${TILE_PNG256_URL} --output tile.png256); do
echo 'Sleeping 1s (PNG256)';
sleep 1;
done
- until $(${TILE_PNG32_CMD} --output tile.png32); do
+ until $(${CURL_CMD} ${TILE_PNG32_URL} --output tile.png32); do
echo 'Sleeping 1s (PNG32)';
sleep 1;
done
- until $(${TILE_WEBP_CMD} --output tile.webp); do
+ until $(${CURL_CMD} ${TILE_WEBP_URL} --output tile.webp); do
echo 'Sleeping 1s (WEBP)';
sleep 1;
done
@@ -206,7 +207,7 @@ add_test(
WORKING_DIRECTORY tests
)
add_test(
- NAME dirty_tile
+ NAME status_and_dirty_urls
COMMAND ${BASH} -c "
TILE_DIRTY_ON_CMD=\"${CURL_CMD} ${TILE_DIRTY_ON_URL}\"
TILE_STATUS_ON_CMD=\"${CURL_CMD} ${TILE_STATUS_ON_URL}\"
@@ -239,6 +240,48 @@ add_test(
"
WORKING_DIRECTORY tests
)
+add_test(
+ NAME metrics_url
+ COMMAND ${BASH} -c "
+ METRICS_CMD=\"${CURL_CMD} ${METRICS_URL}\"
+ METRICS_OUTPUT=$(\${METRICS_CMD})
+ echo \"\${METRICS_OUTPUT}\"
+ for LAYER in '' '-jpg' '-png256' '-png32' '-webp'; do
+ LAYER_200=\"modtile_layer_responses_total{layer=\\\"/tiles/renderd-example\${LAYER}/\\\",status=\\\"200\\\"} 1\"
+ LAYER_404=\"modtile_layer_responses_total{layer=\\\"/tiles/renderd-example\${LAYER}/\\\",status=\\\"404\\\"} 0\"
+ echo \"\${LAYER_200}\"
+ echo \"\${LAYER_404}\"
+ if [[ \"\${METRICS_OUTPUT}\" != *\"\${LAYER_200}\"* ]]; then
+ exit 1;
+ fi
+ if [[ \"\${METRICS_OUTPUT}\" != *\"\${LAYER_404}\"* ]]; then
+ exit 1;
+ fi
+ done
+ "
+ WORKING_DIRECTORY tests
+)
+add_test(
+ NAME mod_tile_url
+ COMMAND ${BASH} -c "
+ MOD_TILE_CMD=\"${CURL_CMD} ${MOD_TILE_URL}\"
+ MOD_TILE_OUTPUT=$(\${MOD_TILE_CMD})
+ echo \"\${MOD_TILE_OUTPUT}\"
+ for LAYER in '' '-jpg' '-png256' '-png32' '-webp'; do
+ LAYER_200=\"NoRes200Layer/tiles/renderd-example\${LAYER}/: 1\"
+ LAYER_404=\"NoRes404Layer/tiles/renderd-example\${LAYER}/: 0\"
+ echo \"\${LAYER_200}\"
+ echo \"\${LAYER_404}\"
+ if [[ \"\${MOD_TILE_OUTPUT}\" != *\"\${LAYER_200}\"* ]]; then
+ exit 1;
+ fi
+ if [[ \"\${MOD_TILE_OUTPUT}\" != *\"\${LAYER_404}\"* ]]; then
+ exit 1;
+ fi
+ done
+ "
+ WORKING_DIRECTORY tests
+)
add_test(
NAME remove_tiles
COMMAND ${RM} -v tile.png tile.jpg tile.png256 tile.png32 tile.webp
@@ -322,14 +365,40 @@ set_tests_properties(check_tiles PROPERTIES
FIXTURES_REQUIRED "httpd_started;tiles_downloaded"
REQUIRED_FILES "tile.png;tile.jpg;tile.png256;tile.png32;tile.webp"
)
-set_tests_properties(dirty_tile PROPERTIES
+set_tests_properties(status_and_dirty_urls PROPERTIES
DEPENDS download_tiles
FIXTURES_REQUIRED "httpd_started;tiles_downloaded"
REQUIRED_FILES "tile.png;tile.jpg;tile.png256;tile.png32;tile.webp"
TIMEOUT 60
)
+set_tests_properties(metrics_url PROPERTIES
+ DEPENDS download_tiles
+ FIXTURES_REQUIRED "httpd_started;tiles_downloaded"
+)
+set_tests_properties(mod_tile_url PROPERTIES
+ DEPENDS download_tiles
+ FIXTURES_REQUIRED "httpd_started;tiles_downloaded"
+)
set_tests_properties(remove_tiles PROPERTIES
DEPENDS download_tiles
FIXTURES_CLEANUP tiles_downloaded
REQUIRED_FILES "tile.png;tile.jpg;tile.png256;tile.png32;tile.webp"
)
+
+if(JQ_EXECUTABLE)
+ add_test(
+ NAME tilejson_url
+ COMMAND ${BASH} -c "
+ TILE_DEFAULT_TILEJSON_CMD=\"${CURL_CMD} ${TILE_DEFAULT_TILEJSON_URL}\"
+ TILE_DEFAULT_TILEJSON_OUTPUT=$(\${TILE_DEFAULT_TILEJSON_CMD})
+ TILE_DEFAULT_TILEJSON_VERSION=$(echo \"\${TILE_DEFAULT_TILEJSON_OUTPUT}\" | ${JQ_EXECUTABLE} -r .tilejson)
+ if [ \"\${TILE_DEFAULT_TILEJSON_VERSION}\" != \"2.0.0\" ]; then
+ exit 1;
+ fi
+ "
+ WORKING_DIRECTORY tests
+ )
+ set_tests_properties(tilejson_url PROPERTIES
+ FIXTURES_REQUIRED httpd_started
+ )
+endif()