diff --git a/package.json b/package.json index 8cb72e8c201f9aa0e37a632803f3fd9abfad4071..b6c18f295b5caf35e719e87e137c4c8851b320cd 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "main": "index.js", "license": "MIT", "scripts": { - "install": "tsc" + "install": "tsc", + "test": "mocha tests/" }, "dependencies": { "express": "^4.16.4", @@ -22,7 +23,7 @@ "@types/request-promise": "^4.1.42", "@types/should": "^13.0.0", "assert": "^1.4.1", - "duniter": "https://git.duniter.org/nodes/typescript/duniter.git", + "duniter": "^1.7.6", "mocha": "^5.2.0", "request": "^2.88.0", "request-promise": "^4.2.2", diff --git a/tests/gva.ts b/tests/gva.ts index 6bbda23cf1b40f4c9da8f8cdd8e7eda1e10ddadc..d48e78aa4fcd277f24c1c30a3cbb9c739b49b7fe 100644 --- a/tests/gva.ts +++ b/tests/gva.ts @@ -1,12 +1,11 @@ import * as assert from "assert" -import {NewTestingServer, TestingServer} from "duniter/test/integration/tools/toolbox"; import {gvaHttpListen} from "../src/network"; import {Underscore} from "duniter/app/lib/common-libs/underscore"; -import {TestUser} from "duniter/test/integration/tools/TestUser"; import {TestGvaClient} from "./test-gva-client"; import * as http from "http"; import {GvaTestUser} from "./test-user"; import {DBBlock} from "duniter/app/lib/db/DBBlock"; +import {NewTestingServer, TestingServer} from './test-tools' export const prepareDuniterServer = async (options:any) => { @@ -15,8 +14,17 @@ export const prepareDuniterServer = async (options:any) => { const s1 = NewTestingServer(Underscore.extend({ pair: catKeyring }, options || {})); - const cat = new TestUser('cat', catKeyring, { server: s1 }); - const tac = new TestUser('tac', tacKeyring, { server: s1 }); + const cat = { + uid: 'cat', + pub: catKeyring.pub, + sec: catKeyring.sec + } + + const tac = { + uid: 'tac', + pub: tacKeyring.pub, + sec: tacKeyring.sec + } await s1._server.initWithDAL() diff --git a/tests/test-tools.ts b/tests/test-tools.ts new file mode 100644 index 0000000000000000000000000000000000000000..bd603843d77b82c2caddeb02eb243f351f3a70f9 --- /dev/null +++ b/tests/test-tools.ts @@ -0,0 +1,86 @@ +import {Server} from 'duniter/server' +import {BlockProver} from 'duniter/app/modules/prover/lib/blockProver'; +import {ProverDependency} from 'duniter/app/modules/prover'; +import * as path from "path" +import * as os from "os" +import {BmaDependency} from 'duniter/app/modules/bma'; + +export class TestingServer { + + constructor( + private port:number, + private server:Server) { + + ProverDependency.duniter.methods.hookServer(server) + + server.addEndpointsDefinitions(async () => { + return BmaDependency.duniter.methods.getMainEndpoint(server.conf) + }) + } + + get _server(): Server { + return this.server + } + + async commit(options:any = null) { + const proven = await this.generateNext(options) + await this.server.writeBlock(proven, true, true) // The resolution is done manually + const blocksResolved = await this.server.BlockchainService.blockResolution() + if (!blocksResolved) { + throw Error('BLOCK_WASNT_COMMITTED') + } + return blocksResolved + } + + async closeCluster() { + const server:Server = this.server + if ((server as any)._utProver) { + const farm = await (server as any)._utProver.getWorker() + await farm.shutDownEngine() + } + } + + private generateNext(options:any) { + const server = this.server as any + // Brings a priver to the server + if (!server._utProver) { + server._utProver = new BlockProver(server) + server._utGenerator = ProverDependency.duniter.methods.blockGenerator(server, server._utProver) + } + return server._utGenerator.makeNextBlock(null, null, options) + } +} + +const MEMORY_MODE = true; +const CURRENCY_NAME = 'duniter_unit_test_currency'; +const HOST = '127.0.0.1'; +let PORT = 10000; + +export function NewTestingServer(conf:any) { + const host = conf.host || HOST + const port = conf.port || PORT++ + const commonConf = { + nobma: false, + bmaWithCrawler: true, + port: port, + ipv4: host, + remoteipv4: host, + currency: conf.currency || CURRENCY_NAME, + httpLogs: true, + forksize: conf.forksize || 3, + }; + if (conf.sigQty === undefined) { + conf.sigQty = 1; + } + // Disable UPnP during tests + if (!conf.ws2p) { + conf.ws2p = { upnp: false } + } + Object.keys(commonConf).forEach(k => conf[k] = (commonConf as any)[k]) + const server = new Server( + path.resolve(path.join(os.homedir(), '/.config/duniter/' + (conf.homename || 'dev_unit_tests'))), + conf.memory !== undefined ? conf.memory : MEMORY_MODE, + conf); + + return new TestingServer(port, server) +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index b0d0470a6a4178f969acc06ef6ee42d5b23575ff..14eae28c07d1ade3b27fbcc78c69daf8b27e3743 100644 --- a/yarn.lock +++ b/yarn.lock @@ -840,9 +840,9 @@ diff@3.5.0, diff@^3.1.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" -"duniter@https://git.duniter.org/nodes/typescript/duniter.git": - version "1.7.1" - resolved "https://git.duniter.org/nodes/typescript/duniter.git#d37aa0609dbaf21c34568633958c2bc17d3dc26a" +duniter@^1.7.6: + version "1.7.6" + resolved "https://registry.yarnpkg.com/duniter/-/duniter-1.7.6.tgz#78dc57e77559be39653cfdef2ebada05619a4c1f" dependencies: "@types/leveldown" "^4.0.0" "@types/levelup" "^3.1.0"