fetch(String connectorEndpoint) {
- try {
- return catalogService.getByProviderUrl(connectorEndpoint, QuerySpec.max()).get().getContractOffers();
- } catch (InterruptedException e) {
- throw e;
- } catch (Exception e) {
- throw new ConnectorUnreachableException("Failed to fetch connector contract offers", e);
- }
- }
-}
diff --git a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/ContractOfferRecordUpdater.java b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/ContractOfferRecordUpdater.java
index 8e9854f79..3b3980294 100644
--- a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/ContractOfferRecordUpdater.java
+++ b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/ContractOfferRecordUpdater.java
@@ -15,9 +15,9 @@
package de.sovity.edc.ext.brokerserver.services.refreshing.offers;
import de.sovity.edc.ext.brokerserver.dao.utils.JsonbUtils;
-import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.DataOfferContractOfferRecord;
+import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.ContractOfferRecord;
import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.DataOfferRecord;
-import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedDataOfferContractOffer;
+import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedContractOffer;
import lombok.RequiredArgsConstructor;
import org.jooq.JSONB;
@@ -25,7 +25,7 @@
import java.util.Objects;
/**
- * Creates or updates {@link DataOfferContractOfferRecord} DB Rows.
+ * Creates or updates {@link ContractOfferRecord} DB Rows.
*
* (Or at least prepares them for batch inserts / updates)
*/
@@ -33,14 +33,14 @@
public class ContractOfferRecordUpdater {
/**
- * Create new {@link DataOfferContractOfferRecord} from {@link FetchedDataOfferContractOffer}.
+ * Create new {@link ContractOfferRecord} from {@link FetchedContractOffer}.
*
* @param dataOffer parent data offer db row
* @param fetchedContractOffer fetched contract offer
* @return new db row
*/
- public DataOfferContractOfferRecord newContractOffer(DataOfferRecord dataOffer, FetchedDataOfferContractOffer fetchedContractOffer) {
- var contractOffer = new DataOfferContractOfferRecord();
+ public ContractOfferRecord newContractOffer(DataOfferRecord dataOffer, FetchedContractOffer fetchedContractOffer) {
+ var contractOffer = new ContractOfferRecord();
contractOffer.setConnectorEndpoint(dataOffer.getConnectorEndpoint());
contractOffer.setContractOfferId(fetchedContractOffer.getContractOfferId());
contractOffer.setAssetId(dataOffer.getAssetId());
@@ -50,13 +50,13 @@ public DataOfferContractOfferRecord newContractOffer(DataOfferRecord dataOffer,
}
/**
- * Update existing {@link DataOfferContractOfferRecord} with changes from {@link FetchedDataOfferContractOffer}.
+ * Update existing {@link ContractOfferRecord} with changes from {@link FetchedContractOffer}.
*
* @param contractOffer existing row
* @param fetchedContractOffer changes to be integrated
* @return if anything was changed
*/
- public boolean updateContractOffer(DataOfferContractOfferRecord contractOffer, FetchedDataOfferContractOffer fetchedContractOffer) {
+ public boolean updateContractOffer(ContractOfferRecord contractOffer, FetchedContractOffer fetchedContractOffer) {
var existingPolicy = JsonbUtils.getDataOrNull(contractOffer.getPolicy());
var fetchedPolicy = fetchedContractOffer.getPolicyJson();
var changed = false;
diff --git a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferBuilder.java b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferBuilder.java
deleted file mode 100644
index 25c4f5e83..000000000
--- a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferBuilder.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 2023 sovity GmbH
- *
- * 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:
- * sovity GmbH - initial API and implementation
- *
- */
-
-package de.sovity.edc.ext.brokerserver.services.refreshing.offers;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedDataOffer;
-import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedDataOfferContractOffer;
-import de.sovity.edc.ext.brokerserver.utils.StreamUtils2;
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
-import org.apache.commons.lang3.tuple.Pair;
-import org.eclipse.edc.connector.contract.spi.types.offer.ContractOffer;
-import org.eclipse.edc.spi.types.domain.asset.Asset;
-import org.jetbrains.annotations.NotNull;
-
-import java.net.URI;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-import static java.util.stream.Collectors.groupingBy;
-
-@RequiredArgsConstructor
-public class DataOfferBuilder {
- private final ObjectMapper objectMapper;
-
- /**
- * De-duplicates {@link ContractOffer}s into {@link FetchedDataOffer}s.
- *
- * Also de-duplicates {@link ContractOffer}s into {@link FetchedDataOfferContractOffer}s.
- *
- * @param contractOffers {@link ContractOffer}s
- * @return {@link FetchedDataOffer}s
- */
- public Collection deduplicateContractOffers(Collection contractOffers) {
- return groupByAssetId(contractOffers)
- .stream()
- .map(offers -> buildFetchedDataOffer(offers.get(0).getAsset(), offers))
- .toList();
- }
-
- @NotNull
- private FetchedDataOffer buildFetchedDataOffer(Asset asset, List offers) {
- var dataOffer = new FetchedDataOffer();
- dataOffer.setAssetId(asset.getId());
- dataOffer.setAssetName(getAssetName(asset));
- dataOffer.setAssetPropertiesJson(getAssetPropertiesJson(asset));
- dataOffer.setContractOffers(buildFetchedDataOfferContractOffers(offers));
- return dataOffer;
- }
-
- @NotNull
- private List buildFetchedDataOfferContractOffers(List offers) {
- return offers.stream()
- .map(this::buildFetchedDataOfferContractOffer)
- .filter(StreamUtils2.distinctByKey(FetchedDataOfferContractOffer::getContractOfferId))
- .toList();
- }
-
- @NotNull
- private FetchedDataOfferContractOffer buildFetchedDataOfferContractOffer(ContractOffer offer) {
- var contractOffer = new FetchedDataOfferContractOffer();
- contractOffer.setContractOfferId(offer.getId());
- contractOffer.setPolicyJson(getPolicyJson(offer));
- return contractOffer;
- }
-
- private Collection> groupByAssetId(Collection contractOffers) {
- return contractOffers.stream().collect(groupingBy(offer -> offer.getAsset().getId())).values();
- }
-
- private String getAssetName(Asset asset) {
- String assetName = asset.getName();
- if (assetName == null) {
- assetName = asset.getId();
- }
- return assetName;
- }
-
- @NotNull
- @SneakyThrows
- private String getAssetPropertiesJson(Asset asset) {
- var properties = mapNonNullValues(asset.getProperties(), this::getAssetPropertyValue);
- return objectMapper.writeValueAsString(properties);
- }
-
- @SneakyThrows
- private String getAssetPropertyValue(Object value) {
- if (value == null) {
- return null;
- }
-
- if (value instanceof URI uri) {
- // I don't know why the Eclipse EDC is casting Strings to URIs, but it does
- // We need to prevent this from hitting the writeValueAsString or additional
- // quotes are added
- return uri.toString();
- }
-
- if (value instanceof String stringValue) {
- return stringValue;
- }
-
- // Using JSON Properties in the MS8 EDC causes the broker to fail
- // this is why we map them to their JSON to "show them", but not fail due to them
- return objectMapper.writeValueAsString(value);
- }
-
- @NotNull
- @SneakyThrows
- private String getPolicyJson(ContractOffer offer) {
- return objectMapper.writeValueAsString(offer.getPolicy());
- }
-
- private Map mapNonNullValues(Map map, Function valueMapper) {
- return map.entrySet().stream()
- .map(entry -> Pair.of(entry.getKey(), valueMapper.apply(entry.getValue())))
- .filter(entry -> entry.getValue() != null)
- .collect(Collectors.toMap(Pair::getLeft, Pair::getRight));
- }
-}
diff --git a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferPatchBuilder.java b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferPatchBuilder.java
index 959885022..8b7dcc6be 100644
--- a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferPatchBuilder.java
+++ b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferPatchBuilder.java
@@ -14,13 +14,13 @@
package de.sovity.edc.ext.brokerserver.services.refreshing.offers;
-import de.sovity.edc.ext.brokerserver.dao.DataOfferContractOfferQueries;
+import de.sovity.edc.ext.brokerserver.dao.ContractOfferQueries;
import de.sovity.edc.ext.brokerserver.dao.DataOfferQueries;
-import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.DataOfferContractOfferRecord;
+import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.ContractOfferRecord;
import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.DataOfferRecord;
import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.DataOfferPatch;
+import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedContractOffer;
import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedDataOffer;
-import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedDataOfferContractOffer;
import lombok.RequiredArgsConstructor;
import org.jooq.DSLContext;
@@ -32,7 +32,7 @@
@RequiredArgsConstructor
public class DataOfferPatchBuilder {
- private final DataOfferContractOfferQueries dataOfferContractOfferQueries;
+ private final ContractOfferQueries contractOfferQueries;
private final DataOfferQueries dataOfferQueries;
private final DataOfferRecordUpdater dataOfferRecordUpdater;
private final ContractOfferRecordUpdater contractOfferRecordUpdater;
@@ -52,9 +52,9 @@ public DataOfferPatch buildDataOfferPatch(
) {
var patch = new DataOfferPatch();
var dataOffers = dataOfferQueries.findByConnectorEndpoint(dsl, connectorEndpoint);
- var contractOffersByAssetId = dataOfferContractOfferQueries.findByConnectorEndpoint(dsl, connectorEndpoint)
+ var contractOffersByAssetId = contractOfferQueries.findByConnectorEndpoint(dsl, connectorEndpoint)
.stream()
- .collect(groupingBy(DataOfferContractOfferRecord::getAssetId));
+ .collect(groupingBy(ContractOfferRecord::getAssetId));
var diff = DiffUtils.compareLists(
dataOffers,
@@ -97,16 +97,16 @@ public DataOfferPatch buildDataOfferPatch(
private boolean patchContractOffers(
DataOfferPatch patch,
DataOfferRecord dataOffer,
- Collection contractOffers,
- Collection fetchedContractOffers
+ Collection contractOffers,
+ Collection fetchedContractOffers
) {
var hasUpdates = new AtomicBoolean(false);
var diff = DiffUtils.compareLists(
contractOffers,
- DataOfferContractOfferRecord::getContractOfferId,
+ ContractOfferRecord::getContractOfferId,
fetchedContractOffers,
- FetchedDataOfferContractOffer::getContractOfferId
+ FetchedContractOffer::getContractOfferId
);
diff.added().forEach(fetched -> {
diff --git a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferRecordUpdater.java b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferRecordUpdater.java
index 2676ffb46..97b1e2102 100644
--- a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferRecordUpdater.java
+++ b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferRecordUpdater.java
@@ -17,11 +17,17 @@
import de.sovity.edc.ext.brokerserver.dao.utils.JsonbUtils;
import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.DataOfferRecord;
import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedDataOffer;
+import de.sovity.edc.ext.brokerserver.utils.JsonUtils2;
import lombok.RequiredArgsConstructor;
import org.jooq.JSONB;
import java.time.OffsetDateTime;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
import java.util.Objects;
+import java.util.function.Consumer;
+import java.util.function.Function;
/**
* Creates or updates {@link DataOfferRecord} DB Rows.
@@ -55,20 +61,78 @@ public DataOfferRecord newDataOffer(String connectorEndpoint, FetchedDataOffer f
* @param changed whether the data offer should be marked as updated simply because the contract offers changed
* @return whether any fields were updated
*/
- public boolean updateDataOffer(DataOfferRecord dataOffer, FetchedDataOffer fetchedDataOffer, boolean changed) {
- if (!Objects.equals(fetchedDataOffer.getAssetName(), dataOffer.getAssetName())) {
- Objects.requireNonNull(fetchedDataOffer.getAssetName(),
- "Fetched data offer's asset name should have been set as id if name isn't present");
- dataOffer.setAssetName(fetchedDataOffer.getAssetName());
- changed = true;
- }
+ public boolean updateDataOffer(
+ DataOfferRecord dataOffer,
+ FetchedDataOffer fetchedDataOffer,
+ boolean changed
+ ) {
+ changed |= updateField(
+ dataOffer,
+ fetchedDataOffer,
+ FetchedDataOffer::getAssetTitle,
+ DataOfferRecord::getAssetTitle,
+ dataOffer::setAssetTitle
+ );
- String existingAssetProps = JsonbUtils.getDataOrNull(dataOffer.getAssetProperties());
- var fetchedAssetProps = fetchedDataOffer.getAssetPropertiesJson();
- if (!Objects.equals(fetchedAssetProps, existingAssetProps)) {
- dataOffer.setAssetProperties(JSONB.jsonb(fetchedAssetProps));
- changed = true;
- }
+ changed |= updateField(
+ dataOffer,
+ fetchedDataOffer,
+ FetchedDataOffer::getDescription,
+ DataOfferRecord::getDescription,
+ dataOffer::setDescription
+ );
+
+ changed |= updateField(
+ dataOffer,
+ fetchedDataOffer,
+ FetchedDataOffer::getCuratorOrganizationName,
+ DataOfferRecord::getCuratorOrganizationName,
+ dataOffer::setCuratorOrganizationName
+ );
+
+ changed |= updateField(
+ dataOffer,
+ fetchedDataOffer,
+ FetchedDataOffer::getDataCategory,
+ DataOfferRecord::getDataCategory,
+ dataOffer::setDataCategory
+ );
+
+ changed |= updateField(
+ dataOffer,
+ fetchedDataOffer,
+ FetchedDataOffer::getDataSubcategory,
+ DataOfferRecord::getDataSubcategory,
+ dataOffer::setDataSubcategory
+ );
+
+ changed |= updateField(
+ dataOffer,
+ fetchedDataOffer,
+ FetchedDataOffer::getDataModel,
+ DataOfferRecord::getDataModel,
+ dataOffer::setDataModel
+ );
+
+ changed |= updateField(
+ dataOffer,
+ fetchedDataOffer,
+ FetchedDataOffer::getTransportMode,
+ DataOfferRecord::getTransportMode,
+ dataOffer::setTransportMode
+ );
+
+ changed |= updateField(
+ dataOffer,
+ fetchedDataOffer,
+ FetchedDataOffer::getGeoReferenceMethod,
+ DataOfferRecord::getGeoReferenceMethod,
+ dataOffer::setGeoReferenceMethod
+ );
+
+ changed |= updateKeywords(dataOffer, fetchedDataOffer);
+
+ changed |= updateAssetJsonLd(dataOffer, fetchedDataOffer);
if (changed) {
dataOffer.setUpdatedAt(OffsetDateTime.now());
@@ -76,4 +140,67 @@ public boolean updateDataOffer(DataOfferRecord dataOffer, FetchedDataOffer fetch
return changed;
}
+
+ private boolean updateField(
+ DataOfferRecord dataOffer,
+ FetchedDataOffer fetchedDataOffer,
+ Function fetchedField,
+ Function existingField,
+ Consumer setter
+ ) {
+ var fetched = fetchedField.apply(fetchedDataOffer);
+ if (fetched == null) {
+ fetched = "";
+ }
+
+ var existing = existingField.apply(dataOffer);
+ if (existing == null) {
+ existing = "";
+ }
+
+
+ if (Objects.equals(fetched, existing)) {
+ return false;
+ }
+
+ setter.accept(fetched);
+ return true;
+ }
+
+ private boolean updateKeywords(
+ DataOfferRecord dataOffer,
+ FetchedDataOffer fetchedDataOffer
+ ) {
+ List fetched = fetchedDataOffer.getKeywords();
+ if (fetched == null) {
+ fetched = List.of();
+ }
+
+ String[] existing = dataOffer.getKeywords();
+ if (existing == null) {
+ existing = new String[0];
+ }
+
+ if (Objects.equals(new HashSet<>(fetched), new HashSet<>(Arrays.asList(existing)))) {
+ return false;
+ }
+
+ dataOffer.setKeywords(fetched.toArray(new String[0]));
+ dataOffer.setKeywordsCommaJoined(String.join(",", fetched));
+ return true;
+ }
+
+ private boolean updateAssetJsonLd(
+ DataOfferRecord dataOffer,
+ FetchedDataOffer fetchedDataOffer
+ ) {
+ String existing = JsonbUtils.getDataOrNull(dataOffer.getAssetJsonLd());
+ var fetched = fetchedDataOffer.getAssetJsonLd();
+ if (JsonUtils2.isEqualJson(fetched, existing)) {
+ return false;
+ }
+
+ dataOffer.setAssetJsonLd(JSONB.jsonb(fetched));
+ return true;
+ }
}
diff --git a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/FetchedCatalogBuilder.java b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/FetchedCatalogBuilder.java
new file mode 100644
index 000000000..64d850281
--- /dev/null
+++ b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/FetchedCatalogBuilder.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2023 sovity GmbH
+ *
+ * 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:
+ * sovity GmbH - initial API and implementation
+ *
+ */
+
+package de.sovity.edc.ext.brokerserver.services.refreshing.offers;
+
+import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedCatalog;
+import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedContractOffer;
+import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedDataOffer;
+import de.sovity.edc.ext.wrapper.api.common.mappers.AssetMapper;
+import de.sovity.edc.utils.JsonUtils;
+import de.sovity.edc.utils.catalog.model.DspCatalog;
+import de.sovity.edc.utils.catalog.model.DspContractOffer;
+import de.sovity.edc.utils.catalog.model.DspDataOffer;
+import jakarta.json.JsonObject;
+import lombok.RequiredArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.List;
+
+@RequiredArgsConstructor
+public class FetchedCatalogBuilder {
+ private final AssetMapper assetMapper;
+
+ public FetchedCatalog buildFetchedCatalog(DspCatalog catalog) {
+ var participantId = catalog.getParticipantId();
+
+ var fetchedDataOffers = catalog.getDataOffers().stream()
+ .map(dspDataOffer -> buildFetchedDataOffer(dspDataOffer, participantId))
+ .toList();
+
+ var fetchedCatalog = new FetchedCatalog();
+ fetchedCatalog.setParticipantId(participantId);
+ fetchedCatalog.setDataOffers(fetchedDataOffers);
+
+ return fetchedCatalog;
+ }
+
+ @NotNull
+ private FetchedDataOffer buildFetchedDataOffer(DspDataOffer dspDataOffer, String participantId) {
+ var assetJsonLd = assetMapper.buildAssetJsonLdFromDatasetProperties(dspDataOffer.getAssetPropertiesJsonLd());
+
+ var fetchedDataOffer = new FetchedDataOffer();
+ setAssetMetadata(fetchedDataOffer, assetJsonLd, participantId);
+ fetchedDataOffer.setContractOffers(buildFetchedContractOffers(dspDataOffer.getContractOffers()));
+ return fetchedDataOffer;
+ }
+
+ @NotNull
+ private List buildFetchedContractOffers(List offers) {
+ return offers.stream()
+ .map(this::buildFetchedContractOffer)
+ .toList();
+ }
+
+ @NotNull
+ private FetchedContractOffer buildFetchedContractOffer(DspContractOffer offer) {
+ var contractOffer = new FetchedContractOffer();
+ contractOffer.setContractOfferId(offer.getContractOfferId());
+ contractOffer.setPolicyJson(JsonUtils.toJson(offer.getPolicyJsonLd()));
+ return contractOffer;
+ }
+
+ /**
+ * This method was extract so tests could re-use the logic of assetJsonLd -> fetchedDataOffer -> dataOfferRecord
+ *
+ * @param fetchedDataOffer fetchedDataOffer
+ * @param assetJsonLd assetJsonLd
+ */
+ public void setAssetMetadata(FetchedDataOffer fetchedDataOffer, JsonObject assetJsonLd, String participantId) {
+ var uiAsset = assetMapper.buildUiAsset(assetJsonLd, "http://if-you-see-this-this-is-a-bug", participantId);
+ fetchedDataOffer.setAssetId(uiAsset.getAssetId());
+ fetchedDataOffer.setAssetJsonLd(JsonUtils.toJson(assetJsonLd));
+
+ // Most of these fields are extracted so our DB does not need to
+ // semantically interpret JSON-LD when sorting, searching and filtering
+ fetchedDataOffer.setAssetTitle(uiAsset.getTitle());
+ fetchedDataOffer.setDescription(uiAsset.getDescription());
+ fetchedDataOffer.setCuratorOrganizationName(uiAsset.getCreatorOrganizationName());
+
+ fetchedDataOffer.setDataCategory(uiAsset.getDataCategory());
+ fetchedDataOffer.setDataSubcategory(uiAsset.getDataSubcategory());
+ fetchedDataOffer.setDataModel(uiAsset.getDataModel());
+ fetchedDataOffer.setGeoReferenceMethod(uiAsset.getGeoReferenceMethod());
+ fetchedDataOffer.setTransportMode(uiAsset.getTransportMode());
+ fetchedDataOffer.setKeywords(uiAsset.getKeywords());
+ }
+}
diff --git a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/model/DataOfferPatch.java b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/model/DataOfferPatch.java
index e9bf5ad69..a7a2b49bd 100644
--- a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/model/DataOfferPatch.java
+++ b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/model/DataOfferPatch.java
@@ -14,7 +14,7 @@
package de.sovity.edc.ext.brokerserver.services.refreshing.offers.model;
-import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.DataOfferContractOfferRecord;
+import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.ContractOfferRecord;
import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.DataOfferRecord;
import lombok.AccessLevel;
import lombok.Getter;
@@ -35,9 +35,9 @@ public class DataOfferPatch {
List dataOffersToUpdate = new ArrayList<>();
List dataOffersToDelete = new ArrayList<>();
- List contractOffersToInsert = new ArrayList<>();
- List contractOffersToUpdate = new ArrayList<>();
- List contractOffersToDelete = new ArrayList<>();
+ List contractOffersToInsert = new ArrayList<>();
+ List contractOffersToUpdate = new ArrayList<>();
+ List contractOffersToDelete = new ArrayList<>();
public void insertDataOffer(DataOfferRecord offer) {
dataOffersToInsert.add(offer);
@@ -51,15 +51,15 @@ public void deleteDataOffer(DataOfferRecord offer) {
dataOffersToDelete.add(offer);
}
- public void insertContractOffer(DataOfferContractOfferRecord offer) {
+ public void insertContractOffer(ContractOfferRecord offer) {
contractOffersToInsert.add(offer);
}
- public void updateContractOffer(DataOfferContractOfferRecord offer) {
+ public void updateContractOffer(ContractOfferRecord offer) {
contractOffersToUpdate.add(offer);
}
- public void deleteContractOffer(DataOfferContractOfferRecord offer) {
+ public void deleteContractOffer(ContractOfferRecord offer) {
contractOffersToDelete.add(offer);
}
}
diff --git a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/model/FetchedCatalog.java b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/model/FetchedCatalog.java
new file mode 100644
index 000000000..550dd0657
--- /dev/null
+++ b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/model/FetchedCatalog.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2023 sovity GmbH
+ *
+ * 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:
+ * sovity GmbH - initial API and implementation
+ *
+ */
+
+package de.sovity.edc.ext.brokerserver.services.refreshing.offers.model;
+
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.FieldDefaults;
+
+import java.util.List;
+
+/**
+ * Contains catalog response as required for writing into DB.
+ */
+@Getter
+@Setter
+@FieldDefaults(level = AccessLevel.PRIVATE)
+public class FetchedCatalog {
+ String participantId;
+ List dataOffers;
+}
diff --git a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/model/FetchedDataOfferContractOffer.java b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/model/FetchedContractOffer.java
similarity index 93%
rename from extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/model/FetchedDataOfferContractOffer.java
rename to extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/model/FetchedContractOffer.java
index 76c099dfa..b2d566f70 100644
--- a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/model/FetchedDataOfferContractOffer.java
+++ b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/model/FetchedContractOffer.java
@@ -22,7 +22,7 @@
@Getter
@Setter
@FieldDefaults(level = AccessLevel.PRIVATE)
-public class FetchedDataOfferContractOffer {
+public class FetchedContractOffer {
String contractOfferId;
String policyJson;
}
diff --git a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/model/FetchedDataOffer.java b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/model/FetchedDataOffer.java
index 78cf0c9a1..d93306613 100644
--- a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/model/FetchedDataOffer.java
+++ b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/model/FetchedDataOffer.java
@@ -21,12 +21,23 @@
import java.util.List;
+/**
+ * Contains data offer response as required for writing into DB.
+ */
@Getter
@Setter
@FieldDefaults(level = AccessLevel.PRIVATE)
public class FetchedDataOffer {
String assetId;
- String assetName;
- String assetPropertiesJson;
- List contractOffers;
+ String assetTitle;
+ String description;
+ String curatorOrganizationName;
+ String dataCategory;
+ String dataSubcategory;
+ String dataModel;
+ String transportMode;
+ String geoReferenceMethod;
+ List keywords;
+ String assetJsonLd;
+ List contractOffers;
}
diff --git a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/utils/JsonUtils2.java b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/utils/JsonUtils2.java
new file mode 100644
index 000000000..fbe1af366
--- /dev/null
+++ b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/utils/JsonUtils2.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2023 sovity GmbH
+ *
+ * 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:
+ * sovity GmbH - initial API and implementation
+ *
+ */
+
+package de.sovity.edc.ext.brokerserver.utils;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import lombok.SneakyThrows;
+
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class JsonUtils2 {
+ private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+
+ @SneakyThrows
+ public static boolean isEqualJson(String json, String otherJson) {
+ return
+ (json == null && otherJson == null) ||
+ (json != null && otherJson != null && OBJECT_MAPPER.readTree(json).equals(OBJECT_MAPPER.readTree(otherJson)));
+ }
+}
diff --git a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/utils/UrlUtils.java b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/utils/UrlUtils.java
index f728d05ef..ae720063b 100644
--- a/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/utils/UrlUtils.java
+++ b/extensions/broker-server/src/main/java/de/sovity/edc/ext/brokerserver/utils/UrlUtils.java
@@ -18,35 +18,12 @@
import lombok.NoArgsConstructor;
import java.net.MalformedURLException;
-import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class UrlUtils {
-
- /**
- * Returns everything before the URLs path.
- *
- * Example: http://www.example.com/path/to/my/file.html -> http://www.example.com
- * Example 2: http://www.example.com:9000/path/to/my/file.html -> http://www.example.com:9000
- *
- * @param url url
- * @return protocol, host, port
- */
- public static String getEverythingBeforeThePath(String url) {
- var uri = URI.create(url);
- var scheme = uri.getScheme(); // "http"
- var authority = uri.getAuthority(); // "www.example.com"
- int port = uri.getPort(); // -1 (no port specified)
- var everythingBeforePath = scheme + "://" + authority;
- if (port != -1) {
- everythingBeforePath += ":" + port;
- }
- return everythingBeforePath;
- }
-
public static boolean isValidUrl(String url) {
try {
new URL(url).toURI();
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/AssertionUtils.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/AssertionUtils.java
index 781aa4504..c810d36eb 100644
--- a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/AssertionUtils.java
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/AssertionUtils.java
@@ -14,6 +14,7 @@
package de.sovity.edc.ext.brokerserver;
+import de.sovity.edc.ext.brokerserver.client.gen.JSON;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.SneakyThrows;
@@ -26,4 +27,8 @@ public class AssertionUtils {
public static void assertEqualJson(String expected, String actual) {
JSONAssert.assertEquals(expected, actual, JSONCompareMode.STRICT);
}
+
+ public static void assertEqualUsingJson(Object expected, Object actual) {
+ assertEqualJson(JSON.serialize(expected), JSON.serialize(actual));
+ }
}
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/TestAsset.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/TestAsset.java
new file mode 100644
index 000000000..c954d6a86
--- /dev/null
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/TestAsset.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2023 sovity GmbH
+ *
+ * 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:
+ * sovity GmbH - initial API and implementation
+ *
+ */
+
+package de.sovity.edc.ext.brokerserver;
+
+import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.DataOfferRecord;
+import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedDataOffer;
+import de.sovity.edc.utils.jsonld.vocab.Prop;
+import jakarta.json.Json;
+import jakarta.json.JsonObject;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+import java.util.Map;
+
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class TestAsset {
+ public static JsonObject getAssetJsonLd(String assetId) {
+ return getAssetJsonLd(assetId, Map.of());
+ }
+
+ public static JsonObject getAssetJsonLd(String assetId, Map properties) {
+ return Json.createObjectBuilder()
+ .add(Prop.ID, assetId)
+ .add(Prop.Edc.PROPERTIES, Json.createObjectBuilder()
+ .add(Prop.Edc.ASSET_ID, assetId)
+ .addAll(Json.createObjectBuilder(properties)))
+ .build();
+ }
+
+ /**
+ * Sets assetJsonLd and other extracted fields.
+ *
+ * This method keeps our tests consistent if we change the extracted fields.
+ *
+ * @param dataOfferRecord data offer record to be updated
+ * @param assetJsonLd asset json ld
+ * @param participantId required because the organization name will default to the participant id if unset
+ */
+ public static void setDataOfferAssetMetadata(DataOfferRecord dataOfferRecord, JsonObject assetJsonLd, String participantId) {
+ // We trickily use the real code to update all the extracted values from the asset JSON-LD
+ var fetchedCatalogBuilder = BrokerServerExtensionContext.instance.fetchedCatalogBuilder();
+ var dataOfferRecordUpdater = BrokerServerExtensionContext.instance.dataOfferRecordUpdater();
+
+ var fetchedDataOffer = new FetchedDataOffer();
+ fetchedCatalogBuilder.setAssetMetadata(fetchedDataOffer, assetJsonLd, participantId);
+
+ dataOfferRecord.setAssetId(fetchedDataOffer.getAssetId());
+ dataOfferRecordUpdater.updateDataOffer(dataOfferRecord, fetchedDataOffer, false);
+ }
+}
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/TestPolicy.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/TestPolicy.java
new file mode 100644
index 000000000..3087968d9
--- /dev/null
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/TestPolicy.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2023 sovity GmbH
+ *
+ * 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:
+ * sovity GmbH - initial API and implementation
+ *
+ */
+
+package de.sovity.edc.ext.brokerserver;
+
+import de.sovity.edc.ext.brokerserver.client.gen.JSON;
+import de.sovity.edc.ext.wrapper.api.common.model.OperatorDto;
+import de.sovity.edc.ext.wrapper.api.common.model.UiPolicyConstraint;
+import de.sovity.edc.ext.wrapper.api.common.model.UiPolicyCreateRequest;
+import de.sovity.edc.ext.wrapper.api.common.model.UiPolicyLiteral;
+import de.sovity.edc.ext.wrapper.api.common.model.UiPolicyLiteralType;
+import de.sovity.edc.utils.JsonUtils;
+import org.jooq.JSONB;
+
+import java.time.OffsetDateTime;
+import java.util.List;
+
+public class TestPolicy {
+ private static OffsetDateTime today = OffsetDateTime.now();
+
+ public static UiPolicyConstraint createAfterYesterdayConstraint() {
+ return UiPolicyConstraint.builder()
+ .left("POLICY_EVALUATION_TIME")
+ .operator(OperatorDto.GT)
+ .right(UiPolicyLiteral.builder()
+ .type(UiPolicyLiteralType.STRING)
+ .value(today.minusDays(1).toString())
+ .build())
+ .build();
+ }
+
+ public static de.sovity.edc.client.gen.model.UiPolicyCreateRequest createAfterYesterdayPolicyEdcGen() {
+ return jsonCast(createAfterYesterdayPolicy(), de.sovity.edc.client.gen.model.UiPolicyCreateRequest.class);
+ }
+
+ private static R jsonCast(T obj, Class clazz) {
+ return JSON.deserialize(JSON.serialize(obj), clazz);
+ }
+
+ public static UiPolicyCreateRequest createAfterYesterdayPolicy() {
+ return UiPolicyCreateRequest.builder()
+ .constraints(List.of(createAfterYesterdayConstraint()))
+ .build();
+ }
+
+ public static JSONB createAfterYesterdayPolicyJson() {
+ var createRequest = TestPolicy.createAfterYesterdayPolicy();
+ return getPolicyJsonLd(createRequest);
+ }
+
+ /**
+ * This method only works in integration tests, because it depends on the broker server extension context.
+ */
+ public static JSONB getPolicyJsonLd(UiPolicyCreateRequest createRequest) {
+ var policyMapper = BrokerServerExtensionContext.instance.policyMapper();
+ var jsonLd = policyMapper.buildPolicyJsonLd(policyMapper.buildPolicy(createRequest));
+ return JSONB.jsonb(JsonUtils.toJson(jsonLd));
+ }
+}
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/TestUtils.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/TestUtils.java
index c9e14605c..2d797c6c6 100644
--- a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/TestUtils.java
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/TestUtils.java
@@ -19,7 +19,6 @@
import de.sovity.edc.ext.brokerserver.db.PostgresFlywayExtension;
import de.sovity.edc.ext.brokerserver.db.TestDatabase;
import org.assertj.core.api.ThrowableAssert;
-import org.eclipse.edc.protocol.ids.api.configuration.IdsApiConfigurationExtension;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
@@ -31,19 +30,19 @@
import static org.eclipse.edc.junit.testfixtures.TestUtils.getFreePort;
public class TestUtils {
-
- private static final int DATA_PORT = getFreePort();
+ private static final int MANAGEMENT_PORT = getFreePort();
private static final int PROTOCOL_PORT = getFreePort();
- private static final String DATA_PATH = "/api/v1/data";
- private static final String PROTOCOL_PATH = "/api/v1/ids";
+ private static final String MANAGEMENT_PATH = "/api/management";
+ private static final String PROTOCOL_PATH = "/api/dsp";
public static final String MANAGEMENT_API_KEY = "123456";
- public static final String MANAGEMENT_ENDPOINT = "http://localhost:" + DATA_PORT + DATA_PATH;
-
+ public static final String MANAGEMENT_ENDPOINT = "http://localhost:" + MANAGEMENT_PORT + MANAGEMENT_PATH;
public static final String ADMIN_API_KEY = "123456";
public static final String PROTOCOL_HOST = "http://localhost:" + PROTOCOL_PORT;
- public static final String PROTOCOL_ENDPOINT = PROTOCOL_HOST + PROTOCOL_PATH + "/data";
+ public static final String PROTOCOL_ENDPOINT = PROTOCOL_HOST + PROTOCOL_PATH;
+ public static final String PARTICIPANT_ID = "my-edc-participant-id";
+ public static final String CURATOR_NAME = "My Org";
@NotNull
public static Map createConfiguration(
@@ -51,16 +50,26 @@ public static Map createConfiguration(
Map additionalConfigProperties
) {
Map config = new HashMap<>();
+
config.put("web.http.port", String.valueOf(getFreePort()));
config.put("web.http.path", "/api");
- config.put("web.http.management.port", String.valueOf(DATA_PORT));
- config.put("web.http.management.path", DATA_PATH);
+ config.put("web.http.management.port", String.valueOf(MANAGEMENT_PORT));
+ config.put("web.http.management.path", MANAGEMENT_PATH);
config.put("web.http.protocol.port", String.valueOf(PROTOCOL_PORT));
config.put("web.http.protocol.path", PROTOCOL_PATH);
config.put("edc.api.auth.key", MANAGEMENT_API_KEY);
- config.put("edc.ids.endpoint", PROTOCOL_ENDPOINT);
- config.put(IdsApiConfigurationExtension.IDS_WEBHOOK_ADDRESS, PROTOCOL_HOST);
+ config.put("edc.dsp.callback.address", PROTOCOL_ENDPOINT);
config.put("edc.oauth.provider.audience", "idsc:IDS_CONNECTORS_ALL");
+
+ config.put("edc.participant.id", PARTICIPANT_ID);
+ config.put("my.edc.name.kebab.case", PARTICIPANT_ID);
+ config.put("my.edc.title", "My Connector");
+ config.put("my.edc.description", "My Connector Description");
+ config.put("my.edc.curator.url", "https://connector.my-org");
+ config.put("my.edc.curator.name", CURATOR_NAME);
+ config.put("my.edc.maintainer.url", "https://maintainer-org");
+ config.put("my.edc.maintainer.name", "Maintainer Org");
+
config.put(PostgresFlywayExtension.JDBC_URL, testDatabase.getJdbcUrl());
config.put(PostgresFlywayExtension.JDBC_USER, testDatabase.getJdbcUser());
config.put(PostgresFlywayExtension.JDBC_PASSWORD, testDatabase.getJdbcPassword());
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/db/TestDatabase.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/db/TestDatabase.java
index bf200c29d..e593df41c 100644
--- a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/db/TestDatabase.java
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/db/TestDatabase.java
@@ -19,8 +19,8 @@
import org.junit.jupiter.api.extension.AfterAllCallback;
import org.junit.jupiter.api.extension.BeforeAllCallback;
-import java.util.function.Consumer;
import javax.sql.DataSource;
+import java.util.function.Consumer;
public interface TestDatabase extends BeforeAllCallback, AfterAllCallback {
String getJdbcUrl();
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/CatalogApiTest.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/CatalogApiTest.java
index b5c1b9b86..4b0bf063c 100644
--- a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/CatalogApiTest.java
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/CatalogApiTest.java
@@ -25,13 +25,15 @@
import de.sovity.edc.ext.brokerserver.client.gen.model.CnfFilterValueAttribute;
import de.sovity.edc.ext.brokerserver.client.gen.model.DataOfferDetailPageQuery;
import de.sovity.edc.ext.brokerserver.client.gen.model.DataOfferDetailPageResult;
-import de.sovity.edc.ext.brokerserver.dao.AssetProperty;
import de.sovity.edc.ext.brokerserver.db.TestDatabase;
import de.sovity.edc.ext.brokerserver.db.TestDatabaseFactory;
import de.sovity.edc.ext.brokerserver.db.jooq.Tables;
import de.sovity.edc.ext.brokerserver.db.jooq.enums.ConnectorContractOffersExceeded;
import de.sovity.edc.ext.brokerserver.db.jooq.enums.ConnectorDataOffersExceeded;
import de.sovity.edc.ext.brokerserver.db.jooq.enums.ConnectorOnlineStatus;
+import de.sovity.edc.ext.wrapper.api.common.mappers.utils.AssetJsonLdUtils;
+import de.sovity.edc.utils.jsonld.vocab.Prop;
+import jakarta.json.JsonObject;
import lombok.SneakyThrows;
import org.eclipse.edc.junit.annotations.ApiTest;
import org.eclipse.edc.junit.extensions.EdcExtension;
@@ -48,6 +50,8 @@
import java.util.List;
import java.util.Map;
+import static de.sovity.edc.ext.brokerserver.TestAsset.getAssetJsonLd;
+import static de.sovity.edc.ext.brokerserver.TestAsset.setDataOfferAssetMetadata;
import static de.sovity.edc.ext.brokerserver.TestUtils.brokerServerClient;
import static de.sovity.edc.ext.brokerserver.TestUtils.createConfiguration;
import static java.util.stream.IntStream.range;
@@ -65,7 +69,7 @@ void setUp(EdcExtension extension) {
extension.setConfiguration(createConfiguration(TEST_DATABASE, Map.of(
BrokerServerExtension.CATALOG_PAGE_PAGE_SIZE, "10",
BrokerServerExtension.DEFAULT_CONNECTOR_DATASPACE, "MDS",
- BrokerServerExtension.KNOWN_DATASPACE_CONNECTORS, "Example1=http://my-connector2/ids/data,Example2=http://my-connector3/ids/data"
+ BrokerServerExtension.KNOWN_DATASPACE_CONNECTORS, "Example1=https://my-connector2/api/dsp,Example2=https://my-connector3/api/dsp"
)));
}
@@ -75,16 +79,15 @@ void testDataSpace_two_dataspaces_filter_for_one() {
// arrange
var today = OffsetDateTime.now().withNano(0);
- createConnector(dsl, today, "http://my-connector/ids/data"); // Dataspace: MDS
- createConnector(dsl, today, "http://my-connector2/ids/data"); // Dataspace: Example1
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset",
- AssetProperty.ASSET_NAME, "my-asset"
- ), "http://my-connector/ids/data"); // Dataspace: MDS
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset",
- AssetProperty.ASSET_NAME, "my-asset"
- ), "http://my-connector2/ids/data"); // Dataspace: Example1
+ var assetJsonLd = getAssetJsonLd("my-asset", Map.of(Prop.Dcterms.TITLE, "My Asset"));
+
+ // Dataspace: MDS
+ createConnector(dsl, today, "https://my-connector/api/dsp");
+ createDataOffer(dsl, today, "https://my-connector/api/dsp", assetJsonLd);
+
+ // Dataspace: Example1
+ createConnector(dsl, today, "https://my-connector2/api/dsp");
+ createDataOffer(dsl, today, "https://my-connector2/api/dsp", assetJsonLd);
var query = new CatalogPageQuery();
query.setFilter(new CnfFilterValue(List.of(
@@ -95,7 +98,7 @@ void testDataSpace_two_dataspaces_filter_for_one() {
assertThat(result.getDataOffers()).hasSize(1);
var dataOfferResult = result.getDataOffers().get(0);
- assertThat(dataOfferResult.getConnectorEndpoint()).isEqualTo("http://my-connector2/ids/data");
+ assertThat(dataOfferResult.getConnectorEndpoint()).isEqualTo("https://my-connector2/api/dsp");
});
}
@@ -105,24 +108,21 @@ void testConnectorEndpointFilter_two_connectors_filter_for_one() {
// arrange
var today = OffsetDateTime.now().withNano(0);
- createConnector(dsl, today, "http://my-connector/ids/data");
- createConnector(dsl, today, "http://my-connector2/ids/data");
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset",
- AssetProperty.ASSET_NAME, "my-asset"
- ), "http://my-connector/ids/data");
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset",
- AssetProperty.ASSET_NAME, "my-asset"
- ), "http://my-connector2/ids/data");
+ var assetJsonLd = getAssetJsonLd("my-asset", Map.of(Prop.Dcterms.TITLE, "My Asset"));
+
+ createConnector(dsl, today, "https://my-connector/api/dsp");
+ createDataOffer(dsl, today, "https://my-connector/api/dsp", assetJsonLd);
+
+ createConnector(dsl, today, "https://my-connector2/api/dsp");
+ createDataOffer(dsl, today, "https://my-connector2/api/dsp", assetJsonLd);
var query = new CatalogPageQuery();
query.setFilter(new CnfFilterValue(List.of(
- new CnfFilterValueAttribute("connectorEndpoint", List.of("http://my-connector/ids/data"))
+ new CnfFilterValueAttribute("connectorEndpoint", List.of("https://my-connector/api/dsp"))
)));
var result = brokerServerClient().brokerServerApi().catalogPage(query);
- assertThat(result.getDataOffers()).extracting(CatalogDataOffer::getAssetId).containsExactly("urn:artifact:my-asset");
+ assertThat(result.getDataOffers()).extracting(CatalogDataOffer::getConnectorEndpoint).containsExactly("https://my-connector/api/dsp");
});
}
@@ -132,29 +132,18 @@ void test_available_filter_values_to_filter_by() {
// arrange
var today = OffsetDateTime.now().withNano(0);
- createConnector(dsl, today, "http://my-connector/ids/data"); // Dataspace: MDS
- createConnector(dsl, today, "http://my-connector2/ids/data"); // Dataspace: Example1
- createConnector(dsl, today, "http://my-connector3/ids/data"); // Dataspace: Example2
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset",
- AssetProperty.ASSET_NAME, "my-asset",
- AssetProperty.LANGUAGE, "de"
- ), "http://my-connector/ids/data"); // Dataspace: MDS
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset",
- AssetProperty.ASSET_NAME, "my-asset",
- AssetProperty.LANGUAGE, "en"
- ), "http://my-connector2/ids/data"); // Dataspace: Example1
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset2",
- AssetProperty.ASSET_NAME, "my-asset",
- AssetProperty.LANGUAGE, "fr"
- ), "http://my-connector2/ids/data"); // Dataspace: Example1
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset3",
- AssetProperty.ASSET_NAME, "my-asset",
- AssetProperty.LANGUAGE, "fr"
- ), "http://my-connector3/ids/data"); // Dataspace: Example2
+ createConnector(dsl, today, "https://my-connector/api/dsp"); // Dataspace: MDS
+ createConnector(dsl, today, "https://my-connector2/api/dsp"); // Dataspace: Example1
+ createConnector(dsl, today, "https://my-connector3/api/dsp"); // Dataspace: Example2
+
+ var assetJsonLd1 = getAssetJsonLd("my-asset-1");
+ var assetJsonLd2 = getAssetJsonLd("my-asset-2");
+ var assetJsonLd3 = getAssetJsonLd("my-asset-3");
+
+ createDataOffer(dsl, today, "https://my-connector/api/dsp", assetJsonLd1); // Dataspace: MDS
+ createDataOffer(dsl, today, "https://my-connector2/api/dsp", assetJsonLd1); // Dataspace: Example1
+ createDataOffer(dsl, today, "https://my-connector2/api/dsp", assetJsonLd2); // Dataspace: Example1
+ createDataOffer(dsl, today, "https://my-connector3/api/dsp", assetJsonLd3); // Dataspace: Example2
// get all available filter values
var result = brokerServerClient().brokerServerApi().catalogPage(new CatalogPageQuery());
@@ -175,25 +164,23 @@ void testDataOfferDetails() {
// arrange
var today = OffsetDateTime.now().withNano(0);
- createConnector(dsl, today, "http://my-connector/ids/data");
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset",
- AssetProperty.ASSET_NAME, "my-asset"
- ), "http://my-connector/ids/data");
+ var assetJsonLd = getAssetJsonLd("my-asset-1", Map.of(
+ Prop.Dcterms.TITLE, "My Asset"
+ ));
+ createConnector(dsl, today, "https://my-connector/api/dsp");
+ createDataOffer(dsl, today, "https://my-connector/api/dsp", assetJsonLd);
var result = brokerServerClient().brokerServerApi().catalogPage(new CatalogPageQuery());
assertThat(result.getDataOffers()).hasSize(1);
var dataOfferResult = result.getDataOffers().get(0);
- assertThat(dataOfferResult.getConnectorEndpoint()).isEqualTo("http://my-connector/ids/data");
+ assertThat(dataOfferResult.getConnectorEndpoint()).isEqualTo("https://my-connector/api/dsp");
assertThat(dataOfferResult.getConnectorOfflineSinceOrLastUpdatedAt()).isEqualTo(today);
assertThat(dataOfferResult.getConnectorOnlineStatus()).isEqualTo(CatalogDataOffer.ConnectorOnlineStatusEnum.ONLINE);
- assertThat(dataOfferResult.getAssetId()).isEqualTo("urn:artifact:my-asset");
- assertThat(dataOfferResult.getProperties()).isEqualTo(Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset",
- AssetProperty.ASSET_NAME, "my-asset"
- ));
+ assertThat(dataOfferResult.getAssetId()).isEqualTo("my-asset-1");
+ assertThat(dataOfferResult.getAsset().getAssetId()).isEqualTo("my-asset-1");
+ assertThat(dataOfferResult.getAsset().getTitle()).isEqualTo("My Asset");
assertThat(dataOfferResult.getCreatedAt()).isEqualTo(today.minusDays(5));
});
}
@@ -206,7 +193,7 @@ void testEmptyConnector() {
TEST_DATABASE.testTransaction(dsl -> {
// arrange
var today = OffsetDateTime.now().withNano(0);
- createConnector(dsl, today, "http://my-connector/ids/data");
+ createConnector(dsl, today, "https://my-connector/api/dsp");
// act
var result = brokerServerClient().brokerServerApi().catalogPage(new CatalogPageQuery());
@@ -226,31 +213,39 @@ void testAvailableFilters_noFilter() {
// arrange
var today = OffsetDateTime.now().withNano(0);
- createConnector(dsl, today, "http://my-connector/ids/data");
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset-1",
- AssetProperty.DATA_CATEGORY, "my-category-1",
- AssetProperty.TRANSPORT_MODE, "MY-TRANSPORT-MODE-1",
- AssetProperty.DATA_SUBCATEGORY, "MY-SUBCATEGORY-2"
- ), "http://my-connector/ids/data");
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset-2",
- AssetProperty.DATA_CATEGORY, "my-category-1",
- AssetProperty.TRANSPORT_MODE, "my-transport-mode-2",
- AssetProperty.DATA_SUBCATEGORY, "MY-SUBCATEGORY-2"
- ), "http://my-connector/ids/data");
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset-3",
- AssetProperty.DATA_CATEGORY, "my-category-1",
- AssetProperty.TRANSPORT_MODE, "MY-TRANSPORT-MODE-1",
- AssetProperty.DATA_SUBCATEGORY, "my-subcategory-1"
- ), "http://my-connector/ids/data");
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset-4",
- AssetProperty.DATA_CATEGORY, "my-category-1",
- AssetProperty.TRANSPORT_MODE, ""
- ), "http://my-connector/ids/data");
+ var assetJsonLd1 = getAssetJsonLd("my-asset-1", Map.of(
+ Prop.Mds.DATA_CATEGORY, "my-category-1",
+ Prop.Mds.TRANSPORT_MODE, "MY-TRANSPORT-MODE-1",
+ Prop.Mds.DATA_SUBCATEGORY, "MY-SUBCATEGORY-2",
+ Prop.Mds.DATA_MODEL, "my-data-model",
+ Prop.Mds.GEO_REFERENCE_METHOD, "my-geo-ref",
+ Prop.Dcterms.CREATOR, Map.of(
+ Prop.Foaf.NAME, "my-org"
+ )
+ ));
+
+ var assetJsonLd2 = getAssetJsonLd("my-asset-2", Map.of(
+ Prop.Mds.DATA_CATEGORY, "my-category-1",
+ Prop.Mds.TRANSPORT_MODE, "my-transport-mode-2",
+ Prop.Mds.DATA_SUBCATEGORY, "MY-SUBCATEGORY-2"
+ ));
+
+ var assetJsonLd3 = getAssetJsonLd("my-asset-3", Map.of(
+ Prop.Mds.DATA_CATEGORY, "my-category-1",
+ Prop.Mds.TRANSPORT_MODE, "MY-TRANSPORT-MODE-1",
+ Prop.Mds.DATA_SUBCATEGORY, "my-subcategory-1"
+ ));
+
+ var assetJsonLd4 = getAssetJsonLd("my-asset-4", Map.of(
+ Prop.Mds.DATA_CATEGORY, "my-category-1",
+ Prop.Mds.TRANSPORT_MODE, ""
+ ));
+ createConnector(dsl, today, "https://my-connector/api/dsp");
+ createDataOffer(dsl, today, "https://my-connector/api/dsp", assetJsonLd1);
+ createDataOffer(dsl, today, "https://my-connector/api/dsp", assetJsonLd2);
+ createDataOffer(dsl, today, "https://my-connector/api/dsp", assetJsonLd3);
+ createDataOffer(dsl, today, "https://my-connector/api/dsp", assetJsonLd4);
var result = brokerServerClient().brokerServerApi().catalogPage(new CatalogPageQuery());
@@ -258,11 +253,12 @@ void testAvailableFilters_noFilter() {
.extracting(CnfFilterAttribute::getId)
.containsExactly(
"dataSpace",
- AssetProperty.DATA_CATEGORY,
- AssetProperty.DATA_SUBCATEGORY,
- AssetProperty.DATA_MODEL,
- AssetProperty.TRANSPORT_MODE,
- AssetProperty.GEO_REFERENCE_METHOD,
+ "dataCategory",
+ "dataSubcategory",
+ "dataModel",
+ "transportMode",
+ "geoReferenceMethod",
+ "curatorOrganizationName",
"connectorEndpoint"
);
@@ -275,28 +271,41 @@ void testAvailableFilters_noFilter() {
"Data Model",
"Transport Mode",
"Geo Reference Method",
+ "Organization Name",
"Connector"
);
- var dataCategory = getAvailableFilter(result, AssetProperty.DATA_CATEGORY);
- assertThat(dataCategory.getTitle()).isEqualTo("Data Category");
+ var dataSpace = getAvailableFilter(result, "dataSpace");
+ assertThat(dataSpace.getValues()).extracting(CnfFilterItem::getId).containsExactly("MDS");
+ assertThat(dataSpace.getValues()).extracting(CnfFilterItem::getTitle).containsExactly("MDS");
+
+ var dataCategory = getAvailableFilter(result, "dataCategory");
assertThat(dataCategory.getValues()).extracting(CnfFilterItem::getId).containsExactly("my-category-1");
assertThat(dataCategory.getValues()).extracting(CnfFilterItem::getTitle).containsExactly("my-category-1");
- var transportMode = getAvailableFilter(result, AssetProperty.TRANSPORT_MODE);
- assertThat(transportMode.getTitle()).isEqualTo("Transport Mode");
+ var dataSubcategory = getAvailableFilter(result, "dataSubcategory");
+ assertThat(dataSubcategory.getValues()).extracting(CnfFilterItem::getId).containsExactly("my-subcategory-1", "MY-SUBCATEGORY-2", "");
+ assertThat(dataSubcategory.getValues()).extracting(CnfFilterItem::getTitle).containsExactly("my-subcategory-1", "MY-SUBCATEGORY-2", "");
+
+ var dataModel = getAvailableFilter(result, "dataModel");
+ assertThat(dataModel.getValues()).extracting(CnfFilterItem::getId).containsExactly("my-data-model", "");
+ assertThat(dataModel.getValues()).extracting(CnfFilterItem::getTitle).containsExactly("my-data-model", "");
+
+ var transportMode = getAvailableFilter(result, "transportMode");
assertThat(transportMode.getValues()).extracting(CnfFilterItem::getId).containsExactly("MY-TRANSPORT-MODE-1", "my-transport-mode-2", "");
assertThat(transportMode.getValues()).extracting(CnfFilterItem::getTitle).containsExactly("MY-TRANSPORT-MODE-1", "my-transport-mode-2", "");
- var dataSubcategory = getAvailableFilter(result, AssetProperty.DATA_SUBCATEGORY);
- assertThat(dataSubcategory.getTitle()).isEqualTo("Data Subcategory");
- assertThat(dataSubcategory.getValues()).extracting(CnfFilterItem::getId).containsExactly("my-subcategory-1", "MY-SUBCATEGORY-2", "");
- assertThat(dataSubcategory.getValues()).extracting(CnfFilterItem::getTitle).containsExactly("my-subcategory-1", "MY-SUBCATEGORY-2", "");
+ var geoReferenceMethod = getAvailableFilter(result, "geoReferenceMethod");
+ assertThat(geoReferenceMethod.getValues()).extracting(CnfFilterItem::getId).containsExactly("my-geo-ref", "");
+ assertThat(geoReferenceMethod.getValues()).extracting(CnfFilterItem::getTitle).containsExactly("my-geo-ref", "");
+
+ var curatorOrganizationName = getAvailableFilter(result, "curatorOrganizationName");
+ assertThat(curatorOrganizationName.getValues()).extracting(CnfFilterItem::getId).containsExactly("my-org", "my-participant-id"); // second value comes from tests mocking
+ assertThat(curatorOrganizationName.getValues()).extracting(CnfFilterItem::getTitle).containsExactly("my-org", "my-participant-id");
var connectorEndpoint = getAvailableFilter(result, "connectorEndpoint");
- assertThat(connectorEndpoint.getTitle()).isEqualTo("Connector");
- assertThat(connectorEndpoint.getValues()).extracting(CnfFilterItem::getId).containsExactly("http://my-connector/ids/data");
- assertThat(connectorEndpoint.getValues()).extracting(CnfFilterItem::getTitle).containsExactly("http://my-connector/ids/data");
+ assertThat(connectorEndpoint.getValues()).extracting(CnfFilterItem::getId).containsExactly("https://my-connector/api/dsp");
+ assertThat(connectorEndpoint.getValues()).extracting(CnfFilterItem::getTitle).containsExactly("https://my-connector/api/dsp");
});
}
@@ -312,11 +321,10 @@ void testSearchCaseInsensitive() {
// arrange
var today = OffsetDateTime.now().withNano(0);
- createConnector(dsl, today, "http://my-connector/ids/data");
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "123",
- AssetProperty.ASSET_NAME, "Hello"
- ), "http://my-connector/ids/data");
+ var assetJsonLd = getAssetJsonLd("123", Map.of(Prop.Dcterms.TITLE, "Hello"));
+
+ createConnector(dsl, today, "https://my-connector/api/dsp");
+ createDataOffer(dsl, today, "https://my-connector/api/dsp", assetJsonLd);
// act
@@ -341,34 +349,31 @@ void testAvailableFilters_withFilter() {
// arrange
var today = OffsetDateTime.now().withNano(0);
- createConnector(dsl, today, "http://my-connector/ids/data");
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset-1",
- AssetProperty.DATA_CATEGORY, "my-category",
- AssetProperty.DATA_SUBCATEGORY, "my-subcategory"
- ), "http://my-connector/ids/data");
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset-2",
- AssetProperty.DATA_SUBCATEGORY, "my-other-subcategory"
- ), "http://my-connector/ids/data");
+ var assetJsonLd1 = getAssetJsonLd("my-asset-1", Map.of(
+ Prop.Mds.DATA_CATEGORY, "my-category",
+ Prop.Mds.DATA_SUBCATEGORY, "my-subcategory"
+ ));
+
+ var assetJsonLd2 = getAssetJsonLd("my-asset-2", Map.of(
+ Prop.Mds.DATA_SUBCATEGORY, "my-other-subcategory"
+ ));
+ createConnector(dsl, today, "https://my-connector/api/dsp");
+ createDataOffer(dsl, today, "https://my-connector/api/dsp", assetJsonLd1);
+ createDataOffer(dsl, today, "https://my-connector/api/dsp", assetJsonLd2);
var query = new CatalogPageQuery();
query.setFilter(new CnfFilterValue(List.of(
- new CnfFilterValueAttribute(AssetProperty.DATA_CATEGORY, List.of(""))
+ new CnfFilterValueAttribute("dataCategory", List.of(""))
)));
var result = brokerServerClient().brokerServerApi().catalogPage(query);
- var dataCategory = getAvailableFilter(result, AssetProperty.DATA_CATEGORY);
- assertThat(dataCategory.getId()).isEqualTo(AssetProperty.DATA_CATEGORY);
- assertThat(dataCategory.getTitle()).isEqualTo("Data Category");
+ var dataCategory = getAvailableFilter(result, "dataCategory");
assertThat(dataCategory.getValues()).extracting(CnfFilterItem::getId).containsExactly("my-category", "");
assertThat(dataCategory.getValues()).extracting(CnfFilterItem::getTitle).containsExactly("my-category", "");
- var dataSubcategory = getAvailableFilter(result, AssetProperty.DATA_SUBCATEGORY);
- assertThat(dataSubcategory.getId()).isEqualTo(AssetProperty.DATA_SUBCATEGORY);
- assertThat(dataSubcategory.getTitle()).isEqualTo("Data Subcategory");
+ var dataSubcategory = getAvailableFilter(result, "dataSubcategory");
assertThat(dataSubcategory.getValues()).extracting(CnfFilterItem::getId).containsExactly("my-other-subcategory");
assertThat(dataSubcategory.getValues()).extracting(CnfFilterItem::getTitle).containsExactly("my-other-subcategory");
});
@@ -380,14 +385,9 @@ void testPagination_firstPage() {
// arrange
var today = OffsetDateTime.now().withNano(0);
- createConnector(dsl, today, "http://my-connector/ids/data");
- range(0, 15).forEach(i -> createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset-%d".formatted(i)
- ), "http://my-connector/ids/data"));
- range(0, 15).forEach(i -> createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:some-other-asset-%d".formatted(i)
- ), "http://my-connector/ids/data"));
-
+ createConnector(dsl, today, "https://my-connector/api/dsp");
+ range(0, 15).forEach(i -> createDataOffer(dsl, today, "https://my-connector/api/dsp", getAssetJsonLd("my-asset-%d".formatted(i))));
+ range(0, 15).forEach(i -> createDataOffer(dsl, today, "https://my-connector/api/dsp", getAssetJsonLd("some-other-asset-%d".formatted(i))));
var query = new CatalogPageQuery();
query.setSearchQuery("my-asset");
@@ -395,7 +395,7 @@ void testPagination_firstPage() {
var result = brokerServerClient().brokerServerApi().catalogPage(query);
assertThat(result.getDataOffers()).extracting(CatalogDataOffer::getAssetId)
- .isEqualTo(range(0, 10).mapToObj("urn:artifact:my-asset-%d"::formatted).toList());
+ .isEqualTo(range(0, 10).mapToObj("my-asset-%d"::formatted).toList());
var actual = result.getPaginationMetadata();
assertThat(actual.getPageOneBased()).isEqualTo(1);
@@ -411,13 +411,9 @@ void testPagination_secondPage() {
// arrange
var today = OffsetDateTime.now().withNano(0);
- createConnector(dsl, today, "http://my-connector/ids/data");
- range(0, 15).forEach(i -> createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset-%d".formatted(i)
- ), "http://my-connector/ids/data"));
- range(0, 15).forEach(i -> createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:some-other-asset-%d".formatted(i)
- ), "http://my-connector/ids/data"));
+ createConnector(dsl, today, "https://my-connector/api/dsp");
+ range(0, 15).forEach(i -> createDataOffer(dsl, today, "https://my-connector/api/dsp", getAssetJsonLd("my-asset-%d".formatted(i))));
+ range(0, 15).forEach(i -> createDataOffer(dsl, today, "https://my-connector/api/dsp", getAssetJsonLd("some-other-asset-%d".formatted(i))));
var query = new CatalogPageQuery();
@@ -428,7 +424,7 @@ void testPagination_secondPage() {
var result = brokerServerClient().brokerServerApi().catalogPage(query);
assertThat(result.getDataOffers()).extracting(CatalogDataOffer::getAssetId)
- .isEqualTo(range(10, 15).mapToObj("urn:artifact:my-asset-%d"::formatted).toList());
+ .isEqualTo(range(10, 15).mapToObj("my-asset-%d"::formatted).toList());
var actual = result.getPaginationMetadata();
assertThat(actual.getPageOneBased()).isEqualTo(2);
@@ -444,14 +440,14 @@ void testSortingByPopularity() {
// arrange
var today = OffsetDateTime.now().withNano(0);
- var endpoint = "http://my-connector/ids/data";
+ var endpoint = "https://my-connector/api/dsp";
createConnector(dsl, today, endpoint);
- createDataOffer(dsl, today, Map.of(AssetProperty.ASSET_ID, "urn:artifact:asset-1"), endpoint);
- createDataOffer(dsl, today, Map.of(AssetProperty.ASSET_ID, "urn:artifact:asset-2"), endpoint);
- createDataOffer(dsl, today, Map.of(AssetProperty.ASSET_ID, "urn:artifact:asset-3"), endpoint);
+ createDataOffer(dsl, today, endpoint, getAssetJsonLd("asset-1"));
+ createDataOffer(dsl, today, endpoint, getAssetJsonLd("asset-2"));
+ createDataOffer(dsl, today, endpoint, getAssetJsonLd("asset-3"));
- range(0, 3).forEach(i -> dataOfferDetails(endpoint, "urn:artifact:asset-1"));
- range(0, 5).forEach(i -> dataOfferDetails(endpoint, "urn:artifact:asset-2"));
+ range(0, 3).forEach(i -> dataOfferDetails(endpoint, "asset-1"));
+ range(0, 5).forEach(i -> dataOfferDetails(endpoint, "asset-2"));
var query = new CatalogPageQuery();
@@ -459,27 +455,25 @@ void testSortingByPopularity() {
var result = brokerServerClient().brokerServerApi().catalogPage(query);
assertThat(result.getDataOffers()).extracting(CatalogDataOffer::getAssetId).containsExactly(
- "urn:artifact:asset-2",
- "urn:artifact:asset-1",
- "urn:artifact:asset-3"
+ "asset-2",
+ "asset-1",
+ "asset-3"
);
});
}
- private void createDataOffer(DSLContext dsl, OffsetDateTime today, Map assetProperties, String connectorEndpoint) {
+ private void createDataOffer(DSLContext dsl, OffsetDateTime today, String connectorEndpoint, JsonObject assetJsonLd) {
var dataOffer = dsl.newRecord(Tables.DATA_OFFER);
- dataOffer.setAssetId(assetProperties.get(AssetProperty.ASSET_ID));
- dataOffer.setAssetName(assetProperties.getOrDefault(AssetProperty.ASSET_NAME, dataOffer.getAssetId()));
- dataOffer.setAssetProperties(JSONB.jsonb(assetProperties(assetProperties)));
+ setDataOfferAssetMetadata(dataOffer, assetJsonLd, "my-participant-id");
dataOffer.setConnectorEndpoint(connectorEndpoint);
dataOffer.setCreatedAt(today.minusDays(5));
dataOffer.setUpdatedAt(today);
dataOffer.insert();
- var contractOffer = dsl.newRecord(Tables.DATA_OFFER_CONTRACT_OFFER);
+ var contractOffer = dsl.newRecord(Tables.CONTRACT_OFFER);
contractOffer.setContractOfferId("my-contract-offer-1");
contractOffer.setConnectorEndpoint(connectorEndpoint);
- contractOffer.setAssetId(assetProperties.get(AssetProperty.ASSET_ID));
+ contractOffer.setAssetId(dataOffer.getAssetId());
contractOffer.setCreatedAt(today.minusDays(5));
contractOffer.setUpdatedAt(today);
contractOffer.setPolicy(JSONB.jsonb(policyToJson(dummyPolicy())));
@@ -488,7 +482,7 @@ private void createDataOffer(DSLContext dsl, OffsetDateTime today, Map assetProperties) {
- return new ObjectMapper().writeValueAsString(assetProperties);
- }
}
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/ConnectorApiTest.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/ConnectorApiTest.java
index 1436ffd18..c567728af 100644
--- a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/ConnectorApiTest.java
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/ConnectorApiTest.java
@@ -14,10 +14,9 @@
package de.sovity.edc.ext.brokerserver.services.api;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import de.sovity.edc.ext.brokerserver.TestPolicy;
import de.sovity.edc.ext.brokerserver.client.gen.model.ConnectorDetailPageQuery;
import de.sovity.edc.ext.brokerserver.client.gen.model.ConnectorPageQuery;
-import de.sovity.edc.ext.brokerserver.dao.AssetProperty;
import de.sovity.edc.ext.brokerserver.db.TestDatabase;
import de.sovity.edc.ext.brokerserver.db.TestDatabaseFactory;
import de.sovity.edc.ext.brokerserver.db.jooq.Tables;
@@ -27,12 +26,11 @@
import de.sovity.edc.ext.brokerserver.db.jooq.enums.MeasurementErrorStatus;
import de.sovity.edc.ext.brokerserver.db.jooq.enums.MeasurementType;
import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.ConnectorRecord;
-import lombok.SneakyThrows;
+import de.sovity.edc.utils.jsonld.vocab.Prop;
+import jakarta.json.JsonObject;
import org.eclipse.edc.junit.annotations.ApiTest;
import org.eclipse.edc.junit.extensions.EdcExtension;
-import org.eclipse.edc.policy.model.Policy;
import org.jooq.DSLContext;
-import org.jooq.JSONB;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -41,9 +39,10 @@
import java.time.OffsetDateTime;
import java.util.Map;
-import static de.sovity.edc.ext.brokerserver.TestUtils.createConfiguration;
+import static de.sovity.edc.ext.brokerserver.TestAsset.getAssetJsonLd;
+import static de.sovity.edc.ext.brokerserver.TestAsset.setDataOfferAssetMetadata;
import static de.sovity.edc.ext.brokerserver.TestUtils.brokerServerClient;
-import static groovy.json.JsonOutput.toJson;
+import static de.sovity.edc.ext.brokerserver.TestUtils.createConfiguration;
import static org.assertj.core.api.Assertions.assertThat;
@ApiTest
@@ -55,8 +54,7 @@ class ConnectorApiTest {
@BeforeEach
void setUp(EdcExtension extension) {
- extension.setConfiguration(createConfiguration(TEST_DATABASE, Map.of(
- )));
+ extension.setConfiguration(createConfiguration(TEST_DATABASE, Map.of()));
}
@Test
@@ -64,22 +62,24 @@ void testQueryConnectors() {
TEST_DATABASE.testTransaction(dsl -> {
var today = OffsetDateTime.now().withNano(0);
- createConnector(dsl, today, "http://my-connector/ids/data");
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset-1",
- AssetProperty.DATA_CATEGORY, "my-category",
- AssetProperty.ASSET_NAME, "My Asset 1"
- ), "http://my-connector/ids/data");
+ var assetJsonLd = getAssetJsonLd("my-asset-1", Map.of(
+ Prop.Mds.DATA_CATEGORY, "my-category",
+ Prop.Dcterms.TITLE, "My Asset 1"
+ ));
+
+ createConnector(dsl, today, "https://my-connector/api/dsp");
+ createDataOffer(dsl, today, "https://my-connector/api/dsp", assetJsonLd);
var result = brokerServerClient().brokerServerApi().connectorPage(new ConnectorPageQuery());
assertThat(result.getConnectors()).hasSize(1);
var connector = result.getConnectors().get(0);
- assertThat(connector.getId()).isEqualTo("http://my-connector/ids/data");
- assertThat(connector.getEndpoint()).isEqualTo("http://my-connector/ids/data");
+ assertThat(connector.getParticipantId()).isEqualTo("my-participant-id");
+ assertThat(connector.getEndpoint()).isEqualTo("https://my-connector/api/dsp");
assertThat(connector.getCreatedAt()).isEqualTo(today.minusDays(1));
assertThat(connector.getLastRefreshAttemptAt()).isEqualTo(today);
assertThat(connector.getLastSuccessfulRefreshAt()).isEqualTo(today);
+ assertThat(connector.getNumDataOffers()).isEqualTo(1);
});
}
@@ -88,17 +88,18 @@ void testQueryConnectorDetails() {
TEST_DATABASE.testTransaction(dsl -> {
var today = OffsetDateTime.now().withNano(0);
- createConnector(dsl, today, "http://my-connector/ids/data");
- createConnector(dsl, today, "http://my-connector2/ids/data");
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset-1",
- AssetProperty.DATA_CATEGORY, "my-category",
- AssetProperty.ASSET_NAME, "My Asset 1"
- ), "http://my-connector/ids/data");
-
- var connector = brokerServerClient().brokerServerApi().connectorDetailPage(new ConnectorDetailPageQuery("http://my-connector/ids/data"));
- assertThat(connector.getId()).isEqualTo("http://my-connector/ids/data");
- assertThat(connector.getEndpoint()).isEqualTo("http://my-connector/ids/data");
+ var assetJsonLd = getAssetJsonLd("my-asset-1", Map.of(
+ Prop.Mds.DATA_CATEGORY, "my-category",
+ Prop.Dcterms.TITLE, "My Asset 1"
+ ));
+
+ createConnector(dsl, today, "https://my-connector/api/dsp");
+ createConnector(dsl, today, "https://my-connector2/api/dsp");
+ createDataOffer(dsl, today, "https://my-connector/api/dsp", assetJsonLd);
+
+ var connector = brokerServerClient().brokerServerApi().connectorDetailPage(new ConnectorDetailPageQuery("https://my-connector/api/dsp"));
+ assertThat(connector.getParticipantId()).isEqualTo("my-participant-id");
+ assertThat(connector.getEndpoint()).isEqualTo("https://my-connector/api/dsp");
assertThat(connector.getCreatedAt()).isEqualTo(today.minusDays(1));
assertThat(connector.getLastRefreshAttemptAt()).isEqualTo(today);
assertThat(connector.getLastSuccessfulRefreshAt()).isEqualTo(today);
@@ -108,7 +109,7 @@ void testQueryConnectorDetails() {
private void createConnector(DSLContext dsl, OffsetDateTime today, String connectorEndpoint) {
var connector = dsl.newRecord(Tables.CONNECTOR);
- connector.setConnectorId(connectorEndpoint);
+ connector.setParticipantId("my-participant-id");
connector.setEndpoint(connectorEndpoint);
connector.setOnlineStatus(ConnectorOnlineStatus.ONLINE);
connector.setCreatedAt(today.minusDays(1));
@@ -132,38 +133,21 @@ private static void addCrawlingTime(DSLContext dsl, OffsetDateTime today, Connec
crawlingTime.insert();
}
- private void createDataOffer(DSLContext dsl, OffsetDateTime today, Map assetProperties, String connectorEndpoint) {
+ private void createDataOffer(DSLContext dsl, OffsetDateTime today, String connectorEndpoint, JsonObject assetJsonLd) {
var dataOffer = dsl.newRecord(Tables.DATA_OFFER);
- dataOffer.setAssetId(assetProperties.get(AssetProperty.ASSET_ID));
- dataOffer.setAssetName(assetProperties.getOrDefault(AssetProperty.ASSET_NAME, dataOffer.getAssetId()));
- dataOffer.setAssetProperties(JSONB.jsonb(assetProperties(assetProperties)));
+ setDataOfferAssetMetadata(dataOffer, assetJsonLd, "my-participant-id");
dataOffer.setConnectorEndpoint(connectorEndpoint);
dataOffer.setCreatedAt(today.minusDays(5));
dataOffer.setUpdatedAt(today);
dataOffer.insert();
- var contractOffer = dsl.newRecord(Tables.DATA_OFFER_CONTRACT_OFFER);
+ var contractOffer = dsl.newRecord(Tables.CONTRACT_OFFER);
contractOffer.setContractOfferId("my-contract-offer-1");
contractOffer.setConnectorEndpoint(connectorEndpoint);
- contractOffer.setAssetId(assetProperties.get(AssetProperty.ASSET_ID));
+ contractOffer.setAssetId(dataOffer.getAssetId());
contractOffer.setCreatedAt(today.minusDays(5));
contractOffer.setUpdatedAt(today);
- contractOffer.setPolicy(JSONB.jsonb(policyToJson(dummyPolicy())));
+ contractOffer.setPolicy(TestPolicy.createAfterYesterdayPolicyJson());
contractOffer.insert();
}
-
- private Policy dummyPolicy() {
- return Policy.Builder.newInstance()
- .assignee("Example Assignee")
- .build();
- }
-
- private String policyToJson(Policy policy) {
- return toJson(policy);
- }
-
- @SneakyThrows
- private String assetProperties(Map assetProperties) {
- return new ObjectMapper().writeValueAsString(assetProperties);
- }
}
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/DataOfferCountApiTest.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/DataOfferCountApiTest.java
index 053c14c6d..722ee6747 100644
--- a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/DataOfferCountApiTest.java
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/DataOfferCountApiTest.java
@@ -14,20 +14,18 @@
package de.sovity.edc.ext.brokerserver.services.api;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import de.sovity.edc.ext.brokerserver.dao.AssetProperty;
+import de.sovity.edc.ext.brokerserver.TestPolicy;
import de.sovity.edc.ext.brokerserver.db.TestDatabase;
import de.sovity.edc.ext.brokerserver.db.TestDatabaseFactory;
import de.sovity.edc.ext.brokerserver.db.jooq.Tables;
import de.sovity.edc.ext.brokerserver.db.jooq.enums.ConnectorContractOffersExceeded;
import de.sovity.edc.ext.brokerserver.db.jooq.enums.ConnectorDataOffersExceeded;
import de.sovity.edc.ext.brokerserver.db.jooq.enums.ConnectorOnlineStatus;
-import lombok.SneakyThrows;
+import de.sovity.edc.ext.wrapper.api.common.mappers.utils.AssetJsonLdUtils;
import org.eclipse.edc.junit.annotations.ApiTest;
import org.eclipse.edc.junit.extensions.EdcExtension;
import org.eclipse.edc.policy.model.Policy;
import org.jooq.DSLContext;
-import org.jooq.JSONB;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -37,6 +35,8 @@
import java.util.Arrays;
import java.util.Map;
+import static de.sovity.edc.ext.brokerserver.TestAsset.getAssetJsonLd;
+import static de.sovity.edc.ext.brokerserver.TestAsset.setDataOfferAssetMetadata;
import static de.sovity.edc.ext.brokerserver.TestUtils.brokerServerClient;
import static de.sovity.edc.ext.brokerserver.TestUtils.createConfiguration;
import static groovy.json.JsonOutput.toJson;
@@ -88,7 +88,7 @@ void testCountByEndpoints() {
private void createConnector(DSLContext dsl, OffsetDateTime today, int iConnector) {
var connector = dsl.newRecord(Tables.CONNECTOR);
- connector.setConnectorId("https://my-connector");
+ connector.setParticipantId("my-connector");
connector.setEndpoint(getEndpoint(iConnector));
connector.setOnlineStatus(ConnectorOnlineStatus.ONLINE);
connector.setCreatedAt(today.minusDays(1));
@@ -105,26 +105,22 @@ private String getEndpoint(int iConnector) {
private void createDataOffer(DSLContext dsl, OffsetDateTime today, int iConnector, int iDataOffer) {
var connectorEndpoint = getEndpoint(iConnector);
- var assetProperties = Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset-%d".formatted(iDataOffer)
- );
+ var assetJsonLd = getAssetJsonLd("my-asset-%d".formatted(iDataOffer));
var dataOffer = dsl.newRecord(Tables.DATA_OFFER);
- dataOffer.setAssetId(assetProperties.get(AssetProperty.ASSET_ID));
- dataOffer.setAssetName(assetProperties.getOrDefault(AssetProperty.ASSET_NAME, dataOffer.getAssetId()));
- dataOffer.setAssetProperties(JSONB.jsonb(assetProperties(assetProperties)));
+ setDataOfferAssetMetadata(dataOffer, assetJsonLd, "my-participant-id");
dataOffer.setConnectorEndpoint(connectorEndpoint);
dataOffer.setCreatedAt(today.minusDays(5));
dataOffer.setUpdatedAt(today);
dataOffer.insert();
- var contractOffer = dsl.newRecord(Tables.DATA_OFFER_CONTRACT_OFFER);
+ var contractOffer = dsl.newRecord(Tables.CONTRACT_OFFER);
contractOffer.setContractOfferId("my-contract-offer-1");
contractOffer.setConnectorEndpoint(connectorEndpoint);
- contractOffer.setAssetId(assetProperties.get(AssetProperty.ASSET_ID));
+ contractOffer.setAssetId(dataOffer.getAssetId());
contractOffer.setCreatedAt(today.minusDays(5));
contractOffer.setUpdatedAt(today);
- contractOffer.setPolicy(JSONB.jsonb(policyToJson(dummyPolicy())));
+ contractOffer.setPolicy(TestPolicy.createAfterYesterdayPolicyJson());
contractOffer.insert();
}
@@ -137,9 +133,4 @@ private Policy dummyPolicy() {
private String policyToJson(Policy policy) {
return toJson(policy);
}
-
- @SneakyThrows
- private String assetProperties(Map assetProperties) {
- return new ObjectMapper().writeValueAsString(assetProperties);
- }
}
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/DataOfferDetailApiTest.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/DataOfferDetailApiTest.java
index 44e72ded3..299742ba7 100644
--- a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/DataOfferDetailApiTest.java
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/DataOfferDetailApiTest.java
@@ -14,22 +14,19 @@
package de.sovity.edc.ext.brokerserver.services.api;
-import com.fasterxml.jackson.databind.ObjectMapper;
import de.sovity.edc.ext.brokerserver.client.gen.model.DataOfferDetailPageQuery;
import de.sovity.edc.ext.brokerserver.client.gen.model.DataOfferDetailPageResult;
-import de.sovity.edc.ext.brokerserver.dao.AssetProperty;
import de.sovity.edc.ext.brokerserver.db.TestDatabase;
import de.sovity.edc.ext.brokerserver.db.TestDatabaseFactory;
import de.sovity.edc.ext.brokerserver.db.jooq.Tables;
import de.sovity.edc.ext.brokerserver.db.jooq.enums.ConnectorContractOffersExceeded;
import de.sovity.edc.ext.brokerserver.db.jooq.enums.ConnectorDataOffersExceeded;
import de.sovity.edc.ext.brokerserver.db.jooq.enums.ConnectorOnlineStatus;
-import lombok.SneakyThrows;
+import de.sovity.edc.utils.jsonld.vocab.Prop;
+import jakarta.json.JsonObject;
import org.eclipse.edc.junit.annotations.ApiTest;
import org.eclipse.edc.junit.extensions.EdcExtension;
-import org.eclipse.edc.policy.model.Policy;
import org.jooq.DSLContext;
-import org.jooq.JSONB;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -38,10 +35,13 @@
import java.time.OffsetDateTime;
import java.util.Map;
-import static de.sovity.edc.ext.brokerserver.AssertionUtils.assertEqualJson;
-import static de.sovity.edc.ext.brokerserver.TestUtils.createConfiguration;
+import static de.sovity.edc.ext.brokerserver.AssertionUtils.assertEqualUsingJson;
+import static de.sovity.edc.ext.brokerserver.TestAsset.getAssetJsonLd;
+import static de.sovity.edc.ext.brokerserver.TestAsset.setDataOfferAssetMetadata;
+import static de.sovity.edc.ext.brokerserver.TestPolicy.createAfterYesterdayConstraint;
+import static de.sovity.edc.ext.brokerserver.TestPolicy.createAfterYesterdayPolicyJson;
import static de.sovity.edc.ext.brokerserver.TestUtils.brokerServerClient;
-import static groovy.json.JsonOutput.toJson;
+import static de.sovity.edc.ext.brokerserver.TestUtils.createConfiguration;
import static org.assertj.core.api.Assertions.assertThat;
@ApiTest
@@ -62,48 +62,39 @@ void testQueryDataOfferDetails() {
TEST_DATABASE.testTransaction(dsl -> {
var today = OffsetDateTime.now().withNano(0);
- createConnector(dsl, today, "http://my-connector2/ids/data");
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset-2",
- AssetProperty.DATA_CATEGORY, "my-category2",
- AssetProperty.ASSET_NAME, "My Asset 2"
- ), "http://my-connector2/ids/data");
-
- createConnector(dsl, today, "http://my-connector/ids/data");
- createDataOffer(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset-1",
- AssetProperty.DATA_CATEGORY, "my-category",
- AssetProperty.ASSET_NAME, "My Asset 1"
- ), "http://my-connector/ids/data");
-
- //create view for dataoffer
- createDataOfferView(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset-1",
- AssetProperty.DATA_CATEGORY, "my-category",
- AssetProperty.ASSET_NAME, "My Asset 1"
- ), "http://my-connector/ids/data");
- createDataOfferView(dsl, today, Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset-1",
- AssetProperty.DATA_CATEGORY, "my-category",
- AssetProperty.ASSET_NAME, "My Asset 1"
- ), "http://my-connector/ids/data");
-
- var actual = brokerServerClient().brokerServerApi().dataOfferDetailPage(new DataOfferDetailPageQuery("http://my-connector/ids/data", "urn:artifact:my-asset-1"));
- assertThat(actual.getAssetId()).isEqualTo("urn:artifact:my-asset-1");
- assertThat(actual.getConnectorEndpoint()).isEqualTo("http://my-connector/ids/data");
+ var assetJsonLd1 = getAssetJsonLd("my-asset-1", Map.of(
+ Prop.Mds.DATA_CATEGORY, "my-category",
+ Prop.Dcterms.TITLE, "My Asset 1"
+ ));
+
+ var assetJsonLd2 = getAssetJsonLd("my-asset-2", Map.of(
+ Prop.Mds.DATA_CATEGORY, "my-category-2",
+ Prop.Dcterms.TITLE, "My Asset 2"
+ ));
+
+ createConnector(dsl, today, "https://my-connector/api/dsp");
+ createDataOffer(dsl, today, "https://my-connector/api/dsp", assetJsonLd1);
+
+ createDataOfferView(dsl, today, "https://my-connector/api/dsp", "my-asset-1");
+ createDataOfferView(dsl, today, "https://my-connector/api/dsp", "my-asset-1");
+
+ createConnector(dsl, today, "https://my-connector2/api/dsp");
+ createDataOffer(dsl, today, "https://my-connector2/api/dsp", assetJsonLd2);
+
+ var actual = brokerServerClient().brokerServerApi().dataOfferDetailPage(new DataOfferDetailPageQuery("https://my-connector/api/dsp", "my-asset-1"));
+ assertThat(actual.getAssetId()).isEqualTo("my-asset-1");
+ assertThat(actual.getConnectorEndpoint()).isEqualTo("https://my-connector/api/dsp");
assertThat(actual.getConnectorOfflineSinceOrLastUpdatedAt()).isEqualTo(today);
assertThat(actual.getConnectorOnlineStatus()).isEqualTo(DataOfferDetailPageResult.ConnectorOnlineStatusEnum.ONLINE);
assertThat(actual.getCreatedAt()).isEqualTo(today.minusDays(5));
- assertThat(actual.getProperties()).isEqualTo(Map.of(
- AssetProperty.ASSET_ID, "urn:artifact:my-asset-1",
- AssetProperty.DATA_CATEGORY, "my-category",
- AssetProperty.ASSET_NAME, "My Asset 1"
- ));
+ assertThat(actual.getAsset().getAssetId()).isEqualTo("my-asset-1");
+ assertThat(actual.getAsset().getDataCategory()).isEqualTo("my-category");
+ assertThat(actual.getAsset().getTitle()).isEqualTo("My Asset 1");
assertThat(actual.getUpdatedAt()).isEqualTo(today);
assertThat(actual.getContractOffers()).hasSize(1);
var contractOffer = actual.getContractOffers().get(0);
assertThat(contractOffer.getContractOfferId()).isEqualTo("my-contract-offer-1");
- assertEqualJson(contractOffer.getContractPolicy().getLegacyPolicy(), policyToJson(dummyPolicy()));
+ assertEqualUsingJson(contractOffer.getContractPolicy().getConstraints().get(0), createAfterYesterdayConstraint());
assertThat(contractOffer.getCreatedAt()).isEqualTo(today.minusDays(5));
assertThat(contractOffer.getUpdatedAt()).isEqualTo(today);
assertThat(actual.getViewCount()).isEqualTo(2);
@@ -112,7 +103,7 @@ void testQueryDataOfferDetails() {
private void createConnector(DSLContext dsl, OffsetDateTime today, String connectorEndpoint) {
var connector = dsl.newRecord(Tables.CONNECTOR);
- connector.setConnectorId("http://my-connector");
+ connector.setParticipantId("my-connector");
connector.setEndpoint(connectorEndpoint);
connector.setOnlineStatus(ConnectorOnlineStatus.ONLINE);
connector.setCreatedAt(today.minusDays(1));
@@ -123,46 +114,29 @@ private void createConnector(DSLContext dsl, OffsetDateTime today, String connec
connector.insert();
}
- private void createDataOffer(DSLContext dsl, OffsetDateTime today, Map assetProperties, String connectorEndpoint) {
+ private void createDataOffer(DSLContext dsl, OffsetDateTime today, String connectorEndpoint, JsonObject assetJsonLd) {
var dataOffer = dsl.newRecord(Tables.DATA_OFFER);
- dataOffer.setAssetId(assetProperties.get(AssetProperty.ASSET_ID));
- dataOffer.setAssetName(assetProperties.getOrDefault(AssetProperty.ASSET_NAME, dataOffer.getAssetId()));
- dataOffer.setAssetProperties(JSONB.jsonb(assetProperties(assetProperties)));
+ setDataOfferAssetMetadata(dataOffer, assetJsonLd, "my-participant-id");
dataOffer.setConnectorEndpoint(connectorEndpoint);
dataOffer.setCreatedAt(today.minusDays(5));
dataOffer.setUpdatedAt(today);
dataOffer.insert();
- var contractOffer = dsl.newRecord(Tables.DATA_OFFER_CONTRACT_OFFER);
+ var contractOffer = dsl.newRecord(Tables.CONTRACT_OFFER);
contractOffer.setContractOfferId("my-contract-offer-1");
contractOffer.setConnectorEndpoint(connectorEndpoint);
- contractOffer.setAssetId(assetProperties.get(AssetProperty.ASSET_ID));
+ contractOffer.setAssetId(dataOffer.getAssetId());
contractOffer.setCreatedAt(today.minusDays(5));
contractOffer.setUpdatedAt(today);
- contractOffer.setPolicy(JSONB.jsonb(policyToJson(dummyPolicy())));
+ contractOffer.setPolicy(createAfterYesterdayPolicyJson());
contractOffer.insert();
}
- private static void createDataOfferView(DSLContext dsl, OffsetDateTime date, Map assetProperties, String connectorEndpoint) {
+ private static void createDataOfferView(DSLContext dsl, OffsetDateTime date, String connectorEndpoint, String assetId) {
var view = dsl.newRecord(Tables.DATA_OFFER_VIEW_COUNT);
- view.setAssetId(assetProperties.get(AssetProperty.ASSET_ID));
+ view.setAssetId(assetId);
view.setConnectorEndpoint(connectorEndpoint);
view.setDate(date);
view.insert();
}
-
- private Policy dummyPolicy() {
- return Policy.Builder.newInstance()
- .assignee("Example Assignee")
- .build();
- }
-
- private String policyToJson(Policy policy) {
- return toJson(policy);
- }
-
- @SneakyThrows
- private String assetProperties(Map assetProperties) {
- return new ObjectMapper().writeValueAsString(assetProperties);
- }
}
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/DeleteConnectorsApiTest.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/DeleteConnectorsApiTest.java
index 21c57b658..fb6ba3aca 100644
--- a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/DeleteConnectorsApiTest.java
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/api/DeleteConnectorsApiTest.java
@@ -14,6 +14,7 @@
package de.sovity.edc.ext.brokerserver.services.api;
+import de.sovity.edc.ext.brokerserver.TestPolicy;
import de.sovity.edc.ext.brokerserver.TestUtils;
import de.sovity.edc.ext.brokerserver.client.BrokerServerClient;
import de.sovity.edc.ext.brokerserver.client.gen.model.ConnectorListEntry;
@@ -28,9 +29,7 @@
import org.eclipse.edc.junit.annotations.ApiTest;
import org.eclipse.edc.junit.extensions.EdcExtension;
import org.jooq.DSLContext;
-import org.jooq.JSONB;
import org.jooq.Record;
-import org.jooq.Record1;
import org.jooq.TableField;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -42,6 +41,8 @@
import java.util.List;
import java.util.Map;
+import static de.sovity.edc.ext.brokerserver.TestAsset.getAssetJsonLd;
+import static de.sovity.edc.ext.brokerserver.TestAsset.setDataOfferAssetMetadata;
import static de.sovity.edc.ext.brokerserver.TestUtils.ADMIN_API_KEY;
import static de.sovity.edc.ext.brokerserver.TestUtils.brokerServerClient;
import static de.sovity.edc.ext.brokerserver.TestUtils.createConfiguration;
@@ -72,7 +73,7 @@ void testRemoveConnectors() {
var connectorsBefore = List.of(firstConnector, otherConnector);
assertContainsEndpoints(dsl, Tables.BROKER_EXECUTION_TIME_MEASUREMENT.CONNECTOR_ENDPOINT, connectorsBefore);
- assertContainsEndpoints(dsl, Tables.DATA_OFFER_CONTRACT_OFFER.CONNECTOR_ENDPOINT, connectorsBefore);
+ assertContainsEndpoints(dsl, Tables.CONTRACT_OFFER.CONNECTOR_ENDPOINT, connectorsBefore);
assertContainsEndpoints(dsl, Tables.DATA_OFFER.CONNECTOR_ENDPOINT, connectorsBefore);
assertContainsEndpoints(dsl, Tables.DATA_OFFER_VIEW_COUNT.CONNECTOR_ENDPOINT, connectorsBefore);
assertContainsEndpoints(dsl, Tables.CONNECTOR.ENDPOINT, connectorsBefore);
@@ -87,7 +88,7 @@ void testRemoveConnectors() {
var connectorsAfter = List.of(otherConnector);
assertContainsEndpoints(dsl, Tables.BROKER_EXECUTION_TIME_MEASUREMENT.CONNECTOR_ENDPOINT, connectorsAfter);
- assertContainsEndpoints(dsl, Tables.DATA_OFFER_CONTRACT_OFFER.CONNECTOR_ENDPOINT, connectorsAfter);
+ assertContainsEndpoints(dsl, Tables.CONTRACT_OFFER.CONNECTOR_ENDPOINT, connectorsAfter);
assertContainsEndpoints(dsl, Tables.DATA_OFFER.CONNECTOR_ENDPOINT, connectorsAfter);
assertContainsEndpoints(dsl, Tables.DATA_OFFER_VIEW_COUNT.CONNECTOR_ENDPOINT, connectorsAfter);
assertContainsEndpoints(dsl, Tables.CONNECTOR.ENDPOINT, connectorsAfter);
@@ -109,20 +110,18 @@ public void setupConnectorData(DSLContext dsl, String endpoint) {
var assetId = "my-asset";
var dataOffer = dsl.newRecord(Tables.DATA_OFFER);
- dataOffer.setAssetId(assetId);
- dataOffer.setAssetName("My Asset");
- dataOffer.setAssetProperties(JSONB.valueOf("{}"));
+ setDataOfferAssetMetadata(dataOffer, getAssetJsonLd("my-asset"), "my-participant-id");
dataOffer.setConnectorEndpoint(endpoint);
dataOffer.setCreatedAt(OffsetDateTime.now());
dataOffer.setUpdatedAt(OffsetDateTime.now());
dataOffer.insert();
- var contractOffer = dsl.newRecord(Tables.DATA_OFFER_CONTRACT_OFFER);
+ var contractOffer = dsl.newRecord(Tables.CONTRACT_OFFER);
contractOffer.setAssetId(assetId);
contractOffer.setConnectorEndpoint(endpoint);
contractOffer.setContractOfferId("my-asset-co");
contractOffer.setCreatedAt(OffsetDateTime.now());
- contractOffer.setPolicy(JSONB.valueOf("{}"));
+ contractOffer.setPolicy(TestPolicy.createAfterYesterdayPolicyJson());
contractOffer.setUpdatedAt(OffsetDateTime.now());
contractOffer.insert();
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/logging/BrokerEventLoggerTest.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/logging/BrokerEventLoggerTest.java
index d93c33671..eee984c6f 100644
--- a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/logging/BrokerEventLoggerTest.java
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/logging/BrokerEventLoggerTest.java
@@ -42,7 +42,7 @@ void testDataOfferWriter_allSortsOfUpdates() {
var brokerEventLogger = new BrokerEventLogger();
// Test that insertions insert required fields and don't cause DB errors
- String endpoint = "https://example.com/ids/data";
+ String endpoint = "https://example.com/api/dsp";
brokerEventLogger.logConnectorUpdated(dsl, endpoint, new ConnectorChangeTracker());
brokerEventLogger.logConnectorOnline(dsl, endpoint);
brokerEventLogger.logConnectorOffline(dsl, endpoint, new BrokerEventErrorMessage("Message", "Stacktrace"));
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/ConnectorUpdaterTest.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/ConnectorUpdaterTest.java
index 3dcd46eaa..07ac1e531 100644
--- a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/ConnectorUpdaterTest.java
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/ConnectorUpdaterTest.java
@@ -14,184 +14,171 @@
package de.sovity.edc.ext.brokerserver.services.refreshing;
+import de.sovity.edc.client.EdcClient;
+import de.sovity.edc.client.gen.model.ContractDefinitionRequest;
+import de.sovity.edc.client.gen.model.PolicyDefinitionCreateRequest;
+import de.sovity.edc.client.gen.model.UiAssetCreateRequest;
+import de.sovity.edc.client.gen.model.UiCriterion;
+import de.sovity.edc.client.gen.model.UiCriterionLiteral;
+import de.sovity.edc.client.gen.model.UiCriterionLiteralType;
+import de.sovity.edc.client.gen.model.UiCriterionOperator;
+import de.sovity.edc.ext.brokerserver.AssertionUtils;
import de.sovity.edc.ext.brokerserver.BrokerServerExtensionContext;
import de.sovity.edc.ext.brokerserver.TestUtils;
-import de.sovity.edc.ext.brokerserver.dao.AssetProperty;
+import de.sovity.edc.ext.brokerserver.client.BrokerServerClient;
+import de.sovity.edc.ext.brokerserver.client.gen.model.CatalogPageQuery;
import de.sovity.edc.ext.brokerserver.db.TestDatabase;
import de.sovity.edc.ext.brokerserver.db.TestDatabaseFactory;
-import de.sovity.edc.ext.brokerserver.db.jooq.Tables;
-import de.sovity.edc.ext.brokerserver.db.jooq.enums.ConnectorOnlineStatus;
-import io.restassured.path.json.JsonPath;
-import org.eclipse.edc.connector.contract.spi.offer.store.ContractDefinitionStore;
-import org.eclipse.edc.connector.contract.spi.types.offer.ContractDefinition;
-import org.eclipse.edc.connector.policy.spi.PolicyDefinition;
-import org.eclipse.edc.connector.policy.spi.store.PolicyDefinitionStore;
-import org.eclipse.edc.connector.spi.asset.AssetService;
+import de.sovity.edc.utils.jsonld.vocab.Prop;
import org.eclipse.edc.junit.annotations.ApiTest;
import org.eclipse.edc.junit.extensions.EdcExtension;
-import org.eclipse.edc.policy.model.Policy;
-import org.eclipse.edc.spi.asset.AssetSelectorExpression;
-import org.eclipse.edc.spi.persistence.EdcPersistenceException;
-import org.eclipse.edc.spi.types.domain.DataAddress;
-import org.eclipse.edc.spi.types.domain.asset.Asset;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.extension.RegisterExtension;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import static de.sovity.edc.ext.brokerserver.TestPolicy.createAfterYesterdayConstraint;
+import static de.sovity.edc.ext.brokerserver.TestPolicy.createAfterYesterdayPolicyEdcGen;
import static de.sovity.edc.ext.brokerserver.TestUtils.createConfiguration;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
@ApiTest
-@ExtendWith(EdcExtension.class)
class ConnectorUpdaterTest {
@RegisterExtension
private static final TestDatabase TEST_DATABASE = TestDatabaseFactory.getTestDatabase();
+ @RegisterExtension
+ static EdcExtension consumerEdcContext = new EdcExtension();
+
+ private EdcClient providerClient;
+
+ private BrokerServerClient brokerServerClient;
+
@BeforeEach
void setUp(EdcExtension extension) {
extension.setConfiguration(createConfiguration(TEST_DATABASE, Map.of()));
+
+ providerClient = EdcClient.builder()
+ .managementApiUrl(TestUtils.MANAGEMENT_ENDPOINT)
+ .managementApiKey(TestUtils.MANAGEMENT_API_KEY)
+ .build();
+
+ brokerServerClient = BrokerServerClient.builder()
+ .managementApiUrl(TestUtils.MANAGEMENT_ENDPOINT)
+ .managementApiKey(TestUtils.MANAGEMENT_API_KEY)
+ .build();
}
@Test
- void testConnectorUpdate(
- AssetService assetService,
- PolicyDefinitionStore policyDefinitionStore,
- ContractDefinitionStore contractDefinitionStore
- ) {
+ void testConnectorUpdate() {
TEST_DATABASE.testTransaction(dsl -> {
// arrange
- var connectorEndpoint = TestUtils.PROTOCOL_ENDPOINT;
var connectorUpdater = BrokerServerExtensionContext.instance.connectorUpdater();
var connectorCreator = BrokerServerExtensionContext.instance.connectorCreator();
+ String connectorEndpoint = TestUtils.PROTOCOL_ENDPOINT;
- createAlwaysTruePolicyDefinition(policyDefinitionStore);
- createAlwaysTrueContractDefinition(contractDefinitionStore);
-
- var nestedObjProperty = new LinkedHashMap(Map.of(
- "test-string", "hello",
- "test-uri", "https://w3id.org/idsa/code/AB",
- "http://test-uri-key", "value",
-
- "test-array", new ArrayList<>(List.of("a", "b")),
- "test-float", 5.1,
- "test-int", 5,
- "test-boolean", true,
-
- "test-obj", new LinkedHashMap<>(Map.of("key", "value"))
- ));
- nestedObjProperty.put("test-null", null);
-
- var asset = Asset.Builder.newInstance()
- .id("test-asset-1")
- .property(AssetProperty.ASSET_ID, "test-asset-1")
- .property(AssetProperty.ASSET_NAME, "Test Asset 1")
- .property("test-string", "hello")
- .property("test-uri", "https://w3id.org/idsa/code/AB")
- .property("http://test-uri-key", "value")
-
- .property("test-array", new ArrayList<>(List.of("a", "b")))
- .property("test-float", 5.1)
- .property("test-int", 5)
- .property("test-boolean", true)
-
- .property("test-obj", nestedObjProperty)
- .build();
-
- assetService.create(asset, dataAddress());
+ var policyId = createPolicyDefinition();
+ var assetId = createAsset();
+ createContractDefinition(policyId, assetId);
connectorCreator.addConnector(dsl, connectorEndpoint);
// act
connectorUpdater.updateConnector(connectorEndpoint);
// assert
- var connectors = dsl.selectFrom(Tables.CONNECTOR).stream().toList();
- assertThat(connectors.get(0).getOnlineStatus()).isEqualTo(ConnectorOnlineStatus.ONLINE);
- assertThat(connectors.get(0).getEndpoint()).isEqualTo(connectorEndpoint);
-
- var dataOffers = dsl.selectFrom(Tables.DATA_OFFER).stream().toList();
- assertThat(dataOffers).hasSize(1);
-
- var dataOffer = dataOffers.get(0);
- assertThat(dataOffer.getAssetId()).isEqualTo("test-asset-1");
- assertThat(dataOffer.getAssetProperties().data()).contains("Test Asset 1");
-
- var props = JsonPath.from(dataOffer.getAssetProperties().data());
- assertThat(props.getString("\"asset:prop:name\"")).isEqualTo("Test Asset 1");
- assertThat(props.getString("test-string")).isEqualTo("hello");
- assertThat(props.getString("test-uri")).isEqualTo("https://w3id.org/idsa/code/AB");
- assertThat(props.getString("http://test-uri-key")).isEqualTo("value");
-
- assertThat(props.getString("test-array")).isEqualTo("[\"a\",\"b\"]");
- assertThat(props.getString("test-int")).isEqualTo("5");
- assertThat(props.getString("test-float")).isEqualTo("5.1");
- assertThat(props.getString("test-boolean")).isEqualTo("true");
-
- var testObj = JsonPath.from(props.getString("test-obj"));
- assertThat((String) testObj.get("test-string")).isEqualTo("hello");
- assertThat((String) testObj.get("test-uri")).isEqualTo("https://w3id.org/idsa/code/AB");
- assertThat((String) testObj.get("http://test-uri-key")).isEqualTo("value");
-
- assertThat((List>) testObj.get("test-array")).isEqualTo(List.of("a", "b"));
- assertThat((Integer) testObj.get("test-int")).isEqualTo(5);
- assertThat((Float) testObj.get("test-float")).isEqualTo(5.1f);
- assertThat((Boolean) testObj.get("test-boolean")).isTrue();
- assertThat((Map, ?>) testObj.get("test-obj")).isEqualTo(Map.of("key", "value"));
-
- // the nested object's null will have disappeared
- assertThat(testObj.getMap("")).containsKey("test-string");
- assertThat(testObj.getMap("")).doesNotContainKey("test-null");
-
- var contractOffers = dsl.selectFrom(Tables.DATA_OFFER_CONTRACT_OFFER).stream().toList();
- assertThat(contractOffers).hasSize(1);
+ var catalog = brokerServerClient.brokerServerApi().catalogPage(new CatalogPageQuery());
+ assertThat(catalog.getDataOffers()).hasSize(1);
+ var dataOffer = catalog.getDataOffers().get(0);
+ assertThat(dataOffer.getContractOffers()).hasSize(1);
+ var contractOffer = dataOffer.getContractOffers().get(0);
+ var asset = dataOffer.getAsset();
+ assertThat(asset.getAssetId()).isEqualTo(assetId);
+ assertThat(asset.getTitle()).isEqualTo("AssetName");
+ assertThat(asset.getConnectorEndpoint()).isEqualTo(TestUtils.PROTOCOL_ENDPOINT);
+ assertThat(asset.getParticipantId()).isEqualTo(TestUtils.PARTICIPANT_ID);
+ assertThat(asset.getKeywords()).isEqualTo(List.of("keyword1", "keyword2"));
+ assertThat(asset.getDescription()).isEqualTo("AssetDescription");
+ assertThat(asset.getVersion()).isEqualTo("1.0.0");
+ assertThat(asset.getLanguage()).isEqualTo("en");
+ assertThat(asset.getMediaType()).isEqualTo("application/json");
+ assertThat(asset.getDataCategory()).isEqualTo("dataCategory");
+ assertThat(asset.getDataSubcategory()).isEqualTo("dataSubcategory");
+ assertThat(asset.getDataModel()).isEqualTo("dataModel");
+ assertThat(asset.getGeoReferenceMethod()).isEqualTo("geoReferenceMethod");
+ assertThat(asset.getTransportMode()).isEqualTo("transportMode");
+ assertThat(asset.getLicenseUrl()).isEqualTo("https://license-url");
+ assertThat(asset.getKeywords()).isEqualTo(List.of("keyword1", "keyword2"));
+ assertThat(asset.getCreatorOrganizationName()).isEqualTo(TestUtils.CURATOR_NAME);
+ assertThat(asset.getPublisherHomepage()).isEqualTo("publisherHomepage");
+ assertThat(asset.getHttpDatasourceHintsProxyMethod()).isFalse();
+ assertThat(asset.getHttpDatasourceHintsProxyPath()).isFalse();
+ assertThat(asset.getHttpDatasourceHintsProxyQueryParams()).isFalse();
+ assertThat(asset.getHttpDatasourceHintsProxyBody()).isFalse();
+ assertThat(asset.getAdditionalProperties())
+ .containsExactlyEntriesOf(Map.of("http://unknown/a", "x"));
+ assertThat(dataOffer.getAsset().getAdditionalJsonProperties())
+ .containsExactlyEntriesOf(Map.of("http://unknown/b", "{\"http://unknown/c\":\"y\"}"));
+ assertThat(dataOffer.getAsset().getPrivateProperties()).isEmpty();
+ assertThat(dataOffer.getAsset().getPrivateJsonProperties()).isEmpty();
+ var policy = contractOffer.getContractPolicy();
+ assertThat(policy.getConstraints()).hasSize(1);
+ AssertionUtils.assertEqualUsingJson(policy.getConstraints().get(0), createAfterYesterdayConstraint());
});
}
- @Test
- void testTopLevelAssetPropertyCannotBeNull(AssetService assetService) {
- var asset = Asset.Builder.newInstance()
- .id("test-asset-1")
- .property("test-null", null)
+ private String createPolicyDefinition() {
+ var policyDefinition = PolicyDefinitionCreateRequest.builder()
+ .policyDefinitionId("policy-1")
+ .policy(createAfterYesterdayPolicyEdcGen())
.build();
- var dataAddress = dataAddress();
- assertThatThrownBy(() -> assetService.create(asset, dataAddress))
- .isInstanceOf(EdcPersistenceException.class)
- .hasMessage("java.lang.NullPointerException: Cannot invoke \"Object.getClass()\" because the return value of \"java.util.Map$Entry.getValue()\" is null");
- }
- private DataAddress dataAddress() {
- return DataAddress.Builder.newInstance()
- .properties(Map.of(
- "type", "HttpData",
- "baseUrl", "https://jsonplaceholder.typicode.com/todos/1"
- ))
- .build();
+ return providerClient.uiApi().createPolicyDefinition(policyDefinition).getId();
}
- private void createAlwaysTruePolicyDefinition(PolicyDefinitionStore policyDefinitionStore) {
- var policyDefinition = PolicyDefinition.Builder.newInstance()
- .id("always-true")
- .policy(Policy.Builder.newInstance().build())
- .build();
- policyDefinitionStore.save(policyDefinition);
+ public void createContractDefinition(String policyId, String assetId) {
+ providerClient.uiApi().createContractDefinition(ContractDefinitionRequest.builder()
+ .contractDefinitionId("cd-1")
+ .accessPolicyId(policyId)
+ .contractPolicyId(policyId)
+ .assetSelector(List.of(UiCriterion.builder()
+ .operandLeft(Prop.Edc.ID)
+ .operator(UiCriterionOperator.EQ)
+ .operandRight(UiCriterionLiteral.builder()
+ .type(UiCriterionLiteralType.VALUE)
+ .value(assetId)
+ .build())
+ .build()))
+ .build());
}
- public void createAlwaysTrueContractDefinition(ContractDefinitionStore contractDefinitionStore) {
- var contractDefinition = ContractDefinition.Builder.newInstance()
- .id("always-true-cd")
- .contractPolicyId("always-true")
- .accessPolicyId("always-true")
- .selectorExpression(AssetSelectorExpression.SELECT_ALL)
- .validity(1000) //else throws "validity must be strictly positive"
- .build();
- contractDefinitionStore.save(contractDefinition);
+ private String createAsset() {
+ return providerClient.uiApi().createAsset(UiAssetCreateRequest.builder()
+ .id("asset-1")
+ .title("AssetName")
+ .description("AssetDescription")
+ .licenseUrl("https://license-url")
+ .version("1.0.0")
+ .language("en")
+ .mediaType("application/json")
+ .dataCategory("dataCategory")
+ .dataSubcategory("dataSubcategory")
+ .dataModel("dataModel")
+ .geoReferenceMethod("geoReferenceMethod")
+ .transportMode("transportMode")
+ .keywords(List.of("keyword1", "keyword2"))
+ .publisherHomepage("publisherHomepage")
+ .dataAddressProperties(Map.of(
+ Prop.Edc.TYPE, "HttpData",
+ Prop.Edc.METHOD, "GET",
+ Prop.Edc.BASE_URL, "http://some.url"
+ ))
+ .additionalProperties(Map.of("http://unknown/a", "x"))
+ .additionalJsonProperties(Map.of("http://unknown/b", "{\"http://unknown/c\":\"y\"}"))
+ .privateProperties(Map.of("http://unknown/a-private", "x-private"))
+ .privateJsonProperties(Map.of("http://unknown/b-private", "{\"http://unknown/c-private\":\"y-private\"}"))
+ .build()).getId();
}
-
}
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferLimitsEnforcerTest.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferLimitsEnforcerTest.java
index 885ad6834..9a0da5f0c 100644
--- a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferLimitsEnforcerTest.java
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferLimitsEnforcerTest.java
@@ -19,8 +19,8 @@
import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.ConnectorRecord;
import de.sovity.edc.ext.brokerserver.services.config.BrokerServerSettings;
import de.sovity.edc.ext.brokerserver.services.logging.BrokerEventLogger;
+import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedContractOffer;
import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedDataOffer;
-import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedDataOfferContractOffer;
import org.jooq.DSLContext;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -58,7 +58,7 @@ void no_limit_and_two_dataofffers_and_contractoffer_should_not_limit() {
when(settings.getMaxContractOffersPerDataOffer()).thenReturn(maxContractOffers);
var myDataOffer = new FetchedDataOffer();
- myDataOffer.setContractOffers(List.of(new FetchedDataOfferContractOffer(), new FetchedDataOfferContractOffer()));
+ myDataOffer.setContractOffers(List.of(new FetchedContractOffer(), new FetchedContractOffer()));
var dataOffers = List.of(myDataOffer, myDataOffer);
// act
@@ -104,7 +104,7 @@ void limit_one_and_two_dataoffers_should_result_to_one() {
when(settings.getMaxContractOffersPerDataOffer()).thenReturn(maxContractOffers);
var myDataOffer = new FetchedDataOffer();
- myDataOffer.setContractOffers(List.of(new FetchedDataOfferContractOffer(), new FetchedDataOfferContractOffer()));
+ myDataOffer.setContractOffers(List.of(new FetchedContractOffer(), new FetchedContractOffer()));
var dataOffers = List.of(myDataOffer, myDataOffer);
// act
@@ -133,7 +133,7 @@ void verify_logConnectorUpdateDataOfferLimitExceeded() {
when(settings.getMaxContractOffersPerDataOffer()).thenReturn(maxContractOffers);
var myDataOffer = new FetchedDataOffer();
- myDataOffer.setContractOffers(List.of(new FetchedDataOfferContractOffer(), new FetchedDataOfferContractOffer()));
+ myDataOffer.setContractOffers(List.of(new FetchedContractOffer(), new FetchedContractOffer()));
var dataOffers = List.of(myDataOffer, myDataOffer);
// act
@@ -157,7 +157,7 @@ void verify_logConnectorUpdateDataOfferLimitOk() {
when(settings.getMaxContractOffersPerDataOffer()).thenReturn(maxContractOffers);
var myDataOffer = new FetchedDataOffer();
- myDataOffer.setContractOffers(List.of(new FetchedDataOfferContractOffer(), new FetchedDataOfferContractOffer()));
+ myDataOffer.setContractOffers(List.of(new FetchedContractOffer(), new FetchedContractOffer()));
var dataOffers = List.of(myDataOffer, myDataOffer);
// act
@@ -181,7 +181,7 @@ void verify_logConnectorUpdateContractOfferLimitExceeded() {
when(settings.getMaxContractOffersPerDataOffer()).thenReturn(maxContractOffers);
var myDataOffer = new FetchedDataOffer();
- myDataOffer.setContractOffers(List.of(new FetchedDataOfferContractOffer(), new FetchedDataOfferContractOffer()));
+ myDataOffer.setContractOffers(List.of(new FetchedContractOffer(), new FetchedContractOffer()));
var dataOffers = List.of(myDataOffer, myDataOffer);
// act
@@ -205,7 +205,7 @@ void verify_logConnectorUpdateContractOfferLimitOk() {
when(settings.getMaxContractOffersPerDataOffer()).thenReturn(maxContractOffers);
var myDataOffer = new FetchedDataOffer();
- myDataOffer.setContractOffers(List.of(new FetchedDataOfferContractOffer(), new FetchedDataOfferContractOffer()));
+ myDataOffer.setContractOffers(List.of(new FetchedContractOffer(), new FetchedContractOffer()));
var dataOffers = List.of(myDataOffer, myDataOffer);
// act
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTest.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTest.java
index 78412a0bd..c8792e345 100644
--- a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTest.java
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTest.java
@@ -30,6 +30,7 @@
import java.time.temporal.ChronoUnit;
import java.util.List;
+import static de.sovity.edc.ext.brokerserver.AssertionUtils.assertEqualJson;
import static org.assertj.core.api.Assertions.assertThat;
class DataOfferWriterTest {
@@ -56,7 +57,7 @@ void testDataOfferWriter_allSortsOfUpdates() {
testData.fetched(unchanged);
var fieldChangedExisting = Do.forName("fieldChanged");
- var fieldChangedFetched = fieldChangedExisting.withAssetName("changed");
+ var fieldChangedFetched = fieldChangedExisting.withAssetTitle("changed");
testData.existing(fieldChangedExisting);
testData.fetched(fieldChangedFetched);
@@ -139,9 +140,9 @@ void testDataOfferWriter_allSortsOfUpdates() {
}
private void assertAssetPropertiesEqual(DataOfferWriterTestDataHelper testData, DataOfferRecord actual, Do expected) {
- var actualAssetJson = actual.getAssetProperties().data();
+ var actualAssetJson = actual.getAssetJsonLd().data();
var expectedAssetJson = testData.dummyAssetJson(expected);
- assertThat(actualAssetJson).isEqualTo(expectedAssetJson);
+ assertEqualJson(actualAssetJson, expectedAssetJson);
}
private void assertPolicyEquals(
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTestDataHelper.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTestDataHelper.java
index 227c5a82f..312e83765 100644
--- a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTestDataHelper.java
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTestDataHelper.java
@@ -14,13 +14,14 @@
package de.sovity.edc.ext.brokerserver.services.refreshing.offers;
-import de.sovity.edc.ext.brokerserver.dao.AssetProperty;
import de.sovity.edc.ext.brokerserver.dao.ConnectorQueries;
-import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.DataOfferContractOfferRecord;
+import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.ContractOfferRecord;
import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.DataOfferRecord;
import de.sovity.edc.ext.brokerserver.services.ConnectorCreator;
+import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedContractOffer;
import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedDataOffer;
-import de.sovity.edc.ext.brokerserver.services.refreshing.offers.model.FetchedDataOfferContractOffer;
+import de.sovity.edc.utils.JsonUtils;
+import de.sovity.edc.utils.jsonld.vocab.Prop;
import org.apache.commons.lang3.Validate;
import org.jetbrains.annotations.NotNull;
import org.jooq.DSLContext;
@@ -29,16 +30,18 @@
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
+import static de.sovity.edc.ext.brokerserver.TestAsset.getAssetJsonLd;
import static de.sovity.edc.ext.brokerserver.services.refreshing.offers.DataOfferWriterTestDataModels.Co;
import static de.sovity.edc.ext.brokerserver.services.refreshing.offers.DataOfferWriterTestDataModels.Do;
class DataOfferWriterTestDataHelper {
- String connectorEndpoint = "https://example.com/ids/data";
+ String connectorEndpoint = "https://example.com/api/dsp";
OffsetDateTime old = OffsetDateTime.now().withNano(0).withSecond(0).withMinute(0).withHour(0).minusDays(100);
- List existingContractOffers = new ArrayList<>();
+ List existingContractOffers = new ArrayList<>();
List existingDataOffers = new ArrayList<>();
List fetchedDataOffers = new ArrayList<>();
@@ -75,8 +78,8 @@ public void initialize(DSLContext dsl) {
dsl.batchInsert(existingContractOffers).execute();
}
- private DataOfferContractOfferRecord dummyContractOffer(Do dataOffer, Co contractOffer) {
- var contractOfferRecord = new DataOfferContractOfferRecord();
+ private ContractOfferRecord dummyContractOffer(Do dataOffer, Co contractOffer) {
+ var contractOfferRecord = new ContractOfferRecord();
contractOfferRecord.setConnectorEndpoint(connectorEndpoint);
contractOfferRecord.setAssetId(dataOffer.getAssetId());
contractOfferRecord.setContractOfferId(contractOffer.getId());
@@ -87,13 +90,13 @@ private DataOfferContractOfferRecord dummyContractOffer(Do dataOffer, Co contrac
}
private DataOfferRecord dummyDataOffer(Do dataOffer) {
- var assetName = Optional.of(dataOffer.getAssetName()).orElse(dataOffer.getAssetId());
+ var assetName = Optional.of(dataOffer.getAssetTitle()).orElse(dataOffer.getAssetId());
var dataOfferRecord = new DataOfferRecord();
dataOfferRecord.setConnectorEndpoint(connectorEndpoint);
dataOfferRecord.setAssetId(dataOffer.getAssetId());
- dataOfferRecord.setAssetName(assetName);
- dataOfferRecord.setAssetProperties(JSONB.valueOf(dummyAssetJson(dataOffer)));
+ dataOfferRecord.setAssetTitle(assetName);
+ dataOfferRecord.setAssetJsonLd(JSONB.valueOf(dummyAssetJson(dataOffer)));
dataOfferRecord.setCreatedAt(old);
dataOfferRecord.setUpdatedAt(old);
return dataOfferRecord;
@@ -102,8 +105,8 @@ private DataOfferRecord dummyDataOffer(Do dataOffer) {
private FetchedDataOffer dummyFetchedDataOffer(Do dataOffer) {
var fetchedDataOffer = new FetchedDataOffer();
fetchedDataOffer.setAssetId(dataOffer.getAssetId());
- fetchedDataOffer.setAssetName(dataOffer.getAssetName());
- fetchedDataOffer.setAssetPropertiesJson(dummyAssetJson(dataOffer));
+ fetchedDataOffer.setAssetTitle(dataOffer.getAssetTitle());
+ fetchedDataOffer.setAssetJsonLd(dummyAssetJson(dataOffer));
var contractOffersMapped = dataOffer.getContractOffers().stream().map(this::dummyFetchedContractOffer).collect(Collectors.toList());
fetchedDataOffer.setContractOffers(contractOffersMapped);
@@ -112,10 +115,8 @@ private FetchedDataOffer dummyFetchedDataOffer(Do dataOffer) {
}
public String dummyAssetJson(Do dataOffer) {
- return "{\"%s\": \"%s\", \"%s\": \"%s\"}".formatted(
- AssetProperty.ASSET_ID, dataOffer.getAssetId(),
- AssetProperty.ASSET_NAME, dataOffer.getAssetName()
- );
+ var assetJsonLd = getAssetJsonLd(dataOffer.getAssetId(), Map.of(Prop.Dcterms.TITLE, dataOffer.getAssetTitle()));
+ return JsonUtils.toJson(assetJsonLd);
}
public String dummyPolicyJson(String policyValue) {
@@ -125,8 +126,8 @@ public String dummyPolicyJson(String policyValue) {
}
@NotNull
- private FetchedDataOfferContractOffer dummyFetchedContractOffer(Co it) {
- var contractOffer = new FetchedDataOfferContractOffer();
+ private FetchedContractOffer dummyFetchedContractOffer(Co it) {
+ var contractOffer = new FetchedContractOffer();
contractOffer.setContractOfferId(it.getId());
contractOffer.setPolicyJson(dummyPolicyJson(it.getPolicyValue()));
return contractOffer;
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTestDataModels.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTestDataModels.java
index ca7343a94..ab15daccb 100644
--- a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTestDataModels.java
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTestDataModels.java
@@ -29,7 +29,7 @@ static class Do {
@With
String assetId;
@With
- String assetName;
+ String assetTitle;
@With
List contractOffers;
@@ -40,7 +40,7 @@ public Do withContractOffer(Co co) {
}
public static Do forName(String name) {
- return new Do(name, name + " Name", List.of(new Co(name + " CO", name + " Policy")));
+ return new Do(name, name + " Title", List.of(new Co(name + " CO", name + " Policy")));
}
}
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTestDydi.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTestDydi.java
index 962695078..d44383937 100644
--- a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTestDydi.java
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTestDydi.java
@@ -14,7 +14,7 @@
package de.sovity.edc.ext.brokerserver.services.refreshing.offers;
-import de.sovity.edc.ext.brokerserver.dao.DataOfferContractOfferQueries;
+import de.sovity.edc.ext.brokerserver.dao.ContractOfferQueries;
import de.sovity.edc.ext.brokerserver.dao.DataOfferQueries;
import de.sovity.edc.ext.brokerserver.services.config.BrokerServerSettings;
import lombok.Value;
@@ -27,11 +27,11 @@ class DataOfferWriterTestDydi {
Config config = mock(Config.class);
BrokerServerSettings brokerServerSettings = mock(BrokerServerSettings.class);
DataOfferQueries dataOfferQueries = new DataOfferQueries();
- DataOfferContractOfferQueries dataOfferContractOfferQueries = new DataOfferContractOfferQueries();
+ ContractOfferQueries contractOfferQueries = new ContractOfferQueries();
ContractOfferRecordUpdater contractOfferRecordUpdater = new ContractOfferRecordUpdater();
DataOfferRecordUpdater dataOfferRecordUpdater = new DataOfferRecordUpdater();
DataOfferPatchBuilder dataOfferPatchBuilder = new DataOfferPatchBuilder(
- dataOfferContractOfferQueries,
+ contractOfferQueries,
dataOfferQueries,
dataOfferRecordUpdater,
contractOfferRecordUpdater
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTestResultHelper.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTestResultHelper.java
index db42a2e3c..1b2f04c21 100644
--- a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTestResultHelper.java
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/refreshing/offers/DataOfferWriterTestResultHelper.java
@@ -15,7 +15,7 @@
package de.sovity.edc.ext.brokerserver.services.refreshing.offers;
import de.sovity.edc.ext.brokerserver.db.jooq.Tables;
-import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.DataOfferContractOfferRecord;
+import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.ContractOfferRecord;
import de.sovity.edc.ext.brokerserver.db.jooq.tables.records.DataOfferRecord;
import org.jetbrains.annotations.NotNull;
import org.jooq.DSLContext;
@@ -28,13 +28,13 @@
class DataOfferWriterTestResultHelper {
private final @NotNull Map dataOffers;
- private final @NotNull Map> contractOffers;
+ private final @NotNull Map> contractOffers;
DataOfferWriterTestResultHelper(DSLContext dsl) {
this.dataOffers = dsl.selectFrom(Tables.DATA_OFFER).fetchMap(Tables.DATA_OFFER.ASSET_ID);
- this.contractOffers = dsl.selectFrom(Tables.DATA_OFFER_CONTRACT_OFFER).stream().collect(groupingBy(
- DataOfferContractOfferRecord::getAssetId,
- Collectors.toMap(DataOfferContractOfferRecord::getContractOfferId, Function.identity())
+ this.contractOffers = dsl.selectFrom(Tables.CONTRACT_OFFER).stream().collect(groupingBy(
+ ContractOfferRecord::getAssetId,
+ Collectors.toMap(ContractOfferRecord::getContractOfferId, Function.identity())
));
}
@@ -50,7 +50,7 @@ public int numContractOffers(String assetId) {
return contractOffers.getOrDefault(assetId, Map.of()).size();
}
- public DataOfferContractOfferRecord getContractOffer(String assetId, String contractOfferId) {
+ public ContractOfferRecord getContractOffer(String assetId, String contractOfferId) {
return contractOffers.getOrDefault(assetId, Map.of()).get(contractOfferId);
}
}
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/schedules/OfflineConnectorRemovalJobTest.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/schedules/OfflineConnectorRemovalJobTest.java
index 25f51fd7a..feb69efc4 100644
--- a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/schedules/OfflineConnectorRemovalJobTest.java
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/services/schedules/OfflineConnectorRemovalJobTest.java
@@ -14,7 +14,6 @@
package de.sovity.edc.ext.brokerserver.services.schedules;
-import de.sovity.edc.ext.brokerserver.TestUtils;
import de.sovity.edc.ext.brokerserver.dao.ConnectorQueries;
import de.sovity.edc.ext.brokerserver.db.FlywayTestUtils;
import de.sovity.edc.ext.brokerserver.db.TestDatabase;
@@ -78,7 +77,7 @@ void test_offlineConnectorKiller_should_be_dead() {
// assert
dsl.select().from(CONNECTOR).fetch().forEach(record -> {
- assertThat(record.get(CONNECTOR.CONNECTOR_ID)).isEqualTo("http://example.org");
+ assertThat(record.get(CONNECTOR.ENDPOINT)).isEqualTo("https://my-connector/api/dsp");
assertThat(record.get(CONNECTOR.ONLINE_STATUS)).isEqualTo(ConnectorOnlineStatus.DEAD);
});
});
@@ -96,7 +95,7 @@ void test_offlineConnectorKiller_should_not_be_dead() {
// assert
dsl.select().from(CONNECTOR).fetch().forEach(record -> {
- assertThat(record.get(CONNECTOR.CONNECTOR_ID)).isEqualTo("http://example.org");
+ assertThat(record.get(CONNECTOR.ENDPOINT)).isEqualTo("https://my-connector/api/dsp");
assertThat(record.get(CONNECTOR.ONLINE_STATUS)).isNotEqualTo(ConnectorOnlineStatus.DEAD);
});
});
@@ -104,8 +103,8 @@ void test_offlineConnectorKiller_should_not_be_dead() {
private static void createConnector(DSLContext dsl, int createdDaysAgo) {
dsl.insertInto(CONNECTOR)
- .set(CONNECTOR.CONNECTOR_ID, "http://example.org")
- .set(CONNECTOR.ENDPOINT, TestUtils.MANAGEMENT_ENDPOINT)
+ .set(CONNECTOR.ENDPOINT, "https://my-connector/api/dsp")
+ .set(CONNECTOR.PARTICIPANT_ID, "my-connector")
.set(CONNECTOR.ONLINE_STATUS, ConnectorOnlineStatus.OFFLINE)
.set(CONNECTOR.LAST_SUCCESSFUL_REFRESH_AT, OffsetDateTime.now().minusDays(createdDaysAgo))
.set(CONNECTOR.CREATED_AT, OffsetDateTime.now().minusDays(6))
diff --git a/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/utils/JsonUtils2Test.java b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/utils/JsonUtils2Test.java
new file mode 100644
index 000000000..1279a31be
--- /dev/null
+++ b/extensions/broker-server/src/test/java/de/sovity/edc/ext/brokerserver/utils/JsonUtils2Test.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2023 sovity GmbH
+ *
+ * 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:
+ * sovity GmbH - initial API and implementation
+ *
+ */
+
+package de.sovity.edc.ext.brokerserver.utils;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class JsonUtils2Test {
+ @Test
+ void equalityTests() {
+ assertTrue(JsonUtils2.isEqualJson(null, null));
+ assertTrue(JsonUtils2.isEqualJson("null", "null"));
+ assertTrue(JsonUtils2.isEqualJson("{}", "{}"));
+ assertTrue(JsonUtils2.isEqualJson("{\"a\": true, \"b\": \"hello\"}", "{\"a\": true,\"b\": \"hello\"}"));
+ assertTrue(JsonUtils2.isEqualJson("{\"a\": true, \"b\": \"hello\"}", "{\"b\": \"hello\", \"a\": true}"));
+
+ assertFalse(JsonUtils2.isEqualJson(null, "1"));
+ assertFalse(JsonUtils2.isEqualJson("1", null));
+ }
+}
diff --git a/gradle.properties b/gradle.properties
index 833a40846..69a547ff1 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -3,13 +3,13 @@ sovityBrokerServerGroup=de.sovity.broker
sovityBrokerServerVersion=0.0.1-SNAPSHOT
# Sovity EDC Extensions (for common api model)
-sovityEdcExtensionsVersion=4.2.0
+sovityEdcExtensionsVersion=0.0.1-SNAPSHOT
sovityEdcExtensionGroup=de.sovity.edc.ext
sovityEdcGroup=de.sovity.edc
# Eclipse EDC
edcGroup=org.eclipse.edc
-edcVersion=0.0.1-20230220.patch1
+edcVersion=0.2.1
# Other Dependencies
assertj=3.23.1