Пример #1
0
def test_did_validate():
    test_did = did_generate_random()
    did_id = did_to_id(test_did)

    did_validate(test_did)
    did_validate(f'{test_did}/test')
    did_validate(f'{test_did}01021A2A/test')

    test_did = (did_id, did_id)
    with pytest.raises(TypeError):
        did_validate(test_did)

    assert (not is_did(test_did))

    test_did = 'test-text'
    with pytest.raises(ValueError, match='must start'):
        did_validate(test_did)
    assert (not is_did(test_did))

    test_did = 'did'
    with pytest.raises(ValueError, match='must start'):
        did_validate(test_did)
    assert (not is_did(test_did))

    test_did = f'did:extra-long:{did_id}'
    with pytest.raises(ValueError, match='"id" must have only'):
        did_validate(test_did)
    assert (not is_did(test_did))

    test_did = f'did:valid:0x01A2B3C'
    with pytest.raises(ValueError,
                       match='path should only have hex characters'):
        did_validate(test_did)
    assert (not is_did(test_did))
Пример #2
0
def test_did_parse():
    test_did = did_generate_random()
    did_id = did_to_id(test_did)

    # basic parse
    value = did_parse(test_did)

    assert (value['method'] == 'dep')
    assert (f'0x{value["id"]}' == did_id)
    assert (value['id_hex'] == did_id)
    assert (value['fragment'] is None)
    assert (value['path'] is None)

    # test path
    test_path = secrets.token_hex(32)
    value = did_parse(f'{test_did}/{test_path}')

    assert (value['method'] == 'dep')
    assert (f'0x{value["id"]}' == did_id)
    assert (value['id_hex'] == did_id)
    assert (value['fragment'] == '')
    assert (value['path'] == test_path)

    # test fragment
    test_path = secrets.token_hex(32)
    test_fragment = secrets.token_urlsafe(32)
    value = did_parse(f'{test_did}/{test_path}#{test_fragment}')

    assert (value['method'] == 'dep')
    assert (f'0x{value["id"]}' == did_id)
    assert (value['id_hex'] == did_id)
    assert (value['fragment'] == test_fragment)
    assert (value['path'] == test_path)
def test_contract_did_methods(convex_network, convex_accounts):

    register_account = convex_accounts[1]
    auto_topup_account(convex_network, register_account)
    query_address = register_account.address

    did = did_generate_random()
    ddo = f'test - ddo - {did}'

    contract = DIDContract(convex_network.convex)
    assert (contract)
    assert (contract.resolve_address('starfish-test.did'))
    assert (contract.address)

    result = contract.register_did(did, ddo, register_account)
    assert (result)
    assert (result == did)

    result = contract.resolve(did, query_address)
    assert (result)
    assert (result == ddo)

    result = contract.owner(did, query_address)
    assert (result)
    assert (result == query_address)
Пример #4
0
def test_ddo_get_did_from_ddo():
    did = did_generate_random()
    test_url = 'http://localhost'
    ddo = DDO.create(test_url, service_list=['meta', 'trust'], did=did)
    assert(ddo)
    assert(ddo.did == did)
    assert(DDO.get_did_from_ddo(ddo) == did)
    assert(DDO.get_did_from_ddo(ddo.as_text) == did)
Пример #5
0
    def __init__(self, ddo: DDO = None) -> None:

        if ddo is None:
            did = did_generate_random()
            ddo = DDO(did)

        AgentBase.__init__(self, ddo=ddo)

        self._memory = {'listing': {}, 'asset': {}, 'purchase': {}}
Пример #6
0
def test_asset_create_asset_provenance_invoke():
    agent_did = did_generate_random()
    job_id = secrets.token_hex(32)
    inputs_text = json.dumps({'asset_list': 'json'})
    asset = AssetBase(json.dumps(ASSET_METADATA))
    assert (asset)
    asset = create_asset_provenance_invoke(asset, agent_did, job_id, None,
                                           inputs_text)
    assert (asset.metadata['provenance'])
Пример #7
0
def test_asset_id():
    asset = AssetBase(json.dumps(ASSET_METADATA), did=TEST_DID)
    assert (asset)
    with pytest.raises(ValueError):
        asset_id = decode_to_asset_id(asset.did)

    test_did = did_generate_random()
    asset_id = secrets.token_hex(32)
    asset_did = f'{test_did}/{asset_id}'

    asset = AssetBase(json.dumps(ASSET_METADATA), did=asset_did)
    assert (asset)
def test_network_resolve_agent(config, ethereum_network, ethereum_accounts):
    local_agent = config['agents']['surfer']
    ddo = ethereum_network.resolve_agent(local_agent['url'])

    did = did_generate_random()
    ddo = DDO.create(local_agent['url'])
    ddo_text = ddo.as_text

    register_account = ethereum_accounts[0]
    ethereum_network.register_did(register_account, did, ddo_text)

    ddo = ethereum_network.resolve_agent(did)
    assert (ddo)
Пример #9
0
def test_convex_network_did(convex_network, convex_accounts):
    register_account = convex_accounts[0]
    auto_topup_account(convex_network, register_account)
    did = did_generate_random()
    ddo = f'test - ddo - {did}'

    result = convex_network.register_did(register_account, did, ddo)
    assert (result)
    assert (result == did)

    result = convex_network.resolve_did(did, register_account.address)
    assert (result)
    assert (result == ddo)
Пример #10
0
def test_provenance_create_publish():

    # minimum allowed
    provenance = Provenance()
    result = provenance.create_publish
    assert_prefix(result)
    activity_id = get_activity_id(result)
    assert_activity(result, activity_id, 'publish')
    assert_was_generated_by(result, activity_id)
    assert ('agent' not in result)
    assert ('wasAssociatedWith' not in result)

    # with agent_did
    agent_did = did_generate_random()
    provenance = Provenance(agent_did)

    result = provenance.create_publish
    assert_prefix(result)
    activity_id = get_activity_id(result)

    assert_activity(result, activity_id, 'publish')
    assert_was_generated_by(result, activity_id)

    assert_agent(result, agent_did)
    assert_was_associated_with(result, activity_id, agent_did)

    # with agent did and activity_id
    agent_did = did_generate_random()
    activity_id = 'abc-123-test'
    provenance = Provenance(agent_did=agent_did, activity_id=activity_id)
    result = provenance.create_publish
    #print(json.dumps(result, indent=4))
    assert_prefix(result)

    assert_activity(result, activity_id, 'publish')
    assert_was_generated_by(result, activity_id)

    assert_agent(result, agent_did)
    assert_was_associated_with(result, activity_id, agent_did)
Пример #11
0
def test_provenance_create_import():

    # minimum allowed
    provenance = Provenance()

    result = provenance.create_import
    assert_prefix(result)
    activity_id = get_activity_id(result)
    assert_activity(result, activity_id, 'import')
    assert_was_generated_by(result, activity_id)
    assert ('agent' not in result)
    assert ('wasAssociatedWith' not in result)

    # with agent_did
    agent_did = did_generate_random()

    provenance = Provenance(agent_did=agent_did)
    result = provenance.create_import
    assert_prefix(result)
    activity_id = get_activity_id(result)

    assert_activity(result, activity_id, 'import')
    assert_was_generated_by(result, activity_id)

    assert_agent(result, agent_did)
    assert_was_associated_with(result, activity_id, agent_did)

    # with agent did and activity_id
    agent_did = did_generate_random()
    activity_id = 'abc-123-test'
    provenance = Provenance(agent_did=agent_did, activity_id=activity_id)
    result = provenance.create_import
    assert_prefix(result)

    assert_activity(result, activity_id, 'import')
    assert_was_generated_by(result, activity_id)

    assert_agent(result, agent_did)
    assert_was_associated_with(result, activity_id, agent_did)
Пример #12
0
 def __init__(self, did=None, service=None):
     if did is None:
         did = did_generate_random()
     self._did = did
     self._service = {}
     if service:
         if not isinstance(service, (tuple, list)):
             raise TypeError('Service data must be a tuple or list')
         for item in service:
             service_type = item['type']
             name = DDO._supported_service_name_from_type(service_type)
             if not name:
                 name = service_type.lower()
             self._service[name] = item
Пример #13
0
def test_01_connect_to_remote_agent(convex_network, config, convex_accounts):

    register_account = convex_accounts[0]
    did = did_generate_random()
    assert(did)
    ddo = {
        'name': 'Test ddo',
        'value': secrets.token_hex(64)
    }

    convex_network.register_did(register_account, did, json.dumps(ddo))
    resolve_ddo = convex_network.resolve_did(did)
    assert(resolve_ddo)
    found_ddo = json.loads(resolve_ddo)
    assert(found_ddo == ddo)
Пример #14
0
def test_decode_to_asset_id():
    asset_id = secrets.token_hex(32)
    test_did = did_generate_random()

    # decode did/asset_id
    did = f'{test_did}/{asset_id}'
    assert (asset_id == decode_to_asset_id(did))
    assert (is_asset_did(did))
    assert (asset_did_validate(did))

    # decode did/asset_id with leading 0x
    did = f'{test_did}/0x{asset_id}'
    assert (asset_id == decode_to_asset_id(did))
    assert (is_asset_did(did))
    assert (asset_did_validate(did))

    # decode asset_id
    assert (asset_id == decode_to_asset_id(asset_id))

    # decode asset_id with leading 0x
    assert (asset_id == decode_to_asset_id(f'0x{asset_id}'))

    # fail decode with only did
    with pytest.raises(ValueError, match='Unable to get an asset_id'):
        assert (decode_to_asset_id(test_did))

    with pytest.raises(ValueError, match='does not have an asset_id'):
        assert (asset_did_validate(test_did))

    assert (not is_asset_did(test_did))

    # fail decode with invalid asset_id length is too long
    did = f'{test_did}/{asset_id}12A3B4C'
    with pytest.raises(ValueError, match='asset_id is not valid '):
        assert (decode_to_asset_id(did))

    with pytest.raises(ValueError, match='has an invalid asset_id'):
        assert (asset_did_validate(did))

    # passes did valdiaton but fails asset_did validation
    did = f'{test_did}/00112233445566778899AA'
    assert (decode_to_asset_id(did))

    with pytest.raises(ValueError, match='has an invalid asset_id'):
        assert (asset_did_validate(did))

    assert (not is_asset_did(did))
Пример #15
0
def test_contract_did_full_ddo(convex_network, convex_accounts):
    register_account = convex_accounts[1]
    auto_topup_account(convex_network, register_account)
    query_address = register_account.address

    did = did_generate_random()

    now = datetime.datetime.now()
    ddo = {
        '@context':
        'https://w3id.org/did/v1',
        'id':
        did,
        'created':
        now.isoformat(sep=' '),
        'service': [{
            'type': 'DEP.Invoke.v1',
            'serviceEndpoint': 'http://127.0.0.1:9999/api/v1/invoke'
        }, {
            'type': 'DEP.Meta.v1',
            'serviceEndpoint': 'http://127.0.0.1:9999/api/v1/meta'
        }, {
            'type': 'DEP.Storage.v1',
            'serviceEndpoint': 'http://127.0.0.1:9999/api/v1/assets'
        }, {
            'type': 'DEP.Auth.v1',
            'serviceEndpoint': 'http://127.0.0.1:9999/api/v1/auth'
        }]
    }
    contract = DIDContract(convex_network.convex)
    assert (contract)
    assert (contract.resolve_address('starfish-test.did'))
    assert (contract.address)

    result = contract.register_did(did, json.dumps(ddo), register_account)
    assert (result)
    assert (result == did)

    result = contract.resolve(did, query_address)
    assert (result)
    assert (result == json.dumps(ddo))
Пример #16
0
def test_provenance_create_invoke():
    # test minimum allowed for create_invoke
    provenance = Provenance()
    result = provenance.create_invoke
    assert_prefix(result)

    activity_id = get_activity_id(result)
    assert_activity(result, activity_id, 'invoke')
    assert_was_generated_by(result, activity_id)
    assert_entity(result)
    assert ('agent' not in result)
    assert ('wasAssociatedWith' not in result)

    #test all values set for create_invoke
    agent_did = did_generate_random()
    activity_id = 'job-id-123-abc'

    asset_list = []
    for index in range(0, 4):
        asset_id = secrets.token_hex(32)
        asset_list.append(f'{agent_did}/{asset_id}')

    inputs_text = json.dumps({'asset_list': 'json'})
    provenance = Provenance(agent_did=agent_did,
                            activity_id=activity_id,
                            asset_list=asset_list,
                            inputs_text=inputs_text)
    result = provenance.create_invoke
    assert_prefix(result)

    activity_id = get_activity_id(result)
    assert_activity(result, activity_id, 'invoke', inputs_text)
    assert_was_generated_by(result, activity_id)
    assert_entity(result, asset_list)
    assert_agent(result, agent_did)
    assert_was_associated_with(result, activity_id, agent_did)
    assert_was_derived_from(result, asset_list)
def test_did_registry_contract(ethereum_network, config, ethereum_accounts):
    """

    Register and find a ddo based on a did

    """
    did_registry_contract = ethereum_network.get_contract('DIDRegistry')

    did = did_generate_random()

    local_agent = config['agents']['surfer']
    ddo = DDO.create('http://localhost', did=did)
    ddo_text = ddo.as_text

    register_account = ethereum_accounts[0]

    tx_hash = did_registry_contract.register(register_account, did, ddo_text)
    receipt = did_registry_contract.wait_for_receipt(tx_hash)

    block_number = did_registry_contract.get_block_number(did)
    assert (receipt.blockNumber == block_number)

    saved_ddo_text = did_registry_contract.get_value(did)
    assert (ddo_text == saved_ddo_text)
Пример #18
0
def test_did_to_id():
    test_did = did_generate_random()
    did_id = did_to_id(test_did)
    value = did_parse(test_did)
    assert (value['id_hex'] == did_id)
Пример #19
0
def test_contract_did_long_string(convex_network, convex_accounts):
    big_data = '''
{
    "activity": {
        "21bac5c9": {
            "dep:inputs": {
                "$": "{\"date_from\": \"2020-01-01\", \"user_id\": \"7HZQ9P\"}",
                "type": "xsd:string"
            },
            "prov:type": {
                "$": "dep:invoke",
                "type": "xsd:string"
            }
        }
    },
    "agent": {
        "did:dep:118d107119d8d293f7b25701730545abe9db8e5c633a995b295166c32e97dccc": {
            "prov:type": {
                "$": "dep:service-provider",
                "type": "xsd:string"
            }
        }
    },
    "entity": {
        "dep:this": {
            "prov:type": {
                "$": "dep:asset",
                "type": "xsd:string"
            }
        },
        "did:dep:118d107119d8d293f7b25701730545abe9db8e5c633a995b295166c32e97dccc/4d96cd618a3971424c048d417cc759cdaebd0da3d465f94feb5d2f25796ce739": {
            "prov:type": {
                "$": "dep:asset",
                "type": "xsd:string"
            }
        }
    },
    "prefix": {
        "dep": "http://datacraft.sg",
        "prov": "http://www.w3.org/ns/prov#",
        "xsd": "http://www.w3.org/2001/XMLSchema#"
    },
    "wasAssociatedWith": {
        "_:assoc_1": {
            "prov:activity": "21bac5c9",
            "prov:agent": "did:dep:118d107119d8d293f7b25701730545abe9db8e5c633a995b295166c32e97dccc"
        }
    },
    "wasDerivedFrom": {
        "_:derived_1": {
            "prov:generatedEntity": "dep:this",
            "prov:usedEntity": "did:dep:118d107119d8d293f7b25701730545abe9db8e5c633a995b295166c32e97dccc/4d96cd618a3971424c048d417cc759cdaebd0da3d465f94feb5d2f25796ce739"
        }
    },
    "wasGeneratedBy": {
        "_:gen_1": {
            "prov:activity": "21bac5c9",
            "prov:entity": "dep:this"
        }
    }
}
'''

    register_account = convex_accounts[1]
    query_address = register_account.address

    auto_topup_account(convex_network, register_account)
    did = did_generate_random()

    contract = DIDContract(convex_network.convex)
    assert (contract)
    assert (contract.resolve_address('starfish-test.did'))
    assert (contract.address)

    result = contract.register_did(did, big_data, register_account)
    assert (result)
    assert (result == did)

    result = contract.resolve(did, query_address)
    assert (result)
    assert (result == big_data)
Пример #20
0
import logging
import json
import pytest

from starfish.asset import (AssetBase, create_asset_provenance_publish,
                            create_asset_provenance_invoke)

from starfish.network.did import (did_to_id, id_to_did, decode_to_asset_id,
                                  did_generate_random)

ASSET_METADATA = {
    'name': 'Asset',
    'type': 'dataset',
}

TEST_DID = did_generate_random()


def test_init(metadata):
    asset = AssetBase(json.dumps(ASSET_METADATA))
    assert (asset)
    assert (isinstance(asset, AssetBase))


def test_metadata():
    asset = AssetBase(json.dumps(ASSET_METADATA))
    assert (asset)
    assert (asset.metadata == ASSET_METADATA)


def test_data():
Пример #21
0
def test_ddo_basic_init():
    did = did_generate_random()
    ddo = DDO(did)
    assert(ddo)
    assert(ddo.did == did)
Пример #22
0
def test_asset_create_asset_provenance_publish():
    agent_did = did_generate_random()
    asset = AssetBase(json.dumps(ASSET_METADATA))
    assert (asset)
    asset = create_asset_provenance_publish(asset, agent_did)
    assert (asset.metadata['provenance'])