Skip to content

Commit

Permalink
add benchmark and fix checkstyle
Browse files Browse the repository at this point in the history
  • Loading branch information
ununhexium committed Feb 3, 2025
1 parent a517156 commit 48b21ed
Show file tree
Hide file tree
Showing 7 changed files with 380 additions and 3 deletions.
19 changes: 19 additions & 0 deletions extensions/wrapper/clients/benchmark/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
plugins {
id("java")
}

group = "org.example"
version = "unspecified"

repositories {
mavenCentral()
}

dependencies {
testImplementation(platform("org.junit:junit-bom:5.10.0"))
testImplementation("org.junit.jupiter:junit-jupiter")
}

tasks.test {
useJUnitPlatform()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
package de.sovity.edc.client.examples;

import de.sovity.edc.client.EdcClient;
import de.sovity.edc.client.gen.model.ContractDefinitionRequest;
import de.sovity.edc.client.gen.model.ContractNegotiationRequest;
import de.sovity.edc.client.gen.model.DataSourceType;
import de.sovity.edc.client.gen.model.OperatorDto;
import de.sovity.edc.client.gen.model.PolicyDefinitionCreateDto;
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.client.gen.model.UiDataSource;
import de.sovity.edc.client.gen.model.UiDataSourceHttpData;
import de.sovity.edc.client.gen.model.UiPolicyConstraint;
import de.sovity.edc.client.gen.model.UiPolicyExpression;
import de.sovity.edc.client.gen.model.UiPolicyExpressionType;
import de.sovity.edc.client.gen.model.UiPolicyLiteral;
import de.sovity.edc.client.gen.model.UiPolicyLiteralType;
import de.sovity.edc.utils.jsonld.vocab.Prop;

import java.time.OffsetDateTime;
import java.util.List;

public class Benchmark {

private static String PROVIDER_DSP = "https://load-test-1.stage-sovity.azure.sovity.io/control/api/v1/dsp";
private static String PROVIDER_ID = "BPNL0000000A0UNJ";

public static void main(String[] args) {
var provider = EdcClient.builder()
.managementApiUrl("https://load-test-1.stage-sovity.azure.sovity.io/control/data")
.managementApiKey("LzyGxc8AMWrY+WKIrjd6yVzragE0vztZttzjWcopsBs=")
.build();

provider.testConnection();

var consumer = EdcClient.builder()
.managementApiUrl("https://load-test-1-consumer.stage-sovity.azure.sovity.io/control/data")
.managementApiKey("lOtQEZ/prbEtoGMlNjFsB3SNV1HSO00e7iSIyTKcrEo=")
.build();

consumer.testConnection();

create(provider, consumer, 0, 1);
}

private static void create(EdcClient provider, EdcClient consumer, int offset, int amount) {
int index = offset;

createAsset(provider, index);
createPolicy(provider, index);
createContractDefinition(provider, index);
negotiateContract(consumer, index);
}

private static void negotiateContract(EdcClient client, int index) {
client.uiApi().initiateContractNegotiation(
ContractNegotiationRequest.builder()
.counterPartyId(PROVIDER_ID)
.counterPartyAddress(PROVIDER_DSP)
.assetId("asset-" + index)
.contractOfferId("contract-offer-" + index)
.policyJsonLd("policy-" + index)
.build()
);
}

private static void createContractDefinition(EdcClient client, int index) {
client.uiApi().createContractDefinition(
ContractDefinitionRequest.builder()
.contractDefinitionId("contract-definition-" + index)
.accessPolicyId("policy-" + index)
.contractPolicyId("policy-" + index)
.assetSelector(List.of(UiCriterion.builder()
.operandLeft(Prop.Edc.ID)
.operator(UiCriterionOperator.EQ)
.operandRight(UiCriterionLiteral.builder()
.type(UiCriterionLiteralType.VALUE)
.value("asset-" + index)
.build())
.build()))
.build()
);
}

private static void createPolicy(EdcClient client, int index) {
var afterYesterday = UiPolicyExpression.builder()
.type(UiPolicyExpressionType.CONSTRAINT)
.constraint(UiPolicyConstraint.builder()
.left("POLICY_EVALUATION_TIME")
.operator(OperatorDto.GT)
.right(UiPolicyLiteral.builder()
.type(UiPolicyLiteralType.STRING)
.value(OffsetDateTime.now().minusDays(1).toString())
.build())
.build())
.build();

var beforeTomorrow = UiPolicyExpression.builder()
.type(UiPolicyExpressionType.CONSTRAINT)
.constraint(UiPolicyConstraint.builder()
.left("POLICY_EVALUATION_TIME")
.operator(OperatorDto.LT)
.right(UiPolicyLiteral.builder()
.type(UiPolicyLiteralType.STRING)
.value(OffsetDateTime.now().plusDays(1).toString())
.build())
.build())
.build();

var expression = UiPolicyExpression.builder()
.type(UiPolicyExpressionType.AND)
.expressions(List.of(afterYesterday, beforeTomorrow))
.build();

client.uiApi().createPolicyDefinitionV2(
PolicyDefinitionCreateDto.builder()
.policyDefinitionId("policy-" + index)
.expression(expression)
.build()
);
}

private static void createAsset(EdcClient client, int index) {
client.uiApi().createAsset(
UiAssetCreateRequest.builder()
.title("Test Asset " + index)
.id("asset-" + index)
.dataSource(
UiDataSource.builder()
.type(DataSourceType.HTTP_DATA)
.httpData(UiDataSourceHttpData.builder()
.baseUrl("http://example.com")
.build())
.build()
)
.build()
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ public ContractAgreementData getContractAgreement(DSLContext dsl, String contrac

val negotiation = QueryUtils.fetchAllInBatches((offset, limit) ->
contractNegotiationStore.queryNegotiations(
QuerySpec.Builder.newInstance().offset(offset).limit(limit).build())
.toList()
QuerySpec.Builder.newInstance().offset(offset).limit(limit).build()
).toList()
)
.stream()
.filter(it -> it.getContractAgreement().getId().equals(contractAgreementId))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
/*
* Copyright (c) 2022 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.wrapper.utils;

import lombok.experimental.UtilityClass;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
package de.sovity.edc.ext.wrapper;

import de.sovity.edc.client.EdcClient;
import de.sovity.edc.client.gen.model.ContractDefinitionRequest;
import de.sovity.edc.client.gen.model.ContractNegotiationRequest;
import de.sovity.edc.client.gen.model.ContractNegotiationSimplifiedState;
import de.sovity.edc.client.gen.model.DataSourceType;
import de.sovity.edc.client.gen.model.InitiateTransferRequest;
import de.sovity.edc.client.gen.model.OperatorDto;
import de.sovity.edc.client.gen.model.PolicyDefinitionCreateDto;
import de.sovity.edc.client.gen.model.UiAssetCreateRequest;
import de.sovity.edc.client.gen.model.UiContractNegotiation;
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.client.gen.model.UiDataSource;
import de.sovity.edc.client.gen.model.UiDataSourceHttpData;
import de.sovity.edc.client.gen.model.UiPolicyConstraint;
import de.sovity.edc.client.gen.model.UiPolicyExpression;
import de.sovity.edc.client.gen.model.UiPolicyExpressionType;
import de.sovity.edc.client.gen.model.UiPolicyLiteral;
import de.sovity.edc.client.gen.model.UiPolicyLiteralType;
import de.sovity.edc.utils.jsonld.vocab.Prop;
import lombok.val;
import org.awaitility.Awaitility;

import java.time.OffsetDateTime;
import java.util.List;
import java.util.Map;

import static java.time.Duration.ofMillis;
import static java.time.Duration.ofSeconds;

public class Benchmark {

private static final String PROVIDER_DSP = "https://load-test-3-provider.stage-sovity.azure.sovity.io/control/api/v1/dsp";
private static final String PROVIDER_ID = "BPNL00000000024R";

public static void main(String[] args) {
var provider = EdcClient.builder()
.managementApiUrl("https://load-test-3-provider.stage-sovity.azure.sovity.io/control/data")
.managementApiKey("GcR0t0BFx0kSHh/8B43rUDyPCFRMoOko+CiuhuMLMrs=")
.build();

provider.testConnection();

var consumer = EdcClient.builder()
.managementApiUrl("https://load-test-3-consumer.stage-sovity.azure.sovity.io/control/data")
.managementApiKey("77mBZTNriBPAb0WwIJn95n++O/GkVL8fNovLFPa/GlE=")
.build();

provider.testConnection();

val start = 5000;
val stop = 5050;

for (int i = start; i < stop; ++i) {
create(provider, consumer, i);
}
}

private static void create(
EdcClient provider,
EdcClient consumer,
int index
) {
System.out.println("Index=" + index);
createAsset(provider, index);
createPolicy(provider, index);
createContractDefinition(provider, index);

if (false) {
val negotiation = negotiate(provider, consumer, index);

consumer.uiApi().initiateTransfer(
InitiateTransferRequest.builder()
.contractAgreementId(negotiation.getContractAgreementId())
.transferType("HttpData-PUSH")
.dataSinkProperties(Map.of(
Prop.Edc.TYPE, "HttpData",
Prop.Edc.BASE_URL, "https://example.com",
Prop.Edc.METHOD, "POST"
))
.build()
);
}
}

private static UiContractNegotiation negotiate(EdcClient provider, EdcClient consumer, int index) {
System.out.println("Negotiating " + index + "...");
val offers = provider.uiApi().getCatalogPageDataOffers(PROVIDER_ID, PROVIDER_DSP);

val firstContractOffer = offers.stream()
.filter(offer -> offer.getAsset().getAssetId().equals("asset-" + index))
.findFirst()
.get()
.getContractOffers()
.get(0);

val negotiation = consumer.uiApi().initiateContractNegotiation(
ContractNegotiationRequest.builder()
.counterPartyId(PROVIDER_ID)
.counterPartyAddress(PROVIDER_DSP)
.assetId("asset-" + index)
.contractOfferId(firstContractOffer.getContractOfferId())
.policyJsonLd(firstContractOffer.getPolicy().getPolicyJsonLd())
.build()
);

Awaitility.await().atMost(ofSeconds(100)).pollDelay(ofMillis(1000)).until(
() -> {
System.out.println("Awaiting " + index + "...");
return consumer
.uiApi()
.getContractNegotiation(negotiation.getContractNegotiationId())
.getState()
.getSimplifiedState() != ContractNegotiationSimplifiedState.IN_PROGRESS;
}
);

System.out.println("Negotiated " + index);
return negotiation;
}

private static void createContractDefinition(EdcClient client, int index) {
System.out.println("Create contract definition " + index);
client.uiApi().createContractDefinition(
ContractDefinitionRequest.builder()
.contractDefinitionId("contract-definition-" + index)
.accessPolicyId("policy-" + index)
.contractPolicyId("policy-" + index)
.assetSelector(List.of(UiCriterion.builder()
.operandLeft(Prop.Edc.ID)
.operator(UiCriterionOperator.EQ)
.operandRight(UiCriterionLiteral.builder()
.type(UiCriterionLiteralType.VALUE)
.value("asset-" + index)
.build())
.build()))
.build()
);
}

private static void createPolicy(EdcClient client, int index) {
System.out.println("Create policies " + index);
var afterYesterday = UiPolicyExpression.builder()
.type(UiPolicyExpressionType.CONSTRAINT)
.constraint(UiPolicyConstraint.builder()
.left("POLICY_EVALUATION_TIME")
.operator(OperatorDto.GT)
.right(UiPolicyLiteral.builder()
.type(UiPolicyLiteralType.STRING)
.value(OffsetDateTime.now().minusDays(1).toString())
.build())
.build())
.build();

var beforeTomorrow = UiPolicyExpression.builder()
.type(UiPolicyExpressionType.CONSTRAINT)
.constraint(UiPolicyConstraint.builder()
.left("POLICY_EVALUATION_TIME")
.operator(OperatorDto.LT)
.right(UiPolicyLiteral.builder()
.type(UiPolicyLiteralType.STRING)
.value(OffsetDateTime.now().plusDays(1).toString())
.build())
.build())
.build();

var expression = UiPolicyExpression.builder()
.type(UiPolicyExpressionType.AND)
.expressions(List.of(afterYesterday, beforeTomorrow))
.build();

client.uiApi().createPolicyDefinitionV2(
PolicyDefinitionCreateDto.builder()
.policyDefinitionId("policy-" + index)
.expression(expression)
.build()
);
}

private static void createAsset(EdcClient client, int index) {
System.out.println("Create asset " + index);
client.uiApi().createAsset(
UiAssetCreateRequest.builder()
.title("Test Asset " + index)
.id("asset-" + index)
.dataSource(
UiDataSource.builder()
.type(DataSourceType.HTTP_DATA)
.httpData(UiDataSourceHttpData.builder()
.baseUrl("http://example.com")
.build())
.build()
)
.build()
);
}
}
Loading

0 comments on commit 48b21ed

Please sign in to comment.