Skip to content

Commit e2e0e78

Browse files
authored
chore: fix tests (#410)
1 parent 96880ed commit e2e0e78

File tree

8 files changed

+74
-24
lines changed

8 files changed

+74
-24
lines changed

extensions/data-plane/data-plane-azure-storage/src/main/java/org/eclipse/edc/connector/dataplane/azure/storage/DataPlaneAzureStorageExtension.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.eclipse.edc.connector.dataplane.azure.storage.pipeline.AzureStorageDataSourceFactory;
2424
import org.eclipse.edc.connector.dataplane.spi.pipeline.DataTransferExecutorServiceContainer;
2525
import org.eclipse.edc.connector.dataplane.spi.pipeline.PipelineService;
26+
import org.eclipse.edc.participantcontext.single.spi.SingleParticipantContextSupplier;
2627
import org.eclipse.edc.runtime.metamodel.annotation.Extension;
2728
import org.eclipse.edc.runtime.metamodel.annotation.Inject;
2829
import org.eclipse.edc.runtime.metamodel.annotation.Setting;
@@ -54,6 +55,8 @@ public class DataPlaneAzureStorageExtension implements ServiceExtension {
5455
private Vault vault;
5556
@Inject
5657
private TypeManager typeManager;
58+
@Inject
59+
private SingleParticipantContextSupplier participantContextSupplier;
5760

5861
@Override
5962
public String name() {
@@ -70,7 +73,7 @@ public void initialize(ServiceExtensionContext context) {
7073

7174
var sourceFactory = new AzureStorageDataSourceFactory(blobStoreApi, retryPolicy, monitor, vault);
7275
pipelineService.registerFactory(sourceFactory);
73-
var sinkFactory = new AzureStorageDataSinkFactory(blobStoreApi, executorContainer.getExecutorService(), 5, monitor, vault, typeManager, metadataProvider);
76+
var sinkFactory = new AzureStorageDataSinkFactory(participantContextSupplier, blobStoreApi, executorContainer.getExecutorService(), 5, monitor, vault, typeManager, metadataProvider);
7477
pipelineService.registerFactory(sinkFactory);
7578
}
7679
}

extensions/data-plane/data-plane-azure-storage/src/main/java/org/eclipse/edc/connector/dataplane/azure/storage/pipeline/AzureStorageDataSinkFactory.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.eclipse.edc.connector.dataplane.azure.storage.metadata.BlobMetadataProvider;
2222
import org.eclipse.edc.connector.dataplane.spi.pipeline.DataSink;
2323
import org.eclipse.edc.connector.dataplane.spi.pipeline.DataSinkFactory;
24+
import org.eclipse.edc.participantcontext.single.spi.SingleParticipantContextSupplier;
2425
import org.eclipse.edc.spi.EdcException;
2526
import org.eclipse.edc.spi.monitor.Monitor;
2627
import org.eclipse.edc.spi.result.Result;
@@ -43,6 +44,7 @@
4344
* Instantiates {@link AzureStorageDataSink}s for requests whose source data type is {@link AzureBlobStoreSchema#TYPE}.
4445
*/
4546
public class AzureStorageDataSinkFactory implements DataSinkFactory {
47+
private final SingleParticipantContextSupplier singleParticipantContextSupplier;
4648
private final BlobStoreApi blobStoreApi;
4749
private final ExecutorService executorService;
4850
private final int partitionSize;
@@ -51,7 +53,9 @@ public class AzureStorageDataSinkFactory implements DataSinkFactory {
5153
private final TypeManager typeManager;
5254
private final BlobMetadataProvider metadataProvider;
5355

54-
public AzureStorageDataSinkFactory(BlobStoreApi blobStoreApi, ExecutorService executorService, int partitionSize, Monitor monitor, Vault vault, TypeManager typeManager, BlobMetadataProvider metadataProvider) {
56+
public AzureStorageDataSinkFactory(SingleParticipantContextSupplier singleParticipantContextSupplier,
57+
BlobStoreApi blobStoreApi, ExecutorService executorService, int partitionSize, Monitor monitor, Vault vault, TypeManager typeManager, BlobMetadataProvider metadataProvider) {
58+
this.singleParticipantContextSupplier = singleParticipantContextSupplier;
5559
this.blobStoreApi = blobStoreApi;
5660
this.executorService = executorService;
5761
this.partitionSize = partitionSize;
@@ -76,7 +80,10 @@ public DataSink createSink(DataFlowStartMessage request) {
7680
var dataAddress = request.getDestinationDataAddress();
7781
var requestId = request.getId();
7882

79-
var secret = vault.resolveSecret(dataAddress.getKeyName());
83+
var participantContext = singleParticipantContextSupplier.get()
84+
.orElseThrow(f -> new EdcException("Failed to obtain participant context for data sink creation"));
85+
86+
var secret = vault.resolveSecret(participantContext.getParticipantContextId(), dataAddress.getKeyName());
8087

8188
if (secret == null) {
8289
throw new EdcException("SAS token for the Azure Blob DataSink not found in Vault (alias = '%s')".formatted(dataAddress.getKeyName()));

extensions/data-plane/data-plane-azure-storage/src/test/java/org/eclipse/edc/connector/dataplane/azure/storage/AzureDataPlaneCopyIntegrationTest.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@
3232
import org.eclipse.edc.connector.dataplane.azure.storage.pipeline.AzureStorageDataSinkFactory;
3333
import org.eclipse.edc.connector.dataplane.azure.storage.pipeline.AzureStorageDataSourceFactory;
3434
import org.eclipse.edc.json.JacksonTypeManager;
35+
import org.eclipse.edc.participantcontext.single.spi.SingleParticipantContextSupplier;
36+
import org.eclipse.edc.participantcontext.spi.types.ParticipantContext;
3537
import org.eclipse.edc.spi.monitor.Monitor;
38+
import org.eclipse.edc.spi.result.ServiceResult;
3639
import org.eclipse.edc.spi.security.Vault;
3740
import org.eclipse.edc.spi.types.TypeManager;
3841
import org.eclipse.edc.spi.types.domain.DataAddress;
@@ -92,6 +95,12 @@ class AzureDataPlaneCopyIntegrationTest extends AbstractAzureBlobTest {
9295
new AzuriteExtension.Account(CONSUMER_STORAGE_ACCOUNT_NAME, CONSUMER_STORAGE_ACCOUNT_KEY)
9396
);
9497

98+
private final ParticipantContext participantContext = ParticipantContext.Builder.newInstance()
99+
.participantContextId("participant-id")
100+
.identity("identity")
101+
.build();
102+
private final SingleParticipantContextSupplier participantContextSupplier = () -> ServiceResult.success(participantContext);
103+
95104
@BeforeEach
96105
void setUp() {
97106
createContainer(consumerBlobServiceClient, sinkContainerName);
@@ -155,7 +164,7 @@ public BlobAdapter getBlobAdapter(String accountName, String containerName, Stri
155164

156165
var metadataProvider = new BlobMetadataProviderImpl(monitor);
157166
metadataProvider.registerDecorator(new CommonBlobMetadataDecorator("participant-id", "connector-id"));
158-
var dataSinkFactory = new AzureStorageDataSinkFactory(account2ApiPatched, executor, partitionSize, monitor, vault, typeManager, metadataProvider);
167+
var dataSinkFactory = new AzureStorageDataSinkFactory(participantContextSupplier, account2ApiPatched, executor, partitionSize, monitor, vault, typeManager, metadataProvider);
159168
var dataSink = dataSinkFactory.createSink(request);
160169

161170
assertThat(dataSink.transfer(dataSource))

extensions/data-plane/data-plane-azure-storage/src/test/java/org/eclipse/edc/connector/dataplane/azure/storage/pipeline/AzureStorageDataSinkFactoryTest.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@
2020
import org.eclipse.edc.connector.dataplane.azure.storage.metadata.BlobMetadataProvider;
2121
import org.eclipse.edc.connector.dataplane.azure.storage.metadata.BlobMetadataProviderImpl;
2222
import org.eclipse.edc.json.JacksonTypeManager;
23+
import org.eclipse.edc.participantcontext.single.spi.SingleParticipantContextSupplier;
24+
import org.eclipse.edc.participantcontext.spi.types.ParticipantContext;
2325
import org.eclipse.edc.spi.EdcException;
2426
import org.eclipse.edc.spi.monitor.Monitor;
27+
import org.eclipse.edc.spi.result.ServiceResult;
2528
import org.eclipse.edc.spi.security.Vault;
2629
import org.eclipse.edc.spi.types.TypeManager;
2730
import org.eclipse.edc.spi.types.domain.DataAddress;
@@ -47,7 +50,12 @@ class AzureStorageDataSinkFactoryTest {
4750
private final TypeManager typeManager = new JacksonTypeManager();
4851
private final Monitor monitor = mock();
4952
private final BlobMetadataProvider metadataProvider = new BlobMetadataProviderImpl(monitor);
50-
private final AzureStorageDataSinkFactory factory = new AzureStorageDataSinkFactory(blobStoreApi, Executors.newFixedThreadPool(1), 5, monitor, vault, typeManager, metadataProvider);
53+
private final ParticipantContext participantContext = ParticipantContext.Builder.newInstance()
54+
.participantContextId("participant-id")
55+
.identity("identity")
56+
.build();
57+
private final SingleParticipantContextSupplier participantContextSupplier = () -> ServiceResult.success(participantContext);
58+
private final AzureStorageDataSinkFactory factory = new AzureStorageDataSinkFactory(participantContextSupplier, blobStoreApi, Executors.newFixedThreadPool(1), 5, monitor, vault, typeManager, metadataProvider);
5159
private final DataFlowStartMessage.Builder request = createRequest(AzureBlobStoreSchema.TYPE);
5260
private final DataFlowStartMessage.Builder invalidRequest = createRequest("test-type");
5361
private final DataAddress.Builder dataAddress = DataAddress.Builder.newInstance().type(AzureBlobStoreSchema.TYPE);
@@ -115,7 +123,7 @@ void validate_whenMissingKeyName_fails() {
115123

116124
@Test
117125
void createSink_whenValidRequest_succeeds() {
118-
when(vault.resolveSecret(keyName)).thenReturn(typeManager.writeValueAsString(token));
126+
when(vault.resolveSecret(participantContext.getParticipantContextId(), keyName)).thenReturn(typeManager.writeValueAsString(token));
119127
var validRequest = request.destinationDataAddress(dataAddress
120128
.property(AzureBlobStoreSchema.ACCOUNT_NAME, accountName)
121129
.property(AzureBlobStoreSchema.CONTAINER_NAME, containerName)

extensions/data-plane/data-plane-provision-blob/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ plugins {
2020
dependencies {
2121
api(libs.edc.spi.core)
2222
api(libs.edc.spi.dataplane)
23+
api(libs.edc.spi.participant.context.single)
2324

2425
implementation(libs.edc.lib.util)
2526
implementation(project(":extensions:common:azure:azure-blob-core"))

extensions/data-plane/data-plane-provision-blob/src/main/java/org/eclipse/edc/connector/dataplane/provision/azure/AzureProvisionExtension.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.eclipse.edc.connector.dataplane.provision.azure.blob.ObjectStorageProvisioner;
2424
import org.eclipse.edc.connector.dataplane.spi.provision.ProvisionerManager;
2525
import org.eclipse.edc.connector.dataplane.spi.provision.ResourceDefinitionGeneratorManager;
26+
import org.eclipse.edc.participantcontext.single.spi.SingleParticipantContextSupplier;
2627
import org.eclipse.edc.runtime.metamodel.annotation.Configuration;
2728
import org.eclipse.edc.runtime.metamodel.annotation.Inject;
2829
import org.eclipse.edc.spi.monitor.Monitor;
@@ -60,14 +61,17 @@ public class AzureProvisionExtension implements ServiceExtension {
6061
@Inject
6162
private Monitor monitor;
6263

64+
@Inject
65+
private SingleParticipantContextSupplier participantContextSupplier;
66+
6367
@Override
6468
public String name() {
6569
return "Dataplane Azure Provisioner";
6670
}
6771

6872
@Override
6973
public void initialize(ServiceExtensionContext context) {
70-
provisionManager.register(new ObjectStorageProvisioner(retryPolicy, context.getMonitor(), blobStoreApi, azureProvisionConfiguration, vault, typeManager));
74+
provisionManager.register(new ObjectStorageProvisioner(retryPolicy, context.getMonitor(), blobStoreApi, azureProvisionConfiguration, vault, typeManager, participantContextSupplier));
7175
provisionManager.register(new ObjectStorageDeprovisioner());
7276
manifestGenerator.registerConsumerGenerator(new ObjectStorageConsumerProvisionResourceGenerator(monitor.withPrefix("AzureStorageProvisioner")));
7377

extensions/data-plane/data-plane-provision-blob/src/main/java/org/eclipse/edc/connector/dataplane/provision/azure/blob/ObjectStorageProvisioner.java

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.eclipse.edc.connector.dataplane.spi.provision.ProvisionResource;
2424
import org.eclipse.edc.connector.dataplane.spi.provision.ProvisionedResource;
2525
import org.eclipse.edc.connector.dataplane.spi.provision.Provisioner;
26+
import org.eclipse.edc.participantcontext.single.spi.SingleParticipantContextSupplier;
2627
import org.eclipse.edc.spi.monitor.Monitor;
2728
import org.eclipse.edc.spi.response.ResponseStatus;
2829
import org.eclipse.edc.spi.response.StatusResult;
@@ -43,17 +44,19 @@ public class ObjectStorageProvisioner implements Provisioner {
4344
private final AzureProvisionConfiguration azureProvisionConfiguration;
4445
private final Vault vault;
4546
private final TypeManager typeManager;
47+
private final SingleParticipantContextSupplier participantContextSupplier;
4648

4749
public ObjectStorageProvisioner(RetryPolicy<Object> retryPolicy, Monitor monitor, BlobStoreApi blobStoreApi,
4850
AzureProvisionConfiguration azureProvisionConfiguration,
4951
Vault vault,
50-
TypeManager typeManager) {
52+
TypeManager typeManager, SingleParticipantContextSupplier participantContextSupplier) {
5153
this.retryPolicy = retryPolicy;
5254
this.monitor = monitor;
5355
this.blobStoreApi = blobStoreApi;
5456
this.azureProvisionConfiguration = azureProvisionConfiguration;
5557
this.vault = vault;
5658
this.typeManager = typeManager;
59+
this.participantContextSupplier = participantContextSupplier;
5760
}
5861

5962
@Override
@@ -86,20 +89,26 @@ public CompletableFuture<StatusResult<ProvisionedResource>> provision(ProvisionR
8689

8790
var secretToken = new AzureSasToken("?" + writeOnlySas, expiryTime.toInstant().toEpochMilli());
8891

89-
try {
90-
vault.storeSecret(resourceName, typeManager.getMapper().writeValueAsString(secretToken));
91-
} catch (JsonProcessingException e) {
92-
return StatusResult.failure(ResponseStatus.FATAL_ERROR, "Cannot serialize secret token: " + e.getMessage());
92+
var participantContext = participantContextSupplier.get();
93+
94+
if (participantContext.succeeded()) {
95+
try {
96+
vault.storeSecret(participantContext.getContent().getParticipantContextId(), resourceName, typeManager.getMapper().writeValueAsString(secretToken));
97+
} catch (JsonProcessingException e) {
98+
return StatusResult.failure(ResponseStatus.FATAL_ERROR, "Cannot serialize secret token: " + e.getMessage());
99+
}
100+
101+
var response = ProvisionedResource.Builder
102+
.from(provisionResource)
103+
.dataAddress(DataAddress.Builder.newInstance()
104+
.properties(provisionResource.getDataAddress().getProperties())
105+
.keyName(resourceName)
106+
.build())
107+
.build();
108+
return StatusResult.success(response);
109+
} else {
110+
return StatusResult.failure(ResponseStatus.FATAL_ERROR, "Cannot access participant context: " + participantContext.getFailure().getMessages());
93111
}
94-
95-
var response = ProvisionedResource.Builder
96-
.from(provisionResource)
97-
.dataAddress(DataAddress.Builder.newInstance()
98-
.properties(provisionResource.getDataAddress().getProperties())
99-
.keyName(resourceName)
100-
.build())
101-
.build();
102-
return StatusResult.success(response);
103112
});
104113
}
105114

extensions/data-plane/data-plane-provision-blob/src/test/java/org/eclipse/edc/connector/dataplane/provision/azure/blob/ObjectStorageProvisionerTest.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@
2222
import org.eclipse.edc.connector.dataplane.spi.provision.ProvisionResource;
2323
import org.eclipse.edc.connector.dataplane.spi.provision.ProvisionedResource;
2424
import org.eclipse.edc.json.JacksonTypeManager;
25+
import org.eclipse.edc.participantcontext.single.spi.SingleParticipantContextSupplier;
26+
import org.eclipse.edc.participantcontext.spi.types.ParticipantContext;
2527
import org.eclipse.edc.spi.monitor.Monitor;
28+
import org.eclipse.edc.spi.result.ServiceResult;
2629
import org.eclipse.edc.spi.security.Vault;
2730
import org.eclipse.edc.spi.types.TypeManager;
2831
import org.eclipse.edc.spi.types.domain.DataAddress;
@@ -55,10 +58,16 @@ class ObjectStorageProvisionerTest {
5558
private final TypeManager typeManager = new JacksonTypeManager();
5659
private ObjectStorageProvisioner provisioner;
5760

61+
private final ParticipantContext participantContext = ParticipantContext.Builder.newInstance()
62+
.participantContextId("participant-id")
63+
.identity("identity")
64+
.build();
65+
private final SingleParticipantContextSupplier participantContextSupplier = () -> ServiceResult.success(participantContext);
66+
5867
@BeforeEach
5968
void setup() {
6069
RetryPolicy<Object> retryPolicy = RetryPolicy.builder().withMaxRetries(0).build();
61-
provisioner = new ObjectStorageProvisioner(retryPolicy, mock(Monitor.class), blobStoreApiMock, azureProvisionConfiguration, vault, typeManager);
70+
provisioner = new ObjectStorageProvisioner(retryPolicy, mock(Monitor.class), blobStoreApiMock, azureProvisionConfiguration, vault, typeManager, participantContextSupplier);
6271
}
6372

6473
@Test
@@ -86,7 +95,7 @@ void provision_withFolder_andBlob_success() {
8695

8796
verify(blobStoreApiMock).exists(anyString(), anyString());
8897
verify(blobStoreApiMock).createContainer(accountName, containerName);
89-
verify(vault).storeSecret(anyString(), anyString());
98+
verify(vault).storeSecret(eq(participantContext.getParticipantContextId()), anyString(), anyString());
9099
}
91100

92101
@Test
@@ -110,7 +119,7 @@ void provision_success() {
110119

111120
verify(blobStoreApiMock).exists(anyString(), anyString());
112121
verify(blobStoreApiMock).createContainer(accountName, containerName);
113-
verify(vault).storeSecret(anyString(), anyString());
122+
verify(vault).storeSecret(eq(participantContext.getParticipantContextId()), anyString(), anyString());
114123
}
115124

116125
@Test

0 commit comments

Comments
 (0)