Skip to content

Commit

Permalink
fix: map endpoint headers to map on v2 crd export
Browse files Browse the repository at this point in the history
  • Loading branch information
a-cordier authored and kamiiiel committed Jan 29, 2025
1 parent e080390 commit e09d445
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ private void removeUnsupportedFields() {
if (spec.hasNonNull(PROXY_FIELD)) {
var proxy = getSpec().get(PROXY_FIELD);
if (proxy.hasNonNull(ENDPOINT_GROUPS_FIELD)) {
proxy.get(ENDPOINT_GROUPS_FIELD).forEach(this::removeUnsupportedEndpointGroupFields);
proxy.get(ENDPOINT_GROUPS_FIELD).forEach(this::prepareEndpointGroup);
}
}
}
Expand All @@ -190,4 +190,29 @@ private JsonNode mapPages(ArrayNode pages) {
}
return pagesMap;
}

private void prepareEndpointGroup(JsonNode group) {
removeUnsupportedEndpointGroupFields(group);
replaceEndpointHeaders((ObjectNode) group);
if (group.hasNonNull(ENDPOINTS_FIELD)) {
var endpoints = (ArrayNode) group.get(ENDPOINTS_FIELD);
endpoints.forEach(endpoint -> replaceEndpointHeaders((ObjectNode) endpoint));
}
}

private void replaceEndpointHeaders(ObjectNode endpoint) {
if (endpoint.has("headers")) {
endpoint.replace("headers", mapHeaders((ArrayNode) endpoint.get("headers")));
}
}

private ObjectNode mapHeaders(ArrayNode headers) {
var headerMap = JsonNodeFactory.instance.objectNode();
headers.forEach(header -> {
var name = header.get("name").asText();
var value = header.get("value").asText();
headerMap.put(name, value);
});
return headerMap;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,19 @@ public void shouldMapPages() throws Exception {
assertFalse(page.has("contentType"));
}

@Test
void shouldMapHeadersToMap() throws Exception {
var resource = new ApiDefinitionResource("api-definition", readDefinition("api-definition.json"));
var proxy = (ObjectNode) resource.getSpec().get("proxy");
assertTrue(proxy.has("groups"));
var groups = (ArrayNode) proxy.get("groups");
assertEquals(1, groups.size());
var group = groups.get(0);
assertTrue(group.has("headers"));
var headers = group.get("headers");
assertEquals("true", headers.get("x-test").asText());
}

@Test
public void shouldMapPageWithoutName() throws Exception {
ApiDefinitionResource resource = new ApiDefinitionResource(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,13 @@
"maxConcurrentConnections": 100,
"useCompression": true,
"followRedirects": false
}
},
"headers": [
{
"name": "x-test",
"value": "true"
}
]
}
]
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.BooleanNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.gravitee.apim.core.api.model.Path;
import io.gravitee.common.component.Lifecycle;
Expand Down

0 comments on commit e09d445

Please sign in to comment.