Skip to content

Commit c1c92f4

Browse files
author
Léon van der Kaap
committed
Finished tests
1 parent 8b79766 commit c1c92f4

File tree

4 files changed

+80
-8
lines changed

4 files changed

+80
-8
lines changed

api/v3/wms_types.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,10 @@ func (layer *Layer) hasTIFData() bool {
188188
return layer.Data.TIF != nil && layer.Data.TIF.BlobKey != ""
189189
}
190190

191+
func (layer *Layer) IsGroupLayer() bool {
192+
return layer.Layers != nil && len(*layer.Layers) > 0
193+
}
194+
191195
func (wms *WMS) GetAllLayersWithLegend() (layers []Layer) {
192196
for _, layer := range wms.Spec.Service.Layer.getAllLayers() {
193197
if !layer.hasData() || len(layer.Styles) == 0 {

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ require (
1313
github.com/pdok/ogc-capabilities-generator v1.0.0-beta5
1414
github.com/pdok/ogc-specifications v1.0.0-beta5
1515
github.com/pdok/smooth-operator v0.0.9
16+
github.com/stretchr/testify v1.10.0
1617
github.com/traefik/traefik/v3 v3.3.4
1718
k8s.io/api v0.32.0
1819
k8s.io/apimachinery v0.32.0

internal/controller/legendgenerator/mapper.go

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ type LegendReference struct {
2626
Style string `yaml:"style" json:"style"`
2727
}
2828

29+
type OgcWebserviceProxyConfig struct {
30+
GroupLayers map[string][]string `yaml:"grouplayers" json:"grouplayers"`
31+
}
32+
2933
func getBareConfigMapLegendGenerator(obj metav1.Object) *corev1.ConfigMap {
3034
return &corev1.ConfigMap{
3135
ObjectMeta: metav1.ObjectMeta{
@@ -101,14 +105,16 @@ func addLegendFixerConfig(wms *pdoknlv3.WMS, data map[string]string) {
101105
data["legend-fixer.sh"] = string(fileBytes)
102106
}
103107

108+
topLayer := wms.Spec.Service.Layer
109+
104110
legendReferences := make([]LegendReference, 0)
105111
topLevelStyleNames := make(map[string]bool)
106112

107-
for _, style := range wms.Spec.Service.Layer.Styles {
113+
for _, style := range topLayer.Styles {
108114
topLevelStyleNames[style.Name] = true
109115
}
110116

111-
if wms.Spec.Service.Layer.Layers != nil {
117+
if topLayer.Layers != nil {
112118
// These layers are called 'middle layers' in the old operator
113119
for _, layer := range *wms.Spec.Service.Layer.Layers {
114120
for _, style := range layer.Styles {
@@ -128,4 +134,36 @@ func addLegendFixerConfig(wms *pdoknlv3.WMS, data map[string]string) {
128134
}
129135

130136
data["remove"] = sb.String()
137+
138+
groupLayers := make(map[string][]string)
139+
140+
if topLayer.IsGroupLayer() {
141+
layerName := topLayer.Name
142+
targetArray := make([]string, 0)
143+
getAllNestedNonGroupLayerNames(&topLayer, &targetArray)
144+
groupLayers[layerName] = targetArray
145+
146+
for _, subLayer := range *topLayer.Layers {
147+
if subLayer.IsGroupLayer() {
148+
layerName = subLayer.Name
149+
targetArray = make([]string, 0)
150+
getAllNestedNonGroupLayerNames(&subLayer, &targetArray)
151+
groupLayers[layerName] = targetArray
152+
}
153+
}
154+
}
155+
156+
ogcWebServiceProxyConfig := OgcWebserviceProxyConfig{GroupLayers: groupLayers}
157+
proxyConfigData, err := yaml.Marshal(ogcWebServiceProxyConfig)
158+
data["ogc-webservice-proxy-config.yaml"] = string(proxyConfigData)
159+
}
160+
161+
func getAllNestedNonGroupLayerNames(layer *pdoknlv3.Layer, target *[]string) {
162+
for _, subLayer := range *layer.Layers {
163+
if subLayer.IsGroupLayer() {
164+
getAllNestedNonGroupLayerNames(&subLayer, target)
165+
} else {
166+
*target = append(*target, subLayer.Name)
167+
}
168+
}
131169
}

internal/controller/legendgenerator/mapper_test.go

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"github.com/pdok/mapserver-operator/api/v2beta1"
55
pdoknlv3 "github.com/pdok/mapserver-operator/api/v3"
66
"github.com/stretchr/testify/assert"
7+
v1 "k8s.io/api/core/v1"
8+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
79
"sigs.k8s.io/yaml"
810
"testing"
911
)
@@ -16,9 +18,21 @@ func TestGenerateConfigmapNoLegendFix(t *testing.T) {
1618
var wms pdoknlv3.WMS
1719
v2beta1.V3HubFromV2(&v2wms, &wms)
1820
configMap := GetLegendGeneratorConfigMap(&wms)
19-
_ = configMap
20-
a := 0
21-
_ = a
21+
22+
expectedData := make(map[string]string)
23+
expectedData["default_mapserver.conf"] = "CONFIG\n ENV\n MS_MAP_NO_PATH \"true\"\n END\nEND\n"
24+
expectedData["input"] = "\"wegvakken\" \"wegvakken\"\n\"hectopunten\" \"hectopunten\"\n"
25+
expectedData["input2"] = "- layer: wegvakken\n style: wegvakken\n- layer: hectopunten\n style: hectopunten\n"
26+
27+
expected := v1.ConfigMap{
28+
TypeMeta: metav1.TypeMeta{},
29+
ObjectMeta: metav1.ObjectMeta{Name: "rws-nwbwegen-v1-0-legend-generator", Labels: map[string]string{"app": "mapserver", "dataset": "nwbwegen", "dataset-owner": "rws", "inspire": "true", "service-type": "wms", "service-version": "v1_0"}},
30+
Immutable: v2beta1.Pointer(true),
31+
Data: expectedData,
32+
BinaryData: nil,
33+
}
34+
35+
assert.Equal(t, expected, *configMap)
2236
}
2337

2438
func TestGenerateConfigmapWithLegendFix(t *testing.T) {
@@ -29,7 +43,22 @@ func TestGenerateConfigmapWithLegendFix(t *testing.T) {
2943
var wms pdoknlv3.WMS
3044
v2beta1.V3HubFromV2(&v2wms, &wms)
3145
configMap := GetLegendGeneratorConfigMap(&wms)
32-
_ = configMap
33-
a := 0
34-
_ = a
46+
47+
expectedData := make(map[string]string)
48+
expectedData["default_mapserver.conf"] = "CONFIG\n ENV\n MS_MAP_NO_PATH \"true\"\n END\nEND\n"
49+
expectedData["input"] = "\"Bebouwing\" \"standaard:bebouwing\"\n\"Bebouwing\" \"kwaliteit:bebouwing\"\n\"Bebouwing\" \"print:bebouwing\"\n\"Bebouwingvlak\" \"standaard\"\n\"Bebouwingvlak\" \"kwaliteit\"\n\"Bebouwingvlak\" \"print\"\n\"Bebouwingvlak\" \"standaard:bebouwing\"\n\"Bebouwingvlak\" \"kwaliteit:bebouwing\"\n\"Bebouwingvlak\" \"print:bebouwing\"\n\"Nummeraanduidingreeks\" \"standaard\"\n\"Nummeraanduidingreeks\" \"kwaliteit\"\n\"Nummeraanduidingreeks\" \"print\"\n\"Nummeraanduidingreeks\" \"standaard:bebouwing\"\n\"Nummeraanduidingreeks\" \"kwaliteit:bebouwing\"\n\"Nummeraanduidingreeks\" \"print:bebouwing\"\n\"OpenbareRuimteNaam\" \"standaard\"\n\"OpenbareRuimteNaam\" \"kwaliteit\"\n\"OpenbareRuimteNaam\" \"print\"\n\"OpenbareRuimteNaam\" \"standaard:openbareruimtenaam\"\n\"OpenbareRuimteNaam\" \"kwaliteit:openbareruimtenaam\"\n\"OpenbareRuimteNaam\" \"print:openbareruimtenaam\"\n\"Perceel\" \"standaard:perceel\"\n\"Perceel\" \"kwaliteit:perceel\"\n\"Perceel\" \"print:perceel\"\n\"Perceelvlak\" \"standaard\"\n\"Perceelvlak\" \"kwaliteit\"\n\"Perceelvlak\" \"print\"\n\"Perceelvlak\" \"standaard:perceel\"\n\"Perceelvlak\" \"kwaliteit:perceel\"\n\"Perceelvlak\" \"print:perceel\"\n\"Label\" \"standaard\"\n\"Label\" \"standaard:perceel\"\n\"Label\" \"kwaliteit\"\n\"Label\" \"kwaliteit:perceel\"\n\"Label\" \"print\"\n\"Label\" \"print:perceel\"\n\"Bijpijling\" \"standaard\"\n\"Bijpijling\" \"kwaliteit\"\n\"Bijpijling\" \"print\"\n\"Bijpijling\" \"standaard:perceel\"\n\"Bijpijling\" \"kwaliteit:perceel\"\n\"Bijpijling\" \"print:perceel\"\n\"KadastraleGrens\" \"standaard\"\n\"KadastraleGrens\" \"kwaliteit\"\n\"KadastraleGrens\" \"print\"\n\"KadastraleGrens\" \"standaard:kadastralegrens\"\n\"KadastraleGrens\" \"kwaliteit:kadastralegrens\"\n\"KadastraleGrens\" \"print:kadastralegrens\"\n"
50+
expectedData["input2"] = "- layer: Bebouwing\n style: standaard:bebouwing\n- layer: Bebouwing\n style: kwaliteit:bebouwing\n- layer: Bebouwing\n style: print:bebouwing\n- layer: Bebouwingvlak\n style: standaard\n- layer: Bebouwingvlak\n style: kwaliteit\n- layer: Bebouwingvlak\n style: print\n- layer: Bebouwingvlak\n style: standaard:bebouwing\n- layer: Bebouwingvlak\n style: kwaliteit:bebouwing\n- layer: Bebouwingvlak\n style: print:bebouwing\n- layer: Nummeraanduidingreeks\n style: standaard\n- layer: Nummeraanduidingreeks\n style: kwaliteit\n- layer: Nummeraanduidingreeks\n style: print\n- layer: Nummeraanduidingreeks\n style: standaard:bebouwing\n- layer: Nummeraanduidingreeks\n style: kwaliteit:bebouwing\n- layer: Nummeraanduidingreeks\n style: print:bebouwing\n- layer: OpenbareRuimteNaam\n style: standaard\n- layer: OpenbareRuimteNaam\n style: kwaliteit\n- layer: OpenbareRuimteNaam\n style: print\n- layer: OpenbareRuimteNaam\n style: standaard:openbareruimtenaam\n- layer: OpenbareRuimteNaam\n style: kwaliteit:openbareruimtenaam\n- layer: OpenbareRuimteNaam\n style: print:openbareruimtenaam\n- layer: Perceel\n style: standaard:perceel\n- layer: Perceel\n style: kwaliteit:perceel\n- layer: Perceel\n style: print:perceel\n- layer: Perceelvlak\n style: standaard\n- layer: Perceelvlak\n style: kwaliteit\n- layer: Perceelvlak\n style: print\n- layer: Perceelvlak\n style: standaard:perceel\n- layer: Perceelvlak\n style: kwaliteit:perceel\n- layer: Perceelvlak\n style: print:perceel\n- layer: Label\n style: standaard\n- layer: Label\n style: standaard:perceel\n- layer: Label\n style: kwaliteit\n- layer: Label\n style: kwaliteit:perceel\n- layer: Label\n style: print\n- layer: Label\n style: print:perceel\n- layer: Bijpijling\n style: standaard\n- layer: Bijpijling\n style: kwaliteit\n- layer: Bijpijling\n style: print\n- layer: Bijpijling\n style: standaard:perceel\n- layer: Bijpijling\n style: kwaliteit:perceel\n- layer: Bijpijling\n style: print:perceel\n- layer: KadastraleGrens\n style: standaard\n- layer: KadastraleGrens\n style: kwaliteit\n- layer: KadastraleGrens\n style: print\n- layer: KadastraleGrens\n style: standaard:kadastralegrens\n- layer: KadastraleGrens\n style: kwaliteit:kadastralegrens\n- layer: KadastraleGrens\n style: print:kadastralegrens\n"
51+
expectedData["legend-fixer.sh"] = "#!/usr/bin/env bash\nset -eo pipefail\necho \"creating legends for root and group layers by concatenating data layers\"\ninput_filepath=\"/input/input\"\nremove_filepath=\"/input/remove\"\nconfig_filepath=\"/input/ogc-webservice-proxy-config.yaml\"\nlegend_dir=\"/var/www/legend\"\n< \"${input_filepath}\" xargs -n 2 echo | while read -r layer style; do\n export layer\n # shellcheck disable=SC2016 # dollar is for yq\n if ! < \"${config_filepath}\" yq -e 'env(layer) as $layer | .grouplayers | keys | contains([$layer])' &>/dev/null; then\n continue\n fi\n export grouplayer=\"${layer}\"\n grouplayer_style_filepath=\"${legend_dir}/${grouplayer}/${style}.png\"\n # shellcheck disable=SC2016 # dollar is for yq\n datalayers=$(< \"${config_filepath}\" yq 'env(grouplayer) as $foo | .grouplayers[$foo][]')\n datalayer_style_filepaths=()\n for datalayer in $datalayers; do\n datalayer_style_filepath=\"${legend_dir}/${datalayer}/${style}.png\"\n if [[ -f \"${datalayer_style_filepath}\" ]]; then\n datalayer_style_filepaths+=(\"${datalayer_style_filepath}\")\n fi\n done\n if [[ -n \"${datalayer_style_filepaths[*]}\" ]]; then\n echo \"concatenating ${grouplayer_style_filepath}\"\n gm convert -append \"${datalayer_style_filepaths[@]}\" \"${grouplayer_style_filepath}\"\n else\n echo \"no data for ${grouplayer_style_filepath}\"\n fi\ndone\n< \"${remove_filepath}\" xargs -n 2 echo | while read -r layer style; do\n remove_legend_file=\"${legend_dir}/${layer}/${style}.png\"\n echo removing $remove_legend_file\n rm $remove_legend_file\ndone\necho \"done\""
52+
expectedData["ogc-webservice-proxy-config.yaml"] = "grouplayers:\n Bebouwing:\n - Bebouwingvlak\n - Nummeraanduidingreeks\n Kadastralekaart:\n - Bebouwingvlak\n - Nummeraanduidingreeks\n - OpenbareRuimteNaam\n - Perceelvlak\n - Label\n - Bijpijling\n - KadastraleGrens\n Perceel:\n - Perceelvlak\n - Label\n - Bijpijling\n"
53+
expectedData["remove"] = "\"OpenbareRuimteNaam\" \"standaard\"\n\"OpenbareRuimteNaam\" \"kwaliteit\"\n\"OpenbareRuimteNaam\" \"print\"\n\"KadastraleGrens\" \"standaard\"\n\"KadastraleGrens\" \"kwaliteit\"\n\"KadastraleGrens\" \"print\"\n"
54+
55+
expected := v1.ConfigMap{
56+
TypeMeta: metav1.TypeMeta{},
57+
ObjectMeta: metav1.ObjectMeta{Name: "kadaster-kadastralekaart-legend-generator", Labels: map[string]string{"app": "mapserver", "dataset": "kadastralekaart", "dataset-owner": "kadaster", "inspire": "false", "service-type": "wms", "service-version": "v5_0"}},
58+
Immutable: v2beta1.Pointer(true),
59+
Data: expectedData,
60+
BinaryData: nil,
61+
}
62+
63+
assert.Equal(t, expected, *configMap)
3564
}

0 commit comments

Comments
 (0)