Skip to content

Commit

Permalink
fix(tiles): more tests and defences
Browse files Browse the repository at this point in the history
  • Loading branch information
rkettelerij committed Sep 6, 2024
1 parent 6fe1aab commit d11ffd3
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 1 deletion.
4 changes: 4 additions & 0 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,10 @@ func validate(config *Config) error {
if config.OgcAPI.Features != nil {
return validateFeatureCollections(config.OgcAPI.Features.Collections)
}
if config.OgcAPI.Tiles != nil && len(config.OgcAPI.Tiles.Collections) > 0 &&
config.OgcAPI.Tiles.Collections[0].Tiles == nil {
return errors.New("invalid tiles config provided: no tileserver(s) configured for collection-level tiles")
}
return nil
}

Expand Down
8 changes: 8 additions & 0 deletions config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,14 @@ func TestNewConfig(t *testing.T) {
wantErr: true,
wantErrMsg: "validation for 'Version' failed on the 'semver' tag",
},
{
name: "fail on invalid config file for geodata tiles (collection-level tiles)",
args: args{
configFile: "internal/engine/testdata/config_invalid_geodatatiles.yaml",
},
wantErr: true,
wantErrMsg: "invalid tiles config provided: no tileserver(s) configured for collection-level tiles",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand Down
27 changes: 27 additions & 0 deletions internal/engine/testdata/config_invalid_geodatatiles.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
version: 2.0.0
title: 'Foobar'
serviceIdentifier: FB
abstract: foo bar baz
license:
name: CC0 1.0
url: http://creativecommons.org/publicdomain/zero/1.0/deed.nl
baseUrl: http://localhost:8080
availableLanguages:
- en
ogcApi:
tiles:
# collection-level tiles without tileserver config is invalid
collections:
- id: foo
metadata:
title: Foo
- id: bar
metadata:
title: Bar
- id: baz
metadata:
title: Baz
keywords:
- foo
- bar
8 changes: 7 additions & 1 deletion internal/ogc/tiles/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,13 @@ func (t *Tiles) TileForCollection(tilesConfigByCollection map[string]config.Tile
return
}

target, err := createTilesURL(tileMatrixSetID, tileMatrix, tileCol, tileRow, tilesConfigByCollection[collectionID])
tilesConfig, ok := tilesConfigByCollection[collectionID]
if !ok {
err = fmt.Errorf("no tiles available for collection: %s", collectionID)
engine.RenderProblemAndLog(engine.ProblemNotFound, w, err, err.Error())
return
}
target, err := createTilesURL(tileMatrixSetID, tileMatrix, tileCol, tileRow, tilesConfig)
if err != nil {
engine.RenderProblemAndLog(engine.ProblemServerError, w, err)
return
Expand Down
16 changes: 16 additions & 0 deletions internal/ogc/tiles/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,22 @@ func TestTiles_TileForCollection(t *testing.T) {
statusCode: http.StatusBadRequest,
},
},
{
name: "invalid/NetherlandsRDNewQuad/5/10/15?=pbf",
fields: fields{
configFile: "internal/ogc/tiles/testdata/config_tiles_collectionlevel.yaml",
url: "http://localhost:8080/invalid/tiles/:tileMatrixSetId/:tileMatrix/:tileRow/:tileCol?f=pbf",
tileMatrixSetID: "NetherlandsRDNewQuad",
tileMatrix: "5",
tileRow: "10",
tileCol: "15",
collection: "invalid",
},
want: want{
body: "no tiles available for collection: invalid",
statusCode: http.StatusNotFound,
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand Down

0 comments on commit d11ffd3

Please sign in to comment.