From fa703b309c0dd794b230a325dc6686da1a852bf8 Mon Sep 17 00:00:00 2001 From: cgewecke Date: Tue, 26 Nov 2019 11:35:54 -0800 Subject: [PATCH 1/5] Let plugins manage which client is used --- dist/buidler.plugin.js | 3 ++- dist/truffle.plugin.js | 3 ++- lib/api.js | 9 ++++----- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/dist/buidler.plugin.js b/dist/buidler.plugin.js index 8c005daf..6d861d04 100644 --- a/dist/buidler.plugin.js +++ b/dist/buidler.plugin.js @@ -53,7 +53,8 @@ function plugin() { ui ); - const address = await api.ganache(ganache); + const client = api.client || ganache; + const address = await api.ganache(client); const web3 = new Web3(address); const accounts = await web3.eth.getAccounts(); const nodeInfo = await web3.eth.getNodeInfo(); diff --git a/dist/truffle.plugin.js b/dist/truffle.plugin.js index 57445cd0..dce3c9d2 100644 --- a/dist/truffle.plugin.js +++ b/dist/truffle.plugin.js @@ -36,7 +36,8 @@ async function plugin(config){ truffleUtils.setNetwork(config, api); // Server launch - const address = await api.ganache(truffle.ganache); + const client = api.client || truffle.ganache; + const address = await api.ganache(client); const web3 = new Web3(address); const accounts = await web3.eth.getAccounts(); diff --git a/lib/api.js b/lib/api.js index 0d710e15..6084c723 100644 --- a/lib/api.js +++ b/lib/api.js @@ -39,10 +39,9 @@ class API { this.onIstanbulComplete = config.onIstanbulComplete || this.defaultHook; this.server = null; - this.provider = null; this.defaultPort = 8555; - this.defaultNetworkName = 'soliditycoverage'; this.client = config.client; + this.defaultNetworkName = 'soliditycoverage'; this.port = config.port || this.defaultPort; this.host = config.host || "127.0.0.1"; this.providerOptions = config.providerOptions || {}; @@ -224,9 +223,9 @@ class API { async attachToVM(client){ const self = this; - // Prefer client from options - if(!this.client) this.client = client; - this.server = this.client.server(this.providerOptions); + // Fallback to client from options + if(!client) client = this.client; + this.server = client.server(this.providerOptions); this.assertHasBlockchain(this.server.provider); await this.vmIsResolved(this.server.provider); From 53141137b14c5bde0f4fc195a8dc78b907714079 Mon Sep 17 00:00:00 2001 From: cgewecke Date: Tue, 26 Nov 2019 12:11:06 -0800 Subject: [PATCH 2/5] Use requested network name --- dist/buidler.plugin.js | 5 ++++- dist/plugin-assets/buidler.utils.js | 11 ++++++----- test/units/buidler/flags.js | 7 ++++++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/dist/buidler.plugin.js b/dist/buidler.plugin.js index 6d861d04..6dc82ed3 100644 --- a/dist/buidler.plugin.js +++ b/dist/buidler.plugin.js @@ -69,9 +69,12 @@ function plugin() { pkg.version ]); + // Network Info + const networkName = args.network || api.defaultNetworkName; + ui.report('network', [ - api.defaultNetworkName, + networkName, api.port ]); diff --git a/dist/plugin-assets/buidler.utils.js b/dist/plugin-assets/buidler.utils.js index 05de70d3..ca93aa20 100644 --- a/dist/plugin-assets/buidler.utils.js +++ b/dist/plugin-assets/buidler.utils.js @@ -27,7 +27,7 @@ function normalizeConfig(config, args){ return config; } -function setupNetwork(env, api, taskArgs, ui){ +function setupNetwork(env, api, taskArgs={}, ui){ let networkConfig = {}; if (taskArgs.network){ @@ -48,13 +48,14 @@ function setupNetwork(env, api, taskArgs, ui){ networkConfig.gas = api.gasLimit; networkConfig.gasPrice = api.gasPrice; - const provider = createProvider(api.defaultNetworkName, networkConfig); + const networkName = taskArgs.network || api.defaultNetworkName; + const provider = createProvider(networkName, networkConfig); - env.config.networks[api.defaultNetworkName] = networkConfig; - env.config.defaultNetwork = api.defaultNetworkName; + env.config.networks[networkName] = networkConfig; + env.config.defaultNetwork = networkName; env.network = { - name: api.defaultNetworkName, + name: networkName, config: networkConfig, provider: provider, } diff --git a/test/units/buidler/flags.js b/test/units/buidler/flags.js index 8e451583..3c029689 100644 --- a/test/units/buidler/flags.js +++ b/test/units/buidler/flags.js @@ -52,7 +52,7 @@ describe('Buidler Plugin: command line options', function() { verify.lineCoverage(expected); }); - it('--network (declared port mismatches)', async function(){ + it.only('--network (declared port mismatches)', async function(){ const taskArgs = { network: 'development' // 8545 } @@ -74,6 +74,11 @@ describe('Buidler Plugin: command line options', function() { `Should have used default coverage port 8545: ${mock.loggerOutput.val}` ); + assert( + mock.loggerOutput.val.includes("development"), + `Should have used specified network name: ${mock.loggerOutput.val}` + ); + const expected = [{ file: mock.pathToContract(buidlerConfig, 'Simple.sol'), pct: 100 From e98e23cd325b376ad309f8f188cca98bf4ae3c05 Mon Sep 17 00:00:00 2001 From: cgewecke Date: Tue, 26 Nov 2019 12:21:04 -0800 Subject: [PATCH 3/5] Add builder-ethers test to CI --- scripts/run-buidler.sh | 28 +++++++++++++++++++++++++++- test/units/buidler/flags.js | 2 +- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/scripts/run-buidler.sh b/scripts/run-buidler.sh index bc7dd3f4..00037cc8 100755 --- a/scripts/run-buidler.sh +++ b/scripts/run-buidler.sh @@ -21,6 +21,12 @@ fi echo "PR_PATH >>>>> $PR_PATH" +echo "" +echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" +echo "Simple buidler/buidler-trufflev5 " +echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" +echo "" + # Install buidler e2e test git clone https://github.com/sc-forks/buidler-e2e.git cd buidler-e2e @@ -32,6 +38,26 @@ npx buidler coverage # Test that coverage/ was generated if [ ! -d "coverage" ]; then - echo "ERROR: no coverage folder was created." + echo "ERROR: no coverage folder was created for buidler-trufflev5." + exit 1 +fi + +echo "" +echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" +echo "Simple buidler/buidler-ethers " +echo ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" +echo "" +cd .. +git clone https://github.com/sc-forks/example-buidler-ethers.git +cd example-buidler-ethers +npm install + +# Install and run solidity-coverage @ PR +npm install --save-dev $PR_PATH +npx buidler coverage + +# Test that coverage/ was generated +if [ ! -d "coverage" ]; then + echo "ERROR: no coverage folder was created for buidler-ethers." exit 1 fi diff --git a/test/units/buidler/flags.js b/test/units/buidler/flags.js index 3c029689..3d5d42bc 100644 --- a/test/units/buidler/flags.js +++ b/test/units/buidler/flags.js @@ -52,7 +52,7 @@ describe('Buidler Plugin: command line options', function() { verify.lineCoverage(expected); }); - it.only('--network (declared port mismatches)', async function(){ + it('--network (declared port mismatches)', async function(){ const taskArgs = { network: 'development' // 8545 } From 053e8b21d4e66289cc91f5554bf4fd133003a7cb Mon Sep 17 00:00:00 2001 From: cgewecke Date: Tue, 26 Nov 2019 12:29:33 -0800 Subject: [PATCH 4/5] Add visual conf of correct install --- scripts/run-buidler.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/run-buidler.sh b/scripts/run-buidler.sh index 00037cc8..104d0479 100755 --- a/scripts/run-buidler.sh +++ b/scripts/run-buidler.sh @@ -34,6 +34,8 @@ npm install # Install and run solidity-coverage @ PR npm install --save-dev $PR_PATH +cat package.json + npx buidler coverage # Test that coverage/ was generated @@ -54,6 +56,8 @@ npm install # Install and run solidity-coverage @ PR npm install --save-dev $PR_PATH +cat package.json + npx buidler coverage # Test that coverage/ was generated From cbfd99c4ab4a0e40c665e7e6df5c9358f3d33a04 Mon Sep 17 00:00:00 2001 From: cgewecke Date: Tue, 26 Nov 2019 23:23:00 -0800 Subject: [PATCH 5/5] Use buidlerArguments.network --- dist/buidler.plugin.js | 13 ++----------- dist/plugin-assets/buidler.utils.js | 13 ++++++++----- scripts/run-moloch.sh | 1 + test/units/buidler/flags.js | 8 +++----- test/units/buidler/standard.js | 19 +++++++++++++++++++ 5 files changed, 33 insertions(+), 21 deletions(-) diff --git a/dist/buidler.plugin.js b/dist/buidler.plugin.js index 6dc82ed3..dfdd0dc1 100644 --- a/dist/buidler.plugin.js +++ b/dist/buidler.plugin.js @@ -46,12 +46,7 @@ function plugin() { // ============== // Server launch // ============== - const network = buidlerUtils.setupNetwork( - env, - api, - args, - ui - ); + const network = buidlerUtils.setupNetwork(env, api, ui); const client = api.client || ganache; const address = await api.ganache(client); @@ -69,12 +64,8 @@ function plugin() { pkg.version ]); - - // Network Info - const networkName = args.network || api.defaultNetworkName; - ui.report('network', [ - networkName, + env.network.name, api.port ]); diff --git a/dist/plugin-assets/buidler.utils.js b/dist/plugin-assets/buidler.utils.js index ca93aa20..f4044a1f 100644 --- a/dist/plugin-assets/buidler.utils.js +++ b/dist/plugin-assets/buidler.utils.js @@ -16,7 +16,7 @@ const { createProvider } = require("@nomiclabs/buidler/internal/core/providers/c * @param {BuidlerConfig} config * @return {BuidlerConfig} updated config */ -function normalizeConfig(config, args){ +function normalizeConfig(config, args={}){ config.workingDir = config.paths.root; config.contractsDir = config.paths.sources; config.testDir = config.paths.tests; @@ -27,11 +27,15 @@ function normalizeConfig(config, args){ return config; } -function setupNetwork(env, api, taskArgs={}, ui){ +function setupNetwork(env, api, ui){ let networkConfig = {}; - if (taskArgs.network){ - networkConfig = env.config.networks[taskArgs.network]; + let networkName = (env.buidlerArguments.network !== 'buidlerevm') + ? env.buidlerArguments.network + : api.defaultNetworkName; + + if (networkName !== api.defaultNetworkName){ + networkConfig = env.config.networks[networkName]; const configPort = networkConfig.url.split(':')[2]; @@ -48,7 +52,6 @@ function setupNetwork(env, api, taskArgs={}, ui){ networkConfig.gas = api.gasLimit; networkConfig.gasPrice = api.gasPrice; - const networkName = taskArgs.network || api.defaultNetworkName; const provider = createProvider(networkName, networkConfig); env.config.networks[networkName] = networkConfig; diff --git a/scripts/run-moloch.sh b/scripts/run-moloch.sh index 4c1191ee..e3fc9818 100755 --- a/scripts/run-moloch.sh +++ b/scripts/run-moloch.sh @@ -28,6 +28,7 @@ npm install npm uninstall --save-dev solidity-coverage # Install and run solidity-coverage @ PR +# Should run on network 'localhost' npm install --save-dev $PR_PATH npm run coverage diff --git a/test/units/buidler/flags.js b/test/units/buidler/flags.js index 3d5d42bc..5cf7e317 100644 --- a/test/units/buidler/flags.js +++ b/test/units/buidler/flags.js @@ -53,16 +53,14 @@ describe('Buidler Plugin: command line options', function() { }); it('--network (declared port mismatches)', async function(){ - const taskArgs = { - network: 'development' // 8545 - } - solcoverConfig.port = 8222; mock.install('Simple', 'simple.js', solcoverConfig); mock.buidlerSetupEnv(this); - await this.env.run("coverage", taskArgs); + this.env.buidlerArguments.network = "development"; + + await this.env.run("coverage"); assert( mock.loggerOutput.val.includes("The 'port' values"), diff --git a/test/units/buidler/standard.js b/test/units/buidler/standard.js index 527cca19..36a7abf4 100644 --- a/test/units/buidler/standard.js +++ b/test/units/buidler/standard.js @@ -51,6 +51,25 @@ describe('Buidler Plugin: standard use cases', function() { ); }); + it('default network ("buidlerevm")', async function(){ + mock.install('Simple', 'simple.js', solcoverConfig); + mock.buidlerSetupEnv(this); + + this.env.buidlerArguments.network = "buidlerevm" + + await this.env.run("coverage"); + + assert( + mock.loggerOutput.val.includes("8555"), + `Should have used default coverage port 8555: ${mock.loggerOutput.val}` + ); + + assert( + mock.loggerOutput.val.includes("soliditycoverage"), + `Should have used specified network name: ${mock.loggerOutput.val}` + ); + }); + it('with relative path solidity imports', async function() { mock.installFullProject('import-paths'); mock.buidlerSetupEnv(this);