예제 #1
0
def test_compute_multi_inputs():
    """Tests that a compute job with additional Inputs (multiple assets) starts properly."""
    setup = Setup()

    # Dataset with compute service
    compute_ddo = get_registered_ddo_with_compute_service(
        setup.publisher_ocean_instance, setup.publisher_wallet)
    # verify the ddo is available in Aquarius
    _ = setup.publisher_ocean_instance.assets.resolve(compute_ddo.did)

    # Another dataset, this time with download service
    access_ddo = get_registered_ddo_with_access_service(
        setup.publisher_ocean_instance, setup.publisher_wallet)
    # verify the ddo is available in Aquarius
    _ = setup.publisher_ocean_instance.assets.resolve(access_ddo.did)

    # Setup algorithm meta to run raw algorithm
    algorithm_ddo = get_registered_algorithm_ddo_different_provider(
        setup.publisher_ocean_instance, setup.publisher_wallet)
    _ = setup.publisher_ocean_instance.assets.resolve(algorithm_ddo.did)

    run_compute_test(
        setup.consumer_ocean_instance,
        setup.publisher_wallet,
        setup.consumer_wallet,
        [compute_ddo, access_ddo],
        algo_ddo=algorithm_ddo,
    )
예제 #2
0
def simple_compute_ddo():
    setup = Setup()
    # Dataset with compute service
    simple_compute_ddo = get_registered_ddo_with_compute_service(
        setup.publisher_ocean_instance, setup.publisher_wallet)

    # verify the ddo is available in Aquarius
    setup.publisher_ocean_instance.assets.resolve(simple_compute_ddo.did)

    yield simple_compute_ddo
예제 #3
0
def test_update_trusted_algorithms():
    setup = Setup()

    config = ConfigProvider.get_config()
    ddo_address = get_contracts_addresses(
        "ganache", config)[MetadataContract.CONTRACT_NAME]
    ddo_registry = MetadataContract(ddo_address)

    # Setup algorithm meta to run raw algorithm
    algorithm_ddo = get_registered_algorithm_ddo(
        setup.publisher_ocean_instance, setup.publisher_wallet)
    # verify the ddo is available in Aquarius
    _ = setup.publisher_ocean_instance.assets.resolve(algorithm_ddo.did)

    # Dataset with compute service
    compute_ddo = get_registered_ddo_with_compute_service(
        setup.publisher_ocean_instance,
        setup.publisher_wallet,
        trusted_algorithms=[algorithm_ddo.did],
    )
    # verify the ddo is available in Aquarius
    _ = setup.publisher_ocean_instance.assets.resolve(compute_ddo.did)
    trusted_algo_list = create_publisher_trusted_algorithms(
        [algorithm_ddo.did],
        setup.publisher_ocean_instance.config.aquarius_url)
    compute_ddo.update_compute_privacy(trusted_algorithms=trusted_algo_list,
                                       allow_all=False,
                                       allow_raw_algorithm=False)

    tx_id = setup.publisher_ocean_instance.assets.update(
        compute_ddo, setup.publisher_wallet)

    tx_receipt = ddo_registry.get_tx_receipt(tx_id)
    logs = ddo_registry.event_MetadataUpdated.processReceipt(tx_receipt)
    assert logs[0].args.dataToken == compute_ddo.data_token_address

    wait_for_update(
        setup.publisher_ocean_instance,
        compute_ddo.did,
        "privacy",
        {"publisherTrustedAlgorithms": [algorithm_ddo.did]},
    )

    compute_ddo_updated = setup.publisher_ocean_instance.assets.resolve(
        compute_ddo.did)

    run_compute_test(
        setup.consumer_ocean_instance,
        setup.publisher_wallet,
        setup.consumer_wallet,
        [compute_ddo_updated],
        algo_ddo=algorithm_ddo,
    )
예제 #4
0
def asset_with_trusted(algorithm_ddo):
    setup = Setup()
    # Setup algorithm meta to run raw algorithm
    ddo = get_registered_ddo_with_compute_service(
        setup.publisher_ocean_instance,
        setup.publisher_wallet,
        trusted_algorithms=[algorithm_ddo.did],
    )
    # verify the ddo is available in Aquarius
    _ = setup.publisher_ocean_instance.assets.resolve(ddo.did)

    yield ddo
예제 #5
0
def test_compute_raw_algo():
    setup = Setup()

    # Dataset with compute service
    compute_ddo = get_registered_ddo_with_compute_service(
        setup.publisher_ocean_instance, setup.publisher_wallet)
    # verify the ddo is available in Aquarius
    _ = setup.publisher_ocean_instance.assets.resolve(compute_ddo.did)

    # Setup algorithm meta to run raw algorithm
    algorithm_meta = get_algorithm_meta()
    run_compute_test(
        setup.consumer_ocean_instance,
        setup.publisher_wallet,
        setup.consumer_wallet,
        [compute_ddo],
        algo_meta=algorithm_meta,
    )
예제 #6
0
def test_compute_trusted_algorithms():
    setup = Setup()

    # Setup algorithm meta to run raw algorithm
    algorithm_ddo = get_registered_algorithm_ddo(
        setup.publisher_ocean_instance, setup.publisher_wallet)
    # verify the ddo is available in Aquarius
    _ = setup.publisher_ocean_instance.assets.resolve(algorithm_ddo.did)

    algorithm_ddo_v2 = get_registered_algorithm_ddo(
        setup.publisher_ocean_instance, setup.publisher_wallet)
    # verify the ddo is available in Aquarius
    _ = setup.publisher_ocean_instance.assets.resolve(algorithm_ddo_v2.did)

    # Dataset with compute service
    compute_ddo = get_registered_ddo_with_compute_service(
        setup.publisher_ocean_instance,
        setup.publisher_wallet,
        trusted_algorithms=[algorithm_ddo.did],
    )
    # verify the ddo is available in Aquarius
    _ = setup.publisher_ocean_instance.assets.resolve(compute_ddo.did)

    # For debugging.
    run_compute_test(
        setup.consumer_ocean_instance,
        setup.publisher_wallet,
        setup.consumer_wallet,
        [compute_ddo],
        algo_ddo=algorithm_ddo,
    )

    # Expect to fail with another algorithm ddo that is not trusted.
    run_compute_test(
        setup.consumer_ocean_instance,
        setup.publisher_wallet,
        setup.consumer_wallet,
        [compute_ddo],
        algo_ddo=algorithm_ddo_v2,
        expect_failure=True,
        expect_failure_message=
        f"this algorithm did {algorithm_ddo_v2.did} is not trusted.",
    )
예제 #7
0
def test_trusted_algorithms(publisher_ocean_instance):
    """Tests if the trusted algorithms list is returned correctly."""
    publisher = get_publisher_wallet()

    algorithm_ddo = get_registered_algorithm_ddo(publisher_ocean_instance, publisher)
    wait_for_ddo(publisher_ocean_instance, algorithm_ddo.did)
    assert algorithm_ddo is not None

    ddo = get_registered_ddo_with_compute_service(
        publisher_ocean_instance, publisher, trusted_algorithms=[algorithm_ddo.did]
    )
    wait_for_ddo(publisher_ocean_instance, ddo.did)
    assert ddo is not None

    trusted_algorithms = ddo.get_trusted_algorithms()
    service = ddo.get_service(ServiceTypes.CLOUD_COMPUTE)
    privacy_dict = service.attributes["main"].get("privacy")
    assert privacy_dict

    assert trusted_algorithms is not None
    assert len(trusted_algorithms) >= 1
    for index, trusted_algorithm in enumerate(trusted_algorithms):
        assert trusted_algorithm["did"] == algorithm_ddo.did
        assert "filesChecksum" and "containerSectionChecksum" in trusted_algorithm
        assert (
            trusted_algorithm["filesChecksum"]
            == privacy_dict["publisherTrustedAlgorithms"][index]["filesChecksum"]
        )
        assert (
            trusted_algorithm["containerSectionChecksum"]
            == privacy_dict["publisherTrustedAlgorithms"][index][
                "containerSectionChecksum"
            ]
        )
        assert (
            trusted_algorithm["did"]
            == privacy_dict["publisherTrustedAlgorithms"][index]["did"]
        )
예제 #8
0
def test_utilitary_functions_for_trusted_algorithms(publisher_ocean_instance):
    """Tests adding/removing trusted algorithms in the DDO metadata."""
    publisher = get_publisher_wallet()

    algorithm_ddo = get_registered_algorithm_ddo(publisher_ocean_instance,
                                                 publisher)
    wait_for_ddo(publisher_ocean_instance, algorithm_ddo.did)
    assert algorithm_ddo is not None

    algorithm_ddo_v2 = get_registered_algorithm_ddo(publisher_ocean_instance,
                                                    publisher)
    wait_for_ddo(publisher_ocean_instance, algorithm_ddo_v2.did)
    assert algorithm_ddo_v2 is not None

    algorithm_ddo_v3 = get_registered_algorithm_ddo(publisher_ocean_instance,
                                                    publisher)
    wait_for_ddo(publisher_ocean_instance, algorithm_ddo_v3.did)
    assert algorithm_ddo_v3 is not None

    ddo = get_registered_ddo_with_compute_service(
        publisher_ocean_instance,
        publisher,
        trusted_algorithms=[algorithm_ddo.did])
    wait_for_ddo(publisher_ocean_instance, ddo.did)
    assert ddo is not None

    publisher_trusted_algorithms = create_publisher_trusted_algorithms(
        [algorithm_ddo.did],
        publisher_ocean_instance.config.metadata_cache_uri)

    # add a new trusted algorithm to the publisher_trusted_algorithms list
    new_publisher_trusted_algorithms = add_publisher_trusted_algorithm(
        ddo.did,
        algorithm_ddo_v2.did,
        publisher_ocean_instance.config.metadata_cache_uri,
    )

    assert new_publisher_trusted_algorithms is not None
    assert len(new_publisher_trusted_algorithms) > len(
        publisher_trusted_algorithms)

    # add an existing algorithm to publisher_trusted_algorithms list
    new_publisher_trusted_algorithms = add_publisher_trusted_algorithm(
        ddo.did, algorithm_ddo.did,
        publisher_ocean_instance.config.metadata_cache_uri)
    assert new_publisher_trusted_algorithms is not None
    for _, trusted_algorithm in enumerate(publisher_trusted_algorithms):
        assert trusted_algorithm["did"] == algorithm_ddo.did
    assert len(new_publisher_trusted_algorithms) == len(
        publisher_trusted_algorithms)

    # remove an existing algorithm to publisher_trusted_algorithms list
    new_publisher_trusted_algorithms = remove_publisher_trusted_algorithm(
        ddo.did, algorithm_ddo.did,
        publisher_ocean_instance.config.metadata_cache_uri)

    assert new_publisher_trusted_algorithms is not None
    assert len(new_publisher_trusted_algorithms) < len(
        publisher_trusted_algorithms)

    # remove a trusted algorithm that does not belong to publisher_trusted_algorithms list
    new_publisher_trusted_algorithms = remove_publisher_trusted_algorithm(
        ddo.did,
        algorithm_ddo_v3.did,
        publisher_ocean_instance.config.metadata_cache_uri,
    )

    assert new_publisher_trusted_algorithms is not None
    for trusted_algorithm in publisher_trusted_algorithms:
        assert trusted_algorithm["did"] != algorithm_ddo_v3.did
    assert len(new_publisher_trusted_algorithms) == len(
        publisher_trusted_algorithms)