Skip to content

Commit

Permalink
fix: Schema for multimaps is wrong
Browse files Browse the repository at this point in the history
Upgraded sundrio and added a test to validate that multimaps (like `class MultiMap<K,V> implements Map<K,List<V>>`) are generated correctly.

Fixes fabric8io#4487
  • Loading branch information
xRodney committed Oct 12, 2022
1 parent eed73e1 commit ddbffe9
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 14 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -6,6 +6,7 @@
* Fix #4369: Informers will retry with a backoff on list/watch failure as they did in 5.12 and prior.
* Fix #4350: SchemaSwap annotation is now repeatable and is applied multiple times if classes are used more than once in the class hierarchy.
* Fix #4413: Stack overflow on multi maps (and other non-trivial generic classes)
* Fix #4487: Schema for multi maps is now generated correctly
* Fix #3733: The authentication command from the .kube/config won't be discarded if no arguments are specified
* Fix #4441: corrected patch base handling for the patch methods available from a Resource - resource(item).patch() will be evaluated as resource(latest).patch(item). Also undeprecated patch(item), which is consistent with leaving patch(context, item) undeprecated as well. For consistency with the other operations (such as edit), patch(item) will use the context item as the base when available, or the server side item when not. This means that patch(item) is only the same as resource(item).patch() when the patch(item) is called when the context item is missing or is the same as the latest.
* Fix #4442: TokenRefreshInterceptor doesn't overwrite existing OAuth token with empty string
Expand Down
Expand Up @@ -277,29 +277,25 @@ void mapPropertyShouldHaveCorrectValueType() {

assertEquals(3, specProps.size());

checkMapProp(specProps, "test", "array");
String arrayType = specProps.get("test").getAdditionalProperties().getSchema().getItems().getSchema().getType();
assertEquals("string", arrayType);
JSONSchemaProps testSchema = checkMapProp(specProps, "test", "array");
assertEquals("string", testSchema.getItems().getSchema().getType());

checkMapProp(specProps, "test2", "object");
JSONSchemaProps valueSchema = specProps.get("test2").getAdditionalProperties().getSchema().getAdditionalProperties().getSchema();
JSONSchemaProps test2Schema = checkMapProp(specProps, "test2", "object");
JSONSchemaProps valueSchema = test2Schema.getAdditionalProperties().getSchema();
String valueType = valueSchema.getType();
assertEquals("array", valueType);

// this check is currently failing, because multimaps are incorrectly processed as if they were normal maps
// (class MultiMap<K,V> implements Map<K,List<V>> is treated like just Map<K,V>)
// checkMapProp(specProps, "test3", "object");
final JSONSchemaProps props = specProps.get("test3");
assertEquals("object", props.getType());

assertEquals("boolean", valueSchema.getItems().getSchema().getType());

JSONSchemaProps test3Schema = checkMapProp(specProps, "test", "array");
assertEquals("string", test3Schema.getItems().getSchema().getType());
});
}

private void checkMapProp(Map<String, JSONSchemaProps> specProps, String name, String valueType) {
private JSONSchemaProps checkMapProp(Map<String, JSONSchemaProps> specProps, String name, String valueType) {
final JSONSchemaProps props = specProps.get(name);
assertEquals("object", props.getType());
assertEquals(valueType, props.getAdditionalProperties().getSchema().getType());
return props.getAdditionalProperties().getSchema();
}

@Test
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -80,7 +80,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<!-- Core versions -->
<sundrio.version>0.94-bugfix-multi-maps3-SNAPSHOT</sundrio.version>
<sundrio.version>0.93-SNAPSHOT</sundrio.version>
<okhttp.version>3.12.12</okhttp.version>
<okhttp.bundle.version>3.12.1_1</okhttp.bundle.version>
<okio.version>1.15.0</okio.version>
Expand Down

0 comments on commit ddbffe9

Please sign in to comment.