diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 4f74bf45e..611371ec6 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -2,7 +2,7 @@ name: Bug report about: Create a report to help us improve title: '' -labels: bug +labels: ["bug", "triage"] assignees: '' --- @@ -28,9 +28,9 @@ _A clear and concise description of what you expected to happen._ _If applicable, add screenshots and/or error messages to help explain your problem._ -## Context Informations +## Context Information -_Add any other context about the probleme here._ +_Add any other context or information about the problem here._ - Used version: [e.g. Commit Hash] - OS: [e.g. Mac OS (M1), Windows, Linux] diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 62c89ee8c..f091eb007 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,23 +1,28 @@ --- -name: Feature request -about: Suggest an idea for this project +name: Feature Request +about: Request a new feature title: '' -labels: enhancement +labels: ['triage', 'enhancement'] assignees: '' --- -_If you are missing a feature or have an idea how to improve this project that should first be -discussed, please feel free to open up a [discussion](https://github.com/eclipse-tractusx/tractusx-edc/discussions/categories/ideas)._ +## WHAT -**Is your feature request related to a problem? Please describe.** -_A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]_ +// describes the desired functionality and how the feature should behave. This should include clear requirements, and a "definition-of-done", i.e. what the result of the issue should be. This is important for concept, documentation or ideation issues -**Describe the solution you'd like** -_A clear and concise description of what you want to happen._ +## WHY +// outlines the motivation, why the feature is desired, and possibly what the impact is if the feature is _not_ +implemented. "Because we need it" is not a sufficient reason! -**Describe alternatives you've considered** -_A clear and concise description of any alternative solutions or features you've considered._ +## HOW -**Additional context** -_Add any other context or screenshots about the feature request here._ +// if possible, outlines a solution proposal + +## FURTHER NOTES + +// anything else you want to outline + +_Please be sure to take a look at +our [contribution guidelines](https://github.com/eclipse-tractusx/tractusx-edc/blob/main/CONTRIBUTING.md) and +our [PR etiquette](https://github.com/eclipse-tractusx/tractusx-edc/blob/main/pr_etiquette.md)._ \ No newline at end of file diff --git a/.github/actions/setup-java/action.yml b/.github/actions/setup-java/action.yml index ed03fafb3..530d3d6ac 100644 --- a/.github/actions/setup-java/action.yml +++ b/.github/actions/setup-java/action.yml @@ -25,8 +25,8 @@ runs: using: "composite" steps: - name: Setup JDK 17 - uses: actions/setup-java@v3.11.0 + uses: actions/setup-java@v3.13.0 with: java-version: '17' distribution: 'temurin' - cache: 'gradle' \ No newline at end of file + cache: 'gradle' diff --git a/.github/release.yaml b/.github/release.yaml new file mode 100644 index 000000000..1caf62f14 --- /dev/null +++ b/.github/release.yaml @@ -0,0 +1,34 @@ +# +# Copyright (c) 2021, 2023 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# 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 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +--- +changelog: + exclude: + authors: + - dependabot[bot] + categories: + - title: Bugfixes + labels: + - bug + - title: New Features & Improvements + labels: + - "*" + - title: Documentation + labels: + - documentation \ No newline at end of file diff --git a/.github/workflows/deployment-test.yaml b/.github/workflows/deployment-test.yaml index 3060eb940..1ec1365ca 100644 --- a/.github/workflows/deployment-test.yaml +++ b/.github/workflows/deployment-test.yaml @@ -56,7 +56,7 @@ jobs: runs-on: ubuntu-latest needs: test-prepare steps: - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 - uses: ./.github/actions/run-deployment-test name: "Run deployment test using KinD and Helm" with: @@ -80,7 +80,7 @@ jobs: needs: test-prepare steps: - name: Checkout - uses: actions/checkout@v3.5.2 + uses: actions/checkout@v4 - uses: ./.github/actions/run-deployment-test name: "Run deployment test using KinD and Helm" with: @@ -107,7 +107,7 @@ jobs: needs.secret-presence.outputs.AZURE_KV_CREDS steps: - name: Checkout - uses: actions/checkout@v3.3.0 + uses: actions/checkout@v4 - name: "Login to AZ CLI" run: | az login --service-principal -u="${{ secrets.AZURE_CLIENT_ID }}" --password="${{ secrets.AZURE_CLIENT_SECRET }}" --tenant="${{ secrets.AZURE_TENANT_ID }}" diff --git a/.github/workflows/draft-new-release.yaml b/.github/workflows/draft-new-release.yaml index 221ff3e21..7dfba2698 100644 --- a/.github/workflows/draft-new-release.yaml +++ b/.github/workflows/draft-new-release.yaml @@ -37,7 +37,7 @@ jobs: pages: write pull-requests: write steps: - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 - name: Create release branch run: git checkout -b release/${{ github.event.inputs.version }} - name: Initialize mandatory git config @@ -53,7 +53,7 @@ jobs: GITHUB_PACKAGE_USERNAME: ${{ github.actor }} GITHUB_PACKAGE_PASSWORD: ${{ secrets.GITHUB_TOKEN }} - name: Bump version in /charts - uses: mikefarah/yq@v4.35.1 + uses: mikefarah/yq@v4.35.2 with: cmd: |- find charts -name Chart.yaml -maxdepth 3 | xargs -n1 yq -i '.appVersion = "${{ github.event.inputs.version }}" | .version = "${{ github.event.inputs.version }}"' diff --git a/.github/workflows/helm-lint.yaml b/.github/workflows/helm-lint.yaml index 37cdb0c3d..ead85858a 100644 --- a/.github/workflows/helm-lint.yaml +++ b/.github/workflows/helm-lint.yaml @@ -44,7 +44,7 @@ jobs: ############## ### Set-Up ### ############## - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: helm (setup) diff --git a/.github/workflows/kics.yml b/.github/workflows/kics.yml index 0d824632e..54eae1822 100644 --- a/.github/workflows/kics.yml +++ b/.github/workflows/kics.yml @@ -40,7 +40,7 @@ jobs: security-events: write steps: - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 - name: KICS scan uses: checkmarx/kics-github-action@v1.5 diff --git a/.github/workflows/publish-docker.yaml b/.github/workflows/publish-docker.yaml index ecf936722..73a667577 100644 --- a/.github/workflows/publish-docker.yaml +++ b/.github/workflows/publish-docker.yaml @@ -54,7 +54,7 @@ jobs: contents: write packages: write steps: - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 - uses: ./.github/actions/publish-docker-image name: Publish ${{ matrix.variant.img }} with: diff --git a/.github/workflows/publish-docusaurus.yaml b/.github/workflows/publish-docusaurus.yaml new file mode 100644 index 000000000..f940168c5 --- /dev/null +++ b/.github/workflows/publish-docusaurus.yaml @@ -0,0 +1,76 @@ +# +# Copyright (c) 2023 Mercedes Benz Tech Innovation GmbH +# Copyright (c) 2021, 2023 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# 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 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +--- +name: "Publish docusaurus documentation" + +on: + workflow_dispatch: + inputs: + downstream-version: + required: false + type: string + workflow_call: + inputs: + downstream-version: + required: false + type: string + +jobs: + publish-docusaurus: + permissions: + contents: write + packages: write + name: "Publish docusaurus documentation as zip file" + runs-on: ubuntu-latest + env: + SWAGGERHUB_API_KEY: ${{ secrets.SWAGGERHUB_API_KEY }} + SWAGGERHUB_USER: ${{ secrets.SWAGGERHUB_USER }} + steps: + - uses: actions/checkout@v4 + + - uses: ./.github/actions/setup-java + + - name: "Extract version" + id: extract_version + run: | + if [ -z ${{ inputs.downstream-version }} ]; then + echo "DOWNSTREAM_VERSION=$(grep "version" gradle.properties | awk -F= '{print $2}')" >> "$GITHUB_OUTPUT" + else + echo "DOWNSTREAM_VERSION=${{ inputs.downstream-version }}" >> "$GITHUB_OUTPUT" + fi + + - name: "Run autodoc" + run: | + ./gradlew autodoc + ./gradlew mergeManifests + ./gradlew doc2md + + - name: "Gather documentation files" + run: | + chmod +x ./resources/create_kit_documentation.sh + ./resources/create_kit_documentation.sh ${{ runner.temp }} $(pwd) ${{ steps.extract_version.outputs.DOWNSTREAM_VERSION }} + + - name: Publish zip to GitHub Release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ runner.temp }}/tractusx-edc-docusaurus-${{ steps.extract_version.outputs.DOWNSTREAM_VERSION }}.zip + tag: ${{ steps.extract_version.outputs.DOWNSTREAM_VERSION }} diff --git a/.github/workflows/publish-maven.yaml b/.github/workflows/publish-maven.yaml index 5624843f9..f146aad35 100644 --- a/.github/workflows/publish-maven.yaml +++ b/.github/workflows/publish-maven.yaml @@ -42,7 +42,7 @@ jobs: packages: write steps: # Set-Up - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 - uses: ./.github/actions/setup-java # Import GPG Key diff --git a/.github/workflows/publish-new-release.yml b/.github/workflows/publish-new-release.yml index 7e000da16..262456bc7 100644 --- a/.github/workflows/publish-new-release.yml +++ b/.github/workflows/publish-new-release.yml @@ -70,7 +70,7 @@ jobs: echo "RELEASE_VERSION=${{ needs.release-version.outputs.RELEASE_VERSION }}" >> $GITHUB_ENV # Set-Up - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 - uses: ./.github/actions/setup-java # Import GPG Key @@ -107,7 +107,7 @@ jobs: { dir: edc-dataplane, img: edc-dataplane-hashicorp-vault } ] steps: - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 - name: Export RELEASE_VERSION env run: | echo "RELEASE_VERSION=${{ needs.release-version.outputs.RELEASE_VERSION }}" >> $GITHUB_ENV @@ -136,7 +136,7 @@ jobs: - name: Export RELEASE_VERSION env run: | echo "RELEASE_VERSION=${{ needs.release-version.outputs.RELEASE_VERSION }}" >> $GITHUB_ENV - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Install Helm @@ -179,7 +179,7 @@ jobs: - name: Export RELEASE_VERSION env run: | echo "RELEASE_VERSION=${{ needs.release-version.outputs.RELEASE_VERSION }}" >> $GITHUB_ENV - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 with: # 0 to fetch the full history due to upcoming merge of releases into main branch fetch-depth: 0 @@ -249,3 +249,14 @@ jobs: with: downstream-version: ${{ needs.release-version.outputs.RELEASE_VERSION }} secrets: inherit + + publish-docusaurus: + name: Publish docusaurus docs + permissions: + contents: write + packages: write + needs: [ secret-presence, publish-to-swaggerhub, github-release ] + with: + downstream-version: ${{ needs.release-version.outputs.RELEASE_VERSION }} + uses: ./.github/workflows/publish-docusaurus.yaml + secrets: inherit diff --git a/.github/workflows/publish-swaggerhub.yaml b/.github/workflows/publish-swaggerhub.yaml index 2529a093d..e06032279 100644 --- a/.github/workflows/publish-swaggerhub.yaml +++ b/.github/workflows/publish-swaggerhub.yaml @@ -49,14 +49,9 @@ jobs: SWAGGERHUB_API_KEY: ${{ secrets.SWAGGERHUB_API_KEY }} SWAGGERHUB_USER: ${{ secrets.SWAGGERHUB_USER }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - name: Setup JDK 17 - uses: actions/setup-java@v3.12.0 - with: - java-version: '17' - distribution: 'temurin' - cache: 'gradle' + - uses: ./.github/actions/setup-java - name: Setup node uses: actions/setup-node@v3 @@ -110,4 +105,4 @@ jobs: else echo "snapshot, will set the API to 'unpublished'"; swaggerhub api:update ${{ env.SWAGGERHUB_USER }}/tractusx-edc/${{ env.DOWNSTREAM_VERSION }} -f ./resources/openapi/yaml/tractusx-edc-api.yaml --visibility=public --published=unpublish - fi \ No newline at end of file + fi diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index a61da2b23..068976730 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -82,7 +82,7 @@ jobs: permissions: contents: write steps: - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 - uses: ./.github/actions/publish-docker-image name: Publish ${{ matrix.variant.img }} with: @@ -106,7 +106,7 @@ jobs: needs.secret-presence.outputs.HAS_OSSRH && github.event_name != 'pull_request' && github.ref != 'refs/heads/releases' steps: # Set-Up - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 # Import GPG Key - uses: ./.github/actions/import-gpg-key @@ -137,4 +137,12 @@ jobs: needs: [ secret-presence ] if: needs.secret-presence.outputs.HAS_SWAGGER uses: ./.github/workflows/publish-swaggerhub.yaml - secrets: inherit + + publish-docusaurus: + name: Publish docusaurus docs + permissions: + contents: write + packages: write + needs: [ secret-presence, publish-to-swaggerhub ] + if: needs.secret-presence.outputs.HAS_SWAGGER + uses: ./.github/workflows/publish-docusaurus.yaml diff --git a/.github/workflows/stale-bot.yml b/.github/workflows/stale-bot.yml new file mode 100644 index 000000000..2a8ca07f5 --- /dev/null +++ b/.github/workflows/stale-bot.yml @@ -0,0 +1,109 @@ +# +# Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) +# Copyright (c) 2023 Contributors to the Eclipse Foundation +# +# See the NOTICE file(s) distributed with this work for additional +# information regarding copyright ownership. +# +# 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 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +--- + +name: Close Inactive Issues + +on: + workflow_call: + secrets: + envGH: + required: true + +jobs: + close-issues-in-triage: + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - uses: actions/stale@v8 + with: + operations-per-run: 1000 + days-before-issue-stale: 32 # 4 weeks + days-before-issue-close: 14 + stale-issue-label: "stale" + stale-issue-message: "This issue is stale because it has been open for 4 weeks with no activity." + close-issue-message: "This issue was closed because it has been inactive for 14 days since being marked as stale." + close-issue-reason: 'not_planned' + days-before-pr-stale: -1 # ignore PRs (overwrite default days-before-stale) + days-before-pr-close: -1 # ignore PRs (overwrite default days-before-close) + remove-issue-stale-when-updated: true + only-labels: 'triage' + repo-token: ${{ github.token }} + + close-issues-with-assignee: + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - uses: actions/stale@v8 + with: + operations-per-run: 1000 + days-before-issue-stale: 32 + days-before-issue-close: 7 + stale-issue-label: "stale" + stale-issue-message: "This issue is stale because it has been open for 4 weeks with no activity." + close-issue-message: "This issue was closed because it has been inactive for 7 days since being marked as stale." + close-issue-reason: 'not_planned' + days-before-pr-stale: -1 # ignore PRs (overwrite default days-before-stale) + days-before-pr-close: -1 # ignore PRs (overwrite default days-before-close) + remove-issue-stale-when-updated: true + exempt-issue-labels: bug # ignore issues labelled as bug + repo-token: ${{ github.token }} + + close-issues-without-assignee: + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - uses: actions/stale@v8 + with: + operations-per-run: 1000 + days-before-issue-stale: 14 + days-before-issue-close: 7 + stale-issue-label: "stale" + stale-issue-message: "This issue is stale because it has been open for 2 weeks with no activity." + close-issue-message: "This issue was closed because it has been inactive for 7 days since being marked as stale." + close-issue-reason: 'not_planned' + days-before-pr-stale: -1 # ignore PRs (overwrite default days-before-stale) + days-before-pr-close: -1 # ignore PRs (overwrite default days-before-close) + remove-issue-stale-when-updated: true + exempt-all-issue-assignees: true # issues with assignees will be ignored + exempt-issue-labels: bug,triage # ignore issues labelled as bug or triage + repo-token: ${{ github.token }} + + close-inactive-pull-requests: + runs-on: ubuntu-latest + permissions: + pull-requests: write + steps: + - uses: actions/stale@v8 + with: + operations-per-run: 1000 + days-before-issue-stale: -1 # ignore issues (overwrite default days-before-stale) + days-before-issue-close: -1 # ignore issues (overwrite default days-before-close) + stale-pr-label: "stale" + stale-pr-message: "This pull request is stale because it has been open for 7 days with no activity." + close-pr-message: "This pull request was closed because it has been inactive for 7 days since being marked as stale." + days-before-pr-stale: 7 + days-before-pr-close: 7 + remove-pr-stale-when-updated: true + repo-token: ${{ github.token }} diff --git a/.github/workflows/trivy.yml b/.github/workflows/trivy.yml index c5289f600..4df265a1a 100644 --- a/.github/workflows/trivy.yml +++ b/.github/workflows/trivy.yml @@ -55,7 +55,7 @@ jobs: contents: read security-events: write steps: - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 - name: Run Trivy vulnerability scanner in repo mode uses: aquasecurity/trivy-action@master with: @@ -90,13 +90,13 @@ jobs: - edc-dataplane-azure-vault - edc-dataplane-hashicorp-vault steps: - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 ## This step will fail if the docker images is not found - name: "Check if image exists" id: imageCheck run: | - docker manifest inspect tractusx/${{ matrix.image }}:sha-${{ needs.git-sha7.outputs.value }} + docker buildx imagetools inspect --format '{{ json . }}' tractusx/${{ matrix.image }}:sha-${{ needs.git-sha7.outputs.value }} continue-on-error: true ## the next two steps will only execute if the image exists check was successful diff --git a/.github/workflows/veracode.yaml b/.github/workflows/veracode.yaml index 78c4ae441..27bd02291 100644 --- a/.github/workflows/veracode.yaml +++ b/.github/workflows/veracode.yaml @@ -42,12 +42,13 @@ jobs: verify-formatting: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: ./.github/actions/setup-java - - name: Verify proper formatting - run: ./gradlew spotlessCheck + - name: Run Checkstyle + run: | + ./gradlew checkstyleMain checkstyleTest build: runs-on: ubuntu-latest @@ -65,7 +66,7 @@ jobs: { dir: edc-dataplane, name: edc-dataplane-hashicorp-vault } ] steps: # Set-Up - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 - uses: ./.github/actions/setup-java # Build - name: Build ${{ matrix.variant.name }} diff --git a/.github/workflows/verify.yaml b/.github/workflows/verify.yaml index b6e6858da..ee77c7a88 100644 --- a/.github/workflows/verify.yaml +++ b/.github/workflows/verify.yaml @@ -31,7 +31,7 @@ jobs: verify-license-headers: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 - name: "Check for files without a license header" run: |- # checks all java, yaml, kts and sql files for an Apache 2.0 license header @@ -46,7 +46,7 @@ jobs: verify-helm-docs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: addnab/docker-run-action@v3 with: @@ -69,12 +69,9 @@ jobs: verify-formatting: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 - uses: ./.github/actions/setup-java - - name: Verify proper formatting - run: ./gradlew spotlessCheck - - name: Run Checkstyle run: | ./gradlew checkstyleMain checkstyleTest @@ -82,7 +79,7 @@ jobs: markdown-lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 - name: Install mardkdownlint run: npm install -g markdownlint-cli2 @@ -95,7 +92,7 @@ jobs: runs-on: ubuntu-latest needs: [ verify-formatting, verify-license-headers ] steps: - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 - uses: ./.github/actions/setup-java @@ -106,7 +103,7 @@ jobs: runs-on: ubuntu-latest needs: [ verify-formatting, verify-license-headers ] steps: - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 - uses: ./.github/actions/setup-java @@ -117,7 +114,7 @@ jobs: runs-on: ubuntu-latest needs: [ verify-formatting, verify-license-headers ] steps: - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 - uses: ./.github/actions/setup-java @@ -128,7 +125,7 @@ jobs: runs-on: ubuntu-latest needs: [ verify-formatting, verify-license-headers ] steps: - - uses: actions/checkout@v3.5.2 + - uses: actions/checkout@v4 - uses: ./.github/actions/setup-java @@ -149,21 +146,32 @@ jobs: POSTGRES_PASSWORD: password steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./.github/actions/setup-java - name: Run Postgresql E2E tests run: ./gradlew test -DincludeTags="PostgresqlIntegrationTest" -PverboseTest=true + dataplane-tests: + runs-on: ubuntu-latest + needs: [ verify-formatting, verify-license-headers ] + + steps: + - uses: actions/checkout@v4 + - uses: ./.github/actions/setup-java + + - name: Run Azure/S3 dataplane tests + run: ./gradlew -p edc-tests/edc-dataplane test -DincludeTags="AzureCosmosDbIntegrationTest,AwsS3IntegrationTest" + miw-integration-tests: runs-on: ubuntu-latest needs: [ verify-formatting, verify-license-headers ] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./.github/actions/setup-java - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Starting MIW, Keycloak and Postgres Servers run: | cd edc-tests/miw-tests/src/test/resources/docker-environment @@ -186,7 +194,7 @@ jobs: docker exec docker-environment-postgres-1 /opt/seed.sh - name: Run MIW Integration tests - run: | + run: | ./gradlew -p edc-tests/miw-tests test -DincludeTags="MiwIntegrationTest" -PverboseTest=true - name: Run SSI E2E tests run: | diff --git a/.markdownlint.yaml b/.markdownlint.yaml index d060f2264..45ae81489 100644 --- a/.markdownlint.yaml +++ b/.markdownlint.yaml @@ -1,4 +1,6 @@ # Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) +# Copyright (c) 2023 Mercedes-Benz Tech Innovation GmbH +# Copyright (c) 2023 Contributors to the Eclipse Foundation # # See the NOTICE file(s) distributed with this work for additional # information regarding copyright ownership. @@ -19,7 +21,14 @@ "default": true # Do not restrict line length: https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#MD013 "MD013": false -"MD034": +# Do not restrict inline HTML: https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#MD033 +"MD033": false # Allow same content on headlines on siblings: https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#MD024 "MD024": "siblings_only": true +"MD032": false +# Allow lists without empty lines around them: https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#MD032 +# Necessary for Helm docs +"MD004": false +# Allow for more unordered lists: https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#MD004 +# Necessary for Helm docs diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..22b8cba17 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,473 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +## [0.5.1] - 2023-08-22 + +0.5.1 Latest +What's Changed + +- chore: Improve Helm Chart documentation by @tuncaytunc-zf in [#607](https://github.com/eclipse-tractusx/tractusx-edc/pull/607) +- refactor(CPA): obliviates the control plane adapter term and module refactor by @wolf4ood in [#606](https://github.com/eclipse-tractusx/tractusx-edc/pull/606) +- Chore: synchronize histories of main and releases by @paullatzelsperger in [#604](https://github.com/eclipse-tractusx/tractusx-edc/pull/604) +- fix(helm charts): Replace all "ids" occurrences in helm charts by @florianrusch-zf in [#586](https://github.com/eclipse-tractusx/tractusx-edc/pull/586) +- feat(ci): use dependency check from upstream EDC by @paullatzelsperger in [#615](https://github.com/eclipse-tractusx/tractusx-edc/pull/615) +- fix(helm chart): Set participant ID in data plane by @tuncaytunc-zf in [#627](https://github.com/eclipse-tractusx/tractusx-edc/pull/627) +- chore: update curl version to 8.2.0-r0 by @paullatzelsperger in [#633](https://github.com/eclipse-tractusx/tractusx-edc/pull/633) +- build: decrease dependabot frequency to 'weekly' by @paullatzelsperger in [#634](https://github.com/eclipse-tractusx/tractusx-edc/pull/634) +- feat(EDR): adds EDR state machine for handling EDR renewal by @wolf4ood in [#620](https://github.com/eclipse-tractusx/tractusx-edc/pull/620) +- feat: upgrade to EDC 0.2.0 by @paullatzelsperger in [#674](https://github.com/eclipse-tractusx/tractusx-edc/pull/674) +- feat: simplify data encryptor by @paullatzelsperger in [#678](https://github.com/eclipse-tractusx/tractusx-edc/pull/678) +- chore(helm): add securityContext to Helm tests by @fty4 in [#637](https://github.com/eclipse-tractusx/tractusx-edc/pull/637) +- feat(DataPlaneConsumerProxy): adds support for data plane provider url by @wolf4ood in [#643](https://github.com/eclipse-tractusx/tractusx-edc/pull/643) +- chore(helm): remove tractusx-connector-legacy chart by @fty4 in [#684](https://github.com/eclipse-tractusx/tractusx-edc/pull/684) +- feat: improve bpn validation by @paullatzelsperger in [#687](https://github.com/eclipse-tractusx/tractusx-edc/pull/687) +- feat: add API for the BPN validation extension by @paullatzelsperger in [#688](https://github.com/eclipse-tractusx/tractusx-edc/pull/688) +- chore: suppress noisy kics warning on miw tests docker-compose by @wolf4ood in [#689](https://github.com/eclipse-tractusx/tractusx-edc/pull/689) +- feat: use new BPN Policy in artefacts and E2E tests by @paullatzelsperger in [#690](https://github.com/eclipse-tractusx/tractusx-edc/pull/690) +- docs: provide a multi-tenancy sample by @ndr-brt in [#691](https://github.com/eclipse-tractusx/tractusx-edc/pull/691) +- feat: generate, merge and publish OpenAPI spec 2 by @bcronin90 in [#619](https://github.com/eclipse-tractusx/tractusx-edc/pull/619) +- feat: download opentelemetry jar outside of Dockerfile by @paullatzelsperger in [#697](https://github.com/eclipse-tractusx/tractusx-edc/pull/697) +- feat(edrs): add init edr request api validator by @wolf4ood in [#703](https://github.com/eclipse-tractusx/tractusx-edc/pull/703) +- feat(edrs): add EDR api schema and example by @wolf4ood in [#705](https://github.com/eclipse-tractusx/tractusx-edc/pull/705) +- Fix: Add missing OpenAPI parameter by @bcronin90 in [#712](https://github.com/eclipse-tractusx/tractusx-edc/pull/712) +- feat(helm): add customCaCerts value by @fty4 in [#707](https://github.com/eclipse-tractusx/tractusx-edc/pull/707) +- chore(helm): fix typo for controlplane.endpoints.management.authKey by @fty4 in [#706](https://github.com/eclipse-tractusx/tractusx-edc/pull/706) +- chore: update to EDC 0.2.1 by @paullatzelsperger in [#716](https://github.com/eclipse-tractusx/tractusx-edc/pull/716) +- chore: add LICENSE file to all charts by @paullatzelsperger in [#722](https://github.com/eclipse-tractusx/tractusx-edc/pull/722) +- fix: add binding to tx namespace for credential policy by @wolf4ood in [#713](https://github.com/eclipse-tractusx/tractusx-edc/pull/713) +- Release version 0.5.1 by @github-actions in [#725](https://github.com/eclipse-tractusx/tractusx-edc/pull/725) + +Full Changelog: [0.5.0_rn...0.5.1](https://github.com/eclipse-tractusx/tractusx-edc/compare/0.5.0_rn...0.5.1) + +## [0.5.0] - 2023-06-11 + +0.5.0 +What's Changed + +- Release version 0.5.0-rc5 by @github-actions in [#570](https://github.com/eclipse-tractusx/tractusx-edc/pull/570) +- chore: update DEPENDENCIES, add approvals by @paullatzelsperger in [#572](https://github.com/eclipse-tractusx/tractusx-edc/pull/572) +- feat(docs): adds more information on MIW credential module by @wolf4ood in [#576](https://github.com/eclipse-tractusx/tractusx-edc/pull/576) +- feat(MIWClient): adds response body in case errors in MIW response by @wolf4ood in [#574](https://github.com/eclipse-tractusx/tractusx-edc/pull/574) +- chore: reformat workflow yaml files by @paullatzelsperger in [#578](https://github.com/eclipse-tractusx/tractusx-edc/pull/578) +- docs: add decision record about removing the CHANGELOG.md by @paullatzelsperger in [#579](https://github.com/eclipse-tractusx/tractusx-edc/pull/579) +- feat(SSI): adds tolerance to eventual trailing slash in MIW or token URLs by @wolf4ood in [#581](https://github.com/eclipse-tractusx/tractusx-edc/pull/581) +- fix(test): converted some MockWebServer to long-running instances by @paullatzelsperger in [#588](https://github.com/eclipse-tractusx/tractusx-edc/pull/588) +- feat(docs): updates postman collection by @wolf4ood in [#587](https://github.com/eclipse-tractusx/tractusx-edc/pull/587) +- feat(docs): add changes in consumer pull flow in the migration guide by @wolf4ood in [#591](https://github.com/eclipse-tractusx/tractusx-edc/pull/591) +- feat: remove CHANGELOG.md, generate automatically by @paullatzelsperger in [#583](https://github.com/eclipse-tractusx/tractusx-edc/pull/583) +- chore(SSI): add security context in cache by @wolf4ood in [#595](https://github.com/eclipse-tractusx/tractusx-edc/pull/595) +- chore(docs): adds a note about the cid removal by @wolf4ood in [#596](https://github.com/eclipse-tractusx/tractusx-edc/pull/596) +- feat(test): add integration tests for MIW by @paullatzelsperger in [#585](https://github.com/eclipse-tractusx/tractusx-edc/pull/585) +- feat(Gateway): forward EDR + refactor by @wolf4ood in [#597](https://github.com/eclipse-tractusx/tractusx-edc/pull/597) +- chore(deps): bump net.minidev:json-smart from 2.4.11 to 2.5.0 by @dependabot in [#593](https://github.com/eclipse-tractusx/tractusx-edc/pull/593) +- docs: update migration guide for 0.5.0 by @paullatzelsperger in [#601](https://github.com/eclipse-tractusx/tractusx-edc/pull/601) +- docs: add link to MIW to readme by @tmberthold in [#592](https://github.com/eclipse-tractusx/tractusx-edc/pull/592) +- Release version 0.5.0 by @github-actions in [#602](https://github.com/eclipse-tractusx/tractusx-edc/pull/602) + +New Contributors +@tmberthold made their first contribution in [#592](https://github.com/eclipse-tractusx/tractusx-edc/pull/592) + +Full Changelog: [0.5.0-rc5_rn...0.5.0_rn](https://github.com/eclipse-tractusx/tractusx-edc/compare/0.5.0-rc5_rn...0.5.0_rn) + +## [0.5.0-rc5] - 2023-07-05 + +### 0.5.0-rc5 Changed + +- Upgraded to EDC 0.1.3 + +## [0.5.0-rc4] - 2023-07-04 + +### 0.5.0-rc4 Removed + +- Removed the interim solution `observability-api-customization` and use the upstream extension `Observability API` instead + +## [0.5.0-rc3] - 2023-06-30 + +### 0.5.0-rc3 Fixed + +- Replace '\_\_' with '--' in the Sql EDR Store (#538) +- Adapt Postman Collection for RC1/RC2 (#535) + +## [0.5.0-rc2] - 2023-06-23 + +### 0.5.0-rc2 Changed + +- Upgraded to EDC 0.1.2 + +## [0.5.0-rc1] - 2023-06-21 + +### 0.5.0-rc1 Fixed + +- Various fixes and improvements to our helm charts + +### 0.5.0-rc1 Added + +- Support for SSI (centralized MiW) (#459, #510) +- Support for the JsonWebSignature2020 Crypto Suite (#483) + +### 0.5.0-rc1 Changed + +- All Helm charts now use SSI instead of DAPS (#511) + +### 0.5.0-rc1 Removed + +- Support for DAPS as identity provider (#511) + +## [0.4.1] - 2023-05-31 + +### 0.4.1 Added + +- SQL implementation for the EDR Cache +- E2E test variant using PostgreSQL +- Documentation + +### 0.4.1 Changed + +- Moved to Java 17 +- Switched to Eclipse Dataspace Components `0.1.0` + +### 0.4.1 Removed + +- Lombok + +## [0.4.0] - 2023-05-18 + +### 0.4.0 Added + +- Support for the new Dataspace Protocol +- GitHub Workflow to check for missing license headers + +### 0.4.0 Changed + +- Switched to Eclipse Dataspace Components `0.0.1-milestone-9` + +### 0.4.0 Removed + +- Business tests. All tests are covered by other means. +- Control-Plane-Adapter. Replaced by a DSP-compatible implementation + +## [0.3.4] - 2023-05-17 + +### 0.3.4 Fixed + +- Added license headers to several files in the code base +- Refactoring of Helm charts - multiple charts instead of one dynamically assembled chart + +## [0.3.3] - 2023-04-19 + +### 0.3.3 Fixed + +- Config values for the data plane part of the helm chart +- Contract Validity + +### 0.3.3 Added + +- A log line whenever a policy evaluation of the BPN number was performed + +## [0.3.2] - 2023-03-30 + +### 0.3.2 Fixed + +- Fixed mutually-exclusive config values for Azure KeyVault + +## [0.3.1] - 2023-03-27 + +### 0.3.1 Added + +### 0.3.1 Changed + +- Support unauthenticated access to the ObservabilityAPI (#126) + +### 0.3.1 Fixed + +## [0.3.0] - 2023-02-20 + +**Important Note**: This version introduces multiple breaking changes. Before updating **always** consolidate the +corresponding [documentation](/docs/migration/Version_0.1.x_0.3.x.md). + +### 0.3.0 Added + +- Add contract id to data source http call (#732) +- Support also support releases in ci pipeline +- Introduce typed object for oauth2 provisioning +- Add documentation +- Add test case +- Add client to omejdn +- add hydra deployment +- Configure dynamically HTTP Receiver callback endpoints. (#685) +- cp-adapter : code review, rollbacke name change (#664) +- Feature/cp adapter task 355 356 357 (#621) +- Add Validity Mapping in ContractDefinitionStepDefs class +- Add feature and create SendAnOfferwithoutConstraints method in class negotiationSteps +- Add validity attribute in class ContractDefinition +- Add Validity Mapping in ContractDefinitionStepDefs class +- Add feature and create SendAnOfferwithoutConstraints method in class negotiationSteps +- Add validity attribute in class ContractDefinition +- Local TXDC Setup Documentation (#618) +- Feature: Sftp Provisioner and Client (#554) + +### 0.3.0 Changed + +- Support horizontal edc scaling in cp adapter extension (#678) +- Use upstream jackson version (#741) +- Replace provision-oauth2 with data-plane-http-oauth2 +- docs: Update sample documentation (#671) +- chore: Disable build ci pipeline if just docu was updated (#705) +- Increase trivy timeout +- Remove not useful anymore custom-jsonld extension (#683) +- update setup docu (#654) +- remove trailing slash (#652) +- update alpine from 3.17.0 to 3.17.1 for controlplane-memory-hashicorp-vault (#665) +- Feature/set charts deprecated (#628) +- update setup docu (#627) +- Feature/update txdc deployment downward capabilities (#625) +- remove git submodule (#619) +- Feature/update postman (#624) +- update control plane docu (#623) +- update postgresql version in Chart.yaml supporting-infrastructure (#622) +- update link to edc logo in README.md (#612) +- update description of supporting infrastructure deployment (#616) + +### 0.3.0 Fixed + +- bugfix: Fix slow AES encryption (#746) +- Fix typo in tractusx-connector values.yaml comment +- Fix not working docu link in README.md +- Fix typo in control-plane adapter README + +### 0.3.0 Dependency updates + +- Bump EDC to 20220220 (#767) +- Bump alpine (#749) +- Bump alpine (#750) +- Bump alpine (#752) +- Bump alpine in /edc-controlplane/edc-runtime-memory/src/main/docker (#753) +- Bump maven-deploy-plugin from 3.0.0 to 3.1.0 (#735) +- Bump actions/setup-java from 3.9.0 to 3.10.0 (#730) +- Bump s3 from 2.19.33 to 2.20.0 +- Bump s3 from 2.19.27 to 2.19.33 +- Bump jaxb-runtime from 4.0.1 to 4.0.2 +- Bump spotless-maven-plugin from 2.31.0 to 2.32.0 +- Bump postgresql from 42.5.1 to 42.5.3 +- Bump nimbus-jose-jwt from 9.30 to 9.30.1 +- Bump lombok from 1.18.24 to 1.18.26 +- Bump flyway-core from 9.12.0 to 9.14.1 +- Bump jackson-bom from 2.14.0-rc2 to 2.14.2 +- Bump cucumber.version from 7.11.0 to 7.11.1 +- Bump azure-sdk-bom from 1.2.8 to 1.2.9 +- Bump mockito-bom from 5.0.0 to 5.1.1 +- Bump edc version to 0.0.1-20230131-SNAPSHOT +- Bump s3 from 2.19.18 to 2.19.27 +- Bump docker/build-push-action from 3 to 4 +- Bump nimbus-jose-jwt from 9.29 to 9.30 +- Bump spotless-maven-plugin from 2.30.0 to 2.31.0 +- Bump nimbus-jose-jwt from 9.28 to 9.29 +- Bump mockito-bom from 4.11.0 to 5.0.0 +- Bump edc version to 0.0.1-20230125-SNAPSHOT +- Bump flyway-core from 9.11.0 to 9.12.0 +- Bump s3 from 2.19.15 to 2.19.18 (#684) +- Bump mikefarah/yq from 4.30.6 to 4.30.8 (#682) +- Bump spotless-maven-plugin from 2.29.0 to 2.30.0 +- Bump edc version to 0.0.1-20230115-SNAPSHOT +- Bump cucumber.version from 7.10.1 to 7.11.0 (#672) +- Bump maven-dependency-plugin from 3.4.0 to 3.5.0 (#669) +- Bump s3 from 2.19.11 to 2.19.15 (#668) +- Bump maven-surefire-plugin from 3.0.0-M7 to 3.0.0-M8 (#670) +- Bump edc version to 0.0.1-20230109-SNAPSHOT (#666) +- Bump alpine in /edc-controlplane/edc-runtime-memory/src/main/docker (#659) +- Bump alpine in /edc-dataplane/edc-dataplane-azure-vault/src/main/docker (#660) +- Bump alpine (#658) +- Bump alpine (#661) +- Bump alpine (#662) +- Bump azure/setup-kubectl from 3.1 to 3.2 (#655) +- Bump junit-bom from 5.9.1 to 5.9.2 (#657) +- Bump s3 from 2.19.2 to 2.19.11 (#648) +- Bump actions/checkout from 3.2.0 to 3.3.0 (#647) +- Bump flyway-core from 9.10.2 to 9.11.0 (#646) +- Bump spotless-maven-plugin from 2.28.0 to 2.29.0 (#641) +- Bump mockito-bom from 4.10.0 to 4.11.0 (#637) +- Bump flyway-core from 9.10.1 to 9.10.2 (#632) +- Bump s3 from 2.19.1 to 2.19.2 (#631) +- Bump s3 from 2.18.41 to 2.19.1 (#626) +- Bump mikefarah/yq from 4.30.5 to 4.30.6 (#613) +- Bump cucumber.version from 7.10.0 to 7.10.1 (#614) +- Bump s3 from 2.18.40 to 2.18.41 (#615) +- Bump azure/setup-helm from 3.4 to 3.5 (#596) +- Bump actions/checkout from 3.1.0 to 3.2.0 (#598) +- Bump mockito-bom from 4.9.0 to 4.10.0 (#607) +- Bump s3 from 2.18.39 to 2.18.40 (#609) +- Bump flyway-core from 9.10.0 to 9.10.1 (#610) +- Bump actions/setup-java from 3.8.0 to 3.9.0 (#605) +- Bump s3 from 2.18.35 to 2.18.39 (#606) + +## [0.1.6] - 2023-02-20 + +### 0.1.6 Fixed + +- SQL leakage issue +- Catalog pagination + +## [0.1.5] - 2023-02-13 + +### 0.1.5 Fixed + +- Use patched EDC version: 0.0.1-20220922.2-SNAPSHOT to fix catalog pagination bug +- Data Encryption extension: fixed usage of a blocking algorithm + +## [0.1.2] - 2022-09-30 + +### 0.1.2 Added + +- Introduced DEPENDENCIES file + +### 0.1.2 Changed + +- Moved helm charts from `deployment/helm` to `charts` +- Replaced distroless image with alpine in all docker images +- Update EDC commit to `740c100ac162bc41b1968c232ad81f7d739aefa9` + +## [0.1.1] - 2022-09-04 + +**Important Note**: Please consolidate the migration documentation before updating your +connector. [documentation](/docs/migration/Version_0.1.0_0.1.1.md). + +### 0.1.1 Added + +- Control-Plane Extension ([cx-oauth2](/edc-extensions/cx-oauth2/README.md)) + +### 0.1.1 Changed + +- Introduced git submodule to import EDC dependencies (instead of snapshot- or milestone artifact) +- Helm Charts: TLS secret name is now configurable + +### 0.1.1 Fixed + +- Connectors with Azure Vault extension are now starting + again [link](https://github.com/eclipse-edc/Connector/issues/1892) + +## [0.1.0] - 2022-08-19 + +**Important Note**: Version 0.1.0 introduces multiple breaking changes. Before updating **always** consolidate the +corresponding [documentation](/docs/migration/Version_0.0.x_0.1.x.md). + +### 0.1.0 Added + +- Control-Plane extension ([data-plane-selector-client](https://github.com/eclipse-edc/Connector/tree/v0.0.1-milestone-5/extensions/data-plane-selector/selector-client)) +- run the EDC with multiple data planes at once +- Control-Plane extension ([dataplane-selector-configuration](edc-extensions/dataplane-selector-configuration)) +- add data plane instances to the control plane by configuration +- Data-Plane extension ([s3-data-plane](https://github.com/eclipse-edc/Connector/tree/main/extensions/aws/data-plane-s3)) +- transfer from and to AWS S3 buckets +- Control-Plane extension ([data-encryption](edc-extensions/data-encryption)) +- Data-Plane authentication attribute transmitted during data-plane-transfer can be encrypted symmetrically (AES) + +### 0.1.0 Changed + +- Update setting name (`edc.dataplane.token.validation.endpoint` -> `edc.dataplane.token.validation.endpoint`) +- EDC has been updated to + version [0.0.1-20220818-SNAPSHOT](https://oss.sonatype.org/#nexus-search;gav~org.eclipse.dataspaceconnector~~0.0.1-20220818-SNAPSHOT~~) - + implications to the behavior of the connector have been covered in + the [corresponding migration guide](docs/migration/Version_0.0.x_0.1.x.md) + +### 0.1.0 Fixed + +- Contract-Offer-Receiving-Connectors must also pass the ContractPolicy of the ContractDefinition before receiving + offers([issue](https://github.com/eclipse-edc/Connector/issues/1331)) +- Deletion of Asset becomes impossible when Contract Negotiation + exists([issue](https://github.com/eclipse-edc/Connector/issues/1403)) +- Deletion of Policy becomes impossible when Contract Definition + exists([issue](https://github.com/eclipse-edc/Connector/issues/1410)) + +## [0.0.6] - 2022-07-29 + +### 0.0.6 Fixed + +- Fixes [release 0.0.5](https://github.com/eclipse-tractusx/tractusx-edc/releases/tag/0.0.5), which introduced classpath + issues due to usage of [net.jodah:failsafe:2.4.3](https://search.maven.org/artifact/net.jodah/failsafe/2.4.3/jar) + library + +## [0.0.5] - 2022-07-28 + +### 0.0.5 Added + +- EDC Health Checks for HashiCorp Vault + +### 0.0.5 Changed + +- BusinessPartnerNumber constraint supports List structure +- Helm: Confidential EDC settings can be set using k8s secrets +- HashiCorp Vault API path configurable + +## [0.0.4] - 2022-06-27 + +### 0.0.4 Added + +- HashiCorp Vault Extension +- Control Plane with HashiCorp Vault and PostgreSQL support + +### 0.0.4 Changed + +- Release Workflow now publishes EDC Extensions as Maven Artifacts + +### 0.0.4 Fixed + +- [#1515](https://github.com/eclipse-edc/Connector/issues/1515) SQL: Connector sends out 50 + contract offers max. + +### 0.0.4 Removed + +- CosmosDB Control Plane +- Control API Extension for all Control Planes + +## [0.0.3] - 2022-05-23 + +## [0.0.2] - 2022-05-20 + +## [0.0.1] - 2022-05-13 + +[0.5.1]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.5.0_rn...0.5.1 + +[0.5.0]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.5.0-rc5_rn...0.5.0_rn + +[0.5.0-rc5]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.5.0-rc4...0.5.0-rc5 + +[0.5.0-rc4]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.5.0-rc3...0.5.0-rc4 + +[0.5.0-rc3]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.5.0-rc2...0.5.0-rc3 + +[0.5.0-rc2]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.5.0-rc1...0.5.0-rc2 + +[0.5.0-rc1]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.4.1...0.5.0-rc1 + +[0.4.1]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.3.3...0.4.1 + +[0.3.3]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.3.2...0.3.3 + +[0.3.2]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.3.1...0.3.2 + +[0.3.1]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.3.0...0.3.1 + +[0.3.0]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.2.0...0.3.0 + +[0.1.6]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.1.5...0.1.6 + +[0.1.5]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.1.2...0.1.5 + +[0.1.2]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.1.1...0.1.2 + +[0.1.1]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.1.0...0.1.1 + +[0.1.0]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.0.6...0.1.0 + +[0.0.6]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.0.5...0.0.6 + +[0.0.5]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.0.4...0.0.5 + +[0.0.4]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.0.3...0.0.4 + +[0.0.3]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.0.2...0.0.3 + +[0.0.2]: https://github.com/eclipse-tractusx/tractusx-edc/compare/0.0.1...0.0.2 + +[0.0.1]: https://github.com/eclipse-tractusx/tractusx-edc/compare/a02601306fed39a88a3b3b18fae98b80791157b9...0.0.1 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 4e32c4bd2..70a08b52a 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -49,7 +49,7 @@ This Code applies within all Project, Working Group, and Interest Group spaces a ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the Conduct Committee via conduct@eclipse-foundation.org. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. Without the explicit consent of the reporter, the Conduct Committee is obligated to maintain confidentiality with regard to the reporter of an incident. The Conduct Committee is further obligated to ensure that the respondent is provided with sufficient information about the complaint to reply. If such details cannot be provided while maintaining confidentiality, the Conduct Committee will take the respondent‘s inability to provide a defense into account in its deliberations and decisions. Further details of enforcement guidelines may be posted separately. +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the Conduct Committee via . All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. Without the explicit consent of the reporter, the Conduct Committee is obligated to maintain confidentiality with regard to the reporter of an incident. The Conduct Committee is further obligated to ensure that the respondent is provided with sufficient information about the complaint to reply. If such details cannot be provided while maintaining confidentiality, the Conduct Committee will take the respondent‘s inability to provide a defense into account in its deliberations and decisions. Further details of enforcement guidelines may be posted separately. Staff, Committers and Project Leads have the right to report, remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code, or to block temporarily or permanently any Contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. Any such actions will be reported to the Conduct Committee for transparency and record keeping. diff --git a/DEPENDENCIES b/DEPENDENCIES index e331a8fd6..672b0b60e 100644 --- a/DEPENDENCIES +++ b/DEPENDENCIES @@ -3,56 +3,58 @@ maven/mavencentral/com.apicatalog/iron-verifiable-credentials/0.8.1, Apache-2.0, maven/mavencentral/com.apicatalog/titanium-json-ld/1.0.0, Apache-2.0, approved, clearlydefined maven/mavencentral/com.apicatalog/titanium-json-ld/1.3.1, Apache-2.0, approved, #8912 maven/mavencentral/com.apicatalog/titanium-json-ld/1.3.2, Apache-2.0, approved, #8912 -maven/mavencentral/com.azure/azure-core-http-netty/1.13.5, MIT AND Apache-2.0, approved, #7948 maven/mavencentral/com.azure/azure-core-http-netty/1.13.6, MIT AND Apache-2.0, approved, #7948 -maven/mavencentral/com.azure/azure-core/1.41.0, MIT AND Apache-2.0, approved, #9648 +maven/mavencentral/com.azure/azure-core-http-netty/1.13.7, MIT AND Apache-2.0, approved, #7948 maven/mavencentral/com.azure/azure-core/1.42.0, MIT AND Apache-2.0, approved, #10089 -maven/mavencentral/com.azure/azure-identity/1.10.0, MIT AND Apache-2.0, approved, #10086 -maven/mavencentral/com.azure/azure-identity/1.9.2, MIT AND Apache-2.0, approved, #9686 -maven/mavencentral/com.azure/azure-json/1.0.1, MIT AND Apache-2.0, approved, #7933 -maven/mavencentral/com.azure/azure-security-keyvault-secrets/4.6.4, MIT, approved, #7940 +maven/mavencentral/com.azure/azure-core/1.43.0, MIT AND Apache-2.0, approved, #10548 +maven/mavencentral/com.azure/azure-identity/1.10.1, MIT AND Apache-2.0, approved, #10086 +maven/mavencentral/com.azure/azure-json/1.1.0, MIT AND Apache-2.0, approved, #10547 +maven/mavencentral/com.azure/azure-security-keyvault-secrets/4.6.5, MIT, approved, #7940 +maven/mavencentral/com.azure/azure-storage-blob/12.24.0, MIT, approved, #10568 +maven/mavencentral/com.azure/azure-storage-common/12.23.0, MIT, approved, #10569 +maven/mavencentral/com.azure/azure-storage-internal-avro/12.9.0, MIT, approved, #10560 maven/mavencentral/com.fasterxml.jackson.core/jackson-annotations/2.10.3, Apache-2.0, approved, CQ21280 -maven/mavencentral/com.fasterxml.jackson.core/jackson-annotations/2.13.3, Apache-2.0, approved, clearlydefined maven/mavencentral/com.fasterxml.jackson.core/jackson-annotations/2.13.5, Apache-2.0, approved, clearlydefined maven/mavencentral/com.fasterxml.jackson.core/jackson-annotations/2.14.1, Apache-2.0, approved, #5303 maven/mavencentral/com.fasterxml.jackson.core/jackson-annotations/2.14.2, Apache-2.0, approved, #5303 +maven/mavencentral/com.fasterxml.jackson.core/jackson-annotations/2.15.1, Apache-2.0, approved, #7947 maven/mavencentral/com.fasterxml.jackson.core/jackson-annotations/2.15.2, Apache-2.0, approved, #7947 maven/mavencentral/com.fasterxml.jackson.core/jackson-core/2.13.5, Apache-2.0, approved, #2133 maven/mavencentral/com.fasterxml.jackson.core/jackson-core/2.14.2, Apache-2.0 AND MIT, approved, #4303 +maven/mavencentral/com.fasterxml.jackson.core/jackson-core/2.15.1, MIT AND Apache-2.0, approved, #7932 maven/mavencentral/com.fasterxml.jackson.core/jackson-core/2.15.2, MIT AND Apache-2.0, approved, #7932 -maven/mavencentral/com.fasterxml.jackson.core/jackson-databind/2.13.3, Apache-2.0, approved, #2134 maven/mavencentral/com.fasterxml.jackson.core/jackson-databind/2.13.4.2, Apache-2.0, approved, #2134 maven/mavencentral/com.fasterxml.jackson.core/jackson-databind/2.13.5, Apache-2.0, approved, #2134 maven/mavencentral/com.fasterxml.jackson.core/jackson-databind/2.14.1, Apache-2.0, approved, #4105 maven/mavencentral/com.fasterxml.jackson.core/jackson-databind/2.14.2, Apache-2.0, approved, #4105 +maven/mavencentral/com.fasterxml.jackson.core/jackson-databind/2.15.1, Apache-2.0, approved, #7934 maven/mavencentral/com.fasterxml.jackson.core/jackson-databind/2.15.2, Apache-2.0, approved, #7934 -maven/mavencentral/com.fasterxml.jackson.dataformat/jackson-dataformat-toml/2.14.0, Apache-2.0 AND BSD-3-Clause AND MIT AND Apache-2.0, approved, #7943 maven/mavencentral/com.fasterxml.jackson.dataformat/jackson-dataformat-toml/2.15.2, Apache-2.0, approved, #9160 +maven/mavencentral/com.fasterxml.jackson.dataformat/jackson-dataformat-xml/2.13.5, Apache-2.0, approved, #3768 maven/mavencentral/com.fasterxml.jackson.dataformat/jackson-dataformat-xml/2.14.2, Apache-2.0, approved, #4300 maven/mavencentral/com.fasterxml.jackson.dataformat/jackson-dataformat-xml/2.15.2, Apache-2.0, approved, #9237 -maven/mavencentral/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/2.13.3, Apache-2.0, approved, #2566 -maven/mavencentral/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/2.14.2, Apache-2.0, approved, #5933 +maven/mavencentral/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/2.15.1, Apache-2.0, approved, #8802 maven/mavencentral/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/2.15.2, Apache-2.0, approved, #8802 maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jakarta-jsonp/2.15.2, Apache-2.0, approved, #9179 -maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.13.3, Apache-2.0, approved, clearlydefined maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.13.5, Apache-2.0, approved, clearlydefined maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.14.2, Apache-2.0, approved, #4699 +maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.15.1, Apache-2.0, approved, #7930 maven/mavencentral/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.15.2, Apache-2.0, approved, #7930 maven/mavencentral/com.fasterxml.jackson.jakarta.rs/jackson-jakarta-rs-base/2.15.2, Apache-2.0, approved, #9235 -maven/mavencentral/com.fasterxml.jackson.jakarta.rs/jackson-jakarta-rs-json-provider/2.13.3, Apache-2.0, approved, clearlydefined +maven/mavencentral/com.fasterxml.jackson.jakarta.rs/jackson-jakarta-rs-json-provider/2.15.1, Apache-2.0, approved, #9236 maven/mavencentral/com.fasterxml.jackson.jakarta.rs/jackson-jakarta-rs-json-provider/2.15.2, Apache-2.0, approved, #9236 maven/mavencentral/com.fasterxml.jackson.module/jackson-module-jakarta-xmlbind-annotations/2.14.1, Apache-2.0, approved, #5308 maven/mavencentral/com.fasterxml.jackson.module/jackson-module-jakarta-xmlbind-annotations/2.15.2, Apache-2.0, approved, #9241 -maven/mavencentral/com.fasterxml.jackson/jackson-bom/2.14.2, Apache-2.0, approved, #7931 +maven/mavencentral/com.fasterxml.jackson/jackson-bom/2.15.1, Apache-2.0, approved, #7929 maven/mavencentral/com.fasterxml.jackson/jackson-bom/2.15.2, Apache-2.0, approved, #7929 maven/mavencentral/com.fasterxml.woodstox/woodstox-core/6.5.1, Apache-2.0, approved, #7950 -maven/mavencentral/com.github.docker-java/docker-java-api/3.3.0, Apache-2.0, approved, clearlydefined -maven/mavencentral/com.github.docker-java/docker-java-transport-zerodep/3.3.0, Apache-2.0 AND (Apache-2.0 AND BSD-3-Clause), approved, #7946 -maven/mavencentral/com.github.docker-java/docker-java-transport/3.3.0, Apache-2.0, approved, #7942 +maven/mavencentral/com.github.docker-java/docker-java-api/3.3.3, Apache-2.0, approved, #10346 +maven/mavencentral/com.github.docker-java/docker-java-transport-zerodep/3.3.3, Apache-2.0 AND (Apache-2.0 AND BSD-3-Clause), approved, #7946 +maven/mavencentral/com.github.docker-java/docker-java-transport/3.3.3, Apache-2.0, approved, #7942 maven/mavencentral/com.github.stephenc.jcip/jcip-annotations/1.0-1, Apache-2.0, approved, CQ21949 maven/mavencentral/com.google.code.findbugs/jsr305/3.0.2, Apache-2.0, approved, #20 maven/mavencentral/com.google.code.gson/gson/2.10.1, Apache-2.0, approved, #6159 -maven/mavencentral/com.google.crypto.tink/tink/1.10.0, Apache-2.0, approved, #9845 +maven/mavencentral/com.google.crypto.tink/tink/1.11.0, Apache-2.0, approved, #10719 maven/mavencentral/com.google.errorprone/error_prone_annotations/2.18.0, Apache-2.0, approved, clearlydefined maven/mavencentral/com.google.errorprone/error_prone_annotations/2.7.1, Apache-2.0, approved, clearlydefined maven/mavencentral/com.google.guava/failureaccess/1.0.1, Apache-2.0, approved, CQ22654 @@ -61,13 +63,13 @@ maven/mavencentral/com.google.guava/listenablefuture/9999.0-empty-to-avoid-confl maven/mavencentral/com.google.j2objc/j2objc-annotations/1.3, Apache-2.0, approved, CQ21195 maven/mavencentral/com.google.protobuf/protobuf-java/3.19.6, BSD-3-Clause, approved, clearlydefined maven/mavencentral/com.microsoft.azure/msal4j-persistence-extension/1.2.0, MIT, approved, clearlydefined -maven/mavencentral/com.microsoft.azure/msal4j/1.13.8, MIT, approved, clearlydefined maven/mavencentral/com.microsoft.azure/msal4j/1.13.9, MIT, approved, clearlydefined maven/mavencentral/com.microsoft.azure/msal4j/1.4.0, MIT, approved, clearlydefined maven/mavencentral/com.nimbusds/content-type/2.2, Apache-2.0, approved, clearlydefined maven/mavencentral/com.nimbusds/lang-tag/1.7, Apache-2.0, approved, clearlydefined maven/mavencentral/com.nimbusds/nimbus-jose-jwt/9.30.2, Apache-2.0, approved, clearlydefined -maven/mavencentral/com.nimbusds/nimbus-jose-jwt/9.31, Apache-2.0, approved, clearlydefined +maven/mavencentral/com.nimbusds/nimbus-jose-jwt/9.32, Apache-2.0, approved, #10561 +maven/mavencentral/com.nimbusds/nimbus-jose-jwt/9.35, Apache-2.0, approved, #10851 maven/mavencentral/com.nimbusds/oauth2-oidc-sdk/10.7.1, Apache-2.0, approved, clearlydefined maven/mavencentral/com.puppycrawl.tools/checkstyle/10.0, LGPL-2.1-or-later, approved, #7936 maven/mavencentral/com.squareup.okhttp3/mockwebserver/5.0.0-alpha.11, Apache-2.0, approved, clearlydefined @@ -89,74 +91,60 @@ maven/mavencentral/dev.failsafe/failsafe-okhttp/3.3.2, Apache-2.0, approved, #91 maven/mavencentral/dev.failsafe/failsafe/3.3.1, Apache-2.0, approved, #9268 maven/mavencentral/dev.failsafe/failsafe/3.3.2, Apache-2.0, approved, #9268 maven/mavencentral/info.picocli/picocli/4.6.3, Apache-2.0, approved, clearlydefined -maven/mavencentral/io.github.classgraph/classgraph/4.8.138, MIT, approved, CQ22530 maven/mavencentral/io.github.classgraph/classgraph/4.8.154, MIT, approved, CQ22530 -maven/mavencentral/io.micrometer/micrometer-commons/1.11.3, Apache-2.0 AND (Apache-2.0 AND MIT), approved, #9243 -maven/mavencentral/io.micrometer/micrometer-core/1.11.3, Apache-2.0 AND (Apache-2.0 AND MIT), approved, #9238 -maven/mavencentral/io.micrometer/micrometer-observation/1.11.3, Apache-2.0, approved, #9242 -maven/mavencentral/io.netty/netty-buffer/4.1.93.Final, Apache-2.0, approved, CQ21842 +maven/mavencentral/io.micrometer/micrometer-commons/1.11.4, Apache-2.0 AND (Apache-2.0 AND MIT), approved, #9243 +maven/mavencentral/io.micrometer/micrometer-core/1.11.4, Apache-2.0 AND (Apache-2.0 AND MIT), approved, #9238 +maven/mavencentral/io.micrometer/micrometer-observation/1.11.4, Apache-2.0, approved, #9242 maven/mavencentral/io.netty/netty-buffer/4.1.94.Final, Apache-2.0, approved, CQ21842 -maven/mavencentral/io.netty/netty-codec-dns/4.1.93.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 -maven/mavencentral/io.netty/netty-codec-http/4.1.93.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 +maven/mavencentral/io.netty/netty-codec-dns/4.1.94.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec-http/4.1.94.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 -maven/mavencentral/io.netty/netty-codec-http2/4.1.93.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec-http2/4.1.94.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec-socks/4.1.94.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 -maven/mavencentral/io.netty/netty-codec/4.1.93.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-codec/4.1.94.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 -maven/mavencentral/io.netty/netty-common/4.1.93.Final, Apache-2.0 AND MIT AND CC0-1.0, approved, CQ21843 maven/mavencentral/io.netty/netty-common/4.1.94.Final, Apache-2.0 AND MIT AND CC0-1.0, approved, CQ21843 -maven/mavencentral/io.netty/netty-handler-proxy/4.1.93.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-handler-proxy/4.1.94.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 -maven/mavencentral/io.netty/netty-handler/4.1.93.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-handler/4.1.94.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 -maven/mavencentral/io.netty/netty-resolver-dns-classes-macos/4.1.93.Final, Apache-2.0, approved, #6367 -maven/mavencentral/io.netty/netty-resolver-dns-native-macos/4.1.93.Final, Apache-2.0, approved, #7004 -maven/mavencentral/io.netty/netty-resolver-dns/4.1.93.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 -maven/mavencentral/io.netty/netty-resolver/4.1.93.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 +maven/mavencentral/io.netty/netty-resolver-dns-classes-macos/4.1.94.Final, Apache-2.0, approved, #6367 +maven/mavencentral/io.netty/netty-resolver-dns-native-macos/4.1.94.Final, Apache-2.0, approved, #7004 +maven/mavencentral/io.netty/netty-resolver-dns/4.1.94.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-resolver/4.1.94.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-tcnative-boringssl-static/2.0.61.Final, Apache-2.0 OR LicenseRef-Public-Domain OR BSD-2-Clause OR MIT, approved, CQ15280 maven/mavencentral/io.netty/netty-tcnative-classes/2.0.61.Final, Apache-2.0, approved, clearlydefined maven/mavencentral/io.netty/netty-transport-classes-epoll/4.1.94.Final, Apache-2.0, approved, #6366 maven/mavencentral/io.netty/netty-transport-classes-kqueue/4.1.94.Final, Apache-2.0, approved, #4107 -maven/mavencentral/io.netty/netty-transport-native-epoll/4.1.93.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-transport-native-epoll/4.1.94.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-transport-native-kqueue/4.1.94.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 -maven/mavencentral/io.netty/netty-transport-native-unix-common/4.1.93.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-transport-native-unix-common/4.1.94.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 -maven/mavencentral/io.netty/netty-transport/4.1.93.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.netty/netty-transport/4.1.94.Final, Apache-2.0 AND BSD-3-Clause AND MIT, approved, CQ20926 maven/mavencentral/io.opentelemetry.instrumentation/opentelemetry-instrumentation-annotations/1.29.0, Apache-2.0, approved, #10087 maven/mavencentral/io.opentelemetry/opentelemetry-api/1.29.0, Apache-2.0, approved, #10088 maven/mavencentral/io.opentelemetry/opentelemetry-context/1.29.0, Apache-2.0, approved, #10090 -maven/mavencentral/io.projectreactor.netty/reactor-netty-core/1.0.33, Apache-2.0, approved, #9687 -maven/mavencentral/io.projectreactor.netty/reactor-netty-http/1.0.33, Apache-2.0, approved, clearlydefined -maven/mavencentral/io.projectreactor/reactor-core/3.4.30, Apache-2.0, approved, #7517 -maven/mavencentral/io.rest-assured/json-path/5.3.1, Apache-2.0, approved, #9261 -maven/mavencentral/io.rest-assured/rest-assured-common/5.3.1, Apache-2.0, approved, #9264 -maven/mavencentral/io.rest-assured/rest-assured/5.3.1, Apache-2.0, approved, #9262 -maven/mavencentral/io.rest-assured/xml-path/5.3.1, Apache-2.0, approved, #9267 +maven/mavencentral/io.projectreactor.netty/reactor-netty-core/1.0.34, Apache-2.0, approved, #9687 +maven/mavencentral/io.projectreactor.netty/reactor-netty-http/1.0.34, Apache-2.0, approved, clearlydefined +maven/mavencentral/io.projectreactor/reactor-core/3.4.31, Apache-2.0, approved, #7517 +maven/mavencentral/io.rest-assured/json-path/5.3.2, Apache-2.0, approved, #9261 +maven/mavencentral/io.rest-assured/rest-assured-common/5.3.2, Apache-2.0, approved, #9264 +maven/mavencentral/io.rest-assured/rest-assured/5.3.2, Apache-2.0, approved, #9262 +maven/mavencentral/io.rest-assured/xml-path/5.3.2, Apache-2.0, approved, #9267 maven/mavencentral/io.setl/rdf-urdna/1.1, Apache-2.0, approved, clearlydefined maven/mavencentral/io.swagger.core.v3/swagger-annotations-jakarta/2.2.15, Apache-2.0, approved, #5947 -maven/mavencentral/io.swagger.core.v3/swagger-annotations-jakarta/2.2.2, Apache-2.0, approved, #5947 -maven/mavencentral/io.swagger.core.v3/swagger-annotations/2.2.10, Apache-2.0, approved, clearlydefined -maven/mavencentral/io.swagger.core.v3/swagger-core-jakarta/2.2.2, Apache-2.0, approved, #5929 -maven/mavencentral/io.swagger.core.v3/swagger-core/2.2.10, Apache-2.0, approved, #9265 -maven/mavencentral/io.swagger.core.v3/swagger-integration-jakarta/2.2.2, Apache-2.0, approved, clearlydefined -maven/mavencentral/io.swagger.core.v3/swagger-integration/2.2.10, Apache-2.0, approved, clearlydefined -maven/mavencentral/io.swagger.core.v3/swagger-jaxrs2-jakarta/2.2.2, Apache-2.0, approved, clearlydefined -maven/mavencentral/io.swagger.core.v3/swagger-jaxrs2/2.2.10, Apache-2.0, approved, #9814 -maven/mavencentral/io.swagger.core.v3/swagger-models-jakarta/2.2.2, Apache-2.0, approved, #5919 -maven/mavencentral/io.swagger.core.v3/swagger-models/2.2.10, Apache-2.0, approved, clearlydefined +maven/mavencentral/io.swagger.core.v3/swagger-annotations/2.2.15, Apache-2.0, approved, clearlydefined +maven/mavencentral/io.swagger.core.v3/swagger-core-jakarta/2.2.15, Apache-2.0, approved, #5929 +maven/mavencentral/io.swagger.core.v3/swagger-core/2.2.15, Apache-2.0, approved, #9265 +maven/mavencentral/io.swagger.core.v3/swagger-integration-jakarta/2.2.15, Apache-2.0, approved, clearlydefined +maven/mavencentral/io.swagger.core.v3/swagger-integration/2.2.15, Apache-2.0, approved, #10352 +maven/mavencentral/io.swagger.core.v3/swagger-jaxrs2-jakarta/2.2.15, Apache-2.0, approved, clearlydefined +maven/mavencentral/io.swagger.core.v3/swagger-jaxrs2/2.2.15, Apache-2.0, approved, #9814 +maven/mavencentral/io.swagger.core.v3/swagger-models-jakarta/2.2.15, Apache-2.0, approved, #5919 +maven/mavencentral/io.swagger.core.v3/swagger-models/2.2.15, Apache-2.0, approved, #10353 maven/mavencentral/jakarta.activation/jakarta.activation-api/1.2.1, EPL-2.0 OR BSD-3-Clause OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.jaf maven/mavencentral/jakarta.activation/jakarta.activation-api/2.1.0, EPL-2.0 OR BSD-3-Clause OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.jaf maven/mavencentral/jakarta.annotation/jakarta.annotation-api/2.1.1, EPL-2.0 OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.ca maven/mavencentral/jakarta.inject/jakarta.inject-api/2.0.1, Apache-2.0, approved, clearlydefined maven/mavencentral/jakarta.json/jakarta.json-api/2.1.1, EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0, approved, #7907 maven/mavencentral/jakarta.transaction/jakarta.transaction-api/2.0.0, EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0, approved, #7697 -maven/mavencentral/jakarta.validation/jakarta.validation-api/2.0.2, Apache-2.0, approved, clearlydefined -maven/mavencentral/jakarta.validation/jakarta.validation-api/3.0.0, Apache-2.0, approved, clearlydefined -maven/mavencentral/jakarta.validation/jakarta.validation-api/3.0.2, Apache-2.0, approved, clearlydefined +maven/mavencentral/jakarta.validation/jakarta.validation-api/2.0.2, Apache-2.0, approved, ee4j.validation +maven/mavencentral/jakarta.validation/jakarta.validation-api/3.0.2, Apache-2.0, approved, ee4j.validation maven/mavencentral/jakarta.ws.rs/jakarta.ws.rs-api/3.1.0, EPL-2.0 OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.rest maven/mavencentral/jakarta.xml.bind/jakarta.xml.bind-api/2.3.2, BSD-3-Clause, approved, ee4j.jaxb maven/mavencentral/jakarta.xml.bind/jakarta.xml.bind-api/3.0.0, BSD-3-Clause, approved, ee4j.jaxb @@ -177,12 +165,13 @@ maven/mavencentral/net.minidev/json-smart/2.5.0, Apache-2.0, approved, clearlyde maven/mavencentral/net.sf.saxon/Saxon-HE/10.6, MPL-2.0 AND W3C, approved, #7945 maven/mavencentral/org.antlr/antlr4-runtime/4.9.3, BSD-3-Clause, approved, #322 maven/mavencentral/org.apache.commons/commons-compress/1.23.0, Apache-2.0 AND BSD-3-Clause, approved, #7506 +maven/mavencentral/org.apache.commons/commons-compress/1.24.0, Apache-2.0 AND BSD-3-Clause AND bzip2-1.0.6 AND LicenseRef-Public-Domain, approved, #10368 maven/mavencentral/org.apache.commons/commons-lang3/3.11, Apache-2.0, approved, CQ22642 maven/mavencentral/org.apache.commons/commons-lang3/3.12.0, Apache-2.0, approved, clearlydefined maven/mavencentral/org.apache.commons/commons-pool2/2.11.1, Apache-2.0, approved, CQ23795 maven/mavencentral/org.apache.groovy/groovy-bom/4.0.11, Apache-2.0, approved, #9266 maven/mavencentral/org.apache.groovy/groovy-json/4.0.11, Apache-2.0, approved, #7411 -maven/mavencentral/org.apache.groovy/groovy-xml/4.0.11, Apache-2.0, approved, clearlydefined +maven/mavencentral/org.apache.groovy/groovy-xml/4.0.11, Apache-2.0, approved, #10179 maven/mavencentral/org.apache.groovy/groovy/4.0.11, Apache-2.0 AND BSD-3-Clause AND MIT, approved, #1742 maven/mavencentral/org.apache.httpcomponents/httpclient/4.5.13, Apache-2.0 AND LicenseRef-Public-Domain, approved, CQ23527 maven/mavencentral/org.apache.httpcomponents/httpcore/4.4.13, Apache-2.0, approved, CQ23528 @@ -200,139 +189,144 @@ maven/mavencentral/org.ccil.cowan.tagsoup/tagsoup/1.2.1, Apache-2.0, approved, c maven/mavencentral/org.checkerframework/checker-qual/3.12.0, MIT, approved, clearlydefined maven/mavencentral/org.checkerframework/checker-qual/3.31.0, MIT, approved, clearlydefined maven/mavencentral/org.codehaus.woodstox/stax2-api/4.2.1, BSD-2-Clause, approved, #2670 -maven/mavencentral/org.eclipse.edc/aggregate-service-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/api-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/api-observability/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/asset-api/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/asset-index-sql/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/asset-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/auth-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/auth-tokenbased/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/autodoc-processor/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/aws-s3-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/boot/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/callback-event-dispatcher/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/callback-http-dispatcher/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/catalog-api/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/catalog-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/catalog-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/configuration-filesystem/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/connector-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/contract-agreement-api/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/contract-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/contract-definition-api/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/contract-definition-store-sql/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/contract-negotiation-api/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/contract-negotiation-store-sql/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/contract-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-api-configuration/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-plane-aggregate-services/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-plane-api-client-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-plane-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/control-plane-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/core-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-api/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-aws-s3/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-client/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-framework/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-http-oauth2-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-http-oauth2/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-http-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-http/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-selector-client/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-selector-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-selector-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/data-plane-util/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-api-configuration/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-catalog-api/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-catalog-http-dispatcher/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-catalog-transform/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-catalog/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-http-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-http-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-negotiation-api/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-negotiation-http-dispatcher/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-negotiation-transform/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-negotiation/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-transfer-process-api/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-transfer-process-http-dispatcher/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-transfer-process-transform/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp-transfer-process/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/dsp/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/http-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/http/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/iam-mock/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/jersey-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/jersey-micrometer/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/jersey-providers/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/jetty-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/jetty-micrometer/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/json-ld-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/json-ld/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/junit/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/jwt-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/jwt-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/management-api-configuration/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/management-api/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/micrometer-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/oauth2-client/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/oauth2-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-definition-api/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-definition-store-sql/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-engine-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-engine/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-evaluator/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-model/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/policy-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/runtime-metamodel/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/sql-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/sql-lease/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/sql-pool-apache-commons/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/state-machine/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transaction-datasource-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transaction-local/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transaction-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transfer-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transfer-data-plane-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transfer-data-plane/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transfer-process-api/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transfer-process-store-sql/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transfer-pull-http-dynamic-receiver/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transfer-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transform-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/transform-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/util/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/validator-core/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/validator-spi/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/vault-azure/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/vault-hashicorp/0.2.1, Apache-2.0, approved, technology.edc -maven/mavencentral/org.eclipse.edc/web-spi/0.2.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/aggregate-service-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/api-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/api-observability/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/asset-api/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/asset-index-sql/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/asset-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/auth-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/auth-tokenbased/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/autodoc-processor/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/aws-s3-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/aws-s3-test/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/azure-blob-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/azure-test/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/boot/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/callback-event-dispatcher/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/callback-http-dispatcher/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/catalog-api/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/catalog-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/catalog-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/configuration-filesystem/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/connector-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/contract-agreement-api/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/contract-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/contract-definition-api/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/contract-definition-store-sql/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/contract-negotiation-api/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/contract-negotiation-store-sql/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/contract-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-api-configuration/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-aggregate-services/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-api-client-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-api-client/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-api/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/control-plane-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/core-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-api/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-aws-s3/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-azure-storage/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-client/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-http-oauth2-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-http-oauth2/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-http-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-http/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-selector-client/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-selector-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-selector-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/data-plane-util/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-api-configuration/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-catalog-api/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-catalog-http-dispatcher/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-catalog-transform/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-catalog/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-http-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-http-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-negotiation-api/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-negotiation-http-dispatcher/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-negotiation-transform/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-negotiation/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-transfer-process-api/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-transfer-process-http-dispatcher/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-transfer-process-transform/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp-transfer-process/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/dsp/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/http-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/http/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/iam-mock/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/jersey-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/jersey-micrometer/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/jersey-providers/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/jetty-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/jetty-micrometer/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/json-ld-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/json-ld/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/junit/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/jwt-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/jwt-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/management-api-configuration/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/management-api/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/micrometer-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/oauth2-client/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/oauth2-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-definition-api/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-definition-store-sql/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-engine-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-engine/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-evaluator/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-model/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/policy-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/runtime-metamodel/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/sql-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/sql-lease/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/sql-pool-apache-commons/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/state-machine/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transaction-datasource-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transaction-local/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transaction-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transfer-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transfer-data-plane-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transfer-data-plane/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transfer-process-api/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transfer-process-store-sql/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transfer-pull-http-dynamic-receiver/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transfer-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transform-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/transform-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/util/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/validator-core/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/validator-spi/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/vault-azure/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/vault-hashicorp/0.3.1, Apache-2.0, approved, technology.edc +maven/mavencentral/org.eclipse.edc/web-spi/0.3.1, Apache-2.0, approved, technology.edc maven/mavencentral/org.eclipse.jetty.toolchain/jetty-jakarta-servlet-api/5.0.2, EPL-2.0 OR Apache-2.0, approved, rt.jetty maven/mavencentral/org.eclipse.jetty.toolchain/jetty-jakarta-websocket-api/2.0.0, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty.websocket/websocket-core-client/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty.websocket/websocket-core-common/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty.websocket/websocket-core-server/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty.websocket/websocket-jakarta-client/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty.websocket/websocket-jakarta-common/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty.websocket/websocket-jakarta-server/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty.websocket/websocket-servlet/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty/jetty-alpn-client/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty/jetty-annotations/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty/jetty-client/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty/jetty-http/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty/jetty-io/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty/jetty-jndi/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty/jetty-plus/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty/jetty-security/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty/jetty-server/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty/jetty-servlet/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty/jetty-util/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty/jetty-webapp/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.jetty/jetty-xml/11.0.15, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.flywaydb/flyway-core/9.21.1, Apache-2.0, approved, #9846 +maven/mavencentral/org.eclipse.jetty.websocket/websocket-core-client/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty.websocket/websocket-core-common/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty.websocket/websocket-core-server/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty.websocket/websocket-jakarta-client/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty.websocket/websocket-jakarta-common/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty.websocket/websocket-jakarta-server/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty.websocket/websocket-servlet/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty/jetty-alpn-client/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty/jetty-annotations/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty/jetty-client/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty/jetty-http/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty/jetty-io/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty/jetty-jndi/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty/jetty-plus/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty/jetty-security/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty/jetty-server/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty/jetty-servlet/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty/jetty-util/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty/jetty-webapp/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.eclipse.jetty/jetty-xml/11.0.16, EPL-2.0 OR Apache-2.0, approved, rt.jetty +maven/mavencentral/org.flywaydb/flyway-core/9.22.2, Apache-2.0, approved, #10349 maven/mavencentral/org.glassfish.hk2.external/aopalliance-repackaged/3.0.4, EPL-2.0 OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.glassfish maven/mavencentral/org.glassfish.hk2/hk2-api/3.0.4, EPL-2.0 OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.glassfish maven/mavencentral/org.glassfish.hk2/hk2-locator/3.0.4, EPL-2.0 OR GPL-2.0-only with Classpath-exception-2.0, approved, ee4j.glassfish @@ -356,7 +350,6 @@ maven/mavencentral/org.jacoco/org.jacoco.agent/0.8.8, EPL-2.0, approved, CQ23285 maven/mavencentral/org.jacoco/org.jacoco.ant/0.8.8, EPL-2.0, approved, #1068 maven/mavencentral/org.jacoco/org.jacoco.core/0.8.8, EPL-2.0, approved, CQ23283 maven/mavencentral/org.jacoco/org.jacoco.report/0.8.8, EPL-2.0 AND Apache-2.0, approved, CQ23284 -maven/mavencentral/org.javassist/javassist/3.25.0-GA, MPL-1.1 OR LGPL-2.1-or-later OR Apache-2.0, approved, CQ19885 maven/mavencentral/org.javassist/javassist/3.28.0-GA, Apache-2.0 OR LGPL-2.1-or-later OR MPL-1.1, approved, #327 maven/mavencentral/org.javassist/javassist/3.29.2-GA, Apache-2.0 AND LGPL-2.1-or-later AND MPL-1.1, approved, #6023 maven/mavencentral/org.jetbrains.kotlin/kotlin-stdlib-common/1.6.20, Apache-2.0, approved, clearlydefined @@ -371,9 +364,11 @@ maven/mavencentral/org.jetbrains.kotlin/kotlin-stdlib/1.7.10, Apache-2.0, approv maven/mavencentral/org.jetbrains/annotations/13.0, Apache-2.0, approved, clearlydefined maven/mavencentral/org.jetbrains/annotations/17.0.0, Apache-2.0, approved, clearlydefined maven/mavencentral/org.jetbrains/annotations/24.0.1, Apache-2.0, approved, #7417 -maven/mavencentral/org.junit-pioneer/junit-pioneer/2.0.1, EPL-2.0, approved, clearlydefined +maven/mavencentral/org.junit-pioneer/junit-pioneer/2.1.0, EPL-2.0, approved, #10550 maven/mavencentral/org.junit.jupiter/junit-jupiter-api/5.10.0, EPL-2.0, approved, #9714 +maven/mavencentral/org.junit.jupiter/junit-jupiter-api/5.9.3, EPL-2.0, approved, #3133 maven/mavencentral/org.junit.jupiter/junit-jupiter-engine/5.10.0, EPL-2.0, approved, #9711 +maven/mavencentral/org.junit.jupiter/junit-jupiter-engine/5.9.3, EPL-2.0, approved, #3125 maven/mavencentral/org.junit.jupiter/junit-jupiter-params/5.10.0, EPL-2.0, approved, #9708 maven/mavencentral/org.junit.platform/junit-platform-commons/1.10.0, EPL-2.0, approved, #9715 maven/mavencentral/org.junit.platform/junit-platform-engine/1.10.0, EPL-2.0, approved, #9709 @@ -395,7 +390,6 @@ maven/mavencentral/org.ow2.asm/asm/9.2, BSD-3-Clause, approved, CQ23635 maven/mavencentral/org.ow2.asm/asm/9.3, BSD-3-Clause, approved, clearlydefined maven/mavencentral/org.ow2.asm/asm/9.5, BSD-3-Clause, approved, #7554 maven/mavencentral/org.postgresql/postgresql/42.6.0, BSD-2-Clause AND Apache-2.0, approved, #9159 -maven/mavencentral/org.reactivestreams/reactive-streams/1.0.3, CC0-1.0, approved, CQ16332 maven/mavencentral/org.reactivestreams/reactive-streams/1.0.4, CC0-1.0, approved, CQ16332 maven/mavencentral/org.reflections/reflections/0.10.2, Apache-2.0 AND WTFPL, approved, clearlydefined maven/mavencentral/org.rnorth.duct-tape/duct-tape/1.0.8, MIT, approved, clearlydefined @@ -407,55 +401,61 @@ maven/mavencentral/org.slf4j/slf4j-api/1.7.35, MIT, approved, CQ13368 maven/mavencentral/org.slf4j/slf4j-api/1.7.36, MIT, approved, CQ13368 maven/mavencentral/org.slf4j/slf4j-api/1.7.7, MIT, approved, CQ9827 maven/mavencentral/org.slf4j/slf4j-api/2.0.5, MIT, approved, #5915 -maven/mavencentral/org.slf4j/slf4j-api/2.0.7, MIT, approved, #5915 -maven/mavencentral/org.testcontainers/database-commons/1.18.3, MIT, approved, clearlydefined -maven/mavencentral/org.testcontainers/jdbc/1.18.3, MIT, approved, clearlydefined -maven/mavencentral/org.testcontainers/junit-jupiter/1.18.3, MIT, approved, #7941 -maven/mavencentral/org.testcontainers/postgresql/1.18.3, MIT, approved, #9332 -maven/mavencentral/org.testcontainers/testcontainers/1.18.3, MIT, approved, #7938 -maven/mavencentral/org.yaml/snakeyaml/1.33, Apache-2.0, approved, clearlydefined +maven/mavencentral/org.slf4j/slf4j-api/2.0.9, MIT, approved, #5915 +maven/mavencentral/org.testcontainers/database-commons/1.19.0, Apache-2.0, approved, #10345 +maven/mavencentral/org.testcontainers/database-commons/1.19.1, Apache-2.0, approved, #10345 +maven/mavencentral/org.testcontainers/jdbc/1.19.0, Apache-2.0, approved, #10348 +maven/mavencentral/org.testcontainers/jdbc/1.19.1, Apache-2.0, approved, #10348 +maven/mavencentral/org.testcontainers/junit-jupiter/1.19.0, MIT, approved, #10344 +maven/mavencentral/org.testcontainers/junit-jupiter/1.19.1, MIT, approved, #10344 +maven/mavencentral/org.testcontainers/postgresql/1.19.0, MIT, approved, #10350 +maven/mavencentral/org.testcontainers/postgresql/1.19.1, MIT, approved, #10350 +maven/mavencentral/org.testcontainers/testcontainers/1.19.0, Apache-2.0 AND MIT, approved, #10347 +maven/mavencentral/org.testcontainers/testcontainers/1.19.1, Apache-2.0 AND MIT, approved, #10347 +maven/mavencentral/org.testcontainers/vault/1.19.1, MIT, approved, #10852 maven/mavencentral/org.yaml/snakeyaml/2.0, Apache-2.0 AND (Apache-2.0 OR BSD-3-Clause OR EPL-1.0 OR GPL-2.0-or-later OR LGPL-2.1-or-later), approved, #7275 -maven/mavencentral/org.yaml/snakeyaml/2.1, Apache-2.0, approved, #9847 -maven/mavencentral/software.amazon.awssdk/annotations/2.20.123, Apache-2.0, approved, #8598 -maven/mavencentral/software.amazon.awssdk/annotations/2.20.130, Apache-2.0, approved, #8598 -maven/mavencentral/software.amazon.awssdk/apache-client/2.20.123, Apache-2.0, approved, #8609 -maven/mavencentral/software.amazon.awssdk/apache-client/2.20.130, Apache-2.0, approved, #8609 -maven/mavencentral/software.amazon.awssdk/arns/2.20.123, Apache-2.0, approved, #8616 -maven/mavencentral/software.amazon.awssdk/arns/2.20.130, Apache-2.0, approved, #8616 -maven/mavencentral/software.amazon.awssdk/auth/2.20.123, Apache-2.0, approved, #8602 -maven/mavencentral/software.amazon.awssdk/auth/2.20.130, Apache-2.0, approved, #8602 -maven/mavencentral/software.amazon.awssdk/aws-core/2.20.123, Apache-2.0, approved, #8612 -maven/mavencentral/software.amazon.awssdk/aws-core/2.20.130, Apache-2.0, approved, #8612 -maven/mavencentral/software.amazon.awssdk/aws-query-protocol/2.20.123, Apache-2.0, approved, #8629 -maven/mavencentral/software.amazon.awssdk/aws-query-protocol/2.20.130, Apache-2.0, approved, #8629 -maven/mavencentral/software.amazon.awssdk/aws-xml-protocol/2.20.123, Apache-2.0, approved, #8624 -maven/mavencentral/software.amazon.awssdk/aws-xml-protocol/2.20.130, Apache-2.0, approved, #8624 -maven/mavencentral/software.amazon.awssdk/crt-core/2.20.123, Apache-2.0, approved, #8627 -maven/mavencentral/software.amazon.awssdk/crt-core/2.20.130, Apache-2.0, approved, #8627 -maven/mavencentral/software.amazon.awssdk/endpoints-spi/2.20.123, Apache-2.0, approved, #8604 -maven/mavencentral/software.amazon.awssdk/endpoints-spi/2.20.130, Apache-2.0, approved, #8604 -maven/mavencentral/software.amazon.awssdk/http-client-spi/2.20.123, Apache-2.0, approved, #8608 -maven/mavencentral/software.amazon.awssdk/http-client-spi/2.20.130, Apache-2.0, approved, #8608 -maven/mavencentral/software.amazon.awssdk/iam/2.20.123, Apache-2.0, approved, #9271 -maven/mavencentral/software.amazon.awssdk/json-utils/2.20.123, Apache-2.0, approved, #8614 -maven/mavencentral/software.amazon.awssdk/json-utils/2.20.130, Apache-2.0, approved, #8614 -maven/mavencentral/software.amazon.awssdk/metrics-spi/2.20.123, Apache-2.0, approved, #8636 -maven/mavencentral/software.amazon.awssdk/metrics-spi/2.20.130, Apache-2.0, approved, #8636 -maven/mavencentral/software.amazon.awssdk/netty-nio-client/2.20.123, Apache-2.0, approved, #8613 -maven/mavencentral/software.amazon.awssdk/netty-nio-client/2.20.130, Apache-2.0, approved, #8613 -maven/mavencentral/software.amazon.awssdk/profiles/2.20.123, Apache-2.0, approved, #8600 -maven/mavencentral/software.amazon.awssdk/profiles/2.20.130, Apache-2.0, approved, #8600 -maven/mavencentral/software.amazon.awssdk/protocol-core/2.20.123, Apache-2.0, approved, #8635 -maven/mavencentral/software.amazon.awssdk/protocol-core/2.20.130, Apache-2.0, approved, #8635 -maven/mavencentral/software.amazon.awssdk/regions/2.20.123, Apache-2.0, approved, #8632 -maven/mavencentral/software.amazon.awssdk/regions/2.20.130, Apache-2.0, approved, #8632 -maven/mavencentral/software.amazon.awssdk/s3/2.20.123, Apache-2.0, approved, #8623 -maven/mavencentral/software.amazon.awssdk/s3/2.20.130, Apache-2.0, approved, #8623 -maven/mavencentral/software.amazon.awssdk/sdk-core/2.20.123, Apache-2.0, approved, #8611 -maven/mavencentral/software.amazon.awssdk/sdk-core/2.20.130, Apache-2.0, approved, #8611 -maven/mavencentral/software.amazon.awssdk/sts/2.20.123, Apache-2.0, approved, #9269 -maven/mavencentral/software.amazon.awssdk/third-party-jackson-core/2.20.123, Apache-2.0, approved, #8622 -maven/mavencentral/software.amazon.awssdk/third-party-jackson-core/2.20.130, Apache-2.0, approved, #8622 -maven/mavencentral/software.amazon.awssdk/utils/2.20.123, Apache-2.0, approved, #8625 -maven/mavencentral/software.amazon.awssdk/utils/2.20.130, Apache-2.0, approved, #8625 +maven/mavencentral/org.yaml/snakeyaml/2.2, Apache-2.0 AND (Apache-2.0 OR BSD-3-Clause OR EPL-1.0 OR GPL-2.0-or-later OR LGPL-2.1-or-later), approved, #10232 +maven/mavencentral/software.amazon.awssdk/annotations/2.20.146, Apache-2.0, approved, #8598 +maven/mavencentral/software.amazon.awssdk/annotations/2.20.153, Apache-2.0, approved, #8598 +maven/mavencentral/software.amazon.awssdk/apache-client/2.20.146, Apache-2.0, approved, #8609 +maven/mavencentral/software.amazon.awssdk/apache-client/2.20.153, Apache-2.0, approved, #8609 +maven/mavencentral/software.amazon.awssdk/arns/2.20.146, Apache-2.0, approved, #8616 +maven/mavencentral/software.amazon.awssdk/arns/2.20.153, Apache-2.0, approved, #8616 +maven/mavencentral/software.amazon.awssdk/auth/2.20.146, Apache-2.0, approved, #8602 +maven/mavencentral/software.amazon.awssdk/auth/2.20.153, Apache-2.0, approved, #8602 +maven/mavencentral/software.amazon.awssdk/aws-core/2.20.146, Apache-2.0, approved, #8612 +maven/mavencentral/software.amazon.awssdk/aws-core/2.20.153, Apache-2.0, approved, #8612 +maven/mavencentral/software.amazon.awssdk/aws-query-protocol/2.20.146, Apache-2.0, approved, #8629 +maven/mavencentral/software.amazon.awssdk/aws-query-protocol/2.20.153, Apache-2.0, approved, #8629 +maven/mavencentral/software.amazon.awssdk/aws-xml-protocol/2.20.146, Apache-2.0, approved, #8624 +maven/mavencentral/software.amazon.awssdk/aws-xml-protocol/2.20.153, Apache-2.0, approved, #8624 +maven/mavencentral/software.amazon.awssdk/crt-core/2.20.146, Apache-2.0, approved, #8627 +maven/mavencentral/software.amazon.awssdk/crt-core/2.20.153, Apache-2.0, approved, #8627 +maven/mavencentral/software.amazon.awssdk/endpoints-spi/2.20.146, Apache-2.0, approved, #8604 +maven/mavencentral/software.amazon.awssdk/endpoints-spi/2.20.153, Apache-2.0, approved, #8604 +maven/mavencentral/software.amazon.awssdk/http-client-spi/2.20.146, Apache-2.0, approved, #8608 +maven/mavencentral/software.amazon.awssdk/http-client-spi/2.20.153, Apache-2.0, approved, #8608 +maven/mavencentral/software.amazon.awssdk/iam/2.20.146, Apache-2.0, approved, #9271 +maven/mavencentral/software.amazon.awssdk/json-utils/2.20.146, Apache-2.0, approved, #8614 +maven/mavencentral/software.amazon.awssdk/json-utils/2.20.153, Apache-2.0, approved, #8614 +maven/mavencentral/software.amazon.awssdk/metrics-spi/2.20.146, Apache-2.0, approved, #8636 +maven/mavencentral/software.amazon.awssdk/metrics-spi/2.20.153, Apache-2.0, approved, #8636 +maven/mavencentral/software.amazon.awssdk/netty-nio-client/2.20.146, Apache-2.0, approved, #8613 +maven/mavencentral/software.amazon.awssdk/netty-nio-client/2.20.153, Apache-2.0, approved, #8613 +maven/mavencentral/software.amazon.awssdk/profiles/2.20.146, Apache-2.0, approved, #8600 +maven/mavencentral/software.amazon.awssdk/profiles/2.20.153, Apache-2.0, approved, #8600 +maven/mavencentral/software.amazon.awssdk/protocol-core/2.20.146, Apache-2.0, approved, #8635 +maven/mavencentral/software.amazon.awssdk/protocol-core/2.20.153, Apache-2.0, approved, #8635 +maven/mavencentral/software.amazon.awssdk/regions/2.20.146, Apache-2.0, approved, #8632 +maven/mavencentral/software.amazon.awssdk/regions/2.20.153, Apache-2.0, approved, #8632 +maven/mavencentral/software.amazon.awssdk/s3-transfer-manager/2.20.153, Apache-2.0, approved, #10521 +maven/mavencentral/software.amazon.awssdk/s3/2.20.146, Apache-2.0, approved, #8623 +maven/mavencentral/software.amazon.awssdk/s3/2.20.153, Apache-2.0, approved, #8623 +maven/mavencentral/software.amazon.awssdk/sdk-core/2.20.146, Apache-2.0, approved, #8611 +maven/mavencentral/software.amazon.awssdk/sdk-core/2.20.153, Apache-2.0, approved, #8611 +maven/mavencentral/software.amazon.awssdk/sts/2.20.146, Apache-2.0, approved, #9269 +maven/mavencentral/software.amazon.awssdk/third-party-jackson-core/2.20.146, Apache-2.0, approved, #8622 +maven/mavencentral/software.amazon.awssdk/third-party-jackson-core/2.20.153, Apache-2.0, approved, #8622 +maven/mavencentral/software.amazon.awssdk/utils/2.20.146, Apache-2.0, approved, #8625 +maven/mavencentral/software.amazon.awssdk/utils/2.20.153, Apache-2.0, approved, #8625 maven/mavencentral/software.amazon.eventstream/eventstream/1.0.1, Apache-2.0, approved, clearlydefined diff --git a/build.gradle.kts b/build.gradle.kts index 076c089ba..23013ce7b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -25,25 +25,22 @@ plugins { `java-library` `maven-publish` `jacoco-report-aggregation` - id("com.diffplug.spotless") version "6.20.0" id("com.github.johnrengelman.shadow") version "8.1.1" - id("com.bmuschko.docker-remote-api") version "9.3.2" + id("com.bmuschko.docker-remote-api") version "9.3.3" id("io.github.gradle-nexus.publish-plugin") version "1.3.0" } val txScmConnection: String by project val txWebsiteUrl: String by project val txScmUrl: String by project -val annotationProcessorVersion: String by project -val metaModelVersion: String by project +val edcVersion = libs.versions.edc buildscript { repositories { mavenLocal() } dependencies { - val edcGradlePluginsVersion: String by project - classpath("org.eclipse.edc.edc-build:org.eclipse.edc.edc-build.gradle.plugin:${edcGradlePluginsVersion}") + classpath(libs.edc.build.plugin) } } @@ -62,13 +59,13 @@ allprojects { mavenCentral() } dependencies { - implementation("org.slf4j:slf4j-api:2.0.7") + implementation("org.slf4j:slf4j-api:2.0.9") // this is used to counter version conflicts between the JUnit version pulled in by the plugin, // and the one expected by IntelliJ testImplementation(platform("org.junit:junit-bom:5.10.0")) constraints { - implementation("org.yaml:snakeyaml:2.1") { + implementation("org.yaml:snakeyaml:2.2") { because("version 1.33 has vulnerabilities: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-1471.") } implementation("net.minidev:json-smart:2.5.0") { @@ -79,7 +76,7 @@ allprojects { // configure which version of the annotation processor to use. defaults to the same version as the plugin configure { - processorVersion.set(annotationProcessorVersion) + processorVersion.set(edcVersion) outputDirectory.set(project.buildDir) // uncomment the following lines to enable the Autodoc-2-Markdown converter // only available with EDC 0.2.1 SNAPSHOT @@ -90,7 +87,7 @@ allprojects { configure { versions { // override default dependency versions here - metaModel.set(metaModelVersion) + metaModel.set(edcVersion) } pom { @@ -105,8 +102,8 @@ allprojects { swagger { title.set((project.findProperty("apiTitle") ?: "Tractus-X REST API") as String) description = - (project.findProperty("apiDescription") - ?: "Tractus-X REST APIs - merged by OpenApiMerger") as String + (project.findProperty("apiDescription") + ?: "Tractus-X REST APIs - merged by OpenApiMerger") as String outputFilename.set(project.name) outputDirectory.set(file("${rootProject.projectDir.path}/resources/openapi/yaml")) resourcePackages = setOf("org.eclipse.tractusx.edc") @@ -150,7 +147,7 @@ allprojects { subprojects { afterEvaluate { if (project.plugins.hasPlugin("com.github.johnrengelman.shadow") && - file("${project.projectDir}/src/main/docker/Dockerfile").exists() + file("${project.projectDir}/src/main/docker/Dockerfile").exists() ) { val agentFile = project.buildDir.resolve("opentelemetry-javaagent.jar") @@ -167,7 +164,12 @@ subprojects { } // download the jar file doLast { - val download = { url: String, destFile: File -> ant.invokeMethod("get", mapOf("src" to url, "dest" to destFile)) } + val download = { url: String, destFile: File -> + ant.invokeMethod( + "get", + mapOf("src" to url, "dest" to destFile) + ) + } logger.lifecycle("Downloading OpenTelemetry Agent") download(openTelemetryAgentUrl, agentFile) } @@ -190,7 +192,7 @@ subprojects { } // make sure always runs after "dockerize" and after "copyOtel" dockerTask.dependsOn(tasks.named(ShadowJavaPlugin.SHADOW_JAR_TASK_NAME)) - .dependsOn(downloadOtel) + .dependsOn(downloadOtel) } } } diff --git a/charts/tractusx-connector-azure-vault/Chart.yaml b/charts/tractusx-connector-azure-vault/Chart.yaml index 8383cfb89..7f5919e2e 100644 --- a/charts/tractusx-connector-azure-vault/Chart.yaml +++ b/charts/tractusx-connector-azure-vault/Chart.yaml @@ -40,12 +40,12 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.5.1 +version: 0.6.0-rc1 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.5.1" +appVersion: "0.6.0-rc1" home: https://github.com/eclipse-tractusx/tractusx-edc/tree/main/charts/tractusx-connector sources: - https://github.com/eclipse-tractusx/tractusx-edc/tree/main/charts/tractusx-connector @@ -53,6 +53,6 @@ dependencies: # PostgreSQL - name: postgresql alias: postgresql - version: 12.1.6 + version: 12.11.2 repository: https://charts.bitnami.com/bitnami condition: install.postgresql diff --git a/charts/tractusx-connector-azure-vault/README.md b/charts/tractusx-connector-azure-vault/README.md index 1b67b817c..90222879a 100644 --- a/charts/tractusx-connector-azure-vault/README.md +++ b/charts/tractusx-connector-azure-vault/README.md @@ -1,6 +1,6 @@ # tractusx-connector-azure-vault -![Version: 0.5.1](https://img.shields.io/badge/Version-0.5.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.5.1](https://img.shields.io/badge/AppVersion-0.5.1-informational?style=flat-square) +![Version: 0.6.0-rc1](https://img.shields.io/badge/Version-0.6.0--rc1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.6.0-rc1](https://img.shields.io/badge/AppVersion-0.6.0--rc1-informational?style=flat-square) A Helm chart for Tractus-X Eclipse Data Space Connector. The connector deployment consists of two runtime consists of a Control Plane and a Data Plane. Note that _no_ external dependencies such as a PostgreSQL database and Azure KeyVault are included. @@ -13,7 +13,7 @@ This chart is intended for use with an _existing_ PostgreSQL database and an _ex ### Preconditions -- the [Managed Identity Walled (MIW)](https://github.com/catenax-ng/tx-managed-identity-wallets) must be running and reachable via network +- the [Managed Identity Walled (MIW)](https://github.com/eclipse-tractusx/managed-identity-wallet) must be running and reachable via network - the necessary set of VerifiableCredentials for this participant must be pushed to MIW. This is typically done by the Portal during participant onboarding - KeyCloak must be running and reachable via network @@ -45,7 +45,7 @@ Combined, run this shell command to start the in-memory Tractus-X EDC runtime: ```shell helm repo add tractusx-edc https://eclipse-tractusx.github.io/charts/dev -helm install my-release tractusx-edc/tractusx-connector-azure-vault --version 0.5.1 \ +helm install my-release tractusx-edc/tractusx-connector-azure-vault --version 0.6.0-rc1 \ -f /tractusx-connector-azure-vault-test.yaml \ --set vault.azure.name=$AZURE_VAULT_NAME \ --set vault.azure.client=$AZURE_CLIENT_ID \ @@ -61,13 +61,13 @@ helm install my-release tractusx-edc/tractusx-connector-azure-vault --version 0. | Repository | Name | Version | |------------|------|---------| -| https://charts.bitnami.com/bitnami | postgresql(postgresql) | 12.1.6 | +| https://charts.bitnami.com/bitnami | postgresql(postgresql) | 12.11.2 | ## Values | Key | Type | Default | Description | |-----|------|---------|-------------| -| backendService.httpProxyTokenReceiverUrl | string | `""` | | +| backendService.httpProxyTokenReceiverUrl | string | `"https://example.com"` | Specifies a backend service which will receive the EDR | | controlplane.affinity | object | `{}` | | | controlplane.autoscaling.enabled | bool | `false` | Enables [horizontal pod autoscaling](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) | | controlplane.autoscaling.maxReplicas | int | `100` | Maximum replicas if resource consumption exceeds resource threshholds | @@ -78,15 +78,15 @@ helm install my-release tractusx-edc/tractusx-connector-azure-vault --version 0. | controlplane.debug.enabled | bool | `false` | | | controlplane.debug.port | int | `1044` | | | controlplane.debug.suspendOnStart | bool | `false` | | -| controlplane.endpoints | object | `{"control":{"path":"/control","port":8083},"default":{"path":"/api","port":8080},"management":{"authKey":"","path":"/management","port":8081},"metrics":{"path":"/metrics","port":9090},"protocol":{"path":"/api/v1/dsp","port":8084}}` | endpoints of the control plane | +| controlplane.endpoints | object | `{"control":{"path":"/control","port":8083},"default":{"path":"/api","port":8080},"management":{"authKey":"password","path":"/management","port":8081},"metrics":{"path":"/metrics","port":9090},"protocol":{"path":"/api/v1/dsp","port":8084}}` | endpoints of the control plane | | controlplane.endpoints.control | object | `{"path":"/control","port":8083}` | control api, used for internal control calls. can be added to the internal ingress, but should probably not | | controlplane.endpoints.control.path | string | `"/control"` | path for incoming api calls | | controlplane.endpoints.control.port | int | `8083` | port for incoming api calls | | controlplane.endpoints.default | object | `{"path":"/api","port":8080}` | default api for health checks, should not be added to any ingress | | controlplane.endpoints.default.path | string | `"/api"` | path for incoming api calls | | controlplane.endpoints.default.port | int | `8080` | port for incoming api calls | -| controlplane.endpoints.management | object | `{"authKey":"","path":"/management","port":8081}` | data management api, used by internal users, can be added to an ingress and must not be internet facing | -| controlplane.endpoints.management.authKey | string | `""` | authentication key, must be attached to each 'X-Api-Key' request header | +| controlplane.endpoints.management | object | `{"authKey":"password","path":"/management","port":8081}` | data management api, used by internal users, can be added to an ingress and must not be internet facing | +| controlplane.endpoints.management.authKey | string | `"password"` | authentication key, must be attached to each 'X-Api-Key' request header | | controlplane.endpoints.management.path | string | `"/management"` | path for incoming api calls | | controlplane.endpoints.management.port | int | `8081` | port for incoming api calls | | controlplane.endpoints.metrics | object | `{"path":"/metrics","port":9090}` | metrics api, used for application metrics, must not be internet facing | @@ -184,6 +184,7 @@ helm install my-release tractusx-edc/tractusx-connector-azure-vault --version 0. | dataplane.endpoints.default.port | int | `8080` | | | dataplane.endpoints.metrics.path | string | `"/metrics"` | | | dataplane.endpoints.metrics.port | int | `9090` | | +| dataplane.endpoints.proxy.authKey | string | `"password"` | | | dataplane.endpoints.proxy.path | string | `"/proxy"` | | | dataplane.endpoints.proxy.port | int | `8186` | | | dataplane.endpoints.public.path | string | `"/api/public"` | | @@ -246,7 +247,7 @@ helm install my-release tractusx-edc/tractusx-connector-azure-vault --version 0. | imagePullSecrets | list | `[]` | Existing image pull secret to use to [obtain the container image from private registries](https://kubernetes.io/docs/concepts/containers/images/#using-a-private-registry) | | install.postgresql | bool | `true` | | | nameOverride | string | `""` | | -| participant.id | string | `""` | BPN Number | +| participant.id | string | `"BPNLCHANGEME"` | BPN Number | | postgresql.auth.database | string | `"edc"` | | | postgresql.auth.password | string | `"password"` | | | postgresql.auth.username | string | `"user"` | | @@ -261,10 +262,10 @@ helm install my-release tractusx-edc/tractusx-connector-azure-vault --version 0. | tests | object | `{"hookDeletePolicy":"before-hook-creation,hook-succeeded"}` | Configurations for Helm tests | | tests.hookDeletePolicy | string | `"before-hook-creation,hook-succeeded"` | Configure the hook-delete-policy for Helm tests | | vault.azure.certificate | string | `nil` | | -| vault.azure.client | string | `""` | | -| vault.azure.name | string | `""` | | +| vault.azure.client | string | `""` | | +| vault.azure.name | string | `""` | | | vault.azure.secret | string | `nil` | | -| vault.azure.tenant | string | `""` | | +| vault.azure.tenant | string | `""` | | | vault.secretNames.transferProxyTokenEncryptionAesKey | string | `"transfer-proxy-token-encryption-aes-key"` | | | vault.secretNames.transferProxyTokenSignerPrivateKey | string | `nil` | | | vault.secretNames.transferProxyTokenSignerPublicKey | string | `nil` | | diff --git a/charts/tractusx-connector-azure-vault/README.md.gotmpl b/charts/tractusx-connector-azure-vault/README.md.gotmpl index 03cb5d365..4823545b3 100644 --- a/charts/tractusx-connector-azure-vault/README.md.gotmpl +++ b/charts/tractusx-connector-azure-vault/README.md.gotmpl @@ -12,7 +12,7 @@ ### Preconditions -- the [Managed Identity Walled (MIW)](https://github.com/catenax-ng/tx-managed-identity-wallets) must be running and reachable via network +- the [Managed Identity Walled (MIW)](https://github.com/eclipse-tractusx/managed-identity-wallet) must be running and reachable via network - the necessary set of VerifiableCredentials for this participant must be pushed to MIW. This is typically done by the Portal during participant onboarding - KeyCloak must be running and reachable via network diff --git a/charts/tractusx-connector-azure-vault/templates/_helpers.tpl b/charts/tractusx-connector-azure-vault/templates/_helpers.tpl index c579ca6d6..b3c570bb1 100644 --- a/charts/tractusx-connector-azure-vault/templates/_helpers.tpl +++ b/charts/tractusx-connector-azure-vault/templates/_helpers.tpl @@ -135,6 +135,13 @@ Validation URL {{- printf "http://%s-controlplane:%v%s/token" ( include "txdc.fullname" $ ) $.Values.controlplane.endpoints.control.port $.Values.controlplane.endpoints.control.path -}} {{- end }} +{{/* +Control Plane URL +*/}} +{{- define "txdc.controlplane.url.control" -}} +{{- printf "http://%s-controlplane:%v%s" ( include "txdc.fullname" $ ) $.Values.controlplane.endpoints.control.port $.Values.controlplane.endpoints.control.path -}} +{{- end }} + {{/* Data Control URL */}} diff --git a/charts/tractusx-connector-azure-vault/templates/deployment-controlplane.yaml b/charts/tractusx-connector-azure-vault/templates/deployment-controlplane.yaml index e5426d115..651e502a3 100644 --- a/charts/tractusx-connector-azure-vault/templates/deployment-controlplane.yaml +++ b/charts/tractusx-connector-azure-vault/templates/deployment-controlplane.yaml @@ -184,6 +184,8 @@ spec: value: {{ .Values.controlplane.endpoints.protocol.port | quote }} - name: "WEB_HTTP_PROTOCOL_PATH" value: {{ .Values.controlplane.endpoints.protocol.path | quote }} + - name: "EDC_CONTROL_ENDPOINT" + value: {{ include "txdc.controlplane.url.control" .}} ######### ## DSP ## diff --git a/charts/tractusx-connector-azure-vault/templates/deployment-dataplane.yaml b/charts/tractusx-connector-azure-vault/templates/deployment-dataplane.yaml index e5490a90e..3d1243817 100644 --- a/charts/tractusx-connector-azure-vault/templates/deployment-dataplane.yaml +++ b/charts/tractusx-connector-azure-vault/templates/deployment-dataplane.yaml @@ -148,6 +148,8 @@ spec: ####### # API # ####### + - name: "EDC_API_AUTH_KEY" + value: {{ .Values.dataplane.endpoints.proxy.authKey | required ".Values.proxy.endpoints.proxy.authKey is required" | quote }} - name: "WEB_HTTP_DEFAULT_PORT" value: {{ .Values.dataplane.endpoints.default.port | quote }} - name: "WEB_HTTP_DEFAULT_PATH" diff --git a/charts/tractusx-connector-azure-vault/values.yaml b/charts/tractusx-connector-azure-vault/values.yaml index 0c157c2b1..be67226d1 100644 --- a/charts/tractusx-connector-azure-vault/values.yaml +++ b/charts/tractusx-connector-azure-vault/values.yaml @@ -38,7 +38,7 @@ customLabels: {} participant: # -- BPN Number - id: "" + id: "BPNLCHANGEME" controlplane: image: @@ -94,7 +94,7 @@ controlplane: # -- path for incoming api calls path: /management # -- authentication key, must be attached to each 'X-Api-Key' request header - authKey: "" + authKey: "password" # -- control api, used for internal control calls. can be added to the internal ingress, but should probably not control: # -- port for incoming api calls @@ -354,6 +354,7 @@ dataplane: proxy: port: 8186 path: /proxy + authKey: "password" metrics: port: 9090 path: /metrics @@ -507,9 +508,9 @@ postgresql: password: "password" vault: azure: - name: "" - client: "" - tenant: "" + name: "" + client: "" + tenant: "" secret: certificate: @@ -519,7 +520,8 @@ vault: transferProxyTokenEncryptionAesKey: transfer-proxy-token-encryption-aes-key backendService: - httpProxyTokenReceiverUrl: "" + # -- Specifies a backend service which will receive the EDR + httpProxyTokenReceiverUrl: "https://example.com" serviceAccount: # Specifies whether a service account should be created create: true diff --git a/charts/tractusx-connector-memory/Chart.yaml b/charts/tractusx-connector-memory/Chart.yaml index c77ee4ca3..75168a445 100644 --- a/charts/tractusx-connector-memory/Chart.yaml +++ b/charts/tractusx-connector-memory/Chart.yaml @@ -34,12 +34,12 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.5.1 +version: 0.6.0-rc1 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.5.1" +appVersion: "0.6.0-rc1" home: https://github.com/eclipse-tractusx/tractusx-edc/tree/main/charts/tractusx-connector-memory sources: - https://github.com/eclipse-tractusx/tractusx-edc/tree/main/charts/tractusx-connector-memory diff --git a/charts/tractusx-connector-memory/README.md b/charts/tractusx-connector-memory/README.md index b36dec5d8..aec09e501 100644 --- a/charts/tractusx-connector-memory/README.md +++ b/charts/tractusx-connector-memory/README.md @@ -1,6 +1,6 @@ # tractusx-connector-memory -![Version: 0.5.1](https://img.shields.io/badge/Version-0.5.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.5.1](https://img.shields.io/badge/AppVersion-0.5.1-informational?style=flat-square) +![Version: 0.6.0-rc1](https://img.shields.io/badge/Version-0.6.0--rc1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.6.0-rc1](https://img.shields.io/badge/AppVersion-0.6.0--rc1-informational?style=flat-square) A Helm chart for Tractus-X Eclipse Data Space Connector based on memory. Please only use this for development or testing purposes, never in production workloads! @@ -10,7 +10,7 @@ A Helm chart for Tractus-X Eclipse Data Space Connector based on memory. Please ### Preconditions -- the [Managed Identity Walled (MIW)](https://github.com/catenax-ng/tx-managed-identity-wallets) must be running and reachable via network +- the [Managed Identity Walled (MIW)](https://github.com/eclipse-tractusx/managed-identity-wallet) must be running and reachable via network - the necessary set of VerifiableCredentials for this participant must be pushed to MIW. This is typically done by the Portal during participant onboarding - KeyCloak must be running and reachable via network @@ -39,7 +39,7 @@ Combined, run this shell command to start the in-memory Tractus-X EDC runtime: ```shell helm repo add tractusx-edc https://eclipse-tractusx.github.io/charts/dev -helm install my-release tractusx-edc/tractusx-connector-memory --version 0.5.1 \ +helm install my-release tractusx-edc/tractusx-connector-memory --version 0.6.0-rc1 \ -f /tractusx-connector-memory-test.yaml \ --set vault.secrets="client-secret:$YOUR_CLIENT_SECRET" ``` @@ -52,21 +52,13 @@ helm install my-release tractusx-edc/tractusx-connector-memory --version 0.5.1 \ | Key | Type | Default | Description | |-----|------|---------|-------------| -| backendService.httpProxyTokenReceiverUrl | string | `""` | | +| backendService.httpProxyTokenReceiverUrl | string | `"https://example.com"` | Specifies a backend service which will receive the EDR | | customCaCerts | object | `{}` | Add custom ca certificates to the truststore | | customLabels | object | `{}` | To add some custom labels | -| daps.clientId | string | `""` | | -| daps.connectors[0].attributes.referringConnector | string | `"http://sokrates-controlplane/BPNSOKRATES"` | | -| daps.connectors[0].certificate | string | `""` | | -| daps.connectors[0].id | string | `"E7:07:2D:74:56:66:31:F0:7B:10:EA:B6:03:06:4C:23:7F:ED:A6:65:keyid:E7:07:2D:74:56:66:31:F0:7B:10:EA:B6:03:06:4C:23:7F:ED:A6:65"` | | -| daps.connectors[0].name | string | `"sokrates"` | | -| daps.paths.jwks | string | `"/jwks.json"` | | -| daps.paths.token | string | `"/token"` | | -| daps.url | string | `"http://{{ .Release.Name }}-daps:4567"` | | | fullnameOverride | string | `""` | | | imagePullSecrets | list | `[]` | Existing image pull secret to use to [obtain the container image from private registries](https://kubernetes.io/docs/concepts/containers/images/#using-a-private-registry) | | nameOverride | string | `""` | | -| participant.id | string | `""` | BPN Number | +| participant.id | string | `"BPNLCHANGEME"` | BPN Number | | runtime.affinity | object | `{}` | | | runtime.autoscaling.enabled | bool | `false` | Enables [horizontal pod autoscaling](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) | | runtime.autoscaling.maxReplicas | int | `100` | Maximum replicas if resource consumption exceeds resource threshholds | @@ -77,15 +69,15 @@ helm install my-release tractusx-edc/tractusx-connector-memory --version 0.5.1 \ | runtime.debug.enabled | bool | `false` | | | runtime.debug.port | int | `1044` | | | runtime.debug.suspendOnStart | bool | `false` | | -| runtime.endpoints | object | `{"control":{"path":"/control","port":8083},"default":{"path":"/api","port":8080},"management":{"authKey":"","path":"/management","port":8081},"protocol":{"path":"/api/v1/dsp","port":8084},"proxy":{"path":"/proxy","port":8186},"public":{"path":"/api/public","port":8086},"validation":{"path":"/validation","port":8082}}` | endpoints of the control plane | +| runtime.endpoints | object | `{"control":{"path":"/control","port":8083},"default":{"path":"/api","port":8080},"management":{"authKey":"password","path":"/management","port":8081},"protocol":{"path":"/api/v1/dsp","port":8084},"proxy":{"path":"/proxy","port":8186},"public":{"path":"/api/public","port":8086},"validation":{"path":"/validation","port":8082}}` | endpoints of the control plane | | runtime.endpoints.control | object | `{"path":"/control","port":8083}` | control api, used for internal control calls. can be added to the internal ingress, but should probably not | | runtime.endpoints.control.path | string | `"/control"` | path for incoming api calls | | runtime.endpoints.control.port | int | `8083` | port for incoming api calls | | runtime.endpoints.default | object | `{"path":"/api","port":8080}` | default api for health checks, should not be added to any ingress | | runtime.endpoints.default.path | string | `"/api"` | path for incoming api calls | | runtime.endpoints.default.port | int | `8080` | port for incoming api calls | -| runtime.endpoints.management | object | `{"authKey":"","path":"/management","port":8081}` | data management api, used by internal users, can be added to an ingress and must not be internet facing | -| runtime.endpoints.management.authKey | string | `""` | authentication key, must be attached to each 'X-Api-Key' request header | +| runtime.endpoints.management | object | `{"authKey":"password","path":"/management","port":8081}` | data management api, used by internal users, can be added to an ingress and must not be internet facing | +| runtime.endpoints.management.authKey | string | `"password"` | authentication key, must be attached to each 'X-Api-Key' request header | | runtime.endpoints.management.path | string | `"/management"` | path for incoming api calls | | runtime.endpoints.management.port | int | `8081` | port for incoming api calls | | runtime.endpoints.protocol | object | `{"path":"/api/v1/dsp","port":8084}` | dsp api, used for inter connector communication and must be internet facing | diff --git a/charts/tractusx-connector-memory/README.md.gotmpl b/charts/tractusx-connector-memory/README.md.gotmpl index a5e344d41..a5d149876 100644 --- a/charts/tractusx-connector-memory/README.md.gotmpl +++ b/charts/tractusx-connector-memory/README.md.gotmpl @@ -12,7 +12,7 @@ ### Preconditions -- the [Managed Identity Walled (MIW)](https://github.com/catenax-ng/tx-managed-identity-wallets) must be running and reachable via network +- the [Managed Identity Walled (MIW)](https://github.com/eclipse-tractusx/managed-identity-wallet) must be running and reachable via network - the necessary set of VerifiableCredentials for this participant must be pushed to MIW. This is typically done by the Portal during participant onboarding - KeyCloak must be running and reachable via network diff --git a/charts/tractusx-connector-memory/values.yaml b/charts/tractusx-connector-memory/values.yaml index d22884373..9e65fefb4 100644 --- a/charts/tractusx-connector-memory/values.yaml +++ b/charts/tractusx-connector-memory/values.yaml @@ -32,7 +32,7 @@ customLabels: {} participant: # -- BPN Number - id: "" + id: "BPNLCHANGEME" # -- Add custom ca certificates to the truststore customCaCerts: {} @@ -90,7 +90,7 @@ runtime: # -- path for incoming api calls path: /management # -- authentication key, must be attached to each 'X-Api-Key' request header - authKey: "" + authKey: "password" # -- validation api, only used by the data plane and should not be added to any ingress validation: # -- port for incoming api calls @@ -298,21 +298,9 @@ vault: transferProxyTokenEncryptionAesKey: transfer-proxy-token-encryption-aes-key server: postStart: |- -daps: - url: "http://{{ .Release.Name }}-daps:4567" - clientId: "" - paths: - jwks: /jwks.json - token: /token - connectors: - - id: E7:07:2D:74:56:66:31:F0:7B:10:EA:B6:03:06:4C:23:7F:ED:A6:65:keyid:E7:07:2D:74:56:66:31:F0:7B:10:EA:B6:03:06:4C:23:7F:ED:A6:65 - name: sokrates - attributes: - referringConnector: http://sokrates-controlplane/BPNSOKRATES - # Must be the same certificate that is stores in section 'sokrates-vault' - certificate: "" # must be set externally! backendService: - httpProxyTokenReceiverUrl: "" + # -- Specifies a backend service which will receive the EDR + httpProxyTokenReceiverUrl: "https://example.com" serviceAccount: # Specifies whether a service account should be created create: true diff --git a/charts/tractusx-connector/Chart.yaml b/charts/tractusx-connector/Chart.yaml index 81ac62198..0a2a3a497 100644 --- a/charts/tractusx-connector/Chart.yaml +++ b/charts/tractusx-connector/Chart.yaml @@ -40,12 +40,12 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.5.1 +version: 0.6.0-rc1 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.5.1" +appVersion: "0.6.0-rc1" home: https://github.com/eclipse-tractusx/tractusx-edc/tree/main/charts/tractusx-connector sources: - https://github.com/eclipse-tractusx/tractusx-edc/tree/main/charts/tractusx-connector @@ -59,6 +59,6 @@ dependencies: # PostgreSQL - name: postgresql alias: postgresql - version: 12.1.6 + version: 12.11.2 repository: https://charts.bitnami.com/bitnami condition: install.postgresql diff --git a/charts/tractusx-connector/README.md b/charts/tractusx-connector/README.md index 66f0ce0a0..4d82d01f8 100644 --- a/charts/tractusx-connector/README.md +++ b/charts/tractusx-connector/README.md @@ -1,6 +1,6 @@ # tractusx-connector -![Version: 0.5.1](https://img.shields.io/badge/Version-0.5.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.5.1](https://img.shields.io/badge/AppVersion-0.5.1-informational?style=flat-square) +![Version: 0.6.0-rc1](https://img.shields.io/badge/Version-0.6.0--rc1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.6.0-rc1](https://img.shields.io/badge/AppVersion-0.6.0--rc1-informational?style=flat-square) A Helm chart for Tractus-X Eclipse Data Space Connector. The connector deployment consists of two runtime consists of a Control Plane and a Data Plane. Note that _no_ external dependencies such as a PostgreSQL database and HashiCorp Vault are included. @@ -13,7 +13,7 @@ This chart is intended for use with an _existing_ PostgreSQL database and an _ex ### Preconditions -- the [Managed Identity Walled (MIW)](https://github.com/catenax-ng/tx-managed-identity-wallets) must be running and reachable via network +- the [Managed Identity Walled (MIW)](https://github.com/eclipse-tractusx/managed-identity-wallet) must be running and reachable via network - the necessary set of VerifiableCredentials for this participant must be pushed to MIW. This is typically done by the Portal during participant onboarding - KeyCloak must be running and reachable via network @@ -42,7 +42,7 @@ Combined, run this shell command to start the in-memory Tractus-X EDC runtime: ```shell helm repo add tractusx-edc https://eclipse-tractusx.github.io/charts/dev -helm install my-release tractusx-edc/tractusx-connector --version 0.5.1 \ +helm install my-release tractusx-edc/tractusx-connector --version 0.6.0-rc1 \ -f /tractusx-connector-test.yaml ``` @@ -54,14 +54,14 @@ helm install my-release tractusx-edc/tractusx-connector --version 0.5.1 \ | Repository | Name | Version | |------------|------|---------| -| https://charts.bitnami.com/bitnami | postgresql(postgresql) | 12.1.6 | +| https://charts.bitnami.com/bitnami | postgresql(postgresql) | 12.11.2 | | https://helm.releases.hashicorp.com | vault(vault) | 0.20.0 | ## Values | Key | Type | Default | Description | |-----|------|---------|-------------| -| backendService.httpProxyTokenReceiverUrl | string | `""` | | +| backendService.httpProxyTokenReceiverUrl | string | `"https://example.com"` | Specifies a backend service which will receive the EDR | | controlplane.affinity | object | `{}` | | | controlplane.autoscaling.enabled | bool | `false` | Enables [horizontal pod autoscaling](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) | | controlplane.autoscaling.maxReplicas | int | `100` | Maximum replicas if resource consumption exceeds resource threshholds | @@ -72,15 +72,15 @@ helm install my-release tractusx-edc/tractusx-connector --version 0.5.1 \ | controlplane.debug.enabled | bool | `false` | | | controlplane.debug.port | int | `1044` | | | controlplane.debug.suspendOnStart | bool | `false` | | -| controlplane.endpoints | object | `{"control":{"path":"/control","port":8083},"default":{"path":"/api","port":8080},"management":{"authKey":"","path":"/management","port":8081},"metrics":{"path":"/metrics","port":9090},"protocol":{"path":"/api/v1/dsp","port":8084}}` | endpoints of the control plane | +| controlplane.endpoints | object | `{"control":{"path":"/control","port":8083},"default":{"path":"/api","port":8080},"management":{"authKey":"password","path":"/management","port":8081},"metrics":{"path":"/metrics","port":9090},"protocol":{"path":"/api/v1/dsp","port":8084}}` | endpoints of the control plane | | controlplane.endpoints.control | object | `{"path":"/control","port":8083}` | control api, used for internal control calls. can be added to the internal ingress, but should probably not | | controlplane.endpoints.control.path | string | `"/control"` | path for incoming api calls | | controlplane.endpoints.control.port | int | `8083` | port for incoming api calls | | controlplane.endpoints.default | object | `{"path":"/api","port":8080}` | default api for health checks, should not be added to any ingress | | controlplane.endpoints.default.path | string | `"/api"` | path for incoming api calls | | controlplane.endpoints.default.port | int | `8080` | port for incoming api calls | -| controlplane.endpoints.management | object | `{"authKey":"","path":"/management","port":8081}` | data management api, used by internal users, can be added to an ingress and must not be internet facing | -| controlplane.endpoints.management.authKey | string | `""` | authentication key, must be attached to each 'X-Api-Key' request header | +| controlplane.endpoints.management | object | `{"authKey":"password","path":"/management","port":8081}` | data management api, used by internal users, can be added to an ingress and must not be internet facing | +| controlplane.endpoints.management.authKey | string | `"password"` | authentication key, must be attached to each 'X-Api-Key' request header | | controlplane.endpoints.management.path | string | `"/management"` | path for incoming api calls | | controlplane.endpoints.management.port | int | `8081` | port for incoming api calls | | controlplane.endpoints.metrics | object | `{"path":"/metrics","port":9090}` | metrics api, used for application metrics, must not be internet facing | @@ -178,6 +178,7 @@ helm install my-release tractusx-edc/tractusx-connector --version 0.5.1 \ | dataplane.endpoints.default.port | int | `8080` | | | dataplane.endpoints.metrics.path | string | `"/metrics"` | | | dataplane.endpoints.metrics.port | int | `9090` | | +| dataplane.endpoints.proxy.authKey | string | `"password"` | | | dataplane.endpoints.proxy.path | string | `"/proxy"` | | | dataplane.endpoints.proxy.port | int | `8186` | | | dataplane.endpoints.public.path | string | `"/api/public"` | | @@ -246,7 +247,7 @@ helm install my-release tractusx-edc/tractusx-connector --version 0.5.1 \ | networkPolicy.dataplane | object | `{"from":[{"namespaceSelector":{}}]}` | Configuration of the dataplane component | | networkPolicy.dataplane.from | list | `[{"namespaceSelector":{}}]` | Specify from rule network policy for dp (defaults to all namespaces) | | networkPolicy.enabled | bool | `false` | If `true` network policy will be created to restrict access to control- and dataplane | -| participant.id | string | `""` | BPN Number | +| participant.id | string | `"BPNLCHANGEME"` | BPN Number | | postgresql.auth.database | string | `"edc"` | | | postgresql.auth.password | string | `"password"` | | | postgresql.auth.username | string | `"user"` | | @@ -264,7 +265,7 @@ helm install my-release tractusx-edc/tractusx-connector --version 0.5.1 \ | vault.hashicorp.paths.health | string | `"/v1/sys/health"` | | | vault.hashicorp.paths.secret | string | `"/v1/secret"` | | | vault.hashicorp.timeout | int | `30` | | -| vault.hashicorp.token | string | `""` | | +| vault.hashicorp.token | string | `"root"` | | | vault.hashicorp.url | string | `"http://{{ .Release.Name }}-vault:8200"` | | | vault.injector.enabled | bool | `false` | | | vault.secretNames.transferProxyTokenEncryptionAesKey | string | `"transfer-proxy-token-encryption-aes-key"` | | diff --git a/charts/tractusx-connector/README.md.gotmpl b/charts/tractusx-connector/README.md.gotmpl index f45ee78b2..4b10c8adc 100644 --- a/charts/tractusx-connector/README.md.gotmpl +++ b/charts/tractusx-connector/README.md.gotmpl @@ -12,7 +12,7 @@ ### Preconditions -- the [Managed Identity Walled (MIW)](https://github.com/catenax-ng/tx-managed-identity-wallets) must be running and reachable via network +- the [Managed Identity Walled (MIW)](https://github.com/eclipse-tractusx/managed-identity-wallet) must be running and reachable via network - the necessary set of VerifiableCredentials for this participant must be pushed to MIW. This is typically done by the Portal during participant onboarding - KeyCloak must be running and reachable via network diff --git a/charts/tractusx-connector/templates/_helpers.tpl b/charts/tractusx-connector/templates/_helpers.tpl index c579ca6d6..b3c570bb1 100644 --- a/charts/tractusx-connector/templates/_helpers.tpl +++ b/charts/tractusx-connector/templates/_helpers.tpl @@ -135,6 +135,13 @@ Validation URL {{- printf "http://%s-controlplane:%v%s/token" ( include "txdc.fullname" $ ) $.Values.controlplane.endpoints.control.port $.Values.controlplane.endpoints.control.path -}} {{- end }} +{{/* +Control Plane URL +*/}} +{{- define "txdc.controlplane.url.control" -}} +{{- printf "http://%s-controlplane:%v%s" ( include "txdc.fullname" $ ) $.Values.controlplane.endpoints.control.port $.Values.controlplane.endpoints.control.path -}} +{{- end }} + {{/* Data Control URL */}} diff --git a/charts/tractusx-connector/templates/deployment-controlplane.yaml b/charts/tractusx-connector/templates/deployment-controlplane.yaml index 830bf349f..22c54ba53 100644 --- a/charts/tractusx-connector/templates/deployment-controlplane.yaml +++ b/charts/tractusx-connector/templates/deployment-controlplane.yaml @@ -184,6 +184,8 @@ spec: value: {{ .Values.controlplane.endpoints.protocol.port | quote }} - name: "WEB_HTTP_PROTOCOL_PATH" value: {{ .Values.controlplane.endpoints.protocol.path | quote }} + - name: "EDC_CONTROL_ENDPOINT" + value: {{ include "txdc.controlplane.url.control" .}} ######### ## DSP ## diff --git a/charts/tractusx-connector/templates/deployment-dataplane.yaml b/charts/tractusx-connector/templates/deployment-dataplane.yaml index e3aa80d09..0501562ea 100644 --- a/charts/tractusx-connector/templates/deployment-dataplane.yaml +++ b/charts/tractusx-connector/templates/deployment-dataplane.yaml @@ -148,6 +148,8 @@ spec: ####### # API # ####### + - name: "EDC_API_AUTH_KEY" + value: {{ .Values.dataplane.endpoints.proxy.authKey | required ".Values.proxy.endpoints.proxy.authKey is required" | quote }} - name: "WEB_HTTP_DEFAULT_PORT" value: {{ .Values.dataplane.endpoints.default.port | quote }} - name: "WEB_HTTP_DEFAULT_PATH" diff --git a/charts/tractusx-connector/values.yaml b/charts/tractusx-connector/values.yaml index b98fc645b..0a4ec6074 100644 --- a/charts/tractusx-connector/values.yaml +++ b/charts/tractusx-connector/values.yaml @@ -38,7 +38,7 @@ customLabels: {} participant: # -- BPN Number - id: "" + id: "BPNLCHANGEME" controlplane: image: @@ -94,7 +94,7 @@ controlplane: # -- path for incoming api calls path: /management # -- authentication key, must be attached to each 'X-Api-Key' request header - authKey: "" + authKey: "password" # -- control api, used for internal control calls. can be added to the internal ingress, but should probably not control: # -- port for incoming api calls @@ -352,6 +352,7 @@ dataplane: proxy: port: 8186 path: /proxy + authKey: "password" metrics: port: 9090 path: /metrics @@ -511,7 +512,7 @@ vault: postStart: # must be set externally! hashicorp: url: "http://{{ .Release.Name }}-vault:8200" - token: "" + token: "root" timeout: 30 healthCheck: enabled: true @@ -524,7 +525,8 @@ vault: transferProxyTokenSignerPublicKey: transferProxyTokenEncryptionAesKey: transfer-proxy-token-encryption-aes-key backendService: - httpProxyTokenReceiverUrl: "" + # -- Specifies a backend service which will receive the EDR + httpProxyTokenReceiverUrl: "https://example.com" networkPolicy: # -- If `true` network policy will be created to restrict access to control- and dataplane diff --git a/core/edr-cache-core/src/main/java/org/eclipse/tractusx/edc/edr/core/defaults/InMemoryEndpointDataReferenceCache.java b/core/edr-cache-core/src/main/java/org/eclipse/tractusx/edc/edr/core/defaults/InMemoryEndpointDataReferenceCache.java index c8c99d315..d1e3edc35 100644 --- a/core/edr-cache-core/src/main/java/org/eclipse/tractusx/edc/edr/core/defaults/InMemoryEndpointDataReferenceCache.java +++ b/core/edr-cache-core/src/main/java/org/eclipse/tractusx/edc/edr/core/defaults/InMemoryEndpointDataReferenceCache.java @@ -87,7 +87,7 @@ public InMemoryEndpointDataReferenceCache(String lockId, Clock clock, Map findByIdAndLease(String transferProcessId) { + public StoreResult findByIdAndLease(String transferProcessId) { return lockManager.readLock(() -> { var edr = edrsByTransferProcessId.get(transferProcessId); var edrEntry = entriesByEdrId.get(edr.getId()); @@ -97,8 +97,8 @@ public InMemoryEndpointDataReferenceCache(String lockId, Clock clock, Map findByCorrelationIdAndLease(String correlationId) { - return findByIdAndLease(correlationId); + public EndpointDataReferenceEntry findById(String correlationId) { + return findByIdAndLease(correlationId).orElse(storeFailure -> null); } @Override diff --git a/core/edr-core/README.md b/core/edr-core/README.md index aeb2e2402..c6cf7ab9d 100644 --- a/core/edr-core/README.md +++ b/core/edr-core/README.md @@ -1,4 +1,4 @@ -# EDR core extension +# EDR Core Extension This extension provide a base implementation of `EdrManager` and `EdrService` both required for interacting with the EDR APIs and state machine diff --git a/core/edr-core/src/test/java/org/eclipse/tractusx/edc/edr/core/manager/EdrManagerImplTest.java b/core/edr-core/src/test/java/org/eclipse/tractusx/edc/edr/core/manager/EdrManagerImplTest.java index cd6033559..ce90f3465 100644 --- a/core/edr-core/src/test/java/org/eclipse/tractusx/edc/edr/core/manager/EdrManagerImplTest.java +++ b/core/edr-core/src/test/java/org/eclipse/tractusx/edc/edr/core/manager/EdrManagerImplTest.java @@ -118,7 +118,7 @@ void initial_shouldTransitionRequesting() { var edrEntry = edrEntryBuilder().state(NEGOTIATED.code()).build(); var transferProcess = createTransferProcessBuilder().build(); when(edrCache.nextNotLeased(anyInt(), stateIs(NEGOTIATED.code()))).thenReturn(List.of(edrEntry)).thenReturn(emptyList()); - when(edrCache.findByCorrelationIdAndLease(edrEntry.getTransferProcessId())).thenReturn(StoreResult.success(edrEntry)); + when(edrCache.findByIdAndLease(edrEntry.getTransferProcessId())).thenReturn(StoreResult.success(edrEntry)); when(transferProcessService.findById(edrEntry.getTransferProcessId())).thenReturn(transferProcess); when(transferProcessService.initiateTransfer(any())).thenReturn(ServiceResult.success(transferProcess)); @@ -138,7 +138,7 @@ void initial_shouldNotTransitionToRefreshing_WhenNotExpired() { .thenReturn(List.of(edrEntry)) .thenReturn(emptyList()); - when(edrCache.findByCorrelationIdAndLease(edrEntry.getTransferProcessId())).thenReturn(StoreResult.success(edrEntry)); + when(edrCache.findByIdAndLease(edrEntry.getTransferProcessId())).thenReturn(StoreResult.success(edrEntry)); when(transferProcessService.findById(edrEntry.getTransferProcessId())).thenReturn(transferProcess); when(transferProcessService.initiateTransfer(any())).thenReturn(ServiceResult.success(transferProcess)); @@ -159,7 +159,7 @@ void initial_shouldTransitionError_whenTransferProcessNotFound() { .thenReturn(List.of(edrEntry)) .thenReturn(emptyList()); - when(edrCache.findByCorrelationIdAndLease(edrEntry.getTransferProcessId())).thenReturn(StoreResult.success(edrEntry)); + when(edrCache.findByIdAndLease(edrEntry.getTransferProcessId())).thenReturn(StoreResult.success(edrEntry)); when(transferProcessService.findById(edrEntry.getTransferProcessId())).thenReturn(null); edrManager.start(); @@ -179,7 +179,7 @@ void initial_shouldNotTransitionError_whenInitiatedTransferFailsOnce() { .thenReturn(List.of(edrEntry.copy())) .thenReturn(emptyList()); - when(edrCache.findByCorrelationIdAndLease(edrEntry.getTransferProcessId())).thenReturn(StoreResult.success(edrEntry)); + when(edrCache.findByIdAndLease(edrEntry.getTransferProcessId())).thenReturn(StoreResult.success(edrEntry)); when(transferProcessService.findById(edrEntry.getTransferProcessId())).thenReturn(transferProcess); when(transferProcessService.initiateTransfer(any())) .thenReturn(ServiceResult.badRequest("bad")) diff --git a/docs/development/Release.md b/docs/development/Release.md index 5f2fbd74d..3992c0a1d 100644 --- a/docs/development/Release.md +++ b/docs/development/Release.md @@ -38,11 +38,5 @@ The Eclipse Bot is able to approve dependencies automatically, if the license ca from maven central. 2. Create the Eclipse IP Issues or ask an Eclipse Commiter to do this for you. -## 4. Update OpenAPI docs - -As part of the [kits documentation provided for docusaurus](../kit/development-view/page00_development_view.md) we provide an OpenAPI reference. -This refers to the [EDC API](https://github.com/eclipse-edc/Connector/tree/main/resources/openapi) and needs to be updated to the current release. -The yaml files found there are then converted with the [docusaurus openapi plugin](https://www.npmjs.com/package/docusaurus-plugin-openapi-docs). - [maven-shield]: https://img.shields.io/badge/Apache%20Maven-URL-blue [maven-url]: https://maven.apache.org diff --git a/docs/development/decision-records/2023-08-03_improve_bpn_validation/README.md b/docs/development/decision-records/2023-08-03_improve_bpn_validation/README.md index 930789f27..4cdeea7da 100644 --- a/docs/development/decision-records/2023-08-03_improve_bpn_validation/README.md +++ b/docs/development/decision-records/2023-08-03_improve_bpn_validation/README.md @@ -1,4 +1,4 @@ -# Removal of manually curated CHANGELOG.md +# Improve BPN validation ## Decision diff --git a/docs/development/decision-records/2023-08-24-proprietrary-extensions/README.md b/docs/development/decision-records/2023-08-24-proprietrary-extensions/README.md new file mode 100644 index 000000000..8bc427d3c --- /dev/null +++ b/docs/development/decision-records/2023-08-24-proprietrary-extensions/README.md @@ -0,0 +1,48 @@ +# Supported Proprietary Extensions + +## Decision + +The Tractus-X EDC dataplane will support the following proprietary extensions: + +1. AWS S3 +2. Azure Blob Storage + +## Rationale + +### Requirements + +1. In addition to transfer over HTTP we need to be able to transfer larger files (i.e. Buckets). +2. The packaged artefact (docker image, helm chart) should not require additional compilation or packaging. +3. Broad coverage of use-cases with different extensions. + +### Solution + +Previously, there was only support for AWS S3 which could be seen as problematic and favouritism. +As such, the available support was extended with Azure Blob Storage to offer alternatives and cover a wider range of use-cases. +According to this decision, the following protocols will be supported in the future: + +1. HTTP +2. AWS S3 +3. Azure Blob Storage + +## Approach + +To properly incorporate Azure Blob Storage and enable interoperability, all required extensions, i.e. HTTP, AWS S3 and Azure Blob Storage, will be bundled into the data plane image. +This dataplane is then configured based on which extensions the user wants to use. +Configuring specific features is entirely optional, and omitting to do so will cause that feature to be inactive at runtime. + +Going forward, the Tractus-X EDC team will limit its efforts to critical bug fixes in the respective upstream repositories. +As these extensions are proprietary in nature, the Tractus-X EDC Team will add no additional features beyond basic support. + +The Sftp Protocol is another contender for integrating a more accessible protocol. +It is however a low priority feature at the moment and will be postponed for future iterations. + +> Note: Azure Blob Storage will be integrated with Tractus-X EDC version 0.6.0 + +An application process for possible additional integrations will follow at a later date. + +## Open Questions + +What is the process for including/supporting additional Cloud Vendors? + +Who will maintain the vendor specific solutions in the long-term (after the consortia phase)? diff --git a/docs/development/decision-records/2023-09-08_issue_quality_stalebot/README.md b/docs/development/decision-records/2023-09-08_issue_quality_stalebot/README.md new file mode 100644 index 000000000..f4915f462 --- /dev/null +++ b/docs/development/decision-records/2023-09-08_issue_quality_stalebot/README.md @@ -0,0 +1,77 @@ +# Improving the issue quality and using a stale-bot + +## Decision + +We will improve GitHub issue quality leveraging the following approaches: + +- provide a better issue template +- introduce a stalebot workflow, that automatically closes zombie issues and PRs +- reject (or let get stale) issues that aren't actionable +- create a "backlog" milestone where we can put placeholder issues + +## Rationale + +We have seen quite a number of issues that are not actionable, because they lack detailed requirements, a definition of +done, a motivation why the issue is needed or simply a proper description. + +Some of it may have been caused by the auto-migration from Confluence to GitHub, some of it may have been caused by a +lack of planning discipline. +Un-actionable issues are useless, they clutter our boards and needlessly increase workload, because people periodically +need to look at them. If an issue cannot be described in sufficient detail, it should be labelled appropriately, e.g. +with `question` or `triage`. + +We understand that it is not always possible to provide all required information at the time of submitting an issue. For +those cases we will create a `backlog` milestone, that doesn't have a due date and on which those incomplete/placeholder +issues should be planned. The backlog must be sanitized manually. + +So in order to foster proper OSS hygiene we should aim for properly formulated, actionable issues, and periodically +clear out ones that are inactive or have become irrelevant. + +## Approach + +### Issue Template + +We propose the following issue templates: + +```markdown +--- +name: Feature Request +about: Request a new feature +title: '' +labels: triage +assignees: '' + +--- + +## WHAT + +// describes the desired functionality, how the feature should behave. This should include clear requirements, and a +// "definition-of-done", i.e. what the result of the issue should be. This is important for concept, documentation or +// ideation issues + +## WHY + +// outlines the motivation, why the feature is desired, and maybe what the impact is if the feature is _not_ +implemented. +// "Because we need it" is not a sufficient reason! + +## HOW + +// if possible, outlines a solution proposal + +## FURTHER NOTES + +// anything else you want to outline +``` + +The existing bug report template is quite usable already, it contains the needed information. Bug reports should also +receive the `triage` label upon creation. + +### Stale-bot + +- issues, that have the `triage` label get staled after 4 weeks and closed after 2 more weeks +- issues, that have an assignee get staled after 4 weeks and closed after 1 more week +- issues, that neither have an `assignee` nor a `triage` label get staled after 2 weeks, and closed after 1 more week +- bug reports are ignored by the stale bot +- issues in the `backlog` are ignored by the stale bot +- pull-requests get staled after 1 week, and closed after 1 more week diff --git a/docs/development/postman/README.md b/docs/development/postman/README.md index f4a7d2b24..2e6cdfeb8 100644 --- a/docs/development/postman/README.md +++ b/docs/development/postman/README.md @@ -23,7 +23,5 @@ The postman collection contains the most common API calls. Please note that the - Policy & Negotiation calls come in pairs for the different kinds of policies - the 'Data' call only works when using the All-In-One Deployment of this repository -![screenshot](./images/screenshot.png) - [postman-shield]: https://img.shields.io/badge/Postman-URL-orange [postman-url]: https://www.postman.com diff --git a/docs/development/postman/collection.json b/docs/development/postman/collection.json index 0a4234514..b15fefd43 100644 --- a/docs/development/postman/collection.json +++ b/docs/development/postman/collection.json @@ -1,9 +1,9 @@ { "info": { - "_postman_id": "e124b384-9b3c-4f5f-b752-f7aa43ffbebd", + "_postman_id": "e35463fb-d1be-4794-b35b-2d40d46c4655", "name": "tractusx-edc_dsp", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", - "_exporter_id": "27652630" + "_exporter_id": "28118277" }, "item": [ { @@ -26,7 +26,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{\n \"@context\": {},\n \"asset\": {\n \"@type\": \"Asset\",\n \"@id\": \"{{ASSET_ID}}\", \n \"properties\": {\n \"description\": \"Product EDC Demo Asset\"\n }\n },\n \"dataAddress\": {\n \"@type\": \"DataAddress\",\n \"type\": \"HttpData\",\n \"baseUrl\": \"https://jsonplaceholder.typicode.com/todos\"\n }\n}", + "raw": "{\n \"@context\": {\n \"edc\": \"https://w3id.org/edc/v0.0.1/ns/\"\n },\n \"@id\": \"{{ASSET_ID}}\",\n \"properties\": {\n \"key\": \"value\"\n },\n \"privateProperties\": {\n \"privateKey\": \"privateValue\"\n },\n \"dataAddress\": {\n \"@type\": \"DataAddress\",\n \"proxyPath\": \"true\",\n \"type\": \"HttpData\",\n \"proxyQueryParams\": \"true\",\n \"baseUrl\": \"https://jsonplaceholder.typicode.com/todos\"\n }\n}", "options": { "raw": { "language": "json" @@ -34,9 +34,9 @@ } }, "url": { - "raw": "{{PROVIDER_MANAGEMENT_URL}}/assets", + "raw": "{{PROVIDER_MANAGEMENT_URL_V3}}/assets", "host": [ - "{{PROVIDER_MANAGEMENT_URL}}" + "{{PROVIDER_MANAGEMENT_URL_V3}}" ], "path": [ "assets" @@ -50,10 +50,19 @@ "request": { "method": "POST", "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"@context\": {\r\n \"edc\": \"https://w3id.org/edc/v0.0.1/ns/\"\r\n },\r\n \"@type\": \"QuerySpec\",\r\n \"offset\": 0,\r\n \"limit\": 10,\r\n \"sortOrder\": \"DESC\",\r\n \"sortField\": \"fieldName\",\r\n \"filterExpression\": []\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, "url": { - "raw": "{{PROVIDER_MANAGEMENT_URL}}/assets/request", + "raw": "{{PROVIDER_MANAGEMENT_URL_V3}}/assets/request", "host": [ - "{{PROVIDER_MANAGEMENT_URL}}" + "{{PROVIDER_MANAGEMENT_URL_V3}}" ], "path": [ "assets", @@ -69,9 +78,9 @@ "method": "GET", "header": [], "url": { - "raw": "{{PROVIDER_MANAGEMENT_URL}}/assets/{{ASSET_ID}}", + "raw": "{{PROVIDER_MANAGEMENT_URL_V3}}/assets/{{ASSET_ID}}", "host": [ - "{{PROVIDER_MANAGEMENT_URL}}" + "{{PROVIDER_MANAGEMENT_URL_V3}}" ], "path": [ "assets", @@ -87,9 +96,9 @@ "method": "DELETE", "header": [], "url": { - "raw": "{{PROVIDER_MANAGEMENT_URL}}/assets/{{ASSET_ID}}", + "raw": "{{PROVIDER_MANAGEMENT_URL_V3}}/assets/{{ASSET_ID}}", "host": [ - "{{PROVIDER_MANAGEMENT_URL}}" + "{{PROVIDER_MANAGEMENT_URL_V3}}" ], "path": [ "assets", @@ -820,6 +829,11 @@ "key": "CONSUMER_MANAGEMENT_URL", "value": "http://localhost:31364/management/v2" }, + { + "key": "CONSUMER_MANAGEMENT_URL_V3", + "value": "http://localhost:31364/management/v3", + "type": "string" + }, { "key": "PROVIDER_PROTOCOL_URL", "value": "http://plato-controlplane:8084/api/v1/dsp" @@ -828,6 +842,11 @@ "key": "PROVIDER_MANAGEMENT_URL", "value": "http://localhost:30279/management/v2" }, + { + "key": "PROVIDER_MANAGEMENT_URL_V3", + "value": "http://localhost:30279/management/v3", + "type": "string" + }, { "key": "ASSET_ID", "value": "1", @@ -903,4 +922,4 @@ "type": "string" } ] -} +} \ No newline at end of file diff --git a/docs/kit/adoption-view/page_adoption-view.md b/docs/kit/Adoption View/00_adoption-view.md similarity index 97% rename from docs/kit/adoption-view/page_adoption-view.md rename to docs/kit/Adoption View/00_adoption-view.md index 256557e60..60274f65c 100644 --- a/docs/kit/adoption-view/page_adoption-view.md +++ b/docs/kit/Adoption View/00_adoption-view.md @@ -1,9 +1,4 @@ ---- -id: Adoption View -title: Adoption View -description: 'Connector Kit' -sidebar_position: 1 ---- +# Adoption View The ConnectorKit provides a connector framework, based on the [Eclipse Dataspace Connector][edc-url] for sovereign, cross-enterprise data exchange. diff --git a/docs/kit/adoption-view/images/edc_architecture.png b/docs/kit/Adoption View/images/edc_architecture.png similarity index 100% rename from docs/kit/adoption-view/images/edc_architecture.png rename to docs/kit/Adoption View/images/edc_architecture.png diff --git a/docs/kit/adoption-view/images/edc_overview.png b/docs/kit/Adoption View/images/edc_overview.png similarity index 100% rename from docs/kit/adoption-view/images/edc_overview.png rename to docs/kit/Adoption View/images/edc_overview.png diff --git a/docs/kit/adoption-view/page_domain_model.md b/docs/kit/Development View/01_domain_model.md similarity index 96% rename from docs/kit/adoption-view/page_domain_model.md rename to docs/kit/Development View/01_domain_model.md index 5143889f9..7ce3ae87f 100644 --- a/docs/kit/adoption-view/page_domain_model.md +++ b/docs/kit/Development View/01_domain_model.md @@ -1,9 +1,4 @@ ---- -id: Domain Model -title: Domain Model -description: 'Connector Kit' -sidebar_position: 2 ---- +# Domain Model ![domain-model](images/domain-model.png) diff --git a/docs/kit/Development View/02_OpenAPI/00_open_api.md b/docs/kit/Development View/02_OpenAPI/00_open_api.md new file mode 100644 index 000000000..7f9e70039 --- /dev/null +++ b/docs/kit/Development View/02_OpenAPI/00_open_api.md @@ -0,0 +1,3 @@ +# OpenAPI + +The following is an automatically generated OpenAPI spec for the TractusX EDC. diff --git a/docs/kit/operation-view/page10_extensions.md b/docs/kit/Development View/05_EDC Extensions/00_extensions.md similarity index 98% rename from docs/kit/operation-view/page10_extensions.md rename to docs/kit/Development View/05_EDC Extensions/00_extensions.md index ce0a72ead..63ed5ce2c 100644 --- a/docs/kit/operation-view/page10_extensions.md +++ b/docs/kit/Development View/05_EDC Extensions/00_extensions.md @@ -1,4 +1,4 @@ -# EDC Extensions +# EDC Extensions Overview The following extensions provide additional functionality to the core EDC. They are currently only available in Tractus-X EDC. diff --git a/docs/kit/adoption-view/images/domain-model.png b/docs/kit/Development View/images/domain-model.png similarity index 100% rename from docs/kit/adoption-view/images/domain-model.png rename to docs/kit/Development View/images/domain-model.png diff --git a/docs/kit/development-view/page02_repository_structure.md b/docs/kit/Documentation/00_repository_structure.md similarity index 100% rename from docs/kit/development-view/page02_repository_structure.md rename to docs/kit/Documentation/00_repository_structure.md diff --git a/docs/kit/development-view/page03_project_structure.md b/docs/kit/Documentation/01_project_structure.md similarity index 82% rename from docs/kit/development-view/page03_project_structure.md rename to docs/kit/Documentation/01_project_structure.md index 9f20c5a3d..40bae5546 100644 --- a/docs/kit/development-view/page03_project_structure.md +++ b/docs/kit/Documentation/01_project_structure.md @@ -16,6 +16,6 @@ Other branches should follow the naming conventions of `feature/x` or `hotfix/x` ## Tooling -We use Java 11 with Gradle for dependencies and builds. -We use [Spotless](https://github.com/diffplug/spotless) for code formatting. +We use Java 17 with Gradle for dependencies and builds. +We use [Checkstyle](https://github.com/checkstyle/checkstyle) for code formatting. Releases are in the form of Docker containers and Helm charts. diff --git a/docs/kit/operation-view/page00_operation_view.md b/docs/kit/Operation View/00_operation_view.md similarity index 100% rename from docs/kit/operation-view/page00_operation_view.md rename to docs/kit/Operation View/00_operation_view.md diff --git a/docs/kit/operation-view/page02_technical_prerequisites.md b/docs/kit/Operation View/01_technical_prerequisites.md similarity index 100% rename from docs/kit/operation-view/page02_technical_prerequisites.md rename to docs/kit/Operation View/01_technical_prerequisites.md diff --git a/docs/kit/operation-view/page03_local_setup_controlplane.md b/docs/kit/Operation View/02_Local Setup/00_local_setup_controlplane.md similarity index 100% rename from docs/kit/operation-view/page03_local_setup_controlplane.md rename to docs/kit/Operation View/02_Local Setup/00_local_setup_controlplane.md diff --git a/docs/kit/operation-view/page04_local_setup_dataplane.md b/docs/kit/Operation View/02_Local Setup/01_local_setup_dataplane.md similarity index 100% rename from docs/kit/operation-view/page04_local_setup_dataplane.md rename to docs/kit/Operation View/02_Local Setup/01_local_setup_dataplane.md diff --git a/docs/kit/operation-view/page08_api.md b/docs/kit/Operation View/04_Test Your Setup/01_api.md similarity index 93% rename from docs/kit/operation-view/page08_api.md rename to docs/kit/Operation View/04_Test Your Setup/01_api.md index 9f45abe14..ec8174f01 100644 --- a/docs/kit/operation-view/page08_api.md +++ b/docs/kit/Operation View/04_Test Your Setup/01_api.md @@ -3,7 +3,7 @@ ## API Spec The API spec of the EDC is constantly evolving. -The full API documentation for each release can be viewed on [management-api](../development-view/openAPI/management-api/management-api.info.mdx). +The full API documentation for each release can be viewed on [management-api](../Development View/02_OpenAPI/management-api/management-api.info.mdx). The following are some example API calls for common use cases. They assume the default parameters from the previous local setup. diff --git a/docs/kit/operation-view/page09_upgrading.md b/docs/kit/Operation View/05_Migration/00_upgrading.md similarity index 100% rename from docs/kit/operation-view/page09_upgrading.md rename to docs/kit/Operation View/05_Migration/00_upgrading.md diff --git a/docs/kit/development-view/page00_development_view.md b/docs/kit/development-view/page00_development_view.md deleted file mode 100644 index 03806581d..000000000 --- a/docs/kit/development-view/page00_development_view.md +++ /dev/null @@ -1,24 +0,0 @@ -# Development View - -## Project Overview - -Eclipse Tractus-X is an initiative of companies under the umbrella of the Eclipse Foundation. -It is a pilot for the larger initiative of CatenaX. -A broader overview of the project can be found on the initiative's [Github page][tractusx-edc-link] -or the homepage of the [Eclipse Foundation](https://projects.eclipse.org/projects/automotive.tractusx). - -## The EDC - -The Eclipse Dataspace Connector is one of the core components facilitating Tractus-X. - -:::note Tractus-X EDC or Core EDC? - -This documentation is for Tractus-X EDC. -It includes the Core EDC with all of its functionality. -However, this core is supplemented by extensions that allow for the use of additional backends and connection types. -Furthermore, the provided Helm charts, build configuration and tests allow for a smoother deployment. -::: - -You can find the repository for the Tractus-X EDC [here][tractusx-edc-link]. - -[tractusx-edc-link]: https://github.com/eclipse-tractusx/tractusx-edc diff --git a/docs/kit/development-view/page01_eclipse_foundation.md b/docs/kit/development-view/page01_eclipse_foundation.md deleted file mode 100644 index bf71bd5b9..000000000 --- a/docs/kit/development-view/page01_eclipse_foundation.md +++ /dev/null @@ -1,35 +0,0 @@ -# The Eclipse Foundation - -## Eclipse Development Process - -This Eclipse Foundation open project is governed by the Eclipse Foundation -Development Process and operates under the terms of the Eclipse IP Policy. - -* -* - -## Eclipse Contributor Agreement - -In order to be able to contribute to Eclipse Foundation projects you must -electronically sign the Eclipse Contributor Agreement (ECA). - -* - -The ECA provides the Eclipse Foundation with a permanent record that you agree -that each of your contributions will comply with the commitments documented in -the Developer Certificate of Origin (DCO). Having an ECA on file associated with -the email address matching the "Author" field of your contribution's Git commits -fulfills the DCO's requirement that you sign-off on your contributions. - -For more information, please see the Eclipse Committer Handbook: - - -## License - -Code in Tractus-X EDC is published under the [Apache License](https://github.com/eclipse-tractusx/tractusx-edc/blob/main/LICENSE). - -## Contact - -Contact the project developers via the project's "dev" list. - -* diff --git a/docs/kit/operation-view/page06_kubernetes_setup.md b/docs/kit/operation-view/page06_kubernetes_setup.md deleted file mode 100644 index 67930be5e..000000000 --- a/docs/kit/operation-view/page06_kubernetes_setup.md +++ /dev/null @@ -1,22 +0,0 @@ -# Setup in Kubernetes via Helm - -## Introduction - -While the local setup described earlier is sufficient to test basic EDC functionality, it is not appropriate for any actual environments. -For a more complete setup, Helm charts are provided. - -## Setup - -To set up an example environment, you can use the following Helm commands: - -```shell -helm repo add tractusx-edc https://eclipse-tractusx.github.io/charts/dev -helm install my-release tractusx-edc/tractusx-connector-memory --version 0.3.3 -``` - -## Configuration - -The Helm chart used above can be found [here](https://github.com/eclipse-tractusx/tractusx-edc/tree/main/charts). -Configuring that deployment requires the same parameters as the local setup described previously. -Helm expects these parameters in the relevant `values.yaml`. -Similar example configurations can be found with the respective charts under the above link. diff --git a/docs/migration/Version_0.4.x_0.5.x.md b/docs/migration/Version_0.4.x_0.5.x.md index c652f5ebc..b2210ab2c 100644 --- a/docs/migration/Version_0.4.x_0.5.x.md +++ b/docs/migration/Version_0.4.x_0.5.x.md @@ -59,13 +59,13 @@ out [this documentation](https://github.com/eclipse-tractusx/tractusx-edc/blob/m If you are using the MIW and KeyCloak instances deployed to `INT`, the following values apply: -- MIW Url: https://managed-identity-wallets-new.int.demo.catena-x.net -- KeyCloak Token URL: https://centralidp.int.demo.catena-x.net/auth/realms/CX-Central/protocol/openid-connect/token +- MIW Url: +- KeyCloak Token URL: - Authority BPN: `BPNL00000003CRHK` > Please be aware that the above values are *only* valid for the Catena-X INT environment and *will* change on other > environments! For instructions on how to set up a local MIW + KeyCloak, please take a look -> at [this documentation](https://github.com/catenax-ng/tx-managed-identity-wallets/blob/features/java-did-web/README.md). +> at [this documentation](https://github.com/eclipse-tractusx/managed-identity-wallet/blob/features/java-did-web/README.md). ### Further documentation on SSI diff --git a/docs/samples/edr-api-overview/edr-api-overview.md b/docs/samples/edr-api-overview/edr-api-overview.md index 578cc6ecd..b69e604c4 100644 --- a/docs/samples/edr-api-overview/edr-api-overview.md +++ b/docs/samples/edr-api-overview/edr-api-overview.md @@ -23,9 +23,9 @@ This endpoint will perform the contract negotiation, transfer process and EDR st > Please note that the `data destination` will always be `HttpProxy`, requiring a request against the provider's `data-plane` to fetch the asset data. -| Path | Method | Query Params | -|---------------------------------|--------|--------------------------| -| `/edrs` | POST | none | +| Path | Method | Spec | +|-------------------------|--------|----------------------------------------------------------------------------------------------------------------------------------------| +| `/edrs` | POST | [OpenApi](https://app.swaggerhub.com/apis/eclipse-tractusx-bot/tractusx-edc/0.5.1#/Control%20Plane%20EDR%20Api/initiateEdrNegotiation) | #### Payload @@ -75,13 +75,52 @@ This endpoint will perform the contract negotiation, transfer process and EDR st } ``` +The EDR negotiation returns only the id of the negotiation process that has been started. + +The EDR negotiation relies on two steps: contract negotiation and transfer process, both of which are asynchronous. +In order to get notified in every state transition of the two state machines, callbacks can be configured when starting +the EDR negotiation: + +```json +{ + ... + "callbackAddresses": [ + { + "uri": "http://localhost:8080/hooks", + "events": [ + "transfer.process.started" + ], + "transactional": false + } + ] +} +``` + +In this case we are interested only when the transfer process transition to the `STARTED` state. + +Available events type in callbacks are: + +- Transfer Process [`transfer.process.started`,`transfer.process.initiated`,`transfer.process.terminated`,`transfer.process.completed`] +- Contract Negotiation [`contract.negotiation.initiated`,`contract.negotiation.agreed`,`contract.negotiation.accepted`, `contract.negotiation.terminated`,`contract.negotiation.finalized`] + +For getting all events in transfer process or contract negotiation we can simply use `transfer.process` or `contract.negotiation` +in order to be notified of all state transition. + +Once the EDR has been negotiated with the provider, the EDR itself will be stored in the configured vault and the metadata +associated to it in the configured datasource for future querying. + +Since `tractusx-edc` [v0.5.1](https://github.com/eclipse-tractusx/tractusx-edc/releases/tag/0.5.1) the cached EDRs also come with a state machine that will manage the lifecycle of an EDR +on the consumer side. That means that it will auto-renew it is nearing its expiration date by +firing another transfer process request with the same parameters as the original one. Once renewed, the old EDR +will transition to the `EXPIRED` state, and it will be removed from the database and the vault according to the [configuration](../../../core/edr-core/README.md). + ### EDR Management | Fetch cached EDRs This endpoint will retrieve all EDR entries by their `assetId` or `agreementId` references, which are passed as `query parameters`. -| Path | Method | Query Params | -|----------------------------------------------|--------|----------------------| -| `/edrs` | GET | assetId, agreementId | +| Path | Method | Spec | +|-------------------------|--------|---------------------------------------------------------------------------------------------------------------------------| +| `/edrs` | GET | [OpenApi](https://app.swaggerhub.com/apis/eclipse-tractusx-bot/tractusx-edc/0.5.1#/Control%20Plane%20EDR%20Api/queryEdrs) | #### EDR Entry Response @@ -89,9 +128,12 @@ This endpoint will retrieve all EDR entries by their `assetId` or `agreementId` [ { "@type": "tx:EndpointDataReferenceEntry", - "edc:agreementId": "contract-agreement-id", - "edc:transferProcessId": "transfer-process-id", - "edc:assetId": "asset-id", + "edc:agreementId": "", + "edc:transferProcessId": "", + "edc:assetId": "", + "edc:providerId": "", + "tx:edrState": "NEGOTIATED", + "tx:expirationDate": 1693928132000, "@context": { "dct": "https://purl.org/dc/terms/", "tx": "https://w3id.org/tractusx/v0.0.1/ns/", @@ -104,11 +146,13 @@ This endpoint will retrieve all EDR entries by their `assetId` or `agreementId` ] ``` +### EDR Management | Fetch single EDR + This endpoint, through the `transfer-process-id` passed as `path variable`, will retrieve the actual EDR. -| Path | Method | Query Params | -|-----------------------------------------------|--------|--------------------------| -| `/edrs/{transfer-process-id}` | GET | none | +| Path | Method | Spec | +|-----------------------------------------------|--------|------------------------------------------------------------------------------------------------------------------------| +| `/edrs/{transfer-process-id}` | GET | [OpenApi](https://app.swaggerhub.com/apis/eclipse-tractusx-bot/tractusx-edc/0.5.1#/Control%20Plane%20EDR%20Api/getEdr) | #### EDR Response @@ -133,3 +177,85 @@ This endpoint, through the `transfer-process-id` passed as `path variable`, will ``` > Please note that now with the EDR you are able to request the `Asset` data from provider's `data-plane`. + +### EDR Management | Deleting a cached EDR + +This endpoint will delete the EDR entry associated with the `transfer-process-id` and it will remove the EDR itself +from the vault. + +| Path | Method | Spec | +|-----------------------------------------------|--------|---------------------------------------------------------------------------------------------------------------------------| +| `/edrs/{transfer-process-id}` | DELETE | [OpenApi](https://app.swaggerhub.com/apis/eclipse-tractusx-bot/tractusx-edc/0.5.1#/Control%20Plane%20EDR%20Api/deleteEdr) | + +### EDR Usage | Fetching data + +Once the EDR has been negotiated and stored, the data can be fetched in two ways depending on the use-case: + +- Provider data-plane ("EDC way") +- Consumer proxy (Tractus-X EDC simplified) + +#### Provider data-plane + +Once the right EDR has been identified using the EDR management API the current asset/agreement/transfer-process that +you want to transfer, we can use the `endpont`, `authCode` and `authKey` to make the request: + +```sh +curl --request GET \ + --url http://provider-data-plane/public-url \ + --header 'Authorization: auth-code' \ + --header 'Content-Type: application/json' +``` + +If the HTTP asset has been configured to proxy also query parameters and path segments they will be forwarded +to the backend from the provider data-plane: + +```sh +curl --request GET \ + --url http://provider-data-plane/public-url/subroute?foo=bar \ + --header 'Authorization: auth-code' \ + --header 'Content-Type: application/json' +``` + +#### Consumer data-plane (proxy) + +The Consumer data-plane proxy is an extension available in `tractusx-edc` that will use the EDR store to simplify +the data request on consumer side. The documentation is available [here](../../../edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/README.md). + +The only API is: + +| Path | Method | Spec | +|---------------------------|--------|-----------------------------------------------------------------------------------------------------------------------------| +| `/aas/request` | POST | [OpenApi](https://app.swaggerhub.com/apis/eclipse-tractusx-bot/tractusx-edc/0.5.1#/Data%20Plane%20Proxy%20API/requestAsset) | + +which fetches the data according to the input body. The body should contain the `assetId` plus `providerId` or the `transferProcessId`, +which identifies the EDR to use for fetching data and an `endpointUrl` which is the [provider gateway](../../../edc-extensions/dataplane-proxy/edc-dataplane-proxy-provider-api/README.md) +on which the data is available. + +Example: + +```sh +curl --request POST \ + --url http://localhost:8186/proxy/aas/request \ + --header 'Content-Type: application/json' \ + --header 'X-Api-Key: password' \ + --data '{"assetId": "1","providerId": "BPNL000000000001","endpointUrl": "http://localhost:8080/api/gateway/aas/test"}' +``` + +Alternatively if the `endpointUrl` is not known or the gateway on the provider side is not configured, it can be omitted and the `Edr#endpointUrl` +will be used as base url. In this scenario if needed, users can provide additional properties to the request for composing the final +url: + +- `pathSegments` sub path to append to the base url +- `queryParams` query parameters to add to the url + +Example of an asset with base url `http://localhost:8080/test` + +```sh +curl --request POST \ + --url http://localhost:8186/proxy/aas/request \ + --header 'Content-Type: application/json' \ + --header 'X-Api-Key: password' \ + --data '{"assetId": "1","providerId": "BPNL000000000001","pathSegments": "/sub","queryParams": "foo=bar"}' +``` + +The final url will look like `http://localhost:8080/test/sub?foo=bar`. diff --git a/docs/samples/example-dataspace/plato-values.yaml b/docs/samples/example-dataspace/plato-values.yaml index ff9e18cdc..c016d9a0e 100644 --- a/docs/samples/example-dataspace/plato-values.yaml +++ b/docs/samples/example-dataspace/plato-values.yaml @@ -48,6 +48,9 @@ controlplane: id: "" secretAlias: "client-secret" dataplane: + endpoints: + management: + authKey: password image: pullPolicy: Never tag: "latest" diff --git a/docs/samples/example-dataspace/sokrates-values.yaml b/docs/samples/example-dataspace/sokrates-values.yaml index 200f11ae3..c21948a16 100644 --- a/docs/samples/example-dataspace/sokrates-values.yaml +++ b/docs/samples/example-dataspace/sokrates-values.yaml @@ -46,6 +46,9 @@ controlplane: id: "" secretAlias: "client-secret" dataplane: + endpoints: + proxy: + authKey: password image: pullPolicy: Never tag: "latest" diff --git a/edc-controlplane/edc-controlplane-base/build.gradle.kts b/edc-controlplane/edc-controlplane-base/build.gradle.kts index f8bc52809..c5c9a30ed 100644 --- a/edc-controlplane/edc-controlplane-base/build.gradle.kts +++ b/edc-controlplane/edc-controlplane-base/build.gradle.kts @@ -47,6 +47,7 @@ dependencies { runtimeOnly(libs.edc.auth.tokenbased) runtimeOnly(libs.edc.api.management) + runtimeOnly(libs.edc.api.controlplane) runtimeOnly(libs.edc.api.management.config) runtimeOnly(libs.edc.api.observability) runtimeOnly(libs.edc.dsp) diff --git a/edc-controlplane/edc-controlplane-memory-hashicorp-vault/notice.md b/edc-controlplane/edc-controlplane-memory-hashicorp-vault/notice.md index b709f09c2..785173187 100644 --- a/edc-controlplane/edc-controlplane-memory-hashicorp-vault/notice.md +++ b/edc-controlplane/edc-controlplane-memory-hashicorp-vault/notice.md @@ -2,24 +2,24 @@ An EDC Control Plane using memory-based storage, and HashiCorp Vault as secret store. -DockerHub: https://hub.docker.com/r/tractusx/edc-controlplane-memory-hashicorp-vault +DockerHub: Eclipse Tractus-X product(s) installed within the image: ## Tractus-X-EDC Control Plane -- GitHub: https://github.com/eclipse-tractusx/tractusx-edc -- Project home: https://projects.eclipse.org/projects/automotive.tractusx -- Dockerfile: https://github.com/eclipse-tractusx/tractusx-edc/blob/main/edc-controlplane/edc-controlplane-memory-hashicorp-vault/src/main/docker/Dockerfile +- GitHub: +- Project home: +- Dockerfile: - Project license: [Apache License, Version 2.0](https://github.com/eclipse-tractusx/tractusx-edc/blob/main/LICENSE) ## Used base image -- [eclipse-temurin:17.0.6_10-jre-alpine](https://github.com/adoptium/containers) -- Official Eclipse Temurin DockerHub page: https://hub.docker.com/_/eclipse-temurin -- Eclipse Temurin Project: https://projects.eclipse.org/projects/adoptium.temurin +- [eclipse-temurin:17.0.8_7-jre-alpine](https://github.com/adoptium/containers) +- Official Eclipse Temurin DockerHub page: +- Eclipse Temurin Project: - Additional information about the Eclipse Temurin - images: https://github.com/docker-library/repo-info/tree/master/repos/eclipse-temurin + images: As with all Docker images, these likely also contain other software which may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained). diff --git a/edc-controlplane/edc-controlplane-memory-hashicorp-vault/src/main/docker/Dockerfile b/edc-controlplane/edc-controlplane-memory-hashicorp-vault/src/main/docker/Dockerfile index 7a459290e..0e9df5763 100644 --- a/edc-controlplane/edc-controlplane-memory-hashicorp-vault/src/main/docker/Dockerfile +++ b/edc-controlplane/edc-controlplane-memory-hashicorp-vault/src/main/docker/Dockerfile @@ -19,7 +19,7 @@ # SPDX-License-Identifier: Apache-2.0 # -FROM eclipse-temurin:17.0.6_10-jre-alpine +FROM eclipse-temurin:17.0.8_7-jre-alpine ARG JAR ARG OTEL_JAR diff --git a/edc-controlplane/edc-controlplane-postgresql-azure-vault/README.md b/edc-controlplane/edc-controlplane-postgresql-azure-vault/README.md index 44a4a13b2..38a2b2bd4 100644 --- a/edc-controlplane/edc-controlplane-postgresql-azure-vault/README.md +++ b/edc-controlplane/edc-controlplane-postgresql-azure-vault/README.md @@ -1,4 +1,6 @@ -# EDC Control-Plane backed by [Postgresql](https://www.postgresql.org/) +# EDC Control-Plane PostgreSQL & Azure Key Vault + +This verison of the EDC Control-Plane is backed by [PostgreSQL](https://www.postgresql.org/) and [Azure Key Vault](https://azure.microsoft.com/en-us/services/key-vault/#product-overview). ## Building diff --git a/edc-controlplane/edc-controlplane-postgresql-azure-vault/notice.md b/edc-controlplane/edc-controlplane-postgresql-azure-vault/notice.md index bd2b9b276..b5119932a 100644 --- a/edc-controlplane/edc-controlplane-postgresql-azure-vault/notice.md +++ b/edc-controlplane/edc-controlplane-postgresql-azure-vault/notice.md @@ -2,24 +2,24 @@ An EDC Control Plane using PostgreSQL as persistence backend, and Azure KeyVault as secret store. -DockerHub: https://hub.docker.com/r/tractusx/edc-controlplane-postgresql-azure-vault +DockerHub: Eclipse Tractus-X product(s) installed within the image: ## Tractus-X EDC Control Plane -- GitHub: https://github.com/eclipse-tractusx/tractusx-edc -- Project home: https://projects.eclipse.org/projects/automotive.tractusx -- Dockerfile: https://github.com/eclipse-tractusx/tractusx-edc/blob/main/edc-controlplane/edc-controlplane-postgresql-azure-vault/src/main/docker/Dockerfile +- GitHub: +- Project home: +- Dockerfile: - Project license: [Apache License, Version 2.0](https://github.com/eclipse-tractusx/tractusx-edc/blob/main/LICENSE) ## Used base image -- [eclipse-temurin:17.0.6_10-jre-alpine](https://github.com/adoptium/containers) -- Official Eclipse Temurin DockerHub page: https://hub.docker.com/_/eclipse-temurin -- Eclipse Temurin Project: https://projects.eclipse.org/projects/adoptium.temurin +- [eclipse-temurin:17.0.8_7-jre-alpine](https://github.com/adoptium/containers) +- Official Eclipse Temurin DockerHub page: +- Eclipse Temurin Project: - Additional information about the Eclipse Temurin - images: https://github.com/docker-library/repo-info/tree/master/repos/eclipse-temurin + images: As with all Docker images, these likely also contain other software which may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained). diff --git a/edc-controlplane/edc-controlplane-postgresql-azure-vault/src/main/docker/Dockerfile b/edc-controlplane/edc-controlplane-postgresql-azure-vault/src/main/docker/Dockerfile index 013e84820..ceaeb3f21 100644 --- a/edc-controlplane/edc-controlplane-postgresql-azure-vault/src/main/docker/Dockerfile +++ b/edc-controlplane/edc-controlplane-postgresql-azure-vault/src/main/docker/Dockerfile @@ -18,7 +18,7 @@ # # SPDX-License-Identifier: Apache-2.0 # -FROM eclipse-temurin:17.0.6_10-jre-alpine +FROM eclipse-temurin:17.0.8_7-jre-alpine ARG JAR ARG OTEL_JAR diff --git a/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/README.md b/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/README.md index 4d73773fb..f06c4d127 100644 --- a/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/README.md +++ b/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/README.md @@ -1,4 +1,6 @@ -# EDC Control-Plane backed by [Postgresql](https://www.postgresql.org/) and [HashiCorp vault](https://www.vaultproject.io/docs) +# EDC Control-Plane PostgreSQL & Hashicorp Vault + +This version of the EDC Control-Plane is backed by [PostgreSQL](https://www.postgresql.org/) and [HashiCorp Vault](https://www.vaultproject.io/docs). ## Building diff --git a/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/notice.md b/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/notice.md index 381253ec9..628c32c96 100644 --- a/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/notice.md +++ b/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/notice.md @@ -2,24 +2,24 @@ An EDC Control Plane using PostgreSQL as persistence backend, and HashiCorp Vault as secret store. -DockerHub: https://hub.docker.com/r/tractusx/edc-controlplane-postgresql-hashicorp-vault +DockerHub: Eclipse Tractus-X product(s) installed within the image: ## Tractus-X EDC Control Plane -- GitHub: https://github.com/eclipse-tractusx/tractusx-edc -- Project home: https://projects.eclipse.org/projects/automotive.tractusx -- Dockerfile: https://github.com/eclipse-tractusx/tractusx-edc/blob/main/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/src/main/docker/Dockerfile +- GitHub: +- Project home: +- Dockerfile: - Project license: [Apache License, Version 2.0](https://github.com/eclipse-tractusx/tractusx-edc/blob/main/LICENSE) ## Used base image -- [eclipse-temurin:17.0.6_10-jre-alpine](https://github.com/adoptium/containers) -- Official Eclipse Temurin DockerHub page: https://hub.docker.com/_/eclipse-temurin -- Eclipse Temurin Project: https://projects.eclipse.org/projects/adoptium.temurin +- [eclipse-temurin:17.0.8_7-jre-alpine](https://github.com/adoptium/containers) +- Official Eclipse Temurin DockerHub page: +- Eclipse Temurin Project: - Additional information about the Eclipse Temurin - images: https://github.com/docker-library/repo-info/tree/master/repos/eclipse-temurin + images: As with all Docker images, these likely also contain other software which may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained). diff --git a/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/src/main/docker/Dockerfile b/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/src/main/docker/Dockerfile index 7a459290e..0e9df5763 100644 --- a/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/src/main/docker/Dockerfile +++ b/edc-controlplane/edc-controlplane-postgresql-hashicorp-vault/src/main/docker/Dockerfile @@ -19,7 +19,7 @@ # SPDX-License-Identifier: Apache-2.0 # -FROM eclipse-temurin:17.0.6_10-jre-alpine +FROM eclipse-temurin:17.0.8_7-jre-alpine ARG JAR ARG OTEL_JAR diff --git a/edc-controlplane/edc-runtime-memory/notice.md b/edc-controlplane/edc-runtime-memory/notice.md index 621cb44b5..21001a0e9 100644 --- a/edc-controlplane/edc-runtime-memory/notice.md +++ b/edc-controlplane/edc-runtime-memory/notice.md @@ -2,24 +2,24 @@ An EDC Control Plane using memory-based storage, and Azure KeyVault as secret store. -DockerHub: https://hub.docker.com/r/tractusx/edc-runtime-memory +DockerHub: Eclipse Tractus-X product(s) installed within the image: ## Tractus-X EDC Control Plane -- GitHub: https://github.com/eclipse-tractusx/tractusx-edc -- Project home: https://projects.eclipse.org/projects/automotive.tractusx -- Dockerfile: https://github.com/eclipse-tractusx/tractusx-edc/blob/main/edc-controlplane/edc-runtime-memory/src/main/docker/Dockerfile +- GitHub: +- Project home: +- Dockerfile: - Project license: [Apache License, Version 2.0](https://github.com/eclipse-tractusx/tractusx-edc/blob/main/LICENSE) ## Used base image -- [eclipse-temurin:17.0.6_10-jre-alpine](https://github.com/adoptium/containers) -- Official Eclipse Temurin DockerHub page: https://hub.docker.com/_/eclipse-temurin -- Eclipse Temurin Project: https://projects.eclipse.org/projects/adoptium.temurin +- [eclipse-temurin:17.0.8_7-jre-alpine](https://github.com/adoptium/containers) +- Official Eclipse Temurin DockerHub page: +- Eclipse Temurin Project: - Additional information about the Eclipse Temurin - images: https://github.com/docker-library/repo-info/tree/master/repos/eclipse-temurin + images: As with all Docker images, these likely also contain other software which may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained). diff --git a/edc-controlplane/edc-runtime-memory/src/main/docker/Dockerfile b/edc-controlplane/edc-runtime-memory/src/main/docker/Dockerfile index de17857c4..b6d489daf 100644 --- a/edc-controlplane/edc-runtime-memory/src/main/docker/Dockerfile +++ b/edc-controlplane/edc-runtime-memory/src/main/docker/Dockerfile @@ -20,7 +20,7 @@ # SPDX-License-Identifier: Apache-2.0 # -FROM eclipse-temurin:17.0.6_10-jre-alpine +FROM eclipse-temurin:17.0.8_7-jre-alpine ARG JAR ARG APP_USER=docker diff --git a/edc-dataplane/edc-dataplane-azure-vault/README.md b/edc-dataplane/edc-dataplane-azure-vault/README.md index 564aabde6..21404d8d0 100644 --- a/edc-dataplane/edc-dataplane-azure-vault/README.md +++ b/edc-dataplane/edc-dataplane-azure-vault/README.md @@ -1,4 +1,6 @@ -# EDC Data-Plane with [Azure Key Vault](https://azure.microsoft.com/en-us/services/key-vault/#product-overview) +# EDC Data-Plane with Azure Key Vault + +This build of the EDC Data-Plane utilizes [Azure Key Vault](https://azure.microsoft.com/en-us/services/key-vault/#product-overview) for secret storage. ## Building diff --git a/edc-dataplane/edc-dataplane-azure-vault/build.gradle.kts b/edc-dataplane/edc-dataplane-azure-vault/build.gradle.kts index 04993fa96..61a65bef4 100644 --- a/edc-dataplane/edc-dataplane-azure-vault/build.gradle.kts +++ b/edc-dataplane/edc-dataplane-azure-vault/build.gradle.kts @@ -32,7 +32,7 @@ dependencies { } } implementation(libs.edc.azure.identity) - implementation("com.azure:azure-security-keyvault-secrets:4.6.4") + implementation("com.azure:azure-security-keyvault-secrets:4.6.5") runtimeOnly(project(":edc-extensions:edr:edr-cache-sql")) runtimeOnly(libs.edc.transaction.local) runtimeOnly(libs.edc.sql.pool) diff --git a/edc-dataplane/edc-dataplane-azure-vault/notice.md b/edc-dataplane/edc-dataplane-azure-vault/notice.md index e3a83858c..7342e6fa8 100644 --- a/edc-dataplane/edc-dataplane-azure-vault/notice.md +++ b/edc-dataplane/edc-dataplane-azure-vault/notice.md @@ -2,24 +2,24 @@ An EDC Data Plane using the Azure KeyVault. -DockerHub: https://hub.docker.com/r/tractusx/edc-dataplane-azure-vault +DockerHub: Eclipse Tractus-X product(s) installed within the image: ## Tractus-X EDC Data Plane -- GitHub: https://github.com/eclipse-tractusx/tractusx-edc -- Project home: https://projects.eclipse.org/projects/automotive.tractusx -- Dockerfile: https://github.com/eclipse-tractusx/tractusx-edc/blob/main/edc-dataplane/edc-dataplane-azure-vault/src/main/docker/Dockerfile +- GitHub: +- Project home: +- Dockerfile: - Project license: [Apache License, Version 2.0](https://github.com/eclipse-tractusx/tractusx-edc/blob/main/LICENSE) ## Used base image -- [eclipse-temurin:17.0.6_10-jre-alpine](https://github.com/adoptium/containers) -- Official Eclipse Temurin DockerHub page: https://hub.docker.com/_/eclipse-temurin -- Eclipse Temurin Project: https://projects.eclipse.org/projects/adoptium.temurin +- [eclipse-temurin:17.0.8_7-jre-alpine](https://github.com/adoptium/containers) +- Official Eclipse Temurin DockerHub page: +- Eclipse Temurin Project: - Additional information about the Eclipse Temurin - images: https://github.com/docker-library/repo-info/tree/master/repos/eclipse-temurin + images: As with all Docker images, these likely also contain other software which may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained). diff --git a/edc-dataplane/edc-dataplane-azure-vault/src/main/docker/Dockerfile b/edc-dataplane/edc-dataplane-azure-vault/src/main/docker/Dockerfile index 520ddfefa..9279f29c2 100644 --- a/edc-dataplane/edc-dataplane-azure-vault/src/main/docker/Dockerfile +++ b/edc-dataplane/edc-dataplane-azure-vault/src/main/docker/Dockerfile @@ -18,7 +18,7 @@ # # SPDX-License-Identifier: Apache-2.0 # -FROM eclipse-temurin:17.0.6_10-jre-alpine +FROM eclipse-temurin:17.0.8_7-jre-alpine ARG JAR ARG OTEL_JAR diff --git a/edc-dataplane/edc-dataplane-base/build.gradle.kts b/edc-dataplane/edc-dataplane-base/build.gradle.kts index 03a5ee3db..021e4a254 100644 --- a/edc-dataplane/edc-dataplane-base/build.gradle.kts +++ b/edc-dataplane/edc-dataplane-base/build.gradle.kts @@ -31,10 +31,13 @@ dependencies { runtimeOnly(libs.edc.config.filesystem) runtimeOnly(libs.edc.auth.tokenbased) runtimeOnly(libs.edc.dpf.awss3) + runtimeOnly(libs.edc.dpf.azblob) runtimeOnly(libs.edc.dpf.oauth2) runtimeOnly(libs.edc.dpf.http) - runtimeOnly(libs.edc.dpf.framework) + runtimeOnly(libs.edc.dpf.core) + runtimeOnly(libs.edc.controlplane.apiclient) + runtimeOnly(libs.edc.dpf.api) runtimeOnly(libs.edc.core.connector) runtimeOnly(libs.edc.boot) diff --git a/edc-dataplane/edc-dataplane-hashicorp-vault/README.md b/edc-dataplane/edc-dataplane-hashicorp-vault/README.md index 9930c13a8..799d5dd1f 100644 --- a/edc-dataplane/edc-dataplane-hashicorp-vault/README.md +++ b/edc-dataplane/edc-dataplane-hashicorp-vault/README.md @@ -1,4 +1,6 @@ -# EDC Data-Plane [Hashicorp Vault](https://www.vaultproject.io/) +# EDC Data-Plane with Hashicorp Vault + +This build of the EDC Data-Plane utilizes [Hashicorp Vault](https://www.vaultproject.io/) for secret storage. ## Building diff --git a/edc-dataplane/edc-dataplane-hashicorp-vault/notice.md b/edc-dataplane/edc-dataplane-hashicorp-vault/notice.md index 8e1108d7c..964af31cf 100644 --- a/edc-dataplane/edc-dataplane-hashicorp-vault/notice.md +++ b/edc-dataplane/edc-dataplane-hashicorp-vault/notice.md @@ -2,24 +2,24 @@ An EDC Data Plane using the HashiCorp Vault -DockerHub: https://hub.docker.com/r/tractusx/edc-dataplane-hashicorp-vault +DockerHub: Eclipse Tractus-X product(s) installed within the image: ## Tractus-X-EDC Data Plane -- GitHub: https://github.com/eclipse-tractusx/tractusx-edc -- Project home: https://projects.eclipse.org/projects/automotive.tractusx -- Dockerfile: https://github.com/eclipse-tractusx/tractusx-edc/blob/main/edc-dataplane/edc-dataplane-hashicorp-vault/src/main/docker/Dockerfile +- GitHub: +- Project home: +- Dockerfile: - Project license: [Apache License, Version 2.0](https://github.com/eclipse-tractusx/tractusx-edc/blob/main/LICENSE) ## Used base image -- [eclipse-temurin:17.0.6_10-jre-alpine](https://github.com/adoptium/containers) -- Official Eclipse Temurin DockerHub page: https://hub.docker.com/_/eclipse-temurin -- Eclipse Temurin Project: https://projects.eclipse.org/projects/adoptium.temurin +- [eclipse-temurin:17.0.8_7-jre-alpine](https://github.com/adoptium/containers) +- Official Eclipse Temurin DockerHub page: +- Eclipse Temurin Project: - Additional information about the Eclipse Temurin - images: https://github.com/docker-library/repo-info/tree/master/repos/eclipse-temurin + images: As with all Docker images, these likely also contain other software which may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained). diff --git a/edc-dataplane/edc-dataplane-hashicorp-vault/src/main/docker/Dockerfile b/edc-dataplane/edc-dataplane-hashicorp-vault/src/main/docker/Dockerfile index 4fdf953c7..659f63799 100644 --- a/edc-dataplane/edc-dataplane-hashicorp-vault/src/main/docker/Dockerfile +++ b/edc-dataplane/edc-dataplane-hashicorp-vault/src/main/docker/Dockerfile @@ -19,7 +19,7 @@ # SPDX-License-Identifier: Apache-2.0 # -FROM eclipse-temurin:17.0.6_10-jre-alpine +FROM eclipse-temurin:17.0.8_7-jre-alpine ARG JAR ARG OTEL_JAR diff --git a/edc-extensions/bpn-validation/README.md b/edc-extensions/bpn-validation/README.md index 58ec270d1..02abad765 100644 --- a/edc-extensions/bpn-validation/README.md +++ b/edc-extensions/bpn-validation/README.md @@ -68,9 +68,9 @@ which constraint functions is called to evaluate the policy. Here, it is the `Bu ### Manipulating groups -The `bpn-evaluation` module provides a simple CRUD REST API to manipulate BPN <> group associations. Each BPN is stored +The `bpn-evaluation` module provides a simple CRUD REST API to manipulate associations between BPN and group. Each BPN is stored in an internal database together with the groups that it was assigned. The OpenAPI specification can be -found [here](../../resources/openapi/yaml/bpn-validation-api.yaml). +found [here](https://app.swaggerhub.com/apis/eclipse-tractusx-bot/tractusx-edc). ## Business Partner Number Policy [not recommended] diff --git a/edc-extensions/bpn-validation/bpn-validation-core/src/main/java/org/eclipse/tractusx/edc/validation/businesspartner/LegacyBusinessPartnerValidationExtension.java b/edc-extensions/bpn-validation/bpn-validation-core/src/main/java/org/eclipse/tractusx/edc/validation/businesspartner/LegacyBusinessPartnerValidationExtension.java index 5e8758934..1f99c471d 100644 --- a/edc-extensions/bpn-validation/bpn-validation-core/src/main/java/org/eclipse/tractusx/edc/validation/businesspartner/LegacyBusinessPartnerValidationExtension.java +++ b/edc-extensions/bpn-validation/bpn-validation-core/src/main/java/org/eclipse/tractusx/edc/validation/businesspartner/LegacyBusinessPartnerValidationExtension.java @@ -37,6 +37,7 @@ import static org.eclipse.edc.connector.contract.spi.offer.ContractDefinitionResolver.CATALOGING_SCOPE; import static org.eclipse.edc.connector.contract.spi.validation.ContractValidationService.NEGOTIATION_SCOPE; import static org.eclipse.edc.connector.contract.spi.validation.ContractValidationService.TRANSFER_SCOPE; +import static org.eclipse.tractusx.edc.edr.spi.CoreConstants.TX_NAMESPACE; /** * Business partner number evaluation function. @@ -62,6 +63,9 @@ public class LegacyBusinessPartnerValidationExtension implements ServiceExtensio */ public static final String BUSINESS_PARTNER_CONSTRAINT_KEY = "BusinessPartnerNumber"; + public static final String TX_BUSINESS_PARTNER_CONSTRAINT_KEY = TX_NAMESPACE + BUSINESS_PARTNER_CONSTRAINT_KEY; + + public static final String DEFAULT_LOG_AGREEMENT_EVALUATION = "true"; @@ -107,10 +111,14 @@ public void initialize(ServiceExtensionContext context) { private void bindToScope(BusinessPartnerDutyFunction dutyFunction, BusinessPartnerPermissionFunction permissionFunction, BusinessPartnerProhibitionFunction prohibitionFunction, String scope) { ruleBindingRegistry.bind("USE", scope); ruleBindingRegistry.bind(BUSINESS_PARTNER_CONSTRAINT_KEY, scope); + ruleBindingRegistry.bind(TX_BUSINESS_PARTNER_CONSTRAINT_KEY, scope); + policyEngine.registerFunction(scope, Duty.class, BUSINESS_PARTNER_CONSTRAINT_KEY, dutyFunction); policyEngine.registerFunction(scope, Permission.class, BUSINESS_PARTNER_CONSTRAINT_KEY, permissionFunction); policyEngine.registerFunction(scope, Prohibition.class, BUSINESS_PARTNER_CONSTRAINT_KEY, prohibitionFunction); + + policyEngine.registerFunction(scope, Permission.class, TX_BUSINESS_PARTNER_CONSTRAINT_KEY, permissionFunction); } private boolean logAgreementEvaluationSetting(ServiceExtensionContext context) { diff --git a/edc-extensions/cx-oauth2/README.md b/edc-extensions/cx-oauth2/README.md index 77ee53642..c796ac245 100644 --- a/edc-extensions/cx-oauth2/README.md +++ b/edc-extensions/cx-oauth2/README.md @@ -37,7 +37,7 @@ When a connector receives a message, it will checks the token audience is equal Starting from `0.0.1-milestone-9` EDC requires a mandatory setting `edc.participant.id`, which in this case should be the BPN number which is transmitted over the wire to identifying the participants IDs. To verify that in the DAPS token an extension has been created, that extract from the `ClaimToken` the BPN number and then EDC compare that identity with the one provided over the wire, for security reason. -By default, the extension parse the `referringConnector` url and extract the BPN number as the last parameter in the URL eg (http://sokrates-controlplane/BPNSOKRATES). +By default, the extension parse the `referringConnector` url and extract the BPN number as the last parameter in the URL eg (). ### Configuration diff --git a/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/README.md b/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/README.md index ec590c1a2..45e337d9d 100644 --- a/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/README.md +++ b/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/README.md @@ -36,7 +36,7 @@ Example with base url `http://localhost:8080/test` The final url will look like `http://localhost:8080/test/sub?foo=bar` composed by the DataPlane manager with the Http request flow, -> Note: the endpoint is not protected with configured `AuthenticationService`, which most likely will be the token based (auth key) one. +> Note: the endpoint is protected with configured `AuthenticationService`. ## Configuration diff --git a/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/build.gradle.kts b/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/build.gradle.kts index fbe98c1a5..2256c0b1c 100644 --- a/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/build.gradle.kts +++ b/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/build.gradle.kts @@ -23,7 +23,6 @@ dependencies { implementation(libs.edc.spi.http) implementation(libs.edc.util) - implementation(libs.edc.dpf.framework) implementation(libs.edc.dpf.util) implementation(libs.edc.ext.http) implementation(libs.edc.spi.auth) diff --git a/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/src/main/java/org/eclipse/tractusx/edc/dataplane/proxy/consumer/api/asset/ClientErrorExceptionMapper.java b/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/src/main/java/org/eclipse/tractusx/edc/dataplane/proxy/consumer/api/asset/ClientErrorExceptionMapper.java index 386428084..819ae41fe 100644 --- a/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/src/main/java/org/eclipse/tractusx/edc/dataplane/proxy/consumer/api/asset/ClientErrorExceptionMapper.java +++ b/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/src/main/java/org/eclipse/tractusx/edc/dataplane/proxy/consumer/api/asset/ClientErrorExceptionMapper.java @@ -18,6 +18,7 @@ import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; import jakarta.ws.rs.ext.Provider; +import org.eclipse.edc.web.spi.ApiErrorDetail; /** * Maps client errors to return the associated status. @@ -30,7 +31,8 @@ public ClientErrorExceptionMapper() { @Override public Response toResponse(ClientErrorException exception) { - return Response.status(exception.getResponse().getStatus()).build(); + var detail = ApiErrorDetail.Builder.newInstance().message(exception.getMessage()).build(); + return Response.status(exception.getResponse().getStatus()).entity(detail).build(); } } diff --git a/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/src/main/java/org/eclipse/tractusx/edc/dataplane/proxy/consumer/api/asset/ConsumerAssetRequestController.java b/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/src/main/java/org/eclipse/tractusx/edc/dataplane/proxy/consumer/api/asset/ConsumerAssetRequestController.java index fce090e3a..33d1f01c9 100644 --- a/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/src/main/java/org/eclipse/tractusx/edc/dataplane/proxy/consumer/api/asset/ConsumerAssetRequestController.java +++ b/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/src/main/java/org/eclipse/tractusx/edc/dataplane/proxy/consumer/api/asset/ConsumerAssetRequestController.java @@ -17,8 +17,10 @@ import jakarta.ws.rs.BadRequestException; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; import jakarta.ws.rs.container.AsyncResponse; import jakarta.ws.rs.container.Suspended; +import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.StreamingOutput; import org.eclipse.edc.connector.dataplane.spi.manager.DataPlaneManager; import org.eclipse.edc.connector.dataplane.spi.pipeline.StreamResult; @@ -51,6 +53,7 @@ * Implements the HTTP proxy API. */ @Path("/aas") +@Produces(MediaType.APPLICATION_JSON) public class ConsumerAssetRequestController implements ConsumerAssetRequestApi { public static final String BASE_URL = "baseUrl"; private static final String HTTP_DATA = "HttpData"; diff --git a/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/consumer/api/asset/model/ConsumerAssetRequestControllerTest.java b/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/consumer/api/asset/model/ConsumerAssetRequestControllerTest.java index 25891101a..04acacdf7 100644 --- a/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/consumer/api/asset/model/ConsumerAssetRequestControllerTest.java +++ b/edc-extensions/dataplane-proxy/edc-dataplane-proxy-consumer-api/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/consumer/api/asset/model/ConsumerAssetRequestControllerTest.java @@ -28,6 +28,7 @@ import org.eclipse.edc.spi.types.domain.edr.EndpointDataReference; import org.eclipse.edc.spi.types.domain.transfer.DataFlowRequest; import org.eclipse.edc.web.jersey.testfixtures.RestControllerTestBase; +import org.eclipse.tractusx.edc.dataplane.proxy.consumer.api.asset.ClientErrorExceptionMapper; import org.eclipse.tractusx.edc.dataplane.proxy.consumer.api.asset.ConsumerAssetRequestController; import org.eclipse.tractusx.edc.edr.spi.store.EndpointDataReferenceCache; import org.junit.jupiter.api.Test; @@ -53,6 +54,7 @@ import static org.eclipse.edc.connector.dataplane.spi.schema.DataFlowRequestSchema.PATH; import static org.eclipse.edc.connector.dataplane.spi.schema.DataFlowRequestSchema.QUERY_PARAMS; import static org.eclipse.tractusx.edc.dataplane.proxy.consumer.api.asset.ConsumerAssetRequestController.BASE_URL; +import static org.hamcrest.Matchers.notNullValue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -159,7 +161,8 @@ void requestAsset_shouldReturnError_whenEdrByAssetIdNotFound() { .body(request) .post(ASSET_REQUEST_PATH) .then() - .statusCode(400); + .statusCode(400) + .body("message", notNullValue()); } @@ -184,7 +187,8 @@ void requestAsset_shouldReturnError_whenMultipleEdrsByAssetIdFound() { .body(request) .post(ASSET_REQUEST_PATH) .then() - .statusCode(428); + .statusCode(428) + .body("message", notNullValue()); } @@ -245,7 +249,8 @@ void requestAsset_shouldReturnError_whenEdrByTransferProcessIdNotFound() { .body(request) .post(ASSET_REQUEST_PATH) .then() - .statusCode(400); + .statusCode(400) + .body("message", notNullValue()); } @@ -309,6 +314,11 @@ protected Object controller() { return new ConsumerAssetRequestController(cache, dataPlaneManager, Executors.newSingleThreadExecutor(), mock(Monitor.class)); } + @Override + protected Object additionalResource() { + return new ClientErrorExceptionMapper(); + } + private RequestSpecification baseRequest() { return given() .baseUri("http://localhost:" + port) diff --git a/edc-extensions/dataplane-proxy/edc-dataplane-proxy-provider-api/build.gradle.kts b/edc-extensions/dataplane-proxy/edc-dataplane-proxy-provider-api/build.gradle.kts index 6e0354ad0..729e2bf74 100644 --- a/edc-extensions/dataplane-proxy/edc-dataplane-proxy-provider-api/build.gradle.kts +++ b/edc-extensions/dataplane-proxy/edc-dataplane-proxy-provider-api/build.gradle.kts @@ -21,7 +21,6 @@ dependencies { implementation(libs.edc.spi.http) implementation(libs.edc.util) - implementation(libs.edc.dpf.framework) implementation(libs.edc.dpf.util) implementation(libs.edc.ext.http) implementation(libs.edc.spi.jwt) diff --git a/edc-extensions/dataplane-proxy/edc-dataplane-proxy-provider-core/build.gradle.kts b/edc-extensions/dataplane-proxy/edc-dataplane-proxy-provider-core/build.gradle.kts index 8ec7a9641..1e0be9029 100644 --- a/edc-extensions/dataplane-proxy/edc-dataplane-proxy-provider-core/build.gradle.kts +++ b/edc-extensions/dataplane-proxy/edc-dataplane-proxy-provider-core/build.gradle.kts @@ -19,7 +19,6 @@ plugins { dependencies { implementation(libs.edc.util) - implementation(libs.edc.dpf.framework) implementation(libs.edc.dpf.util) implementation(libs.edc.jwt.core) implementation(libs.edc.ext.http) diff --git a/edc-extensions/dataplane-selector-configuration/README.md b/edc-extensions/dataplane-selector-configuration/README.md index d5f922732..a912cf9c4 100644 --- a/edc-extensions/dataplane-selector-configuration/README.md +++ b/edc-extensions/dataplane-selector-configuration/README.md @@ -7,12 +7,12 @@ plane will look for an instance with matching capabilities to transfer data. Per data plane instance the following settings must be configured. As `` any unique string is valid. -| Key | Description | Mandatory | Example | -|:------------------------------------------------------------|:--------------------------------------------------|-----------|------------------------------------------------------------------| -| edc.dataplane.selector.````.url | URL to connect to the Data Plane Instance. | X | | -| edc.dataplane.selector.````.sourcetypes | Source Types in a comma separated List. | X | HttpData | -| edc.dataplane.selector.````.destinationtypes | Destination Types in a comma separated List. | X | HttpProxy | -| edc.dataplane.selector.````.properties | Additional properties of the Data Plane Instance. | (X) | { "publicApiUrl": "http://plato-edc-dataplane:8185/api/public" } | +| Key | Description | Mandatory | Example | +|:------------------------------------------------------------|:--------------------------------------------------|-----------|--------------------------------------------------------------------| +| edc.dataplane.selector.````.url | URL to connect to the Data Plane Instance. | X | | +| edc.dataplane.selector.````.sourcetypes | Source Types in a comma separated List. | X | HttpData | +| edc.dataplane.selector.````.destinationtypes | Destination Types in a comma separated List. | X | HttpProxy | +| edc.dataplane.selector.````.properties | Additional properties of the Data Plane Instance. | (X) | `{ "publicApiUrl": "http://plato-edc-dataplane:8185/api/public" }` | The property `publicApiUrl` is mandatory for Data Plane Instances with destination type `HttpProxy`. diff --git a/edc-extensions/edr/edr-api/src/main/java/org/eclipse/tractusx/edc/api/edr/EdrController.java b/edc-extensions/edr/edr-api/src/main/java/org/eclipse/tractusx/edc/api/edr/EdrController.java index 97a5344dd..79abbdb5c 100644 --- a/edc-extensions/edr/edr-api/src/main/java/org/eclipse/tractusx/edc/api/edr/EdrController.java +++ b/edc-extensions/edr/edr-api/src/main/java/org/eclipse/tractusx/edc/api/edr/EdrController.java @@ -133,7 +133,7 @@ private QuerySpec querySpec(String assetId, String agreementId, String providerI queryBuilder.filter(fieldFilter(AGREEMENT_ID, agreementId)); } if (providerId != null) { - queryBuilder.filter(fieldFilter(PROVIDER_ID, agreementId)); + queryBuilder.filter(fieldFilter(PROVIDER_ID, providerId)); } return queryBuilder.build(); } diff --git a/edc-extensions/edr/edr-api/src/test/java/org/eclipse/tractusx/edc/api/edr/EdrControllerTest.java b/edc-extensions/edr/edr-api/src/test/java/org/eclipse/tractusx/edc/api/edr/EdrControllerTest.java index 18d47d67a..11e122553 100644 --- a/edc-extensions/edr/edr-api/src/test/java/org/eclipse/tractusx/edc/api/edr/EdrControllerTest.java +++ b/edc-extensions/edr/edr-api/src/test/java/org/eclipse/tractusx/edc/api/edr/EdrControllerTest.java @@ -229,10 +229,10 @@ void queryEdrs_shouldReturnCachedEntries_whenAssetIdIsProvided() { @Test void queryEdrs_shouldReturnCachedEntries_whenAgreementIdIsProvided() { - var assetId = "id"; - var transferProcessId = "id"; - var agreementId = "id"; - var providerId = "id"; + var assetId = "assetId"; + var transferProcessId = "transferProcessId"; + var agreementId = "agreementId"; + var providerId = "providerId"; var entry = EndpointDataReferenceEntry.Builder.newInstance() .transferProcessId(transferProcessId) diff --git a/edc-extensions/edr/edr-cache-sql/README.md b/edc-extensions/edr/edr-cache-sql/README.md index 270d1f266..6e88c4bb0 100644 --- a/edc-extensions/edr/edr-cache-sql/README.md +++ b/edc-extensions/edr/edr-cache-sql/README.md @@ -11,7 +11,7 @@ It will store in the database this fields: It represents a single EDR negotiation done with the new Control Plane EDR APIs. -The EDR itself it is stored in the participant vault with a prefixed key `edr__`. +The EDR itself it is stored in the participant vault with a prefixed key `edr--`. **_Note that the SQL statements (DDL) are specific to and only tested with PostgreSQL. Using it with other RDBMS may work but might have unexpected side effects!_** @@ -22,6 +22,7 @@ see [schema.sql](docs/schema.sql). ## 2. Configuration -| Key | Description | Mandatory | Default | -|:---------------------------------------|:----------------------------------|-----------|---------| -| edc.datasource.edr.name | Datasource used by this extension | | edr | +| Key | Description | Mandatory | Default | +|:------------------------|:--------------------------------------------------------------------------------------------------|-----------|---------| +| edc.datasource.edr.name | Datasource used by this extension | | edr | +| edc.edr.vault.path | Directory/Path where to store EDRs in the vault for vaults that supports hierarchical structuring | | | diff --git a/edc-extensions/edr/edr-cache-sql/src/main/java/org/eclipse/tractusx/edc/edr/store/sql/SqlEndpointDataReferenceCache.java b/edc-extensions/edr/edr-cache-sql/src/main/java/org/eclipse/tractusx/edc/edr/store/sql/SqlEndpointDataReferenceCache.java index 12bc7676a..8b22138cc 100644 --- a/edc-extensions/edr/edr-cache-sql/src/main/java/org/eclipse/tractusx/edc/edr/store/sql/SqlEndpointDataReferenceCache.java +++ b/edc-extensions/edr/edr-cache-sql/src/main/java/org/eclipse/tractusx/edc/edr/store/sql/SqlEndpointDataReferenceCache.java @@ -53,23 +53,22 @@ public class SqlEndpointDataReferenceCache extends AbstractSqlStore implements E public static final String SEPARATOR = "--"; public static final String VAULT_PREFIX = "edr" + SEPARATOR; private final EdrStatements statements; + private final String vaultPath; private final Clock clock; private final Vault vault; private final SqlLeaseContextBuilder leaseContext; - private final String leaseHolder; - public SqlEndpointDataReferenceCache(DataSourceRegistry dataSourceRegistry, String dataSourceName, TransactionContext transactionContext, EdrStatements statements, - ObjectMapper objectMapper, Vault vault, Clock clock, + ObjectMapper objectMapper, Vault vault, String vaultPath, Clock clock, QueryExecutor queryExecutor, String connectorId) { super(dataSourceRegistry, dataSourceName, transactionContext, objectMapper, queryExecutor); this.statements = statements; + this.vaultPath = vaultPath; this.clock = clock; this.vault = vault; - this.leaseHolder = connectorId; leaseContext = SqlLeaseContextBuilder.with(transactionContext, connectorId, statements, clock, queryExecutor); } @@ -105,16 +104,6 @@ public SqlEndpointDataReferenceCache(DataSourceRegistry dataSourceRegistry, Stri }); } - @Override - public StoreResult findByCorrelationIdAndLease(String correlationId) { - return findByIdAndLease(correlationId); - } - - @Override - public void save(EndpointDataReferenceEntry entity) { - throw new UnsupportedOperationException("Please use save(EndpointDataReferenceEntry, EndpointDataReference) instead!"); - } - @Override public @NotNull List referencesForAsset(String assetId, String providerId) { var querySpec = QuerySpec.Builder.newInstance(); @@ -153,7 +142,7 @@ public void save(EndpointDataReferenceEntry entry, EndpointDataReference edr) { entry.getErrorDetail(), entry.getCreatedAt(), entry.getUpdatedAt()); - vault.storeSecret(VAULT_PREFIX + edr.getId(), toJson(edr)).orElseThrow((failure) -> new EdcPersistenceException(failure.getFailureDetail())); + vault.storeSecret(vaultPath + VAULT_PREFIX + edr.getId(), toJson(edr)).orElseThrow((failure) -> new EdcPersistenceException(failure.getFailureDetail())); } catch (Exception exception) { throw new EdcPersistenceException(exception); } @@ -188,7 +177,7 @@ public StoreResult deleteByTransferProcessId(String leaseContext.withConnection(connection).acquireLease(id); queryExecutor.execute(connection, statements.getDeleteByIdTemplate(), id); leaseContext.withConnection(connection).breakLease(id); - vault.deleteSecret(VAULT_PREFIX + entryWrapper.getEdrId()).orElseThrow((failure) -> new EdcPersistenceException(failure.getFailureDetail())); + vault.deleteSecret(vaultPath + VAULT_PREFIX + entryWrapper.getEdrId()).orElseThrow((failure) -> new EdcPersistenceException(failure.getFailureDetail())); return StoreResult.success(entryWrapper.getEntry()); } else { return StoreResult.notFound(format("EDR with id %s not found", id)); @@ -199,6 +188,17 @@ public StoreResult deleteByTransferProcessId(String }); } + @Override + public @Nullable EndpointDataReferenceEntry findById(String id) { + return transactionContext.execute(() -> { + try (var connection = getConnection()) { + return findById(connection, id, this::mapResultSet); + } catch (Exception exception) { + throw new EdcPersistenceException(exception); + } + }); + } + @Override public @NotNull List nextNotLeased(int max, Criterion... criteria) { return transactionContext.execute(() -> { @@ -221,6 +221,11 @@ public StoreResult deleteByTransferProcessId(String }); } + @Override + public void save(EndpointDataReferenceEntry entity) { + throw new UnsupportedOperationException("Please use save(EndpointDataReferenceEntry, EndpointDataReference) instead!"); + } + private T findById(Connection connection, String id, ResultSetMapper resultSetMapper) { var sql = statements.getFindByTransferProcessIdTemplate(); return queryExecutor.single(connection, false, resultSetMapper, sql, id); @@ -268,7 +273,7 @@ private EndpointDataReferenceEntryWrapper mapToWrapper(ResultSet resultSet) thro } private EndpointDataReference referenceFromEntry(String edrId) { - var edr = vault.resolveSecret(VAULT_PREFIX + edrId); + var edr = vault.resolveSecret(vaultPath + VAULT_PREFIX + edrId); if (edr != null) { return fromJson(edr, EndpointDataReference.class); } diff --git a/edc-extensions/edr/edr-cache-sql/src/main/java/org/eclipse/tractusx/edc/edr/store/sql/SqlEndpointDataReferenceCacheExtension.java b/edc-extensions/edr/edr-cache-sql/src/main/java/org/eclipse/tractusx/edc/edr/store/sql/SqlEndpointDataReferenceCacheExtension.java index dcb4cb211..2c871dbdc 100644 --- a/edc-extensions/edr/edr-cache-sql/src/main/java/org/eclipse/tractusx/edc/edr/store/sql/SqlEndpointDataReferenceCacheExtension.java +++ b/edc-extensions/edr/edr-cache-sql/src/main/java/org/eclipse/tractusx/edc/edr/store/sql/SqlEndpointDataReferenceCacheExtension.java @@ -38,6 +38,9 @@ public class SqlEndpointDataReferenceCacheExtension implements ServiceExtension @Setting(required = true, defaultValue = SqlEndpointDataReferenceCacheExtension.DEFAULT_DATASOURCE_NAME) public static final String DATASOURCE_SETTING_NAME = "edc.datasource.edr.name"; + + @Setting(value = "Directory/Path where to store EDRs in the vault for vaults that supports hierarchical structuring.", required = false, defaultValue = "") + public static final String EDC_EDR_VAULT_PATH = "edc.edr.vault.path"; public static final String DEFAULT_DATASOURCE_NAME = "edr"; @Inject private DataSourceRegistry dataSourceRegistry; @@ -63,7 +66,8 @@ public String name() { @Provider public EndpointDataReferenceCache edrCache(ServiceExtensionContext context) { var dataSourceName = context.getConfig().getString(DATASOURCE_SETTING_NAME, DEFAULT_DATASOURCE_NAME); - return new SqlEndpointDataReferenceCache(dataSourceRegistry, dataSourceName, transactionContext, getStatementImpl(), typeManager.getMapper(), vault, clock, queryExecutor, context.getConnectorId()); + var vaultDirectory = context.getConfig().getString(EDC_EDR_VAULT_PATH, ""); + return new SqlEndpointDataReferenceCache(dataSourceRegistry, dataSourceName, transactionContext, getStatementImpl(), typeManager.getMapper(), vault, vaultDirectory, clock, queryExecutor, context.getConnectorId()); } private EdrStatements getStatementImpl() { diff --git a/edc-extensions/edr/edr-cache-sql/src/test/java/org/eclipse/tractusx/edc/edr/store/sql/SqlEndpointDataReferenceCacheTest.java b/edc-extensions/edr/edr-cache-sql/src/test/java/org/eclipse/tractusx/edc/edr/store/sql/SqlEndpointDataReferenceCacheTest.java index 2b80d0e21..4b45c874f 100644 --- a/edc-extensions/edr/edr-cache-sql/src/test/java/org/eclipse/tractusx/edc/edr/store/sql/SqlEndpointDataReferenceCacheTest.java +++ b/edc-extensions/edr/edr-cache-sql/src/test/java/org/eclipse/tractusx/edc/edr/store/sql/SqlEndpointDataReferenceCacheTest.java @@ -70,7 +70,7 @@ void setUp(PostgresqlStoreSetupExtension extension, QueryExecutor queryExecutor) when(vault.storeSecret(any(), any())).thenReturn(Result.success()); when(vault.resolveSecret(any())).then(a -> edrJson(a.getArgument(0))); - cache = new SqlEndpointDataReferenceCache(extension.getDataSourceRegistry(), extension.getDatasourceName(), extension.getTransactionContext(), statements, typeManager.getMapper(), vault, clock, queryExecutor, CONNECTOR_NAME); + cache = new SqlEndpointDataReferenceCache(extension.getDataSourceRegistry(), extension.getDatasourceName(), extension.getTransactionContext(), statements, typeManager.getMapper(), vault, "", clock, queryExecutor, CONNECTOR_NAME); var schema = Files.readString(Paths.get("./docs/schema.sql")); extension.runQuery(schema); leaseUtil = new LeaseUtil(extension.getTransactionContext(), extension::getConnection, statements, clock); @@ -96,6 +96,24 @@ void verify_unoffensive_secretKey() { verify(vault).storeSecret(argThat(s -> s.startsWith("edr--")), anyString()); } + @Test + void verify_custom_vaultPath(PostgresqlStoreSetupExtension extension, QueryExecutor queryExecutor) { + + var path = "testPath/"; + cache = new SqlEndpointDataReferenceCache(extension.getDataSourceRegistry(), extension.getDatasourceName(), extension.getTransactionContext(), statements, typeManager.getMapper(), vault, path, clock, queryExecutor, CONNECTOR_NAME); + + var tpId = "tp1"; + var assetId = "asset1"; + var edrId = "edr1"; + + var edr = edr(edrId); + var entry = edrEntry(assetId, randomUUID().toString(), tpId); + + cache.save(entry, edr); + + verify(vault).storeSecret(argThat(s -> s.startsWith(path + "edr--")), anyString()); + } + @Override protected EndpointDataReferenceCache getStore() { return cache; diff --git a/edc-extensions/edr/edr-cache-sql/src/test/java/org/eclipse/tractusx/edc/edr/store/sql/SqlEndpointDataReferenceCacheTransactionalTest.java b/edc-extensions/edr/edr-cache-sql/src/test/java/org/eclipse/tractusx/edc/edr/store/sql/SqlEndpointDataReferenceCacheTransactionalTest.java index 20ffe673c..c49d21866 100644 --- a/edc-extensions/edr/edr-cache-sql/src/test/java/org/eclipse/tractusx/edc/edr/store/sql/SqlEndpointDataReferenceCacheTransactionalTest.java +++ b/edc-extensions/edr/edr-cache-sql/src/test/java/org/eclipse/tractusx/edc/edr/store/sql/SqlEndpointDataReferenceCacheTransactionalTest.java @@ -70,7 +70,7 @@ void setUp(PostgresqlStoreSetupExtension extension, QueryExecutor queryExecutor) when(vault.deleteSecret(any())).thenReturn(Result.success()); when(vault.storeSecret(any(), any())).thenReturn(Result.success()); - cache = new SqlEndpointDataReferenceCache(extension.getDataSourceRegistry(), extension.getDatasourceName(), extension.getTransactionContext(), statements, typeManager.getMapper(), vault, clock, queryExecutor, CONNECTOR_NAME); + cache = new SqlEndpointDataReferenceCache(extension.getDataSourceRegistry(), extension.getDatasourceName(), extension.getTransactionContext(), statements, typeManager.getMapper(), vault, "", clock, queryExecutor, CONNECTOR_NAME); var schema = Files.readString(Paths.get("./docs/schema.sql")); extension.runQuery(schema); diff --git a/edc-extensions/postgresql-migration/build.gradle.kts b/edc-extensions/postgresql-migration/build.gradle.kts index de91ef6d5..57fec3b9b 100644 --- a/edc-extensions/postgresql-migration/build.gradle.kts +++ b/edc-extensions/postgresql-migration/build.gradle.kts @@ -30,5 +30,5 @@ dependencies { implementation(libs.edc.sql.core) runtimeOnly(libs.postgres) - implementation("org.flywaydb:flyway-core:9.21.1") + implementation("org.flywaydb:flyway-core:9.22.2") } diff --git a/edc-extensions/ssi/jws2020-crypto-suite/README.md b/edc-extensions/ssi/jws2020-crypto-suite/README.md index 4a11e93dd..c552f3180 100644 --- a/edc-extensions/ssi/jws2020-crypto-suite/README.md +++ b/edc-extensions/ssi/jws2020-crypto-suite/README.md @@ -64,7 +64,6 @@ acceptable to you, please add a dependency exclusion to your build script. a [hard-coded context](https://github.com/filip26/iron-verifiable-credentials/blob/82d13326c5f64a0f38c75d417ffc263febfd970d/src/main/java/com/apicatalog/vc/processor/Issuer.java#L122) added to the compacted JSON-LD, which is incorrect. It doesn't negatively impact the resulting JSON-LD, other than possibly affecting processing times, but unfortunately it also makes it impossible to add more contexts, such -as https://w3id.org/security/suites/jws-2020/v1. We mitigated this with -the [`IssuerCompat.java`](./src/main/java/org/eclipse/edc/security/signature/jws2020/IssuerCompat.java), which should be -used -for compaction. +as . We mitigated this with +the [`IssuerCompat.java`](https://github.com/eclipse-tractusx/tractusx-edc/blob/main/edc-extensions/ssi/jws2020-crypto-suite/src/main/java/org/eclipse/edc/security/signature/jws2020/IssuerCompat.java), +which should be used for compaction. diff --git a/edc-extensions/ssi/ssi-miw-credential-client/README.md b/edc-extensions/ssi/ssi-miw-credential-client/README.md index 8413e575b..883165147 100644 --- a/edc-extensions/ssi/ssi-miw-credential-client/README.md +++ b/edc-extensions/ssi/ssi-miw-credential-client/README.md @@ -27,7 +27,7 @@ This module also contains two additional validation rules of VP/VC on the provid | tx.ssi.oauth.client.id | X | | Client id | | tx.ssi.oauth.client.secret.alias | X | | Vault alias for the client secret | -By default, the `tx.ssi.miw.authority.issuer` is composed with `did:web:: +By default, the `tx.ssi.miw.authority.issuer` is composed with `did:web::` Another mandatory settings is `tx.ssi.endpoint.audience` which is described [here](../ssi-identity-core/README.md) diff --git a/edc-extensions/ssi/ssi-miw-credential-client/src/main/java/org/eclipse/tractusx/edc/iam/ssi/miw/SsiMiwOauth2ClientExtension.java b/edc-extensions/ssi/ssi-miw-credential-client/src/main/java/org/eclipse/tractusx/edc/iam/ssi/miw/SsiMiwOauth2ClientExtension.java index 0905b18f6..8af1c3620 100644 --- a/edc-extensions/ssi/ssi-miw-credential-client/src/main/java/org/eclipse/tractusx/edc/iam/ssi/miw/SsiMiwOauth2ClientExtension.java +++ b/edc-extensions/ssi/ssi-miw-credential-client/src/main/java/org/eclipse/tractusx/edc/iam/ssi/miw/SsiMiwOauth2ClientExtension.java @@ -67,7 +67,7 @@ private MiwOauth2ClientConfiguration createConfiguration(ServiceExtensionContext var clientId = context.getConfig().getString(CLIENT_ID); var clientSecretAlias = context.getConfig().getString(CLIENT_SECRET_ALIAS); var clientSecret = vault.resolveSecret(clientSecretAlias); - Objects.requireNonNull(clientSecret, "Client secret not found in the vault"); + Objects.requireNonNull(clientSecret, "Client secret could not be retrieved"); return MiwOauth2ClientConfiguration.Builder.newInstance() .tokenUrl(tokenUrl) diff --git a/edc-tests/deployment/src/main/resources/helm/tractusx-connector-azure-vault-test.yaml b/edc-tests/deployment/src/main/resources/helm/tractusx-connector-azure-vault-test.yaml index 9f4768383..757cd64c9 100644 --- a/edc-tests/deployment/src/main/resources/helm/tractusx-connector-azure-vault-test.yaml +++ b/edc-tests/deployment/src/main/resources/helm/tractusx-connector-azure-vault-test.yaml @@ -57,6 +57,9 @@ controlplane: # avoids some errors in the log: cannot write temp files of large multipart requests when R/O readOnlyRootFilesystem: false dataplane: + endpoints: + proxy: + authKey: password image: pullPolicy: Never tag: "latest" diff --git a/edc-tests/deployment/src/main/resources/helm/tractusx-connector-test.yaml b/edc-tests/deployment/src/main/resources/helm/tractusx-connector-test.yaml index 6dd81aa29..453800d0f 100644 --- a/edc-tests/deployment/src/main/resources/helm/tractusx-connector-test.yaml +++ b/edc-tests/deployment/src/main/resources/helm/tractusx-connector-test.yaml @@ -44,6 +44,9 @@ controlplane: client: secretAlias: "client-secret" dataplane: + endpoints: + proxy: + authKey: password image: pullPolicy: Never tag: "latest" diff --git a/edc-tests/e2e-tests/build.gradle.kts b/edc-tests/e2e-tests/build.gradle.kts index af8d43d19..a75623d9d 100644 --- a/edc-tests/e2e-tests/build.gradle.kts +++ b/edc-tests/e2e-tests/build.gradle.kts @@ -48,6 +48,7 @@ dependencies { testImplementation(libs.edc.auth.oauth2.client) testImplementation(libs.testcontainers.junit) testImplementation(libs.testcontainers.postgres) + testImplementation(libs.testcontainers.vault) } diff --git a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/helpers/PolicyHelperFunctions.java b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/helpers/PolicyHelperFunctions.java index d1196453b..4c933fb1b 100644 --- a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/helpers/PolicyHelperFunctions.java +++ b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/helpers/PolicyHelperFunctions.java @@ -44,6 +44,9 @@ public class PolicyHelperFunctions { public static final String TX_NAMESPACE = "https://w3id.org/tractusx/v0.0.1/ns/"; private static final String BUSINESS_PARTNER_EVALUATION_KEY = "BusinessPartnerNumber"; + + public static final String BUSINESS_PARTNER_LEGACY_EVALUATION_KEY = TX_NAMESPACE + BUSINESS_PARTNER_EVALUATION_KEY; + private static final String BUSINESS_PARTNER_CONSTRAINT_KEY = TX_NAMESPACE + "BusinessPartnerGroup"; private static final ObjectMapper MAPPER = JacksonJsonLd.createObjectMapper(); diff --git a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/helpers/TxPostgresqlLocalInstance.java b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/helpers/TxPostgresqlLocalInstance.java deleted file mode 100644 index eaac4e0e2..000000000 --- a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/helpers/TxPostgresqlLocalInstance.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2022 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - * - * 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: - * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation - * - */ - -package org.eclipse.tractusx.edc.helpers; - -import org.postgresql.ds.PGSimpleDataSource; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; -import javax.sql.DataSource; - -import static java.lang.String.format; - -@Deprecated(forRemoval = true) -public final class TxPostgresqlLocalInstance { - private final String password; - private final String jdbcUrlPrefix; - private final String username; - private final String databaseName; - - public TxPostgresqlLocalInstance(String user, String password, String jdbcUrlPrefix, String db) { - username = user; - this.password = password; - this.jdbcUrlPrefix = jdbcUrlPrefix; - databaseName = db; - } - - public void createDatabase() { - createDatabase(databaseName); - } - - public void createDatabase(String name) { - try (var connection = DriverManager.getConnection(jdbcUrlPrefix + username, username, password)) { - connection.createStatement().execute(format("create database %s;", name)); - } catch (SQLException e) { - e.printStackTrace(); - // database could already exist - } - } - - public Connection getTestConnection(String hostName, int port, String dbName) { - try { - return createTestDataSource(hostName, port, dbName).getConnection(); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - public Connection getConnection() { - try { - return DriverManager.getConnection(jdbcUrlPrefix, username, password); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - public String getJdbcUrlPrefix() { - return jdbcUrlPrefix; - } - - private DataSource createTestDataSource(String hostName, int port, String dbName) { - var dataSource = new PGSimpleDataSource(); - dataSource.setServerNames(new String[]{ hostName }); - dataSource.setPortNumbers(new int[]{ port }); - dataSource.setUser(username); - dataSource.setPassword(password); - dataSource.setDatabaseName(dbName); - return dataSource; - } -} diff --git a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/lifecycle/Participant.java b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/lifecycle/Participant.java index 36b722640..da0c45b30 100644 --- a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/lifecycle/Participant.java +++ b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/lifecycle/Participant.java @@ -35,6 +35,7 @@ import java.time.Duration; import java.util.Arrays; import java.util.Map; +import java.util.UUID; import java.util.concurrent.atomic.AtomicReference; import static io.restassured.RestAssured.given; @@ -42,6 +43,7 @@ import static java.lang.String.format; import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; +import static org.eclipse.edc.connector.contract.spi.types.negotiation.ContractNegotiationStates.FINALIZED; import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.ID; import static org.eclipse.edc.jsonld.spi.PropertyAndTypeNames.DCAT_DATASET_ATTRIBUTE; import static org.eclipse.tractusx.edc.helpers.AssetHelperFunctions.createDataAddressBuilder; @@ -342,6 +344,36 @@ public JsonArray getCatalogDatasets(Participant provider, JsonObject querySpec) return datasetReference.get(); } + /** + * Request a provider asset: + * - retrieves the contract definition associated with the asset, + * - handles the contract negotiation, + * - initiate the data transfer. + * + * @param provider data provider + * @param assetId asset id + * @param destination data destination + * @return transfer process id. + */ + public String requestAsset(Participant provider, String assetId, JsonObject destination) { + var negotiationId = negotiateContract(provider, assetId); + var contractAgreementId = waitForAgreementId(negotiationId); + var transferProcessId = requestTransfer(UUID.randomUUID().toString(), contractAgreementId, assetId, provider, destination); + assertThat(transferProcessId).isNotNull(); + return transferProcessId; + } + + + public String waitForAgreementId(String negotiationId) { + await().atMost(timeout).untilAsserted(() -> { + var state = getContractNegotiationField(negotiationId, "state"); + assertThat(state).isEqualTo(FINALIZED.name()); + }); + + return getContractAgreementId(negotiationId); + } + + public String pullProxyDataByAssetId(Participant provider, String assetId) { var body = Map.of("assetId", assetId, "endpointUrl", format("%s/aas/test", provider.gatewayEndpoint)); return getProxyData(body); diff --git a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/lifecycle/PgHashicorpParticipantRuntime.java b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/lifecycle/PgHashicorpParticipantRuntime.java new file mode 100644 index 000000000..99a593d22 --- /dev/null +++ b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/lifecycle/PgHashicorpParticipantRuntime.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * 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: + * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation + * + */ + +package org.eclipse.tractusx.edc.lifecycle; + +import org.junit.jupiter.api.extension.ExtensionContext; +import org.testcontainers.vault.VaultContainer; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import static java.lang.String.format; + +public class PgHashicorpParticipantRuntime extends PgParticipantRuntime { + + static final String DOCKER_IMAGE_NAME = "vault:1.9.6"; + static final String TOKEN = UUID.randomUUID().toString(); + + + public final VaultContainer vaultContainer = new VaultContainer<>(DOCKER_IMAGE_NAME) + .withVaultToken(TOKEN); + private final String vaultDirectory; + + public PgHashicorpParticipantRuntime(String moduleName, String runtimeName, String bpn, String vaultDirectory, Map properties) { + super(moduleName, runtimeName, bpn, properties); + this.vaultDirectory = vaultDirectory; + } + + @Override + public void beforeAll(ExtensionContext context) throws Exception { + vaultContainer.start(); + config().forEach(System::setProperty); + super.beforeAll(context); + } + + @Override + public void afterAll(ExtensionContext context) throws Exception { + super.afterAll(context); + vaultContainer.stop(); + vaultContainer.close(); + } + + @Override + protected void mockVault() { + + } + + private Map config() { + return new HashMap<>() { + { + put("edc.vault.hashicorp.url", format("http://%s:%s", vaultContainer.getHost(), vaultContainer.getFirstMappedPort())); + put("edc.vault.hashicorp.token", TOKEN); + put("edc.edr.vault.path", vaultDirectory); + } + }; + } +} diff --git a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/lifecycle/PgParticipantRuntime.java b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/lifecycle/PgParticipantRuntime.java index ecdfa0e6d..106a929bb 100644 --- a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/lifecycle/PgParticipantRuntime.java +++ b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/lifecycle/PgParticipantRuntime.java @@ -47,7 +47,7 @@ public PgParticipantRuntime(String moduleName, String runtimeName, String bpn, M super(moduleName, runtimeName, bpn, properties); this.dbName = runtimeName.toLowerCase(); this.registerServiceMock(IdentityService.class, new MockDapsService(bpn)); - this.registerServiceMock(Vault.class, new InMemoryVaultOverride(mock(Monitor.class))); + mockVault(); postgreSqlContainer = new PostgreSQLContainer<>(POSTGRES_IMAGE_NAME) .withLabel("runtime", dbName) @@ -125,6 +125,10 @@ public String baseJdbcUrl() { return format("jdbc:postgresql://%s:%s/", postgreSqlContainer.getHost(), postgreSqlContainer.getFirstMappedPort()); } + protected void mockVault() { + this.registerServiceMock(Vault.class, new InMemoryVaultOverride(mock(Monitor.class))); + } + private static class InMemoryVaultOverride extends InMemoryVault { InMemoryVaultOverride(Monitor monitor) { diff --git a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/lifecycle/TestRuntimeConfiguration.java b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/lifecycle/TestRuntimeConfiguration.java index e186a94a5..71a6aa38f 100644 --- a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/lifecycle/TestRuntimeConfiguration.java +++ b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/lifecycle/TestRuntimeConfiguration.java @@ -97,6 +97,8 @@ public static Map sokratesConfiguration() { put("web.http.public.path", "/api/public"); put("web.http.public.port", SOKRATES_PUBLIC_API_PORT); + put("edc.transfer.send.retry.limit", "1"); + put("edc.transfer.send.retry.base-delay.ms", "100"); // embedded dataplane config put("web.http.control.path", "/api/dataplane/control"); put("web.http.control.port", SOKRATES_DATAPLANE_CONTROL_PORT); @@ -128,6 +130,8 @@ public static Map platoConfiguration() { put("edc.api.auth.key", "testkey"); put("web.http.public.port", PLATO_PUBLIC_API_PORT); put("web.http.public.path", "/api/public"); + put("edc.transfer.send.retry.limit", "1"); + put("edc.transfer.send.retry.base-delay.ms", "100"); // embedded dataplane config put("web.http.control.path", "/api/dataplane/control"); put("web.http.control.port", PLATO_DATAPLANE_CONTROL_PORT); diff --git a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/catalog/AbstractCatalogTest.java b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/catalog/AbstractCatalogTest.java index 491ea292b..1b8fe86bb 100644 --- a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/catalog/AbstractCatalogTest.java +++ b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/catalog/AbstractCatalogTest.java @@ -20,12 +20,16 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import java.util.Map; + import static java.util.stream.IntStream.range; import static org.assertj.core.api.Assertions.assertThat; import static org.eclipse.tractusx.edc.helpers.CatalogHelperFunctions.getDatasetAssetId; import static org.eclipse.tractusx.edc.helpers.CatalogHelperFunctions.getDatasetPolicies; +import static org.eclipse.tractusx.edc.helpers.PolicyHelperFunctions.BUSINESS_PARTNER_LEGACY_EVALUATION_KEY; import static org.eclipse.tractusx.edc.helpers.PolicyHelperFunctions.businessPartnerGroupPolicy; import static org.eclipse.tractusx.edc.helpers.PolicyHelperFunctions.businessPartnerNumberPolicy; +import static org.eclipse.tractusx.edc.helpers.PolicyHelperFunctions.frameworkPolicy; import static org.eclipse.tractusx.edc.helpers.PolicyHelperFunctions.noConstraintPolicyDefinition; import static org.eclipse.tractusx.edc.helpers.QueryHelperFunctions.createQuery; import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.PLATO_BPN; @@ -92,6 +96,34 @@ void requestCatalog_filteredByBpnLegacy_shouldReject() { } + @Test + @DisplayName("Verify that Plato receives only the offers he is permitted to (using the legacy BPN validation)") + void requestCatalog_filteredByBpnLegacy_WithNamespace_shouldReject() { + var onlyPlatoId = "ap"; + var onlyDiogenesId = "db"; + + var onlyPlatoPolicy = businessPartnerNumberPolicy(onlyPlatoId, "BPN1", "BPN2", PLATO.getBpn()); + var onlyDiogenesPolicy = frameworkPolicy(onlyDiogenesId, Map.of(BUSINESS_PARTNER_LEGACY_EVALUATION_KEY, "ARISTOTELES-BPN")); + var noConstraintPolicyId = "no-constraint"; + + SOKRATES.createPolicy(onlyPlatoPolicy); + SOKRATES.createPolicy(onlyDiogenesPolicy); + SOKRATES.createPolicy(noConstraintPolicyDefinition(noConstraintPolicyId)); + + SOKRATES.createAsset("test-asset1"); + SOKRATES.createAsset("test-asset2"); + SOKRATES.createAsset("test-asset3"); + + SOKRATES.createContractDefinition("test-asset1", "def1", noConstraintPolicyId, noConstraintPolicyId); + SOKRATES.createContractDefinition("test-asset2", "def2", onlyPlatoId, noConstraintPolicyId); + SOKRATES.createContractDefinition("test-asset3", "def3", onlyDiogenesId, noConstraintPolicyId); + + + // act + var catalog = PLATO.getCatalogDatasets(SOKRATES); + assertThat(catalog).hasSize(2); + } + @Test @DisplayName("Verify that Plato receives only the offers he is permitted to (using the new BPN validation)") void requestCatalog_filteredByBpn_shouldReject() { diff --git a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/edr/AbstractNegotiateEdrTest.java b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/edr/AbstractNegotiateEdrTest.java index 9e6d87a40..71a54ebc9 100644 --- a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/edr/AbstractNegotiateEdrTest.java +++ b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/edr/AbstractNegotiateEdrTest.java @@ -22,7 +22,6 @@ import org.eclipse.edc.connector.contract.spi.event.contractnegotiation.ContractNegotiationInitiated; import org.eclipse.edc.connector.contract.spi.event.contractnegotiation.ContractNegotiationRequested; import org.eclipse.edc.connector.contract.spi.event.contractnegotiation.ContractNegotiationVerified; -import org.eclipse.edc.connector.transfer.spi.event.TransferProcessCompleted; import org.eclipse.edc.connector.transfer.spi.event.TransferProcessInitiated; import org.eclipse.edc.connector.transfer.spi.event.TransferProcessProvisioned; import org.eclipse.edc.connector.transfer.spi.event.TransferProcessRequested; @@ -35,11 +34,14 @@ import org.junit.jupiter.api.Test; import java.io.IOException; +import java.time.Duration; import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import static java.time.Duration.ofSeconds; import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; import static org.eclipse.edc.spi.CoreConstants.EDC_NAMESPACE; import static org.eclipse.edc.spi.types.domain.edr.EndpointDataReference.EDR_SIMPLE_TYPE; import static org.eclipse.tractusx.edc.helpers.EdrNegotiationHelperFunctions.createCallback; @@ -58,6 +60,9 @@ public abstract class AbstractNegotiateEdrTest { protected static final Participant SOKRATES = new Participant(SOKRATES_NAME, SOKRATES_BPN, sokratesConfiguration()); protected static final Participant PLATO = new Participant(PLATO_NAME, PLATO_BPN, platoConfiguration()); + private static final Duration ASYNC_TIMEOUT = ofSeconds(45); + private static final Duration ASYNC_POLL_INTERVAL = ofSeconds(1); + MockWebServer server; @BeforeEach @@ -78,8 +83,7 @@ void negotiateEdr_shouldInvokeCallbacks() throws IOException { createEvent(TransferProcessInitiated.class), createEvent(TransferProcessProvisioned.class), createEvent(TransferProcessRequested.class), - createEvent(TransferProcessStarted.class), - createEvent(TransferProcessCompleted.class)); + createEvent(TransferProcessStarted.class)); var assetId = "api-asset-1"; var url = server.url("/mock/api"); @@ -113,6 +117,14 @@ void negotiateEdr_shouldInvokeCallbacks() throws IOException { .map(receivedEvent -> waitForEvent(server, receivedEvent)) .collect(Collectors.toList()); + + await().pollInterval(ASYNC_POLL_INTERVAL) + .atMost(ASYNC_TIMEOUT) + .untilAsserted(() -> { + var edrCaches = SOKRATES.getEdrEntriesByAssetId(assetId); + assertThat(edrCaches).hasSize(1); + }); + assertThat(expectedEvents).usingRecursiveFieldByFieldElementComparator().containsAll(events); var edrCaches = SOKRATES.getEdrEntriesByAssetId(assetId); diff --git a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/edr/AbstractRenewalEdrTest.java b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/edr/AbstractRenewalEdrTest.java index d0c9d1b9c..3fceac948 100644 --- a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/edr/AbstractRenewalEdrTest.java +++ b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/edr/AbstractRenewalEdrTest.java @@ -19,7 +19,7 @@ import okhttp3.mockwebserver.MockResponse; import okhttp3.mockwebserver.MockWebServer; import org.assertj.core.api.Condition; -import org.eclipse.edc.connector.transfer.spi.event.TransferProcessCompleted; +import org.eclipse.edc.connector.transfer.spi.event.TransferProcessStarted; import org.eclipse.edc.policy.model.Operator; import org.eclipse.tractusx.edc.lifecycle.Participant; import org.junit.jupiter.api.AfterEach; @@ -58,6 +58,8 @@ public abstract class AbstractRenewalEdrTest { protected static final Participant SOKRATES = new Participant(SOKRATES_NAME, SOKRATES_BPN, sokratesConfiguration()); protected static final Participant PLATO = new Participant(PLATO_NAME, PLATO_BPN, platoConfiguration()); private static final Duration ASYNC_TIMEOUT = ofSeconds(45); + private static final Duration ASYNC_POLL_INTERVAL = ofSeconds(1); + MockWebServer server; @BeforeEach @@ -70,8 +72,8 @@ void setup() { void negotiateEdr_shouldRenewTheEdr() throws IOException { var expectedEvents = List.of( - createEvent(TransferProcessCompleted.class), - createEvent(TransferProcessCompleted.class)); + createEvent(TransferProcessStarted.class), + createEvent(TransferProcessStarted.class)); var assetId = UUID.randomUUID().toString(); var url = server.url("/mock/api"); @@ -93,7 +95,7 @@ void negotiateEdr_shouldRenewTheEdr() throws IOException { PLATO.createContractDefinition(assetId, "def-1", "policy-1", "policy-2"); var callbacks = Json.createArrayBuilder() - .add(createCallback(url.toString(), true, Set.of("transfer.process.completed"))) + .add(createCallback(url.toString(), true, Set.of("transfer.process.started"))) .build(); expectedEvents.forEach(event -> server.enqueue(new MockResponse())); @@ -109,6 +111,7 @@ void negotiateEdr_shouldRenewTheEdr() throws IOException { JsonArrayBuilder edrCaches = Json.createArrayBuilder(); await().atMost(ASYNC_TIMEOUT) + .pollInterval(ASYNC_POLL_INTERVAL) .untilAsserted(() -> { var localEdrCaches = SOKRATES.getEdrEntriesByAssetId(assetId); assertThat(localEdrCaches).hasSizeGreaterThan(1); diff --git a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/edr/NegotiateEdrPostgresqlHashicorpVaultTest.java b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/edr/NegotiateEdrPostgresqlHashicorpVaultTest.java new file mode 100644 index 000000000..89390da8b --- /dev/null +++ b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/edr/NegotiateEdrPostgresqlHashicorpVaultTest.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * 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: + * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation + * + */ + +package org.eclipse.tractusx.edc.tests.edr; + +import org.eclipse.edc.junit.annotations.PostgresqlDbIntegrationTest; +import org.eclipse.tractusx.edc.lifecycle.PgHashicorpParticipantRuntime; +import org.eclipse.tractusx.edc.lifecycle.PgParticipantRuntime; +import org.junit.jupiter.api.extension.RegisterExtension; + +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.PLATO_BPN; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.PLATO_NAME; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.SOKRATES_BPN; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.SOKRATES_NAME; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.platoConfiguration; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.sokratesConfiguration; + +@PostgresqlDbIntegrationTest +public class NegotiateEdrPostgresqlHashicorpVaultTest extends AbstractNegotiateEdrTest { + + @RegisterExtension + protected static final PgParticipantRuntime PLATO_RUNTIME = new PgParticipantRuntime( + ":edc-tests:runtime:runtime-postgresql", + PLATO_NAME, + PLATO_BPN, + platoConfiguration() + ); + private static final String VAULT_DIRECTORY = "testDir/"; + + @RegisterExtension + protected static final PgHashicorpParticipantRuntime SOKRATES_RUNTIME = new PgHashicorpParticipantRuntime( + ":edc-tests:runtime:runtime-postgresql-hashicorp", + SOKRATES_NAME, + SOKRATES_BPN, + VAULT_DIRECTORY, + sokratesConfiguration() + ); + +} diff --git a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/proxy/AbstractDataPlaneProxyTest.java b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/proxy/AbstractDataPlaneProxyTest.java index 37f3df3fe..aa7646d7a 100644 --- a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/proxy/AbstractDataPlaneProxyTest.java +++ b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/proxy/AbstractDataPlaneProxyTest.java @@ -21,7 +21,7 @@ import okhttp3.mockwebserver.MockResponse; import okhttp3.mockwebserver.MockWebServer; import okhttp3.mockwebserver.RecordedRequest; -import org.eclipse.edc.connector.transfer.spi.event.TransferProcessCompleted; +import org.eclipse.edc.connector.transfer.spi.event.TransferProcessStarted; import org.eclipse.edc.policy.model.Operator; import org.eclipse.edc.spi.event.EventEnvelope; import org.eclipse.tractusx.edc.lifecycle.Participant; @@ -32,11 +32,14 @@ import org.junit.jupiter.api.Test; import java.io.IOException; +import java.time.Duration; import java.util.Set; import java.util.UUID; import java.util.concurrent.TimeUnit; +import static java.time.Duration.ofSeconds; import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; import static org.eclipse.edc.spi.CoreConstants.EDC_NAMESPACE; import static org.eclipse.tractusx.edc.helpers.EdrNegotiationHelperFunctions.createCallback; import static org.eclipse.tractusx.edc.helpers.PolicyHelperFunctions.businessPartnerGroupPolicy; @@ -58,6 +61,9 @@ public abstract class AbstractDataPlaneProxyTest { private static final String CUSTOM_QUERY_PARAMS = "foo=bar"; + private static final Duration ASYNC_TIMEOUT = ofSeconds(45); + private static final Duration ASYNC_POLL_INTERVAL = ofSeconds(1); + private static final String CUSTOM_FULL_PATH = CUSTOM_BASE_PATH + CUSTOM_SUB_PATH + "?" + CUSTOM_QUERY_PARAMS; private final ObjectMapper mapper = new ObjectMapper(); private MockWebServer server; @@ -86,7 +92,7 @@ void httpPullDataTransfer_withEdrAndProxy() { PLATO.createContractDefinition(assetId, "def-1", "policy-1", "policy-2"); var callbacks = Json.createArrayBuilder() - .add(createCallback(eventsUrl.toString(), true, Set.of("transfer.process.completed"))) + .add(createCallback(eventsUrl.toString(), true, Set.of("transfer.process.started"))) .build(); // response to callback @@ -96,6 +102,13 @@ void httpPullDataTransfer_withEdrAndProxy() { var transferEvent = waitForTransferCompletion(); + await().pollInterval(ASYNC_POLL_INTERVAL) + .atMost(ASYNC_TIMEOUT) + .untilAsserted(() -> { + var edrCaches = SOKRATES.getEdrEntriesByAssetId(assetId); + assertThat(edrCaches).hasSize(1); + }); + var body = "{\"response\": \"ok\"}"; server.enqueue(new MockResponse().setBody(body)); @@ -159,7 +172,7 @@ void httpPullDataTransfer_shouldFailForAsset_withTwoEdrAndProxy() throws IOExcep PLATO.createContractDefinition(assetId, "def-1", "policy-1", "policy-2"); var callbacks = Json.createArrayBuilder() - .add(createCallback(eventsUrl.toString(), true, Set.of("transfer.process.completed"))) + .add(createCallback(eventsUrl.toString(), true, Set.of("transfer.process.started"))) .build(); // response to callback @@ -172,6 +185,14 @@ void httpPullDataTransfer_shouldFailForAsset_withTwoEdrAndProxy() throws IOExcep var transferEvent1 = waitForTransferCompletion(); var transferEvent2 = waitForTransferCompletion(); + await().pollInterval(ASYNC_POLL_INTERVAL) + .atMost(ASYNC_TIMEOUT) + .untilAsserted(() -> { + var edrCaches = SOKRATES.getEdrEntriesByAssetId(assetId); + assertThat(edrCaches).hasSize(2); + }); + + var body = "{\"response\": \"ok\"}"; server.enqueue(new MockResponse().setBody(body)); @@ -210,7 +231,7 @@ void httpPullDataTransfer_withEdrAndProviderDataPlaneProxy() throws IOException PLATO.createContractDefinition(assetId, "def-1", "policy-1", "policy-2"); var callbacks = Json.createArrayBuilder() - .add(createCallback(eventsUrl.toString(), true, Set.of("transfer.process.completed"))) + .add(createCallback(eventsUrl.toString(), true, Set.of("transfer.process.started"))) .build(); // response to callback @@ -220,6 +241,13 @@ void httpPullDataTransfer_withEdrAndProviderDataPlaneProxy() throws IOException var transferEvent = waitForTransferCompletion(); + await().pollInterval(ASYNC_POLL_INTERVAL) + .atMost(ASYNC_TIMEOUT) + .untilAsserted(() -> { + var edrCaches = SOKRATES.getEdrEntriesByAssetId(assetId); + assertThat(edrCaches).hasSize(1); + }); + var body = "{\"response\": \"ok\"}"; server.enqueue(new MockResponse().setBody(body)); @@ -272,13 +300,20 @@ public MockResponse dispatch(@NotNull RecordedRequest recordedRequest) throws In PLATO.createContractDefinition(assetId, "def-1", "policy-1", "policy-2"); var callbacks = Json.createArrayBuilder() - .add(createCallback(eventsUrl.toString(), true, Set.of("transfer.process.completed"))) + .add(createCallback(eventsUrl.toString(), true, Set.of("transfer.process.started"))) .build(); SOKRATES.negotiateEdr(PLATO, assetId, callbacks); waitForTransferCompletion(); + await().pollInterval(ASYNC_POLL_INTERVAL) + .atMost(ASYNC_TIMEOUT) + .untilAsserted(() -> { + var edrCaches = SOKRATES.getEdrEntriesByAssetId(assetId); + assertThat(edrCaches).hasSize(1); + }); + var data = SOKRATES.pullProviderDataPlaneDataByAssetIdAndCustomProperties(PLATO, assetId, CUSTOM_SUB_PATH, CUSTOM_QUERY_PARAMS); assertThat(data).isEqualTo(body); @@ -295,7 +330,7 @@ void teardown() throws IOException { server.shutdown(); } - private EventEnvelope waitForTransferCompletion() { + private EventEnvelope waitForTransferCompletion() { try { var request = server.takeRequest(60, TimeUnit.SECONDS); if (request != null) { diff --git a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/transfer/AbstractHttpConsumerPullWithProxyTest.java b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/transfer/AbstractHttpConsumerPullWithProxyTest.java index 4f5fcda03..56cf54b06 100644 --- a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/transfer/AbstractHttpConsumerPullWithProxyTest.java +++ b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/transfer/AbstractHttpConsumerPullWithProxyTest.java @@ -110,7 +110,7 @@ void transferData_privateBackend() throws IOException, InterruptedException { .atMost(ASYNC_TIMEOUT) .untilAsserted(() -> { var tpState = SOKRATES.getTransferProcessState(transferProcessId.get()); - assertThat(tpState).isNotNull().isEqualTo(TransferProcessStates.COMPLETED.toString()); + assertThat(tpState).isNotNull().isEqualTo(TransferProcessStates.STARTED.toString()); }); // wait until EDC is available on the consumer side diff --git a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/transfer/AbstractHttpProviderPushTest.java b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/transfer/AbstractHttpProviderPushTest.java new file mode 100644 index 000000000..0186841c2 --- /dev/null +++ b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/transfer/AbstractHttpProviderPushTest.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * 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: + * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation + * + */ + +package org.eclipse.tractusx.edc.tests.transfer; + +import jakarta.json.Json; +import jakarta.json.JsonObject; +import okhttp3.mockwebserver.Dispatcher; +import okhttp3.mockwebserver.MockResponse; +import okhttp3.mockwebserver.MockWebServer; +import okhttp3.mockwebserver.RecordedRequest; +import org.eclipse.tractusx.edc.lifecycle.Participant; +import org.jetbrains.annotations.NotNull; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.time.Duration; +import java.util.UUID; + +import static jakarta.json.Json.createObjectBuilder; +import static java.time.Duration.ofSeconds; +import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; +import static org.eclipse.edc.connector.transfer.spi.types.TransferProcessStates.COMPLETED; +import static org.eclipse.edc.jsonld.spi.JsonLdKeywords.TYPE; +import static org.eclipse.edc.spi.CoreConstants.EDC_NAMESPACE; +import static org.eclipse.tractusx.edc.helpers.PolicyHelperFunctions.businessPartnerNumberPolicy; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.PLATO_BPN; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.PLATO_NAME; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.SOKRATES_BPN; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.SOKRATES_NAME; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.platoConfiguration; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.sokratesConfiguration; + +public abstract class AbstractHttpProviderPushTest { + + protected static final Participant SOKRATES = new Participant(SOKRATES_NAME, SOKRATES_BPN, sokratesConfiguration()); + protected static final Participant PLATO = new Participant(PLATO_NAME, PLATO_BPN, platoConfiguration()); + + private static final Duration ASYNC_TIMEOUT = ofSeconds(45); + private static final Duration ASYNC_POLL_INTERVAL = ofSeconds(1); + private MockWebServer server; + + @BeforeEach + void setup() { + server = new MockWebServer(); + } + + @Test + void httpPushDataTransfer() throws IOException { + var assetId = UUID.randomUUID().toString(); + + var providerUrl = server.url("/mock/api/provider"); + var consumerUrl = server.url("/mock/api/consumer"); + + server.setDispatcher(new Dispatcher() { + @NotNull + @Override + public MockResponse dispatch(@NotNull RecordedRequest recordedRequest) throws InterruptedException { + return switch (recordedRequest.getPath().split("\\?")[0]) { + case "/mock/api/provider" -> new MockResponse().setResponseCode(200); + case "/mock/api/consumer" -> new MockResponse().setResponseCode(200); + default -> new MockResponse().setResponseCode(404); + }; + } + }); + + server.start(); + + PLATO.createAsset(assetId, Json.createObjectBuilder().build(), httpDataAddress(providerUrl.toString())); + PLATO.createPolicy(createTestPolicy("policy-1", SOKRATES.getBpn())); + PLATO.createContractDefinition(assetId, "def-1", "policy-1", "policy-1"); + + var destination = httpDataAddress(consumerUrl.toString()); + + var transferProcessId = SOKRATES.requestAsset(PLATO, assetId, destination); + await().atMost(ASYNC_TIMEOUT).untilAsserted(() -> { + var state = SOKRATES.getTransferProcessState(transferProcessId); + assertThat(state).isEqualTo(COMPLETED.name()); + }); + } + + @AfterEach + void teardown() throws IOException { + server.shutdown(); + } + + protected JsonObject createTestPolicy(String policyId, String bpn) { + return businessPartnerNumberPolicy(policyId, bpn); + } + + private JsonObject httpDataAddress(String baseUrl) { + return createObjectBuilder() + .add(TYPE, EDC_NAMESPACE + "DataAddress") + .add(EDC_NAMESPACE + "type", "HttpData") + .add(EDC_NAMESPACE + "properties", createObjectBuilder() + .add(EDC_NAMESPACE + "baseUrl", baseUrl) + .build()) + .build(); + } + +} diff --git a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/transfer/HttpProviderPushInMemoryTest.java b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/transfer/HttpProviderPushInMemoryTest.java new file mode 100644 index 000000000..2b32b3e9c --- /dev/null +++ b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/transfer/HttpProviderPushInMemoryTest.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * 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: + * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation + * + */ + +package org.eclipse.tractusx.edc.tests.transfer; + +import org.eclipse.edc.junit.annotations.EndToEndTest; +import org.eclipse.tractusx.edc.lifecycle.ParticipantRuntime; +import org.junit.jupiter.api.extension.RegisterExtension; + +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.PLATO_BPN; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.PLATO_NAME; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.SOKRATES_BPN; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.SOKRATES_NAME; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.platoConfiguration; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.sokratesConfiguration; + +@EndToEndTest +public class HttpProviderPushInMemoryTest extends AbstractHttpProviderPushTest { + + @RegisterExtension + protected static final ParticipantRuntime SOKRATES_RUNTIME = new ParticipantRuntime( + ":edc-tests:runtime:runtime-memory", + SOKRATES_NAME, + SOKRATES_BPN, + sokratesConfiguration() + ); + + @RegisterExtension + protected static final ParticipantRuntime PLATO_RUNTIME = new ParticipantRuntime( + ":edc-tests:runtime:runtime-memory", + PLATO_NAME, + PLATO_BPN, + platoConfiguration() + ); +} diff --git a/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/transfer/HttpProviderPushInPostgresqlTest.java b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/transfer/HttpProviderPushInPostgresqlTest.java new file mode 100644 index 000000000..4946c9934 --- /dev/null +++ b/edc-tests/e2e-tests/src/test/java/org/eclipse/tractusx/edc/tests/transfer/HttpProviderPushInPostgresqlTest.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * 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: + * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation + * + */ + +package org.eclipse.tractusx.edc.tests.transfer; + +import org.eclipse.edc.junit.annotations.PostgresqlDbIntegrationTest; +import org.eclipse.tractusx.edc.lifecycle.PgParticipantRuntime; +import org.junit.jupiter.api.extension.RegisterExtension; + +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.PLATO_BPN; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.PLATO_NAME; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.SOKRATES_BPN; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.SOKRATES_NAME; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.platoConfiguration; +import static org.eclipse.tractusx.edc.lifecycle.TestRuntimeConfiguration.sokratesConfiguration; + +@PostgresqlDbIntegrationTest +public class HttpProviderPushInPostgresqlTest extends AbstractHttpProviderPushTest { + + @RegisterExtension + protected static final PgParticipantRuntime SOKRATES_RUNTIME = new PgParticipantRuntime( + ":edc-tests:runtime:runtime-postgresql", + SOKRATES_NAME, + SOKRATES_BPN, + sokratesConfiguration() + ); + @RegisterExtension + protected static final PgParticipantRuntime PLATO_RUNTIME = new PgParticipantRuntime( + ":edc-tests:runtime:runtime-postgresql", + PLATO_NAME, + PLATO_BPN, + platoConfiguration() + ); +} diff --git a/edc-tests/edc-dataplane/cloud-transfer-tests/build.gradle.kts b/edc-tests/edc-dataplane/cloud-transfer-tests/build.gradle.kts new file mode 100644 index 000000000..aa7bbb5e7 --- /dev/null +++ b/edc-tests/edc-dataplane/cloud-transfer-tests/build.gradle.kts @@ -0,0 +1,45 @@ +/* + * + * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +plugins { + `java-library` +} + +dependencies { + + testImplementation(project(":edc-tests:e2e-tests")) + testImplementation(libs.edc.junit) + testImplementation(libs.restAssured) + + // test runtime config + testImplementation(libs.edc.config.filesystem) + testImplementation(libs.edc.dpf.http) + testImplementation(libs.edc.auth.tokenbased) + testImplementation(libs.testcontainers.junit) + testImplementation(testFixtures(libs.edc.azure.test)) + testImplementation(libs.edc.aws.s3.core) + testImplementation(testFixtures(libs.edc.aws.s3.test)) + testImplementation(libs.aws.s3) + testImplementation(libs.aws.s3transfer) +} + + + diff --git a/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/AzureBlobHelper.java b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/AzureBlobHelper.java new file mode 100644 index 000000000..eaa9c9341 --- /dev/null +++ b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/AzureBlobHelper.java @@ -0,0 +1,95 @@ +/* + * + * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +package org.eclipse.tractusx.edc.dataplane.transfer.test; + +import com.azure.storage.blob.BlobContainerClient; +import com.azure.storage.blob.BlobServiceClient; +import com.azure.storage.blob.models.BlobItem; +import com.azure.storage.blob.sas.BlobContainerSasPermission; +import com.azure.storage.blob.sas.BlobServiceSasSignatureValues; + +import java.io.IOException; +import java.io.InputStream; +import java.time.OffsetDateTime; +import java.util.List; + +import static org.eclipse.edc.azure.testfixtures.TestFunctions.getBlobServiceClient; + +/** + * Helper class that internally uses Azure SDK classes to create containers, upload blobs, generate SAS tokens, etc. + */ +public class AzureBlobHelper { + private final String accountName; + private final String key; + private final String host; + private final int port; + private BlobServiceClient blobServiceClient; + + public AzureBlobHelper(String accountName, String key, String host, int port) { + this.accountName = accountName; + this.key = key; + this.host = host; + this.port = port; + } + + public BlobContainerClient createContainer(String containerName) { + return blobClient().createBlobContainer(containerName); + } + + private BlobServiceClient blobClient() { + if (blobServiceClient == null) { + var endpoint = "http://%s:%s/%s".formatted(host, port, accountName); + blobServiceClient = getBlobServiceClient(accountName, key, endpoint); + } + return blobServiceClient; + } + + public void uploadBlob(BlobContainerClient client, InputStream inputStream, String targetBlobName) { + client.getBlobClient(targetBlobName).upload(inputStream, true); + } + + public void uploadBlob(BlobContainerClient client, String resourceName) { + try (var is = Thread.currentThread().getContextClassLoader().getResourceAsStream(resourceName)) { + client.getBlobClient(resourceName).upload(is, true); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public List listBlobs(String container) { + if (blobClient().listBlobContainers().stream().noneMatch(bci -> bci.getName().equalsIgnoreCase(container))) { + return List.of(); + } + return blobClient() + .getBlobContainerClient(container) + .listBlobs() + .stream().map(BlobItem::getName) + .toList(); + } + + public String generateAccountSas(String containerName) { + var expiry = OffsetDateTime.MAX.minusDays(1); + var permissions = BlobContainerSasPermission.parse("w"); + var vals = new BlobServiceSasSignatureValues(expiry, permissions); + return blobClient().getBlobContainerClient(containerName).generateSas(vals); + } +} diff --git a/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/AzureToAzureTest.java b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/AzureToAzureTest.java new file mode 100644 index 000000000..68f8190de --- /dev/null +++ b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/AzureToAzureTest.java @@ -0,0 +1,229 @@ +/* + * + * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +package org.eclipse.tractusx.edc.dataplane.transfer.test; + +import io.restassured.http.ContentType; +import org.eclipse.edc.azure.testfixtures.annotations.AzureStorageIntegrationTest; +import org.eclipse.edc.spi.types.domain.transfer.DataFlowRequest; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.testcontainers.containers.FixedHostPortGenericContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.io.FileInputStream; +import java.io.IOException; +import java.time.Duration; + +import static io.restassured.RestAssured.given; +import static org.assertj.core.api.Assertions.assertThat; +import static org.eclipse.edc.junit.testfixtures.TestUtils.getFreePort; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.AZBLOB_CONSUMER_ACCOUNT_KEY; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.AZBLOB_CONSUMER_ACCOUNT_NAME; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.AZBLOB_CONSUMER_CONTAINER_NAME; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.AZBLOB_CONSUMER_KEY_ALIAS; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.AZBLOB_PROVIDER_ACCOUNT_KEY; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.AZBLOB_PROVIDER_ACCOUNT_NAME; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.AZBLOB_PROVIDER_CONTAINER_NAME; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.AZBLOB_PROVIDER_KEY_ALIAS; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.AZURITE_CONTAINER_PORT; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.AZURITE_DOCKER_IMAGE; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.COMPLETION_MARKER; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.TESTFILE_NAME; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.blobDestinationAddress; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.blobSourceAddress; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestFunctions.createSparseFile; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isA; +import static org.mockito.Mockito.verify; +import static org.testcontainers.shaded.org.awaitility.Awaitility.await; + +/** + * This test is intended to verify transfers within the same cloud provider, i.e. AzureBlob-to-AzureBlob. + * It spins up a fully-fledged dataplane and issues the DataFlowRequest via the data plane's Control API + */ +@SuppressWarnings("resource") +@Testcontainers +@AzureStorageIntegrationTest +public class AzureToAzureTest { + private static final int PROVIDER_CONTROL_PORT = getFreePort(); + + private static final int AZURITE_HOST_PORT = getFreePort(); + // launches the data plane + @RegisterExtension + protected static final ParticipantRuntime DATAPLANE_RUNTIME = new ParticipantRuntime( + ":edc-tests:runtime:dataplane-cloud", + "AzureBlob-Dataplane", + RuntimeConfig.Azure.createDataplane("/control", PROVIDER_CONTROL_PORT, AZURITE_HOST_PORT) + ); + /** + * Currently we have to use one container to host both consumer and provider accounts, because we cannot handle + * two different endpoint templates for provider and consumer. Endpoint templates are configured globally. + * Also, the host-port must be fixed/deterministic, as the {@code PROVIDER_RUNTIME} needs to know it in advance + */ + @Container + private final FixedHostPortGenericContainer azuriteContainer = new FixedHostPortGenericContainer<>(AZURITE_DOCKER_IMAGE) + .withFixedExposedPort(AZURITE_HOST_PORT, AZURITE_CONTAINER_PORT) + .withEnv("AZURITE_ACCOUNTS", AZBLOB_PROVIDER_ACCOUNT_NAME + ":" + AZBLOB_PROVIDER_ACCOUNT_KEY + ";" + AZBLOB_CONSUMER_ACCOUNT_NAME + ":" + AZBLOB_CONSUMER_ACCOUNT_KEY); + private AzureBlobHelper providerBlobHelper; + private AzureBlobHelper consumerBlobHelper; + + @BeforeEach + void setup() { + providerBlobHelper = new AzureBlobHelper(AZBLOB_PROVIDER_ACCOUNT_NAME, AZBLOB_PROVIDER_ACCOUNT_KEY, azuriteContainer.getHost(), azuriteContainer.getMappedPort(AZURITE_CONTAINER_PORT)); + consumerBlobHelper = new AzureBlobHelper(AZBLOB_CONSUMER_ACCOUNT_NAME, AZBLOB_CONSUMER_ACCOUNT_KEY, azuriteContainer.getHost(), azuriteContainer.getMappedPort(AZURITE_CONTAINER_PORT)); + } + + @Test + void transferFile_success() { + // upload file to provider's blob store + var bcc = providerBlobHelper.createContainer(AZBLOB_PROVIDER_CONTAINER_NAME); + providerBlobHelper.uploadBlob(bcc, TESTFILE_NAME); + + // create container in consumer's blob store + consumerBlobHelper.createContainer(AZBLOB_CONSUMER_CONTAINER_NAME); + + DATAPLANE_RUNTIME.getVault().storeSecret(AZBLOB_PROVIDER_KEY_ALIAS, AZBLOB_PROVIDER_ACCOUNT_KEY); + DATAPLANE_RUNTIME.getVault().storeSecret(AZBLOB_CONSUMER_KEY_ALIAS, """ + {"sas": "%s","edctype":"dataspaceconnector:azuretoken"} + """.formatted(consumerBlobHelper.generateAccountSas(AZBLOB_CONSUMER_CONTAINER_NAME))); + + var request = createFlowRequest(TESTFILE_NAME); + + var url = "http://localhost:%s/control/transfer".formatted(PROVIDER_CONTROL_PORT); + + given().when() + .baseUri(url) + .contentType(ContentType.JSON) + .body(request) + .post() + .then() + .statusCode(200); + + await().pollInterval(Duration.ofSeconds(2)) + .atMost(Duration.ofSeconds(60)) + .untilAsserted(() -> assertThat(consumerBlobHelper.listBlobs(AZBLOB_CONSUMER_CONTAINER_NAME)) + .isNotEmpty() + .contains(TESTFILE_NAME) + .contains(COMPLETION_MARKER)); + + } + + /** + * This method is used to transfer a large sparse file from the provider's blob store to the consumer's blob store. It follows the following steps: + *
    + *
  1. Uploads the file to the provider's blob store.
  2. + *
  3. Creates a random binary file of size greater than 1GB.
  4. + *
  5. Uploads the large file to the provider's blob store.
  6. + *
  7. Creates a container in the consumer's blob store.
  8. + *
  9. Creates a flow request with the given blob name.
  10. + *
  11. Waits for the transfer to complete by polling the consumer's blob store for the existence of the transferred blob.
  12. + *
+ */ + @ParameterizedTest(name = "File size bytes: {0}") + // 1mb, 512mb, 1gb + @ValueSource(longs = {1024 * 1024 * 512, 1024L * 1024L * 1024L, /*1024L * 1024L * 1024L * 1024 takes extremely long!*/}) + void transferFile_largeFile(long sizeBytes) throws IOException { + // upload file to provider's blob store + var bcc = providerBlobHelper.createContainer(AZBLOB_PROVIDER_CONTAINER_NAME); + + // create random binary file of >1gb in size + var blobName = "largeblob.bin"; + var f = createSparseFile(sizeBytes); + providerBlobHelper.uploadBlob(bcc, new FileInputStream(f), blobName); + + // create container in consumer's blob store + consumerBlobHelper.createContainer(AZBLOB_CONSUMER_CONTAINER_NAME); + + DATAPLANE_RUNTIME.getVault().storeSecret(AZBLOB_PROVIDER_KEY_ALIAS, AZBLOB_PROVIDER_ACCOUNT_KEY); + DATAPLANE_RUNTIME.getVault().storeSecret(AZBLOB_CONSUMER_KEY_ALIAS, """ + {"sas": "%s","edctype":"dataspaceconnector:azuretoken"} + """.formatted(consumerBlobHelper.generateAccountSas(AZBLOB_CONSUMER_CONTAINER_NAME))); + + var request = createFlowRequest(blobName); + + var url = "http://localhost:%s/control/transfer".formatted(PROVIDER_CONTROL_PORT); + + given().when() + .baseUri(url) + .contentType(ContentType.JSON) + .body(request) + .post() + .then() + .statusCode(200); + + await().pollInterval(Duration.ofSeconds(10)) + .atMost(Duration.ofSeconds(120)) + .untilAsserted(() -> assertThat(consumerBlobHelper.listBlobs(AZBLOB_CONSUMER_CONTAINER_NAME)) + .isNotEmpty() + .contains(blobName) + .contains(COMPLETION_MARKER)); + + } + + @Test + void transferFile_targetContainerNotExist_shouldFail() { + // upload file to provider's blob store + var bcc = providerBlobHelper.createContainer(AZBLOB_PROVIDER_CONTAINER_NAME); + providerBlobHelper.uploadBlob(bcc, TESTFILE_NAME); + + // do NOT create container in consumer's blob store + + DATAPLANE_RUNTIME.getVault().storeSecret(AZBLOB_PROVIDER_KEY_ALIAS, AZBLOB_PROVIDER_ACCOUNT_KEY); + DATAPLANE_RUNTIME.getVault().storeSecret(AZBLOB_CONSUMER_KEY_ALIAS, """ + {"sas": "%s","edctype":"dataspaceconnector:azuretoken"} + """.formatted(consumerBlobHelper.generateAccountSas(AZBLOB_CONSUMER_CONTAINER_NAME))); + + var request = createFlowRequest(TESTFILE_NAME); + + var url = "http://localhost:%s/control/transfer".formatted(PROVIDER_CONTROL_PORT); + + given().when() + .baseUri(url) + .contentType(ContentType.JSON) + .body(request) + .post() + .then() + .statusCode(200); + + // wait until the data plane logs an exception that it cannot transfer the blob + await().pollInterval(Duration.ofSeconds(2)) + .atMost(Duration.ofSeconds(10)) + .untilAsserted(() -> verify(DATAPLANE_RUNTIME.getContext().getMonitor()) + .severe(eq("Error creating blob for %s on account %s".formatted(TESTFILE_NAME, AZBLOB_CONSUMER_ACCOUNT_NAME)), + isA(IOException.class))); + } + + private DataFlowRequest createFlowRequest(String blobName) { + return DataFlowRequest.Builder.newInstance() + .id("test-request") + .sourceDataAddress(blobSourceAddress(blobName)) + .destinationDataAddress(blobDestinationAddress(blobName)) + .processId("test-process-id") + .trackable(false) + .build(); + } + +} diff --git a/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/MultiCloudTest.java b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/MultiCloudTest.java new file mode 100644 index 000000000..b3b366cb0 --- /dev/null +++ b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/MultiCloudTest.java @@ -0,0 +1,223 @@ +/* + * + * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +package org.eclipse.tractusx.edc.dataplane.transfer.test; + +import io.restassured.http.ContentType; +import org.eclipse.edc.aws.s3.AwsClientProviderConfiguration; +import org.eclipse.edc.aws.s3.AwsClientProviderImpl; +import org.eclipse.edc.aws.s3.S3BucketSchema; +import org.eclipse.edc.aws.s3.S3ClientRequest; +import org.eclipse.edc.aws.s3.testfixtures.annotations.AwsS3IntegrationTest; +import org.eclipse.edc.azure.testfixtures.annotations.AzureStorageIntegrationTest; +import org.eclipse.edc.junit.testfixtures.TestUtils; +import org.eclipse.edc.spi.types.domain.DataAddress; +import org.eclipse.edc.spi.types.domain.transfer.DataFlowRequest; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; +import org.testcontainers.containers.FixedHostPortGenericContainer; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.s3.S3Client; +import software.amazon.awssdk.services.s3.model.CreateBucketRequest; +import software.amazon.awssdk.services.s3.model.PutObjectRequest; + +import java.net.URI; +import java.time.Duration; +import java.util.UUID; + +import static io.restassured.RestAssured.given; +import static org.assertj.core.api.Assertions.assertThat; +import static org.eclipse.edc.junit.testfixtures.TestUtils.getFreePort; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.AZBLOB_CONSUMER_ACCOUNT_KEY; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.AZBLOB_CONSUMER_ACCOUNT_NAME; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.AZBLOB_CONSUMER_CONTAINER_NAME; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.AZBLOB_CONSUMER_KEY_ALIAS; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.COMPLETION_MARKER; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.MINIO_CONTAINER_PORT; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.MINIO_DOCKER_IMAGE; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.S3_ACCESS_KEY_ID; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.S3_CONSUMER_BUCKET_NAME; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.TESTFILE_NAME; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.blobDestinationAddress; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestFunctions.listObjects; +import static org.testcontainers.shaded.org.awaitility.Awaitility.await; + +@Testcontainers +@AzureStorageIntegrationTest +@AwsS3IntegrationTest +public class MultiCloudTest { + // S3 test constants + public static final String REGION = Region.US_WEST_2.id(); + public static final String BUCKET_NAME = S3_CONSUMER_BUCKET_NAME; + public static final String BLOB_KEY_ALIAS = AZBLOB_CONSUMER_KEY_ALIAS; + private static final String ACCESS_KEY_ID = S3_ACCESS_KEY_ID; // user name + private static final String SECRET_ACCESS_KEY = UUID.randomUUID().toString(); // password + + // Azure Blob test constants + private static final String BLOB_ACCOUNT_NAME = AZBLOB_CONSUMER_ACCOUNT_NAME; + private static final String BLOB_ACCOUNT_KEY = AZBLOB_CONSUMER_ACCOUNT_KEY; + private static final int AZURITE_HOST_PORT = getFreePort(); + private static final String BLOB_CONTAINER_NAME = AZBLOB_CONSUMER_CONTAINER_NAME; + + // General constants, containers etc. + private static final int PROVIDER_CONTROL_PORT = getFreePort(); // port of the control api + @RegisterExtension + protected static final ParticipantRuntime DATAPLANE_RUNTIME = new ParticipantRuntime( + ":edc-tests:runtime:dataplane-cloud", + "MultiCloud-Dataplane", + RuntimeConfig.Azure.createDataplane("/control", PROVIDER_CONTROL_PORT, AZURITE_HOST_PORT) + ); + + @Container + private final GenericContainer s3Container = new GenericContainer<>(MINIO_DOCKER_IMAGE) + .withEnv("MINIO_ROOT_USER", ACCESS_KEY_ID) + .withEnv("MINIO_ROOT_PASSWORD", SECRET_ACCESS_KEY) + .withExposedPorts(MINIO_CONTAINER_PORT); + + @Container + private final FixedHostPortGenericContainer azuriteContainer = new FixedHostPortGenericContainer<>(TestConstants.AZURITE_DOCKER_IMAGE) + .withFixedExposedPort(AZURITE_HOST_PORT, 10000) + .withEnv("AZURITE_ACCOUNTS", BLOB_ACCOUNT_NAME + ":" + BLOB_ACCOUNT_KEY); + + private AzureBlobHelper blobStoreHelper; + private S3Client s3Client; + private String s3EndpointOverride; + + @BeforeEach + void setup() { + blobStoreHelper = new AzureBlobHelper(BLOB_ACCOUNT_NAME, BLOB_ACCOUNT_KEY, azuriteContainer.getHost(), azuriteContainer.getMappedPort(10000)); + s3EndpointOverride = "http://localhost:%s/".formatted(s3Container.getMappedPort(MINIO_CONTAINER_PORT)); + var providerConfig = AwsClientProviderConfiguration.Builder.newInstance() + .endpointOverride(URI.create(s3EndpointOverride)) + .credentialsProvider(() -> AwsBasicCredentials.create(ACCESS_KEY_ID, SECRET_ACCESS_KEY)) + .build(); + s3Client = new AwsClientProviderImpl(providerConfig).s3Client(S3ClientRequest.from(REGION, s3EndpointOverride)); + } + + @Test + void transferFile_azureToS3() { + // create container in Azure Blob, upload file + var bcc = blobStoreHelper.createContainer(BLOB_CONTAINER_NAME); + blobStoreHelper.uploadBlob(bcc, TESTFILE_NAME); + DATAPLANE_RUNTIME.getVault().storeSecret(BLOB_KEY_ALIAS, BLOB_ACCOUNT_KEY); + + // create target bucket in S3 + var r = s3Client.createBucket(CreateBucketRequest.builder().bucket(BUCKET_NAME).build()); + assertThat(r.sdkHttpResponse().isSuccessful()).isTrue(); + + // create data flow request + var dfr = DataFlowRequest.Builder.newInstance() + .id("test-request") + .sourceDataAddress(DataAddress.Builder.newInstance() + .type("AzureStorage") + .property("container", BLOB_CONTAINER_NAME) + .property("account", BLOB_ACCOUNT_NAME) + .property("keyName", BLOB_KEY_ALIAS) + .property("blobname", TESTFILE_NAME) + .build() + ) + .destinationDataAddress(DataAddress.Builder.newInstance() + .type(S3BucketSchema.TYPE) + .keyName(TESTFILE_NAME) + .property(S3BucketSchema.REGION, REGION) + .property(S3BucketSchema.BUCKET_NAME, BUCKET_NAME) + .property(S3BucketSchema.ACCESS_KEY_ID, ACCESS_KEY_ID) + .property(S3BucketSchema.SECRET_ACCESS_KEY, SECRET_ACCESS_KEY) + .property(S3BucketSchema.ENDPOINT_OVERRIDE, s3EndpointOverride) + .build() + ) + .processId("test-process-id") + .trackable(false) + .build(); + + var url = "http://localhost:%s/control/transfer".formatted(PROVIDER_CONTROL_PORT); + given().when() + .baseUri(url) + .contentType(ContentType.JSON) + .body(dfr) + .post() + .then() + .statusCode(200); + + await().pollInterval(Duration.ofSeconds(2)) + .atMost(Duration.ofSeconds(60)) + .untilAsserted(() -> assertThat(listObjects(s3Client, BUCKET_NAME)) + .isNotEmpty() + .contains(TESTFILE_NAME) + .anyMatch(c -> c.endsWith(COMPLETION_MARKER))); + } + + @Test + void transferFile_s3ToAzure() { + // create source bucket in S3, upload file + var b1 = s3Client.createBucket(CreateBucketRequest.builder().bucket(BUCKET_NAME).build()); + assertThat(b1.sdkHttpResponse().isSuccessful()).isTrue(); + var putResponse = s3Client.putObject(PutObjectRequest.builder().bucket(BUCKET_NAME).key(TESTFILE_NAME).build(), TestUtils.getFileFromResourceName(TESTFILE_NAME).toPath()); + assertThat(putResponse.sdkHttpResponse().isSuccessful()).isTrue(); + + + // create container in consumer's blob store + blobStoreHelper.createContainer(BLOB_CONTAINER_NAME); + DATAPLANE_RUNTIME.getVault().storeSecret(BLOB_KEY_ALIAS, """ + {"sas": "%s","edctype":"dataspaceconnector:azuretoken"} + """.formatted(blobStoreHelper.generateAccountSas(BLOB_CONTAINER_NAME))); + + + // create data flow request + var dfr = DataFlowRequest.Builder.newInstance() + .id("test-request") + .sourceDataAddress(DataAddress.Builder.newInstance() + .type(S3BucketSchema.TYPE) + .keyName(TESTFILE_NAME) + .property(S3BucketSchema.REGION, REGION) + .property(S3BucketSchema.BUCKET_NAME, BUCKET_NAME) + .property(S3BucketSchema.ACCESS_KEY_ID, ACCESS_KEY_ID) + .property(S3BucketSchema.SECRET_ACCESS_KEY, SECRET_ACCESS_KEY) + .property(S3BucketSchema.ENDPOINT_OVERRIDE, s3EndpointOverride) + .build() + ) + .destinationDataAddress(blobDestinationAddress(TESTFILE_NAME)) + .processId("test-process-id") + .trackable(false) + .build(); + + var url = "http://localhost:%s/control/transfer".formatted(PROVIDER_CONTROL_PORT); + given().when() + .baseUri(url) + .contentType(ContentType.JSON) + .body(dfr) + .post() + .then() + .statusCode(200); + + await().pollInterval(Duration.ofSeconds(2)) + .atMost(Duration.ofSeconds(60)) + .untilAsserted(() -> assertThat(blobStoreHelper.listBlobs(BLOB_CONTAINER_NAME)) + .isNotEmpty() + .contains(TESTFILE_NAME) + .contains(COMPLETION_MARKER)); + } +} diff --git a/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/ParticipantRuntime.java b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/ParticipantRuntime.java new file mode 100644 index 000000000..99f25e42d --- /dev/null +++ b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/ParticipantRuntime.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * 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: + * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation + * + */ + +package org.eclipse.tractusx.edc.dataplane.transfer.test; + +import org.eclipse.edc.junit.extensions.EdcRuntimeExtension; +import org.eclipse.edc.spi.monitor.ConsoleMonitor; +import org.eclipse.edc.spi.monitor.Monitor; +import org.eclipse.edc.spi.security.Vault; +import org.eclipse.edc.spi.system.ServiceExtension; +import org.eclipse.edc.spi.system.ServiceExtensionContext; +import org.eclipse.edc.spi.system.injection.InjectionContainer; +import org.junit.jupiter.api.extension.AfterAllCallback; +import org.junit.jupiter.api.extension.BeforeAllCallback; +import org.junit.jupiter.api.extension.ExtensionContext; + +import java.util.List; +import java.util.Map; + +import static org.mockito.Mockito.spy; + +public class ParticipantRuntime extends EdcRuntimeExtension implements BeforeAllCallback, AfterAllCallback { + + + public ParticipantRuntime(String moduleName, String runtimeName, Map properties) { + super(moduleName, runtimeName, properties); + var monitor = spy(new ConsoleMonitor(runtimeName, ConsoleMonitor.Level.DEBUG)); + registerServiceMock(Monitor.class, monitor); + } + + @Override + public void beforeTestExecution(ExtensionContext extensionContext) { + //do nothing - we only want to start the runtime once + } + + @Override + public void afterTestExecution(ExtensionContext context) { + } + + @Override + public void beforeAll(ExtensionContext context) throws Exception { + //only run this once + super.beforeTestExecution(context); + } + + @Override + public void afterAll(ExtensionContext context) throws Exception { + super.afterTestExecution(context); + } + + public Vault getVault() { + return getContext().getService(Vault.class); + } + + @Override + protected void bootExtensions(ServiceExtensionContext context, List> serviceExtensions) { + super.bootExtensions(context, serviceExtensions); + } + +} diff --git a/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/RuntimeConfig.java b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/RuntimeConfig.java new file mode 100644 index 000000000..bf4587265 --- /dev/null +++ b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/RuntimeConfig.java @@ -0,0 +1,83 @@ +/* + * + * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +package org.eclipse.tractusx.edc.dataplane.transfer.test; + +import java.util.HashMap; +import java.util.Map; + +import static org.eclipse.edc.junit.testfixtures.TestUtils.getFreePort; + +/** + * Configuration baseline for Data-Plane e2e tests + */ +public class RuntimeConfig { + /** + * Configures the data plane token endpoint, and all relevant HTTP contexts + */ + public static Map baseConfig(String controlPath, int controlPort) { + return new HashMap<>() { + { + put("edc.dataplane.token.validation.endpoint", "http://token-validation.com"); + put("web.http.path", "/api"); + put("web.http.port", String.valueOf(getFreePort())); + put("web.http.public.path", "/public"); + put("web.http.public.port", String.valueOf(getFreePort())); + put("web.http.consumer.api.path", "/api/consumer"); + put("web.http.consumer.api.port", String.valueOf(getFreePort())); + put("tx.dpf.consumer.proxy.port", String.valueOf(getFreePort())); + put("web.http.control.path", controlPath); + put("web.http.control.port", String.valueOf(controlPort)); + } + }; + } + + /** + * Azure specific configuration, e.g. access credentials, blobstore endpoint templates, etc. + */ + public static class Azure { + /** + * Creates a configuration for a Provider runtime, running Azure ingress and egress + * + * @param controlPath the controlPath of the control API + * @param controlPort the port of the control API + * @param mappedAzuritePort the host port for the Blob endpoint template. + */ + public static Map createDataplane(String controlPath, int controlPort, Integer mappedAzuritePort) { + var base = baseConfig(controlPath, controlPort); + + base.putAll(new HashMap<>() { + { + put("edc.blobstore.endpoint.template", "http://127.0.0.1:" + mappedAzuritePort + "/%s"); + } + }); + return base; + } + } + + public static class S3 { + + public static Map createDataplane(String controlPath, int controlPort) { + return baseConfig(controlPath, controlPort); + } + } +} + diff --git a/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/S3ToS3Test.java b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/S3ToS3Test.java new file mode 100644 index 000000000..10a690a00 --- /dev/null +++ b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/S3ToS3Test.java @@ -0,0 +1,280 @@ +/* + * + * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +package org.eclipse.tractusx.edc.dataplane.transfer.test; + +import io.restassured.http.ContentType; +import org.eclipse.edc.aws.s3.AwsClientProviderConfiguration; +import org.eclipse.edc.aws.s3.AwsClientProviderImpl; +import org.eclipse.edc.aws.s3.S3BucketSchema; +import org.eclipse.edc.aws.s3.S3ClientRequest; +import org.eclipse.edc.aws.s3.testfixtures.annotations.AwsS3IntegrationTest; +import org.eclipse.edc.junit.testfixtures.TestUtils; +import org.eclipse.edc.spi.types.domain.DataAddress; +import org.eclipse.edc.spi.types.domain.transfer.DataFlowRequest; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; +import software.amazon.awssdk.core.async.AsyncRequestBody; +import software.amazon.awssdk.services.s3.S3Client; +import software.amazon.awssdk.services.s3.model.CreateBucketRequest; +import software.amazon.awssdk.services.s3.model.NoSuchBucketException; +import software.amazon.awssdk.services.s3.model.PutObjectRequest; +import software.amazon.awssdk.transfer.s3.S3TransferManager; +import software.amazon.awssdk.transfer.s3.model.CompletedUpload; +import software.amazon.awssdk.transfer.s3.model.UploadRequest; + +import java.io.File; +import java.net.URI; +import java.time.Duration; +import java.util.UUID; +import java.util.concurrent.CompletableFuture; + +import static io.restassured.RestAssured.given; +import static org.assertj.core.api.Assertions.assertThat; +import static org.eclipse.edc.junit.testfixtures.TestUtils.getFreePort; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.COMPLETION_MARKER; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.MINIO_CONTAINER_PORT; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.MINIO_DOCKER_IMAGE; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.S3_ACCESS_KEY_ID; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.S3_CONSUMER_BUCKET_NAME; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.S3_PROVIDER_BUCKET_NAME; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.S3_REGION; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestConstants.TESTFILE_NAME; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestFunctions.createSparseFile; +import static org.eclipse.tractusx.edc.dataplane.transfer.test.TestFunctions.listObjects; +import static org.mockito.ArgumentMatchers.isA; +import static org.mockito.ArgumentMatchers.startsWith; +import static org.mockito.Mockito.verify; +import static org.testcontainers.shaded.org.awaitility.Awaitility.await; + +/** + * This test is intended to verify transfers within the same cloud provider, i.e. S3-to-S3. + * It spins up a fully-fledged dataplane and issues the DataFlowRequest via the data plane's Control API + */ +@Testcontainers +@AwsS3IntegrationTest +public class S3ToS3Test { + private static final String SECRET_ACCESS_KEY = UUID.randomUUID().toString(); // password + private static final int PROVIDER_CONTROL_PORT = getFreePort(); // port of the control api + @RegisterExtension + protected static final ParticipantRuntime DATAPLANE_RUNTIME = new ParticipantRuntime( + ":edc-tests:runtime:dataplane-cloud", + "AwsS3-Dataplane", + RuntimeConfig.S3.createDataplane("/control", PROVIDER_CONTROL_PORT) + ); + @Container + private final GenericContainer providerContainer = new GenericContainer<>(MINIO_DOCKER_IMAGE) + .withEnv("MINIO_ROOT_USER", S3_ACCESS_KEY_ID) + .withEnv("MINIO_ROOT_PASSWORD", SECRET_ACCESS_KEY) + .withExposedPorts(MINIO_CONTAINER_PORT); + + @Container + private final GenericContainer consumerContainer = new GenericContainer<>(MINIO_DOCKER_IMAGE) + .withEnv("MINIO_ROOT_USER", S3_ACCESS_KEY_ID) + .withEnv("MINIO_ROOT_PASSWORD", SECRET_ACCESS_KEY) + .withExposedPorts(MINIO_CONTAINER_PORT); + private S3Client providerClient; + private S3Client consumerClient; + private String providerEndpointOverride; + private String consumerEndpointOverride; + + @BeforeEach + void setup() { + providerEndpointOverride = "http://localhost:%s/".formatted(providerContainer.getMappedPort(MINIO_CONTAINER_PORT)); + var providerConfig = AwsClientProviderConfiguration.Builder.newInstance() + .endpointOverride(URI.create(providerEndpointOverride)) + .credentialsProvider(() -> AwsBasicCredentials.create(S3_ACCESS_KEY_ID, SECRET_ACCESS_KEY)) + .build(); + providerClient = new AwsClientProviderImpl(providerConfig).s3Client(S3ClientRequest.from(S3_REGION, providerEndpointOverride)); + + consumerEndpointOverride = "http://localhost:%s".formatted(consumerContainer.getMappedPort(MINIO_CONTAINER_PORT)); + var consumerConfig = AwsClientProviderConfiguration.Builder.newInstance() + .endpointOverride(URI.create(consumerEndpointOverride)) + .credentialsProvider(() -> AwsBasicCredentials.create(S3_ACCESS_KEY_ID, SECRET_ACCESS_KEY)) + .build(); + consumerClient = new AwsClientProviderImpl(consumerConfig).s3Client(S3ClientRequest.from(S3_REGION, consumerEndpointOverride)); + } + + @Test + void transferFile_success() { + + // create bucket in provider + var b1 = providerClient.createBucket(CreateBucketRequest.builder().bucket(S3_PROVIDER_BUCKET_NAME).build()); + assertThat(b1.sdkHttpResponse().isSuccessful()).isTrue(); + // upload test file in provider + var putResponse = providerClient.putObject(PutObjectRequest.builder().bucket(S3_PROVIDER_BUCKET_NAME).key(TESTFILE_NAME).build(), TestUtils.getFileFromResourceName(TESTFILE_NAME).toPath()); + assertThat(putResponse.sdkHttpResponse().isSuccessful()).isTrue(); + + // create bucket in consumer + var b2 = consumerClient.createBucket(CreateBucketRequest.builder().bucket(S3_CONSUMER_BUCKET_NAME).build()); + assertThat(b2.sdkHttpResponse().isSuccessful()).isTrue(); + + // initiate data flow request + var request = createFlowRequest(); + var url = "http://localhost:%s/control/transfer".formatted(PROVIDER_CONTROL_PORT); + + given().when() + .baseUri(url) + .contentType(ContentType.JSON) + .body(request) + .post() + .then() + .statusCode(200); + + + await().pollInterval(Duration.ofSeconds(2)) + .atMost(Duration.ofSeconds(60)) + .untilAsserted(() -> assertThat(listObjects(consumerClient, S3_CONSUMER_BUCKET_NAME)) + .isNotEmpty() + .contains(TESTFILE_NAME) + .anyMatch(c -> c.endsWith(COMPLETION_MARKER))); + } + + @Test + void transferFile_targetContainerNotExist_shouldFail() { + // create bucket in provider + var b1 = providerClient.createBucket(CreateBucketRequest.builder().bucket(S3_PROVIDER_BUCKET_NAME).build()); + assertThat(b1.sdkHttpResponse().isSuccessful()).isTrue(); + // upload test file in provider + var putResponse = providerClient.putObject(PutObjectRequest.builder().bucket(S3_PROVIDER_BUCKET_NAME).key(TESTFILE_NAME).build(), TestUtils.getFileFromResourceName(TESTFILE_NAME).toPath()); + assertThat(putResponse.sdkHttpResponse().isSuccessful()).isTrue(); + + // do not create bucket in consumer -> will fail! + + // initiate data flow request + var request = createFlowRequest(); + var url = "http://localhost:%s/control/transfer".formatted(PROVIDER_CONTROL_PORT); + + given().when() + .baseUri(url) + .contentType(ContentType.JSON) + .body(request) + .post() + .then() + .statusCode(200); + + + // wait until the data plane logs an exception that it cannot transfer the file + await().pollInterval(Duration.ofSeconds(2)) + .atMost(Duration.ofSeconds(10)) + .untilAsserted(() -> verify(DATAPLANE_RUNTIME.getContext().getMonitor()).severe(startsWith("Error writing the %s object on the %s bucket: The specified bucket does not exist".formatted(TESTFILE_NAME, S3_CONSUMER_BUCKET_NAME)), + isA(NoSuchBucketException.class))); + } + + @ParameterizedTest(name = "File size bytes: {0}") + // 1mb, 512mb, 1gb + @ValueSource(longs = {1024 * 1024 * 512, 1024L * 1024L * 1024L, 1024L * 1024L * 1024L * 1024}) + void transferfile_largeFile(long sizeBytes) { + + // create large sparse file + var file = createSparseFile(sizeBytes); + + // create bucket in provider + var b1 = providerClient.createBucket(CreateBucketRequest.builder().bucket(S3_PROVIDER_BUCKET_NAME).build()); + assertThat(b1.sdkHttpResponse().isSuccessful()).isTrue(); + // upload test file in provider + uploadLargeFile(file, S3_PROVIDER_BUCKET_NAME, TESTFILE_NAME).thenAccept(completedUpload -> { + // create bucket in consumer + var b2 = consumerClient.createBucket(CreateBucketRequest.builder().bucket(S3_CONSUMER_BUCKET_NAME).build()); + assertThat(b2.sdkHttpResponse().isSuccessful()).isTrue(); + + // initiate data flow request + var request = createFlowRequest(); + var url = "http://localhost:%s/control/transfer".formatted(PROVIDER_CONTROL_PORT); + + given().when() + .baseUri(url) + .contentType(ContentType.JSON) + .body(request) + .post() + .then() + .statusCode(200); + + + await().pollInterval(Duration.ofSeconds(2)) + .atMost(Duration.ofSeconds(60)) + .untilAsserted(() -> assertThat(listObjects(consumerClient, S3_CONSUMER_BUCKET_NAME)) + .isNotEmpty() + .contains(TESTFILE_NAME) + .anyMatch(c -> c.endsWith(COMPLETION_MARKER))); + }); + + + } + + private CompletableFuture uploadLargeFile(File file, String bucketName, String fileName) { + + var providerConfig = AwsClientProviderConfiguration.Builder.newInstance() + .endpointOverride(URI.create(providerEndpointOverride)) + .credentialsProvider(() -> AwsBasicCredentials.create(S3_ACCESS_KEY_ID, SECRET_ACCESS_KEY)) + .build(); + var asyncClient = new AwsClientProviderImpl(providerConfig).s3AsyncClient(S3_REGION); + var tm = S3TransferManager.builder() + .s3Client(asyncClient) + .build(); + + // TransferManager processes all transfers asynchronously, + // so this call returns immediately. + var upload = tm.upload(UploadRequest.builder() + .putObjectRequest(PutObjectRequest.builder().key(fileName).bucket(bucketName).build()) + .requestBody(AsyncRequestBody.fromFile(file)) + .build()); + + return upload.completionFuture(); + } + + + private DataFlowRequest createFlowRequest() { + return DataFlowRequest.Builder.newInstance() + .id("test-request") + .sourceDataAddress(DataAddress.Builder.newInstance() + .type(S3BucketSchema.TYPE) + .keyName(TESTFILE_NAME) + .property(S3BucketSchema.REGION, S3_REGION) + .property(S3BucketSchema.BUCKET_NAME, S3_PROVIDER_BUCKET_NAME) + .property(S3BucketSchema.ACCESS_KEY_ID, S3_ACCESS_KEY_ID) + .property(S3BucketSchema.SECRET_ACCESS_KEY, SECRET_ACCESS_KEY) + .property(S3BucketSchema.ENDPOINT_OVERRIDE, providerEndpointOverride) + .build() + ) + .destinationDataAddress(DataAddress.Builder.newInstance() + .type(S3BucketSchema.TYPE) + .keyName(TESTFILE_NAME) + .property(S3BucketSchema.REGION, S3_REGION) + .property(S3BucketSchema.BUCKET_NAME, S3_CONSUMER_BUCKET_NAME) + .property(S3BucketSchema.ACCESS_KEY_ID, S3_ACCESS_KEY_ID) + .property(S3BucketSchema.SECRET_ACCESS_KEY, SECRET_ACCESS_KEY) + .property(S3BucketSchema.ENDPOINT_OVERRIDE, consumerEndpointOverride) + .build() + ) + .processId("test-process-id") + .trackable(false) + .build(); + } + +} diff --git a/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/TestConstants.java b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/TestConstants.java new file mode 100644 index 000000000..e500270be --- /dev/null +++ b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/TestConstants.java @@ -0,0 +1,73 @@ +/* + * + * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +package org.eclipse.tractusx.edc.dataplane.transfer.test; + +import org.eclipse.edc.spi.types.domain.DataAddress; +import software.amazon.awssdk.regions.Region; + +public class TestConstants { + // AZURE BLOB CONSTANTS + public static final String AZURITE_DOCKER_IMAGE = "mcr.microsoft.com/azure-storage/azurite"; + public static final int AZURITE_CONTAINER_PORT = 10000; + public static final String AZBLOB_PROVIDER_ACCOUNT_NAME = "provider"; + public static final String AZBLOB_PROVIDER_ACCOUNT_KEY = "providerkey"; + public static final String AZBLOB_CONSUMER_ACCOUNT_NAME = "consumer"; + public static final String AZBLOB_CONSUMER_ACCOUNT_KEY = "consumerkey"; + // alias under which the provider key is stored in the vault. must end with -key1 + public static final String AZBLOB_PROVIDER_KEY_ALIAS = "providerkey-key1"; + // alias under which the consumer key is stored in the vault. must end with -key1 + public static final String AZBLOB_CONSUMER_KEY_ALIAS = "consumerkey-key1`"; + public static final String AZBLOB_PROVIDER_CONTAINER_NAME = "src-container"; + public static final String AZBLOB_CONSUMER_CONTAINER_NAME = "dest-container"; + // AMAZON S3 CONSTANTS + public static final String MINIO_DOCKER_IMAGE = "bitnami/minio"; + public static final int MINIO_CONTAINER_PORT = 9000; + public static final String S3_REGION = Region.US_WEST_2.id(); + public static final String S3_PROVIDER_BUCKET_NAME = "provider-bucket"; + public static final String S3_CONSUMER_BUCKET_NAME = "consumer-bucket"; + public static final String S3_ACCESS_KEY_ID = "test-access-key"; // user name + // GENERIC CONSTANTS + public static final String TESTFILE_NAME = "testfile.json"; + public static final String COMPLETION_MARKER = ".complete"; + + public static DataAddress blobSourceAddress(String blobName) { + return DataAddress.Builder.newInstance() + .type("AzureStorage") + .property("container", AZBLOB_PROVIDER_CONTAINER_NAME) + .property("account", AZBLOB_PROVIDER_ACCOUNT_NAME) + .property("keyName", AZBLOB_PROVIDER_KEY_ALIAS) + .property("blobname", blobName) + .build(); + } + + public static DataAddress blobDestinationAddress(String blobName) { + return DataAddress.Builder.newInstance() + .type("AzureStorage") + .property("container", AZBLOB_CONSUMER_CONTAINER_NAME) + .property("account", AZBLOB_CONSUMER_ACCOUNT_NAME) + .property("blobname", blobName) + .property("keyName", AZBLOB_CONSUMER_KEY_ALIAS) + .build(); + } + + +} diff --git a/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/TestFunctions.java b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/TestFunctions.java new file mode 100644 index 000000000..e3ecbc58b --- /dev/null +++ b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/java/org/eclipse/tractusx/edc/dataplane/transfer/test/TestFunctions.java @@ -0,0 +1,53 @@ +/* + * + * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * + */ + +package org.eclipse.tractusx.edc.dataplane.transfer.test; + +import software.amazon.awssdk.services.s3.S3Client; +import software.amazon.awssdk.services.s3.model.ListObjectsRequest; +import software.amazon.awssdk.services.s3.model.S3Object; + +import java.io.File; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.nio.file.Files; +import java.util.List; + +public class TestFunctions { + public static File createSparseFile(long sizeBytes) { + try { + var name = Files.createTempFile("", ".bin"); + try (var f = new RandomAccessFile(name.toFile(), "rw")) { + f.setLength(sizeBytes); + f.write("foobar".getBytes()); + } + return name.toFile(); + } catch (IOException e) { + throw new RuntimeException(e); + } + + } + + public static List listObjects(S3Client consumerClient, String bucketName) { + var response = consumerClient.listObjects(ListObjectsRequest.builder().bucket(bucketName).build()); + return response.contents().stream().map(S3Object::key).toList(); + } +} diff --git a/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/resources/testfile.json b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/resources/testfile.json new file mode 100644 index 000000000..f2c63e6c6 --- /dev/null +++ b/edc-tests/edc-dataplane/cloud-transfer-tests/src/test/resources/testfile.json @@ -0,0 +1,317 @@ +[ + { + "_id": "64e878422f54f7451fc8ac5a", + "index": 0, + "guid": "58cd89a8-bbc4-49dc-a82c-9e95a17bd09a", + "isActive": true, + "balance": "$2,609.85", + "picture": "http://placehold.it/32x32", + "age": 34, + "eyeColor": "brown", + "name": "Bennett Ward", + "gender": "male", + "company": "ANIVET", + "email": "bennettward@anivet.com", + "phone": "+1 (946) 427-3749", + "address": "800 Nichols Avenue, Wheaton, Arkansas, 5955", + "about": "In ipsum incididunt proident laborum ipsum aliqua veniam minim irure magna. Nisi quis laboris amet ullamco quis reprehenderit dolor fugiat adipisicing aliqua dolor irure. Ut esse ipsum ea incididunt ipsum in Lorem sit ex veniam. Enim do sit sunt consequat eu et cillum Lorem consectetur dolor incididunt. Quis laboris ipsum magna ut officia labore elit. Elit proident eiusmod sunt laboris do aute officia laboris deserunt est ut deserunt.\r\n", + "registered": "2017-08-18T03:46:19 -02:00", + "latitude": 40.471184, + "longitude": -83.133691, + "tags": [ + "veniam", + "consequat", + "sint", + "magna", + "adipisicing", + "eiusmod", + "proident" + ], + "friends": [ + { + "id": 0, + "name": "Marquez Robinson" + }, + { + "id": 1, + "name": "Juliana Yang" + }, + { + "id": 2, + "name": "Mccarthy Wilkins" + } + ], + "greeting": "Hello, Bennett Ward! You have 6 unread messages.", + "favoriteFruit": "banana" + }, + { + "_id": "64e8784201c692a3fe69fa9b", + "index": 1, + "guid": "b58c8f04-7a95-4e49-8a15-e28e31cbfb22", + "isActive": false, + "balance": "$1,141.67", + "picture": "http://placehold.it/32x32", + "age": 36, + "eyeColor": "brown", + "name": "Janette Avery", + "gender": "female", + "company": "ASSURITY", + "email": "janetteavery@assurity.com", + "phone": "+1 (897) 585-2136", + "address": "128 Amersfort Place, Kenmar, Minnesota, 9633", + "about": "Minim eiusmod consequat tempor nisi. Do non tempor tempor cupidatat consequat qui. Dolor consequat non fugiat id ea cillum deserunt labore elit cupidatat exercitation voluptate cillum.\r\n", + "registered": "2017-12-02T06:49:19 -01:00", + "latitude": 34.258782, + "longitude": -21.998249, + "tags": [ + "eiusmod", + "ullamco", + "minim", + "aliqua", + "do", + "cillum", + "Lorem" + ], + "friends": [ + { + "id": 0, + "name": "Cherry Skinner" + }, + { + "id": 1, + "name": "Conner Reyes" + }, + { + "id": 2, + "name": "Parker Gonzalez" + } + ], + "greeting": "Hello, Janette Avery! You have 10 unread messages.", + "favoriteFruit": "strawberry" + }, + { + "_id": "64e87842f52337c981862e8f", + "index": 2, + "guid": "9ff7da8a-d2b0-4096-b8f6-9352806a9e83", + "isActive": false, + "balance": "$1,335.78", + "picture": "http://placehold.it/32x32", + "age": 28, + "eyeColor": "green", + "name": "Dominique Hanson", + "gender": "female", + "company": "VANTAGE", + "email": "dominiquehanson@vantage.com", + "phone": "+1 (989) 447-3926", + "address": "615 Meserole Avenue, Austinburg, California, 1522", + "about": "Incididunt laborum consequat est nulla est ea sint cupidatat duis nostrud elit anim. Dolore enim laboris dolore ullamco cupidatat ipsum enim nulla mollit tempor. Deserunt et aliqua mollit ut do dolore tempor voluptate amet aliquip duis consectetur nulla Lorem. Labore adipisicing enim cupidatat ipsum adipisicing eiusmod consequat eu nostrud culpa. Nostrud velit consectetur non deserunt dolore nostrud duis culpa voluptate deserunt sunt veniam. Proident minim eiusmod nulla officia magna eu exercitation anim. Tempor et irure esse laborum.\r\n", + "registered": "2016-07-27T05:23:38 -02:00", + "latitude": -55.068801, + "longitude": -25.708949, + "tags": [ + "eiusmod", + "in", + "proident", + "et", + "et", + "nisi", + "culpa" + ], + "friends": [ + { + "id": 0, + "name": "Nita Noel" + }, + { + "id": 1, + "name": "Catalina Melendez" + }, + { + "id": 2, + "name": "Williamson Sampson" + } + ], + "greeting": "Hello, Dominique Hanson! You have 1 unread messages.", + "favoriteFruit": "banana" + }, + { + "_id": "64e87842338e5431dbd0b1ea", + "index": 3, + "guid": "a96e773d-5c23-4d9a-adc9-d6a018314b58", + "isActive": false, + "balance": "$1,913.89", + "picture": "http://placehold.it/32x32", + "age": 38, + "eyeColor": "green", + "name": "Wagner Dennis", + "gender": "male", + "company": "AQUAZURE", + "email": "wagnerdennis@aquazure.com", + "phone": "+1 (937) 431-2082", + "address": "445 Montauk Court, Verdi, Northern Mariana Islands, 5384", + "about": "Tempor nulla sint proident mollit cupidatat ea tempor ex. Duis aliqua nulla magna in consequat excepteur consequat ad. Do nisi nulla laboris id est sunt. Elit tempor cupidatat exercitation commodo do cupidatat quis veniam dolor aliqua dolor nulla dolor fugiat.\r\n", + "registered": "2021-04-26T09:52:32 -02:00", + "latitude": 18.451519, + "longitude": -156.122664, + "tags": [ + "eu", + "nostrud", + "pariatur", + "culpa", + "ex", + "proident", + "adipisicing" + ], + "friends": [ + { + "id": 0, + "name": "Beatriz Short" + }, + { + "id": 1, + "name": "Benjamin Cohen" + }, + { + "id": 2, + "name": "Owen Byrd" + } + ], + "greeting": "Hello, Wagner Dennis! You have 2 unread messages.", + "favoriteFruit": "banana" + }, + { + "_id": "64e878424a3a21770faa9e26", + "index": 4, + "guid": "4930409b-db05-4937-af3e-2036a482df12", + "isActive": false, + "balance": "$2,529.52", + "picture": "http://placehold.it/32x32", + "age": 28, + "eyeColor": "brown", + "name": "Atkins Moses", + "gender": "male", + "company": "SKYPLEX", + "email": "atkinsmoses@skyplex.com", + "phone": "+1 (995) 553-2028", + "address": "448 Cumberland Street, Dana, Federated States Of Micronesia, 7392", + "about": "Et ut ea velit labore dolore ad reprehenderit exercitation dolor adipisicing et id ea. Sunt cupidatat consectetur nostrud minim eiusmod nisi. Sint laborum duis tempor elit dolor consectetur cillum.\r\n", + "registered": "2021-04-12T11:23:36 -02:00", + "latitude": -2.638186, + "longitude": -154.242354, + "tags": [ + "dolor", + "officia", + "est", + "nulla", + "aute", + "laboris", + "nulla" + ], + "friends": [ + { + "id": 0, + "name": "Riddle Christian" + }, + { + "id": 1, + "name": "Polly Schultz" + }, + { + "id": 2, + "name": "Livingston Manning" + } + ], + "greeting": "Hello, Atkins Moses! You have 9 unread messages.", + "favoriteFruit": "banana" + }, + { + "_id": "64e87842884162d3c897e7ad", + "index": 5, + "guid": "b3cb202a-6e46-4095-9592-6366f6da3bc9", + "isActive": false, + "balance": "$3,158.74", + "picture": "http://placehold.it/32x32", + "age": 32, + "eyeColor": "blue", + "name": "Tasha Russell", + "gender": "female", + "company": "BALUBA", + "email": "tasharussell@baluba.com", + "phone": "+1 (826) 541-3686", + "address": "335 Amber Street, Advance, Pennsylvania, 8192", + "about": "Non pariatur irure ea ex anim deserunt ea exercitation est. Esse quis aliqua irure est nisi enim eiusmod nisi exercitation ipsum sint enim tempor laboris. Et tempor tempor tempor dolore sunt et incididunt tempor. Laboris aliqua voluptate duis id enim elit et occaecat anim ut aliquip incididunt consequat ex. Commodo cupidatat pariatur est irure commodo incididunt excepteur ex. Culpa Lorem enim eu dolor anim.\r\n", + "registered": "2017-02-14T10:10:26 -01:00", + "latitude": 29.687589, + "longitude": -76.699133, + "tags": [ + "esse", + "et", + "enim", + "irure", + "ipsum", + "irure", + "commodo" + ], + "friends": [ + { + "id": 0, + "name": "Phoebe Lester" + }, + { + "id": 1, + "name": "Tisha Owens" + }, + { + "id": 2, + "name": "Tiffany Pearson" + } + ], + "greeting": "Hello, Tasha Russell! You have 2 unread messages.", + "favoriteFruit": "banana" + }, + { + "_id": "64e878428448c3ea48fb1094", + "index": 6, + "guid": "6542e7cd-bccc-4af2-9975-e52ae75d2362", + "isActive": false, + "balance": "$3,203.36", + "picture": "http://placehold.it/32x32", + "age": 23, + "eyeColor": "blue", + "name": "Iris Hawkins", + "gender": "female", + "company": "ANOCHA", + "email": "irishawkins@anocha.com", + "phone": "+1 (879) 591-2788", + "address": "745 Douglass Street, Thatcher, Washington, 7675", + "about": "Dolore ipsum et est aute laborum fugiat esse nisi enim id. Veniam culpa tempor Lorem aliqua culpa quis. Veniam voluptate velit ea excepteur ullamco laboris cillum enim adipisicing magna dolor id. Dolor ex sunt proident occaecat.\r\n", + "registered": "2022-04-25T05:38:28 -02:00", + "latitude": -9.450379, + "longitude": -67.567812, + "tags": [ + "eu", + "velit", + "cupidatat", + "incididunt", + "pariatur", + "velit", + "Lorem" + ], + "friends": [ + { + "id": 0, + "name": "Araceli Rosales" + }, + { + "id": 1, + "name": "Lynette Huff" + }, + { + "id": 2, + "name": "Medina Nolan" + } + ], + "greeting": "Hello, Iris Hawkins! You have 6 unread messages.", + "favoriteFruit": "banana" + } +] \ No newline at end of file diff --git a/edc-tests/edc-dataplane-proxy-e2e/build.gradle.kts b/edc-tests/edc-dataplane/edc-dataplane-proxy-e2e/build.gradle.kts similarity index 92% rename from edc-tests/edc-dataplane-proxy-e2e/build.gradle.kts rename to edc-tests/edc-dataplane/edc-dataplane-proxy-e2e/build.gradle.kts index eeb8473f3..c9ead1762 100644 --- a/edc-tests/edc-dataplane-proxy-e2e/build.gradle.kts +++ b/edc-tests/edc-dataplane/edc-dataplane-proxy-e2e/build.gradle.kts @@ -25,6 +25,8 @@ dependencies { testImplementation(libs.edc.config.filesystem) testImplementation(libs.edc.dpf.http) testImplementation(libs.edc.auth.tokenbased) + testRuntimeOnly(libs.edc.dpf.core) + testRuntimeOnly(libs.edc.controlplane.apiclient) testImplementation(project(":spi:edr-spi")) testImplementation(project(":core:edr-cache-core")) testImplementation(project(":edc-extensions:dataplane-proxy:edc-dataplane-proxy-consumer-api")) diff --git a/edc-tests/edc-dataplane-proxy-e2e/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/e2e/DpfProxyEndToEndTest.java b/edc-tests/edc-dataplane/edc-dataplane-proxy-e2e/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/e2e/DpfProxyEndToEndTest.java similarity index 99% rename from edc-tests/edc-dataplane-proxy-e2e/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/e2e/DpfProxyEndToEndTest.java rename to edc-tests/edc-dataplane/edc-dataplane-proxy-e2e/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/e2e/DpfProxyEndToEndTest.java index 588f6d698..c1950ee8f 100644 --- a/edc-tests/edc-dataplane-proxy-e2e/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/e2e/DpfProxyEndToEndTest.java +++ b/edc-tests/edc-dataplane/edc-dataplane-proxy-e2e/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/e2e/DpfProxyEndToEndTest.java @@ -59,7 +59,7 @@ public class DpfProxyEndToEndTest { public static final String KEYSTORE_PASS = "test123"; - private static final String LAUNCHER_MODULE = ":edc-tests:edc-dataplane-proxy-e2e"; + private static final String LAUNCHER_MODULE = ":edc-tests:edc-dataplane:edc-dataplane-proxy-e2e"; private static final int CONSUMER_HTTP_PORT = getFreePort(); private static final int CONSUMER_PROXY_PORT = getFreePort(); private static final int PRODUCER_HTTP_PORT = getFreePort(); diff --git a/edc-tests/edc-dataplane-proxy-e2e/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/e2e/EdrCacheSetup.java b/edc-tests/edc-dataplane/edc-dataplane-proxy-e2e/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/e2e/EdrCacheSetup.java similarity index 100% rename from edc-tests/edc-dataplane-proxy-e2e/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/e2e/EdrCacheSetup.java rename to edc-tests/edc-dataplane/edc-dataplane-proxy-e2e/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/e2e/EdrCacheSetup.java diff --git a/edc-tests/edc-dataplane-proxy-e2e/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/e2e/KeyStoreSetup.java b/edc-tests/edc-dataplane/edc-dataplane-proxy-e2e/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/e2e/KeyStoreSetup.java similarity index 100% rename from edc-tests/edc-dataplane-proxy-e2e/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/e2e/KeyStoreSetup.java rename to edc-tests/edc-dataplane/edc-dataplane-proxy-e2e/src/test/java/org/eclipse/tractusx/edc/dataplane/proxy/e2e/KeyStoreSetup.java diff --git a/edc-tests/miw-tests/src/test/java/org/eclipse/tractusx/edc/tests/miw/WalletTest.java b/edc-tests/miw-tests/src/test/java/org/eclipse/tractusx/edc/tests/miw/WalletTest.java index 668c7aa63..b5d3b686a 100644 --- a/edc-tests/miw-tests/src/test/java/org/eclipse/tractusx/edc/tests/miw/WalletTest.java +++ b/edc-tests/miw-tests/src/test/java/org/eclipse/tractusx/edc/tests/miw/WalletTest.java @@ -186,7 +186,7 @@ void verifyVp_spoofedVpAndForgedJws() throws JsonProcessingException, ParseExcep var jo = Json.createObjectBuilder(payloadJson).build(); // replace JWS inside the VC's proof object - var jws = jo.getJsonObject("vp").getJsonObject("verifiableCredential").getJsonObject("proof").getString("jws"); + var jws = jo.getJsonObject("vp").getJsonArray("verifiableCredential").getJsonObject(0).getJsonObject("proof").getString("jws"); var invalidJws = jws.replace("a", "X"); var tamperedJson = jo.toString().replace(jws, invalidJws); var tamperedJsonObject = OBJECT_MAPPER.readValue(tamperedJson, mapRef); diff --git a/edc-tests/miw-tests/src/test/resources/docker-environment/docker-compose.yaml b/edc-tests/miw-tests/src/test/resources/docker-environment/docker-compose.yaml index 7718336a0..fbfd03d96 100644 --- a/edc-tests/miw-tests/src/test/resources/docker-environment/docker-compose.yaml +++ b/edc-tests/miw-tests/src/test/resources/docker-environment/docker-compose.yaml @@ -23,7 +23,7 @@ version: '3' services: miw: - image: ghcr.io/catenax-ng/tx-managed-identity-wallets_miw_service:latest-java-did-web + image: tractusx/managed-identity-wallet:main platform: linux/amd64 container_name: miw env_file: diff --git a/edc-tests/miw-tests/src/test/resources/docker-environment/postgres/seed.sh b/edc-tests/miw-tests/src/test/resources/docker-environment/postgres/seed.sh index c13a84575..5d4f20287 100755 --- a/edc-tests/miw-tests/src/test/resources/docker-environment/postgres/seed.sh +++ b/edc-tests/miw-tests/src/test/resources/docker-environment/postgres/seed.sh @@ -19,6 +19,6 @@ psql -v ON_ERROR_STOP=1 --username "keycloak" --dbname "keycloak" <<-EOSQL -- the following lines add one additional participant to MiW, used for the impersonation attack test \c miw INSERT INTO public.wallet (id, name, did, bpn, algorithm, did_document, created_at, modified_at, modified_from) VALUES (2, 'Another Participant', 'did:web:localhost%3A8000:BPNL000000000042', 'BPNL000000000042', 'ED25519', '{"verificationMethod":[{"publicKeyJwk":{"kty":"OKP","crv":"Ed25519","x":"Xok4qFXhNjMC3l-VHoQBJ_RHhtDmxevaoN13PE3j8MY"},"controller":"did:web:localhost%3A8000:BPNL000000000000","id":"did:web:localhost%3A8000:BPNL000000000000#","type":"JsonWebKey2020"}],"@context":"https://www.w3.org/ns/did/v1","id":"did:web:localhost%3A8000:BPNL000000000000"}', '2023-06-29 13:49:07.138000', '2023-06-29 13:49:07.140000', null); - INSERT INTO public.issuers_credential (id, holder_did, issuer_did, credential_id, data, type, created_at, modified_at, modified_from) VALUES (3, 'did:web:localhost%3A8000:BPNL000000000042', 'did:web:localhost%3A8000:BPNL000000000042', 'a043c406-d51d-4672-ad89-517c68d025f9', '{"issuanceDate":"2023-06-29T13:49:11Z","credentialSubject":[{"holderIdentifier":"BPNL000000000000","id":"did:web:localhost%3A8000:BPNL000000000000","type":"SummaryCredential","items":["BpnCredential"],"contractTemplates":"https://public.catena-x.org/contracts/"}],"id":"a043c406-d51d-4672-ad89-517c68d025f9","proof":{"assertionMethod":"did:web:localhost%3A8000:BPNL000000000000#","proofPurpose":"proofPurpose","type":"JsonWebSignature2020","created":"2023-06-29T13:49:11Z","jws":"eyJhbGciOiJFZERTQSJ9..waFlAQyE42TddNz0v4q_MkIbSgbjexDQqdt-k6LEQG3BvhE1Adj6SIERtUzmYowuLtdcTBbwVAROf9yzpfNMAg"},"type":["VerifiableCredential","SummaryCredential"],"@context":["https://www.w3.org/2018/credentials/v1","https://catenax-ng.github.io/product-core-schemas/SummaryVC.json"],"issuer":"did:web:localhost%3A8000:BPNL000000000000","expirationDate":"2025-01-01T00:00:00Z"}', 'SummaryCredential', '2023-06-29 13:49:11.870000', '2023-06-29 13:49:11.925000', null); - INSERT INTO public.holders_credential (id, holder_did, issuer_did, credential_id, data, type, created_at, modified_at, modified_from) VALUES (3, 'did:web:localhost%3A8000:BPNL000000000042', 'did:web:localhost%3A8000:BPNL000000000042', 'a043c406-d51d-4672-ad89-517c68d025f9', '{"issuanceDate":"2023-06-29T13:49:11Z","credentialSubject":[{"holderIdentifier":"BPNL000000000000","id":"did:web:localhost%3A8000:BPNL000000000000","type":"SummaryCredential","items":["BpnCredential"],"contractTemplates":"https://public.catena-x.org/contracts/"}],"id":"a043c406-d51d-4672-ad89-517c68d025f9","proof":{"assertionMethod":"did:web:localhost%3A8000:BPNL000000000000#","proofPurpose":"proofPurpose","type":"JsonWebSignature2020","created":"2023-06-29T13:49:11Z","jws":"eyJhbGciOiJFZERTQSJ9..waFlAQyE42TddNz0v4q_MkIbSgbjexDQqdt-k6LEQG3BvhE1Adj6SIERtUzmYowuLtdcTBbwVAROf9yzpfNMAg"},"type":["VerifiableCredential","SummaryCredential"],"@context":["https://www.w3.org/2018/credentials/v1","https://catenax-ng.github.io/product-core-schemas/SummaryVC.json"],"issuer":"did:web:localhost%3A8000:BPNL000000000000","expirationDate":"2025-01-01T00:00:00Z"}', 'SummaryCredential', '2023-06-29 13:49:11.870000', '2023-06-29 13:49:11.925000', null); + INSERT INTO public.issuers_credential (id, holder_did, issuer_did, credential_id, credential_data, credential_type, created_at, modified_at, modified_from) VALUES (3, 'did:web:localhost%3A8000:BPNL000000000042', 'did:web:localhost%3A8000:BPNL000000000042', 'a043c406-d51d-4672-ad89-517c68d025f9', '{"issuanceDate":"2023-06-29T13:49:11Z","credentialSubject":[{"holderIdentifier":"BPNL000000000000","id":"did:web:localhost%3A8000:BPNL000000000000","type":"SummaryCredential","items":["BpnCredential"],"contractTemplates":"https://public.catena-x.org/contracts/"}],"id":"a043c406-d51d-4672-ad89-517c68d025f9","proof":{"assertionMethod":"did:web:localhost%3A8000:BPNL000000000000#","proofPurpose":"proofPurpose","type":"JsonWebSignature2020","created":"2023-06-29T13:49:11Z","jws":"eyJhbGciOiJFZERTQSJ9..waFlAQyE42TddNz0v4q_MkIbSgbjexDQqdt-k6LEQG3BvhE1Adj6SIERtUzmYowuLtdcTBbwVAROf9yzpfNMAg"},"type":["VerifiableCredential","SummaryCredential"],"@context":["https://www.w3.org/2018/credentials/v1","https://catenax-ng.github.io/product-core-schemas/SummaryVC.json"],"issuer":"did:web:localhost%3A8000:BPNL000000000000","expirationDate":"2025-01-01T00:00:00Z"}', 'SummaryCredential', '2023-06-29 13:49:11.870000', '2023-06-29 13:49:11.925000', null); + INSERT INTO public.holders_credential (id, holder_did, issuer_did, credential_id, credential_data, credential_type, created_at, modified_at, modified_from) VALUES (3, 'did:web:localhost%3A8000:BPNL000000000042', 'did:web:localhost%3A8000:BPNL000000000042', 'a043c406-d51d-4672-ad89-517c68d025f9', '{"issuanceDate":"2023-06-29T13:49:11Z","credentialSubject":[{"holderIdentifier":"BPNL000000000000","id":"did:web:localhost%3A8000:BPNL000000000000","type":"SummaryCredential","items":["BpnCredential"],"contractTemplates":"https://public.catena-x.org/contracts/"}],"id":"a043c406-d51d-4672-ad89-517c68d025f9","proof":{"assertionMethod":"did:web:localhost%3A8000:BPNL000000000000#","proofPurpose":"proofPurpose","type":"JsonWebSignature2020","created":"2023-06-29T13:49:11Z","jws":"eyJhbGciOiJFZERTQSJ9..waFlAQyE42TddNz0v4q_MkIbSgbjexDQqdt-k6LEQG3BvhE1Adj6SIERtUzmYowuLtdcTBbwVAROf9yzpfNMAg"},"type":["VerifiableCredential","SummaryCredential"],"@context":["https://www.w3.org/2018/credentials/v1","https://catenax-ng.github.io/product-core-schemas/SummaryVC.json"],"issuer":"did:web:localhost%3A8000:BPNL000000000000","expirationDate":"2025-01-01T00:00:00Z"}', 'SummaryCredential', '2023-06-29 13:49:11.870000', '2023-06-29 13:49:11.925000', null); EOSQL \ No newline at end of file diff --git a/edc-tests/runtime/dataplane-cloud/README.md b/edc-tests/runtime/dataplane-cloud/README.md new file mode 100644 index 000000000..d779a8f8b --- /dev/null +++ b/edc-tests/runtime/dataplane-cloud/README.md @@ -0,0 +1,4 @@ +# Dataplane Runtime for Testing Purposes + +This module provides a dataplane runtime using AWS S3 and Azure Blob Storage packages to test +several variants of cloud transfers. Please only use for testing purposes! diff --git a/edc-tests/runtime/dataplane-cloud/build.gradle.kts b/edc-tests/runtime/dataplane-cloud/build.gradle.kts new file mode 100644 index 000000000..90724a443 --- /dev/null +++ b/edc-tests/runtime/dataplane-cloud/build.gradle.kts @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * 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: + * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation + * + */ + +plugins { + `java-library` + id("application") +} + + +dependencies { + + // use basic (all in-mem) data plane + runtimeOnly(project(":edc-dataplane:edc-dataplane-base")) { + exclude("org.eclipse.edc", "api-observability") + } + +// implementation(project(":edc-tests:runtime:extensions")) +} + +application { + mainClass.set("org.eclipse.edc.boot.system.runtime.BaseRuntime") +} + +// do not publish +edcBuild { + publish.set(false) +} diff --git a/edc-tests/runtime/extensions/src/main/java/org/eclipse/tractusx/edc/lifecycle/TestServiceExtension.java b/edc-tests/runtime/extensions/src/main/java/org/eclipse/tractusx/edc/lifecycle/TestServiceExtension.java deleted file mode 100644 index b498f185b..000000000 --- a/edc-tests/runtime/extensions/src/main/java/org/eclipse/tractusx/edc/lifecycle/TestServiceExtension.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - * - * 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: - * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation - * - */ - -package org.eclipse.tractusx.edc.lifecycle; - -import org.eclipse.edc.connector.transfer.spi.status.StatusCheckerRegistry; -import org.eclipse.edc.connector.transfer.spi.types.TransferProcess; -import org.eclipse.edc.runtime.metamodel.annotation.Extension; -import org.eclipse.edc.runtime.metamodel.annotation.Inject; -import org.eclipse.edc.spi.system.ServiceExtension; -import org.eclipse.edc.spi.system.ServiceExtensionContext; - -@Extension(value = "Extension used to inject dummy services into E2E runtimes") -public class TestServiceExtension implements ServiceExtension { - - @Inject - private StatusCheckerRegistry registry; - - @Override - public void initialize(ServiceExtensionContext context) { - // takes care that ongoing HTTP transfers are actually completed, otherwise they would - // always stay in the "STARTED" state - registry.register("HttpProxy", (tp, r) -> tp.getType() == TransferProcess.Type.CONSUMER); - } -} diff --git a/edc-tests/runtime/extensions/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension b/edc-tests/runtime/extensions/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension index c3abfd832..75f82b423 100644 --- a/edc-tests/runtime/extensions/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension +++ b/edc-tests/runtime/extensions/src/main/resources/META-INF/services/org.eclipse.edc.spi.system.ServiceExtension @@ -14,5 +14,3 @@ org.eclipse.tractusx.edc.lifecycle.ConsumerServicesExtension org.eclipse.tractusx.edc.lifecycle.VaultSeedExtension -org.eclipse.tractusx.edc.lifecycle.TestServiceExtension - diff --git a/edc-tests/runtime/runtime-postgresql-hashicorp/README.md b/edc-tests/runtime/runtime-postgresql-hashicorp/README.md new file mode 100644 index 000000000..7ec7be084 --- /dev/null +++ b/edc-tests/runtime/runtime-postgresql-hashicorp/README.md @@ -0,0 +1,3 @@ +# PostgreSQL + Hashicorp Vault Runtime for Testing Purposes + +This module provides a very small,runtime using PostgreSQL as persistence backend and Hashicorp Vault to execute tests against. Not intended for anything other than testing! diff --git a/edc-tests/runtime/runtime-postgresql-hashicorp/build.gradle.kts b/edc-tests/runtime/runtime-postgresql-hashicorp/build.gradle.kts new file mode 100644 index 000000000..512d8dd92 --- /dev/null +++ b/edc-tests/runtime/runtime-postgresql-hashicorp/build.gradle.kts @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) + * + * 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: + * Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - initial API and implementation + * + */ + +plugins { + `java-library` + id("application") +} + + +dependencies { + + // use basic (all in-mem) control plane + implementation(project(":edc-controlplane:edc-controlplane-postgresql-hashicorp-vault")) { + exclude(module = "data-encryption") + exclude(module = "json-ld-core") + exclude(module = "ssi-identity-core") + exclude(module = "ssi-miw-credential-client") + exclude(module = "ssi-identity-extractor") + exclude(module = "cx-policy") + } + + implementation(project(":edc-tests:runtime:extensions")) + + // use basic (all in-mem) data plane + runtimeOnly(project(":edc-dataplane:edc-dataplane-base")) { + exclude("org.eclipse.edc", "api-observability") + } + + + implementation(libs.edc.core.controlplane) + // for the controller + implementation(libs.jakarta.rsApi) +} + +application { + mainClass.set("org.eclipse.edc.boot.system.runtime.BaseRuntime") +} + +// do not publish +edcBuild { + publish.set(false) +} diff --git a/gradle.properties b/gradle.properties index 51f52611d..61ba34e11 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,6 @@ group=org.eclipse.tractusx.edc -version=0.5.1 +version=0.6.0-rc1 # configure the build: -annotationProcessorVersion=0.2.1 -edcGradlePluginsVersion=0.2.1 -metaModelVersion=0.2.1 txScmConnection=scm:git:git@github.com:eclipse-tractusx/tractusx-edc.git txWebsiteUrl=https://github.com/eclipse-tractusx/tractusx-edc.git txScmUrl=https://github.com/eclipse-tractusx/tractusx-edc.git diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d66c670b3..24981205d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,27 +2,27 @@ format.version = "1.1" [versions] -edc = "0.2.1" +edc = "0.3.1" postgres = "42.6.0" awaitility = "4.2.0" -nimbus = "9.31" -azure-identity = "1.10.0" -slf4j = "2.0.7" +nimbus = "9.35" +azure-identity = "1.10.1" +slf4j = "2.0.9" okhttp = "4.11.0" mockwebserver = "5.0.0-alpha.11" bouncyCastle-jdk18on = "1.76" mockito = "5.2.0" -restAssured = "5.3.1" +restAssured = "5.3.2" apache-sshd = "2.10.0" -testcontainers = "1.18.3" -aws = "2.20.130" +testcontainers = "1.19.1" +aws = "2.20.153" rsApi = "3.1.0" jupiter = "5.10.0" assertj = "3.24.2" titanium = "1.3.2" jackson = "2.15.2" jakarta-json = "2.0.1" -tink = "1.10.0" +tink = "1.11.0" iron-vc = "0.8.1" [libraries] @@ -37,6 +37,7 @@ edc-spi-transaction-datasource = { module = "org.eclipse.edc:transaction-datasou edc-spi-transactionspi = { module = "org.eclipse.edc:transaction-spi", version.ref = "edc" } edc-spi-aggregateservices = { module = "org.eclipse.edc:aggregate-service-spi", version.ref = "edc" } edc-spi-controlplane = { module = "org.eclipse.edc:control-plane-spi", version.ref = "edc" } +edc-controlplane-apiclient = { module = "org.eclipse.edc:control-plane-api-client", version.ref = "edc" } edc-spi-web = { module = "org.eclipse.edc:web-spi", version.ref = "edc" } edc-spi-http = { module = "org.eclipse.edc:http-spi", version.ref = "edc" } edc-spi-jsonld = { module = "org.eclipse.edc:json-ld-spi", version.ref = "edc" } @@ -45,6 +46,7 @@ edc-jwt-core = { module = "org.eclipse.edc:jwt-core", version.ref = "edc" } edc-spi-oauth2 = { module = "org.eclipse.edc:oauth2-spi", version.ref = "edc" } edc-util = { module = "org.eclipse.edc:util", version.ref = "edc" } edc-boot = { module = "org.eclipse.edc:boot", version.ref = "edc" } +edc-build-plugin = { module = "org.eclipse.edc.edc-build:org.eclipse.edc.edc-build.gradle.plugin", version.ref = "edc" } edc-config-filesystem = { module = "org.eclipse.edc:configuration-filesystem", version.ref = "edc" } edc-jsonld = { module = "org.eclipse.edc:json-ld", version.ref = "edc" } edc-vault-filesystem = { module = "org.eclipse.edc:vault-filesystem", version.ref = "edc" } @@ -66,6 +68,7 @@ edc-api-observability = { module = "org.eclipse.edc:api-observability", version. edc-api-contractnegotiation = { module = "org.eclipse.edc:contract-negotiation-api", version.ref = "edc" } edc-api-dataplane = { module = "org.eclipse.edc:dataplane-api", version.ref = "edc" } edc-api-transferprocess = { module = "org.eclipse.edc:transfer-process-api", version.ref = "edc" } +edc-api-controlplane = { module = "org.eclipse.edc:control-plane-api", version.ref = "edc" } edc-dsp = { module = "org.eclipse.edc:dsp", version.ref = "edc" } edc-iam-mock = { module = "org.eclipse.edc:iam-mock", version.ref = "edc" } edc-policy-engine = { module = "org.eclipse.edc:policy-engine", version.ref = "edc" } @@ -80,6 +83,7 @@ edc-ext-azure-test = { module = "org.eclipse.edc:azure-test", version.ref = "edc edc-ext-jsonld = { module = "org.eclipse.edc:json-ld", version.ref = "edc" } edc-ext-jersey-providers = { module = "org.eclipse.edc:jersey-providers", version.ref = "edc" } + # implementations edc-sql-assetindex = { module = "org.eclipse.edc:asset-index-sql", version.ref = "edc" } edc-sql-contract-definition = { module = "org.eclipse.edc:contract-definition-store-sql", version.ref = "edc" } @@ -93,6 +97,12 @@ edc-sql-pool = { module = "org.eclipse.edc:sql-pool-apache-commons", version.ref # azure stuff edc-azure-vault = { module = "org.eclipse.edc:vault-azure", version.ref = "edc" } edc-azure-identity = { module = "com.azure:azure-identity", version.ref = "azure-identity" } +edc-azure-test = { module = "org.eclipse.edc:azure-test", version.ref = "edc" } + +# EDC aws s3 stuff +edc-aws-s3-core = { module = "org.eclipse.edc:aws-s3-core", version.ref = "edc" } +edc-aws-s3-test = { module = "org.eclipse.edc:aws-s3-test", version.ref = "edc" } +edc-dpf-awss3 = { module = "org.eclipse.edc:data-plane-aws-s3", version.ref = "edc" } # Control Plane implementations edc-controlplane-callback-dispatcher-event = { module = "org.eclipse.edc:callback-event-dispatcher", version.ref = "edc" } @@ -108,10 +118,10 @@ edc-dpf-selector-client = { module = "org.eclipse.edc:data-plane-selector-client edc-dpf-selector-spi = { module = "org.eclipse.edc:data-plane-selector-spi", version.ref = "edc" } edc-dpf-selector-core = { module = "org.eclipse.edc:data-plane-selector-core", version.ref = "edc" } edc-dpf-transfer = { module = "org.eclipse.edc:transfer-data-plane", version.ref = "edc" } -edc-dpf-framework = { module = "org.eclipse.edc:data-plane-framework", version.ref = "edc" } edc-dpf-core = { module = "org.eclipse.edc:data-plane-core", version.ref = "edc" } edc-dpf-util = { module = "org.eclipse.edc:data-plane-util", version.ref = "edc" } -edc-dpf-awss3 = { module = "org.eclipse.edc:data-plane-aws-s3", version.ref = "edc" } + +edc-dpf-azblob = { module = "org.eclipse.edc:data-plane-azure-storage", version.ref = "edc" } edc-dpf-http = { module = "org.eclipse.edc:data-plane-http", version.ref = "edc" } edc-dpf-oauth2 = { module = "org.eclipse.edc:data-plane-http-oauth2", version.ref = "edc" } edc-dpf-api = { module = "org.eclipse.edc:data-plane-api", version.ref = "edc" } @@ -139,7 +149,9 @@ apache-sshd-core = { module = "org.apache.sshd:sshd-core", version.ref = "apache apache-sshd-sftp = { module = "org.apache.sshd:sshd-sftp", version.ref = "apache-sshd" } testcontainers-junit = { module = "org.testcontainers:junit-jupiter", version.ref = "testcontainers" } testcontainers-postgres = { module = "org.testcontainers:postgresql", version.ref = "testcontainers" } +testcontainers-vault = { module = "org.testcontainers:vault", version.ref = "testcontainers" } aws-s3 = { module = "software.amazon.awssdk:s3", version.ref = "aws" } +aws-s3transfer = { module = "software.amazon.awssdk:s3-transfer-manager", version.ref = "aws" } jakarta-rsApi = { module = "jakarta.ws.rs:jakarta.ws.rs-api", version.ref = "rsApi" } jakartaJson = { module = "org.glassfish:jakarta.json", version.ref = "jakarta-json" } jacksonJsonP = { module = "com.fasterxml.jackson.datatype:jackson-datatype-jakarta-jsonp", version.ref = "jackson" } diff --git a/resources/create_kit_documentation.sh b/resources/create_kit_documentation.sh new file mode 100755 index 000000000..f96d89a56 --- /dev/null +++ b/resources/create_kit_documentation.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +output_dir=$1 +repo_root=$2 +release_version=$3 + +echo $1 $2 $3 + +cd ${repo_root} + +connector_kit="${output_dir}/tractusx-edc/Connector Kit" +mkdir -p "${connector_kit}" +rsync -a --prune-empty-dirs --exclude 'build' --include '*' ./docs/kit/* "${connector_kit}/" + +operation_view="${connector_kit}/Operation View" +mkdir -p "${operation_view}/03_deployment_via_helm" +cp ./docs/samples/example-dataspace/README.md "${operation_view}/03_deployment_via_helm/00_example_dataspace.md" +cp ./docs/samples/edr-api-overview/edr-api-overview.md "${operation_view}/03_deployment_via_helm/01_edr_api_overview.md" + +mkdir -p "${operation_view}/04_Test Your Setup" +cp ./docs/development/postman/README.md "${operation_view}/04_Test Your Setup/00_postman.md" +cp ./docs/samples/Transfer\ Data.md "${operation_view}/04_Test Your Setup/02_transfer_data.md" +cp -r ./docs/samples/diagrams "${operation_view}/04_Test Your Setup/" + +mkdir -p "${operation_view}/05_Migration" +cp ./docs/migration/* "${operation_view}/05_Migration/" + +development_view="${connector_kit}/Development View" +mkdir -p "${development_view}" +cp ./docs/README.md "${development_view}/00_tractusx_edc.md" +cp ./core/edr-core/README.md "${development_view}/06_edr_core.md" +cp ./docs/development/Release.md "${development_view}/07_release.md" + +mkdir -p "${development_view}/03_EDC Controlplane" +rsync -a --prune-empty-dirs --include '*/' --exclude 'build' --include '*.md' --include '*.png' --include '*.puml' --exclude '*' ./edc-controlplane/* "${development_view}/03_EDC Controlplane" + +mkdir -p "${development_view}/04_EDC Dataplane" +rsync -a --prune-empty-dirs --include '*/' --exclude 'build' --include '*.md' --include '*.png' --include '*.puml' --exclude '*' ./edc-dataplane/* "${development_view}/04_EDC Dataplane" + +mkdir -p "${development_view}/05_EDC Extensions" +rsync -a --prune-empty-dirs --include '*/' --exclude 'build' --include '*.md' --include '*.png' --include '*.puml' --exclude '*' ./edc-extensions/* "${development_view}/05_EDC Extensions" +cp ./build/tractusx-edc.md "${development_view}/05_EDC Extensions/01_autodoc_manifest.md" + +documentation="${output_dir}/tractusx-edc/Connector Kit/Documentation" +mkdir -p "${documentation}" +cp ./docs/development/coding-principles.md "${documentation}/02_coding_principles.md" +cp ./pr_etiquette.md "${documentation}/03_pr_etiquette.md" +cp ./styleguide.md "${documentation}/04_styleguide.md" +mkdir -p "${documentation}/resources" +cp ./resources/tx-checkstyle-config.xml "${documentation}/resources" +cp ./SECURITY.md "${documentation}/05_security.md" +mkdir -p "${documentation}/resources" +cp ./resources/save_actions_scr.png "${documentation}/resources/" + +curl "https://api.swaggerhub.com/apis/tractusx-edc/${release_version}/swagger.yaml" > "${output_dir}/tractusx-edc/tractusx-edc-${release_version}.yaml" + +cd ${output_dir}/tractusx-edc +zip -r ../tractusx-edc-docusaurus-${release_version}.zip ./* diff --git a/settings.gradle.kts b/settings.gradle.kts index 86486df88..5f76ed7d7 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -54,13 +54,17 @@ include("edc-extensions:ssi:ssi-miw-credential-client") include("edc-extensions:ssi:jws2020-crypto-suite") include(":edc-extensions:ssi:ssi-identity-extractor") - +// test modules include(":edc-tests:e2e-tests") include(":edc-tests:miw-tests") include(":edc-tests:runtime:extensions") include(":edc-tests:runtime:runtime-memory") +include(":edc-tests:runtime:dataplane-cloud") include(":edc-tests:runtime:runtime-memory-ssi") include(":edc-tests:runtime:runtime-postgresql") +include(":edc-tests:runtime:runtime-postgresql-hashicorp") +include(":edc-tests:edc-dataplane:edc-dataplane-proxy-e2e") +include(":edc-tests:edc-dataplane:cloud-transfer-tests") // modules for controlplane artifacts include(":edc-controlplane") @@ -79,7 +83,6 @@ include(":edc-extensions:dataplane-proxy:edc-dataplane-proxy-consumer-api") include(":edc-extensions:dataplane-proxy:edc-dataplane-proxy-provider-spi") include(":edc-extensions:dataplane-proxy:edc-dataplane-proxy-provider-core") include(":edc-extensions:dataplane-proxy:edc-dataplane-proxy-provider-api") -include(":edc-tests:edc-dataplane-proxy-e2e") include(":samples:multi-tenancy") diff --git a/spi/edr-spi/src/testFixtures/java/org/eclipse/tractusx/edc/edr/spi/EndpointDataReferenceCacheTestBase.java b/spi/edr-spi/src/testFixtures/java/org/eclipse/tractusx/edc/edr/spi/EndpointDataReferenceCacheTestBase.java index 72d52ac44..6d55a71f8 100644 --- a/spi/edr-spi/src/testFixtures/java/org/eclipse/tractusx/edc/edr/spi/EndpointDataReferenceCacheTestBase.java +++ b/spi/edr-spi/src/testFixtures/java/org/eclipse/tractusx/edc/edr/spi/EndpointDataReferenceCacheTestBase.java @@ -73,7 +73,7 @@ void findByTransferProcessId() { var entry = edrEntry("assetId", "agreementId", "tpId"); getStore().save(entry, edr("edrId")); - assertThat(getStore().findByCorrelationIdAndLease(entry.getTransferProcessId())).isNotNull(); + assertThat(getStore().findByIdAndLease(entry.getTransferProcessId())).isNotNull(); } @Test