Skip to content

Commit 38b5f5f

Browse files
committed
Harmonize key management in data-plane-transfer
1 parent b0308db commit 38b5f5f

File tree

54 files changed

+642
-665
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+642
-665
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ in the detailed section referring to by linking pull requests or issues.
2525
* Add strict body validation for REST endpoints (#1128)
2626
* Dependency injection using factory/provider methods (#1056)
2727
* Provisioned resource information in Data Management API (#1221)
28+
* Harmonize setting names in `data-plane-transfer` (#1164)
2829

2930
#### Changed
3031

core/transfer/src/main/java/org/eclipse/dataspaceconnector/transfer/core/flow/DataFlowManagerImpl.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void register(DataFlowController controller) {
4242

4343
@WithSpan
4444
@Override
45-
public @NotNull StatusResult<String> initiate(DataRequest dataRequest, DataAddress contentAddress, Policy policy) {
45+
public @NotNull StatusResult<Void> initiate(DataRequest dataRequest, DataAddress contentAddress, Policy policy) {
4646
try {
4747
return controllers.stream()
4848
.filter(controller -> controller.canHandle(dataRequest, contentAddress))

core/transfer/src/main/java/org/eclipse/dataspaceconnector/transfer/core/inline/InlineDataFlowController.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public boolean canHandle(DataRequest dataRequest, DataAddress contentAddress) {
5050
}
5151

5252
@Override
53-
public @NotNull StatusResult<String> initiateFlow(DataRequest dataRequest, DataAddress contentAddress, Policy policy) {
53+
public @NotNull StatusResult<Void> initiateFlow(DataRequest dataRequest, DataAddress contentAddress, Policy policy) {
5454
var destinationType = dataRequest.getDestinationType();
5555
monitor.info(format("Copying data from %s to %s", contentAddress.getType(), destinationType));
5656

@@ -83,6 +83,6 @@ public boolean canHandle(DataRequest dataRequest, DataAddress contentAddress) {
8383
}
8484
}
8585

86-
return StatusResult.success("Inline data flow successful");
86+
return StatusResult.success();
8787
}
8888
}

core/transfer/src/test/java/org/eclipse/dataspaceconnector/transfer/core/flow/DataFlowManagerImplTest.java

+13-9
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
package org.eclipse.dataspaceconnector.transfer.core.flow;
1616

17+
import com.github.javafaker.Faker;
1718
import org.eclipse.dataspaceconnector.policy.model.Policy;
1819
import org.eclipse.dataspaceconnector.spi.EdcException;
1920
import org.eclipse.dataspaceconnector.spi.response.StatusResult;
@@ -30,16 +31,18 @@
3031

3132
class DataFlowManagerImplTest {
3233

34+
private static final Faker FAKER = new Faker();
35+
3336
@Test
3437
void should_initiate_flow_on_correct_controller() {
3538
var manager = new DataFlowManagerImpl();
3639
var controller = mock(DataFlowController.class);
37-
var dataRequest = DataRequest.Builder.newInstance().destinationType("type").build();
40+
var dataRequest = DataRequest.Builder.newInstance().destinationType(FAKER.lorem().word()).build();
3841
var policy = Policy.Builder.newInstance().build();
39-
var dataAddress = DataAddress.Builder.newInstance().type("test").build();
42+
var dataAddress = DataAddress.Builder.newInstance().type(FAKER.lorem().word()).build();
4043

4144
when(controller.canHandle(any(), any())).thenReturn(true);
42-
when(controller.initiateFlow(any(), any(), any())).thenReturn(StatusResult.success("success"));
45+
when(controller.initiateFlow(any(), any(), any())).thenReturn(StatusResult.success());
4346
manager.register(controller);
4447

4548
var response = manager.initiate(dataRequest, dataAddress, policy);
@@ -51,8 +54,8 @@ void should_initiate_flow_on_correct_controller() {
5154
void should_return_fatal_error_if_no_controller_can_handle_the_request() {
5255
var manager = new DataFlowManagerImpl();
5356
var controller = mock(DataFlowController.class);
54-
var dataRequest = DataRequest.Builder.newInstance().destinationType("type").build();
55-
var dataAddress = DataAddress.Builder.newInstance().type("test").build();
57+
var dataRequest = DataRequest.Builder.newInstance().destinationType(FAKER.lorem().word()).build();
58+
var dataAddress = DataAddress.Builder.newInstance().type(FAKER.lorem().word()).build();
5659
var policy = Policy.Builder.newInstance().build();
5760

5861
when(controller.canHandle(any(), any())).thenReturn(false);
@@ -68,18 +71,19 @@ void should_return_fatal_error_if_no_controller_can_handle_the_request() {
6871
void should_catch_exceptions_and_return_fatal_error() {
6972
var manager = new DataFlowManagerImpl();
7073
var controller = mock(DataFlowController.class);
71-
var dataRequest = DataRequest.Builder.newInstance().destinationType("type").build();
72-
var dataAddress = DataAddress.Builder.newInstance().type("test").build();
74+
var dataRequest = DataRequest.Builder.newInstance().destinationType(FAKER.lorem().word()).build();
75+
var dataAddress = DataAddress.Builder.newInstance().type(FAKER.lorem().word()).build();
7376
var policy = Policy.Builder.newInstance().build();
7477

78+
var errorMsg = FAKER.lorem().sentence();
7579
when(controller.canHandle(any(), any())).thenReturn(true);
76-
when(controller.initiateFlow(any(), any(), any())).thenThrow(new EdcException("error"));
80+
when(controller.initiateFlow(any(), any(), any())).thenThrow(new EdcException(errorMsg));
7781
manager.register(controller);
7882

7983
var response = manager.initiate(dataRequest, dataAddress, policy);
8084

8185
assertThat(response.succeeded()).isFalse();
8286
assertThat(response.getFailure().status()).isEqualTo(FATAL_ERROR);
83-
assertThat(response.getFailureMessages()).hasSize(1).first().matches(message -> message.contains("error"));
87+
assertThat(response.getFailureMessages()).hasSize(1).first().matches(message -> message.contains(errorMsg));
8488
}
8589
}

core/transfer/src/test/java/org/eclipse/dataspaceconnector/transfer/core/transfer/TransferProcessManagerImplTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ void provisionedProvider_shouldTransitionToInProgress() throws InterruptedExcept
326326
when(policyArchive.findPolicyForContract(anyString())).thenReturn(Policy.Builder.newInstance().build());
327327
when(policyArchive.findPolicyForContract(anyString())).thenReturn(Policy.Builder.newInstance().build());
328328
when(transferProcessStore.nextForState(eq(PROVISIONED.code()), anyInt())).thenReturn(List.of(process)).thenReturn(emptyList());
329-
when(dataFlowManager.initiate(any(), any(), any())).thenReturn(StatusResult.success("any"));
329+
when(dataFlowManager.initiate(any(), any(), any())).thenReturn(StatusResult.success());
330330
var latch = countDownOnUpdateLatch();
331331

332332
manager.start();
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Data Plane Transfer extension
2+
3+
This extension provides resources used to delegate data transfer to the Data Plane, or to use the Data Plane as a proxy for querying the data.
4+
5+
The setting parameters of this extension are listed below:
6+
7+
| Parameter name | Description | Mandatory | Default value |
8+
|:----------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------|:----------|:---------------------------------------|
9+
| `edc.transfer.proxy.token.signer.privatekey.alias` | Alias of private key used to sign token used to hit Data Plane public API | true | |
10+
| `edc.transfer.proxy.token.verifier.publickey.alias` | Alias of public key used to verify tokens hitting the Data Plane public API (public key must be in the Vault) | false | private key alias suffixed with "-pub" |
11+
| `edc.transfer.proxy.token.validity.seconds` | Validity of tokens generated for hitting Data Plane public API (in seconds) | false | 600 |
12+
| `edc.transfer.proxy.endpoint` | Public API endpoint of the Data Plane (TODO: this has to be dynamically generated by the Data Plane Selector) based on the request | true | |
13+
| `edc.transfer.client.selector.strategy` | Selection strategy used by the client to determine to which Data Plane instance data transfer should be delegated | true | |

extensions/data-plane-transfer/data-plane-transfer-core/build.gradle.kts extensions/data-plane-transfer/build.gradle.kts

+4-9
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,16 @@ plugins {
1616
`java-library`
1717
}
1818

19-
val nimbusVersion: String by project
2019

2120
dependencies {
22-
api(project(":spi:core-spi"))
23-
api(project(":spi:transfer-spi"))
24-
api(project(":extensions:data-plane-transfer:data-plane-transfer-spi"))
25-
api(project(":common:token-generation-lib"))
26-
27-
api("com.nimbusds:nimbus-jose-jwt:${nimbusVersion}")
21+
api(project(":extensions:data-plane-transfer:data-plane-transfer-sync"))
22+
api(project(":extensions:data-plane-transfer:data-plane-transfer-client"))
2823
}
2924

3025
publishing {
3126
publications {
32-
create<MavenPublication>("data-plane-transfer-core") {
33-
artifactId = "data-plane-transfer-core"
27+
create<MavenPublication>("data-plane-transfer") {
28+
artifactId = "data-plane-transfer"
3429
from(components["java"])
3530
}
3631
}

extensions/data-plane-transfer/data-plane-transfer-client/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ val faker: String by project
2424

2525
dependencies {
2626
api(project(":spi:core-spi"))
27+
api(project(":spi:transfer-spi"))
2728
api(project(":extensions:data-plane:data-plane-spi"))
2829
api(project(":extensions:data-plane-transfer:data-plane-transfer-spi"))
2930
api(project(":extensions:data-plane-selector:selector-spi"))

extensions/data-plane-transfer/data-plane-transfer-client/src/main/java/org/eclipse/dataspaceconnector/transfer/dataplane/DataPlaneTransferClientExtension.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@
2424
import org.eclipse.dataspaceconnector.spi.system.ServiceExtension;
2525
import org.eclipse.dataspaceconnector.spi.system.ServiceExtensionContext;
2626
import org.eclipse.dataspaceconnector.spi.transfer.flow.DataFlowManager;
27-
import org.eclipse.dataspaceconnector.transfer.dataplane.client.DataPlaneTransferClient;
2827
import org.eclipse.dataspaceconnector.transfer.dataplane.client.EmbeddedDataPlaneTransferClient;
2928
import org.eclipse.dataspaceconnector.transfer.dataplane.client.RemoteDataPlaneTransferClient;
3029
import org.eclipse.dataspaceconnector.transfer.dataplane.flow.DataPlaneTransferFlowController;
30+
import org.eclipse.dataspaceconnector.transfer.dataplane.spi.client.DataPlaneTransferClient;
3131

3232
import java.util.Objects;
3333

@@ -37,7 +37,7 @@
3737
public class DataPlaneTransferClientExtension implements ServiceExtension {
3838

3939
@EdcSetting
40-
private static final String DPF_SELECTOR_STRATEGY = "edc.dpf.selector.strategy";
40+
private static final String DPF_SELECTOR_STRATEGY = "edc.transfer.client.selector.strategy";
4141

4242
@Inject(required = false)
4343
private DataPlaneSelectorClient selectorClient;

extensions/data-plane-transfer/data-plane-transfer-client/src/main/java/org/eclipse/dataspaceconnector/transfer/dataplane/client/EmbeddedDataPlaneTransferClient.java

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.eclipse.dataspaceconnector.spi.response.ResponseStatus;
2020
import org.eclipse.dataspaceconnector.spi.response.StatusResult;
2121
import org.eclipse.dataspaceconnector.spi.types.domain.transfer.DataFlowRequest;
22+
import org.eclipse.dataspaceconnector.transfer.dataplane.spi.client.DataPlaneTransferClient;
2223

2324
/**
2425
* Implementation of a {@link DataPlaneTransferClient} that uses a local {@link org.eclipse.dataspaceconnector.dataplane.spi.manager.DataPlaneManager},

extensions/data-plane-transfer/data-plane-transfer-client/src/main/java/org/eclipse/dataspaceconnector/transfer/dataplane/client/RemoteDataPlaneTransferClient.java

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.eclipse.dataspaceconnector.spi.response.ResponseStatus;
3232
import org.eclipse.dataspaceconnector.spi.response.StatusResult;
3333
import org.eclipse.dataspaceconnector.spi.types.domain.transfer.DataFlowRequest;
34+
import org.eclipse.dataspaceconnector.transfer.dataplane.spi.client.DataPlaneTransferClient;
3435
import org.jetbrains.annotations.NotNull;
3536

3637
import java.io.IOException;

extensions/data-plane-transfer/data-plane-transfer-client/src/main/java/org/eclipse/dataspaceconnector/transfer/dataplane/flow/DataPlaneTransferFlowController.java

+7-8
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,18 @@
2222
import org.eclipse.dataspaceconnector.spi.types.domain.DataAddress;
2323
import org.eclipse.dataspaceconnector.spi.types.domain.transfer.DataFlowRequest;
2424
import org.eclipse.dataspaceconnector.spi.types.domain.transfer.DataRequest;
25-
import org.eclipse.dataspaceconnector.transfer.dataplane.client.DataPlaneTransferClient;
25+
import org.eclipse.dataspaceconnector.transfer.dataplane.spi.client.DataPlaneTransferClient;
2626
import org.jetbrains.annotations.NotNull;
2727

2828
import java.util.UUID;
2929

30-
import static java.lang.String.join;
31-
import static org.eclipse.dataspaceconnector.transfer.dataplane.spi.DataPlaneTransferType.SYNC;
30+
import static org.eclipse.dataspaceconnector.transfer.dataplane.spi.DataPlaneTransferType.HTTP_PROXY;
3231

3332
/**
3433
* Implementation of {@link DataFlowController} that delegates data transfer to Data Plane instance.
3534
* Note that Data Plane can be embedded in current runtime (test, samples...) or accessed remotely.
3635
* The present {@link DataFlowController} is triggered when destination type in the {@link DataRequest} is different from
37-
* {@link org.eclipse.dataspaceconnector.transfer.dataplane.spi.DataPlaneTransferType#SYNC}, as this one is reserved for synchronous data transfers.
36+
* {@link org.eclipse.dataspaceconnector.transfer.dataplane.spi.DataPlaneTransferType#HTTP_PROXY}, as this one is reserved for synchronous data transfers.
3837
*/
3938
public class DataPlaneTransferFlowController implements DataFlowController {
4039
private final DataPlaneTransferClient client;
@@ -47,20 +46,20 @@ public DataPlaneTransferFlowController(DataPlaneTransferClient client) {
4746
public boolean canHandle(DataRequest dataRequest, DataAddress contentAddress) {
4847
var type = dataRequest.getDestinationType();
4948
if (!StringUtils.isNullOrBlank(type)) {
50-
return !SYNC.equals(dataRequest.getDestinationType());
49+
return !HTTP_PROXY.equals(dataRequest.getDestinationType());
5150
}
5251
return false;
5352
}
5453

5554
@Override
56-
public @NotNull StatusResult<String> initiateFlow(DataRequest dataRequest, DataAddress contentAddress, Policy policy) {
55+
public @NotNull StatusResult<Void> initiateFlow(DataRequest dataRequest, DataAddress contentAddress, Policy policy) {
5756
var dataFlowRequest = createRequest(dataRequest, contentAddress);
5857
var result = client.transfer(dataFlowRequest);
5958
if (result.failed()) {
6059
return StatusResult.failure(ResponseStatus.FATAL_ERROR,
61-
"Failed to delegate data transfer to Data Plane: " + join(", ", result.getFailureMessages()));
60+
"Failed to delegate data transfer to Data Plane: " + String.join(", ", result.getFailureMessages()));
6261
}
63-
return StatusResult.success("");
62+
return StatusResult.success();
6463
}
6564

6665
private DataFlowRequest createRequest(DataRequest dataRequest, DataAddress sourceAddress) {

extensions/data-plane-transfer/data-plane-transfer-client/src/test/java/org/eclipse/dataspaceconnector/transfer/dataplane/client/EmbeddedDataPlaneTransferClientTest.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.github.javafaker.Faker;
1818
import org.eclipse.dataspaceconnector.dataplane.spi.manager.DataPlaneManager;
1919
import org.eclipse.dataspaceconnector.spi.result.Result;
20+
import org.eclipse.dataspaceconnector.transfer.dataplane.spi.client.DataPlaneTransferClient;
2021
import org.junit.jupiter.api.BeforeEach;
2122
import org.junit.jupiter.api.Test;
2223

@@ -26,7 +27,6 @@
2627
import static org.mockito.Mockito.doNothing;
2728
import static org.mockito.Mockito.mock;
2829
import static org.mockito.Mockito.never;
29-
import static org.mockito.Mockito.times;
3030
import static org.mockito.Mockito.verify;
3131
import static org.mockito.Mockito.when;
3232

@@ -52,7 +52,7 @@ void validationFailure_shouldReturnFailedResult() {
5252

5353
var result = client.transfer(request);
5454

55-
verify(dataPlaneManagerMock, times(1)).validate(request);
55+
verify(dataPlaneManagerMock).validate(request);
5656
verify(dataPlaneManagerMock, never()).initiateTransfer(any());
5757

5858
assertThat(result.failed()).isTrue();
@@ -69,8 +69,8 @@ void transferSuccess() {
6969

7070
var result = client.transfer(request);
7171

72-
verify(dataPlaneManagerMock, times(1)).validate(request);
73-
verify(dataPlaneManagerMock, times(1)).initiateTransfer(request);
72+
verify(dataPlaneManagerMock).validate(request);
73+
verify(dataPlaneManagerMock).initiateTransfer(request);
7474

7575
assertThat(result.succeeded()).isTrue();
7676
}

extensions/data-plane-transfer/data-plane-transfer-client/src/test/java/org/eclipse/dataspaceconnector/transfer/dataplane/client/RemoteDataPlaneTransferClientTest.java

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.eclipse.dataspaceconnector.dataplane.selector.instance.DataPlaneInstance;
2323
import org.eclipse.dataspaceconnector.dataplane.spi.response.TransferErrorResponse;
2424
import org.eclipse.dataspaceconnector.spi.response.ResponseStatus;
25+
import org.eclipse.dataspaceconnector.transfer.dataplane.spi.client.DataPlaneTransferClient;
2526
import org.junit.jupiter.api.AfterAll;
2627
import org.junit.jupiter.api.AfterEach;
2728
import org.junit.jupiter.api.BeforeAll;

extensions/data-plane-transfer/data-plane-transfer-client/src/test/java/org/eclipse/dataspaceconnector/transfer/dataplane/flow/DataPlaneTransferFlowControllerTest.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@
2121
import org.eclipse.dataspaceconnector.spi.types.domain.DataAddress;
2222
import org.eclipse.dataspaceconnector.spi.types.domain.transfer.DataFlowRequest;
2323
import org.eclipse.dataspaceconnector.spi.types.domain.transfer.DataRequest;
24-
import org.eclipse.dataspaceconnector.transfer.dataplane.client.DataPlaneTransferClient;
24+
import org.eclipse.dataspaceconnector.transfer.dataplane.spi.client.DataPlaneTransferClient;
2525
import org.junit.jupiter.api.BeforeEach;
2626
import org.junit.jupiter.api.Test;
2727
import org.mockito.ArgumentCaptor;
2828

2929
import static org.assertj.core.api.Assertions.assertThat;
30-
import static org.eclipse.dataspaceconnector.transfer.dataplane.spi.DataPlaneTransferType.SYNC;
30+
import static org.eclipse.dataspaceconnector.transfer.dataplane.spi.DataPlaneTransferType.HTTP_PROXY;
3131
import static org.mockito.ArgumentMatchers.any;
3232
import static org.mockito.Mockito.mock;
3333
import static org.mockito.Mockito.times;
@@ -50,9 +50,9 @@ public void setUp() {
5050

5151
@Test
5252
void canHandle() {
53-
var contentAddress = DataAddress.Builder.newInstance().type(SYNC).build();
53+
var contentAddress = DataAddress.Builder.newInstance().type(HTTP_PROXY).build();
5454
assertThat(flowController.canHandle(createDataRequest(), contentAddress)).isTrue();
55-
assertThat(flowController.canHandle(createDataRequest(SYNC), contentAddress)).isFalse();
55+
assertThat(flowController.canHandle(createDataRequest(HTTP_PROXY), contentAddress)).isFalse();
5656
}
5757

5858
@Test

0 commit comments

Comments
 (0)