Skip to content

Commit

Permalink
Add more utils coverage.
Browse files Browse the repository at this point in the history
  • Loading branch information
Calina Cenan committed May 4, 2021
1 parent 80f9765 commit 03e590d
Show file tree
Hide file tree
Showing 7 changed files with 63 additions and 29 deletions.
3 changes: 1 addition & 2 deletions ocean_provider/routes/consume.py
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,6 @@ def download():
token_address,
) = process_consume_request(data)
service_id = data.get("serviceId")
service_type = data.get("serviceType")
tx_id = data.get("transferTxId")
if did.startswith("did:"):
did = add_0x_prefix(did_to_id(did))
Expand All @@ -376,7 +375,7 @@ def download():
did, service_id, tx_id, consumer_address, token_address, service.get_cost()
)

assert service_type == ServiceTypes.ASSET_ACCESS
assert service.type == ServiceTypes.ASSET_ACCESS

file_index = int(data.get("fileIndex"))
file_attributes = asset.metadata["main"]["files"][file_index]
Expand Down
8 changes: 1 addition & 7 deletions ocean_provider/utils/test/test_accounts.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import os

from ocean_provider.exceptions import InvalidSignatureError
from ocean_provider.utils.accounts import (
check_auth_token,
generate_auth_token,
Expand Down Expand Up @@ -39,12 +38,7 @@ def test_auth_token():
)
assert address and address.lower() == pub_address.lower(), match_address

try:
verify_signature(pub_address, token, doc_id)
except InvalidSignatureError as e:
assert (
False
), f"invalid signature/auth-token {token}, {pub_address}, {doc_id}: {e}"
assert verify_signature(pub_address, token, doc_id)


def test_generate_auth_token(consumer_wallet):
Expand Down
6 changes: 5 additions & 1 deletion ocean_provider/utils/test/test_url.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#
import logging

from ocean_provider.utils.url import is_safe_schema, is_safe_url
from ocean_provider.utils.url import is_safe_schema, is_safe_url, is_this_same_provider

test_logger = logging.getLogger(__name__)

Expand All @@ -21,3 +21,7 @@ def test_is_safe_url():
assert is_safe_url("127.0.0.1") is False
assert is_safe_url("169.254.169.254") is False
assert is_safe_url("http://169.254.169.254/latest/meta-data/hostname") is False


def test_is_same_provider():
assert is_this_same_provider("http://localhost:8030")
51 changes: 51 additions & 0 deletions ocean_provider/utils/test/test_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,21 @@
# Copyright 2021 Ocean Protocol Foundation
# SPDX-License-Identifier: Apache-2.0
#
import json
import logging
import mimetypes
from copy import deepcopy
from unittest.mock import MagicMock, Mock

import pytest
from ocean_lib.assets.asset import Asset
from ocean_lib.common.http_requests.requests_session import get_requests_session
from ocean_provider.utils.encryption import do_encrypt
from ocean_provider.utils.util import (
build_download_response,
get_asset_files_list,
get_asset_url_at_index,
get_asset_urls,
get_download_url,
service_unavailable,
)
Expand Down Expand Up @@ -136,3 +143,47 @@ def test_download_ipfs_file(client):
request, requests_session, download_url, download_url, None
)
assert response.data, f"got no data {response.data}"


def test_get_assets_files_list(provider_wallet):
asset = Mock(template=Asset)
encr = do_encrypt(json.dumps(["test1", "test2"]), provider_wallet)
asset.encrypted_files = json.dumps({"encryptedDocument": encr})
assert ["test1", "test2"] == get_asset_files_list(asset, provider_wallet)

# empty
asset.encrypted_files = ""
assert get_asset_files_list(asset, provider_wallet) is None

# not a list
encr = do_encrypt(json.dumps({"test": "test"}), provider_wallet)
asset.encrypted_files = json.dumps({"encryptedDocument": encr})
with pytest.raises(TypeError):
get_asset_files_list(asset, provider_wallet)


def test_get_asset_urls(provider_wallet):
# empty
asset = Mock(template=Asset)
asset.encrypted_files = ""
assert get_asset_urls(asset, provider_wallet) is None
assert get_asset_url_at_index(0, asset, provider_wallet) is None

# not a list
encr = do_encrypt(json.dumps({"test": "test"}), provider_wallet)
asset.encrypted_files = json.dumps({"encryptedDocument": encr})
with pytest.raises(TypeError):
get_asset_urls(asset, provider_wallet)

# does not have url there
encr = do_encrypt(json.dumps([{"noturl": "test"}]), provider_wallet)
asset.encrypted_files = json.dumps({"encryptedDocument": encr})
with pytest.raises(ValueError):
get_asset_urls(asset, provider_wallet)

# correct with url
encr = do_encrypt(json.dumps([{"url": "test"}]), provider_wallet)
asset.encrypted_files = json.dumps({"encryptedDocument": encr})
assert get_asset_urls(asset, provider_wallet) == ["test"]
with pytest.raises(ValueError):
get_asset_url_at_index(3, asset, provider_wallet)
14 changes: 4 additions & 10 deletions ocean_provider/utils/url.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,11 @@ def is_ip(address):

def is_this_same_provider(url):
result = urlparse(url)
address = DataServiceProvider.get_provider_address(
f"{result.scheme}://{result.netloc}/"
)

try:
return (
DataServiceProvider()
.get_provider_address(f"{result.scheme}://{result.netloc}/")
.lower()
== get_provider_wallet().address.lower()
)
# the try/except can be removed after changes in ocean.py
except requests.exceptions.ConnectionError:
return False
return address and address.lower() == get_provider_wallet().address.lower()


def _get_records(domain, record_type):
Expand Down
9 changes: 1 addition & 8 deletions ocean_provider/utils/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@

import requests
from flask import Response
from ocean_lib.common.agreements.service_agreement import ServiceAgreement
from ocean_lib.models.data_token import DataToken
from ocean_lib.ocean.util import to_base_18
from ocean_lib.web3_internal.transactions import sign_hash
Expand Down Expand Up @@ -242,17 +241,11 @@ def process_consume_request(data: dict):
token_address = data.get("dataToken")
consumer_address = data.get("consumerAddress")
service_id = data.get("serviceId")
service_type = data.get("serviceType")

# grab asset for did from the metadatastore associated with
# the Data Token address
asset = get_asset_from_metadatastore(get_metadata_url(), did)
service = ServiceAgreement.from_ddo(service_type, asset)
if service.type != service_type:
raise AssertionError(
f"Requested service with id {service_id} has type {service.type} "
f"which does not match the requested service type {service_type}."
)
service = asset.get_service_by_index(service_id)

return asset, service, did, consumer_address, token_address

Expand Down
1 change: 0 additions & 1 deletion ocean_provider/validation/requests.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,6 @@ def rules(self):
return {
"documentId": ["bail", "required"],
"serviceId": ["required"],
"serviceType": ["required"],
"dataToken": ["required"],
"consumerAddress": ["bail", "required"],
"transferTxId": ["bail", "required"],
Expand Down

0 comments on commit 03e590d

Please sign in to comment.