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()