diff --git a/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java b/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java index ac58088e6..851cc0960 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java +++ b/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtTargetResourceTest.java @@ -119,6 +119,9 @@ class MgmtTargetResourceTest extends AbstractManagementApiIntegrationTest { private static final String JSON_PATH_FIELD_NAME = ".name"; private static final String JSON_PATH_FIELD_DESCRIPTION = ".description"; private static final String JSON_PATH_FIELD_CONTENT = ".content"; + + private static final String JSON_PATH_KEY = "key"; + private static final String JSON_PATH_VALUE = "value"; // target // $.field static final String JSON_PATH_PAGED_LIST_CONTENT = JSON_PATH_ROOT + JSON_PATH_FIELD_CONTENT; @@ -135,6 +138,9 @@ class MgmtTargetResourceTest extends AbstractManagementApiIntegrationTest { private static final String JSON_PATH_LAST_REQUEST_AT = JSON_PATH_ROOT + JSON_PATH_FIELD_LAST_REQUEST_AT; private static final String JSON_PATH_TYPE = JSON_PATH_ROOT + JSON_PATH_FIELD_TARGET_TYPE; + private static final String KNOWN_KEY = "knownKey"; + private static final String KNOWN_VALUE = "knownValue"; + @Autowired ActionRepository actionRepository; @Autowired @@ -1978,8 +1984,8 @@ class MgmtTargetResourceTest extends AbstractManagementApiIntegrationTest { final String knownValue2 = "knownValue2"; final JSONArray metaData1 = new JSONArray(); - metaData1.put(new JSONObject().put("key", knownKey1).put("value", knownValue1)); - metaData1.put(new JSONObject().put("key", knownKey2).put("value", knownValue2)); + metaData1.put(new JSONObject().put(JSON_PATH_KEY, knownKey1).put(JSON_PATH_VALUE, knownValue1)); + metaData1.put(new JSONObject().put(JSON_PATH_KEY, knownKey2).put(JSON_PATH_VALUE, knownValue2)); mvc.perform(post("/rest/v1/targets/{targetId}/metadata", knownControllerId).accept(MediaType.APPLICATION_JSON) .contentType(MediaType.APPLICATION_JSON).content(metaData1.toString())) @@ -1995,7 +2001,7 @@ class MgmtTargetResourceTest extends AbstractManagementApiIntegrationTest { final JSONArray metaData2 = new JSONArray(); for (int i = 0; i < maxMetaData - metaData1.length() + 1; ++i) { - metaData2.put(new JSONObject().put("key", knownKey1 + i).put("value", knownValue1 + i)); + metaData2.put(new JSONObject().put(JSON_PATH_KEY, knownKey1 + i).put(JSON_PATH_VALUE, knownValue1 + i)); } mvc.perform(post("/rest/v1/targets/{targetId}/metadata", knownControllerId) @@ -2012,24 +2018,20 @@ class MgmtTargetResourceTest extends AbstractManagementApiIntegrationTest { @Description("Ensures that a metadata update through API is reflected by the repository.") void updateMetadata() throws Exception { final String knownControllerId = "targetIdWithMetadata"; - - // prepare and create metadata for update - final String knownKey = "knownKey"; - final String knownValue = "knownValue"; final String updateValue = "valueForUpdate"; - setupTargetWithMetadata(knownControllerId, knownKey, knownValue); + setupTargetWithMetadata(knownControllerId, KNOWN_KEY, KNOWN_VALUE); - final JSONObject jsonObject = new JSONObject().put("key", knownKey).put("value", updateValue); + final JSONObject jsonObject = new JSONObject().put(JSON_PATH_KEY, KNOWN_KEY).put(JSON_PATH_VALUE, updateValue); - mvc.perform(put("/rest/v1/targets/{targetId}/metadata/{key}", knownControllerId, knownKey) + mvc.perform(put("/rest/v1/targets/{targetId}/metadata/{key}", knownControllerId, KNOWN_KEY) .accept(MediaType.APPLICATION_JSON).contentType(MediaType.APPLICATION_JSON) .content(jsonObject.toString())) .andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()) .andExpect(content().string("")); - assertThat(targetManagement.getMetadata(knownControllerId).get(knownKey)).isEqualTo(updateValue); + assertThat(targetManagement.getMetadata(knownControllerId).get(KNOWN_KEY)).isEqualTo(updateValue); } @Test @@ -2037,22 +2039,18 @@ class MgmtTargetResourceTest extends AbstractManagementApiIntegrationTest { void deleteMetadata() throws Exception { final String knownControllerId = "targetIdWithMetadata"; - // prepare and create metadata for deletion - final String knownKey = "knownKey"; - final String knownValue = "knownValue"; + setupTargetWithMetadata(knownControllerId, KNOWN_KEY, KNOWN_VALUE); - setupTargetWithMetadata(knownControllerId, knownKey, knownValue); - - mvc.perform(delete("/rest/v1/targets/{targetId}/metadata/{key}", knownControllerId, knownKey)) + mvc.perform(delete("/rest/v1/targets/{targetId}/metadata/{key}", knownControllerId, KNOWN_KEY)) .andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()); // already deleted - mvc.perform(delete("/rest/v1/targets/{targetId}/metadata/{key}", knownControllerId, knownKey)) + mvc.perform(delete("/rest/v1/targets/{targetId}/metadata/{key}", knownControllerId, KNOWN_KEY)) .andDo(MockMvcResultPrinter.print()) .andExpect(status().isNotFound()); - assertThat(targetManagement.getMetadata(knownControllerId).get(knownKey)).isNull(); + assertThat(targetManagement.getMetadata(knownControllerId).get(KNOWN_KEY)).isNull(); } @Test @@ -2060,21 +2058,17 @@ class MgmtTargetResourceTest extends AbstractManagementApiIntegrationTest { void deleteMetadataThatDoesNotExistLeadsToNotFound() throws Exception { final String knownControllerId = "targetIdWithMetadata"; - // prepare and create metadata for deletion - final String knownKey = "knownKey"; - final String knownValue = "knownValue"; - - setupTargetWithMetadata(knownControllerId, knownKey, knownValue); + setupTargetWithMetadata(knownControllerId, KNOWN_KEY, KNOWN_VALUE); mvc.perform(delete("/rest/v1/targets/{targetId}/metadata/XXX", knownControllerId)) .andDo(MockMvcResultPrinter.print()) .andExpect(status().isNotFound()); - mvc.perform(delete("/rest/v1/targets/1234/metadata/{key}", knownKey)) + mvc.perform(delete("/rest/v1/targets/1234/metadata/{key}", KNOWN_KEY)) .andDo(MockMvcResultPrinter.print()) .andExpect(status().isNotFound()); - assertThat(targetManagement.getMetadata(knownControllerId).get(knownKey)).isNotNull(); + assertThat(targetManagement.getMetadata(knownControllerId).get(KNOWN_KEY)).isNotNull(); } @Test @@ -2082,17 +2076,13 @@ class MgmtTargetResourceTest extends AbstractManagementApiIntegrationTest { void getMetadataKey() throws Exception { final String knownControllerId = "targetIdWithMetadata"; - // prepare and create metadata for deletion - final String knownKey = "knownKey"; - final String knownValue = "knownValue"; + setupTargetWithMetadata(knownControllerId, KNOWN_KEY, KNOWN_VALUE); - setupTargetWithMetadata(knownControllerId, knownKey, knownValue); - - mvc.perform(get("/rest/v1/targets/{targetId}/metadata/{key}", knownControllerId, knownKey)) + mvc.perform(get("/rest/v1/targets/{targetId}/metadata/{key}", knownControllerId, KNOWN_KEY)) .andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()) - .andExpect(jsonPath("key", equalTo(knownKey))) - .andExpect(jsonPath("value", equalTo(knownValue))); + .andExpect(jsonPath(JSON_PATH_KEY, equalTo(KNOWN_KEY))) + .andExpect(jsonPath(JSON_PATH_VALUE, equalTo(KNOWN_VALUE))); } @Test @@ -2101,18 +2091,34 @@ class MgmtTargetResourceTest extends AbstractManagementApiIntegrationTest { final String knownControllerId = "targetIdWithMetadata"; final int totalMetadata = 10; - final String knownKeyPrefix = "knownKey"; - final String knownValuePrefix = "knownValue"; + final String knownKeyPrefix = "knownKeyPrefix"; + final String knownValuePrefix = "knownValuePrefix"; - setupTargetWithMetadata(knownControllerId, knownKeyPrefix, knownValuePrefix, totalMetadata); + testdataFactory.createTarget(knownControllerId); + // test call of a target without metadata & support for legacy offset/limit + mvc.perform(get("/rest/v1/targets/{targetId}/metadata?offset=0&limit=50", knownControllerId)) + .andDo(MockMvcResultPrinter.print()) + .andExpect(status().isOk()) + .andExpect(jsonPath("size", equalTo(0))) + .andExpect(jsonPath("total", equalTo(0))) + .andExpect(jsonPath("content.length()", equalTo(0))); + + // set metadata + final Map metadataEntries = new HashMap<>(); + for (int index = 0; index < totalMetadata; index++) { + metadataEntries.put(knownKeyPrefix + index, knownValuePrefix + index); + } + targetManagement.createMetadata(knownControllerId, metadataEntries); + + // test call of a target with metadata mvc.perform(get("/rest/v1/targets/{targetId}/metadata", knownControllerId)) .andDo(MockMvcResultPrinter.print()) .andExpect(status().isOk()) .andExpect(jsonPath("size", equalTo(totalMetadata))) .andExpect(jsonPath("total", equalTo(totalMetadata))) - .andExpect(jsonPath("content[0].key", equalTo("knownKey0"))) - .andExpect(jsonPath("content[0].value", equalTo("knownValue0"))); + .andExpect(jsonPath("content[0].key", equalTo(knownKeyPrefix + "0"))) + .andExpect(jsonPath("content[0].value", equalTo(knownValuePrefix + "0"))); } @Test @@ -2133,7 +2139,7 @@ class MgmtTargetResourceTest extends AbstractManagementApiIntegrationTest { @Test @Description("Passing an array in assignment request is allowed if multiassignment is disabled and array size in 1.") - void multiassignmentRequestAllowedIfDisabledButHasSizeOne() throws Exception { + void multiAssignmentRequestAllowedIfDisabledButHasSizeOne() throws Exception { final String targetId = testdataFactory.createTarget().getControllerId(); final Long dsId = testdataFactory.createDistributionSet().getId(); @@ -2903,17 +2909,6 @@ class MgmtTargetResourceTest extends AbstractManagementApiIntegrationTest { targetManagement.createMetadata(knownControllerId, Map.of(knownKey, knownValue)); } - private void setupTargetWithMetadata( - final String knownControllerId, final String knownKeyPrefix, final String knownValuePrefix, final int totalMetadata) { - testdataFactory.createTarget(knownControllerId); - - final Map metadataEntries = new HashMap<>(); - for (int index = 0; index < totalMetadata; index++) { - metadataEntries.put(knownKeyPrefix + index, knownValuePrefix + index); - } - targetManagement.createMetadata(knownControllerId, metadataEntries); - } - private Action updateActionStatus(final Action action, final Status status, final Integer statusCode) { return updateActionStatus(action, status, statusCode, null); } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/TargetCreate.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/TargetCreate.java index 899562ccd..14bf80f58 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/TargetCreate.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/builder/TargetCreate.java @@ -31,8 +31,7 @@ public interface TargetCreate { TargetCreate controllerId(@Size(min = 1, max = Target.CONTROLLER_ID_MAX_SIZE) @NotNull String controllerId); /** - * @param name for {@link Target#getName()} filled with - * {@link #controllerId(String)} as default if not set explicitly + * @param name for {@link Target#getName()} filled with {@link #controllerId(String)} as default if not set explicitly * @return updated builder instance */ TargetCreate name(@Size(min = 1, max = NamedEntity.NAME_MAX_SIZE) @NotNull String name); @@ -50,8 +49,7 @@ public interface TargetCreate { TargetCreate targetType(Long targetTypeId); /** - * @param securityToken for {@link Target#getSecurityToken()} is generated with a - * random sequence as default if not set explicitly + * @param securityToken for {@link Target#getSecurityToken()} is generated with a random sequence as default if not set explicitly * @return updated builder instance */ TargetCreate securityToken(@Size(min = 1, max = Target.SECURITY_TOKEN_MAX_SIZE) @NotNull String securityToken); @@ -70,9 +68,7 @@ public interface TargetCreate { TargetCreate lastTargetQuery(Long lastTargetQuery); /** - * @param status for {@link Target#getUpdateStatus()} is - * {@link TargetUpdateStatus#UNKNOWN} as default if not set - * explicitly + * @param status for {@link Target#getUpdateStatus()} is {@link TargetUpdateStatus#UNKNOWN} as default if not set explicitly * @return updated builder instance */ TargetCreate status(@NotNull TargetUpdateStatus status); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementTest.java index 92227db5c..034b1decd 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/TargetManagementTest.java @@ -794,14 +794,9 @@ class TargetManagementTest extends AbstractJpaIntegrationTest { @Description("Queries and loads the metadata related to a given target.") void getMetadata() { // create targets - final Target target1 = createTargetWithMetadata("target1", 10); - final Target target2 = createTargetWithMetadata("target2", 8); - - final Map metadataOfTarget1 = targetManagement.getMetadata(target1.getControllerId()); - final Map metadataOfTarget2 = targetManagement.getMetadata(target2.getControllerId()); - - assertThat(metadataOfTarget1).hasSize(10); - assertThat(metadataOfTarget2).hasSize(8); + assertThat(targetManagement.getMetadata(testdataFactory.createTarget("target0").getControllerId())).isEmpty(); + assertThat(targetManagement.getMetadata(createTargetWithMetadata("target1", 10).getControllerId())).hasSize(10); + assertThat(targetManagement.getMetadata(createTargetWithMetadata("target2", 8).getControllerId())).hasSize(8); } @Test diff --git a/pom.xml b/pom.xml index d456b4f16..d3e995d94 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.5 + 3.4.6 org.eclipse.hawkbit @@ -43,7 +43,7 @@ true - 3.4.5 + 3.4.6 2024.0.1 2.8.8 3.0.0