From bfa39e8f92c92a69123055903ba7ebd816d3b8eb Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Tue, 31 May 2022 10:06:36 -0700 Subject: [PATCH 01/22] use validUntil in c2d payload --- ocean_provider/routes/compute.py | 6 ++---- ocean_provider/validation/algo.py | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/ocean_provider/routes/compute.py b/ocean_provider/routes/compute.py index 5e6dd6f6..55b60690 100644 --- a/ocean_provider/routes/compute.py +++ b/ocean_provider/routes/compute.py @@ -438,9 +438,7 @@ def computeStart(): logger.debug("Sending: %s", workflow) compute_env = data.get("environment") - seconds = ( - datetime.fromtimestamp(validator.valid_until) - datetime.utcnow() - ).seconds + nonce, provider_signature = sign_for_compute(provider_wallet, consumer_address) web3 = get_web3() @@ -451,7 +449,7 @@ def computeStart(): "owner": consumer_address, "providerAddress": provider_wallet.address, "environment": compute_env, - "maxDuration": seconds, + "validUntil": validator.valid_until, "nonce": nonce, "chainId": web3.chain_id, } diff --git a/ocean_provider/validation/algo.py b/ocean_provider/validation/algo.py index 680ded4c..763f8f64 100644 --- a/ocean_provider/validation/algo.py +++ b/ocean_provider/validation/algo.py @@ -112,7 +112,7 @@ def validate_input(self, index=0): valid_until_list.append(self.algo_valid_until) provider_fee_amounts.append(self.algo_fee_amount) - self.valid_until = min(valid_until_list) + self.valid_until = max(valid_until_list) provider_fee_token = os.environ.get( "PROVIDER_FEE_TOKEN", "0x0000000000000000000000000000000000000000" From 2521268e2a733eedfbbaa1fb1cbf7fc214569f13 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Tue, 31 May 2022 10:21:05 -0700 Subject: [PATCH 02/22] fix lint --- ocean_provider/routes/compute.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ocean_provider/routes/compute.py b/ocean_provider/routes/compute.py index 55b60690..b581c88f 100644 --- a/ocean_provider/routes/compute.py +++ b/ocean_provider/routes/compute.py @@ -438,7 +438,6 @@ def computeStart(): logger.debug("Sending: %s", workflow) compute_env = data.get("environment") - nonce, provider_signature = sign_for_compute(provider_wallet, consumer_address) web3 = get_web3() From 8028c9dfbcdd18981091fbeea53e294971565117 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 2 Jun 2022 00:45:17 -0700 Subject: [PATCH 03/22] use Ocean as default for PROVIDER_FEE_TOKEN --- ocean_provider/utils/address.py | 15 +++++++++++++++ ocean_provider/utils/compute_environments.py | 5 ++--- ocean_provider/validation/algo.py | 6 +++--- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/ocean_provider/utils/address.py b/ocean_provider/utils/address.py index 54e0687b..07363e72 100644 --- a/ocean_provider/utils/address.py +++ b/ocean_provider/utils/address.py @@ -2,10 +2,12 @@ # Copyright 2021 Ocean Protocol Foundation # SPDX-License-Identifier: Apache-2.0 # +from itertools import chain import json from pathlib import Path from typing import Any, Dict, Union from eth_typing.evm import HexAddress +from ocean_provider.utils.basics import get_config def get_address_json(address_path: Union[str, Path]) -> Dict[str, Any]: @@ -27,3 +29,16 @@ def get_contract_address( for chain_addresses in address_json.values() if chain_addresses["chainId"] == chain_id ) + +def get_provider_fee_token(chain_id): + fee_token = os.environ.get( + "PROVIDER_FEE_TOKEN", get_ocean_address(chain_id) + ) + if not fee_token: + return "0x0000000000000000000000000000000000000000" + +def get_ocean_address(chain_id): + return get_contract_address( + get_config().address_file, "Ocean", chain_id + ) + diff --git a/ocean_provider/utils/compute_environments.py b/ocean_provider/utils/compute_environments.py index 6d6a52b5..d2845894 100644 --- a/ocean_provider/utils/compute_environments.py +++ b/ocean_provider/utils/compute_environments.py @@ -3,6 +3,7 @@ from urllib.parse import urljoin from ocean_provider.requests_session import get_requests_session +from ocean_provider.utils.address import get_provider_fee_token from ocean_provider.utils.basics import get_config, get_web3 @@ -27,9 +28,7 @@ def get_c2d_environments() -> List: # loop envs and add provider token from config envs = response.json() for env in envs: - env["feeToken"] = os.getenv( - "PROVIDER_FEE_TOKEN", "0x0000000000000000000000000000000000000000" - ) + env["feeToken"] = get_provider_fee_token(web3.chain_id) return envs diff --git a/ocean_provider/validation/algo.py b/ocean_provider/validation/algo.py index 763f8f64..269e9992 100644 --- a/ocean_provider/validation/algo.py +++ b/ocean_provider/validation/algo.py @@ -12,6 +12,7 @@ get_asset_from_metadatastore, check_asset_consumable, ) +from ocean_provider.utils.address import get_provider_fee_token from ocean_provider.utils.basics import get_config, get_metadata_url from ocean_provider.utils.datatoken import ( record_consume_request, @@ -114,9 +115,8 @@ def validate_input(self, index=0): self.valid_until = max(valid_until_list) - provider_fee_token = os.environ.get( - "PROVIDER_FEE_TOKEN", "0x0000000000000000000000000000000000000000" - ) + provider_fee_token = get_provider_fee_token(self.web3.chain_id) + required_provider_fee = get_provider_fee_amount( self.valid_until, self.data.get("environment"), From 616c65739172abf3fd7160ae177ac6e6001d6d52 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 2 Jun 2022 00:46:05 -0700 Subject: [PATCH 04/22] missing change --- ocean_provider/utils/provider_fees.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ocean_provider/utils/provider_fees.py b/ocean_provider/utils/provider_fees.py index 64ab0185..ca1f03f4 100644 --- a/ocean_provider/utils/provider_fees.py +++ b/ocean_provider/utils/provider_fees.py @@ -9,6 +9,7 @@ from eth_keys.backends import NativeECCBackend from ocean_provider.requests_session import get_requests_session from ocean_provider.utils.asset import get_asset_from_metadatastore +from ocean_provider.utils.address import get_provider_fee_token from ocean_provider.utils.basics import ( get_provider_wallet, get_metadata_url, @@ -39,10 +40,8 @@ def get_provider_fees( web3 = get_web3() provider_wallet = get_provider_wallet() provider_fee_address = provider_wallet.address - provider_fee_token = os.environ.get( - "PROVIDER_FEE_TOKEN", "0x0000000000000000000000000000000000000000" - ) - + provider_fee_token = get_provider_fee_token(web3.chain_id) + if compute_env and not force_zero: provider_fee_amount = get_provider_fee_amount( valid_until, compute_env, web3, provider_fee_token From 1be970bad9d9256590cd2d75c65c499530321279 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 2 Jun 2022 00:53:40 -0700 Subject: [PATCH 05/22] fix black --- ocean_provider/utils/address.py | 11 ++++------- ocean_provider/utils/provider_fees.py | 2 +- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/ocean_provider/utils/address.py b/ocean_provider/utils/address.py index 07363e72..46a61d5d 100644 --- a/ocean_provider/utils/address.py +++ b/ocean_provider/utils/address.py @@ -30,15 +30,12 @@ def get_contract_address( if chain_addresses["chainId"] == chain_id ) + def get_provider_fee_token(chain_id): - fee_token = os.environ.get( - "PROVIDER_FEE_TOKEN", get_ocean_address(chain_id) - ) + fee_token = os.environ.get("PROVIDER_FEE_TOKEN", get_ocean_address(chain_id)) if not fee_token: return "0x0000000000000000000000000000000000000000" -def get_ocean_address(chain_id): - return get_contract_address( - get_config().address_file, "Ocean", chain_id - ) +def get_ocean_address(chain_id): + return get_contract_address(get_config().address_file, "Ocean", chain_id) diff --git a/ocean_provider/utils/provider_fees.py b/ocean_provider/utils/provider_fees.py index ca1f03f4..03ff9cb0 100644 --- a/ocean_provider/utils/provider_fees.py +++ b/ocean_provider/utils/provider_fees.py @@ -41,7 +41,7 @@ def get_provider_fees( provider_wallet = get_provider_wallet() provider_fee_address = provider_wallet.address provider_fee_token = get_provider_fee_token(web3.chain_id) - + if compute_env and not force_zero: provider_fee_amount = get_provider_fee_amount( valid_until, compute_env, web3, provider_fee_token From 40617f7e8911916b8917aa6cb8a1a5b56b7d04a6 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 2 Jun 2022 01:01:07 -0700 Subject: [PATCH 06/22] remove unused import --- ocean_provider/utils/address.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ocean_provider/utils/address.py b/ocean_provider/utils/address.py index 46a61d5d..2781d786 100644 --- a/ocean_provider/utils/address.py +++ b/ocean_provider/utils/address.py @@ -2,7 +2,6 @@ # Copyright 2021 Ocean Protocol Foundation # SPDX-License-Identifier: Apache-2.0 # -from itertools import chain import json from pathlib import Path from typing import Any, Dict, Union From dd6972f01b57503c49d13741b79eb5c93388e050 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 2 Jun 2022 01:17:37 -0700 Subject: [PATCH 07/22] add missing import --- ocean_provider/utils/address.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ocean_provider/utils/address.py b/ocean_provider/utils/address.py index 2781d786..18a93586 100644 --- a/ocean_provider/utils/address.py +++ b/ocean_provider/utils/address.py @@ -3,6 +3,7 @@ # SPDX-License-Identifier: Apache-2.0 # import json +import os from pathlib import Path from typing import Any, Dict, Union from eth_typing.evm import HexAddress From 63b619c004108b9612f572c27500b2b22125beb7 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 2 Jun 2022 01:21:51 -0700 Subject: [PATCH 08/22] use BLACK_HOLE address --- ocean_provider/utils/address.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ocean_provider/utils/address.py b/ocean_provider/utils/address.py index 18a93586..f73991c3 100644 --- a/ocean_provider/utils/address.py +++ b/ocean_provider/utils/address.py @@ -9,6 +9,7 @@ from eth_typing.evm import HexAddress from ocean_provider.utils.basics import get_config +BLACK_HOLE_ADDRESS = "0x0000000000000000000000000000000000000000" def get_address_json(address_path: Union[str, Path]) -> Dict[str, Any]: """Return the json object of all Ocean contract addresses on all chains.""" @@ -34,7 +35,7 @@ def get_contract_address( def get_provider_fee_token(chain_id): fee_token = os.environ.get("PROVIDER_FEE_TOKEN", get_ocean_address(chain_id)) if not fee_token: - return "0x0000000000000000000000000000000000000000" + return BLACK_HOLE_ADDRESS def get_ocean_address(chain_id): From b3bd8a91464121f5648d269d5beab03c7b7bdea4 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 2 Jun 2022 02:43:57 -0700 Subject: [PATCH 09/22] fix get_provider_fee_token --- ocean_provider/utils/address.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ocean_provider/utils/address.py b/ocean_provider/utils/address.py index f73991c3..e5e18eb0 100644 --- a/ocean_provider/utils/address.py +++ b/ocean_provider/utils/address.py @@ -11,6 +11,7 @@ BLACK_HOLE_ADDRESS = "0x0000000000000000000000000000000000000000" + def get_address_json(address_path: Union[str, Path]) -> Dict[str, Any]: """Return the json object of all Ocean contract addresses on all chains.""" if isinstance(address_path, str): @@ -25,6 +26,9 @@ def get_contract_address( ) -> HexAddress: """Return the contract address with the given name and chain id""" address_json = get_address_json(address_path) + print(address_json) + print(contract_name) + print(chain_id) return next( chain_addresses[contract_name] for chain_addresses in address_json.values() @@ -35,7 +39,8 @@ def get_contract_address( def get_provider_fee_token(chain_id): fee_token = os.environ.get("PROVIDER_FEE_TOKEN", get_ocean_address(chain_id)) if not fee_token: - return BLACK_HOLE_ADDRESS + fee_token = BLACK_HOLE_ADDRESS + return fee_token def get_ocean_address(chain_id): From e1fe259dfeebded93677e4c0ce259fd9d4cc59e7 Mon Sep 17 00:00:00 2001 From: Calina Cenan Date: Thu, 2 Jun 2022 12:21:02 +0000 Subject: [PATCH 10/22] Fix algo validation tests. --- ocean_provider/validation/test/test_algo_validation.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ocean_provider/validation/test/test_algo_validation.py b/ocean_provider/validation/test/test_algo_validation.py index e717fedb..75d1479a 100644 --- a/ocean_provider/validation/test/test_algo_validation.py +++ b/ocean_provider/validation/test/test_algo_validation.py @@ -7,6 +7,7 @@ import pytest from ocean_provider.utils.asset import Asset +from ocean_provider.utils.basics import get_web3 from ocean_provider.utils.services import Service, ServiceType from ocean_provider.validation.algo import WorkflowValidator from tests.ddo.ddo_sample1_compute import alg_ddo_dict, ddo_dict @@ -31,6 +32,7 @@ ) def test_passes_algo_ddo(provider_wallet, consumer_address, web3): """Tests happy flow of validator with algo ddo.""" + web3 = get_web3() ddo = Asset(ddo_dict) alg_ddo = Asset(alg_ddo_dict) sa_compute = get_first_service_by_type(alg_ddo, ServiceType.ACCESS) @@ -72,6 +74,7 @@ def side_effect(*args, **kwargs): ) def test_passes_raw(provider_wallet, consumer_address, web3): """Tests happy flow of validator with raw algo.""" + web3 = get_web3() ddo = Asset(ddo_dict) sa = get_first_service_by_type(ddo, ServiceType.COMPUTE) data = { @@ -229,6 +232,7 @@ def test_fails_meta_issues(provider_wallet, consumer_address, web3): return_value=[{"url": "dummy"}], ) def test_additional_datasets(provider_wallet, consumer_address, web3): + web3 = get_web3() ddo = Asset(ddo_dict) alg_ddo = Asset(alg_ddo_dict) sa_compute = get_first_service_by_type(alg_ddo, ServiceType.ACCESS) @@ -900,6 +904,7 @@ def another_side_effect(*args, **kwargs): ) def test_fee_amount_not_paid(provider_wallet, consumer_address, web3): """Tests happy flow of validator with algo ddo.""" + web3 = get_web3() ddo = Asset(ddo_dict) alg_ddo = Asset(alg_ddo_dict) sa_compute = get_first_service_by_type(alg_ddo, ServiceType.ACCESS) From a69e05d190590a755981c748f4becd23a5215d69 Mon Sep 17 00:00:00 2001 From: Calina Cenan Date: Thu, 2 Jun 2022 13:47:44 +0000 Subject: [PATCH 11/22] Fix tests for algo validation. --- ocean_provider/validation/test/test_algo_validation.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ocean_provider/validation/test/test_algo_validation.py b/ocean_provider/validation/test/test_algo_validation.py index 75d1479a..80f15340 100644 --- a/ocean_provider/validation/test/test_algo_validation.py +++ b/ocean_provider/validation/test/test_algo_validation.py @@ -45,6 +45,7 @@ def test_passes_algo_ddo(provider_wallet, consumer_address, web3): "serviceId": sa_compute.id, "transferTxId": "alg_tx_id", }, + "environment": "ocean-compute", } def side_effect(*args, **kwargs): @@ -88,6 +89,7 @@ def test_passes_raw(provider_wallet, consumer_address, web3): "container": {"entrypoint": "node $ALGO", "image": "node", "tag": "10"}, }, }, + "environment": "ocean-compute", } with patch( @@ -246,6 +248,7 @@ def test_additional_datasets(provider_wallet, consumer_address, web3): "transferTxId": "alg_tx_id", }, "additionalDatasets": "", + "environment": "ocean-compute", } def side_effect(*args, **kwargs): @@ -817,6 +820,7 @@ def test_success_multiple_services_types(provider_wallet, consumer_address, web3 "additionalDatasets": [ {"documentId": ddo.did, "transferTxId": "ddo.did", "serviceId": "access_1"} ], + "environment": "ocean-compute", } def side_effect(*args, **kwargs): From 57153db9ad13117a2f3178ec3d2a4619d47b1957 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 2 Jun 2022 08:34:25 -0700 Subject: [PATCH 12/22] force env --- tests/helpers/compute_helpers.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/helpers/compute_helpers.py b/tests/helpers/compute_helpers.py index 2cc2e5fb..dc9dc83e 100644 --- a/tests/helpers/compute_helpers.py +++ b/tests/helpers/compute_helpers.py @@ -26,6 +26,7 @@ def build_and_send_ddo_with_compute_service( do_send=True, short_valid_until=True, timeout=3600, + c2d_environment='ocean-compute' ): web3 = get_web3() algo_metadata = build_metadata_dict_type_algorithm() @@ -82,8 +83,6 @@ def build_and_send_ddo_with_compute_service( datatoken = service.datatoken_address mint_100_datatokens(web3, datatoken, consumer_wallet.address, publisher_wallet) - environments = get_c2d_environments() - if not do_send: return (dataset_ddo_w_compute_service, alg_ddo) @@ -97,7 +96,7 @@ def build_and_send_ddo_with_compute_service( service, consumer_wallet.address, get_future_valid_until(short=short_valid_until), - environments[0]["id"], + c2d_environment, ), consumer_wallet, ) @@ -114,7 +113,7 @@ def build_and_send_ddo_with_compute_service( alg_service, consumer_wallet.address, get_future_valid_until(short=short_valid_until), - environments[0]["id"], + c2d_environment, force_zero=True, ), consumer_wallet, From d0dea5864801c7faa0f848c4eb23e27063b10557 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 2 Jun 2022 08:37:23 -0700 Subject: [PATCH 13/22] fix black --- tests/helpers/compute_helpers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/helpers/compute_helpers.py b/tests/helpers/compute_helpers.py index dc9dc83e..9af6078f 100644 --- a/tests/helpers/compute_helpers.py +++ b/tests/helpers/compute_helpers.py @@ -26,7 +26,7 @@ def build_and_send_ddo_with_compute_service( do_send=True, short_valid_until=True, timeout=3600, - c2d_environment='ocean-compute' + c2d_environment="ocean-compute", ): web3 = get_web3() algo_metadata = build_metadata_dict_type_algorithm() From 7444bb83ef81e857d29a2466830f5f342ca8b082 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 2 Jun 2022 09:35:01 -0700 Subject: [PATCH 14/22] more fixes --- ocean_provider/utils/provider_fees.py | 2 +- tests/test_compute.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ocean_provider/utils/provider_fees.py b/ocean_provider/utils/provider_fees.py index 03ff9cb0..8c069374 100644 --- a/ocean_provider/utils/provider_fees.py +++ b/ocean_provider/utils/provider_fees.py @@ -173,7 +173,7 @@ def get_provider_fee_amount(valid_until, compute_env, web3, provider_fee_token): if provider_fee_token == "0x0000000000000000000000000000000000000000": return 0 - provider_fee_amount = float(seconds * env["priceMin"] / 60) + provider_fee_amount = float(seconds * float(env["priceMin"]) / 60) dt = get_datatoken_contract(web3, provider_fee_token) decimals = dt.caller.decimals() diff --git a/tests/test_compute.py b/tests/test_compute.py index 6f1b47da..c9405181 100644 --- a/tests/test_compute.py +++ b/tests/test_compute.py @@ -157,6 +157,7 @@ def test_compute(client, publisher_wallet, consumer_wallet): False, None, environments[0]["consumerAddress"], + environments[0]["id"], ) sa_compute = get_first_service_by_type(alg_ddo, ServiceType.ACCESS) sa = get_first_service_by_type(ddo, ServiceType.COMPUTE) From 8f451d899e54cb2fa18cdbc45beb304a8b12cc7b Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 2 Jun 2022 10:28:15 -0700 Subject: [PATCH 15/22] improve actions flow --- .github/workflows/pytest.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index c85d6a22..4bc31c79 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -30,16 +30,18 @@ jobs: CONTRACTS_VERSION: v1.0.0-alpha.32 run: | bash -x start_ocean.sh --no-dashboard 2>&1 --with-rbac --with-provider2 --with-c2d > start_ocean.log & - for i in $(seq 1 150); do - sleep 5 - [ -f "$HOME/.ocean/ocean-contracts/artifacts/ready" -a -f "$HOME/.ocean/ocean/c2d/ready" ] && break - done - ls -la "$HOME/.ocean/ocean-contracts/artifacts/" - name: Install dependencies working-directory: ${{ github.workspace }} run: | python -m pip install --upgrade pip pip install -r requirements_dev.txt + - name: Wait for contracts deployment and C2D cluster to be ready + working-directory: ${{ github.workspace }}/barge + run: | + for i in $(seq 1 250); do + sleep 10 + [ -f "$HOME/.ocean/ocean-contracts/artifacts/ready" -a -f "$HOME/.ocean/ocean-c2d/ready" ] && break + done - name: Test with pytest run: | coverage run --source ocean_provider -m pytest From 84a8057922e7eae0638a007c3a7523e8b5b53558 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 2 Jun 2022 10:53:30 -0700 Subject: [PATCH 16/22] add docker auth --- .github/workflows/pytest.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index 4bc31c79..f6d5b622 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -24,6 +24,13 @@ jobs: repository: "oceanprotocol/barge" path: 'barge' ref: v4 + - name: Login to Docker Hub + if: ${{ env.DOCKERHUB_PASSWORD && env.DOCKERHUB_USERNAME }} + run: | + echo "Login to Docker Hub";echo "$DOCKERHUB_PASSWORD" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin + env: + DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} + DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }} - name: Run Barge working-directory: ${{ github.workspace }}/barge env: From 50066f2cd7643f1a14d12c95118db2c33aa70d2d Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 2 Jun 2022 11:33:23 -0700 Subject: [PATCH 17/22] search and use correct env --- tests/test_compute.py | 70 +++++++++++++++++++++++++++---------------- 1 file changed, 45 insertions(+), 25 deletions(-) diff --git a/tests/test_compute.py b/tests/test_compute.py index c9405181..5bc5648f 100644 --- a/tests/test_compute.py +++ b/tests/test_compute.py @@ -37,6 +37,14 @@ def test_compute_rejected(client, monkeypatch): @pytest.mark.integration @pytest.mark.parametrize("allow_raw_algos", [True, False]) +def get_free_c2d_env(): + environments = get_c2d_environments() + for env in environments: + if env["priceMin"] == 0: + return env + return None + + def test_compute_raw_algo( client, publisher_wallet, consumer_wallet, consumer_address, web3, allow_raw_algos ): @@ -57,18 +65,19 @@ def test_compute_raw_algo( "version": "0.1", "container": {"entrypoint": "node $ALGO", "image": "node", "tag": "10"}, } - environments = get_c2d_environments() + environment = get_free_c2d_env() + assert environment, f"Cannot find a free c2d env" tx_id, _ = start_order( web3, datatoken, - environments[0]["consumerAddress"], + environment["consumerAddress"], sa.index, get_provider_fees( dataset_ddo_w_compute_service.did, sa, consumer_wallet.address, get_future_valid_until(), - environments[0]["id"], + environment["id"], ), consumer_wallet, ) @@ -87,7 +96,7 @@ def test_compute_raw_algo( "signature": signature, "nonce": nonce, "consumerAddress": consumer_address, - "environment": environments[0]["id"], + "environment": environment["id"], } response = post_to_compute(client, payload) @@ -105,14 +114,16 @@ def test_compute_raw_algo( def test_compute_specific_algo_dids( client, publisher_wallet, consumer_wallet, consumer_address ): - environments = get_c2d_environments() + environment = get_free_c2d_env() + assert environment, f"Cannot find a free c2d env" ddo, tx_id, alg_ddo, _ = build_and_send_ddo_with_compute_service( client, publisher_wallet, consumer_wallet, False, None, - environments[0]["consumerAddress"], + environment["consumerAddress"], + environment["id"], ) sa = get_first_service_by_type(ddo, ServiceType.COMPUTE) nonce, signature = get_compute_signature(client, consumer_wallet, ddo.did) @@ -133,7 +144,7 @@ def test_compute_specific_algo_dids( "signature": signature, "nonce": nonce, "consumerAddress": consumer_address, - "environment": environments[0]["id"], + "environment": environment["id"], } response = post_to_compute(client, payload) @@ -149,15 +160,16 @@ def test_compute_specific_algo_dids( @pytest.mark.integration def test_compute(client, publisher_wallet, consumer_wallet): - environments = get_c2d_environments() + environment = get_free_c2d_env() + assert environment, f"Cannot find a free c2d env" ddo, tx_id, alg_ddo, alg_tx_id = build_and_send_ddo_with_compute_service( client, publisher_wallet, consumer_wallet, False, None, - environments[0]["consumerAddress"], - environments[0]["id"], + environment["consumerAddress"], + environment["id"], ) sa_compute = get_first_service_by_type(alg_ddo, ServiceType.ACCESS) sa = get_first_service_by_type(ddo, ServiceType.COMPUTE) @@ -174,7 +186,7 @@ def test_compute(client, publisher_wallet, consumer_wallet): "signature": signature, "nonce": nonce, "consumerAddress": consumer_wallet.address, - "environment": environments[0]["id"], + "environment": environment["id"], } # Start compute using invalid signature (withOUT nonce), should fail @@ -277,14 +289,16 @@ def test_compute(client, publisher_wallet, consumer_wallet): @pytest.mark.integration def test_compute_diff_provider(client, publisher_wallet, consumer_wallet): - environments = get_c2d_environments() + environment = get_free_c2d_env() + assert environment, f"Cannot find a free c2d env" ddo, tx_id, alg_ddo, alg_tx_id = build_and_send_ddo_with_compute_service( client, publisher_wallet, consumer_wallet, True, None, - environments[0]["consumerAddress"], + environment["consumerAddress"], + environment["id"], ) sa_compute = get_first_service_by_type(alg_ddo, ServiceType.ACCESS) sa = get_first_service_by_type(ddo, ServiceType.COMPUTE) @@ -301,7 +315,7 @@ def test_compute_diff_provider(client, publisher_wallet, consumer_wallet): "signature": signature, "nonce": nonce, "consumerAddress": consumer_wallet.address, - "environment": environments[0]["id"], + "environment": environment["id"], } response = post_to_compute(client, payload) @@ -310,14 +324,16 @@ def test_compute_diff_provider(client, publisher_wallet, consumer_wallet): @pytest.mark.integration def test_compute_allow_all_published(client, publisher_wallet, consumer_wallet): - environments = get_c2d_environments() + environment = get_free_c2d_env() + assert environment, f"Cannot find a free c2d env" ddo, tx_id, alg_ddo, alg_tx_id = build_and_send_ddo_with_compute_service( client, publisher_wallet, consumer_wallet, False, "allow_all_published", - environments[0]["consumerAddress"], + environment["consumerAddress"], + environment["id"], ) sa_compute = get_first_service_by_type(alg_ddo, ServiceType.ACCESS) sa = get_first_service_by_type(ddo, ServiceType.COMPUTE) @@ -349,7 +365,7 @@ def test_compute_allow_all_published(client, publisher_wallet, consumer_wallet): ) # Start on the correct environment - payload["environment"] = environments[0]["id"] + payload["environment"] = environment["id"] response = post_to_compute(client, payload) assert response.status == "200 OK" @@ -358,14 +374,16 @@ def test_compute_allow_all_published(client, publisher_wallet, consumer_wallet): def test_compute_additional_input( client, publisher_wallet, consumer_wallet, monkeypatch ): - environments = get_c2d_environments() + environment = get_free_c2d_env() + assert environment, f"Cannot find a free c2d env" ddo, tx_id, alg_ddo, alg_tx_id = build_and_send_ddo_with_compute_service( client, publisher_wallet, consumer_wallet, False, None, - environments[0]["consumerAddress"], + environment["consumerAddress"], + environment["id"], ) sa_compute = get_first_service_by_type(alg_ddo, ServiceType.ACCESS) sa = get_first_service_by_type(ddo, ServiceType.COMPUTE) @@ -386,14 +404,14 @@ def test_compute_additional_input( tx_id2, _ = start_order( web3, sa2.datatoken_address, - environments[0]["consumerAddress"], + environment["consumerAddress"], sa2.index, get_provider_fees( ddo2.did, sa2, consumer_wallet.address, get_future_valid_until(), - environments[0]["id"], + environment["id"], force_zero=True, ), consumer_wallet, @@ -427,7 +445,7 @@ def test_compute_additional_input( "userdata": {"test_key": "test_value"}, } ], - "environment": environments[0]["id"], + "environment": environment["id"], } monkeypatch.setenv("RBAC_SERVER_URL", "http://172.15.0.8:3000") @@ -442,14 +460,16 @@ def test_compute_additional_input( def test_compute_delete_job( client, publisher_wallet, consumer_wallet, consumer_address ): - environments = get_c2d_environments() + environment = get_free_c2d_env() + assert environment, f"Cannot find a free c2d env" ddo, tx_id, alg_ddo, alg_tx_id = build_and_send_ddo_with_compute_service( client, publisher_wallet, consumer_wallet, False, None, - environments[0]["consumerAddress"], + environment["consumerAddress"], + environment["id"], ) sa_compute = get_first_service_by_type(alg_ddo, ServiceType.ACCESS) sa = get_first_service_by_type(ddo, ServiceType.COMPUTE) @@ -466,7 +486,7 @@ def test_compute_delete_job( "signature": signature, "nonce": nonce, "consumerAddress": consumer_wallet.address, - "environment": environments[0]["id"], + "environment": environment["id"], } response = post_to_compute(client, payload) From 4dde01c0c77cf66ee68dc10998fdc16dc65da913 Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 2 Jun 2022 22:02:58 +0300 Subject: [PATCH 18/22] more tests --- tests/test_compute.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/tests/test_compute.py b/tests/test_compute.py index 5bc5648f..84e7a702 100644 --- a/tests/test_compute.py +++ b/tests/test_compute.py @@ -28,6 +28,14 @@ from tests.test_helpers import get_first_service_by_type +def get_free_c2d_env(): + environments = get_c2d_environments() + for env in environments: + if env["priceMin"] == 0: + return env + return None + + @pytest.mark.unit def test_compute_rejected(client, monkeypatch): monkeypatch.delenv("OPERATOR_SERVICE_URL") @@ -37,14 +45,6 @@ def test_compute_rejected(client, monkeypatch): @pytest.mark.integration @pytest.mark.parametrize("allow_raw_algos", [True, False]) -def get_free_c2d_env(): - environments = get_c2d_environments() - for env in environments: - if env["priceMin"] == 0: - return env - return None - - def test_compute_raw_algo( client, publisher_wallet, consumer_wallet, consumer_address, web3, allow_raw_algos ): @@ -525,5 +525,6 @@ def test_compute_delete_job( def test_compute_environments(client): compute_envs_endpoint = BaseURLs.SERVICES_URL + "/computeEnvironments" response = client.get(compute_envs_endpoint) - - assert response.json[0]["id"] == "ocean-compute" + for env in response.json: + if env["priceMin"] == 0: + assert env["id"] == "ocean-compute" From 2141f16aabe6e54b89318dc3c823401c00f0dfca Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 2 Jun 2022 23:00:25 +0300 Subject: [PATCH 19/22] remove print lines --- ocean_provider/utils/address.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/ocean_provider/utils/address.py b/ocean_provider/utils/address.py index e5e18eb0..1c9bb20b 100644 --- a/ocean_provider/utils/address.py +++ b/ocean_provider/utils/address.py @@ -26,9 +26,6 @@ def get_contract_address( ) -> HexAddress: """Return the contract address with the given name and chain id""" address_json = get_address_json(address_path) - print(address_json) - print(contract_name) - print(chain_id) return next( chain_addresses[contract_name] for chain_addresses in address_json.values() From 50358d9b27f7a1840a36e0fffe1357ec69c3f7fa Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 2 Jun 2022 23:35:51 +0300 Subject: [PATCH 20/22] more tests --- tests/test_compute.py | 10 +--------- tests/test_helpers.py | 10 ++++++++++ tests/test_initialize.py | 10 ++++++---- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/tests/test_compute.py b/tests/test_compute.py index 84e7a702..96781635 100644 --- a/tests/test_compute.py +++ b/tests/test_compute.py @@ -25,15 +25,7 @@ start_order, ) from tests.helpers.ddo_dict_builders import build_metadata_dict_type_algorithm -from tests.test_helpers import get_first_service_by_type - - -def get_free_c2d_env(): - environments = get_c2d_environments() - for env in environments: - if env["priceMin"] == 0: - return env - return None +from tests.test_helpers import get_free_c2d_env, get_first_service_by_type @pytest.mark.unit diff --git a/tests/test_helpers.py b/tests/test_helpers.py index 42f12f20..a793727a 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -25,8 +25,10 @@ from ocean_provider.utils.datatoken import get_datatoken_contract from ocean_provider.utils.did import compute_did_from_data_nft_address_and_chain_id from ocean_provider.utils.encryption import do_encrypt +from ocean_provider.utils.provider_fees import get_c2d_environments from ocean_provider.utils.services import Service, ServiceType from ocean_provider.utils.util import sign_send_and_wait_for_receipt, sign_tx + from tests.helpers.ddo_dict_builders import ( build_credentials_dict, build_ddo_dict, @@ -477,3 +479,11 @@ def build_custom_services( def get_first_service_by_type(asset, service_type: ServiceType) -> Service: """Return the first Service with the given ServiceType.""" return next((service for service in asset.services if service.type == service_type)) + + +def get_free_c2d_env(): + environments = get_c2d_environments() + for env in environments: + if env["priceMin"] == 0: + return env + return None diff --git a/tests/test_initialize.py b/tests/test_initialize.py index 17d25def..df038b09 100644 --- a/tests/test_initialize.py +++ b/tests/test_initialize.py @@ -20,6 +20,7 @@ get_dataset_with_invalid_url_ddo, get_dataset_with_ipfs_url_ddo, get_first_service_by_type, + get_free_c2d_env, get_registered_asset, initialize_service, mint_100_datatokens, @@ -243,8 +244,8 @@ def test_initialize_compute_order_reused(client, publisher_wallet, consumer_wall Case 4: wrong tx id for dataset order """ - environments = get_c2d_environments() - + environment = get_free_c2d_env() + assert environment, f"Cannot find a free c2d env" # Order asset, valid for 60 seconds ddo, tx_id, alg_ddo, alg_tx_id = build_and_send_ddo_with_compute_service( client, @@ -252,9 +253,10 @@ def test_initialize_compute_order_reused(client, publisher_wallet, consumer_wall consumer_wallet, True, None, - environments[0]["consumerAddress"], + environment["consumerAddress"], short_valid_until=True, timeout=60, + c2d_environment=environment["id"], ) service = get_first_service_by_type(ddo, ServiceType.COMPUTE) sa_compute = get_first_service_by_type(alg_ddo, ServiceType.ACCESS) @@ -275,7 +277,7 @@ def test_initialize_compute_order_reused(client, publisher_wallet, consumer_wall }, "consumerAddress": consumer_wallet.address, "compute": { - "env": environments[0]["id"], + "env": environment["id"], "validUntil": get_future_valid_until(short=True), }, } From f717503f36cfb797deeae443790b94a7374cf4ed Mon Sep 17 00:00:00 2001 From: alexcos20 Date: Thu, 2 Jun 2022 23:56:02 +0300 Subject: [PATCH 21/22] optimize --- ocean_provider/utils/address.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ocean_provider/utils/address.py b/ocean_provider/utils/address.py index 1c9bb20b..2c438774 100644 --- a/ocean_provider/utils/address.py +++ b/ocean_provider/utils/address.py @@ -35,9 +35,7 @@ def get_contract_address( def get_provider_fee_token(chain_id): fee_token = os.environ.get("PROVIDER_FEE_TOKEN", get_ocean_address(chain_id)) - if not fee_token: - fee_token = BLACK_HOLE_ADDRESS - return fee_token + return fee_token if fee_token else BLACK_HOLE_ADDRESS def get_ocean_address(chain_id): From 3c03ee209b714ffe536bb995bb3922cd7a448c30 Mon Sep 17 00:00:00 2001 From: Calina Cenan Date: Fri, 3 Jun 2022 04:32:21 +0000 Subject: [PATCH 22/22] Add free c2d to conftest.py. --- conftest.py | 8 ++++ tests/test_compute.py | 84 +++++++++++++++++++--------------------- tests/test_helpers.py | 8 ---- tests/test_initialize.py | 13 +++---- 4 files changed, 53 insertions(+), 60 deletions(-) diff --git a/conftest.py b/conftest.py index abd822d4..fc46766d 100644 --- a/conftest.py +++ b/conftest.py @@ -10,6 +10,7 @@ from ocean_provider.run import app from ocean_provider.utils.basics import get_config, get_web3, send_ether +from ocean_provider.utils.provider_fees import get_c2d_environments app = app @@ -92,3 +93,10 @@ def setup_all(provider_address, consumer_address, ganache_wallet): @pytest.fixture def web3(): return get_web3() + + +@pytest.fixture +def free_c2d_env(): + environments = get_c2d_environments() + + return next(env for env in environments if float(env["priceMin"]) == float(0)) diff --git a/tests/test_compute.py b/tests/test_compute.py index 96781635..ea4b625e 100644 --- a/tests/test_compute.py +++ b/tests/test_compute.py @@ -25,7 +25,7 @@ start_order, ) from tests.helpers.ddo_dict_builders import build_metadata_dict_type_algorithm -from tests.test_helpers import get_free_c2d_env, get_first_service_by_type +from tests.test_helpers import get_first_service_by_type @pytest.mark.unit @@ -38,7 +38,13 @@ def test_compute_rejected(client, monkeypatch): @pytest.mark.integration @pytest.mark.parametrize("allow_raw_algos", [True, False]) def test_compute_raw_algo( - client, publisher_wallet, consumer_wallet, consumer_address, web3, allow_raw_algos + client, + publisher_wallet, + consumer_wallet, + consumer_address, + web3, + allow_raw_algos, + free_c2d_env, ): custom_services = "vanilla_compute" if allow_raw_algos else "norawalgo" @@ -57,19 +63,17 @@ def test_compute_raw_algo( "version": "0.1", "container": {"entrypoint": "node $ALGO", "image": "node", "tag": "10"}, } - environment = get_free_c2d_env() - assert environment, f"Cannot find a free c2d env" tx_id, _ = start_order( web3, datatoken, - environment["consumerAddress"], + free_c2d_env["consumerAddress"], sa.index, get_provider_fees( dataset_ddo_w_compute_service.did, sa, consumer_wallet.address, get_future_valid_until(), - environment["id"], + free_c2d_env["id"], ), consumer_wallet, ) @@ -88,7 +92,7 @@ def test_compute_raw_algo( "signature": signature, "nonce": nonce, "consumerAddress": consumer_address, - "environment": environment["id"], + "environment": free_c2d_env["id"], } response = post_to_compute(client, payload) @@ -104,18 +108,16 @@ def test_compute_raw_algo( @pytest.mark.integration def test_compute_specific_algo_dids( - client, publisher_wallet, consumer_wallet, consumer_address + client, publisher_wallet, consumer_wallet, consumer_address, free_c2d_env ): - environment = get_free_c2d_env() - assert environment, f"Cannot find a free c2d env" ddo, tx_id, alg_ddo, _ = build_and_send_ddo_with_compute_service( client, publisher_wallet, consumer_wallet, False, None, - environment["consumerAddress"], - environment["id"], + free_c2d_env["consumerAddress"], + free_c2d_env["id"], ) sa = get_first_service_by_type(ddo, ServiceType.COMPUTE) nonce, signature = get_compute_signature(client, consumer_wallet, ddo.did) @@ -136,7 +138,7 @@ def test_compute_specific_algo_dids( "signature": signature, "nonce": nonce, "consumerAddress": consumer_address, - "environment": environment["id"], + "environment": free_c2d_env["id"], } response = post_to_compute(client, payload) @@ -151,17 +153,15 @@ def test_compute_specific_algo_dids( @pytest.mark.integration -def test_compute(client, publisher_wallet, consumer_wallet): - environment = get_free_c2d_env() - assert environment, f"Cannot find a free c2d env" +def test_compute(client, publisher_wallet, consumer_wallet, free_c2d_env): ddo, tx_id, alg_ddo, alg_tx_id = build_and_send_ddo_with_compute_service( client, publisher_wallet, consumer_wallet, False, None, - environment["consumerAddress"], - environment["id"], + free_c2d_env["consumerAddress"], + free_c2d_env["id"], ) sa_compute = get_first_service_by_type(alg_ddo, ServiceType.ACCESS) sa = get_first_service_by_type(ddo, ServiceType.COMPUTE) @@ -178,7 +178,7 @@ def test_compute(client, publisher_wallet, consumer_wallet): "signature": signature, "nonce": nonce, "consumerAddress": consumer_wallet.address, - "environment": environment["id"], + "environment": free_c2d_env["id"], } # Start compute using invalid signature (withOUT nonce), should fail @@ -280,17 +280,15 @@ def test_compute(client, publisher_wallet, consumer_wallet): @pytest.mark.integration -def test_compute_diff_provider(client, publisher_wallet, consumer_wallet): - environment = get_free_c2d_env() - assert environment, f"Cannot find a free c2d env" +def test_compute_diff_provider(client, publisher_wallet, consumer_wallet, free_c2d_env): ddo, tx_id, alg_ddo, alg_tx_id = build_and_send_ddo_with_compute_service( client, publisher_wallet, consumer_wallet, True, None, - environment["consumerAddress"], - environment["id"], + free_c2d_env["consumerAddress"], + free_c2d_env["id"], ) sa_compute = get_first_service_by_type(alg_ddo, ServiceType.ACCESS) sa = get_first_service_by_type(ddo, ServiceType.COMPUTE) @@ -307,7 +305,7 @@ def test_compute_diff_provider(client, publisher_wallet, consumer_wallet): "signature": signature, "nonce": nonce, "consumerAddress": consumer_wallet.address, - "environment": environment["id"], + "environment": free_c2d_env["id"], } response = post_to_compute(client, payload) @@ -315,17 +313,17 @@ def test_compute_diff_provider(client, publisher_wallet, consumer_wallet): @pytest.mark.integration -def test_compute_allow_all_published(client, publisher_wallet, consumer_wallet): - environment = get_free_c2d_env() - assert environment, f"Cannot find a free c2d env" +def test_compute_allow_all_published( + client, publisher_wallet, consumer_wallet, free_c2d_env +): ddo, tx_id, alg_ddo, alg_tx_id = build_and_send_ddo_with_compute_service( client, publisher_wallet, consumer_wallet, False, "allow_all_published", - environment["consumerAddress"], - environment["id"], + free_c2d_env["consumerAddress"], + free_c2d_env["id"], ) sa_compute = get_first_service_by_type(alg_ddo, ServiceType.ACCESS) sa = get_first_service_by_type(ddo, ServiceType.COMPUTE) @@ -357,25 +355,23 @@ def test_compute_allow_all_published(client, publisher_wallet, consumer_wallet): ) # Start on the correct environment - payload["environment"] = environment["id"] + payload["environment"] = free_c2d_env["id"] response = post_to_compute(client, payload) assert response.status == "200 OK" @pytest.mark.integration def test_compute_additional_input( - client, publisher_wallet, consumer_wallet, monkeypatch + client, publisher_wallet, consumer_wallet, monkeypatch, free_c2d_env ): - environment = get_free_c2d_env() - assert environment, f"Cannot find a free c2d env" ddo, tx_id, alg_ddo, alg_tx_id = build_and_send_ddo_with_compute_service( client, publisher_wallet, consumer_wallet, False, None, - environment["consumerAddress"], - environment["id"], + free_c2d_env["consumerAddress"], + free_c2d_env["id"], ) sa_compute = get_first_service_by_type(alg_ddo, ServiceType.ACCESS) sa = get_first_service_by_type(ddo, ServiceType.COMPUTE) @@ -396,14 +392,14 @@ def test_compute_additional_input( tx_id2, _ = start_order( web3, sa2.datatoken_address, - environment["consumerAddress"], + free_c2d_env["consumerAddress"], sa2.index, get_provider_fees( ddo2.did, sa2, consumer_wallet.address, get_future_valid_until(), - environment["id"], + free_c2d_env["id"], force_zero=True, ), consumer_wallet, @@ -437,7 +433,7 @@ def test_compute_additional_input( "userdata": {"test_key": "test_value"}, } ], - "environment": environment["id"], + "environment": free_c2d_env["id"], } monkeypatch.setenv("RBAC_SERVER_URL", "http://172.15.0.8:3000") @@ -450,18 +446,16 @@ def test_compute_additional_input( @pytest.mark.integration def test_compute_delete_job( - client, publisher_wallet, consumer_wallet, consumer_address + client, publisher_wallet, consumer_wallet, consumer_address, free_c2d_env ): - environment = get_free_c2d_env() - assert environment, f"Cannot find a free c2d env" ddo, tx_id, alg_ddo, alg_tx_id = build_and_send_ddo_with_compute_service( client, publisher_wallet, consumer_wallet, False, None, - environment["consumerAddress"], - environment["id"], + free_c2d_env["consumerAddress"], + free_c2d_env["id"], ) sa_compute = get_first_service_by_type(alg_ddo, ServiceType.ACCESS) sa = get_first_service_by_type(ddo, ServiceType.COMPUTE) @@ -478,7 +472,7 @@ def test_compute_delete_job( "signature": signature, "nonce": nonce, "consumerAddress": consumer_wallet.address, - "environment": environment["id"], + "environment": free_c2d_env["id"], } response = post_to_compute(client, payload) diff --git a/tests/test_helpers.py b/tests/test_helpers.py index a793727a..f993799d 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -479,11 +479,3 @@ def build_custom_services( def get_first_service_by_type(asset, service_type: ServiceType) -> Service: """Return the first Service with the given ServiceType.""" return next((service for service in asset.services if service.type == service_type)) - - -def get_free_c2d_env(): - environments = get_c2d_environments() - for env in environments: - if env["priceMin"] == 0: - return env - return None diff --git a/tests/test_initialize.py b/tests/test_initialize.py index df038b09..bb3e1ccb 100644 --- a/tests/test_initialize.py +++ b/tests/test_initialize.py @@ -20,7 +20,6 @@ get_dataset_with_invalid_url_ddo, get_dataset_with_ipfs_url_ddo, get_first_service_by_type, - get_free_c2d_env, get_registered_asset, initialize_service, mint_100_datatokens, @@ -224,7 +223,9 @@ def test_initialize_compute_works(client, publisher_wallet, consumer_wallet): @pytest.mark.integration -def test_initialize_compute_order_reused(client, publisher_wallet, consumer_wallet): +def test_initialize_compute_order_reused( + client, publisher_wallet, consumer_wallet, free_c2d_env +): """Call `initializeCompute` when there ARE reusable orders Enumerate all cases: @@ -244,8 +245,6 @@ def test_initialize_compute_order_reused(client, publisher_wallet, consumer_wall Case 4: wrong tx id for dataset order """ - environment = get_free_c2d_env() - assert environment, f"Cannot find a free c2d env" # Order asset, valid for 60 seconds ddo, tx_id, alg_ddo, alg_tx_id = build_and_send_ddo_with_compute_service( client, @@ -253,10 +252,10 @@ def test_initialize_compute_order_reused(client, publisher_wallet, consumer_wall consumer_wallet, True, None, - environment["consumerAddress"], + free_c2d_env["consumerAddress"], short_valid_until=True, timeout=60, - c2d_environment=environment["id"], + c2d_environment=free_c2d_env["id"], ) service = get_first_service_by_type(ddo, ServiceType.COMPUTE) sa_compute = get_first_service_by_type(alg_ddo, ServiceType.ACCESS) @@ -277,7 +276,7 @@ def test_initialize_compute_order_reused(client, publisher_wallet, consumer_wall }, "consumerAddress": consumer_wallet.address, "compute": { - "env": environment["id"], + "env": free_c2d_env["id"], "validUntil": get_future_valid_until(short=True), }, }