Skip to content

Commit 591077a

Browse files
committed
Setup capabilities generator config
1 parent e8fbe3b commit 591077a

File tree

7 files changed

+358
-35
lines changed

7 files changed

+358
-35
lines changed

api/v3/shared_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ type Postgis struct {
8686
type TIF struct {
8787
BlobKey string `json:"blobKey"`
8888
Resample *string `json:"resample,omitempty"`
89-
Offsite *string `json:"offsite,omitepty"`
89+
Offsite *string `json:"offsite,omitempty"`
9090
GetFeatureInfoIncludesClass *bool `json:"getFeatureInfoIncludesClass,omitempty"`
9191
}
9292

go.mod

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
module github.com/pdok/mapserver-operator
22

3-
go 1.23.0
3+
go 1.24
4+
5+
toolchain go1.24.1
46

57
godebug default=go1.23
68

79
require (
10+
github.com/cbroglie/mustache v1.4.0
811
github.com/onsi/ginkgo/v2 v2.21.0
912
github.com/onsi/gomega v1.35.1
10-
github.com/pdok/ogc-specifications v1.0.0-beta2
11-
github.com/pdok/smooth-operator v0.0.6
13+
github.com/pdok/ogc-specifications v1.0.0-beta1.0.20250331144105-1d17d84aff4d
14+
github.com/pdok/smooth-operator v0.0.7-0.20250331135951-fb803e7f70e9
1215
github.com/traefik/traefik/v3 v3.3.4
1316
k8s.io/api v0.32.0
1417
k8s.io/apimachinery v0.32.0

go.sum

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
1212
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
1313
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
1414
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
15+
github.com/cbroglie/mustache v1.4.0 h1:Azg0dVhxTml5me+7PsZ7WPrQq1Gkf3WApcHMjMprYoU=
16+
github.com/cbroglie/mustache v1.4.0/go.mod h1:SS1FTIghy0sjse4DUVGV1k/40B1qE1XkD9DtDsHo9iM=
1517
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
1618
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
1719
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
@@ -135,10 +137,10 @@ github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4=
135137
github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
136138
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
137139
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
138-
github.com/pdok/ogc-specifications v1.0.0-beta2 h1:BSMd8HiABpKTQButuMaHDj9XKrisnd5ifL1/fM5AwyE=
139-
github.com/pdok/ogc-specifications v1.0.0-beta2/go.mod h1:rkrIwIBIUl4oyn3aMVtJLipDRtFHp3oa9dSu/MyDt1o=
140-
github.com/pdok/smooth-operator v0.0.6 h1:IwgY3X2zYA2XLw0eKmBBN1Md6gNWnoVl0i1R8/wFHvs=
141-
github.com/pdok/smooth-operator v0.0.6/go.mod h1:oZWFuIKJGjN/C6ocgMNfMZ7SbLQi+N0qaWj7j95Wdec=
140+
github.com/pdok/ogc-specifications v1.0.0-beta1.0.20250331144105-1d17d84aff4d h1:ZwHA+riVR60IaBKbTmHBRT9/ChuY4I4RfqTOtZxwuoo=
141+
github.com/pdok/ogc-specifications v1.0.0-beta1.0.20250331144105-1d17d84aff4d/go.mod h1:YDngwkwrWOfc5MYnEYseiv97K1Y9bZXlVzwi/8EaIl8=
142+
github.com/pdok/smooth-operator v0.0.7-0.20250331135951-fb803e7f70e9 h1:cQwbRrrF7KukICB20/5v/2TTYygrA8KOcZ8I0uY3pI8=
143+
github.com/pdok/smooth-operator v0.0.7-0.20250331135951-fb803e7f70e9/go.mod h1:oZWFuIKJGjN/C6ocgMNfMZ7SbLQi+N0qaWj7j95Wdec=
142144
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
143145
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
144146
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -308,7 +310,6 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
308310
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
309311
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
310312
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
311-
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
312313
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
313314
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
314315
k8s.io/api v0.32.0 h1:OL9JpbvAU5ny9ga2fb24X8H6xQlVp+aJMFlgtQjR9CE=

internal/controller/capabilitiesgenerator/capabilities_generator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func createInputForWFS(wfs *pdoknlv3.WFS, ownerInfo *smoothoperatorv1.OwnerInfo)
2929
if err != nil {
3030
return "", err
3131
}
32-
yamlInput, err := yaml.Marshal(&input)
32+
yamlInput, err := yaml.Marshal(input)
3333
if err != nil {
3434
return "", fmt.Errorf("failed to marshal the capabilities generator input to yaml: %w", err)
3535
}
Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
package capabilitiesgenerator
2+
3+
import (
4+
pdoknlv3 "github.com/pdok/mapserver-operator/api/v3"
5+
smoothoperatorv1 "github.com/pdok/smooth-operator/api/v1"
6+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
7+
8+
smoothoperatorutils "github.com/pdok/smooth-operator/pkg/util"
9+
"testing"
10+
)
11+
12+
const (
13+
WFSInput = `global:
14+
prefix: prefix
15+
namespace: http://prefix.geonovum.nl
16+
onlineResourceUrl: http://localhost
17+
path: /datasetOwner/dataset/theme/wfs/v1_0
18+
version: v1_0
19+
additionalSchemaLocations: http://inspire.ec.europa.eu/schemas/inspire_dls/1.0 http://inspire.ec.europa.eu/schemas/inspire_dls/1.0/inspire_dls.xsd
20+
services:
21+
wfs200:
22+
filename: /var/www/config/capabilities_wfs_200.xml
23+
definition:
24+
serviceIdentification:
25+
title: some Service title
26+
abstract: some \"Service\" abstract
27+
keywords:
28+
keyword:
29+
- service-keyword-1
30+
- service-keyword-2
31+
- infoFeatureAccessService
32+
accessConstraints: http://creativecommons.org/publicdomain/zero/1.0/deed.nl
33+
serviceProvider:
34+
providerName: PDOK
35+
capabilities:
36+
operationsMetadata:
37+
extendedCapabilities:
38+
extendedCapabilities:
39+
metadataUrl:
40+
url: https://www.nationaalgeoregister.nl/geonetwork/srv/dut/csw?service=CSW&version=2.0.2&request=GetRecordById&outputschema=http://www.isotc211.org/2005/gmd&elementsetname=full&id=metameta-meta-meta-meta-metametameta
41+
mediaType: application/vnd.ogc.csw.GetRecordByIdResponse_xml
42+
supportedLanguages:
43+
defaultLanguage:
44+
language: dut
45+
responseLanguage:
46+
language: dut
47+
spatialDataSetIdentifier:
48+
code: datadata-data-data-data-datadatadata
49+
featureTypeList:
50+
featureType:
51+
- name: prefixfeaturetype-1-name
52+
title: featuretype-1-title
53+
abstract: feature \"1\" abstract
54+
keywords:
55+
- keyword:
56+
- featuretype-1-keyword-1
57+
- featuretype-1-keyword-2
58+
defaultCrs: urn:ogc:def:crs:EPSG::28992
59+
otherCrs:
60+
- urn:ogc:def:crs:EPSG::28992
61+
- urn:ogc:def:crs:EPSG::25831
62+
- urn:ogc:def:crs:EPSG::25832
63+
- urn:ogc:def:crs:EPSG::3034
64+
- urn:ogc:def:crs:EPSG::3035
65+
- urn:ogc:def:crs:EPSG::3857
66+
- urn:ogc:def:crs:EPSG::4258
67+
- urn:ogc:def:crs:EPSG::4326
68+
metadataUrl:
69+
href: https://www.nationaalgeoregister.nl/geonetwork/srv/dut/csw?service=CSW&version=2.0.2&request=GetRecordById&outputschema=http://www.isotc211.org/2005/gmd&elementsetname=full&id=datadata-data-data-data-datadatadata
70+
- name: prefixfeaturetype-2-name
71+
title: featuretype-2-title
72+
abstract: feature \"2\" abstract
73+
keywords:
74+
- keyword:
75+
- featuretype-2-keyword-1
76+
- featuretype-2-keyword-2
77+
defaultCrs: urn:ogc:def:crs:EPSG::28992
78+
otherCrs:
79+
- urn:ogc:def:crs:EPSG::28992
80+
- urn:ogc:def:crs:EPSG::25831
81+
- urn:ogc:def:crs:EPSG::25832
82+
- urn:ogc:def:crs:EPSG::3034
83+
- urn:ogc:def:crs:EPSG::3035
84+
- urn:ogc:def:crs:EPSG::3857
85+
- urn:ogc:def:crs:EPSG::4258
86+
- urn:ogc:def:crs:EPSG::4326
87+
metadataUrl:
88+
href: https://www.nationaalgeoregister.nl/geonetwork/srv/dut/csw?service=CSW&version=2.0.2&request=GetRecordById&outputschema=http://www.isotc211.org/2005/gmd&elementsetname=full&id=datadata-data-data-data-datadatadata
89+
`
90+
)
91+
92+
func TestGetInputForWFS(t *testing.T) {
93+
type args struct {
94+
WFS *pdoknlv3.WFS
95+
ownerInfo *smoothoperatorv1.OwnerInfo
96+
}
97+
pdoknlv3.SetHost("http://localhost")
98+
tests := []struct {
99+
name string
100+
args args
101+
wantInput string
102+
wantErr bool
103+
}{
104+
{
105+
name: "GetInputForWFS",
106+
args: args{
107+
WFS: &pdoknlv3.WFS{
108+
ObjectMeta: metav1.ObjectMeta{
109+
Labels: map[string]string{
110+
"dataset": "dataset",
111+
"dataset-owner": "datasetOwner",
112+
"theme": "theme",
113+
"service-version": "v1_0",
114+
},
115+
},
116+
Spec: pdoknlv3.WFSSpec{
117+
Service: pdoknlv3.WFSService{
118+
Title: "some Service title",
119+
Abstract: "some \"Service\" abstract",
120+
Keywords: []string{"service-keyword-1", "service-keyword-2", "infoFeatureAccessService"},
121+
AccessConstraints: "http://creativecommons.org/publicdomain/zero/1.0/deed.nl",
122+
Inspire: &pdoknlv3.Inspire{
123+
ServiceMetadataURL: pdoknlv3.MetadataURL{
124+
CSW: &pdoknlv3.Metadata{
125+
MetadataIdentifier: "metameta-meta-meta-meta-metametameta",
126+
},
127+
},
128+
Language: "dut",
129+
SpatialDatasetIdentifier: "datadata-data-data-data-datadatadata",
130+
},
131+
DefaultCrs: "EPSG:28992",
132+
OtherCrs: []string{
133+
"EPSG:28992",
134+
"EPSG:25831",
135+
"EPSG:25832",
136+
"EPSG:3034",
137+
"EPSG:3035",
138+
"EPSG:3857",
139+
"EPSG:4258",
140+
"EPSG:4326",
141+
},
142+
FeatureTypes: []pdoknlv3.FeatureType{
143+
{
144+
Name: "featuretype-1-name",
145+
Title: "featuretype-1-title",
146+
Abstract: "feature \"1\" abstract",
147+
Keywords: []string{"featuretype-1-keyword-1", "featuretype-1-keyword-2"},
148+
DatasetMetadataURL: pdoknlv3.MetadataURL{
149+
CSW: &pdoknlv3.Metadata{
150+
MetadataIdentifier: "datadata-data-data-data-datadatadata",
151+
},
152+
},
153+
},
154+
{
155+
Name: "featuretype-2-name",
156+
Title: "featuretype-2-title",
157+
Abstract: "feature \"2\" abstract",
158+
Keywords: []string{"featuretype-2-keyword-1", "featuretype-2-keyword-2"},
159+
DatasetMetadataURL: pdoknlv3.MetadataURL{
160+
CSW: &pdoknlv3.Metadata{
161+
MetadataIdentifier: "datadata-data-data-data-datadatadata",
162+
},
163+
},
164+
},
165+
},
166+
Prefix: "prefix",
167+
},
168+
},
169+
},
170+
ownerInfo: &smoothoperatorv1.OwnerInfo{
171+
Spec: smoothoperatorv1.OwnerInfoSpec{
172+
NamespaceTemplate: "http://{{prefix}}.geonovum.nl",
173+
MetadataUrls: smoothoperatorv1.MetadataUrls{
174+
CSW: smoothoperatorv1.MetadataURL{
175+
HrefTemplate: "https://www.nationaalgeoregister.nl/geonetwork/srv/dut/csw?service=CSW&version=2.0.2&request=GetRecordById&outputschema=http://www.isotc211.org/2005/gmd&elementsetname=full&id={{identifier}}",
176+
},
177+
},
178+
WFS: smoothoperatorv1.WFS{
179+
ServiceProvider: smoothoperatorv1.ServiceProvider{
180+
ProviderName: smoothoperatorutils.Pointer("PDOK"),
181+
},
182+
},
183+
},
184+
},
185+
},
186+
wantInput: WFSInput,
187+
wantErr: false,
188+
},
189+
}
190+
for _, tt := range tests {
191+
t.Run(tt.name, func(t *testing.T) {
192+
gotInput, err := GetInput(tt.args.WFS, tt.args.ownerInfo)
193+
if (err != nil) != tt.wantErr {
194+
t.Errorf("GetInput() error = %v, wantErr %v", err, tt.wantErr)
195+
return
196+
}
197+
if gotInput != tt.wantInput {
198+
t.Errorf("GetInput() gotInput = %v, want %v", gotInput, tt.wantInput)
199+
}
200+
})
201+
}
202+
}

0 commit comments

Comments
 (0)