2018-10-29 17:28:40 +01:00
|
|
|
import {assert} from "chai"
|
2018-11-05 10:01:58 +01:00
|
|
|
import AquariusConnectorProvider from "../../src/aquarius/AquariusConnectorProvider"
|
2018-10-29 17:28:40 +01:00
|
|
|
import ConfigProvider from "../../src/ConfigProvider"
|
2018-11-05 14:56:14 +01:00
|
|
|
import DDOCondition from "../../src/ddo/Condition"
|
2018-11-05 10:01:58 +01:00
|
|
|
import DDO from "../../src/ddo/DDO"
|
2018-11-05 14:56:14 +01:00
|
|
|
import Parameter from "../../src/ddo/Parameter"
|
2018-11-05 10:08:06 +01:00
|
|
|
import Service from "../../src/ddo/Service"
|
2018-10-29 17:28:40 +01:00
|
|
|
import Account from "../../src/ocean/Account"
|
|
|
|
import IdGenerator from "../../src/ocean/IdGenerator"
|
|
|
|
import Ocean from "../../src/ocean/Ocean"
|
2018-11-05 14:56:14 +01:00
|
|
|
import Condition from "../../src/ocean/ServiceAgreements/Condition"
|
|
|
|
import ServiceAgreement from "../../src/ocean/ServiceAgreements/ServiceAgreement"
|
|
|
|
import ServiceAgreementTemplate from "../../src/ocean/ServiceAgreements/ServiceAgreementTemplate"
|
2018-11-05 17:50:56 +01:00
|
|
|
import Access from "../../src/ocean/ServiceAgreements/Templates/Access"
|
2018-10-30 08:30:05 +01:00
|
|
|
import config from "../config"
|
2018-11-07 14:33:56 +01:00
|
|
|
import TestContractHandler from "../keeper/TestContractHandler"
|
2018-11-05 10:01:58 +01:00
|
|
|
import AquariusConnectorMock from "../mocks/AquariusConnector.mock"
|
2018-10-29 17:28:40 +01:00
|
|
|
|
|
|
|
let ocean: Ocean
|
|
|
|
let accounts: Account[]
|
2018-11-01 08:31:21 +01:00
|
|
|
let publisherAccount: Account
|
|
|
|
let consumerAccount: Account
|
|
|
|
|
2018-11-14 15:44:25 +01:00
|
|
|
let service: Service
|
2018-10-29 17:28:40 +01:00
|
|
|
|
|
|
|
describe("ServiceAgreement", () => {
|
|
|
|
|
|
|
|
before(async () => {
|
|
|
|
ConfigProvider.setConfig(config)
|
2018-11-07 14:33:56 +01:00
|
|
|
await TestContractHandler.prepareContracts()
|
2018-10-29 17:28:40 +01:00
|
|
|
ocean = await Ocean.getInstance(config)
|
|
|
|
accounts = await ocean.getAccounts()
|
|
|
|
|
2018-11-01 08:31:21 +01:00
|
|
|
publisherAccount = accounts[1]
|
|
|
|
consumerAccount = accounts[2]
|
|
|
|
|
2018-11-06 16:13:12 +01:00
|
|
|
const serviceAgreementTemplate: ServiceAgreementTemplate =
|
|
|
|
new ServiceAgreementTemplate(new Access())
|
2018-11-05 10:01:58 +01:00
|
|
|
|
|
|
|
// get condition keys from template
|
2018-11-06 16:13:12 +01:00
|
|
|
const conditions: Condition[] = await serviceAgreementTemplate.getConditions()
|
2018-11-05 10:01:58 +01:00
|
|
|
|
|
|
|
// create ddo conditions out of the keys
|
2018-11-05 14:56:14 +01:00
|
|
|
const ddoConditions: DDOCondition[] = conditions.map((condition): DDOCondition => {
|
2018-11-05 10:01:58 +01:00
|
|
|
return {
|
2018-11-05 14:56:14 +01:00
|
|
|
name: condition.methodReflection.methodName,
|
2018-11-07 08:43:04 +01:00
|
|
|
timeout: condition.timeout,
|
2018-11-05 14:56:14 +01:00
|
|
|
conditionKey: condition.condtionKey,
|
|
|
|
parameters: condition.methodReflection.inputs.map((input) => {
|
|
|
|
return {
|
|
|
|
...input,
|
|
|
|
value: "xx",
|
|
|
|
}as Parameter
|
|
|
|
}),
|
|
|
|
} as DDOCondition
|
2018-11-05 10:01:58 +01:00
|
|
|
})
|
|
|
|
|
2018-11-14 15:44:25 +01:00
|
|
|
service = {
|
|
|
|
type: "Access",
|
|
|
|
serviceDefinitionId: IdGenerator.generateId(),
|
|
|
|
templateId: serviceAgreementTemplate.getId(),
|
|
|
|
conditions: ddoConditions,
|
|
|
|
} as Service
|
2018-10-29 17:28:40 +01:00
|
|
|
})
|
|
|
|
|
2018-11-07 08:43:04 +01:00
|
|
|
describe("#signServiceAgreement()", () => {
|
2018-11-12 08:33:19 +01:00
|
|
|
it("should sign an service agreement", async () => {
|
|
|
|
|
|
|
|
const id: string = IdGenerator.generateId()
|
|
|
|
const did: string = `did:op:${id}`
|
2018-11-14 15:44:25 +01:00
|
|
|
const ddo = new DDO({id: did, service: [service]})
|
2018-11-12 08:33:19 +01:00
|
|
|
const assetId: string = IdGenerator.generateId()
|
|
|
|
const serviceAgreementId: string = IdGenerator.generateId()
|
|
|
|
|
|
|
|
// @ts-ignore
|
|
|
|
AquariusConnectorProvider.setConnector(new AquariusConnectorMock(ddo))
|
|
|
|
const serviceAgreementSignature: string =
|
2018-11-14 15:44:25 +01:00
|
|
|
await ServiceAgreement.signServiceAgreement(assetId, ddo, service.serviceDefinitionId,
|
|
|
|
serviceAgreementId, consumerAccount)
|
2018-11-12 08:33:19 +01:00
|
|
|
|
|
|
|
assert(serviceAgreementSignature)
|
|
|
|
assert(serviceAgreementSignature.startsWith("0x"))
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe("#executeServiceAgreement()", () => {
|
2018-11-01 08:31:21 +01:00
|
|
|
it("should execute an service agreement", async () => {
|
2018-10-29 17:28:40 +01:00
|
|
|
|
2018-11-05 10:01:58 +01:00
|
|
|
const id: string = IdGenerator.generateId()
|
|
|
|
const did: string = `did:op:${id}`
|
2018-11-14 15:44:25 +01:00
|
|
|
const ddo = new DDO({id: did, service: [service]})
|
2018-11-01 08:31:21 +01:00
|
|
|
const assetId: string = IdGenerator.generateId()
|
2018-11-05 10:01:58 +01:00
|
|
|
const serviceAgreementId: string = IdGenerator.generateId()
|
2018-11-01 08:31:21 +01:00
|
|
|
|
2018-11-05 10:01:58 +01:00
|
|
|
// @ts-ignore
|
|
|
|
AquariusConnectorProvider.setConnector(new AquariusConnectorMock(ddo))
|
2018-11-12 08:33:19 +01:00
|
|
|
const serviceAgreementSignature: string =
|
2018-11-14 15:44:25 +01:00
|
|
|
await ServiceAgreement.signServiceAgreement(assetId, ddo, service.serviceDefinitionId,
|
|
|
|
serviceAgreementId, consumerAccount)
|
2018-11-12 08:33:19 +01:00
|
|
|
|
2018-10-29 17:28:40 +01:00
|
|
|
const serviceAgreement: ServiceAgreement =
|
2018-11-14 15:44:25 +01:00
|
|
|
await ServiceAgreement.executeServiceAgreement(assetId, ddo, service.serviceDefinitionId,
|
|
|
|
serviceAgreementId, serviceAgreementSignature, consumerAccount, publisherAccount)
|
2018-10-29 17:28:40 +01:00
|
|
|
assert(serviceAgreement)
|
2018-11-05 10:01:58 +01:00
|
|
|
|
|
|
|
const serviceDefinitionId = serviceAgreement.getId()
|
|
|
|
assert(serviceDefinitionId)
|
|
|
|
assert(serviceDefinitionId !== did)
|
2018-10-29 17:28:40 +01:00
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe("#getStatus()", () => {
|
2018-11-01 08:31:21 +01:00
|
|
|
it("should get the status of a newly created service agreement", async () => {
|
2018-10-29 17:28:40 +01:00
|
|
|
|
2018-11-05 10:01:58 +01:00
|
|
|
const id: string = IdGenerator.generateId()
|
|
|
|
const did: string = `did:op:${id}`
|
2018-11-14 15:44:25 +01:00
|
|
|
const ddo = new DDO({id: did, service: [service]})
|
2018-11-01 08:31:21 +01:00
|
|
|
const assetId: string = IdGenerator.generateId()
|
2018-11-05 10:01:58 +01:00
|
|
|
const serviceAgreementId: string = IdGenerator.generateId()
|
2018-11-01 08:31:21 +01:00
|
|
|
|
2018-11-05 10:01:58 +01:00
|
|
|
// @ts-ignore
|
|
|
|
AquariusConnectorProvider.setConnector(new AquariusConnectorMock(ddo))
|
2018-11-12 08:33:19 +01:00
|
|
|
const serviceAgreementSignature: string =
|
2018-11-14 15:44:25 +01:00
|
|
|
await ServiceAgreement.signServiceAgreement(assetId, ddo, service.serviceDefinitionId,
|
|
|
|
serviceAgreementId, consumerAccount)
|
2018-11-12 08:33:19 +01:00
|
|
|
assert(serviceAgreementSignature)
|
|
|
|
|
2018-10-29 17:28:40 +01:00
|
|
|
const serviceAgreement: ServiceAgreement =
|
2018-11-14 15:44:25 +01:00
|
|
|
await ServiceAgreement.executeServiceAgreement(assetId, ddo, service.serviceDefinitionId,
|
|
|
|
serviceAgreementId, serviceAgreementSignature, consumerAccount, publisherAccount)
|
2018-11-01 08:31:21 +01:00
|
|
|
assert(serviceAgreement)
|
2018-11-05 10:01:58 +01:00
|
|
|
|
2018-10-29 17:28:40 +01:00
|
|
|
const status = await serviceAgreement.getStatus()
|
2018-11-01 08:31:21 +01:00
|
|
|
assert(status === false)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe("#grantAccess()", () => {
|
|
|
|
it("should grant access in that service agreement", async () => {
|
|
|
|
|
2018-11-05 10:01:58 +01:00
|
|
|
const id: string = IdGenerator.generateId()
|
|
|
|
const did: string = `did:op:${id}`
|
2018-11-14 15:44:25 +01:00
|
|
|
const ddo = new DDO({id: did, service: [service]})
|
2018-11-01 08:31:21 +01:00
|
|
|
const assetId: string = IdGenerator.generateId()
|
2018-11-05 10:01:58 +01:00
|
|
|
const serviceAgreementId: string = IdGenerator.generateId()
|
2018-11-01 08:31:21 +01:00
|
|
|
|
2018-11-05 10:01:58 +01:00
|
|
|
// @ts-ignore
|
|
|
|
AquariusConnectorProvider.setConnector(new AquariusConnectorMock(ddo))
|
2018-11-12 08:33:19 +01:00
|
|
|
const serviceAgreementSignature: string =
|
2018-11-14 15:44:25 +01:00
|
|
|
await ServiceAgreement.signServiceAgreement(assetId, ddo, service.serviceDefinitionId,
|
|
|
|
serviceAgreementId, consumerAccount)
|
2018-11-12 08:33:19 +01:00
|
|
|
assert(serviceAgreementSignature)
|
|
|
|
|
2018-11-01 08:31:21 +01:00
|
|
|
const serviceAgreement: ServiceAgreement =
|
2018-11-14 15:44:25 +01:00
|
|
|
await ServiceAgreement.executeServiceAgreement(assetId, ddo, service.serviceDefinitionId,
|
|
|
|
serviceAgreementId, serviceAgreementSignature, consumerAccount, publisherAccount)
|
2018-11-01 08:31:21 +01:00
|
|
|
assert(serviceAgreement)
|
|
|
|
|
2018-11-05 10:01:58 +01:00
|
|
|
const fulfilled: boolean = await serviceAgreement.grantAccess(assetId, IdGenerator.generateId())
|
2018-11-01 08:31:21 +01:00
|
|
|
assert(fulfilled)
|
2018-10-29 17:28:40 +01:00
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|