1
0
mirror of https://github.com/oceanprotocol-archive/squid-js.git synced 2024-02-02 15:31:51 +01:00

DDO & compute test tweaks

This commit is contained in:
Matthias Kretschmann 2020-01-27 15:59:26 +01:00
parent 83ea6723e0
commit e7acadb2fe
Signed by: m
GPG Key ID: 606EEEF3C479A91F
6 changed files with 473 additions and 27 deletions

View File

@ -2,42 +2,33 @@ import { assert } from 'chai'
import { config } from '../config' import { config } from '../config'
import { Ocean, Account, DDO, MetaData } from '../../src' // @oceanprotocol/squid import { Ocean, Account, DDO, MetaData } from '../../src' // @oceanprotocol/squid
import { getMetadata } from '../utils' import { getMetadata, computeService } from '../utils'
import { ServiceType } from '../../src/ddo/Service'
describe('Compute', () => { describe('Compute', () => {
let ocean: Ocean let ocean: Ocean
let account: Account let account: Account
let ddoAsset: DDO let ddoAsset: DDO
let ddoAlgorithm: DDO let ddoAlgorithm: DDO
let agreementId: string
const metadataAsset = getMetadata() const metadataAsset = getMetadata()
const metadataAlgorithm = getMetadata(0, 'algorithm') const metadataAlgorithm = getMetadata(0, 'algorithm')
const assetComputeService = {
type: 'compute' as ServiceType,
index: 2,
attributes: {
main: {
serviceAgreementTemplate: {
contractName: ''
}
}
}
}
before(async () => { before(async () => {
ocean = await Ocean.getInstance(config) ocean = await Ocean.getInstance(config)
;[account] = await ocean.accounts.list() ;[account] = await ocean.accounts.list()
ddoAsset = await ocean.assets.create(metadataAsset as MetaData, account, [ ddoAsset = await ocean.assets.create(metadataAsset as MetaData, account, [
assetComputeService computeService
]) ])
ddoAlgorithm = await ocean.assets.create(metadataAlgorithm as MetaData, account) ddoAlgorithm = await ocean.assets.create(metadataAlgorithm as MetaData, account)
// order compute service
agreementId = await ocean.compute.order(account, ddoAsset.id)
}) })
it('should order & start a compute job', async () => { it('should start a compute job', async () => {
const agreementId = await ocean.compute.order(account, ddoAsset.id)
const response = await ocean.compute.start(account, agreementId, ddoAlgorithm.id) const response = await ocean.compute.start(account, agreementId, ddoAlgorithm.id)
// assert.deepEqual(response) assert.equal(response.status, 1)
}) })
}) })

View File

@ -26,7 +26,7 @@ describe('Register Escrow Compute Execution Template', () => {
before(async () => { before(async () => {
ocean = await Ocean.getInstance(config) ocean = await Ocean.getInstance(config)
keeper = ocean.keeper ;({ keeper } = ocean)
template = keeper.templates.escrowComputeExecutionTemplate template = keeper.templates.escrowComputeExecutionTemplate
@ -36,9 +36,11 @@ describe('Register Escrow Compute Execution Template', () => {
consumer = (await ocean.accounts.list())[2] consumer = (await ocean.accounts.list())[2]
// Conditions // Conditions
computeExecutionCondition = keeper.conditions.computeExecutionCondition ;({
lockRewardCondition = keeper.conditions.lockRewardCondition computeExecutionCondition,
escrowReward = keeper.conditions.escrowReward lockRewardCondition,
escrowReward
} = keeper.conditions)
if (!ocean.keeper.dispenser) { if (!ocean.keeper.dispenser) {
escrowAmount = 0 escrowAmount = 0

View File

@ -11,8 +11,7 @@ describe('Versions', () => {
ocean = await Ocean.getInstance(config) ocean = await Ocean.getInstance(config)
}) })
// TODO: enable again after new versions of Brizo it('should return the versions', async () => {
xit('should return the versions', async () => {
const versions = await ocean.versions.get() const versions = await ocean.versions.get()
assert.equal(versions.aquarius.status, OceanPlatformTechStatus.Working) assert.equal(versions.aquarius.status, OceanPlatformTechStatus.Working)

View File

@ -1,4 +1,5 @@
import { MetaData } from '../../src' // @oceanprotocol/squid import { MetaData } from '../../src' // @oceanprotocol/squid
import { ServiceType } from '../../src/ddo/Service'
const metadata: Partial<MetaData> = { const metadata: Partial<MetaData> = {
main: { main: {
@ -50,10 +51,12 @@ const algorithmMeta = {
language: 'scala', language: 'scala',
format: 'docker-image', format: 'docker-image',
version: '0.1', version: '0.1',
entrypoint: 'ocean-entrypoint.sh',
requirements: [],
container: { container: {
entrypoint: 'ocean-entrypoint.sh', entrypoint: 'node $ALGO',
image: '', image: 'node',
tag: '' tag: '10'
} }
} }
@ -68,7 +71,7 @@ export const generateMetadata = (
name, name,
type: type || 'dataset', type: type || 'dataset',
price: (price || 21) + '0'.repeat(18), price: (price || 21) + '0'.repeat(18),
algorithm: type === 'algorithm' && algorithmMeta algorithm: type === 'algorithm' ? algorithmMeta : undefined
}, },
additionalInformation: { additionalInformation: {
...metadata.additionalInformation ...metadata.additionalInformation
@ -77,3 +80,205 @@ export const generateMetadata = (
export const getMetadata = (price?: number, type?: 'dataset' | 'algorithm') => export const getMetadata = (price?: number, type?: 'dataset' | 'algorithm') =>
generateMetadata('TestAsset', type, price) generateMetadata('TestAsset', type, price)
export const computeService = {
type: 'compute' as ServiceType,
index: 2,
serviceEndpoint: 'http://mybrizo.org/api/v1/brizo/services/compute',
templateId: '',
attributes: {
main: {
name: 'dataAssetComputingServiceAgreement',
creator: '0x00Bd138aBD70e2F00903268F3Db08f2D25677C9e',
price: '10',
timeout: 86400,
provider: {
type: 'Azure',
description: '',
environment: {
cluster: {
type: 'Kubernetes',
url: 'http://10.0.0.17/xxx'
},
supportedContainers: [
{
image: 'tensorflow/tensorflow',
tag: 'latest',
checksum:
'sha256:cb57ecfa6ebbefd8ffc7f75c0f00e57a7fa739578a429b6f72a0df19315deadc'
},
{
image: 'tensorflow/tensorflow',
tag: 'latest',
checksum:
'sha256:cb57ecfa6ebbefd8ffc7f75c0f00e57a7fa739578a429b6f72a0df19315deadc'
}
],
supportedServers: [
{
serverId: '1',
serverType: 'xlsize',
price: '50',
cpu: '16',
gpu: '0',
memory: '128gb',
disk: '160gb',
maxExecutionTime: 86400
},
{
serverId: '2',
serverType: 'medium',
price: '10',
cpu: '2',
gpu: '0',
memory: '8gb',
disk: '80gb',
maxExecutionTime: 86400
}
]
}
}
},
additionalInformation: {}
},
serviceAgreementTemplate: {
contractName: 'EscrowComputeExecutionTemplate',
events: [
{
name: 'AgreementCreated',
actorType: 'consumer',
handler: {
moduleName: 'serviceExecutionTemplate',
functionName: 'fulfillLockRewardCondition',
version: '0.1'
}
}
],
fulfillmentOrder: [
'lockReward.fulfill',
'serviceExecution.fulfill',
'escrowReward.fulfill'
],
conditionDependency: {
lockReward: [],
serviceExecution: [],
releaseReward: ['lockReward', 'serviceExecution']
},
conditions: [
{
name: 'lockReward',
timelock: 0,
timeout: 0,
contractName: 'LockRewardCondition',
functionName: 'fulfill',
parameters: [
{
name: '_rewardAddress',
type: 'address',
value: ''
},
{
name: '_amount',
type: 'uint256',
value: ''
}
],
events: [
{
name: 'Fulfilled',
actorType: 'publisher',
handler: {
moduleName: 'lockRewardCondition',
functionName: 'fulfillServiceExecutionCondition',
version: '0.1'
}
}
]
},
{
name: 'serviceExecution',
timelock: 0,
timeout: 0,
contractName: 'ComputeExecutionCondition',
functionName: 'fulfill',
parameters: [
{
name: '_documentId',
type: 'bytes32',
value: ''
},
{
name: '_grantee',
type: 'address',
value: ''
}
],
events: [
{
name: 'Fulfilled',
actorType: 'publisher',
handler: {
moduleName: 'serviceExecution',
functionName: 'fulfillServiceExecutionCondition',
version: '0.1'
}
},
{
name: 'TimedOut',
actorType: 'consumer',
handler: {
moduleName: 'serviceExec',
functionName: 'fulfillServiceExecutionCondition',
version: '0.1'
}
}
]
},
{
name: 'escrowReward',
timelock: 0,
timeout: 0,
contractName: 'EscrowReward',
functionName: 'fulfill',
parameters: [
{
name: '_amount',
type: 'uint256',
value: ''
},
{
name: '_receiver',
type: 'address',
value: ''
},
{
name: '_sender',
type: 'address',
value: ''
},
{
name: '_lockCondition',
type: 'bytes32',
value: ''
},
{
name: '_releaseCondition',
type: 'bytes32',
value: ''
}
],
events: [
{
name: 'Fulfilled',
actorType: 'publisher',
handler: {
moduleName: 'escrowRewardCondition',
functionName: 'verifyRewardTokens',
version: '0.1'
}
}
]
}
]
}
}

View File

@ -9,6 +9,7 @@ export interface ServiceCommon {
serviceEndpoint?: string serviceEndpoint?: string
attributes: any & { attributes: any & {
main: { [key: string]: any } main: { [key: string]: any }
additionalInformation?: { [key: string]: any }
} }
} }

248
test/testdata/ddo-compute.json vendored Normal file
View File

@ -0,0 +1,248 @@
{
"@context": "https://w3id.org/future-method/v1",
"authentication": [],
"created": "2019-04-09T19:02:11Z",
"id": "did:op:8d1b4d73e7af4634958f071ab8dfe7ab0df14019755e444090fd392c8ec9c3f4",
"proof": {
"created": "2019-04-09T19:02:11Z",
"creator": "0x00Bd138aBD70e2F00903268F3Db08f2D25677C9e",
"signatureValue": "1cd57300733bcbcda0beb59b3e076de6419c0d7674e7befb77820b53c79e3aa8f1776effc64cf088bad8cb694cc4d71ebd74a13b2f75893df5a53f3f318f6cf828",
"type": "DDOIntegritySignature"
},
"publicKey": [
{
"id": "did:op:8d1b4d73e7af4634958f071ab8dfe7ab0df14019755e444090fd392c8ec9c3f4",
"owner": "0x00Bd138aBD70e2F00903268F3Db08f2D25677C9e",
"type": "EthereumECDSAKey"
}
],
"service": [
{
"type": "metadata",
"index": 0,
"serviceEndpoint": "http://myaquarius.org/api/v1/provider/assets/metadata/{did}",
"attributes": {
"main": {
"author": "Met Office",
"dateCreated": "2019-02-08T08:13:49Z",
"files": [
{
"url": "https://raw.githubusercontent.com/tbertinmahieux/MSongsDB/master/Tasks_Demos/CoverSongs/shs_dataset_test.txt",
"index": 0,
"checksum": "efb2c764274b745f5fc37f97c6b0e764",
"contentLength": "4535431",
"contentType": "text/csv",
"encoding": "UTF-8",
"compression": "zip"
}
],
"license": "CC-BY",
"name": "UK Weather information 2011",
"price": "1",
"type": "dataset"
},
"additionalInformation": {}
}
},
{
"type": "compute",
"index": 2,
"serviceEndpoint": "http://mybrizo.org/api/v1/brizo/services/compute",
"templateId": "",
"attributes": {
"main": {
"name": "dataAssetComputingServiceAgreement",
"creator": "0x00Bd138aBD70e2F00903268F3Db08f2D25677C9e",
"datePublished": "2019-04-09T19:02:11Z",
"price": "10",
"timeout": 86400,
"provider": {
"type": "Azure",
"description": "",
"environment": {
"cluster": {
"type": "Kubernetes",
"url": "http://10.0.0.17/xxx"
},
"supportedContainers": [
{
"image": "tensorflow/tensorflow",
"tag": "latest",
"checksum": "sha256:cb57ecfa6ebbefd8ffc7f75c0f00e57a7fa739578a429b6f72a0df19315deadc"
},
{
"image": "tensorflow/tensorflow",
"tag": "latest",
"checksum": "sha256:cb57ecfa6ebbefd8ffc7f75c0f00e57a7fa739578a429b6f72a0df19315deadc"
}
],
"supportedServers": [
{
"serverId": "1",
"serverType": "xlsize",
"price": "50",
"cpu": "16",
"gpu": "0",
"memory": "128gb",
"disk": "160gb",
"maxExecutionTime": 86400
},
{
"serverId": "2",
"serverType": "medium",
"price": "10",
"cpu": "2",
"gpu": "0",
"memory": "8gb",
"disk": "80gb",
"maxExecutionTime": 86400
}
]
}
}
},
"additionalInformation": {}
},
"serviceAgreementTemplate": {
"contractName": "EscrowComputeExecutionTemplate",
"events": [
{
"name": "AgreementCreated",
"actorType": "consumer",
"handler": {
"moduleName": "serviceExecutionTemplate",
"functionName": "fulfillLockRewardCondition",
"version": "0.1"
}
}
],
"fulfillmentOrder": [
"lockReward.fulfill",
"serviceExecution.fulfill",
"escrowReward.fulfill"
],
"conditionDependency": {
"lockReward": [],
"serviceExecution": [],
"releaseReward": ["lockReward", "serviceExecution"]
},
"conditions": [
{
"name": "lockReward",
"timelock": 0,
"timeout": 0,
"contractName": "LockRewardCondition",
"functionName": "fulfill",
"parameters": [
{
"name": "_rewardAddress",
"type": "address",
"value": ""
},
{
"name": "_amount",
"type": "uint256",
"value": ""
}
],
"events": [
{
"name": "Fulfilled",
"actorType": "publisher",
"handler": {
"moduleName": "lockRewardCondition",
"functionName": "fulfillServiceExecutionCondition",
"version": "0.1"
}
}
]
},
{
"name": "serviceExecution",
"timelock": 0,
"timeout": 0,
"contractName": "ComputeExecutionCondition",
"functionName": "fulfill",
"parameters": [
{
"name": "_documentId",
"type": "bytes32",
"value": ""
},
{
"name": "_grantee",
"type": "address",
"value": ""
}
],
"events": [
{
"name": "Fulfilled",
"actorType": "publisher",
"handler": {
"moduleName": "serviceExecution",
"functionName": "fulfillServiceExecutionCondition",
"version": "0.1"
}
},
{
"name": "TimedOut",
"actorType": "consumer",
"handler": {
"moduleName": "serviceExec",
"functionName": "fulfillServiceExecutionCondition",
"version": "0.1"
}
}
]
},
{
"name": "escrowReward",
"timelock": 0,
"timeout": 0,
"contractName": "EscrowReward",
"functionName": "fulfill",
"parameters": [
{
"name": "_amount",
"type": "uint256",
"value": ""
},
{
"name": "_receiver",
"type": "address",
"value": ""
},
{
"name": "_sender",
"type": "address",
"value": ""
},
{
"name": "_lockCondition",
"type": "bytes32",
"value": ""
},
{
"name": "_releaseCondition",
"type": "bytes32",
"value": ""
}
],
"events": [
{
"name": "Fulfilled",
"actorType": "publisher",
"handler": {
"moduleName": "escrowRewardCondition",
"functionName": "verifyRewardTokens",
"version": "0.1"
}
}
]
}
]
}
}
]
}