Skip to content

Commit

Permalink
- unit test update
Browse files Browse the repository at this point in the history
  • Loading branch information
anonymoussprocket committed Jun 13, 2020
1 parent cd4b649 commit 7cf1b49
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 64 deletions.
17 changes: 17 additions & 0 deletions ConseilJS-core/test/_staticData/ConseilResponses.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"KT1UvS7eBoNoP7qmGkfPtTGM7s7pYxLnkUzR-/v2/data/tezos/mainnet/accounts": [ {
"block_level": 655361,
"is_activated": false,
"balance": 0,
"is_baker": false,
"delegate_value": null,
"spendable": null,
"account_id": "KT1UvS7eBoNoP7qmGkfPtTGM7s7pYxLnkUzR",
"manager": null,
"storage": "\"hello\"",
"counter": null,
"block_id": "BLu2kYLJuELGnxqeX1DCKWsnAy6kM3Qii563Ja9nkPtqy3iSCaf",
"script": "parameter string;\nstorage string;\ncode { CAR ;\n NIL operation ;\n PAIR }",
"delegate_setable": null
} ]
}
93 changes: 34 additions & 59 deletions ConseilJS-core/test/chain/tezos/TezosContractIntrospector.spec.ts
Original file line number Diff line number Diff line change
@@ -1,64 +1,39 @@
import { expect } from 'chai';
import { expect, use } from "chai";
import chaiAsPromised from 'chai-as-promised';
import nock from 'nock';
import fetch from 'node-fetch';
import * as log from 'loglevel';

import { TezosContractIntrospector } from '../../../src/chain/tezos/TezosContractIntrospector';
import { Parameter, EntryPoint } from '../../../src/types/tezos/ContractIntrospectionTypes';


describe("Generate EntryPoints From Params", () => {
it('multi-sig', async () => { // https://github.com/murbard/smart-contracts/blob/master/multisig/michelson/multisig.tz as of 2019/dec/30
const entryPoints = await TezosContractIntrospector.generateEntryPointsFromParams(`parameter
(pair
(pair :payload
(nat %counter) # counter, used to prevent replay attacks
(or :action # payload to sign, represents the requested action
(pair :transfer # transfer tokens
(mutez %amount) # amount to transfer
(contract %dest unit)) # destination to transfer to
(or
(option %delegate key_hash) # change the delegate to this address
(pair %change_keys # change the keys controlling the multisig
(nat %threshold) # new threshold
(list %keys key))))) # new list of keys
(list %sigs (option signature))); # signatures`);

entryPoints.forEach(e => {
console.log(formatEntryPoint(e));
//console.log(`invocation pattern: ${e.generateInvocationString()}`);
console.log(`invocation pattern: ${e.generateSampleInvocation()}`);
});
import { registerFetch, registerLogger } from '../../../src/index';

expect(entryPoints.length).to.be.greaterThan(0);
});
import mochaAsync from '../../mochaTestHelper';
import * as responses from "../../_staticData/ConseilResponses.json";

/*it('generic multi-sig', async () => { // https://github.com/murbard/smart-contracts/blob/master/multisig/michelson/generic.tz as of 2019/dec/30
const entryPoints = await TezosContractIntrospector.generateEntryPointsFromParams(`parameter
(or
(unit %default)
(pair %main
(pair :payload
(nat %counter) # counter, used to prevent replay attacks
(or :action # payload to sign, represents the requested action
(lambda %operation unit (list operation))
(pair %change_keys # change the keys controlling the multisig
(nat %threshold) # new threshold
(list %keys key)))) # new list of keys
(list %sigs (option signature)))); # signatures`);
entryPoints.forEach(e => {
console.log(`\n${e.name + '(' + e.parameters.map(p => p.type + ' ' + p.name).join(', ') + ')'}`)
//console.log(`invocation pattern: ${e.generateInvocationString()}`);
console.log(`invocation pattern: ${e.generateSampleInvocation()}`);
});
import { TezosContractIntrospector } from '../../../src/chain/tezos/TezosContractIntrospector';

expect(entryPoints.length).to.be.greaterThan(0);
});*/
use(chaiAsPromised);

describe("TezosContractIntrospector test", () => {
const serverConfig = { url: 'https://conseil.server', apiKey: 'key', network: 'mainnet' };

before(mochaAsync(async () => {
const logger = log.getLogger('conseiljs');
logger.setLevel('error', false);
registerLogger(logger);
registerFetch(fetch);
}));

it('getAccountForBlock test', mochaAsync(async () => {
const server = nock(serverConfig.url);
server
.filteringRequestBody(body => '*')
.post(`/v2/data/tezos/mainnet/accounts`)
.reply(200, responses['KT1UvS7eBoNoP7qmGkfPtTGM7s7pYxLnkUzR-/v2/data/tezos/mainnet/accounts']);

const result = await TezosContractIntrospector.generateEntryPointsFromAddress(serverConfig, 'mainnet', 'KT1UvS7eBoNoP7qmGkfPtTGM7s7pYxLnkUzR');

expect(result).to.exist;
expect(result.length).to.equal(1);
expect(result[0].name).to.equal('default');
}));
});

function formatEntryPoint(e: EntryPoint) {
let s = '';
s += !!e.name ? e.name : '';
s += '(';
s += e.parameters.map(p => p.type + (!!p.name ? ` ${p.name}`: '')).join(', ');
s += ')';
return s;
}
13 changes: 12 additions & 1 deletion ConseilJS-core/test/chain/tezos/TezosMessageCodec.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,15 +105,26 @@ describe("Tezos P2P message decoder test suite", () => {
// TODO
});

it("correctly parse a reveal", () => {
it("correctly parse a reveal (Athens)", () => {
let forgedReveal = "97648f6470b21f904cb8d11eaf097f245eb42f5073fa51404d969cdfd4a4579e07000069ef8fb5d47d8a4321c94576a2316a632be8ce890094fe19904e00004c7b0501f6ea08f472b7e88791d3b8da49d64ac1e2c90f93c27e6531473305c6";
//6b0034a00f9b7964943b4ab583a8d1f7241a0cb9742c00bac104904e0000e92113585804d494a642fb1aa6f0e6c33e5d54a2fe7f05f54de080f30662d554
const result = TezosMessageCodec.parseReveal(forgedReveal);
expect(result.operation.kind).to.equal("reveal");
expect(result.operation.source).to.equal("tz1VJAdH2HRUZWfohXW59NPYQKFMe1csroaX");
expect(result.operation.fee).to.equal('0'); // microtez
expect(result.operation.gas_limit).to.equal('10000'); // microtez
expect(result.operation.storage_limit).to.equal('0'); // microtez
});

it("correctly parse a reveal (Babylon)", () => {
let forgedReveal = "97648f6470b21f904cb8d11eaf097f245eb42f5073fa51404d969cdfd4a4579e6b0034a00f9b7964943b4ab583a8d1f7241a0cb9742c00bac104904e0000e92113585804d494a642fb1aa6f0e6c33e5d54a2fe7f05f54de080f30662d554";
const result = TezosMessageCodec.parseReveal(forgedReveal);
expect(result.operation.kind).to.equal("reveal");
expect(result.operation.source).to.equal("tz1QSHaKpTFhgHLbqinyYRjxD5sLcbfbzhxy");
expect(result.operation.fee).to.equal('0'); // microtez
expect(result.operation.gas_limit).to.equal('10000'); // microtez
expect(result.operation.storage_limit).to.equal('0'); // microtez*/
});
});

describe("Tezos P2P message encoder test suite", () => {
Expand Down
13 changes: 10 additions & 3 deletions ConseilJS-core/test/chain/tezos/TezosNodeReader.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,9 @@ import * as log from 'loglevel';
import { registerFetch, registerLogger } from '../../../src/index';

import mochaAsync from '../../mochaTestHelper';
import { accounts, contracts, drips } from "../../_staticData/accounts.json";
import * as responses from "../../_staticData/TezosResponses.json";

import { TezosNodeReader } from "../../../src/chain/tezos/TezosNodeReader";
import { TezosMessageUtils } from "../../../src/chain/tezos/TezosMessageUtil";

use(chaiAsPromised);

Expand Down Expand Up @@ -101,5 +99,14 @@ describe('TezosNodeWriter tests', () => {

it('estimateBranchTimeout test', mochaAsync(async () => { }));

it('getMempoolOperationsForAccount test', mochaAsync(async () => { }));
it('getMempoolOperationsForAccount test', mochaAsync(async () => {
const server = nock(serverUrl);
server
.get(`/chains/main/mempool/pending_operations`)
.reply(200, responses['chains/main/mempool/pending_operations']);

const result = await TezosNodeReader.getMempoolOperationsForAccount(serverUrl, 'tz1Y8zdtVe2wWe7QdNTnAdwBceqYBCdA3Jj8');

expect(result).to.exist;
}));
});
2 changes: 1 addition & 1 deletion ConseilJS-core/test/chain/tezos/TezosNodeWriter.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ describe('TezosNodeWriter tests', () => {
const server = nock(serverUrl);
server
.get(`/chains/main/blocks/head`)
.reply(200, responses['sendTransactionOperation-blocks/head'])
.reply(200, responses['sendTransactionOperation-blocks/head']);
server
.get(`/chains/main/blocks/head/context/contracts/${accounts[0].publicKeyHash}/counter`)
.reply(200, responses[`chains/main/blocks/head/context/contracts/${accounts[0].publicKeyHash}/counter`])
Expand Down

0 comments on commit 7cf1b49

Please sign in to comment.