From e7aa17f23a5a5c933685f0f275e3996aaf6b3da5 Mon Sep 17 00:00:00 2001 From: Tim Dahlmanns Date: Wed, 19 Jun 2024 16:29:21 +0200 Subject: [PATCH 1/3] fix(data-plane-selector-control-api): getAllDataPlaneInstances endpoint --- .../api/DataplaneSelectorControlApiExtension.java | 10 ++++++++++ .../api/DataplaneSelectorControlApiExtensionTest.java | 3 +++ 2 files changed, 13 insertions(+) diff --git a/extensions/data-plane-selector/data-plane-selector-control-api/src/main/java/org/eclipse/edc/connector/dataplane/selector/control/api/DataplaneSelectorControlApiExtension.java b/extensions/data-plane-selector/data-plane-selector-control-api/src/main/java/org/eclipse/edc/connector/dataplane/selector/control/api/DataplaneSelectorControlApiExtension.java index f53450af5b..fa0c2bbd05 100644 --- a/extensions/data-plane-selector/data-plane-selector-control-api/src/main/java/org/eclipse/edc/connector/dataplane/selector/control/api/DataplaneSelectorControlApiExtension.java +++ b/extensions/data-plane-selector/data-plane-selector-control-api/src/main/java/org/eclipse/edc/connector/dataplane/selector/control/api/DataplaneSelectorControlApiExtension.java @@ -9,6 +9,7 @@ * * Contributors: * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation + * Fraunhofer Institute for Software and Systems Engineering - register missing transformer * */ @@ -19,16 +20,21 @@ import org.eclipse.edc.runtime.metamodel.annotation.Inject; import org.eclipse.edc.spi.system.ServiceExtension; import org.eclipse.edc.spi.system.ServiceExtensionContext; +import org.eclipse.edc.spi.types.TypeManager; import org.eclipse.edc.transform.spi.TypeTransformerRegistry; +import org.eclipse.edc.transform.transformer.edc.from.JsonObjectFromDataPlaneInstanceTransformer; import org.eclipse.edc.transform.transformer.edc.to.JsonObjectToDataPlaneInstanceTransformer; import org.eclipse.edc.validator.spi.JsonObjectValidatorRegistry; import org.eclipse.edc.web.spi.WebService; import org.eclipse.edc.web.spi.configuration.ApiContext; import java.time.Clock; +import java.util.Map; +import static jakarta.json.Json.createBuilderFactory; import static org.eclipse.edc.connector.dataplane.selector.control.api.DataplaneSelectorControlApiExtension.NAME; import static org.eclipse.edc.connector.dataplane.selector.spi.instance.DataPlaneInstance.DATAPLANE_INSTANCE_TYPE; +import static org.eclipse.edc.spi.constants.CoreConstants.JSON_LD; @Extension(NAME) public class DataplaneSelectorControlApiExtension implements ServiceExtension { @@ -41,6 +47,9 @@ public class DataplaneSelectorControlApiExtension implements ServiceExtension { @Inject private JsonObjectValidatorRegistry validatorRegistry; + @Inject + private TypeManager typeManager; + @Inject private TypeTransformerRegistry typeTransformerRegistry; @@ -60,6 +69,7 @@ public void initialize(ServiceExtensionContext context) { validatorRegistry.register(DATAPLANE_INSTANCE_TYPE, DataPlaneInstanceValidator.instance()); typeTransformerRegistry.register(new JsonObjectToDataPlaneInstanceTransformer()); + typeTransformerRegistry.register(new JsonObjectFromDataPlaneInstanceTransformer(createBuilderFactory(Map.of()), typeManager.getMapper(JSON_LD))); var controller = new DataplaneSelectorControlApiController(validatorRegistry, typeTransformerRegistry, dataPlaneSelectorService, clock); webService.registerResource(ApiContext.CONTROL, controller); diff --git a/extensions/data-plane-selector/data-plane-selector-control-api/src/test/java/org/eclipse/edc/connector/dataplane/selector/control/api/DataplaneSelectorControlApiExtensionTest.java b/extensions/data-plane-selector/data-plane-selector-control-api/src/test/java/org/eclipse/edc/connector/dataplane/selector/control/api/DataplaneSelectorControlApiExtensionTest.java index 40c60ac260..47c74e6d88 100644 --- a/extensions/data-plane-selector/data-plane-selector-control-api/src/test/java/org/eclipse/edc/connector/dataplane/selector/control/api/DataplaneSelectorControlApiExtensionTest.java +++ b/extensions/data-plane-selector/data-plane-selector-control-api/src/test/java/org/eclipse/edc/connector/dataplane/selector/control/api/DataplaneSelectorControlApiExtensionTest.java @@ -9,6 +9,7 @@ * * Contributors: * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation + * Fraunhofer Institute for Software and Systems Engineering - register missing transformer * */ @@ -18,6 +19,7 @@ import org.eclipse.edc.junit.extensions.DependencyInjectionExtension; import org.eclipse.edc.spi.system.ServiceExtensionContext; import org.eclipse.edc.transform.spi.TypeTransformerRegistry; +import org.eclipse.edc.transform.transformer.edc.from.JsonObjectFromDataPlaneInstanceTransformer; import org.eclipse.edc.transform.transformer.edc.to.JsonObjectToDataPlaneInstanceTransformer; import org.eclipse.edc.validator.jsonobject.JsonObjectValidator; import org.eclipse.edc.validator.spi.JsonObjectValidatorRegistry; @@ -65,5 +67,6 @@ void shouldRegisterTransformers(DataplaneSelectorControlApiExtension extension, extension.initialize(context); verify(typeTransformerRegistry).register(isA(JsonObjectToDataPlaneInstanceTransformer.class)); + verify(typeTransformerRegistry).register(isA(JsonObjectFromDataPlaneInstanceTransformer.class)); } } From a972b2e8084ce591764dbe3172ae7df56f6af4e1 Mon Sep 17 00:00:00 2001 From: Tim Dahlmanns Date: Thu, 20 Jun 2024 16:05:12 +0200 Subject: [PATCH 2/3] test(e2e): dataplane selector control api --- ...taplaneSelectorControlApiEndToEndTest.java | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 system-tests/e2e-dataplane-tests/tests/src/test/java/org/eclipse/edc/test/e2e/DataplaneSelectorControlApiEndToEndTest.java diff --git a/system-tests/e2e-dataplane-tests/tests/src/test/java/org/eclipse/edc/test/e2e/DataplaneSelectorControlApiEndToEndTest.java b/system-tests/e2e-dataplane-tests/tests/src/test/java/org/eclipse/edc/test/e2e/DataplaneSelectorControlApiEndToEndTest.java new file mode 100644 index 0000000000..b01a94f5b5 --- /dev/null +++ b/system-tests/e2e-dataplane-tests/tests/src/test/java/org/eclipse/edc/test/e2e/DataplaneSelectorControlApiEndToEndTest.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2024 Fraunhofer Institute for Software and Systems Engineering + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Fraunhofer Institute for Software and Systems Engineering - initial implementation + * + */ + +package org.eclipse.edc.test.e2e; + +import io.restassured.http.ContentType; +import jakarta.json.JsonArray; +import org.eclipse.edc.junit.annotations.EndToEndTest; +import org.eclipse.edc.junit.extensions.EmbeddedRuntime; +import org.eclipse.edc.junit.extensions.RuntimeExtension; +import org.eclipse.edc.junit.extensions.RuntimePerMethodExtension; +import org.eclipse.edc.spi.protocol.ProtocolWebhook; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import java.util.Map; + +import static io.restassured.RestAssured.given; +import static org.assertj.core.api.Assertions.assertThat; +import static org.eclipse.edc.util.io.Ports.getFreePort; +import static org.mockito.Mockito.mock; + +@EndToEndTest +public class DataplaneSelectorControlApiEndToEndTest { + + private final int controlPlaneControlPort = getFreePort(); + + @RegisterExtension + private final RuntimeExtension controlPlane = new RuntimePerMethodExtension(new EmbeddedRuntime( + "control-plane", + Map.of( + "web.http.control.port", String.valueOf(controlPlaneControlPort), + "web.http.control.path", "/control" + ), + ":core:control-plane:control-plane-core", + ":core:data-plane-selector:data-plane-selector-core", + ":extensions:control-plane:transfer:transfer-data-plane-signaling", + ":extensions:common:iam:iam-mock", + ":extensions:common:http", + ":extensions:common:api:control-api-configuration", + ":extensions:data-plane-selector:data-plane-selector-control-api" + )).registerServiceMock(ProtocolWebhook.class, mock()); + + @RegisterExtension + private final RuntimeExtension dataPlane = new RuntimePerMethodExtension(new EmbeddedRuntime( + "data-plane", + Map.of( + "web.http.port", String.valueOf(getFreePort()), + "web.http.path", "/api", + "web.http.control.port", String.valueOf(getFreePort()), + "web.http.control.path", "/control", + "edc.dpf.selector.url", String.format("http://localhost:%d/control/v1/dataplanes", controlPlaneControlPort) + ), + ":core:data-plane:data-plane-core", + ":extensions:data-plane:data-plane-http", + ":extensions:data-plane:data-plane-signaling:data-plane-signaling-api", + ":extensions:common:api:control-api-configuration", + ":extensions:control-plane:api:control-plane-api-client", + ":extensions:data-plane:data-plane-self-registration", + ":extensions:data-plane-selector:data-plane-selector-client", + ":extensions:common:http" + )); + + @Test + void shouldReturnSelfRegisteredDataplane() { + var result = given() + .baseUri("http://localhost:" + controlPlaneControlPort + "/control") + .when() + .get("/v1/dataplanes") + .then() + .statusCode(200) + .contentType(ContentType.JSON) + .extract().body().as(JsonArray.class); + + assertThat(result).hasSize(1); + } +} From 38dab0e9d1ebb0f9e67550387fb9eea7d27a424e Mon Sep 17 00:00:00 2001 From: Tim Dahlmanns Date: Fri, 21 Jun 2024 13:37:13 +0200 Subject: [PATCH 3/3] test(e2e): refactor modules --- .../e2e/DataplaneSelectorControlApiEndToEndTest.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/system-tests/e2e-dataplane-tests/tests/src/test/java/org/eclipse/edc/test/e2e/DataplaneSelectorControlApiEndToEndTest.java b/system-tests/e2e-dataplane-tests/tests/src/test/java/org/eclipse/edc/test/e2e/DataplaneSelectorControlApiEndToEndTest.java index b01a94f5b5..8cae2eac22 100644 --- a/system-tests/e2e-dataplane-tests/tests/src/test/java/org/eclipse/edc/test/e2e/DataplaneSelectorControlApiEndToEndTest.java +++ b/system-tests/e2e-dataplane-tests/tests/src/test/java/org/eclipse/edc/test/e2e/DataplaneSelectorControlApiEndToEndTest.java @@ -62,14 +62,9 @@ public class DataplaneSelectorControlApiEndToEndTest { "web.http.control.path", "/control", "edc.dpf.selector.url", String.format("http://localhost:%d/control/v1/dataplanes", controlPlaneControlPort) ), - ":core:data-plane:data-plane-core", - ":extensions:data-plane:data-plane-http", - ":extensions:data-plane:data-plane-signaling:data-plane-signaling-api", - ":extensions:common:api:control-api-configuration", - ":extensions:control-plane:api:control-plane-api-client", + ":system-tests:e2e-dataplane-tests:runtimes:data-plane", ":extensions:data-plane:data-plane-self-registration", - ":extensions:data-plane-selector:data-plane-selector-client", - ":extensions:common:http" + ":extensions:data-plane-selector:data-plane-selector-client" )); @Test