diff --git a/CHANGELOG.md b/CHANGELOG.md index 16457e3d2be..a58b50ddae5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ in the detailed section referring to by linking pull requests or issues. * Unused classes and interfaces at `ids.spi.policy` (#1471) * Remove modules `:extensions:transfer-functions:transfer-functions-spi` and `:extensions:transfer-functions:transfer-functions-core` (#1482) * Remove `ConnectorVersionProvider`, provide version as static string (#1470) +* Remove `samples/other/run-from-junit` (#1456) #### Fixed diff --git a/samples/other/run-from-junit/build.gradle.kts b/samples/other/run-from-junit/build.gradle.kts deleted file mode 100644 index 3b5c807707e..00000000000 --- a/samples/other/run-from-junit/build.gradle.kts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2020, 2021 Microsoft Corporation - * - * 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: - * Microsoft Corporation - initial API and implementation - * - */ - -plugins { - `java-library` -} - -val jupiterVersion: String by project -val storageBlobVersion: String by project; - -dependencies { - implementation(project(":core")) - implementation(project(":core:defaults")) - - testImplementation(project(":extensions:aws:s3:s3-provision")) - testImplementation(project(":extensions:dataloading")) - testImplementation(project(":extensions:filesystem:configuration-fs")) - testImplementation(project(":data-protocols:ids:ids-core")) - - testImplementation("org.junit.jupiter:junit-jupiter-api:${jupiterVersion}") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${jupiterVersion}") - testImplementation(project(":extensions:junit")) - - -} diff --git a/samples/other/run-from-junit/src/test/java/org/eclipse/dataspaceconnector/junit/ConsumerRunner.java b/samples/other/run-from-junit/src/test/java/org/eclipse/dataspaceconnector/junit/ConsumerRunner.java deleted file mode 100644 index a34d40c7948..00000000000 --- a/samples/other/run-from-junit/src/test/java/org/eclipse/dataspaceconnector/junit/ConsumerRunner.java +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright (c) 2020, 2021 Microsoft Corporation - * - * 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: - * Microsoft Corporation - initial API and implementation - * - */ - -package org.eclipse.dataspaceconnector.junit; - -import org.eclipse.dataspaceconnector.aws.s3.core.S3BucketSchema; -import org.eclipse.dataspaceconnector.ids.spi.Protocols; -import org.eclipse.dataspaceconnector.junit.extensions.EdcExtension; -import org.eclipse.dataspaceconnector.spi.iam.IdentityService; -import org.eclipse.dataspaceconnector.spi.iam.TokenRepresentation; -import org.eclipse.dataspaceconnector.spi.message.RemoteMessageDispatcherRegistry; -import org.eclipse.dataspaceconnector.spi.result.Result; -import org.eclipse.dataspaceconnector.spi.system.ServiceExtension; -import org.eclipse.dataspaceconnector.spi.transfer.TransferProcessManager; -import org.eclipse.dataspaceconnector.spi.transfer.observe.TransferProcessListener; -import org.eclipse.dataspaceconnector.spi.transfer.observe.TransferProcessObservable; -import org.eclipse.dataspaceconnector.spi.transfer.store.TransferProcessStore; -import org.eclipse.dataspaceconnector.spi.types.domain.DataAddress; -import org.eclipse.dataspaceconnector.spi.types.domain.asset.Asset; -import org.eclipse.dataspaceconnector.spi.types.domain.metadata.QueryRequest; -import org.eclipse.dataspaceconnector.spi.types.domain.transfer.DataRequest; -import org.eclipse.dataspaceconnector.spi.types.domain.transfer.TransferProcess; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; - -import java.util.List; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.eclipse.dataspaceconnector.common.types.Cast.cast; -import static org.mockito.ArgumentMatchers.isA; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -@ExtendWith(EdcExtension.class) -@Disabled -public class ConsumerRunner { - private static final String PROVIDER_CONNECTOR = "http://localhost:8181/"; - private static final TokenRepresentation US_TOKEN = TokenRepresentation.Builder.newInstance().token("mock-us").build(); - private static final TokenRepresentation EU_TOKEN = TokenRepresentation.Builder.newInstance().token("mock-eu").build(); - - private CountDownLatch latch; - - @Test - @Disabled - void processConsumerRequest_toAws(RemoteMessageDispatcherRegistry dispatcherRegistry, TransferProcessManager processManager, TransferProcessObservable observable, TransferProcessStore store) throws Exception { - - var query = QueryRequest.Builder.newInstance() - .connectorAddress(PROVIDER_CONNECTOR) - .connectorId(PROVIDER_CONNECTOR) - .queryLanguage("dataspaceconnector") - .query("select *") - .protocol(Protocols.IDS_MULTIPART).build(); - - CompletableFuture> future = cast(dispatcherRegistry.send(List.class, query, () -> null)); - - var artifacts = future.get(); - artifacts = artifacts.stream().findAny().stream().collect(Collectors.toList()); - latch = new CountDownLatch(artifacts.size()); - for (String artifact : artifacts) { - System.out.println("processing artifact " + artifact); - // Initiate a request as a U.S.-based connector for an EU or US allowed artifact (will be accepted) - var usOrEuRequest = createRequestAws("us-eu-request-" + UUID.randomUUID(), Asset.Builder.newInstance().id(artifact).build()); - - var response = processManager.initiateConsumerRequest(usOrEuRequest); - observable.registerListener(new TransferProcessListener() { - @Override - public void preCompleted(TransferProcess process) { - if (process.getId().equals(response.getContent())) { - return; - } - //simulate data egress - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - process.transitionDeprovisioning(); - store.update(process); - } - - @Override - public void preDeprovisioned(TransferProcess process) { - if (process.getId().equals(response.getContent())) { - return; - } - latch.countDown(); - } - }); - } - - // Initiate a request as a U.S.-based connector for an EU-restricted artifact (will be denied) - // var usRequest = createRequestAws("us-request", EU_ARTIFACT); - // processManager.initiateConsumerRequest(usRequest); - - - assertThat(latch.await(5, TimeUnit.MINUTES)).isTrue(); - } - - @Test - @Disabled - void copyFromAzureBlobToAws(RemoteMessageDispatcherRegistry dispatcherRegistry, TransferProcessManager processManager, TransferProcessObservable observable, TransferProcessStore store) throws Exception { - - var query = QueryRequest.Builder.newInstance() - .connectorAddress(PROVIDER_CONNECTOR) - .connectorId(PROVIDER_CONNECTOR) - .queryLanguage("dataspaceconnector") - .query("select *") - .protocol(Protocols.IDS_MULTIPART).build(); - - CompletableFuture> future = cast(dispatcherRegistry.send(List.class, query, () -> null)); - - var artifacts = future.get(); - artifacts = artifacts.stream().findAny().stream().collect(Collectors.toList()); - latch = new CountDownLatch(artifacts.size()); - for (String artifact : artifacts) { - System.out.println("processing artifact " + artifact); - // Initiate a request as a U.S.-based connector for an EU or US allowed artifact (will be accepted) - var usOrEuRequest = createRequestAws("us-eu-request-" + UUID.randomUUID(), Asset.Builder.newInstance().id(artifact).build()); - - var response = processManager.initiateConsumerRequest(usOrEuRequest); - observable.registerListener(new TransferProcessListener() { - @Override - public void preCompleted(TransferProcess process) { - if (process.getId().equals(response.getContent())) { - return; - } - //simulate data egress - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - process.transitionDeprovisioning(); - store.update(process); - } - - @Override - public void preDeprovisioned(TransferProcess process) { - if (!process.getId().equals(response.getContent())) { - return; - } - latch.countDown(); - } - }); - } - - assertThat(latch.await(5, TimeUnit.MINUTES)).isTrue(); - } - - - @Test - @Disabled - void processClientRequest_toAzureStorage(RemoteMessageDispatcherRegistry dispatcherRegistry, TransferProcessManager processManager, TransferProcessObservable observable, TransferProcessStore store) throws Exception { - var query = QueryRequest.Builder.newInstance() - .connectorAddress(PROVIDER_CONNECTOR) - .connectorId(PROVIDER_CONNECTOR) - .queryLanguage("dataspaceconnector") - .query("select *") - .protocol(Protocols.IDS_MULTIPART).build(); - - CompletableFuture> future = cast(dispatcherRegistry.send(List.class, query, () -> null)); - - var artifacts = future.get(); - - assertThat(artifacts).describedAs("Should have returned artifacts!").isNotEmpty(); - - latch = new CountDownLatch(artifacts.size()); - - for (String artifact : artifacts) { - // Initiate a request as a U.S.-based connector for an EU or US allowed artifact (will be accepted) - var usOrEuRequest = createRequestAzure("us-eu-request-" + UUID.randomUUID(), Asset.Builder.newInstance().id(artifact).build()); - - var response = processManager.initiateConsumerRequest(usOrEuRequest); - observable.registerListener(new TransferProcessListener() { - @Override - public void preCompleted(TransferProcess process) { - if (process.getId().equals(response.getContent())) { - return; - } - //simulate data egress - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - process.transitionDeprovisioning(); - store.update(process); - } - - @Override - public void preDeprovisioned(TransferProcess process) { - if (process.getId().equals(response.getContent())) { - return; - } - latch.countDown(); - } - }); - } - - // Initiate a request as a U.S.-based connector for an EU-restricted artifact (will be denied) - // var usRequest = createRequestAzure("us-request", EU_ARTIFACT); - // - // processManager.initiateConsumerRequest(usRequest); - - assertThat(latch.await(5, TimeUnit.MINUTES)).isTrue(); - } - - @BeforeEach - void before(EdcExtension extension) { - IdentityService identityService = mock(IdentityService.class); - when(identityService.obtainClientCredentials(isA(String.class))).thenReturn(Result.success(US_TOKEN)); - - latch = new CountDownLatch(1); - - extension.registerSystemExtension(ServiceExtension.class, TestExtensions.mockIamExtension(identityService)); - } - - private DataRequest createRequestAws(String id, Asset asset) { - return DataRequest.Builder.newInstance() - .id(id) - .protocol(Protocols.IDS_MULTIPART) - .assetId(asset.getId()) - .connectorId(PROVIDER_CONNECTOR) - .connectorAddress(PROVIDER_CONNECTOR) - .destinationType(S3BucketSchema.TYPE).build(); - } - - private DataRequest createRequestAzure(String id, Asset asset) { - return DataRequest.Builder.newInstance() - .id(id) - .protocol(Protocols.IDS_MULTIPART) - .assetId(asset.getId()) - .connectorId(PROVIDER_CONNECTOR) - .connectorAddress(PROVIDER_CONNECTOR) - .dataDestination(DataAddress.Builder.newInstance() - .type("type") - .property("account", "edcdemogpstorage") - .property("container", "temp-dest-container-" + UUID.randomUUID()) - .build()) - .destinationType("type") - .build(); - } -} diff --git a/samples/other/run-from-junit/src/test/java/org/eclipse/dataspaceconnector/junit/EndToEndTest.java b/samples/other/run-from-junit/src/test/java/org/eclipse/dataspaceconnector/junit/EndToEndTest.java deleted file mode 100644 index d4b14aa1680..00000000000 --- a/samples/other/run-from-junit/src/test/java/org/eclipse/dataspaceconnector/junit/EndToEndTest.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright (c) 2020, 2021 Microsoft Corporation - * - * 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: - * Microsoft Corporation - initial API and implementation - * Fraunhofer Institute for Software and Systems Engineering - Improvements - * - */ - -package org.eclipse.dataspaceconnector.junit; - -import org.eclipse.dataspaceconnector.dataloading.AssetLoader; -import org.eclipse.dataspaceconnector.ids.spi.Protocols; -import org.eclipse.dataspaceconnector.junit.extensions.EdcExtension; -import org.eclipse.dataspaceconnector.policy.model.Policy; -import org.eclipse.dataspaceconnector.policy.model.PolicyDefinition; -import org.eclipse.dataspaceconnector.spi.contract.negotiation.store.ContractNegotiationStore; -import org.eclipse.dataspaceconnector.spi.iam.ClaimToken; -import org.eclipse.dataspaceconnector.spi.iam.IdentityService; -import org.eclipse.dataspaceconnector.spi.iam.TokenRepresentation; -import org.eclipse.dataspaceconnector.spi.message.MessageContext; -import org.eclipse.dataspaceconnector.spi.message.RemoteMessageDispatcher; -import org.eclipse.dataspaceconnector.spi.message.RemoteMessageDispatcherRegistry; -import org.eclipse.dataspaceconnector.spi.policy.store.PolicyDefinitionStore; -import org.eclipse.dataspaceconnector.spi.response.StatusResult; -import org.eclipse.dataspaceconnector.spi.result.Result; -import org.eclipse.dataspaceconnector.spi.system.Inject; -import org.eclipse.dataspaceconnector.spi.system.Provides; -import org.eclipse.dataspaceconnector.spi.system.ServiceExtension; -import org.eclipse.dataspaceconnector.spi.system.ServiceExtensionContext; -import org.eclipse.dataspaceconnector.spi.transfer.TransferProcessManager; -import org.eclipse.dataspaceconnector.spi.transfer.flow.DataFlowController; -import org.eclipse.dataspaceconnector.spi.transfer.flow.DataFlowManager; -import org.eclipse.dataspaceconnector.spi.types.domain.DataAddress; -import org.eclipse.dataspaceconnector.spi.types.domain.asset.Asset; -import org.eclipse.dataspaceconnector.spi.types.domain.contract.agreement.ContractAgreement; -import org.eclipse.dataspaceconnector.spi.types.domain.contract.negotiation.ContractNegotiation; -import org.eclipse.dataspaceconnector.spi.types.domain.message.RemoteMessage; -import org.eclipse.dataspaceconnector.spi.types.domain.transfer.DataRequest; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; - -import java.util.UUID; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.isA; -import static org.mockito.ArgumentMatchers.notNull; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@ExtendWith(EdcExtension.class) -public class EndToEndTest { - private static final String ASSET_ID = "test123"; - private static final String CONTRACT_ID = "contract1"; - private static final String POLICY_ID = "policy1"; - - @Test - void processConsumerRequest(TransferProcessManager processManager, RemoteMessageDispatcherRegistry dispatcherRegistry) throws InterruptedException { - var latch = new CountDownLatch(1); - - var dispatcher = mock(RemoteMessageDispatcher.class); - - when(dispatcher.protocol()).thenReturn(Protocols.IDS_MULTIPART); - - when(dispatcher.send(notNull(), isA(RemoteMessage.class), isA(MessageContext.class))).thenAnswer(i -> { - latch.countDown(); - return CompletableFuture.completedFuture(null); - }); - - dispatcherRegistry.register(dispatcher); - - var connectorId = "https://test"; - - var entry = Asset.Builder.newInstance().id(ASSET_ID).build(); - var request = DataRequest.Builder.newInstance().protocol(Protocols.IDS_MULTIPART).assetId(entry.getId()) - .connectorId(connectorId).connectorAddress(connectorId).destinationType("S3").build(); - - processManager.initiateConsumerRequest(request); - - assertThat(latch.await(1, TimeUnit.MINUTES)).isTrue(); - verify(dispatcher).protocol(); - verify(dispatcher).send(notNull(), isA(RemoteMessage.class), isA(MessageContext.class)); - } - - @Test - void processProviderRequest(TransferProcessManager processManager, - DataFlowManager dataFlowManager, - ContractNegotiationStore negotiationStore, - AssetLoader loader, - PolicyDefinitionStore policyStore) throws InterruptedException { - var latch = new CountDownLatch(1); - - var controllerMock = mock(DataFlowController.class); - - when(controllerMock.canHandle(isA(DataRequest.class), isA(DataAddress.class))).thenReturn(true); - when(controllerMock.initiateFlow(isA(DataRequest.class), isA(DataAddress.class), isA(Policy.class))).thenAnswer(i -> { - latch.countDown(); - return StatusResult.success(""); - }); - - dataFlowManager.register(controllerMock); - - var connectorId = "https://test"; - - var asset = Asset.Builder.newInstance().id(ASSET_ID).build(); - - loader.accept(asset, DataAddress.Builder.newInstance().type("test").build()); - - loadNegotiation(negotiationStore, policyStore); - - var request = DataRequest.Builder.newInstance() - .protocol(Protocols.IDS_MULTIPART) - .assetId(asset.getId()) - .contractId(CONTRACT_ID) - .connectorId(connectorId) - .connectorAddress(connectorId) - .destinationType("S3") - .id(UUID.randomUUID().toString()) - .build(); - - processManager.initiateProviderRequest(request); - - assertThat(latch.await(1, TimeUnit.MINUTES)).isTrue(); - verify(controllerMock).canHandle(isA(DataRequest.class), isA(DataAddress.class)); - verify(controllerMock).initiateFlow(isA(DataRequest.class), isA(DataAddress.class), isA(Policy.class)); - } - - @BeforeEach - void before(EdcExtension extension) { - extension.registerSystemExtension(ServiceExtension.class, new TestServiceExtension()); - } - - private void loadNegotiation(ContractNegotiationStore negotiationStore, PolicyDefinitionStore policyStore) { - var contractAgreement = ContractAgreement.Builder.newInstance() - .assetId(ASSET_ID) - .id(CONTRACT_ID) - .policy(Policy.Builder.newInstance().build()) - .consumerAgentId("consumer") - .providerAgentId("provider") - .build(); - - var contractNegotiation = ContractNegotiation.Builder.newInstance() - .id(UUID.randomUUID().toString()) - .counterPartyId(UUID.randomUUID().toString()) - .counterPartyAddress("test") - .protocol("test") - .contractAgreement(contractAgreement) - .build(); - negotiationStore.save(contractNegotiation); - - policyStore.save(PolicyDefinition.Builder.newInstance().policy(Policy.Builder.newInstance().build()).uid(POLICY_ID).build()); - } - - @Provides(IdentityService.class) - private static class TestServiceExtension implements ServiceExtension { - @Inject - private AssetLoader loader; - - @Override - public void initialize(ServiceExtensionContext context) { - context.registerService(IdentityService.class, new IdentityService() { - @Override - public Result obtainClientCredentials(String scope) { - return Result.success(TokenRepresentation.Builder.newInstance().token("test").build()); - } - - @Override - public Result verifyJwtToken(TokenRepresentation tokenRepresentation) { - return Result.success(ClaimToken.Builder.newInstance().build()); - } - }); - } - } -} diff --git a/samples/other/run-from-junit/src/test/java/org/eclipse/dataspaceconnector/junit/TestExtensions.java b/samples/other/run-from-junit/src/test/java/org/eclipse/dataspaceconnector/junit/TestExtensions.java deleted file mode 100644 index 133ff1a29a9..00000000000 --- a/samples/other/run-from-junit/src/test/java/org/eclipse/dataspaceconnector/junit/TestExtensions.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2020, 2021 Microsoft Corporation - * - * 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: - * Microsoft Corporation - initial API and implementation - * - */ - -package org.eclipse.dataspaceconnector.junit; - -import org.eclipse.dataspaceconnector.spi.iam.IdentityService; -import org.eclipse.dataspaceconnector.spi.system.Provides; -import org.eclipse.dataspaceconnector.spi.system.ServiceExtension; -import org.eclipse.dataspaceconnector.spi.system.ServiceExtensionContext; - -public class TestExtensions { - - public static ServiceExtension mockIamExtension(IdentityService identityService) { - return new MockIamExtension(identityService); - } - - @Provides(IdentityService.class) - private static class MockIamExtension implements ServiceExtension { - private final IdentityService identityService; - - MockIamExtension(IdentityService identityService) { - this.identityService = identityService; - } - - @Override - public void initialize(ServiceExtensionContext context) { - context.registerService(IdentityService.class, identityService); - } - } -}