From b72e36b39a32317f743ff15b104dac030434e4ec Mon Sep 17 00:00:00 2001 From: ranchodeluxe Date: Thu, 18 Jan 2024 14:56:15 -0800 Subject: [PATCH 1/5] fix titiler health check --- .github/workflows/helm-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/helm-tests.yml b/.github/workflows/helm-tests.yml index 5b993a66..a6d9b86d 100644 --- a/.github/workflows/helm-tests.yml +++ b/.github/workflows/helm-tests.yml @@ -110,7 +110,7 @@ jobs: continue-on-error: true run: | kubectl config set-context --current --namespace=eoapitest - while [[ -z "$(kubectl get pod | grep "^raster-$RELEASE_NAME-.*$" | cut -d' ' -f1 | xargs -I{} kubectl logs pod/{} | grep "GET /healthz" | head -n 1)" ]]; do + while [[ -z "$(kubectl get pod | grep "^raster-$RELEASE_NAME-.*$" | cut -d' ' -f1 | xargs -I{} kubectl logs pod/{} | grep "GET /.*/healthz" | head -n 1)" ]]; do echo "still waiting for raster service to start..." sleep 1 done From 78d6cdd81b6764352824ca55dea21fcbacaae2c5 Mon Sep 17 00:00:00 2001 From: ranchodeluxe Date: Thu, 18 Jan 2024 15:47:24 -0800 Subject: [PATCH 2/5] get pypgstac to work --- helm-chart/eoapi/initdb-data/noaa-emergency-response.json | 2 +- helm-chart/eoapi/templates/db/configmap.yaml | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/helm-chart/eoapi/initdb-data/noaa-emergency-response.json b/helm-chart/eoapi/initdb-data/noaa-emergency-response.json index 5c7c1b87..a2f7ada0 100644 --- a/helm-chart/eoapi/initdb-data/noaa-emergency-response.json +++ b/helm-chart/eoapi/initdb-data/noaa-emergency-response.json @@ -1 +1 @@ -{"id":"noaa-emergency-response", "title": "NOAA Emergency Response Imagery", "description":"NOAA Emergency Response Imagery hosted on AWS Public Dataset.","stac_version":"1.0.0","license":"public-domain","links":[],"extent":{"spatial":{"bbox":[[-180,-90,180,90]]},"temporal":{"interval":[["2005-01-01T00:00:00Z","null"]]}}} +{"id":"noaa-emergency-response", "title": "NOAA Emergency Response Imagery", "description":"NOAA Emergency Response Imagery hosted on AWS Public Dataset.","stac_version":"1.0.0","license":"public-domain","links":[],"extent":{"spatial":{"bbox":[[-180,-90,180,90]]},"temporal":{"interval":[["2005-01-01T00:00:00Z","2006-01-01T00:00:00Z"]]}}} diff --git a/helm-chart/eoapi/templates/db/configmap.yaml b/helm-chart/eoapi/templates/db/configmap.yaml index e9f29009..0cdb8e27 100644 --- a/helm-chart/eoapi/templates/db/configmap.yaml +++ b/helm-chart/eoapi/templates/db/configmap.yaml @@ -25,6 +25,8 @@ metadata: data: load.sh: | #!/bin/bash + apt update -y && apt install python3 python3-pip -y + pip install pypgstac[psycopg] DSN="postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST/$POSTGRES_DB" pypgstac pgready --dsn $DSN pypgstac load collections /opt/initdb/json-data/noaa-emergency-response.json --dsn $DSN --method insert_ignore From b50c9a064ee631597756985060d474b98abbfc68 Mon Sep 17 00:00:00 2001 From: ranchodeluxe Date: Thu, 18 Jan 2024 15:54:56 -0800 Subject: [PATCH 3/5] change public functions --- .github/workflows/tests/test_vector.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests/test_vector.py b/.github/workflows/tests/test_vector.py index 37dd7dda..f6e41328 100644 --- a/.github/workflows/tests/test_vector.py +++ b/.github/workflows/tests/test_vector.py @@ -34,8 +34,8 @@ def test_vector_api(): "numberReturned", "collections", ] - assert resp.json()["numberMatched"] == 4 # one public table + 3 functions - assert resp.json()["numberReturned"] == 4 + assert resp.json()["numberMatched"] == 6 # one public table + 5 functions + assert resp.json()["numberReturned"] == 6 collections = resp.json()["collections"] ids = [c["id"] for c in collections] From 57407f358c5ebdc495d281c151959bf56372ee0d Mon Sep 17 00:00:00 2001 From: ranchodeluxe Date: Thu, 18 Jan 2024 16:01:05 -0800 Subject: [PATCH 4/5] 7? --- .github/workflows/tests/test_vector.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests/test_vector.py b/.github/workflows/tests/test_vector.py index f6e41328..70a08ef0 100644 --- a/.github/workflows/tests/test_vector.py +++ b/.github/workflows/tests/test_vector.py @@ -34,8 +34,8 @@ def test_vector_api(): "numberReturned", "collections", ] - assert resp.json()["numberMatched"] == 6 # one public table + 5 functions - assert resp.json()["numberReturned"] == 6 + assert resp.json()["numberMatched"] == 7 # one public table + 5 functions + assert resp.json()["numberReturned"] == 7 collections = resp.json()["collections"] ids = [c["id"] for c in collections] From 873dfc07566faa7be7112d9d677c91ec7e1b20f8 Mon Sep 17 00:00:00 2001 From: vincentsarago Date: Fri, 19 Jan 2024 09:37:01 +0100 Subject: [PATCH 5/5] fix raster tests --- .github/workflows/tests/test_raster.py | 79 +++++++++++++------ .../initdb-data/noaa-emergency-response.json | 2 +- 2 files changed, 54 insertions(+), 27 deletions(-) diff --git a/.github/workflows/tests/test_raster.py b/.github/workflows/tests/test_raster.py index a7520e64..442dba64 100644 --- a/.github/workflows/tests/test_raster.py +++ b/.github/workflows/tests/test_raster.py @@ -11,38 +11,63 @@ def test_raster_api(): """test api.""" - # health resp = client.get( f"{raster_endpoint}/healthz", headers={"Accept-Encoding": "br, gzip"} ) assert resp.status_code == 200 assert resp.headers["content-type"] == "application/json" - #assert resp.headers["content-encoding"] == "gzip" - - resp = client.get(f"{raster_endpoint}/healthz", headers={"Accept-Encoding": "br"}) - assert resp.status_code == 200 - assert resp.headers["content-type"] == "application/json" - #assert resp.headers["content-encoding"] == "br" def test_mosaic_api(): """test mosaic.""" query = {"collections": ["noaa-emergency-response"], "filter-lang": "cql-json"} - resp = client.post(f"{raster_endpoint}/mosaic/register", json=query) + resp = client.post(f"{raster_endpoint}/searches/register", json=query) assert resp.headers["content-type"] == "application/json" assert resp.status_code == 200 - assert resp.json()["searchid"] + assert resp.json()["id"] assert resp.json()["links"] - searchid = resp.json()["searchid"] + searchid = resp.json()["id"] + + resp = client.get(f"{raster_endpoint}/searches/{searchid}/-85.6358,36.1624/assets") + assert resp.status_code == 200 + assert len(resp.json()) == 1 + assert list(resp.json()[0]) == ["id", "bbox", "assets", "collection"] + assert resp.json()[0]["id"] == "20200307aC0853900w361030" + + resp = client.get( + f"{raster_endpoint}/searches/{searchid}/tiles/15/8589/12849/assets" + ) + assert resp.status_code == 200 + assert len(resp.json()) == 1 + assert list(resp.json()[0]) == ["id", "bbox", "assets", "collection"] + assert resp.json()[0]["id"] == "20200307aC0853900w361030" + + z, x, y = 15, 8589, 12849 + resp = client.get( + f"{raster_endpoint}/searches/{searchid}/tiles/{z}/{x}/{y}", + params={"assets": "cog"}, + headers={"Accept-Encoding": "br, gzip"}, + timeout=10.0, + ) + assert resp.status_code == 200 + assert resp.headers["content-type"] == "image/jpeg" + assert "content-encoding" not in resp.headers + - resp = client.get(f"{raster_endpoint}/mosaic/{searchid}/-85.6358,36.1624/assets") +def test_mosaic_collection_api(): + """test mosaic collection.""" + resp = client.get( + f"{raster_endpoint}/collections/noaa-emergency-response/-85.6358,36.1624/assets" + ) assert resp.status_code == 200 assert len(resp.json()) == 1 assert list(resp.json()[0]) == ["id", "bbox", "assets", "collection"] assert resp.json()[0]["id"] == "20200307aC0853900w361030" - resp = client.get(f"{raster_endpoint}/mosaic/{searchid}/15/8589/12849/assets") + resp = client.get( + f"{raster_endpoint}/collections/noaa-emergency-response/tiles/15/8589/12849/assets" + ) assert resp.status_code == 200 assert len(resp.json()) == 1 assert list(resp.json()[0]) == ["id", "bbox", "assets", "collection"] @@ -50,7 +75,7 @@ def test_mosaic_api(): z, x, y = 15, 8589, 12849 resp = client.get( - f"{raster_endpoint}/mosaic/{searchid}/tiles/{z}/{x}/{y}", + f"{raster_endpoint}/collections/noaa-emergency-response/tiles/{z}/{x}/{y}", params={"assets": "cog"}, headers={"Accept-Encoding": "br, gzip"}, timeout=10.0, @@ -114,11 +139,11 @@ def test_mosaic_search(): }, ] for search in searches: - resp = client.post(f"{raster_endpoint}/mosaic/register", json=search) + resp = client.post(f"{raster_endpoint}/searches/register", json=search) assert resp.status_code == 200 - assert resp.json()["searchid"] + assert resp.json()["id"] - resp = client.get(f"{raster_endpoint}/mosaic/list") + resp = client.get(f"{raster_endpoint}/searches/list") assert resp.headers["content-type"] == "application/json" assert resp.status_code == 200 assert ( @@ -134,9 +159,11 @@ def test_mosaic_search(): assert len(links) == 2 assert links[0]["rel"] == "self" assert links[1]["rel"] == "next" - assert links[1]["href"] == f"{raster_endpoint}/mosaic/list?limit=10&offset=10" + assert links[1]["href"] == f"{raster_endpoint}/searches/list?limit=10&offset=10" - resp = client.get(f"{raster_endpoint}/mosaic/list", params={"limit": 1, "offset": 1}) + resp = client.get( + f"{raster_endpoint}/searches/list", params={"limit": 1, "offset": 1} + ) assert resp.status_code == 200 assert resp.json()["context"]["matched"] > 10 assert resp.json()["context"]["limit"] == 1 @@ -145,33 +172,33 @@ def test_mosaic_search(): links = resp.json()["links"] assert len(links) == 3 assert links[0]["rel"] == "self" - assert links[0]["href"] == f"{raster_endpoint}/mosaic/list?limit=1&offset=1" + assert links[0]["href"] == f"{raster_endpoint}/searches/list?limit=1&offset=1" assert links[1]["rel"] == "next" - assert links[1]["href"] == f"{raster_endpoint}/mosaic/list?limit=1&offset=2" + assert links[1]["href"] == f"{raster_endpoint}/searches/list?limit=1&offset=2" assert links[2]["rel"] == "prev" - assert links[2]["href"] == f"{raster_endpoint}/mosaic/list?limit=1&offset=0" + assert links[2]["href"] == f"{raster_endpoint}/searches/list?limit=1&offset=0" # Filter on mosaic metadata - resp = client.get(f"{raster_endpoint}/mosaic/list", params={"owner": "vincent"}) + resp = client.get(f"{raster_endpoint}/searches/list", params={"owner": "vincent"}) assert resp.status_code == 200 assert resp.json()["context"]["matched"] == 7 assert resp.json()["context"]["limit"] == 10 assert resp.json()["context"]["returned"] == 7 # sortBy - resp = client.get(f"{raster_endpoint}/mosaic/list", params={"sortby": "lastused"}) + resp = client.get(f"{raster_endpoint}/searches/list", params={"sortby": "lastused"}) assert resp.status_code == 200 - resp = client.get(f"{raster_endpoint}/mosaic/list", params={"sortby": "usecount"}) + resp = client.get(f"{raster_endpoint}/searches/list", params={"sortby": "usecount"}) assert resp.status_code == 200 - resp = client.get(f"{raster_endpoint}/mosaic/list", params={"sortby": "-owner"}) + resp = client.get(f"{raster_endpoint}/searches/list", params={"sortby": "-owner"}) assert resp.status_code == 200 assert ( "owner" not in resp.json()["searches"][0]["search"]["metadata"] ) # some mosaic don't have owners - resp = client.get(f"{raster_endpoint}/mosaic/list", params={"sortby": "owner"}) + resp = client.get(f"{raster_endpoint}/searches/list", params={"sortby": "owner"}) assert resp.status_code == 200 assert "owner" in resp.json()["searches"][0]["search"]["metadata"] diff --git a/helm-chart/eoapi/initdb-data/noaa-emergency-response.json b/helm-chart/eoapi/initdb-data/noaa-emergency-response.json index a2f7ada0..41ed1776 100644 --- a/helm-chart/eoapi/initdb-data/noaa-emergency-response.json +++ b/helm-chart/eoapi/initdb-data/noaa-emergency-response.json @@ -1 +1 @@ -{"id":"noaa-emergency-response", "title": "NOAA Emergency Response Imagery", "description":"NOAA Emergency Response Imagery hosted on AWS Public Dataset.","stac_version":"1.0.0","license":"public-domain","links":[],"extent":{"spatial":{"bbox":[[-180,-90,180,90]]},"temporal":{"interval":[["2005-01-01T00:00:00Z","2006-01-01T00:00:00Z"]]}}} +{"id":"noaa-emergency-response", "title": "NOAA Emergency Response Imagery", "description":"NOAA Emergency Response Imagery hosted on AWS Public Dataset.","stac_version":"1.0.0","license":"public-domain","links":[],"extent":{"spatial":{"bbox":[[-180,-90,180,90]]},"temporal":{"interval":[["2005-01-01T00:00:00Z",null]]}}}